Jump to content
IGNORED

RXB - Rich Extended Basic


Bones-69

Recommended Posts

If you write to >600C the cart will switch to ROM bank 7. For the bank switching it doesn't matter what word is in the ROM at >600C, so you can keep the lower 4K as it is.

Cool that is what I wanted to know!!!!

 

What cart uses this set up? FinalGROM? Or something else?

Link to comment
Share on other sites

I keep wondering what hardware are we considering here? On FG99 you can choose between 8K or 4K pages... or at least duplicate all the lower 4K pages

 

looking at ksarul's comments regarding paging... and yours... You want to change from the current 4K bank switching system, to an 8K bank switching system?

 

The pointers need to be static because the XML base addresses

are in console ROM?

 

Now you will read from, say... >600C from GPL, revealing a new set of pointers in the lower 4K as well as a new set of routines in the upper 4K?

 

The new pointers and routines being an extension to those existing, and to be associated with more new TOKENS?

Sorry no the TOKENs are in GROM not ROM, there are a few in XB ROMs but those are for ERRORs mostly to check what token crashed.

Link to comment
Share on other sites

 

You cannot read directly from GROM (GPL). You read through a memory port (>9800+). What, here, is being switched (4 KiB or 8 KiB) and read directly is the 8 KiB from >6000 – >7FFF. Anything read or executed from an address in that space does not need a pointer to read/execute it. The programmer of the system (RXB, XB, ...) software is responsible for seeing to it that the correct bank is switched in by “writing” to the correct selector address (>6000, >6002, ..., for switching 8 KiB, ...). My fbForth 2.0 is ROM only with four 8 KiB banks. My trampoline code (code for switching banks) is placed in low RAM space so it is always visible to the system. I am guessing that RXB, XB, ... trampoline code is in the 4 KiB of ROM that never gets switched out. Rich and others more familiar with the code can verify this or correct me.

 

...lee

Yep, but oddly in GPL it never knows which bank is being used or called.

 

example is in GPL:

XML SCROLL to scroll the screen up one line is in PAGE 1

XML PSCAN to prescan program is in PAGE 2

 

XB ROM just figures out which bank it is in and switches back and forth on own.

GPL never has to know which bank to engage.

Link to comment
Share on other sites

Rephrase:

Now you will read from, say... >600C from GPL, for the purposes of switching to bank/page 7, thus revealing a new set of pointers in the lower 4K, as well as a new set of routines in the upper 4K?

 

Directly or not...if >600C is read the page is still switched... From the comments here, I believe I have gathered the following: On the XB module reads or writes from/to >600C will bank switch upper 4K.

 

...admittedly I may be floundering here.

Edited by HOME AUTOMATION
Link to comment
Share on other sites

Rephrase:

Now you will read from, say... >600C from GPL, for the purposes of switching to bank/page 7, thus revealing a new set of pointers in the lower 4K, as well as a new set of routines in the upper 4K?

 

Directly or not...if >600C is read the page is still switched... From the comments here, I believe I have gathered the following: On the XB module reads or writes from/to >600C will bank switch upper 4K.

 

...admittedly I may be floundering here.

 

No. Reads from the selector addresses (>6000 ...) of ROM (not GROM) do not cause bank switching. Only “writes” cause bank switching.

 

I am not sure what you mean by “from GPL”. If you mean GPL code is issuing the ROM bank switching “writes”, then OK. But, again, reads from ROM do not cause bank switching.

 

...lee

  • Like 2
Link to comment
Share on other sites

 

No. Reads from the selector addresses (>6000 ...) of ROM (not GROM) do not cause bank switching. Only “writes” cause bank switching.

 

I am not sure what you mean by “from GPL”. If you mean GPL code is issuing the ROM bank switching “writes”, then OK. But, again, reads from ROM do not cause bank switching.

 

...lee

I meant a read issued by a GPL instruction... I meant to specify >600C(CPU)... I have observed that only writes to FG99 cause bank switching...

 

