Jump to content
IGNORED

RXB - Rich Extended Basic


Bones-69

Recommended Posts

UPDATE ON RXB WORK IN PROGRESS:

 

What do you guys think about this new feature I am working on:

 

CALL LOAD(hex address,hex value,hex value) ! Hex values in strings all begin with >

CALL LINK(hex address,hex value,hex value) ! Hex values in strings all begin with >

 

 

Example:

100 A$=">29FD" :: B$=">AA" :: C$=">00"

110 CALL LOAD(A$,B$,C$) ! This would load >AA00 at RAM address >29FD

 

CALL LINK(">3FFE") ! Would execute address link with out needing to look up the link name and checking stack which is slower.

Also you could use Decimal values CALL LINK(16382) also works or nomral XB coninues to work CALL LINK("TESTER")

 

This feature would work with all address routines like CALL VDPSTACK(adddrss), CALL PRAM(address), CALL POKEG(address), CALL POKEV(address)... and all others....

 

 

AGAIN ANY FEED BACK ON THIS IDEA?

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

Well couple of days with no reply so going with a new command instead:

 

HEX(hex$) or HEX(dec#)

 

So commands like CALL LOAD(HEX("2000"),HEX("FE")) would load >FE at RAM address >2000

Or commands like PRINT HEX(8192) would print 2000

 

If HEX has a String or String Variable it puts Decimal Integer into FAC

If HEX has a Decimal Floating Point number in it it creates a string for that value to use.

 

The previous post to this had issues with the > sign on input and output that this new version does not create.

Also the new version is much faster and more compact allowing use in complicated XB program lines.

  • Like 2
Link to comment
Share on other sites

Well couple of days with no reply so going with a new command instead:

 

HEX(hex$) or HEX(dec#)

 

So commands like CALL LOAD(HEX("2000"),HEX("FE")) would load >FE at RAM address >2000

Or commands like PRINT HEX(8192) would print 2000

 

If HEX has a String or String Variable it puts Decimal Integer into FAC

If HEX has a Decimal Floating Point number in it it creates a string for that value to use.

 

The previous post to this had issues with the > sign on input and output that this new version does not create.

Also the new version is much faster and more compact allowing use in complicated XB program lines.

 

 

I like this factoring much better Rich. By keeping it simple you have made a more generally useful function.

This will clarify a lot of BASIC code where there are negative decimal numbers used for addresses. (yuk)

 

Well done. Chuck Moore would be proud of you. :-)

  • Like 2
Link to comment
Share on other sites

Also note, sometimes we may not make a comment, but we do post a like--that is just as much a positive endorsement of the idea as the comment would be, Rich. :) I do agree that the second solution to the problem is even more elegantly simple than the first one was. I like it.

  • Like 2
Link to comment
Share on other sites

 

 

I like this factoring much better Rich. By keeping it simple you have made a more generally useful function.

This will clarify a lot of BASIC code where there are negative decimal numbers used for addresses. (yuk)

 

Well done. Chuck Moore would be proud of you. :-)

Thanks HEX does not work with anything but two bytes i.e. >1234 or >4321 or >38A7

Thus only is for address use like CALL LOAD or CALL PEEK

Link to comment
Share on other sites

Also note, sometimes we may not make a comment, but we do post a like--that is just as much a positive endorsement of the idea as the comment would be, Rich. :) I do agree that the second solution to the problem is even more elegantly simple than the first one was. I like it.

Thanks.

 

Say how would I put more ROMs into RXB I was thinking of Explorer and adding another ROM of Assembly to speed up XB.

Link to comment
Share on other sites

It is a matter of updating the bank switching tables, Rich. Right now, XB has two banks, but is actually only switching half of the ROM (4K). The other half needs to be present at all times, based on the pointers to the various ROM routines. I am not sure how much space remains in that constant 4K to allow you to add additional pointers to new banks, but that is where you'd have to start looking.

Link to comment
Share on other sites

It is a matter of updating the bank switching tables, Rich. Right now, XB has two banks, but is actually only switching half of the ROM (4K). The other half needs to be present at all times, based on the pointers to the various ROM routines. I am not sure how much space remains in that constant 4K to allow you to add additional pointers to new banks, but that is where you'd have to start looking.

I was thinking of making numerous ROMs for RXB (XB) current switch method could up updated...

0207            ************************************************************
  0208 6000              AORG >6000   
  0210                
  0211            * PAGE SELECTOR FOR PAGE 1  
  0212      6000  PAGE1  EQU  $                 >6000   
  0213 6000 0002  C2     DATA 2                 0   
  0214            * PAGE SELECTOR FOR PAGE 2  
  0215      6002  PAGE2  EQU  $                 >6002   
  0216 6002   00  C7     BYTE >00   
  0217 6003   07  CBH7   BYTE >07               2   
  0218 6004   0A  CBHA   BYTE >0A   
  0219 6005   94  CBH94  BYTE >94               4   
  0220 6006 0028  C40    DATA 40                6   
  0221 6008 0064  C100   DATA 100               8   
  0222 600A 1000  C1000  DATA >1000             A   
  0223 600C 0000         DATA 0                 C   
  0224 600E 4001  FLTONE DATA >4001             E   
  0225            ************************************************************
  0226            * XML table number 7 for Extended Basic - must have   
  0227            *     it's origin at >6010  
  0228            ************************************************************
  0229            *           0      1      2      3      4      5     6  
  0230 6010 619C         DATA COMPCG,GETSTG,MEMCHG,CNSSEL,PARSEG,CONTG,EXECG  
       6012 61A2  
       6014 72CE  
       6016 6070  
       6018 6470  
       601A 64C4  
       601C 6500  
  0231            *           7      8    9     A    B    C      D  
  0232 601E 61BA         DATA VPUSHG,VPOP,PGMCH,SYMB,SMBB,ASSGNV,FBSYMB   
       6020 6C2A  

 99/4 ASSEMBLER
XML359                                                       PAGE 0005
       6022 6410  
       6024 61B4  
       6026 61A8  
       6028 61AE  
       602A 618C  
  0233            *             E     F   
  0234 602C 6EE2         DATA SPEED,CRNSEL  
       602E 6076  
  0235            ************************************************************
  0236            * XML table number 8 for Extended Basic - must have   
  0237            *     it's origin at >6030  
  0238            ************************************************************
  0239            *           0   1      2    3      4  5     6      7  
  0240 6030 74AA         DATA CIF,CONTIN,RTNG,SCROLL,IO,GREAD,GWRITE,DELREP   
       6032 65CC  
       6034 6630  
       6036 7ADA  
       6038 7B48  
       603A 7EB4  
       603C 7ED8  
       603E 7EF4  
  0241            *           8    9    A      B      C      D      E   
  0242 6040 7F7E         DATA MVDN,MVUP,VGWITE,GVWITE,GREAD1,GWITE1,GDTECT  
       6042 6F98  
       6044 7FC0  
       6046 7FDA  
       6048 7EA6  
       604A 7ECA  
       604C 6050  
  0243            *           F   
  0244 604E 7C56         DATA PSCAN   
  0245                
  0246            * Determine if and how much ERAM is present   
  0247 6050 D80B  GDTECT MOVB R11,@PAGE1        First enable page 1 ROM   
       6052 6000  
  0248            *-----------------------------------------------------------
  0249            * Replace following line      6/16/81   
  0250            * (Extended Basic must be made to leave enough space at   
  0251            * top of RAM expansion for the "hooks" left by the 99/4A  
  0252            * for TIBUG.)   
  0253            *      SETO R0                Start at >FFFF  
  0254            * with  
  0255 6054 0200         LI   R0,>FFE7          Start at >FFE7  
       6056 FFE7  
  0256            *-----------------------------------------------------------
  0257 6058 D40B         MOVB R11,*R0           Write a byte of data  
  0258 605A 940B         CB   R11,*R0           Read and compare the data   
  0259 605C 1306         JEQ  DTECT2            If matches-found ERAM top   
  0260            *-----------------------------------------------------------
  0261            * Change the following line   6/16/81   
  0262            *      AI   R0,->2000         Else drop down 8K   
  0263 605E 0200         LI   R0,>DFFF          Else drop down 8K   
       6060 DFFF  
  0264            *-----------------------------------------------------------
  0265 6062 D40B         MOVB R11,*R0           Write a byte of data  
  0266 6064 940B         CB   R11,*R0           Read and compare the data   
  0267 6066 1301         JEQ  DTECT2            If matches-found ERAM top   
  0268 6068 04C0         CLR  R0                No match so no ERAM   
  0269 606A C800  DTECT2 MOV  R0,@RAMTOP        Set the ERAM top  

 99/4 ASSEMBLER
