Jump to content

0

XB line encoding


8 replies to this topic

#1 moulinaie OFFLINE  

moulinaie

    Moonsweeper

  • 294 posts
  • Location:France, Burgundy

Posted Mon Jan 23, 2012 4:35 AM

Hi,

Where to find the information about how a X-BASIC line is encoded?
What I need is this:

I have a line number..

I want to get its address in CPU RAM (I assume that the 32K is attached)
I want to parse the line
Then I want to get the next line and so on...

Guillaume.

#2 apersson850 OFFLINE  

apersson850

    Chopper Commander

  • 101 posts

Posted Mon Jan 23, 2012 5:08 AM

Somewhere I have a whole assembly program (source code) which lists an Extended BASIC program, together with a checksum for each line. It's on 5 1/4" disks for the real 99/4A, so before I try to transfer it to something more modern, would such a program be helpful to you?

#3 moulinaie OFFLINE  

moulinaie

    Moonsweeper

  • 294 posts
  • Location:France, Burgundy

Posted Mon Jan 23, 2012 5:11 AM

View Postapersson850, on Mon Jan 23, 2012 5:08 AM, said:

Somewhere I have a whole assembly program (source code) which lists an Extended BASIC program, together with a checksum for each line. It's on 5 1/4" disks for the real 99/4A, so before I try to transfer it to something more modern, would such a program be helpful to you?

Sure, this would help !
Guillaume.

#4 Willsy OFFLINE  

Willsy

    Stargunner

  • 1,217 posts
  • Location:Uzbekistan (no, really!)

Posted Mon Jan 23, 2012 6:57 AM

I'm pretty sure this is discussed in the Smart Programmer magazines. These are all available for download on the WHT FTP site IIRC. There's not that many of them so it will not take too much time to search through them. You'll find lots of other interesting stuff at the same time!

Mark

#5 RXB OFFLINE  

RXB

    Dragonstomper

  • 675 posts
  • Location:Vancouver, Washington, USA

Posted Mon Jan 23, 2012 7:35 AM

Here you go all the tokens used:

[0299]    ***********************************************************
[0300]    *    BASIC TOKEN TABLE
[0301]    *   EQU  >80    spare token
[0302] 0081   ELSEZ  EQU  >81    ELSE
[0303] 0082   SSEPZ  EQU  >82    ::
[0304] 0083   TREMZ  EQU  >83    $
[0305] 0084   IFZ    EQU  >84    IF
[0306] 0085   GOZ    EQU  >85    GO
[0307] 0086   GOTOZ  EQU  >86    GOTO
[0308] 0087   GOSUBZ EQU  >87    GOSUB
[0309] 0088   RETURZ EQU  >88    RETURN
[0310] 0089   DEFZ   EQU  >89    DEF
[0311] 008A   DIMZ   EQU  >8A    DIM
[0312] 008B   ENDZ   EQU  >8B    END
[0313] 008C   FORZ   EQU  >8C    FOR
[0314] 008D   LETZ   EQU  >8D    LET
[0315] 008E   BREAKZ EQU  >8E    BREAK
[0316] 008F   UNBREZ EQU  >8F    UNBREAK
[0317] 0090   TRACEZ EQU  >90    TRACE
[0318] 0091   UNTRAZ EQU  >91    UNTRACE
[0319] 0092   INPUTZ EQU  >92    INPUT
[0320] 0093   DATAZ  EQU  >93    DATA
[0321] 0094   RESTOZ EQU  >94    RESTORE
[0322] 0095   RANDOZ EQU  >95    RANDOMIZE
[0323] 0096   NEXTZ  EQU  >96    NEXT
[0324] 0097   READZ  EQU  >97    READ
[0325] 0098   STOPZ  EQU  >98    STOP
[0326] 0099   DELETZ EQU  >99    DELETE
[0327] 009A   REMZ   EQU  >9A    REM
[0328] 009B   ONZ    EQU  >9B    ON
[0329] 009C   PRINTZ EQU  >9C    PRINT
[0330] 009D   CALLZ  EQU  >9D    CALL
[0331] 009E   OPTIOZ EQU  >9E    OPTION
[0332] 009F   OPENZ  EQU  >9F    OPEN
[0333] 00A0   CLOSEZ EQU  >A0    CLOSE
[0334] 00A1   SUBZ   EQU  >A1    SUB
[0335] 00A2   DISPLZ EQU  >A2    DISPLAY
[0336] 00A3   IMAGEZ EQU  >A3    IMAGE
[0337] 00A4   ACCEPZ EQU  >A4    ACCEPT
[0338] 00A5   ERRORZ EQU  >A5    ERROR
[0339] 00A6   WARNZ  EQU  >A6    WARNING
[0340] 00A7   SUBXTZ EQU  >A7    SUBEXIT
[0341] 00A8   SUBNDZ EQU  >A8    SUBEND
[0342] 00A9   RUNZ   EQU  >A9    RUN
[0343] 00AA   LINPUZ EQU  >AA    LINPUT
[0344]    *   EQU  >AB    Zpare token (LIBRARY)
[0345]    *   EQU  >AC    Zpare token (REAL)
[0346]    *   EQU  >AD    Zpare token (INTEGER)
[0347]    *   EQU  >AE    Zpare token (SCRATCH)
[0348]    *   EQU  >AF    Zpare token
[0349] 00B0   THENZ  EQU  >B0    THEN
[0350] 00B1   TOZ    EQU  >B1    TO
[0351] 00B2   STEPZ  EQU  >B2    STEP
[0352] 00B3   COMMAZ EQU  >B3    ,
[0353] 00B4   SEMICZ EQU  >B4    ;
[0354] 00B5   COLONZ EQU  >B5    :
[0355] 00B6   RPARZ  EQU  >B6    )
[0356] 00B7   LPARZ  EQU  >B7    (
[0357] 00B8   CONCZ  EQU  >B8    &   (CONCATENATE)
[0358]    *   EQU  >B9    spare token
[0359] 00BA   ORZ    EQU  >BA    OR
[0360] 00BB   ANDZ   EQU  >BB    AND
[0361] 00BC   XORZ   EQU  >BC    XOR
[0362] 00BD   NOTZ   EQU  >BD    NOT
[0363] 00BE   EQUALZ EQU  >BE    =
[0364] 00BF   LESSZ  EQU  >BF    <
[0365] 00C0   GREATZ EQU  >C0    >
[0366] 00C1   PLUSZ  EQU  >C1    +
[0367] 00C2   MINUSZ EQU  >C2    -
[0368] 00C3   MULTZ  EQU  >C3    *
[0369] 00C4   DIVIZ  EQU  >C4    /
[0370] 00C5   CIRCUZ EQU  >C5    ^
[0371]    *   EQU  >C6    spare token
[0372] 00C7   STRINZ EQU  >C7    QUOTED STRING
[0373] 00C8   UNQSTZ EQU  >C8    UNQUOTED STRING
[0374] 00C8   NUMZ   EQU  >C8    ALSO NUMERICAL STRING
[0375] 00C8   NUMCOZ EQU  >C8    ALSO UNQUOTED STRING
[0376] 00C9   LNZ    EQU  >C9    LINE NUMBER CONSTANT
[0377]    *   EQU  >CA    spare token
[0378] 00CB   ABSZ   EQU  >CB    ABS
[0379] 00CC   ATNZ   EQU  >CC    ATN
[0380] 00CD   COSZ   EQU  >CD    COS
[0381] 00CE   EXPZZ  EQU  >CE    EXP
[0382] 00CF   INTZ   EQU  >CF    INT
[0383] 00D0   LOGZ   EQU  >D0    LOG
[0384] 00D1   SGNZZ  EQU  >D1    SGN
[0385] 00D2   SINZ   EQU  >D2    SIN
[0386] 00D3   SQRZ   EQU  >D3    SQR
[0387] 00D4   TANZ   EQU  >D4    TAN
[0388] 00D5   LENZ   EQU  >D5    LEN
[0389] 00D6   CHRZZ  EQU  >D6    CHR$
[0390] 00D7   RNDZ   EQU  >D7    RND
[0391] 00D8   SEGZZ  EQU  >D8    SEG$
[0392] 00D9   POSZ   EQU  >D9    POS
[0393] 00DA   VAL    EQU  >DA    VAL
[0394] 00DB   STRZZ  EQU  >DB    STR$
[0395] 00DC   ASCZ   EQU  >DC    ASC
[0396] 00DD   PIZ    EQU  >DD    PI
[0397] 00DE   RECZ   EQU  >DE    REC
[0398] 00DF   MAXZ   EQU  >DF    MAX
[0399] 00E0   MINZ   EQU  >E0    MIN
[0400] 00E1   RPTZZ  EQU  >E1    RPT$
[0401]    *   EQU  >E2  to >E7
[0402] 00E8   NUMERZ EQU  >E8    NUMERIC
[0403] 00E9   DIGITZ EQU  >E9    DIGIT
[0404] 00EA   UALPHZ EQU  >EA    UALPHA
[0405] 00EB   SIZEZ  EQU  >EB    SIZE
[0406] 00EC   ALLZ   EQU  >EC    ALL
[0407] 00ED   USINGZ EQU  >ED    USING
[0408] 00EE   BEEPZ  EQU  >EE    BEEP
[0409] 00EF   ERASEZ EQU  >EF    ERASE
[0410] 00F0   ATZ    EQU  >F0    AT
[0411] 00F1   BASEZ  EQU  >F1    BASE
[0412]    *   EQU  >F2    spare token (TEMPORARY)
[0413]    *   EQU  >F3    spare token (VARIABLE)
[0414]    *   EQU  >F4    spare token (RELATIVE)
[0415]    *   EQU  >F5    spare token (INTERNAL)
[0416] 00F6   SEQUEZ EQU  >F6    SEQUENTIAL
[0417] 00F7   OUTPUZ EQU  >F7    OUTPUT
[0418] 00F8   UPDATZ EQU  >F8    UPDATE
[0419] 00F9   APPENZ EQU  >F9    APPEND
[0420] 00FA   FIXEDZ EQU  >FA    FIXED
[0421] 00FB   PERMAZ EQU  >FB    PERMANENT
[0422] 00FC   TABZ   EQU  >FC    TAB
[0423] 00FD   NUMBEZ EQU  >FD    #
[0424] 00FE   VALIDZ EQU  >FE    VALIDATE
[0425]    *   EQU  >FF    ILLEGAL VALUE
[0426]    ***********************************************************
[/CODE]

Of course this is in HEX as it is the Source code from RXB or XB but these are the tokens now you have to deal with how they are used.
Example is like CALL VCHAR(2,3,44,10)
First you have the byte for how long the line is, then CALL token, then the token UNQSTZ then a how long byte then ( token, then NUMZ token, then the length byte, then the number in byte format, then the COMMAZ token...
The last token is a >00 that was added to the line to indicate the last of the line. Now this is all in MERGE format. In program format it is much harder to see what is going on.
Good luck.
Rich

#6 moulinaie OFFLINE  

moulinaie

    Moonsweeper

  • 294 posts
  • Location:France, Burgundy

Posted Tue Jan 24, 2012 1:38 AM

Hi,
I think I have now what I want, the idea is to read lines of DATA to compile directly MLC without reading DATA in a string Array.

1) So in >8330 there is a pointer to the line table.
2) Each entry is two words long: WORD1 line number, WORD2 line address
3) the table starts with the upper line number
4) the address of a line points to the first byte of the line, and address-1 is the line length including the final zero.
5) a DATA line will be:
>93 (DATA)
>C8 or >C7 (for quoted or unquoted string)
n (string size)
..... the string itself
eventually >B3 for a comma and another string or >00 if it's the end.

