Jump to content
IGNORED

RXB - Rich Extended Basic


Bones-69

Recommended Posts

RXB 2017 or 2018 update progress:

 

(Removing all commands so the XB commands are smaller in number for each CALL done, thus they do double or triple duty for more speed.)

 

1. Removed CALL XBPGM and now CALL XB or CALL XB("DSK#.FILENAME") replaced this command.

 

2. Removed CALL EAPGM, CALL EALR and CALL EAED now CALL EA or CALL EA("DSK#.FILENAME") replaced these commands.

(Rich Editor Assembler figures out what kind of file is selected to loads and runs that menu automatically.)

 

3. Removed CALL AMSBANK and now CALL SAMS(lowbank#,highbank#) replaced this command.

a. Removed CALL AMSON and now CALL SAMS("ON") replaced this command.

b. Removed CALL AMSOFF and now CALL SAMS("OFF") replaced this command.

c. Removed CALL AMSMAP and now CALL SAMS("MAP") replaced this command.

d. Removed CALL AMSPASS and now CALL SAMS("PASS") replaced this command.

 

4. Removed CALL AMSINIT as now when RXB boots it sets up SAMS now.

 

5. Removed for lack of use:

a. CALL DUPCHAR

b. CALL DUPCOLOR

c. CALL SWAPCHAR

d. CALL SWAPCOLOR

 

6. Repaired CALL FCOPY("DEVICE PATH',"FILENAME","DEVICE PATH","FILENAME") introduced a error in source code I did not see.

  • Like 3
Link to comment
Share on other sites

RXB 2017 or 2018 update progress:

 

(Removing all commands so the XB commands are smaller in number for each CALL done, thus they do double or triple duty for more speed.)

 

 

5. Removed for lack of use:

a. CALL DUPCHAR

b. CALL DUPCOLOR

c. CALL SWAPCHAR

d. CALL SWAPCOLOR

 

 

Rich, I think these commands have a lot of potential and should be preserved. My 2 cents.

  • Like 1
Link to comment
Share on other sites

 

Rich, I think these commands have a lot of potential and should be preserved. My 2 cents.

Well I could make them 1 command:

 

CALL CHAR(character-code,D or S,character-code)

{ "D" for Duplicate patterns or "S" for Swap character patterns}

 

CALL COLOR(character-set,D or S,character-set)

{ "D" for Duplicate character-set colors or "S" for Swap character-set colors}

or

CALL COLOR(Spirte#,D or S,Sprite#)

{ "D" for Duplicate Sprite color and "S" for Swap Sprite colors}

 

This would continue to reduce command numbers in list and not have a huge effect on performance for CHAR or COLOR.

 

NOTE: It occurred I could add in R for REVERSE PATTERN in CALL CHAR, or I for INVERSE turning off pixels that are on and off pixels on.

Example:

CALL CHAR(character-code,R) or CALL CHAR(character-code,I)

Edited by RXB
  • Like 2
Link to comment
Share on other sites

 

Rich, I think these commands have a lot of potential and should be preserved. My 2 cents.

Ok finished the new version sticking with your request kinda...

 

Normal XB or RXB:

CALL CHAR(char#,pattern-string)

 

RXB 2012 introduced:

CALL CHAR(ALL,pattern-string) ! The replaces all characters from 30 to 159 with the pattern-string

 

RXB current beta

CALL CHAR(DUPLICATE,char#,char#) ! You can use D or DUP or Duplicate the first letter only matters and this duplicates a string-pattern from first char# to second char#

 

CALL CHAR(SWAP,char#,char#) ! You can use S or SWAP or Swap the first letter only matters and this swaps a string-pattern from first char# with second char#

Link to comment
Share on other sites

Great! Thanks! When will the new binaries be available?

Well have a portion of XB ROMs that I am really puzzled about.

You can find this section in the SOURCE of XB ROMs I posted several times now.....

* R8 (CHAT) = 10 ?                
LN7F8C MOV  R11,R3           *# Save Return address in R3             
LN7F8E MOV  R8,R0            * Put R8 into R0          
LN7F90 LI   R2,>000A         * Put >000A into R2 (>000A = 10)            
LN7F94 AI   R0,>FFD0         * Add >FFD0 into R0              
LN7F98 C    R0,R2            * R0 = R2 ?          
LN7F9A JL   LN7FAC           * Lower jump           
LN7F9C CLR  R0               * Zero out R0         
LN7F9E B    *R3              * RETURN
*                    
LN7FA0 MPY  R2,R0            *# Muliply R2 by R0                
LN7FA2 MOV  R0,R0            * Set status byte?         
LN7FA4 JNE  LN7F48           * Not Equal Error       
LN7FA6 MOV  R1,R0            * PUt R1 into R0          
LN7FA8 A    R8,R0            * Add R8 into R0          
LN7FAA JLT  LN7F48           * Lower Than jump           
LN7FAC BL   @LN6FBA          *# Put word at VARW at VDP Address in R15              
LN7FB0 MOVB R1,*R4           Put MSB R1 into Address MSB R4          
LN7FB2 JEQ  LN7FC0           * Equal jump           
LN7FB4 AI   R8,>FFD0         * Add >FFD0 into R8          
LN7FB8 C    R8,R2            * R8 = R2 ?          
LN7FBA JL   LN7FA0           *# Lower jump             
LN7FBC DEC  @VARW            * VAR0  - 1         
LN7FC0 CLR  R8               *# Zero out R8               
LN7FC2 MOV  R0,R0            *# Set Status byte?              
LN7FC4 JEQ  LN7F48           * Equal jump           
LN7FC6 B    *R3              * RETURN
* 
* TOKEN LIST                 
LN7FC8 BYTE >81              *# (ELSE Token) 12 bytes Called from LN7D38  
LN7FC9 BYTE >85              * (GO Token)
LN7FCA BYTE >86              * (GOTO Token) 
LN7FCB BYTE >87              * (GOSUB Token)      
LN7FCC BYTE >88              * (RETURN Token) 
LN7FCD BYTE ?8E              * (BREAK Token) 
LN7FCE BYTE >8F              * (UNBREAK Token)
LN7FCF BYTE >94              * (RESTORE Token)       
LN7FD0 BYTE >A5              * (ERROR Token)
LN7FD1 BYTE >A9              * (RUN Token)
LN7FD2 BYTE >B0              * (THEN Token) 
LN7FD3 BYTE >ED              * (USING Token) 
*         
LN7FD4 BYTE >FF
LN7FD5 BYTE >00              * #        
LN7FD6 DATA >020C
LN7FD8 DATA >0528             
LN7FDA DATA >0728              
LN7FDE DATA >0828         
LN7FE0 DATA >8200              
LN7FE2 DATA >833C
LN7FE4 DATA >9328        
LN7FE6 DATA >9A3C
LN7FE8 DATA >9D6C     
LN7FEA DATA >A15C
LN7FEC DATA >A322
*
LN7FD4 SOCB R0,*R12+                    >FF00              '..'           7FD4
LN7FD6 LI   R12,>0528                   >020C,>0528        '...('         7FD6
LN7FDA SETO @>0828(R8)                  >0728,>0828        '.(.('         7FDA
LN7FDE C    R0,R8                       >8200              '..'           7FDE
LN7FE0 C    *R12+,R12                   >833C              '.<'           7FE0
LN7FE2 CB   @>9A3C(R8),R12              >9328,>9A3C        '.(.<'         7FE2
LN7FE6 CB   @>A15C(R12),*R5+            >9D6C,>A15C        '.l.\'         7FE6
LN7FEA A    @>FF00(R2),R12              >A322,>FF00        '."..'         7FEA
LN7FEE ANDI R0,>0100                    >0240,>0100        '.@..'         7FEE
LN7FF2 JEQ  >7FF8                       >1302              '..'           7FF2
LN7FF4 SB   @>7D65,*R4                  >7520,>7D65        'u }e'         7FF4
LN7FF8 B    *R11                        >045B              '.['           7FF8
       AORG >7FFE                                                             
LN7FFE                                                                    7FFE
LN7FFE MOV  R12,*R10                    >C68C              '..'           7FFE
SLAST  END                                                                    
                               
* ANDI R0,>0100 or Subract byte MSB from Address at R4        
LN7FEE ANDI R0,>0100         *# Set only the 0's          
LN7FF2 JEQ  LN7FF8           * Equal jump           
LN7FF4 SB   @LN7D65,*R4      * Subtract >20 from Address at MSB of R4                 
LN7FF8 B    *R11             *# RETURN
*                 
LN7FFA DATA >0000
LN7FFC DATA >0000                          
LN7FFE DATA >9226                   
SLAST  END     

Really puzzled about this section and what is going on.

Link to comment
Share on other sites

That looks like the disassembler went off the rails somewhere.
Are all entry points into that range accounted for?

Well have a portion of XB ROMs that I am really puzzled about.

You can find this section in the SOURCE of XB ROMs I posted several times now.....

* R8 (CHAT) = 10 ?                
LN7F8C MOV  R11,R3           *# Save Return address in R3             
LN7F8E MOV  R8,R0            * Put R8 into R0          
LN7F90 LI   R2,>000A         * Put >000A into R2 (>000A = 10)            
LN7F94 AI   R0,>FFD0         * Add >FFD0 into R0              
LN7F98 C    R0,R2            * R0 = R2 ?          
LN7F9A JL   LN7FAC           * Lower jump           
LN7F9C CLR  R0               * Zero out R0         
LN7F9E B    *R3              * RETURN
*                    
LN7FA0 MPY  R2,R0            *# Muliply R2 by R0                
LN7FA2 MOV  R0,R0            * Set status byte?         
LN7FA4 JNE  LN7F48           * Not Equal Error       
LN7FA6 MOV  R1,R0            * PUt R1 into R0          
LN7FA8 A    R8,R0            * Add R8 into R0          
LN7FAA JLT  LN7F48           * Lower Than jump           
LN7FAC BL   @LN6FBA          *# Put word at VARW at VDP Address in R15              
LN7FB0 MOVB R1,*R4           Put MSB R1 into Address MSB R4          
LN7FB2 JEQ  LN7FC0           * Equal jump           
LN7FB4 AI   R8,>FFD0         * Add >FFD0 into R8          
LN7FB8 C    R8,R2            * R8 = R2 ?          
LN7FBA JL   LN7FA0           *# Lower jump             
LN7FBC DEC  @VARW            * VAR0  - 1         
LN7FC0 CLR  R8               *# Zero out R8               
LN7FC2 MOV  R0,R0            *# Set Status byte?              
LN7FC4 JEQ  LN7F48           * Equal jump           
LN7FC6 B    *R3              * RETURN
* 
* TOKEN LIST                 
LN7FC8 BYTE >81              *# (ELSE Token) 12 bytes Called from LN7D38  
LN7FC9 BYTE >85              * (GO Token)
LN7FCA BYTE >86              * (GOTO Token) 
LN7FCB BYTE >87              * (GOSUB Token)      
LN7FCC BYTE >88              * (RETURN Token) 
LN7FCD BYTE ?8E              * (BREAK Token) 
LN7FCE BYTE >8F              * (UNBREAK Token)
LN7FCF BYTE >94              * (RESTORE Token)       
LN7FD0 BYTE >A5              * (ERROR Token)
LN7FD1 BYTE >A9              * (RUN Token)
LN7FD2 BYTE >B0              * (THEN Token) 
LN7FD3 BYTE >ED              * (USING Token) 
*         
LN7FD4 BYTE >FF
LN7FD5 BYTE >00              * #        
LN7FD6 DATA >020C
LN7FD8 DATA >0528             
LN7FDA DATA >0728              
LN7FDE DATA >0828         
LN7FE0 DATA >8200              
LN7FE2 DATA >833C
LN7FE4 DATA >9328        
LN7FE6 DATA >9A3C
LN7FE8 DATA >9D6C     
LN7FEA DATA >A15C
LN7FEC DATA >A322
*
LN7FD4 SOCB R0,*R12+                    >FF00              '..'           7FD4
LN7FD6 LI   R12,>0528                   >020C,>0528        '...('         7FD6
LN7FDA SETO @>0828(R8)                  >0728,>0828        '.(.('         7FDA
LN7FDE C    R0,R8                       >8200              '..'           7FDE
LN7FE0 C    *R12+,R12                   >833C              '.<'           7FE0
LN7FE2 CB   @>9A3C(R8),R12              >9328,>9A3C        '.(.<'         7FE2
LN7FE6 CB   @>A15C(R12),*R5+            >9D6C,>A15C        '.l.\'         7FE6
LN7FEA A    @>FF00(R2),R12              >A322,>FF00        '."..'         7FEA
LN7FEE ANDI R0,>0100                    >0240,>0100        '.@..'         7FEE
LN7FF2 JEQ  >7FF8                       >1302              '..'           7FF2
LN7FF4 SB   @>7D65,*R4                  >7520,>7D65        'u }e'         7FF4
LN7FF8 B    *R11                        >045B              '.['           7FF8
       AORG >7FFE                                                             
LN7FFE                                                                    7FFE
LN7FFE MOV  R12,*R10                    >C68C              '..'           7FFE
SLAST  END                                                                    
                               
* ANDI R0,>0100 or Subract byte MSB from Address at R4        
LN7FEE ANDI R0,>0100         *# Set only the 0's          
LN7FF2 JEQ  LN7FF8           * Equal jump           
LN7FF4 SB   @LN7D65,*R4      * Subtract >20 from Address at MSB of R4                 
LN7FF8 B    *R11             *# RETURN
*                 
LN7FFA DATA >0000
LN7FFC DATA >0000                          
LN7FFE DATA >9226                   
SLAST  END     

Really puzzled about this section and what is going on.

Link to comment
Share on other sites

I would search for references to the section 7fd4 to 7fea. You may be looking at artifacts from the original assembly where space was reserved with BSS or by virtue of its address. Random code can be placed in these locations during linkage and loading. The code in its current forms doesn't make any sense, it's either unused or referenced for some purpose.

 

The code from 7fee-7ff8 is testing one bit in R0 then returning or adjusting the address at R4 based on whether it was set(1) or reset(0). Without knowing what R0 and R4 represent, it's hard to determine the routine's purpose.

 

(A personal preference I thought I'd mention for future: whenever I disassemble code, I use the second pass so that only the referenced addresses and labels are generated. Having labels on every line makes code more difficult to read, IMHO. The address is included at the end of each line, so you can keep things 'cleaner' this way. )

Link to comment
Share on other sites

I have multiple places where I have disassembled to figure out and some worse then others for what is going on.

keep in mind it might be data.

 

The FF at LN7FD4 is an end of table marker and the 00 that follows is probably filler to align to 16 bits.

 

What are the values that precede that table up to LN7F9E?

Link to comment
Share on other sites

keep in mind it might be data.

 

The FF at LN7FD4 is an end of table marker and the 00 that follows is probably filler to align to 16 bits.

 

What are the values that precede that table up to LN7F9E

The source has been posted several times now:

The LN7F9E is in CODPAGE2 called from this:

* CALLED FROM CRUNCH *           
LN7B88 MOV  R11,R12         * Save Retrun Address in R12            
LN7B8A MOVB *R13,R3         * GROM Data into MSB R3             (GROM AUTO INCREMENTS)    
LN7B8C BL   @LN60F2         *# SUBSTACK+2,read GROM Data                
LN7B90 CLR  @FAC            * Zero out FAC               
LN7B94 LI   R4,LR8          * PUt LR8 into R4  (LR8 is LSB of R8)        
LN7B98 CLR  R8              * Zero out R8               
LN7B9A BL   @LN6FAC         * Write VARW to Address int R15, R1 = >2000 ?             
LN7B9E MOVB R1,*R4          * Put MSB R1 into Address location MSB R4           
LN7BA0 JEQ  LN7C94          * Equal jump            
LN7BA2 SRL  R3,8            * Strip High Byte from Word           
LN7BA4 JEQ  LN7BB4          * Equal jump                
LN7BA6 LI   R2,LN7E5A       * Put >7E5A into R2            
LN7BAA LI   R10,LN7E28      * Load Return Address in R10            
LN7BAE LI   R7,LN7E7A       * Load Return Address in R7               
LN7BB2 JMP  LN7BF2          * jump   
*                  
LN7BB4 INC  @BUFLEV         *# BUFLEV + 1            
LN7BB8 CLR  @LENCST         * Zero out LENCST            
LN7BBC MOVB R8,@PRGFLG      * Put MSB R8 into MSB PRGFLG           
LN7BC0 BL   @LN7F8C         * R8 (CHAT) = 10 ?            
LN7BC4 MOV  R0,@FAC         * Put FAC into R0           
LN7BC8 JEQ  LN7BD2          * Equal jump           
LN7BCA BL   @LN6FAC         * Write VARW to Address int R15, R1 = >2000 ?            
LN7BCE MOVB R1,*R4          * Put MSB R1 into Address MSB R4           
LN7BD0 JEQ  LN7C94          * Equal jump            
LN7BD2 LI   R7,LN7C1E       * Put >7C1E into R7            
LN7BD6 LI   R6,LN7ED4       * Put >7ED4 into R6                  
LN7BDA JMP  LN7BF2          * jump

And called from here:

LN7F08 MOV  R8,R8            * Put R8 into R8 (Set Status bit)             
LN7F0A JEQ  LN7F50           * Equal jump           
LN7F0C BL   @LN7F8C          * R8 (CHAT) = 10 ?           
LN7F10 MOV  R0,R0            * Put R0 into R0 (Set status bit)          
LN7F12 JEQ  LN7F28           * Equal jump           
LN7F14 LI   R8,>00C9         * R8 = (Line Number Constant token) ?            
LN7F18 BL   @LN7F6E          * Check for Crunch Buffer end, Write R1 to VDP           
LN7F1C MOV  R0,R8            * Put R0 into R8          
LN7F1E SWPB R8               * Swap bytes in R8          
LN7F20 BL   @LN7F6E          * Check for Crunch Buffer end, Write R1 to VDP           
LN7F24 SRL  R8,8             * Strip High byte of word          
LN7F26 JMP  LN7EA4           * jump

As you can see there is a lot of code involved.

Link to comment
Share on other sites

  • 2 weeks later...

Update changes just finished instead of using strings I added tokens to XB for OFF, MAP, PASS for SAMS support.


Also added DUP and SWAP for CALL COLOR and CALL CHAR support.



Removed CALL AMSBANK and now CALL SAMS(lowbank#,highbank#) replaced this command.


a. Removed CALL AMSON and now CALL SAMS(ON) replaced this command.


b. Removed CALL AMSOFF and now CALL SAMS(OFF) replaced this command.


c. Removed CALL AMSMAP and now CALL SAMS(MAP) replaced this command.


d. Removed CALL AMSPASS and now CALL SAMS(PASS) replaced this command.



Also allows you to do something like this CALL SAMS(ON,lowbank#,highbank#,OFF)



More changes add XB tokens for DUP and SWAP:


a. CALL DUPCHAR removed and replaced with CALL CHAR(DUP,char#,char#)


b. CALL DUPCOLOR removed and replaced with CALL COLOR(DUP,colorset#,colorset#)


c. CALL SWAPCHAR removed and replaced with CALL CHAR(SWAP,char#,char#)


d. CALL SWAPCOLOR removed and replaced with CALL COLOR(SWAP,colorset#,colorset#)



Add a new set of choices like


CALL CHAR(128,"FF00FF",DUP,128,129,SWAP,43,87)


The above puts "FF00FF" into character 128, duplicates that definition in 129, swaps character definitions 43 and 87 in one command.


  • Like 1
Link to comment
Share on other sites

I have used ALL of the XB compilers and not a single one can you convert and compile with any speed, it is even slower than Assembly to do that as all the extra steps.

 

XB is good for what it is designed for which is quickly type in a program and test as you go with the interpreter.

 

Why are you even writing in XB if your goal is Assembly?

I mean talk about doing something totally unnecessary to end up someplace else.

Why not just write it in Assembly in the first place?

Or for that matter C that is 100% designed around that idea in the first place.

I'm a big fan of the XB256/BASIC Compiler package because it allowed my to increase the speed of my XB code 20-times. That's nowhere near the speed of Assembly code but still pretty good.

 

Actually, a twenty times performance enhancement with zero knowledge of Assembly Language programming and zero required investment in TI-99/4 architecture knowledge is extremely impressive.

 

The XB256 BASIC compiler workflow has also served as a nice bridge between BASIC and learning Assembly Language programming.

 

It prepared me (a TI novice) by Introducing me to:

 

A. Using an Assembler on Threaded Assembly code.

B. Using modern PC based editors to edit code.

C Learning the differences between assembly source code and an object file.

D. Converting obj files to bin for FlashROM99

E. Exposure to Graphics II Mode and the TI's enhanced character and sprite capabilities.

F. Exposure to multiple screen swapping.

G. Memory management issues beyond what BASIC coding alone offers.

 

Etc...

 

 

Compiled BASIC opened up the entire Assembly paradigm for me. That's a big deal and may be why others may want to use it, even if "your goal is Assembly."

 

As I learn more about system architecture and Assembly programming I consider my time spent with XB256 Compiled BASIC as invaluable. It rocked my world to see my BASIC code spring to life at speeds well beyond anything (known to me) short of Assembly Language itself.

 

Best Part: The cost of entry for this non TI programmer elite -- minimal!

 

"Why not just write it in Assembly in the first place?"

 

Hopefully I've provided an answer. Using the compiler also motivated me to learn more and dig deeper into the TI-99/4A hobby.

 

That's something?

 

Hopefully this post can bring you down to my level for a moment. What may seem "unnecessary" to you was fascinating for me.

Link to comment
Share on other sites

Hopefully this post can bring you down to my level for a moment. What may seem "unnecessary" to you was fascinating for me.

 

Not ever did I say it was "unnecessary" so do not make up stuff I never once said please.

 

I maintain that the Original XB or other versions of XB are faster to draft programs and test them, this is just a fact!

 

Writing with compiler alone is many times slower for obvious reasons of the number of steps involved of using a compiler.

 

Also XB256 is based on XB so you have it assbackwards on which one came first, XB came first by many years.

 

Yea XB256 is a great way to make XB programs fast as it is Assembly, good fast product to use but it is compiled.

 

And what is your level? RXB is a XB version how is this higher then your level of using Assembly?

 

I write in GPL and Assembly all the time for RXB which is my product, do you suggest I should just quit?

 

Just so you know RXB has been around since Rich GKXB was introduced in 1991.

Edited by RXB
Link to comment
Share on other sites

Rich, you keep repeating a misconception that you (and probably others) have about XB256. You are conflating XB256 and the compiler. They are separate, independent programs.

XB256 is just that: Extended BASIC, but with two unique screens, one of which has all 256 characters available. Programs are written in Extended BASIC. Programs run in Extended BASIC. Programs are saved as XB and can be listed normally as in XB. It is fully compatible with Extended BASIC because it is Extended BASIC. It consists of a number of assembly language extensions that unlock much of the potential of the 9918A video processor but at its core it remains XB, warts and all. Floating point numbers? No problem. Named subprograms? No problem. Any faster than XB? Nope.

It is not necessary, but if desired you can compile an XB program written using XB256. All the extra assembly routines are supported. Then you can get a 30-40x increase in speed, but then too the compiler restrictions kick in - no floating point numbers, no named subprograms, etc.

  • Like 5
Link to comment
Share on other sites

  • 5 weeks later...
  • 3 months later...

Just a update on RXB next version I have eliminated commands

 

CALL DUPCHAR(sprite#,sprite#) ! duplicates sprite definitions

CALL SWAPCHAR(sprite#,sprite#) ! swaps sprite definitions

CALL DUPCHAR(char#,char#) ! duplicates character definitions

CALL SWAPCHAR(char#,char#) ! swaps character definitions

 

CALL DUPCOLOR(sprite#,sprite#) ! duplicates sprite color

CALL SWAPCOLOR(sprite#,spirte#) ! swaps sprite color

CALL DUPCOLOR(char set,char set) ! duplicate character set color

CALL SWAPCOLOR(char set,char ste) ! swap character set color

 

Rolled into normal CALL CHAR and CALL COLOR new format addition:

 

CALL COLOR(D,char set,char set) ! D indicates duplicate color set

CALL COLOR(D,sprite#,sprite#) ! D indicates duplicate sprite color

CALL COLOR(S,char set,char set) ! S indicates swap color set

CALL COLOR(S,sprite#,sprite#) ! S indicates swap sprite color

 

CALL CHAR(D,char#,char#) ! D indicates duplicate char definition

CALL CHAR(S,char#,char#) ! S indicates swap char definition

 

Of course this allows you to mix and match these formats in the same command;

 

RXB: CALL COLOR(5,3,9,D,5,6,D,5,7,D,5,8,D,5,9) vs normal XB: CALL COLOR(5,3,9,6,3,9,7,3,9,8,3,9,9,3,9)

As you can see the XB version is much harder to debug and read.

 

RXB: CALL CHAR(55,"F87E651239AB4DCA",D,55,67) vs normal XB: Y$="F87E651239AB4DCA" :: CALL CHAR(55,Y$,67,Y$)

As you can see XB version is forced to use a VDP String Variable and this will slow the program, also RXB version used 2 less bytes of program space.

 

Other commands in RXB are going to be updated also.

Link to comment
Share on other sites

Just to continue with this list of progress other commands being eliminated from RXB and rolled into normal XB commands are:

 

CALL PEEKV(address,variable) ! peek VDP address

CALL PEEKG(address,variable) ! peek GRAM/GROM address

 

CALL POKEV(address,byte value) ! poke VDP address

CALL POKEG(address,byte value) ! poke GRAM address

CALL POKER(VDP register number,byte value)

 

These will be rolled into CALL LOAD and CALL PEEK using same method as previous post:

 

CALL LOAD(V,address,variable) ! V indicates a VDP address

CALL LOAD(G,address,variable) ! G indicates GRAM address

CALL LOAD(R,VDP Register,variable) ! R indicates VDP Register to load

 

CALL PEEK(V,address,variable) ! V indicates a VDP address

CALL PEEK(G,address,variable) ! G indicates GRAM/GROM address

 

Also CALL LOAD no longer needs a CALL INIT to load an Assembly Program as it checks to see if INIT has previously been called and if not does it for you.

 

The reason for these changes are to cut back on the number of Subprogram names in RXB and speed up execution as the above approach has less cost for speed then scanning every subprogram name.

See the only time the V, G, R is ever checked for is less then checking all 24 extra Subprogram names each time a subprogram is called and searched for to use.

 

Also some future folding of RXB concepts into XB are like the Subprogram STR$("7.65") could be converted to use HEX and Binary:

STR$(H,"FABC") = -1348 used strictly for Address in decimal for commands like CALL LOAD or CALL PEEK or other assembly support routines.

STR$(B,"11100101") = 209 useful in RXB to use XB to manipulate bits in a XB program.

 

This is a big deal to me as very little space is needed in RXB to make this work and has vast number of applications for Assembly support in the future.

Edited by RXB
Link to comment
Share on other sites

 

The reason for these changes are to cut back on the number of Subprogram names in RXB and speed up execution as the above approach has less cost for speed then scanning every subprogram name.

See the only time the V, G, R is ever checked for is less then checking all 24 extra Subprogram names each time a subprogram is called and searched for to use.

 

 

Have you actually tested this to find out if it is faster? A smaller table of subprograms would definitely speed things up, but you are adding one more item in the argument list (V,G or R) that has to be passed and that will take some time, plus you have a small lookup to find out if it is V,G or R. So it may work out to be no faster or even slower.

Link to comment
Share on other sites

 

The reason for these changes are to cut back on the number of Subprogram names in RXB and speed up execution as the above approach has less cost for speed then scanning every subprogram name.

See the only time the V, G, R is ever checked for is less then checking all 24 extra Subprogram names each time a subprogram is called and searched for to use.

 

 

Have you actually tested this to find out if it is faster? A smaller table of subprograms would definitely speed things up, but you are adding one more item in the argument list (V,G or R) that has to be passed and that will take some time, plus you have a small lookup to find out if it is V,G or R. So it may work out to be no faster or even slower.

 

Only some Subprograms listed are being changed and the added comparison is not going to amount to much of a cost.

Example of checking for V, G or R in CALL LOAD or CALL PEEK in GPL will not cost much speed unless the only command you use is CALL LOAD or CALL PEEK.

And checking for only D or S in CALL COLOR or CALL CHAR is not going to be very noticeable.

Also as shown originally post RXB versions take less space or are a shortcut vs XB normal methods.

 

Do you have a suggestion to speed them up? After all the idea is to speed up XB not remove all of RXB as what is the point of my work?

 

(It is very noticeable when you remove several Subprograms from the list of all of them remember RXB 5.58 had 40 additional commands and you could see a huge lag.)

Edited by RXB
Link to comment
Share on other sites

Sounds like the lag that you mention happens as more subprograms are added. Does this also affect the user subprograms or are those searched differently? Seems a user subprogram would be at a disadvantage as more are added to the RXB table. I wonder if this is the same perceived slowness I saw with XB2.7, which was one reason I went back to standard XB for my BBS software.

Link to comment
Share on other sites

NOTE: It occurred I could add in R for REVERSE PATTERN in CALL CHAR, or I for INVERSE turning off pixels that are on and off pixels on.

Example:

CALL CHAR(character-code,R) or CALL CHAR(character-code,I)

 

I see this could be pretty handy, but also handy to be able to perform the action on a range of characters or a character set.

Link to comment
Share on other sites

 

After all the idea is to speed up XB .....
And that is my question - have you confirmed that this actually speeds up XB?

 

Hmm yes like I said RXB version 5.58 had 40 more commands than normal XB and you could really see without even a timer it was affecting speed of XB overall performance.

 

Everytime GPL had to search for a Subprogram like RXB CALL HPUT it was noticeably much slower with 39 more names to search through every command line.

 

Just did a test and added these commands to normal XB:

       TITL 'SUBPROGRAM LIST TEST'
***********************************************************
       GROM >C034
***********************************************************
       DATA LINK1
       STRI 'FAKENAME1'
       DATA 0
LINK1  DATA LINK2
       STRI 'FAKENAME2'
       DATA 0
LINK2  DATA LINK3
       STRI 'FAKENAME3'
       DATA 0
LINK3  DATA LINK4
       STRI 'FAKENAME4'
       DATA 0
LINK4  DATA LINK5
       STRI 'FAKENAME5'
       DATA 0
LINK5  DATA LINK6
       STRI 'FAKENAME6'
       DATA 0
LINK6  DATA LINK7
       STRI 'FAKENAME7'
       DATA 0
LINK7  DATA LINK8
       STRI 'FAKENAME8'
       DATA 0
LINK8  DATA LINK9
       STRI 'FAKENAME9'
       DATA 0
LINK9  DATA LINKA
       STRI 'FAKENAMEA'
       DATA 0
LINKA  DATA LINKB
       STRI 'FAKENAMEB'
       DATA 0
LINKB  DATA LINKC
       STRI 'FAKENAMEC'
       DATA 0
LINKC  DATA LINKD
       STRI 'FAKENAMED'
       DATA 0
LINKD  DATA LINKE
       STRI 'FAKENAMEE'
       DATA 0
LINKF  DATA LINKF
       STRI 'FAKENAMEF'
       DATA 0
LINKG  DATA LINKH
       STRI 'FAKENAMEG'
       DATA 0
LINKH  DATA LINKI
       STRI 'FAKENAMEH'
       DATA 0
LINKI  DATA LINKJ
       STRI 'FAKENAMEI'
       DATA 0
LINKJ  DATA LINKK
       STRI 'FAKENAMEJ'
       DATA 0
LINKK  DATA LINKL
       STRI 'FAKENAMEK'
       DATA 0
LINKL  DATA LINKM
       STRI 'FAKENAMEL'
       DATA 0
LINKM  DATA LINKN
       STRI 'FAKENAMEM'
       DATA 0
LINKN  DATA LINKO
       STRI 'FAKENAMEN'
       DATA 0
LINKO  DATA LINKP
       STRI 'FAKENAMEO'
       DATA 0
LINKP  DATA LINKQ
       STRI 'FAKENAMEP'
       DATA 0
LINKQ  DATA LINKR
       STRI 'FAKENAMEQ'
       DATA 0
LINKR  DATA LINKS
       STRI 'FAKENAMER'
       DATA 0
LINKS  DATA LINKT
       STRI 'FAKENAMES'
       DATA 0
LINKT  DATA LINKU
       STRI 'FAKENAMET'
       DATA 0
LINKU  DATA LINKV
       STRI 'FAKENAMEU'
       DATA 0
LINKV  DATA LINKW
       STRI 'FAKENAMEV'
       DATA 0
LINKW  DATA LINKX
       STRI 'FAKENAMEW'
       DATA 0
LINKX  DATA LINKY
       STRI 'FAKENAMEY'
       DATA 0
LINKZ  DATA LINK 0
********************************************
       END

Running this program in modified XB:

100 OPEN #1:"CLOCK"
110 INPUT #1:A$,B$,C$
120 PRINT A$;B$;C$
200 CALL FAKENAMEZ(33,X$)
210 X=X+1
220 IF X<99999 THEN 200
300 INPUT #1:A$,B$,C$
310 PRINT A$;B$;C$
400 GOTO 200

And normal XB:

100 OPEN #1:"CLOCK"
110 INPUT #1:A$,B$,C$
120 PRINT A$;B$;C$
200 CALL CHARPAT(33,X$)
210 X=X+1
220 IF X<99999 THEN 200
300 INPUT #1:A$,B$,C$
310 PRINT A$;B$;C$
400 GOTO 200

Took over 2 hours but the slower one was using more commands.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...