XML359                                                       PAGE 0006
       606C 8384  
  0270 606E 045B         RT                     And return to GPL   

Now >6010 and >6030 have to remain in exact location for Lower 8K assembly programs and EA manual using Assembly in XB,

but >6000 to >600F could be used for bank switching 14 more banks of 8K banks or upper 4K banks.

 

I can move >6004 to >600F to some where else in XB ROMs there is 20 bytes open in XB ROMS, or use exiting values.

 

For additional XB ROMs that upgrade XB the lower 4K of XB ROM would have to be duplicates for a 8K switching.

 

Thus instead of a write to >6002 being bank 2 of 8K XB ROMs, we could write to >600A and that would be a new XB 8K ROM page.

Link to comment
Share on other sites

Rich,

 

When can we expect a release - or is RXB a "moving target"?

Well the only thing left for me to finish is HEX(string) or HEX(decimal) then I can work on demos and documentation.

 

Delay so far is figuring out the changes to XB ROMs to allow for a new value HEX to be added with a token of maybe >CA

 

NUDTAB in GPL and ROM is a branch table searched for in GPL and used by XB ROMs:

[0686]               ***********************************************************
[0687]               *               NUD / STATEMENT BRANCH TABLE
[0688]               ***********************************************************
[0689] A147 41,89    NUDTB  BR   RECX              'RECORD'              0
[0690] A149 46,8B           BR   NBREAK            'BREAK'               0
[0691] A14B 46,9D           BR   NUNBRK            'UNBREAK'             0
[0692] A14D 46,81           BR   NTRACE            'TRACE'               0
[0693] A14F 46,86           BR   NUNTRC            'UNTRACE'             0
[0694] A151 41,8C           BR   NREADX            'READ'                0
[0695] A153 41,8F           BR   PRINTX            'PRINT'               0
[0696] A155 41,86           BR   SZRUNX            'RUN'                 0
[0697] A157 41,A7           BR   LINPUX            Reserved for LINPUT   1
[0698] A159 41,92           BR   RESTOX            'RESTORE'             1
[0699] A15B 43,7F           BR   NRNDMZ            'RANDOMIZE'           1
[0700] A15D 41,95           BR   INPUTX            'INPUT'               1
[0701] A15F 41,98           BR   OPENX             'OPEN'                1
[0702] A161 41,9B           BR   CLOSEX            'CLOSE'               1
[0703] A163 42,48           BR   NPI               'PI'                  1
[0704] A165 42,58           BR   NMAX              'MAX'                 1
[0705] A167 42,65           BR   NMIN              'MIN'                 2
[0706] A169 46,28           BR   RPTZ01            'RPT$'                2
[0707] A16B 41,9E           BR   ACCEPX            'ACCEPT'              2
[0708] A16D 41,83           BR   EOFX              'EOF'                 2
[0709] A16F 45,1A           BR   ASC01             'ASC'                 2
[0710] A171 45,BD           BR   POS01             'POS'                 2
[0711] A173 45,55           BR   VAL01             'VAL'                 2
[0712] A175 45,2B           BR   STRZ01            'STR$'                2
[0713] A177 44,90           BR   SEGZ01            'SEG$'                3
[0714] A179 41,A4           BR   DELETX            'DELETE'              3
[0715] A17B 41,A1           BR   DISPLX            'DISPLAY'             3
[0716] A17D 44,F3           BR   LEN01             'LEN'                 3
[0717] A17F 44,FF           BR   CHRZ01            'CHR$'                3
[0718]               *RXB PATCH CODE FOR BASIC RND REPLACEMENT ***********
[0719] A181 42,AF           BR   NRND              'RND'                 3      
[0720]               * The following are long branches to another GROM
[0721] A183 05,80,1C EOFX   B    EOF
[0722] A186 05,60,1E SZRUNX B    SZRUN
[0723] A189 05,80,22 RECX   B    REC
[0724] A18C 05,80,0E NREADX B    NREAD
[0725] A18F 05,80,04 PRINTX B    PRINT
[0726] A192 05,80,0C RESTOX B    RESTOR
[0727] A195 05,80,06 INPUTX B    INPUT
[0728] A198 05,80,08 OPENX  B    OPEN
[0729] A19B 05,80,0A CLOSEX B    CLOSE
[0730] A19E 05,80,1E ACCEPX B    ACCEPT
[0731] A1A1 05,80,00 DISPLX B    DISPL1
[0732] A1A4 05,80,02 DELETX B    DELET
[0733] A1A7 05,80,30 LINPUX B    LINPUT
[0734]               ***********************************************************

So putting it in XB ROM presents a address problem as ERRTAB will not allow for insertion of 4 bytes:

[2152]                      AORG >0B00
[2153]               ***********************************************************
[2154]               *                BASIC KEYWORD TABLE
[2155]               *      THE TOKEN IS ITS LEFT BINDING POWER
[2156]               ***********************************************************
[2157] CB00 CB,14,CB KEYTAB DATA CHAR1,CHAR2,CHAR3,CHAR4,CHAR5
       CB03 35,CB,4E
       CB06 CB,EF,CC
       CB09 59
[2158] CB0A CC,A8,CC        DATA CHAR6,CHAR7,CHAR8,CHAR9,CHARA
       CB0D F6,CD,2F
       CB10 CD,5D,CD
       CB13 68