according to Rich, in post #895:

 

"I am not a hardware guy but when you read or write to 6000 it engages page 1 of 8K in GRAMKRACKER FORMAT or in original XB upper 4K page, lower 4K never changes.

When you read or write to 6002 you get page 2 of 8K in GRAMKRACKER FORMAT or in original XB upper 4K page, again lower 4K never changes."

 

I don't have a GRAMKRACKER to test, I do have an XB cart But haven't thought of an extremely easy way to test reads for bank switching right now.

 

So I am trying to understand these apparent contradictions. I wanted to help and or learn. I don't know if I accomplished either. :twisted: Rich seems to be back on track... :)

 

cool

  • Like 2
Link to comment
Share on other sites

I definitely need to get one, not that I have the hardware now to do that as it is all in my attic since everyone has moved in with me....

 

Thus all TI stuff is in Attic and even my computer is now in dinning Room as I gave my Computer Room to my Daughter instead.

 

So I guess I can now create more ROMs for RXB....cool.

  • Like 1
Link to comment
Share on other sites

Did you know you can use GOTO or GOSUB with out them being one word?

 

10 GO TO 30

20 GO SUB 40

30 X=2 :: ON X GO TO 10

40 RETURN

 

XB ROM SOURCE SHOWS WHY:

* Normal "ON" statement
*
       BL   @PARSE            PARSE the index value
       BYTE COMMAZ            Stop on a comma or less
CBH66  BYTE >66               Unused byte for constant
       BL   @NUMCHK           Ensure index is a number
       CLR  @FAC10            Assume no error in CFI
       BL   @CFI              Convert Floating to Integer
       MOVB @FAC10,R0         Test error code
       JNE  GOTO90            If overflow, BAD VALUE
       MOV  @FAC,R3           Get the index
       JGT  ON20              Must be positive
GOTO90 LI   R0,ERRIOR         Negative, BAD VALUE
GOTO95 JMP  ERR               Jump to error handler
ON20   EQU  $                 Now check GO TO/SUB
       CI   R8,GOZ*256        Bare "GO" token?
       JNE  ON40              No, check other possibilities
       BL   @PGMCHR           Yes, get next token
ON30   CI   R8,TOZ*256        "GO TO" ?
       JEQ  GOTO50            Yes, handle GO TO like GOTO
       CI   R8,SUBZ*256       "GO SUB" ?
       JMP  ON50              Merge to common code to test
ON40   CI   R8,GOTOZ*256      "GOTO" ?
       JEQ  GOTO50            Yes, go handle it
       CI   R8,GOSUBZ*256     "GOSUB" ?
ON50   JNE  ERRONE            No, so is an error
       BL   @PGMCHR           Get next token
       JMP  GOSUB2            Goto gosub code
ERR1B  JMP  ERRONE            Issue error message
* NUD routine for "GOSUB"
GOSUB  CLR  R3                Dummy index for "ON" code
* Common GOSUB code
GOSUB2 EQU  $                 Now build a FAC entry
       LI   R1,FAC            Optimize to save bytes
       MOV  R3,*R1+           Save the "ON" index
*                              in case of garbage collection
       MOVB @CBH66,*R1+       Indicate GOSUB entry on stack
       INC  R1                Skip FAC3
       MOV  @PGMPTR,*R1       Save current ptr w/in line
       INCT *R1+              Skip line # to correct place
       MOV  @EXTRAM,*R1       Save current line # pointer
       BL   @VPUSH            Save the stack entry
       MOV  @FAC,R3           Restore the "ON" index
       JMP  GOTO20            Jump to code to find the line
* NUD routine for "GOTO"
GOTO   CLR  R3                Dummy index for "ON" code
* Common (ON) GOTO/GOSUB THEN/ELSE code to fine line
*
* Get line number from program
GOTO20 CI   R8,LNZ*256        Must have line number token
       JNE  ERR1B             Don't, so error