With this I'll be able to speed up MLC compilation and to reduce the amount of used memory:

Before:
MLC program is in DATA lines
DATA are read into a string array (so occupying a lot of VDP RAM)
The array is sent to the compiler that reads back line by line into CPU memory to compile the program.

Now (*)
No VDP RAM used
Each string is directly read from CPU RAM and compiled.

Guillaume.

(*) : let's say.... in a near future.

#7 RXB OFFLINE  

RXB

    Dragonstomper

  • 675 posts
  • Location:Vancouver, Washington, USA

Posted Tue Jan 24, 2012 11:15 AM

In my GPLHOW2 guildes on this site is a Zip with a TI Basic program that prints out on screen or file or paper the XB program in memory.

Now the video includes the use of this program. Enjoy...


Rich

#8 moulinaie OFFLINE  

moulinaie

    Moonsweeper

  • 294 posts
  • Location:France, Burgundy

Posted Tue Jan 24, 2012 2:57 PM

View PostRXB, on Tue Jan 24, 2012 11:15 AM, said:

In my GPLHOW2 guildes on this site is a Zip with a TI Basic program that prints out on screen or file or paper the XB program in memory.

Rich

Thanks, but I succeded in what I wanted: the new MLC compiles directly from the DATA lines read in memory.
I had a long fight agains bugs before noting that the lines table can start at an odd adress... Then I had to get the pointers byte by byte instead of words by words... What a pity...

Guillaume.

#9 RXB OFFLINE  

RXB

    Dragonstomper

  • 675 posts
  • Location:Vancouver, Washington, USA

Posted Tue Jan 24, 2012 8:07 PM

Yea if you are working in Assembly you need to work in Words.

I always work in GPL so it is byte orientated instead. XB was written in GPL with Assembly support so it is also byte oriented.




0 user(s) are browsing this forum

0 members, 0 guests, 0 anonymous users