[2159] CB14 21       CHAR1  TEXT '!'
[2160] CB15 83              BYTE TREMZ             *  !
[2161] CB16 23              TEXT '#'
[2162] CB17 FD              BYTE NUMBEZ            *  #
[2163] CB18 26              TEXT '&'
[2164] CB19 B8              BYTE CONCZ             *  &
[2165] CB1A 28              TEXT '('
[2166] CB1B B7              BYTE LPARZ             *  (
[2167] CB1C 29              TEXT ')'
[2168] CB1D B6              BYTE RPARZ             *  )
[2169] CB1E 2A              TEXT '*'
[2170] CB1F C3              BYTE MULTZ             *  *
[2171] CB20 2B              TEXT '+'
[2172] CB21 C1              BYTE PLUSZ             *  +
[2173] CB22 2C              TEXT ','
[2174] CB23 B3              BYTE COMMAZ            *  ,
[2175] CB24 2D              TEXT '-'
[2176] CB25 C2              BYTE MINUSZ            *  -
[2177] CB26 2F              TEXT '/'
[2178] CB27 C4              BYTE DIVIZ             *  /
[2179] CB28 3A              TEXT ':'
[2180] CB29 B5              BYTE COLONZ            *  :
[2181] CB2A 3B              TEXT ';'
[2182] CB2B B4              BYTE SEMICZ            *  ;
[2183] CB2C 3C              TEXT '<'
[2184] CB2D BF              BYTE LESSZ             *  <
[2185] CB2E 3D              TEXT '='
[2186] CB2F BE              BYTE EQUALZ            *  =
[2187] CB30 3E              TEXT '>'
[2188] CB31 C0              BYTE GREATZ            *  >
[2189] CB32 5E              TEXT '^'
[2190] CB33 C5              BYTE CIRCUZ            *  ^
[2191] CB34 FF              BYTE >FF
[2192] CB35 3A,3A    CHAR2  TEXT '::'
[2193] CB37 82              BYTE SSEPZ             *  ::
[2194] CB38 41,54           TEXT 'AT'
[2195] CB3A F0              BYTE ATZ               *  AT

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0039 
EQUATES ALCS-359
[2196] CB3B 47,4F           TEXT 'GO'
[2197] CB3D 85              BYTE GOZ               *  GO * RXB MOTION
[2198] CB3E 49,46           TEXT 'IF'
[2199] CB40 84              BYTE IFZ               *  IF
[2200] CB41 4F,4E           TEXT 'ON'
[2201] CB43 9B              BYTE ONZ               *  ON * ONKEY
[2202] CB44 4F,52           TEXT 'OR'
[2203] CB46 BA              BYTE ORZ               *  OR
[2204] CB47 50,49           TEXT 'PI'
[2205] CB49 DD              BYTE PIZ               *  PI
[2206] CB4A 54,4F           TEXT 'TO'
[2207] CB4C B1              BYTE TOZ               *  TO
[2208] CB4D FF              BYTE >FF
[2209] CB4E 41,42,53 CHAR3  TEXT 'ABS'
[2210] CB51 CB              BYTE ABSZ              *  ABS
[2211] CB52 41,4C,4C        TEXT 'ALL'
[2212] CB55 EC              BYTE ALLZ              *  ALL
[2213] CB56 41,4E,44        TEXT 'AND'
[2214] CB59 BB              BYTE ANDZ              *  AND
[2215] CB5A 41,53,43        TEXT 'ASC'
[2216] CB5D DC              BYTE ASCZ              *  ASC
[2217] CB5E 41,54,4E        TEXT 'ATN'
[2218] CB61 CC              BYTE ATNZ              *  ATN
[2219] CB62 42,59,45        TEXT 'BYE'
[2220] CB65 03              BYTE >03               *  BYE
[2221] CB66 43,4F,4E        TEXT 'CON'
[2222] CB69 01              BYTE >01               *  CONtinue
[2223] CB6A 43,4F,53        TEXT 'COS'
[2224] CB6D CD              BYTE COSZ              *  COS
[2225] CB6E 44,45,46        TEXT 'DEF'
[2226] CB71 89              BYTE DEFZ              *  DEF
[2227]               * GKXB added token
[2228] CB72 44,45,4C        TEXT 'DEL'
[2229] CB75 09              BYTE >09               *  DEL
[2230] CB76 44,49,4D        TEXT 'DIM'
[2231] CB79 8A              BYTE DIMZ              *  DIM
[2232] CB7A 45,4E,44        TEXT 'END'
[2233] CB7D 8B              BYTE ENDZ              *  END
[2234] CB7E 45,4F,46        TEXT 'EOF'
[2235] CB81 CA              BYTE EOFZ              *  EOF
[2236] CB82 45,58,50        TEXT 'EXP'
[2237] CB85 CE              BYTE EXPZZ             *  EXP
[2238] CB86 46,4F,52        TEXT 'FOR'
[2239] CB89 8C              BYTE FORZ              *  FOR
[2240] CB8A 49,4E,54        TEXT 'INT'
[2241] CB8D CF              BYTE INTZ              *  INT
[2242] CB8E 4C,45,4E        TEXT 'LEN'
[2243] CB91 D5              BYTE LENZ              *  LEN
[2244] CB92 4C,45,54        TEXT 'LET'
[2245] CB95 8D              BYTE LETZ              *  LET
[2246] CB96 4C,4F,47        TEXT 'LOG'
[2247] CB99 D0              BYTE LOGZ              *  LOG
[2248] CB9A 4D,41,58        TEXT 'MAX'
[2249] CB9D DF              BYTE MAXZ              *  MAX
[2250] CB9E 4D,49,4E        TEXT 'MIN'
[2251] CBA1 E0              BYTE MINZ              *  MIN
[2252] CBA2 4E,45,57        TEXT 'NEW'
[2253] CBA5 00              BYTE >00               *  NEW * RXB CALL NEW
[2254] CBA6 4E,4F,54        TEXT 'NOT'
[2255] CBA9 BD              BYTE NOTZ              *  NOT
[2256] CBAA 4E,55,4D        TEXT 'NUM'
[2257] CBAD 04              BYTE >04               *  NUMber
[2258] CBAE 4F,4C,44        TEXT 'OLD'
[2259] CBB1 05              BYTE >05               *  OLD

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0040 
EQUATES ALCS-359
[2260] CBB2 50,4F,53        TEXT 'POS'
[2261] CBB5 D9              BYTE POSZ              *  POS
[2262] CBB6 52,45,43        TEXT 'REC'
[2263] CBB9 DE              BYTE RECZ              *  REC
[2264] CBBA 52,45,4D        TEXT 'REM'
[2265] CBBD 9A              BYTE REMZ              *  REMark
[2266] CBBE 52,45,53        TEXT 'RES'
[2267] CBC1 06              BYTE >06               *  RESequence
[2268] CBC2 52,4E,44        TEXT 'RND'
[2269] CBC5 D7              BYTE RNDZ              *  RND
[2270]               * RXB PATCH CODE
[2271] CBC6 52,41,4E        TEXT 'RAN'            
[2272] CBC9 E2              BYTE RANZ              *  RAN * RXB RND
[2273] CBCA 52,55,4E        TEXT 'RUN'
[2274] CBCD A9              BYTE RUNZ              *  RUN 
[2275] CBCE 53,47,4E        TEXT 'SGN'
[2276] CBD1 D1              BYTE SGNZZ             *  SGN
[2277] CBD2 53,49,4E        TEXT 'SIN'
[2278] CBD5 D2              BYTE SINZ              *  SIN
[2279] CBD6 53,51,52        TEXT 'SQR'
[2280] CBD9 D3              BYTE SQRZ              *  SQR
[2281] CBDA 53,55,42        TEXT 'SUB'
[2282] CBDD A1              BYTE SUBZ              *  SUB
[2283] CBDE 54,41,42        TEXT 'TAB'
[2284] CBE1 FC              BYTE TABZ              *  TAB
[2285] CBE2 54,41,4E        TEXT 'TAN'
[2286] CBE5 D4              BYTE TANZ              *  TAN
[2287] CBE6 56,41,4C        TEXT 'VAL'
[2288] CBE9 DA              BYTE VALZ              *  VAL
[2289] CBEA 58,4F,52        TEXT 'XOR'
[2290] CBED BC              BYTE XORZ              *  XOR
[2291] CBEE FF              BYTE >FF
[2292] CBEF 42,41,53 CHAR4  TEXT 'BASE'
       CBF2 45
[2293] CBF3 F1              BYTE BASEZ             *  BASE
[2294] CBF4 42,45,45        TEXT 'BEEP'
       CBF7 50
[2295] CBF8 EE              BYTE BEEPZ             *  BEEP
[2296] CBF9 43,41,4C        TEXT 'CALL'
       CBFC 4C
[2297] CBFD 9D              BYTE CALLZ             *  CALL
[2298] CBFE 43,48,52        TEXT 'CHR$'
       CC01 24
[2299] CC02 D6              BYTE CHRZZ             *  CHR$
[2300]               * GKXB added token
[2301] CC03 43,4F,50        TEXT 'COPY'
       CC06 59
[2302] CC07 0A              BYTE >0A               *  COPY
[2303] CC08 44,41,54        TEXT 'DATA'
       CC0B 41