GETL10 BL   @PGMCHR           Get MSB of the line number
       MOVB R8,R0             Save it
       BL   @PGMCHR           Read the character
       DEC  R3                Decrement the "ON" index
       JGT  GOTO40            Loop if not there yet

Been looking over XB ROMs source code to see what modifications I can make in the future.

 

Would like some help if possible on this project.

Edited by RXB
Link to comment
Share on other sites

I did know that. But now I can try to figure out why. ;)

The code explains it pretty well.

 

GO is is used in both GOTO and GOSUB so if you find those two letters "GO" you know the only thing they could be are TO or SUB to follow.

 

ON is only ever followed by a variable as in ON X GOTO or ON X GOSUB thus ON Is a precursor to GOTO or GOSUB.

 

This saves time searching for keywords used by the USER, TO and SUB are used separately for FOR count TO value and SUB as a unique user named subroutine.

Edited by RXB
Link to comment
Share on other sites

OMG!

 

The only change I can do with the XB list of characters is I can move the COMMA up in list but nothing else can be moved?

 

I get * SYNTAX ERROR * for any other in the list that I move?

 

Something in XB ROMs is causing this but for the life of me I can not figure out why?

Link to comment
Share on other sites

Well found the problem in XB ROMs and it is a listing FOR ASSEMBLY ONLY and is a freaking mess to deal with:

0365 612C              AORG >612C   
  0367                
  0368            *   
  0369            * The CHARACTER PROPERTY TABLE  
  0370            * There is a one-byte entry for every character code  
  0371            * in the range LLC(lowest legal character) to   
  0372            * HLC(highest legal character), inclusive.  
  0373      0020  LLC    EQU  >20   
  0374      0000  CPNIL  EQU  >00               " $ % ' ?   
  0375      0002  CPDIG  EQU  >02               digit (0-9)   
  0376      0004  CPNUM  EQU  >04               digit, period, E  
  0377      0008  CPOP   EQU  >08               1 char operators(!#*+-/<=>^ ) 
  0378      0010  CPMO   EQU  >10               multiple operator ( : )   
  0379      0020  CPALPH EQU  >20               A-Z, @, _   
  0380      0040  CPBRK  EQU  >40               ( ) , ;   
  0381      0080  CPSEP  EQU  >80               space   
  0382      0022  CPALNM EQU  CPALPH+CPDIG      alpha-digit   
  0383            *-----------------------------------------------------------
  0384            * Following lines are for adding lowercase character set in 
  0385            * 99/4A,                      5/12/81   
  0386      0001  CPLOW  EQU  >01               a-z   
  0387      0023  CPULNM EQU  CPALNM+CPLOW      Alpha(both upper and lower)+  
  0388            *                             digit-legal variable character
  0389      0021  CPUL   EQU  CPALPH+CPLOW      Alpha(both upper and lower)   
  0390            *-----------------------------------------------------------
  0391      610C  CPTBL  EQU  $-LLC   
  0392 612C   80         BYTE CPSEP               SPACE   
  0393 612D   08         BYTE CPOP              ! EXCLAMATION POINT   
  0394 612E   00         BYTE CPNIL             " QUOTATION MARKS   
  0395 612F   08         BYTE CPOP              # NUMBER SIGN   
  0396 6130   00         BYTE CPNIL             $ DOLLAR SIGN   
  0397 6131   00         BYTE CPNIL             % PERCENT   
  0398 6132   08         BYTE CPOP              & AMPERSAND   
  0399 6133   00         BYTE CPNIL             ' APOSTROPHE  
  0400 6134   40         BYTE CPBRK             ( LEFT PARENTHESIS  
  0401 6135   40         BYTE CPBRK             ) RIGHT PARENTHESIS   
  0402 6136   08         BYTE CPOP              * ASTERISK  
  0403 6137   0C         BYTE CPOP+CPNUM        + PLUS  
  0404 6138   40         BYTE CPBRK             , COMMA   
  0405 6139   0C         BYTE CPOP+CPNUM        - MINUS   
  0406 613A   04         BYTE CPNUM             . PERIOD  
  0407 613B   08         BYTE CPOP              / SLANT   
  0408 613C   06         BYTE CPNUM+CPDIG       0 ZERRO   

 99/4 ASSEMBLER
CPT                                                          PAGE 0009
  0409 613D   06         BYTE CPNUM+CPDIG       1 ONE   
  0410 613E   06         BYTE CPNUM+CPDIG       2 TWO   
  0411 613F   06         BYTE CPNUM+CPDIG       3 THREE   
  0412 6140   06         BYTE CPNUM+CPDIG       4 FOUR  
  0413 6141   06         BYTE CPNUM+CPDIG       5 FIVE  
  0414 6142   06         BYTE CPNUM+CPDIG       6 SIX   
  0415 6143   06         BYTE CPNUM+CPDIG       7 SEVEN   
  0416 6144   06         BYTE CPNUM+CPDIG       8 EIGHT   
  0417 6145   06         BYTE CPNUM+CPDIG       9 NINE  
  0418 6146   10  LBCPMO BYTE CPMO              : COLON   
  0419 6147   40         BYTE CPBRK             : SEMICOLON   
  0420 6148   08         BYTE CPOP              < LESS THAN   
  0421 6149   08         BYTE CPOP              = EQUALS  
  0422 614A   08         BYTE CPOP              > GREATER THAN  
  0423 614B   00         BYTE CPNIL             ? QUESTION MARK   
  0424 614C   20         BYTE CPALPH            @ COMMERCIAL AT   
  0425 614D   20         BYTE CPALPH            A UPPERCASE A   
  0426 614E   20         BYTE CPALPH            B UPPERCASE B   
  0427 614F   20         BYTE CPALPH            C UPPERCASE C   
  0428 6150   20         BYTE CPALPH            D UPPERCASE D   
  0429 6151   24         BYTE CPALPH+CPNUM      E UPPERCASE E   
  0430 6152   20         BYTE CPALPH            F UPPERCASE F   
  0431 6153   20         BYTE CPALPH            G UPPERCASE G   
  0432 6154   20         BYTE CPALPH            H UPPERCASE H   
  0433 6155   20         BYTE CPALPH            I UPPERCASE I   
  0434 6156   20         BYTE CPALPH            J UPPERCASE J   
  0435 6157   20         BYTE CPALPH            K UPPERCASE K   
  0436 6158   20         BYTE CPALPH            L UPPERCASE L   
  0437 6159   20         BYTE CPALPH            M UPPERCASE M   
  0438 615A   20         BYTE CPALPH            N UPPERCASE N   
  0439 615B   20         BYTE CPALPH            O UPPERCASE O   
  0440 615C   20         BYTE CPALPH            P UPPERCASE P   
  0441 615D   20         BYTE CPALPH            Q UPPERCASE Q   
  0442 615E   20         BYTE CPALPH            R UPPERCASE R   
  0443 615F   20         BYTE CPALPH            S UPPERCASE S   
  0444 6160   20         BYTE CPALPH            T UPPERCASE T   
  0445 6161   20         BYTE CPALPH            U UPPERCASE U   
  0446 6162   20         BYTE CPALPH            V UPPERCASE V   
  0447 6163   20         BYTE CPALPH            W UPPERCASE W   
  0448 6164   20         BYTE CPALPH            X UPPERCASE X   
  0449 6165   20         BYTE CPALPH            Y UPPERCASE Y   
  0450 6166   20         BYTE CPALPH            Z UPPERCASE Z   
  0451 6167   20         BYTE CPALPH            [ LEFT SQUARE BRACKET   
  0452 6168   20         BYTE CPALPH            \ REVERSE SLANT   
  0453 6169   20         BYTE CPALPH            ] RIGHT SQUARE BRACKET  
  0454 616A   08         BYTE CPOP              ^ CIRCUMFLEX  
  0455 616B   20         BYTE CPALPH            _ UNDERLINE   
  0456            *-----------------------------------------------------------
  0457            * Following "`" and lowercase characters are for  
  0458            * adding lowercase character set in 99/4A, 5/12/81  
  0459            *-----------------------------------------------------------
  0460 616C   00         BYTE CPNIL             ` GRAVE ACCENT  
  0461 616D   21         BYTE CPALPH+CPLOW      a LOWERCASE a   
  0462 616E   21         BYTE CPALPH+CPLOW      b LOWERCASE b   
  0463 616F   21         BYTE CPALPH+CPLOW      c LOWERCASE c   
  0464 6170   21         BYTE CPALPH+CPLOW      d LOWERCASE d   
  0465 6171   21         BYTE CPALPH+CPLOW      e LOWERCASE e   
  0466 6172   21         BYTE CPALPH+CPLOW      f LOWERCASE f   
  0467 6173   21         BYTE CPALPH+CPLOW      g LOWERCASE g   

 99/4 ASSEMBLER
CPT                                                          PAGE 0010
  0468 6174   21         BYTE CPALPH+CPLOW      h LOWERCASE h   
  0469 6175   21         BYTE CPALPH+CPLOW      i LOWERCASE i   
  0470 6176   21         BYTE CPALPH+CPLOW      j LOWERCASE j   
  0471 6177   21         BYTE CPALPH+CPLOW      k LOWERCASE k   
  0472 6178   21         BYTE CPALPH+CPLOW      l LOWERCASE l   
  0473 6179   21         BYTE CPALPH+CPLOW      m LOWERCASE m   
  0474 617A   21         BYTE CPALPH+CPLOW      n LOWERCASE n   
  0475 617B   21         BYTE CPALPH+CPLOW      o LOWERCASE o   
  0476 617C   21         BYTE CPALPH+CPLOW      p LOWERCASE p   
  0477 617D   21         BYTE CPALPH+CPLOW      q LOWERCASE q   
  0478 617E   21         BYTE CPALPH+CPLOW      r LOWERCASE r   
  0479 617F   21         BYTE CPALPH+CPLOW      s LOWERCASE s   
  0480 6180   21         BYTE CPALPH+CPLOW      t LOWERCASE t   
  0481 6181   21         BYTE CPALPH+CPLOW      u LOWERCASE u   
  0482 6182   21         BYTE CPALPH+CPLOW      v LOWERCASE v   
  0483 6183   21         BYTE CPALPH+CPLOW      w LOWERCASE w   
  0484 6184   21         BYTE CPALPH+CPLOW      x LOWERCASE x   
  0485 6185   21         BYTE CPALPH+CPLOW      y LOWERCASE y   
  0486 6186   21         BYTE CPALPH+CPLOW      z LOWERCASE z   
  0487                 

How about me make a permanent list that uses a table where everything equals everything else????

 

Worst way to deal with different characters I have ever seen!!!!

An order of importance made my horrid programming.

 

Any ideas on on to fix this MESS?

Edited by RXB
Link to comment
Share on other sites

Well found the problem in XB ROMs and it is a listing FOR ASSEMBLY ONLY and is a freaking mess to deal with:

 

 

0365 612C              AORG >612C   
  0367                
  0368            *   
  0369            * The CHARACTER PROPERTY TABLE  
  0370            * There is a one-byte entry for every character code  
  0371            * in the range LLC(lowest legal character) to   
  0372            * HLC(highest legal character), inclusive.  
  0373      0020  LLC    EQU  >20   
  0374      0000  CPNIL  EQU  >00               " $ % ' ?   
  0375      0002  CPDIG  EQU  >02               digit (0-9)   
  0376      0004  CPNUM  EQU  >04               digit, period, E  
  0377      0008  CPOP   EQU  >08               1 char operators(!#*+-/<=>^ ) 
  0378      0010  CPMO   EQU  >10               multiple operator ( : )   
  0379      0020  CPALPH EQU  >20               A-Z, @, _   
  0380      0040  CPBRK  EQU  >40               ( ) , ;   
  0381      0080  CPSEP  EQU  >80               space   
  0382      0022  CPALNM EQU  CPALPH+CPDIG      alpha-digit   
  0383            *-----------------------------------------------------------
  0384            * Following lines are for adding lowercase character set in 
  0385            * 99/4A,                      5/12/81   
  0386      0001  CPLOW  EQU  >01               a-z   
  0387      0023  CPULNM EQU  CPALNM+CPLOW      Alpha(both upper and lower)+  
  0388            *                             digit-legal variable character
  0389      0021  CPUL   EQU  CPALPH+CPLOW      Alpha(both upper and lower)   
  0390            *-----------------------------------------------------------
  0391      610C  CPTBL  EQU  $-LLC   
  0392 612C   80         BYTE CPSEP               SPACE   
  0393 612D   08         BYTE CPOP              ! EXCLAMATION POINT   
  0394 612E   00         BYTE CPNIL             " QUOTATION MARKS   
  0395 612F   08         BYTE CPOP              # NUMBER SIGN   
  0396 6130   00         BYTE CPNIL             $ DOLLAR SIGN   
  0397 6131   00         BYTE CPNIL             % PERCENT   
  0398 6132   08         BYTE CPOP              & AMPERSAND   
  0399 6133   00         BYTE CPNIL             ' APOSTROPHE  
  0400 6134   40         BYTE CPBRK             ( LEFT PARENTHESIS  
  0401 6135   40         BYTE CPBRK             ) RIGHT PARENTHESIS   
  0402 6136   08         BYTE CPOP              * ASTERISK  
  0403 6137   0C         BYTE CPOP+CPNUM        + PLUS  
  0404 6138   40         BYTE CPBRK             , COMMA   
  0405 6139   0C         BYTE CPOP+CPNUM        - MINUS   
  0406 613A   04         BYTE CPNUM             . PERIOD  
  0407 613B   08         BYTE CPOP              / SLANT   
  0408 613C   06         BYTE CPNUM+CPDIG       0 ZERRO   

 99/4 ASSEMBLER
CPT                                                          PAGE 0009
  0409 613D   06         BYTE CPNUM+CPDIG       1 ONE   
  0410 613E   06         BYTE CPNUM+CPDIG       2 TWO   
  0411 613F   06         BYTE CPNUM+CPDIG       3 THREE   
  0412 6140   06         BYTE CPNUM+CPDIG       4 FOUR  
  0413 6141   06         BYTE CPNUM+CPDIG       5 FIVE  
  0414 6142   06         BYTE CPNUM+CPDIG       6 SIX   
  0415 6143   06         BYTE CPNUM+CPDIG       7 SEVEN   
  0416 6144   06         BYTE CPNUM+CPDIG       8 EIGHT   
  0417 6145   06         BYTE CPNUM+CPDIG       9 NINE  
  0418 6146   10  LBCPMO BYTE CPMO              : COLON   
  0419 6147   40         BYTE CPBRK             : SEMICOLON   
  0420 6148   08         BYTE CPOP              < LESS THAN   
  0421 6149   08         BYTE CPOP              = EQUALS  
  0422 614A   08         BYTE CPOP              > GREATER THAN  
  0423 614B   00         BYTE CPNIL             ? QUESTION MARK   
  0424 614C   20         BYTE CPALPH            @ COMMERCIAL AT   
  0425 614D   20         BYTE CPALPH            A UPPERCASE A   
  0426 614E   20         BYTE CPALPH            B UPPERCASE B   
  0427 614F   20         BYTE CPALPH            C UPPERCASE C   
  0428 6150   20         BYTE CPALPH            D UPPERCASE D   
  0429 6151   24         BYTE CPALPH+CPNUM      E UPPERCASE E   
  0430 6152   20         BYTE CPALPH            F UPPERCASE F   
  0431 6153   20         BYTE CPALPH            G UPPERCASE G   
  0432 6154   20         BYTE CPALPH            H UPPERCASE H   
  0433 6155   20         BYTE CPALPH            I UPPERCASE I   
  0434 6156   20         BYTE CPALPH            J UPPERCASE J   
  0435 6157   20         BYTE CPALPH            K UPPERCASE K   
  0436 6158   20         BYTE CPALPH            L UPPERCASE L   
  0437 6159   20         BYTE CPALPH            M UPPERCASE M   
  0438 615A   20         BYTE CPALPH            N UPPERCASE N   
  0439 615B   20         BYTE CPALPH            O UPPERCASE O   
  0440 615C   20         BYTE CPALPH            P UPPERCASE P   
  0441 615D   20         BYTE CPALPH            Q UPPERCASE Q   
  0442 615E   20         BYTE CPALPH            R UPPERCASE R   
  0443 615F   20         BYTE CPALPH            S UPPERCASE S   
  0444 6160   20         BYTE CPALPH            T UPPERCASE T   
  0445 6161   20         BYTE CPALPH            U UPPERCASE U   
  0446 6162   20         BYTE CPALPH            V UPPERCASE V   
  0447 6163   20         BYTE CPALPH            W UPPERCASE W   
  0448 6164   20         BYTE CPALPH            X UPPERCASE X   
  0449 6165   20         BYTE CPALPH            Y UPPERCASE Y   
  0450 6166   20         BYTE CPALPH            Z UPPERCASE Z   
  0451 6167   20         BYTE CPALPH            [ LEFT SQUARE BRACKET   
  0452 6168   20         BYTE CPALPH            \ REVERSE SLANT   
  0453 6169   20         BYTE CPALPH            ] RIGHT SQUARE BRACKET  
  0454 616A   08         BYTE CPOP              ^ CIRCUMFLEX  
  0455 616B   20         BYTE CPALPH            _ UNDERLINE   
  0456            *-----------------------------------------------------------
  0457            * Following "`" and lowercase characters are for  
  0458            * adding lowercase character set in 99/4A, 5/12/81  
  0459            *-----------------------------------------------------------
  0460 616C   00         BYTE CPNIL             ` GRAVE ACCENT  
  0461 616D   21         BYTE CPALPH+CPLOW      a LOWERCASE a   
  0462 616E   21         BYTE CPALPH+CPLOW      b LOWERCASE b   
  0463 616F   21         BYTE CPALPH+CPLOW      c LOWERCASE c   
  0464 6170   21         BYTE CPALPH+CPLOW      d LOWERCASE d   
  0465 6171   21         BYTE CPALPH+CPLOW      e LOWERCASE e   
  0466 6172   21         BYTE CPALPH+CPLOW      f LOWERCASE f   
  0467 6173   21         BYTE CPALPH+CPLOW      g LOWERCASE g   

 99/4 ASSEMBLER
CPT                                                          PAGE 0010
  0468 6174   21         BYTE CPALPH+CPLOW      h LOWERCASE h   
  0469 6175   21         BYTE CPALPH+CPLOW      i LOWERCASE i   
  0470 6176   21         BYTE CPALPH+CPLOW      j LOWERCASE j   
  0471 6177   21         BYTE CPALPH+CPLOW      k LOWERCASE k   
  0472 6178   21         BYTE CPALPH+CPLOW      l LOWERCASE l   
  0473 6179   21         BYTE CPALPH+CPLOW      m LOWERCASE m   
  0474 617A   21         BYTE CPALPH+CPLOW      n LOWERCASE n   
  0475 617B   21         BYTE CPALPH+CPLOW      o LOWERCASE o   
  0476 617C   21         BYTE CPALPH+CPLOW      p LOWERCASE p   
  0477 617D   21         BYTE CPALPH+CPLOW      q LOWERCASE q   
  0478 617E   21         BYTE CPALPH+CPLOW      r LOWERCASE r   
  0479 617F   21         BYTE CPALPH+CPLOW      s LOWERCASE s   
  0480 6180   21         BYTE CPALPH+CPLOW      t LOWERCASE t   
  0481 6181   21         BYTE CPALPH+CPLOW      u LOWERCASE u   
  0482 6182   21         BYTE CPALPH+CPLOW      v LOWERCASE v   
  0483 6183   21         BYTE CPALPH+CPLOW      w LOWERCASE w   
  0484 6184   21         BYTE CPALPH+CPLOW      x LOWERCASE x   
  0485 6185   21         BYTE CPALPH+CPLOW      y LOWERCASE y   
  0486 6186   21         BYTE CPALPH+CPLOW      z LOWERCASE z   
  0487                 

 

 

How about me make a permanent list that uses a table where everything equals everything else????

 

Worst way to deal with different characters I have ever seen!!!!

An order of importance made my horrid programming.

 

Any ideas on on to fix this MESS?

 

You do not want to mess with that table, Rich! It is as it says, a character property table. It is in ASCII order with flag bits for each character that tells XB what kind of character it is.

 

...lee

Link to comment
Share on other sites

 

You do not want to mess with that table, Rich! It is as it says, a character property table. It is in ASCII order with flag bits for each character that tells XB what kind of character it is.

 

...lee

Lee

 

This is the issue with XB ROMs it searches this list every single time you type in anything.

 

Those most used characters like say comma or equal or times or words like TO or CALL are at bottom of list, while ones never used but just once like DIM are at top of list.

 

To say this list is in any way optimized would be a great joke, it is horribly designed.

 

Especially when you consider it searches every single character in a program line like this.

 

When people do a comparison of timing commands this is why you get insane bad times for most often used commands or characters.

 

P.S.

Did you notice as it is SPACE to lower case z how much space this wastes as most are all the same value?

 

Do you know anyone that uses FCTN SHIFT E as the break key?

Edited by RXB
Link to comment
Share on other sites

I think that last one may have been for 99/4 compatibility, Rich

Yea most of the original TI99 and TI99/4 code was commented on and either * commented out or * removed in both XB ROMs and GPL Source.

Edited by RXB
Link to comment
Share on other sites

Anyway as it stands now with no offers to help me fix the XB ROMs guess I am just going to just release what I have an do something else.

 

I certainly would like to help. I did not respond before because I had fbForth stuff to do (still do) and will need to spend a fair amount of time to work out what actually is going on in the RXB/XB code—especially when it comes to that last bit of code you posted. I am certain that table cannot be re-ordered because it is in precisely ASCII order and contains the property bits for each character. For example, ‘q’ is ASCII 113 and the property entry for ‘q’ is at location >617D, which is the 113th entry in the property table, i.e., it is 113 bytes from the beginning of the table, which is CPTBL at >610C. That is why this surely cannot be the search table for Basic tokens as is what I think you said. It merely tells what kind of character a particular ASCII code is. As I said, I may not have correct what it is you are saying or trying to do, but I am certainly willing to help. :)

 

...lee

  • Like 3
Link to comment
Share on other sites

Currently adding a new routine to RXB.

It looks like I have no problem adding HEX to the list in GPL so seems only Subprograms with less then 2 characters are NOT EVER TO MODIFIED.

HEX(hex-string) or HEX(integer) is a new routing that returns a value needed.

Example:

PRINT HEX(8192) would print string 2000

and

PRINT HEX("2000") would print number value 8192

And of course you could do this:

CALL HCHAR(HEX("0004")*5,18,65) ! Thus HEX("0004") would be 4 in integer thus times 5 equals 20

 

This creates all kinds of solutions of dealing with Assembly and character values in HEX.

 

What is needed in XB ROMs is finding duplicate code and eliminating it or adding in better Assembly tricks then used by TI in XB ROMs.

Link to comment
Share on other sites

Rich,

 

I've followed this thread to some degree and have a question or two. Please note I am not trying to get something for free if it's not freely available.

 

Does the Rich Extended Basic exist in a FinalGrom format? If so, do you distribute/sell the image?

 

Finally, is there documentation somewhere for it?

 

Thanks.

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...