[2304] CC0C 93              BYTE DATAZ             *  DATA
[2305] CC0D 45,4C,53        TEXT 'ELSE'
       CC10 45
[2306] CC11 81              BYTE ELSEZ             *  ELSE
[2307] CC12 47,4F,54        TEXT 'GOTO'
       CC15 4F
[2308] CC16 86              BYTE GOTOZ             *  GOTO * RXB ONKEY
[2309] CC17 4C,49,53        TEXT 'LIST'
       CC1A 54
[2310] CC1B 02              BYTE >02               *  LIST
[2311]               * GKXB added token
[2312] CC1C 4D,4F,56        TEXT 'MOVE'
       CC1F 45
[2313] CC20 0B              BYTE >0B               *  MOVE

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0041 
EQUATES ALCS-359
[2314] CC21 4E,45,58        TEXT 'NEXT'
       CC24 54
[2315] CC25 96              BYTE NEXTZ             *  NEXT
[2316] CC26 4F,50,45        TEXT 'OPEN'
       CC29 4E
[2317] CC2A 9F              BYTE OPENZ             *  OPEN
[2318] CC2B 52,45,41        TEXT 'READ'
       CC2E 44
[2319] CC2F 97              BYTE READZ             *  READ
[2320] CC30 52,50,54        TEXT 'RPT$'
       CC33 24
[2321] CC34 E1              BYTE RPTZZ             *  RPT$
[2322] CC35 53,41,56        TEXT 'SAVE'
       CC38 45
[2323] CC39 07              BYTE >07               *  SAVE * RXB SAVE IV254
[2324] CC3A 53,45,47        TEXT 'SEG$'
       CC3D 24
[2325] CC3E D8              BYTE SEGZZ             *  SEG$
[2326] CC3F 53,49,5A        TEXT 'SIZE'
       CC42 45
[2327] CC43 EB              BYTE SIZEZ             *  SIZE * RXB CALL SIZE
[2328] CC44 53,54,45        TEXT 'STEP'
       CC47 50
[2329] CC48 B2              BYTE STEPZ             *  STEP
[2330] CC49 53,54,4F        TEXT 'STOP'
       CC4C 50
[2331] CC4D 98              BYTE STOPZ             *  STOP * RXB MOTION
[2332] CC4E 53,54,52        TEXT 'STR$'
       CC51 24
[2333] CC52 DB              BYTE STRZZ             *  STR$
[2334] CC53 54,48,45        TEXT 'THEN'
       CC56 4E
[2335] CC57 B0              BYTE THENZ             *  THEN
[2336] CC58 FF              BYTE >FF
[2337] CC59 42,52,45 CHAR5  TEXT 'BREAK'
       CC5C 41,4B
[2338] CC5E 8E              BYTE BREAKZ            *  BREAK
[2339] CC5F 43,4C,4F        TEXT 'CLOSE'
       CC62 53,45
[2340] CC64 A0              BYTE CLOSEZ            *  CLOSE
[2341] CC65 44,49,47        TEXT 'DIGIT'
       CC68 49,54
[2342] CC6A E9              BYTE DIGITZ            *  DIGIT
[2343] CC6B 45,52,41        TEXT 'ERASE'
       CC6E 53,45
[2344] CC70 EF              BYTE ERASEZ            *  ERASE
[2345] CC71 45,52,52        TEXT 'ERROR'
       CC74 4F,52
[2346] CC76 A5              BYTE ERRORZ            *  ERROR
[2347] CC77 46,49,58        TEXT 'FIXED'
       CC7A 45,44
[2348] CC7C FA              BYTE FIXEDZ            *  FIXED
[2349] CC7D 47,4F,53        TEXT 'GOSUB'
       CC80 55,42
[2350] CC82 87              BYTE GOSUBZ            *  GOSUB
[2351] CC83 49,4D,41        TEXT 'IMAGE'
       CC86 47,45
[2352] CC88 A3              BYTE IMAGEZ            *  IMAGE
[2353] CC89 49,4E,50        TEXT 'INPUT'
       CC8C 55,54
[2354] CC8E 92              BYTE INPUTZ            *  INPUT
[2355] CC8F 4D,45,52        TEXT 'MERGE'
       CC92 47,45
[2356] CC94 08              BYTE >08               *  MERGE

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0042 
EQUATES ALCS-359
[2357] CC95 50,52,49        TEXT 'PRINT'
       CC98 4E,54
[2358] CC9A 9C              BYTE PRINTZ            *  PRINT
[2359] CC9B 54,52,41        TEXT 'TRACE'
       CC9E 43,45
[2360] CCA0 90              BYTE TRACEZ            *  TRACE
[2361] CCA1 55,53,49        TEXT 'USING'
       CCA4 4E,47
[2362] CCA6 ED              BYTE USINGZ            *  USING
[2363] CCA7 FF              BYTE >FF
[2364] CCA8 41,43,43 CHAR6  TEXT 'ACCEPT'
       CCAB 45,50,54
[2365] CCAE A4              BYTE ACCEPZ            *  ACCEPT
[2366] CCAF 41,50,50        TEXT 'APPEND'
       CCB2 45,4E,44
[2367] CCB5 F9              BYTE APPENZ            *  APPEND
[2368] CCB6 44,45,4C        TEXT 'DELETE'
       CCB9 45,54,45
[2369] CCBC 99              BYTE DELETZ            *  DELETE
[2370] CCBD 4C,49,4E        TEXT 'LINPUT'
       CCC0 50,55,54
[2371] CCC3 AA              BYTE LINPUZ            *  LINPUT
[2372] CCC4 4E,55,4D        TEXT 'NUMBER'
       CCC7 42,45,52
[2373] CCCA 04              BYTE >04               *  NUMBER
[2374] CCCB 4F,50,54        TEXT 'OPTION'
       CCCE 49,4F,4E
[2375] CCD1 9E              BYTE OPTIOZ            *  OPTION
[2376] CCD2 4F,55,54        TEXT 'OUTPUT'
       CCD5 50,55,54
[2377] CCD8 F7              BYTE OUTPUZ            *  OUTPUT
[2378] CCD9 52,45,54        TEXT 'RETURN'
       CCDC 55,52,4E
[2379] CCDF 88              BYTE RETURZ            *  RETURN
[2380] CCE0 53,55,42        TEXT 'SUBEND'
       CCE3 45,4E,44
[2381] CCE6 A8              BYTE SUBNDZ            *  SUBEND
[2382] CCE7 55,41,4C        TEXT 'UALPHA'
       CCEA 50,48,41
[2383] CCED EA              BYTE UALPHZ            *  UALPHA
[2384] CCEE 55,50,44        TEXT 'UPDATE'
       CCF1 41,54,45
[2385] CCF4 F8              BYTE UPDATZ            *  UPDATE
[2386] CCF5 FF              BYTE >FF
[2387] CCF6 44,49,53 CHAR7  TEXT 'DISPLAY'
       CCF9 50,4C,41
       CCFC 59
[2388] CCFD A2              BYTE DISPLZ            *  DISPLAY
[2389] CCFE 4E,55,4D        TEXT 'NUMERIC'
       CD01 45,52,49
       CD04 43
[2390] CD05 E8              BYTE NUMERZ            *  NUMERIC
[2391] CD06 52,45,53        TEXT 'RESTORE'
       CD09 54,4F,52
       CD0C 45
[2392] CD0D 94              BYTE RESTOZ            *  RESTORE
[2393] CD0E 53,55,42        TEXT 'SUBEXIT'
       CD11 45,58,49
       CD14 54
[2394] CD15 A7              BYTE SUBXTZ            *  SUBEXIT
[2395] CD16 55,4E,42        TEXT 'UNBREAK'
       CD19 52,45,41
       CD1C 4B
[2396] CD1D 8F              BYTE UNBREZ            *  UNBREAK

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0043 
EQUATES ALCS-359
[2397] CD1E 55,4E,54        TEXT 'UNTRACE'
       CD21 52,41,43
       CD24 45
[2398] CD25 91              BYTE UNTRAZ            *  UNTRACE
[2399] CD26 57,41,52        TEXT 'WARNING'
       CD29 4E,49,4E
       CD2C 47
[2400] CD2D A6              BYTE WARNZ             *  WARNING
[2401] CD2E FF              BYTE >FF
[2402] CD2F 43,4F,4E CHAR8  TEXT 'CONTINUE'
       CD32 54,49,4E
       CD35 55,45
[2403] CD37 01              BYTE >01               *  CONTINUE
[2404] CD38 49,4E,54        TEXT 'INTERNAL'
       CD3B 45,52,4E
       CD3E 41,4C
[2405] CD40 F5              BYTE INTERZ            *  INTERNAL
[2406] CD41 52,45,4C        TEXT 'RELATIVE'
       CD44 41,54,49
       CD47 56,45
[2407] CD49 F4              BYTE RELATZ            *  RELATIVE
[2408] CD4A 56,41,4C        TEXT 'VALIDATE'
       CD4D 49,44,41
       CD50 54,45
[2409] CD52 FE              BYTE VALIDZ            *  VALIDATE
[2410] CD53 56,41,52        TEXT 'VARIABLE'
       CD56 49,41,42
       CD59 4C,45
[2411] CD5B F3              BYTE VARIAZ            *  VARIABLE
[2412] CD5C FF              BYTE >FF
[2413] CD5D 52,41,4E CHAR9  TEXT 'RANDOMIZE'
       CD60 44,4F,4D
       CD63 49,5A,45
[2414] CD66 95              BYTE RANDOZ            *  RANDOMIZE
[2415] CD67 FF              BYTE >FF
[2416] CD68 53,45,51 CHARA  TEXT 'SEQUENTIAL'
       CD6B 55,45,4E
       CD6E 54,49,41
       CD71 4C
[2417] CD72 F6              BYTE SEQUEZ            *  SEQUENTIAL
[2418] CD73 FF              BYTE >FF
[2419]               ***********************************************************
[2420]               * RXB PATCH CODE FILLER BYTE ******************************
[2421] CD74 00,00,00        BYTE >00,>00,>00
[2422]               * GROM ADDRESS >CD77 FOR ERRTAB
[2423]               ***********************************************************
[2424]               * ERRTAB - Error table containing all of the error messages
[2425]               *          error numbers and the severity code for each
[2426]               *          error. The error call number is the data byte
[2427]               *          that must follow the CALL ERRZZ or CALL WARNZZ.
[2428]               *          Messages with severity of zero are system
[2429]               *          messages and not error messages.
[2430]               *
[2431]               *  Message, Error #, Severity                     CALL #
[2432]               ***********************************************************

Thus I am going to have to move some stuff in GPL and add HEX to XB ROMs.

Link to comment
Share on other sites

Looking at other commands that can be added like HEX(string) or HEX(decimal) it occured to me I could add:

 

BEEP does same as CALL BEEP

HONK does same as CALL HONK

BIAS(-string) or BIAS(+string) this removes or adds screen bias from a string off screen or put on screen

INVERSE(character-code) this will inverse the definition of a character from on dots to off dots

 

Also:

 

BASIC justs goes to TI Basic

BYE same as CALL BYE

FILES(number) same as CALL FILES(number)

NEW same as CALL NEW

SIZE same as CALL SIZE

XB("pathname.filename") or XB this is like RUN but works with strings.

 

These are all RXB commands so a new RXB Manual will be required and new Demo programs re-written.

Link to comment
Share on other sites

Well post I put up before this showed the listing XB ROMs use to find the KEYWORD you put in like say PRINT or CALL CLEAR as it looks for PRINT or CALL in the list first.

 

Previously in new version of RXB I have changed all routines under CALL "whatever" to put the most often called at top of list to speed up execution of RXB in XB programs.

 

Now here is the new XB ROMs keyword search list and you will notice that it is no longer alphabetically listed like from Texas Instruments anymore.

 

It is ordered by most often used or searched commands at top and least at bottom so should provide a slight speed increase in RXB vs XB.

CHAR1  TEXT '!'
       BYTE TREMZ             *  !
       TEXT '='
       BYTE EQUALZ            *  =
       TEXT '('
       BYTE LPARZ             *  (
       TEXT ')'
       BYTE RPARZ             *  )
       TEXT '#'
       BYTE NUMBEZ            *  #
       TEXT ':'
       BYTE COLONZ            *  :
       TEXT ';'
       BYTE SEMICZ            *  ;
       TEXT '*'
       BYTE MULTZ             *  *
       TEXT '+'
       BYTE PLUSZ             *  +
       TEXT ','
       BYTE COMMAZ            *  ,
       TEXT '-'
       BYTE MINUSZ            *  -
       TEXT '/'
       BYTE DIVIZ             *  /
       TEXT '<'
       BYTE LESSZ             *  <
       TEXT '>'
       BYTE GREATZ            *  >
       TEXT '^'
       BYTE CIRCUZ            *  ^
       BYTE >FF
CHAR2  TEXT '::'
       BYTE SSEPZ             *  ::
       TEXT 'IF'
       BYTE IFZ               *  IF
       TEXT 'ON'
       BYTE ONZ               *  ON * RXB ONKEY
       TEXT 'TO'
       BYTE TOZ               *  TO
       TEXT 'OR'
       BYTE ORZ               *  OR
       TEXT 'PI'
       BYTE PIZ               *  PI
       BYTE >FF
CHAR3  TEXT 'RND'
       BYTE RNDZ              *  RND * RXB CHANGED
       TEXT 'FOR'
       BYTE FORZ              *  FOR
       TEXT 'INT'
       BYTE INTZ              *  INT
       TEXT 'SUB'
       BYTE SUBZ              *  SUB
       TEXT 'REM'
       BYTE REMZ              *  REMark
       TEXT 'AND'
       BYTE ANDZ              *  AND
       TEXT 'NOT'
       BYTE NOTZ              *  NOT
       TEXT 'XOR'
       BYTE XORZ              *  XOR
       TEXT 'LEN'
       BYTE LENZ              *  LEN
       TEXT 'ASC'
       BYTE ASCZ              *  ASC
       TEXT 'POS'
       BYTE POSZ              *  POS
       TEXT 'VAL'
       BYTE VALZ              *  VAL
       TEXT 'SGN'
       BYTE SGNZZ             *  SGN
       TEXT 'TAB'
       BYTE TABZ              *  TAB
       TEXT 'ALL'
       BYTE ALLZ              *  ALL
       TEXT 'MAX'
       BYTE MAXZ              *  MAX
       TEXT 'MIN'
       BYTE MINZ              *  MIN
       TEXT 'ABS'
       BYTE ABSZ              *  ABS
       TEXT 'SQR'
       BYTE SQRZ              *  SQR
       TEXT 'TAN'
       BYTE TANZ              *  TAN
       TEXT 'ATN'
       BYTE ATNZ              *  ATN
       TEXT 'SIN'
       BYTE SINZ              *  SIN
       TEXT 'LOG'
       BYTE LOGZ              *  LOG
       TEXT 'EXP'
       BYTE EXPZZ             *  EXP
       TEXT 'COS'
       BYTE COSZ              *  COS
       TEXT 'ALL'
       BYTE EOFZ              *  EOF
       TEXT 'REC'
       BYTE RECZ              *  REC
       TEXT 'DIM'
       BYTE DIMZ              *  DIM
       TEXT 'DEF'
       BYTE DEFZ              *  DEF
       TEXT 'RUN'
       BYTE RUNZ              *  RUN
       TEXT 'CON'
       BYTE >01               *  CONtinue
       TEXT 'RES'
       BYTE >06               *  RESequence
       TEXT 'NUM'
       BYTE >04               *  NUMber
* GKXB added token
       TEXT 'DEL'
       BYTE >09               *  DEL
       TEXT 'NEW'
       BYTE >00               *  NEW * RXB CALL NEW
       TEXT 'END'
       BYTE ENDZ              *  END
       TEXT 'OLD'
       BYTE >05               *  OLD * RXB SAMS
       TEXT 'BYE'
       BYTE >03               *  BYE
       BYTE >FF
CHAR4  TEXT 'CALL'
       BYTE CALLZ             *  CALL
       TEXT 'GOTO'
       BYTE GOTOZ             *  GOTO * RXB ONKEY
       TEXT 'NEXT'
       BYTE NEXTZ             *  NEXT
       TEXT 'THEN'
       BYTE THENZ             *  THEN
       TEXT 'STEP'
       BYTE STEPZ             *  STEP
       TEXT 'ELSE'
       BYTE ELSEZ             *  ELSE
       TEXT 'SEG$'
       BYTE SEGZZ             *  SEG$
       TEXT 'CHR$'
       BYTE CHRZZ             *  CHR$
       TEXT 'STR$'
       BYTE STRZZ             *  STR$
       TEXT 'RPT$'
       BYTE RPTZZ             *  RPT$
       TEXT 'BEEP'
       BYTE BEEPZ             *  BEEP
       TEXT 'DATA'
       BYTE DATAZ             *  DATA
       TEXT 'READ'
       BYTE READZ             *  READ
       TEXT 'OPEN'
       BYTE OPENZ             *  OPEN
       TEXT 'BASE'
       BYTE BASEZ             *  BASE
       TEXT 'STOP'
       BYTE STOPZ             *  STOP * RXB MOTION
       TEXT 'SIZE'
       BYTE SIZEZ             *  SIZE * RXB CALL SIZE
       TEXT 'LIST'
       BYTE >02               *  LIST
       TEXT 'SAVE'
       BYTE >07               *  SAVE * RXB SAVE IV254
* GKXB added token
       TEXT 'COPY'
       BYTE >0A               *  COPY
* GKXB added token
       TEXT 'MOVE'
       BYTE >0B               *  MOVE
       BYTE >FF
CHAR5  TEXT 'GOSUB'
       BYTE GOSUBZ            *  GOSUB
       TEXT 'PRINT'
       BYTE PRINTZ            *  PRINT
       TEXT 'INPUT'
       BYTE INPUTZ            *  INPUT
       TEXT 'ERROR'
       BYTE ERRORZ            *  ERROR
       TEXT 'DIGIT'
       BYTE DIGITZ            *  DIGIT
       TEXT 'ERASE'
       BYTE ERASEZ            *  ERASE
       TEXT 'USING'
       BYTE USINGZ            *  USING
       TEXT 'IMAGE'
       BYTE IMAGEZ            *  IMAGE
       TEXT 'CLOSE'
       BYTE CLOSEZ            *  CLOSE
       TEXT 'FIXED'
       BYTE FIXEDZ            *  FIXED
       TEXT 'BREAK'
       BYTE BREAKZ            *  BREAK
       TEXT 'TRACE'
       BYTE TRACEZ            *  TRACE
       TEXT 'MERGE'
       BYTE >08               *  MERGE
       BYTE >FF
CHAR6  TEXT 'RETURN'
       BYTE RETURZ            *  RETURN
       TEXT 'SUBEND'
       BYTE SUBNDZ            *  SUBEND
       TEXT 'ACCEPT'
       BYTE ACCEPZ            *  ACCEPT
       TEXT 'LINPUT'
       BYTE LINPUZ            *  LINPUT
       TEXT 'NUMBER'
       BYTE >04               *  NUMBER
       TEXT 'UALPHA'
       BYTE UALPHZ            *  UALPHA
       TEXT 'OUTPUT'
       BYTE OUTPUZ            *  OUTPUT
       TEXT 'APPEND'
       BYTE APPENZ            *  APPEND
       TEXT 'UPDATE'
       BYTE UPDATZ            *  UPDATE
       TEXT 'OPTION'
       BYTE OPTIOZ            *  OPTION
       TEXT 'DELETE'
       BYTE DELETZ            *  DELETE
       BYTE >FF
CHAR7  TEXT 'DISPLAY'
       BYTE DISPLZ            *  DISPLAY
       TEXT 'NUMERIC'
       BYTE NUMERZ            *  NUMERIC
       TEXT 'SUBEXIT'
       BYTE SUBXTZ            *  SUBEXIT
       TEXT 'RESTORE'
       BYTE RESTOZ            *  RESTORE
       TEXT 'UNBREAK'
       BYTE UNBREZ            *  UNBREAK
       TEXT 'UNTRACE'
       BYTE UNTRAZ            *  UNTRACE
       TEXT 'WARNING'
       BYTE WARNZ             *  WARNING
       BYTE >FF
CHAR8  TEXT 'INTERNAL'
       BYTE INTERZ            *  INTERNAL
       TEXT 'RELATIVE'
       BYTE RELATZ            *  RELATIVE
       TEXT 'VALIDATE'
       BYTE VALIDZ            *  VALIDATE
       TEXT 'VARIABLE'
       BYTE VARIAZ            *  VARIABLE
       TEXT 'CONTINUE'
       BYTE >01               *  CONTINUE
       BYTE >FF
CHAR9  TEXT 'RANDOMIZE'
       BYTE RANDOZ            *  RANDOMIZE
       BYTE >FF
CHARA  TEXT 'SEQUENTIAL'
       BYTE SEQUEZ            *  SEQUENTIAL
       BYTE >FF
***********************************************************
  • Like 2
Link to comment
Share on other sites

Ok update CRASHED OVER AND OVER....????

 

Well in XB ROMs it turns out:

1) Keyword search list first single token must be ! (REMARK) others are like # or , or : or ; or & ....

2) Keyword search list two token must be TO (as in for x=2 TO y) others are like IF or ON or OR or PI or :: or AT ...

 

So clearly I need to remake XB ROMs and wish I had some help as Assembly is not my thing!

 

Anyhow here is something I did not know XB ROMs do at every statement it scans keyboard for BREAK KEY.

1013      6542  EXEC15 EQU  $   
  1014      6544  C3     EQU  $+2               Constant data 3   
  1015      6545  CB3    EQU  $+3               Constant byte 3   
  1016 6542 0300         LIMI 3                 Let interrupts loose  
       6544 0003  
  1017      6548  C0     EQU  $+2               Constant data 0   

 99/4 ASSEMBLER
PARSES                                                       PAGE 0022
  1018 6546 0300         LIMI 0                 Shut down interrupts  
       6548 0000  
  1019 654A 04E0         CLR  @>83D6            Reset VDP timeout   
       654C 83D6  
  1020 654E 020C         LI   R12,>24           Load console KBD address in CR
       6550 0024  
  1021 6552 30E0         LDCR @C0,3             Select keyboard section   
       6554 6548  
  1022 6556 020C         LI   R12,6             Read address  
       6558 0006  
  1023 655A 3600         STCR R0,8              SCAN the keyboard   
  1024 655C 2420         CZC  @C1000,R0         Shift-key depressed?  
       655E 600A  
  1025 6560 160A         JNE  EXEC16            No, execute the Basic statemen
  1026 6562 020C         LI   R12,>24           Test column 3 of keyboard   
       6564 0024  
  1027 6566 30E0         LDCR @CB3,3            Select keyboard section   
       6568 6545  
  1028 656A 020C         LI   R12,6             Read address  
       656C 0006  
  1029 656E 3600         STCR R0,8              SCAN the keyboard   
  1030 6570 2420         CZC  @C1000,R0         Shift-C depressed?  
       6572 600A  
  1031 6574 132E         JEQ  BRKP1L            Yes, so take Basic breakpoint 
  1032 6576 C820  EXEC16 MOV  @PGMPTR,@SMTSRT   Save start of statement   
       6578 832C  
       657A 831E  
  1033 657C 05C9         INCT R9                Get subroutine stack space  
  1034 657E C660         MOV  @EXRTNA,*R9       Save the GPL return address   
       6580 6466  
  1035 6582 06A0         BL   @PGMCHR           Now get 1st character of stmt 
       6584 6C74  
  1036 6586 1320         JEQ  EXRTN3            If EOL after EOS  
  1037 6588 1102  EXEC17 JLT  EXEC20            If top bit set->keyword   
  1038 658A 0460         B    @NLET             If not->fake a 'LET' stmt   
       658C 6948  
  1039 658E C1C8  EXEC20 MOV  R8,R7             Save 1st token so can get 2nd 
  1040 6590 05A0         INC  @PGMPTR           Increment the perm pointer  
       6592 832C  
  1041 6594 D21A         MOVB *R10,R8           Read the character  
  1042 6596 0977         SRL  R7,7              Convert 1st to table offset   
  1043 6598 0227         AI   R7,->AA*2         Check for legal stmt token  
       659A FEAC  
  1044 659C 1558         JGT  ERRONE            Not in range -> error   
  1045 659E C1E7         MOV  @STMTTB(R7),R7    Get address of stmt handler   
       65A0 69FC  
  1046 65A2 118F         JLT  P17L              If top bit set -> GROM code   
  1047 65A4 0457         B    *R7               If 9900 code, goto it!  
  1048 65A6   83  EXRTN  BYTE >83               Unused bytes for data constant
  1049 65A7   65  CBH65  BYTE >65                since NUDEND skips precedence
  1050 65A8 0288         CI   R8,SSEPZ*256      EOS only?   
       65AA 8200  
  1051 65AC 13CA         JEQ  EXEC15            Yes, continue on this line  
  1052 65AE D020  EXRTN2 MOVB @PRGFLG,R0        Did we execute an imperative  
       65B0 8344  
  1053 65B2 1351         JEQ  EXEC50            Yes, so return to top-level   
  1054 65B4 6820         S    @C4,@EXTRAM       No, so goto the next line   
       65B6 6A80  
       65B8 832E  

 99/4 ASSEMBLER
PARSES                                                       PAGE 0023
  1055 65BA 8820         C    @EXTRAM,@STLN     Check to see if end of program
       65BC 832E  
       65BE 8330  
  1056 65C0 14A6         JHE  EXEC10            No, so loop for the next line 
  1057 65C2 1049         JMP  EXEC50            Yes, so return to top-level   
  • Like 1
Link to comment
Share on other sites

While exploring why my *REM w/CTRL CHARS deviation* operates as such... I was reviewing GROM 0 in TI INTERN... I speculated that the type of entries a user might make in a REM statement would be misinterpreted by the previous routines of the interpreter if the REM routine were repositioned after those routines. It seems as though the different ranges of ASCII chars are considered in order of groupings e.g. (0-31)(31-127)(128-255). I noticed a similar handling of codes in the speech allophone table. Hmm... Just some abstract observations... bear in mind that I am not very familiar with the GPL op-codes.

I have a strong aversion to TI BASIC and XP, I once wrote all my AUTOMATION PROGRAMING in TI BASIC making heavy use of ARRAYS, NUMERIC and STRING FUNCTIONS and one extremly long and complex USER DEFINED FUNCTION(to DISPLAY the time in the desired format). TI might have mentioned somwhere in all the literature... that TI basic did not offer anywhere near the level of performance which could be observed in most of their SOLID STATE SOFTWARE. I was very young... working without the benefit of any tutelage... and became convinced the limitations imposed were my own. It was all too slow... I ran out of MEMORY and was discouraged by the prattle from salesman and TIs over the phone help(completely ridiculous in the early years)... Personal and family matters prevailed and all my work was lost(more than once).

One thing that I clearly see as a problem between the TI BASICs and ASSY has been the constant need to convert between DECIMAL and HEX. I Think it's a good move that you are addressing this issue. I do like the direction your going in!... I have just had to laugh at the results of my own assessment of XBs early attempts to control/detect sprites(considering how slowly XB STATEMENTS EXECUTE reletive to MACHINE LANGUAGE)... however as of late, programmers here seem to be getting some decent results.

I'm trying to follow your issue with MEMORY PAGING, as I have no experience with this and am now confronting muti-page PROGRAMMING on the FG99. I am just inventing my own system now... but you have to operate within an established set of rules.

Keep up the good work!

P.S. I hope I didn't go to far O.T. :)

  • Like 1
Link to comment
Share on other sites

The GPL listing for search of what you typed into XB for routines is not Alpha Numeric or any any given order.

Example is frist tokens are not in any give order but just pretty random:

[2159] CB14 21       CHAR1  TEXT '!'
[2160] CB15 83              BYTE TREMZ             *  !
[2161] CB16 23              TEXT '#'
[2162] CB17 FD              BYTE NUMBEZ            *  #
[2163] CB18 26              TEXT '&'
[2164] CB19 B8              BYTE CONCZ             *  &
[2165] CB1A 28              TEXT '('
[2166] CB1B B7              BYTE LPARZ             *  (
[2167] CB1C 29              TEXT ')'
[2168] CB1D B6              BYTE RPARZ             *  )
[2169] CB1E 2A              TEXT '*'
[2170] CB1F C3              BYTE MULTZ             *  *
[2171] CB20 2B              TEXT '+'
[2172] CB21 C1              BYTE PLUSZ             *  +
[2173] CB22 2C              TEXT ','
[2174] CB23 B3              BYTE COMMAZ            *  ,
[2175] CB24 2D              TEXT '-'
[2176] CB25 C2              BYTE MINUSZ            *  -
[2177] CB26 2F              TEXT '/'
[2178] CB27 C4              BYTE DIVIZ             *  /
[2179] CB28 3A              TEXT ':'
[2180] CB29 B5              BYTE COLONZ            *  :
[2181] CB2A 3B              TEXT ';'
[2182] CB2B B4              BYTE SEMICZ            *  ;
[2183] CB2C 3C              TEXT '<'
[2184] CB2D BF              BYTE LESSZ             *  <
[2185] CB2E 3D              TEXT '='
[2186] CB2F BE              BYTE EQUALZ            *  =
[2187] CB30 3E              TEXT '>'
[2188] CB31 C0              BYTE GREATZ            *  >
[2189] CB32 5E              TEXT '^'
[2190] CB33 C5              BYTE CIRCUZ            *  ^
[2191] CB34 FF              BYTE >FF
[2192] CB35 3A,3A    CHAR2  TEXT '::'

The list goes from >83 the ! to >FD the # which is second to >B8 the & which is third in list so no order at all.

 

But I did discover that the XB ROMs are picky about some of the order used, thus I have to be careful as to changing the rankings.

 

As for SAMS RAM paging I am using GPL that has the advantage of not needing a RAM address to remember pages being used or switched.

Edited by RXB
Link to comment
Share on other sites

I was thinking of making numerous ROMs for RXB (XB) current switch method could up updated...

0207            ************************************************************
  0208 6000              AORG >6000   
  0210                
  0211            * PAGE SELECTOR FOR PAGE 1  
  0212      6000  PAGE1  EQU  $                 >6000   
  0213 6000 0002  C2     DATA 2                 0   
  0214            * PAGE SELECTOR FOR PAGE 2  
  0215      6002  PAGE2  EQU  $                 >6002   
  0216 6002   00  C7     BYTE >00   
  0217 6003   07  CBH7   BYTE >07               2   
  0218 6004   0A  CBHA   BYTE >0A   
  0219 6005   94  CBH94  BYTE >94               4   
  0220 6006 0028  C40    DATA 40                6   
  0221 6008 0064  C100   DATA 100               8   
  0222 600A 1000  C1000  DATA >1000             A   
  0223 600C 0000         DATA 0                 C   
  0224 600E 4001  FLTONE DATA >4001             E   
  0225            ************************************************************
  0226            * XML table number 7 for Extended Basic - must have   
  0227            *     it's origin at >6010  
  0228            ************************************************************
  0229            *           0      1      2      3      4      5     6  
  0230 6010 619C         DATA COMPCG,GETSTG,MEMCHG,CNSSEL,PARSEG,CONTG,EXECG  
       6012 61A2  
       6014 72CE  
       6016 6070  
       6018 6470  
       601A 64C4  
       601C 6500  
  0231            *           7      8    9     A    B    C      D  
  0232 601E 61BA         DATA VPUSHG,VPOP,PGMCH,SYMB,SMBB,ASSGNV,FBSYMB   
       6020 6C2A  

 99/4 ASSEMBLER
XML359                                                       PAGE 0005
       6022 6410  
       6024 61B4  
       6026 61A8  
       6028 61AE  
       602A 618C  
  0233            *             E     F   
  0234 602C 6EE2         DATA SPEED,CRNSEL  
       602E 6076  
  0235            ************************************************************
  0236            * XML table number 8 for Extended Basic - must have   
  0237            *     it's origin at >6030  
  0238            ************************************************************
  0239            *           0   1      2    3      4  5     6      7  
  0240 6030 74AA         DATA CIF,CONTIN,RTNG,SCROLL,IO,GREAD,GWRITE,DELREP   
       6032 65CC  
       6034 6630  
       6036 7ADA  
       6038 7B48  
       603A 7EB4  
       603C 7ED8  
       603E 7EF4  
  0241            *           8    9    A      B      C      D      E   
  0242 6040 7F7E         DATA MVDN,MVUP,VGWITE,GVWITE,GREAD1,GWITE1,GDTECT  
       6042 6F98  
       6044 7FC0  
       6046 7FDA  
       6048 7EA6  
       604A 7ECA  
       604C 6050  
  0243            *           F   
  0244 604E 7C56         DATA PSCAN   
  0245                
  0246            * Determine if and how much ERAM is present   
  0247 6050 D80B  GDTECT MOVB R11,@PAGE1        First enable page 1 ROM   
       6052 6000  
  0248            *-----------------------------------------------------------
  0249            * Replace following line      6/16/81   
  0250            * (Extended Basic must be made to leave enough space at   
  0251            * top of RAM expansion for the "hooks" left by the 99/4A  
  0252            * for TIBUG.)   
  0253            *      SETO R0                Start at >FFFF  
  0254            * with  
  0255 6054 0200         LI   R0,>FFE7          Start at >FFE7  
       6056 FFE7  
  0256            *-----------------------------------------------------------
  0257 6058 D40B         MOVB R11,*R0           Write a byte of data  
  0258 605A 940B         CB   R11,*R0           Read and compare the data   
  0259 605C 1306         JEQ  DTECT2            If matches-found ERAM top   
  0260            *-----------------------------------------------------------
  0261            * Change the following line   6/16/81   
  0262            *      AI   R0,->2000         Else drop down 8K   
  0263 605E 0200         LI   R0,>DFFF          Else drop down 8K   
       6060 DFFF  
  0264            *-----------------------------------------------------------
  0265 6062 D40B         MOVB R11,*R0           Write a byte of data  
  0266 6064 940B         CB   R11,*R0           Read and compare the data   
  0267 6066 1301         JEQ  DTECT2            If matches-found ERAM top   
  0268 6068 04C0         CLR  R0                No match so no ERAM   
  0269 606A C800  DTECT2 MOV  R0,@RAMTOP        Set the ERAM top  

 99/4 ASSEMBLER
XML359                                                       PAGE 0006
       606C 8384  
  0270 606E 045B         RT                     And return to GPL   

Now >6010 and >6030 have to remain in exact location for Lower 8K assembly programs and EA manual using Assembly in XB,

but >6000 to >600F could be used for bank switching 14 more banks of 8K banks or upper 4K banks.

 

I can move >6004 to >600F to some where else in XB ROMs there is 20 bytes open in XB ROMS, or use exiting values.

 

For additional XB ROMs that upgrade XB the lower 4K of XB ROM would have to be duplicates for a 8K switching.

 

Thus instead of a write to >6002 being bank 2 of 8K XB ROMs, we could write to >600A and that would be a new XB 8K ROM page.

HI again,

 

I'm not sure I'll be of any direct help to you with ASSEMBLY as I am not experienced with interpreter design... but there are aspects of the system I have delved into somewhat. I'm redoing all my AUTOMATION programming in ASSY now. I suppose I'm not a very experienced programmer. I do however have some troubleshooting skills, when rested... a greater question indeed.

 

I was not clear... but I was referring to the MEMORY PAGING (BANK SWITCHING TABLES?) used on the XB ROMS.

 

If I can't help, I would still like to learn more about this technique.

 

P.S. I think your SAMS support will go far with programmers, elevating applications(games) performance expectations. :cool:

  • Like 1
Link to comment
Share on other sites

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.

 

So what I am suggesting for new XB ROMs is >6000 to >600F remain the same and this would give XB a total of 8 pages of 8K or 8 pages of upper 4K.

 

Even at 4K each that is 32K of XB ROM which is 20K more then we have now.

 

Examples are Sprites could be upgraded using XB ROM instead of GPL, and additional graphics modes could be created.

Link to comment
Share on other sites

I've spent some time looking over your code yesterday and now... It's beginning to drink in... there's a lot of competition for my attention where I am... it sounds to me like you have most of what you need to know... I'm having trouble identifying your dilemma... I know you want to add more routines... it looks like they are organized into look-up tables(XML)... So you want to add more pages of ROM memory to accommodate them... Is the issue adding more physical I.C's to a particular module design or is it reworking the page switching routine(s) for an existing design or to be run from EMUs.

I went back to page 1 of this thread and was somewhat overwhelmed by the different directions captioned.

Not too sure what you meant by; "remain the same" in the statement: So what I am suggesting for new XB ROMs is >6000 to >600F remain the same and this would give XB a total of 8 pages of 8K or 8 pages of upper 4K.

cool.

Link to comment
Share on other sites

Yea just need to know how to access to hardware changes work.

I have assumed that if the ROM mapping could be expanded by 8 pages of 8K then I could use the additional pages from >6004 to >600E (Two bytes per word)

  0211            * PAGE SELECTOR FOR PAGE 1  
  0212      6000  PAGE1  EQU  $                 >6000   
  0213 6000 0002  C2     DATA 2                 0   
  0214            * PAGE SELECTOR FOR PAGE 2  
  0215      6002  PAGE2  EQU  $                 >6002   
  0216 6002   00  C7     BYTE >00   
  0217 6003   07  CBH7   BYTE >07               2   
  0218 6004   0A  CBHA   BYTE >0A   
  0219 6005   94  CBH94  BYTE >94               4   
  0220 6006 0028  C40    DATA 40                6   
  0221 6008 0064  C100   DATA 100               8   
  0222 600A 1000  C1000  DATA >1000             A   
  0223 600C 0000         DATA 0                 C   
  0224 600E 4001  FLTONE DATA >4001             E   

So say GPL calls page 7 by reading >600C it should engage that ROM page 7?

Edited by RXB
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?

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?

 

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

  • Like 1
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...