Jump to content
IGNORED

Odd Extended BASIC crash


ralphb
 Share

Recommended Posts

While testing my Extended BASIC grammar I stumbled upon this odd TI Extended BASIC behavior:

 

post-35214-0-81327900-1439322597_thumb.png

 

The BASIC interpreter would just hang, with neither FCTN-4 nor FCTN-= working. The screenshot shows MESS with standard XB, but the emulator is fine, so I assume that it's the real thing.

 

Out of curiosity: Can someone confirm this with a real TI 99? Are there other known errors where the TI would crash in plain Extended BASIC, i.e., without CALL LOAD etc.? I don't recall anything like this happening to me before ...

 

Link to comment
Share on other sites

Hi,

 

(all tests with XB-cart)

 

1 PRINT 1 :: :: :: PRINT 2

 

 

Mess = YES, hangs (as shown before)

 

Classic99 = YES, hangs

 

Real TI with PEB + 32K = YES, hangs

 

Real TI with nanoPEB v1 (32K) = YES, hangs

 

Real TI, naked (the TI, not me) = NO, the program exits correct

 

:)

  • Like 1
Link to comment
Share on other sites

Program you typed in:

 

1 PRINT 1 :: PRINT 2

 

RUN

 

Ok took just a second to figure out what is wrong.

 

RUN

Interpeter finds LINE 1 does a PRINT finds 1 and prints 1 then finds double colon and assumes a double line print then finds PRINT Command in a PRIINT LINE "SYNTAX ERROR!"

 

What has happened is you put a command in a PRINT line.

 

To fix this error do this:

1 PRINT 1 : :: PRINT 2

RUN

1

2

 

See no error. Or try this one:

1 PRINT 1 :: DISPLAY 8

RUN

This will "SYNTAX ERROR!" for same reason. Do you understand now?

Edited by RXB
Link to comment
Share on other sites

The image looks dimmed. Don't tell me you paused the emulator. :)

 

Ah, and I thought you couldn't tell by the pixels that I photoshopped this ... :-D

 

No, seriously, I just like using an effect filter for that head ache-inducing CRT look ... Thinking about it, wouldn't it be nice if MESS could also do 50 Hz flickering? *duck*

Link to comment
Share on other sites

1 PRINT 1 :: :: :: PRINT 2

Real TI with nanoPEB v1 (32K) = YES, hangs

 

Real TI, naked (the TI, not me) = NO, the program exits correct

 

thanks.

 

so, computer hanging by the the triple colon :: :: :: really depends on the RAM-Expansion? Crassus

Link to comment
Share on other sites

I did have some reports like "suddenly the screen got dimmer, and MESS crashed, i.e. did not react to any keypress" until we found out that the user forgot about the Partial keyboard mode he was in and that the emulator "suddenly crashed" when typing DISP(lay), where P means Pause.

 

(We urgently have to add something like "PAUSED" to the screen somewhere.)

 

Had to rule out that one, sorry. :)

Link to comment
Share on other sites

Interpeter finds LINE 1 does a PRINT finds 1 and prints 1 then finds double colon and assumes a double line print then finds PRINT Command in a PRIINT LINE "SYNTAX ERROR!"

 

Rich, I don't think the interpreter gets confused about field separator : versus statement separator ::. When I look at the saved program

1 PRINT 1 :: :: :: PRINT 2

I see three statement separators in a row:

00000000  00 0d 37 ca 37 c7 37 d7  00 01 37 cc 0c 9c c8 01  |..7.7.7...7.....|
00000010  31 82 82 82 9c c8 01 32  00                       |1......2.|

A SYNTAX ERROR would be expected when trying to RUN this program, but instead the XB interpreter crashes. Same happens with RXB2012 by the way (at least in an emulator).

Link to comment
Share on other sites

Yea i TRACED the program to see what was going on in XB and RXB and when the interpreter finds the DOUBLE colon it does this:

***********************************************************
[0851]               *                    PRINT ROUTINE
[0852]               * MAIN-HANDLER FOR ALL PRINT-FUNCTIONS
[0853]               ***********************************************************
[0854] 8266 06,97,3F PRINT  CALL INITKB            Initialize keyboard I/O
[0855] 8269 D6,42,FD        CEQ  NUMBEZ,@CHAT      Could still be anything
[0856] 826C 42,C4           BR   PRINZ1
[0857] 826E 06,93,55        CALL CHKFN             Check if default or open chan
[0858] 8271 8F,4A           DCZ  @FAC              Default intended
[0859] 8273 62,A5           BS   PRNZ10
[0860] 8275 06,93,71        CALL CHKCON            Check and convert expression
[0861] 8278 57,D7           BR   ERRFE             Error if PAB not in system
[0862]               * PRINT allowed in output, append or update modes
[0863]               *       Not allowed in input mode
[0864] 827A DA,E0,05        CLOG >04,V@FLG(@PABPTR)
       827D 04,04

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0015 
FLMGR-359
[0865] 827F 62,88           BS   G8288
[0866] 8281 DA,E0,05        CLOG >02,V@FLG(@PABPTR)
       8284 04,02
[0867] 8286 77,D7           BS   ERRFE
[0868] 8288 D6,E0,04 G8288  CEQ  CZREAD,V@COD(@PABPTR)
       828B 04,02
[0869] 828D 42,93           BR   G8293
[0870] 828F 86,E0,03        CLR  V@OFS(@PABPTR)    Unpend pending INPUTs
       8292 04
[0871] 8293 BE,E0,04 G8293  ST   CZWRIT,V@COD(@PABPTR) uncomplete PRINTs
       8296 04,03
[0872] 8298 06,96,F5        CALL PRINIT            Initialize some variables
[0873]               * Next character has to be either EOL, COMMA, or COLON
[0874] 829B 06,95,AD        CALL CHKEND
[0875] 829E 63,95           BS   EOLEX              exit on end of statement
[0876] 82A0 06,94,C2        CALL PARREC            Parse possible record clause
[0877] 82A3 62,B1           BS   PRINZ0            found "," but no REC clause
[0878] 82A5 06,95,AD PRNZ10 CALL CHKEND
[0879] 82A8 63,95           BS   EOLEX             Exit on end of statement for
[0880]               *                       "PRINT #0" or "PRINT file position"
[0881] 82AA D6,42,B3        CEQ  COMMAZ,@CHAT
[0882] 82AD 42,BE           BR   G82BE
[0883] 82AF 0F,79           XML  PGMCHR            Get next in line
[0884] 82B1 8E,04    PRINZ0 CZ   @PABPTR           For "PRINT #0"
[0885] 82B3 63,CF           BS   USING
[0886]               *         Interal type of file?
[0887] 82B5 DA,E0,05        CLOG >08,V@FLG(@PABPTR)
       82B8 04,08
[0888] 82BA 57,D7           BR   ERRFE
[0889] 82BC 43,CF           BR   USING             Execute USING clause
[0890] 82BE 0F,7E    G82BE  XML  SPEED             Must be at a
[0891] 82C0 00              BYTE SYNCHK          *   colon at this point
[0892] 82C1 B5              BYTE COLONZ          *     and error off on others
[0893] 82C2 42,C9           BR   CONPRT            Make it a short branched ELSE
[0894] 82C4 D6,42,ED PRINZ1 CEQ  USINGZ,@CHAT
[0895] 82C7 63,CF           BS   USING             End standard initialization
[0896]               * Test standard separators
[0897] 82C9 06,96,27 CONPRT CALL TSTSEP            Test separator character
[0898] 82CC D6,42,FC        CEQ  TABZ,@CHAT        Handle TABs
[0899] 82CF 63,2D           BS   PRTAB
[0900]               * At this point we've checked TAB and ; , :
[0901]               * The only remaining print items have to be expressions
[0902]               *  All expressions are being handled below.
[0903]               * If the result of the expression is a numeric, the string
[0904]               * is transformed into a string and printed. Strings are
[0905]               * printed "as is".
[0906]               *  The code for strings and converted numerics cannot be ma
[0907]               * common, since numerics may require an extra space behind
[0908]               * the item, depending upon the current position in the reco
[0909]               *  Either way, the string is chunked up into little pieces
[0910]               * it won't fit in an empty record.
[0911] 82D1 0F,74           XML  PARSE             Evaluate the expression
[0912] 82D3 B5              BYTE COLONZ
[0913]               * Special code for INTERNAL file handling
[0914]               *  Translate numeric datums into string format and indicate
[0915]               * length 8. Then check to see if the item fits within the
[0916]               * current record. If not, it is an error, since each item
[0917]               * has to fit.
[0918] 82D4 06,83,C5        CALL TSTINT            Test for internal files
[0919] 82D7 63,03           BS   OTHEZ1            Nope, something different
[0920] 82D9 D6,4C,65        CEQ  STRVAL,@FAC2      Change numerics
[0921] 82DC 62,EC           BS   G82EC
[0922] 82DE BE,56,08        ST   8,@FAC12          To string length 8
[0923] 82E1 35,00,08        MOVE 8,@FAC,@ARG       Save in ARG

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0016 
FLMGR-359
       82E4 5C,4A
[0924] 82E6 BE,55,5C        ST   ARG,@FAC11        And use this as source
[0925] 82E9 06,96,0B        CALL RSTRING           Reserve some string space
[0926] 82EC BC,5C,07 G82EC  ST   @RECLEN,@ARG      Compute remaining space to EO
[0927] 82EF A4,5C,06        SUB  @CCPPTR,@ARG       for space checking
[0928] 82F2 90,5C           INC  @ARG              Make it real space
[0929] 82F4 C8,51,5C        CHE  @ARG,@FAC7        Not enough!!!!!
[0930] 82F7 77,D7           BS   ERRFE
[0931]               * The = check includes length byte
[0932] 82F9 BC,B0,08        ST   @FAC7,V*CCPADR    Prestore string length
       82FC 51
[0933] 82FD 91,08           DINC @CCPADR           Update actual RAM address
[0934] 82FF 90,06           INC  @CCPPTR            and internal column pointer
[0935] 8301 43,08           BR   OTHEZ0
[0936] 8303 D6,4C,65 OTHEZ1 CEQ  STRVAL,@FAC2      Print the string result
[0937] 8306 43,0D           BR   G830D
[0938] 8308 06,97,0E OTHEZ0 CALL OSTRNG            Output the string to the reco
[0939] 830B 43,28           BR   CHKSEP
[0940] 830D 86,55    G830D  CLR  @FAC11            Select standard BASIC format
[0941] 830F 0F,73           XML  XCNS              Convert number to string
[0942] 8311 06,96,0B        CALL RSTRING           Reserve and copy string
[0943] 8314 06,97,0E        CALL OSTRNG            Output the string
[0944]               * Possibly add an extra space if we're not at the end of th
[0945]               * current record.
[0946] 8317 C8,07,06        CHE  @CCPPTR,@RECLEN   Enough space left
[0947] 831A 43,28           BR   CHKSEP
[0948] 831C BE,B0,08        ST   SPACE,V*CCPADR    Add trailing space
       831F 20
[0949] 8320 A0,B0,08        ADD  @DSRFLG,V*CCPADR  Take care of screen I/O
       8323 17
[0950] 8324 91,08           DINC @CCPADR           Update current column address
[0951] 8326 90,06           INC  @CCPPTR            and base 1 pointer
[0952] 8328 06,96,27 CHKSEP CALL TSTSEP            Check for legal delimiter
[0953] 832B 41,09           BR   ERRSYN            Illegal delimiter. SYNTAX ERR
[0954]               *                              Unconditional branch
[0955]               * PRTAB - Print TAB as part of PRINT command
[0956] 832D 06,83,C5 PRTAB  CALL TSTINT            Watch out for INTERAL file ty
[0957] 8330 57,D7           BR   ERRFE             They can't handle TABs
[0958] 8332 0F,79           XML  PGMCHR            Skip TAB keyword
[0959] 8334 D6,42,B7        CEQ  LPARZ,@CHAT
[0960] 8337 41,09           BR   ERRSYN
[0961] 8339 0F,74           XML  PARSE             Parse TAB expression
[0962] 833B B6              BYTE RPARZ
[0963] 833C 06,94,B8        CALL CNVDEF            Check and convert to integer
[0964] 833F BC,4C,07        ST   @RECLEN,@FAC2     Set modulo number
[0965] 8342 06,96,1A        CALL COMMOD            Compute remainder
[0966] 8345 C4,06,4B        CH   @FAC1,@CCPPTR     Position on next output recor
[0967] 8348 43,4F           BR   G834F
[0968] 834A 06,96,A5        CALL OUTREC            Output current record - no pe
[0969] 834D 63,28           BS   CHKSEP             react on SIZE block!!!
[0970] 834F D4,06,4B G834F  CEQ  @FAC1,@CCPPTR     Stay here
[0971] 8352 63,28           BS   CHKSEP
[0972] 8354 BC,03,4B        ST   @FAC1,@MNUM+1     Fill with spaces
[0973] 8357 0F,84           XML  IO                OK, go ahead... fill'r up
[0974] 8359 01              BYTE FILSPC
[0975] 835A 43,28           BR   CHKSEP            And check separator again
[0976]               * Comma is similar to TAB, except that it generates at leas
[0977]               * one space. The exact number of spaces generated depends
[0978]               * upon the current position within the record. If the next
[0979]               * fixed tab-position is outside the record, the record, the
[0980]               * current record is output and the column pointer is reset
[0981]               * to column 1 of the next record.
[0982] 835C BC,03,06 PRTCOM ST   @CCPPTR,@MNUM+1   Compute initial # of spaces
[0983] 835F 92,03           DEC  @MNUM+1           Decrecment for 0 origin

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0017 
FLMGR-359
[0984] 8361 86,02           CLR  @MNUM             Clear high byte of double
[0985] 8363 AE,02,0E        DIV  14,@MNUM          TABs are 14 spaces apart
[0986] 8366 90,02           INC  @MNUM             Compute next TAB-stop
[0987] 8368 AA,02,0E        MUL  14,@MNUM           and actual position
[0988] 836B C4,07,03        CH   @MNUM+1,@RECLEN   Within this record
[0989] 836E 43,77           BR   PRCOL
[0990] 8370 90,03           INC  @MNUM+1           Convert to real position
[0991] 8372 0F,84           XML  IO                Fill spaces to new location
[0992] 8374 01              BYTE FILSPC
[0993] 8375 43,7A           BR   PRSEM             Outside current record
[0994]               * The ":" (colon) separator is used to output the current
[0995]               * record, and proceed to position 1 of the next record.
[0996] 8377 06,96,A5 PRCOL  CALL OUTREC            Output the current record
[0997]               * The ";" (semi-colon) generates the null string. Since all
[0998]               * print items should be separated by a separator, this one
[0999]               * has been introduced to separate without moving to another
[1000]               * position. Notice that all separators join up here.
[1001] 837A 0F,79    PRSEM  XML  PGMCHR            Skip the separator
[1002] 837C 06,95,AD        CALL CHKEND            Exit on end of line
[1003] 837F 42,C9           BR   CONPRT            Continue if not end of line
[1004] 8381 8E,17    PRSMZ1 CZ   @DSRFLG           For screen output continue
[1005] 8383 63,A4           BS   PREXIT
[1006] 8385 DA,04,08        CLOG >08,@PABPTR       Check SIZE clause
[1007] 8388 63,A4           BS   PREXIT
[1008] 838A 06,96,A5        CALL OUTREC            Output current record (blank
[1009] 838D BC,06,09        ST   @CCPADR+1,@CCPPTR Compute correct value for CCP
[1010] 8390 A6,06,E1        SUB  >E1,@CCPPTR       Subtract current screen base
[1011] 8393 43,A4           BR   PREXIT             and exit form this command
[1012]               * End of line exit routine for PRINT statement
[1013] 8395 8E,17    EOLEX  CZ   @DSRFLG           I/O - remove blocks if
[1014] 8397 63,A1           BS   G83A1
[1015] 8399 DA,04,04        CLOG >04,@PABPTR        " AT" clause unused
[1016] 839C 43,A1           BR   G83A1
[1017] 839E B2,04,E7        AND  >E7,@PABPTR        remove flag 3 (SIZE used)
[1018] 83A1 06,96,A5 G83A1  CALL OUTREC            Output pending record
[1019]               * Continue here if record remains pending
[1020] 83A4 8E,17    PREXIT CZ   @DSRFLG           Regular file/device I/O
[1021] 83A6 43,B1           BR   G83B1
[1022] 83A8 92,06           DEC  @CCPPTR           Back to actual offset
[1023] 83AA BC,E0,03        ST   @CCPPTR,V@OFS(@PABPTR) Save for next statement
       83AD 04,06
[1024] 83AF 0F,75           XML  CONT              Continue with next statement
[1025]               *                              End external I/O handling
[1026]               * Reset of code is for internal I/O handling (VDP)
[1027] 83B1 DA,04,04 G83B1  CLOG >04,@PABPTR       Is not used
[1028] 83B4 43,BB           BR   G83BB
[1029] 83B6 BC,7F,06        ST   @CCPPTR,@XPT      Save current value of pointer
[1030] 83B9 94,7F           INCT @XPT              CCPPTR: 1-28
[1031] 83BB DA,04,02 G83BB  CLOG >02,@PABPTR       Used BEEP clause
[1032] 83BE 63,C3           BS   G83C3
[1033] 83C0 06,00,34        CALL TONE1             ---------- BEEP ------------
[1034] 83C3 0F,75    G83C3  XML  CONT              Continue in PARSE routine
[1035]               * TSTINT - test for INTERAL type files, set COND if file
[1036]               *          is NOT INTERNAL
[1037] 83C5 8E,17    TSTINT CZ   @DSRFLG           Couldn't possibly be INTERNAL
[1038] 83C7 53,8C           BR   RTC
[1039] 83C9 DA,E0,05        CLOG >08,V@FLG(@PABPTR) Set COND according to bit 3
       83CC 04,08
[1040] 83CE 01              RTNC                   Return without changing COND
[1041]               ********* PRINT / DISPLAY USING SECTION *******************
[1042]               * Arrive here after the keyword "USING" has been rejected.
[1043] 83CF 0F,7E    USING  XML  SPEED
[1044] 83D1 00              BYTE SYNCHK          * Get first character of format
[1045] 83D2 ED              BYTE USINGZ          *  after (double) checking USIN

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0018 
FLMGR-359
[1046] 83D3 D6,42,C9        CEQ  LNZ,@CHAT         Pick up the line number
[1047] 83D6 44,30           BR   G8430
[1048] 83D8 0F,79           XML  PGMCHR            Get high address
[1049] 83DA BC,4A,42        ST   @CHAT,@FAC
[1050] 83DD 0F,79           XML  PGMCHR             and low address
[1051] 83DF BC,4B,42        ST   @CHAT,@FAC1
[1052] 83E2 0F,79           XML  PGMCHR              get next program character
[1053] 83E4 BD,4C,2E        DST  @EXTRAM,@FAC2        in SEETWO : EXTRAM value w
[1054]               *                                 changed
[1055] 83E7 0F,7E           XML  SPEED
[1056] 83E9 03              BYTE SEETWO          *  Find the line # in the progr
[1057] 83EA C1,4C,2E        DEX  @EXTRAM,@FAC2      result in SEETWO is in EXTRA
[1058]               *                               and restore EXTRAM value
[1059] 83ED 44,5E           BR   USNGZ1               has to match exactly
[1060] 83EF 95,4C           DINCT @FAC2            Move up to the pointer field
[1061] 83F1 BD,52,34        DST   @DATA,@FAC8      Save DATA pointer for READ fi
[1062] 83F4 06,91,A4        CALL GRSUB2            Read 2 bytes of data from ERA
[1063] 83F7 4C              BYTE FAC2           *  @FAC2 : Source address on ERA
[1064] 83F8 BD,34,58        DST  @EEE1,@DATA       @EEE1 : Destination addr. on
[1065]               *                              Put it in @DATA
[1066] 83FB BE,4C,A3        ST   IMAGEZ,@FAC2      Search for an IMAGE token
[1067] 83FE 06,8B,99        CALL SEARCH             at beginning of an statement
[1068] 8401 64,5E           BS   USNGZ1            Error if not found on this li
[1069] 8403 06,93,04        CALL GETGFL            Get first part of format stri
[1070] 8406 06,93,23        CALL CHKSTR            Prepare data for string assig
[1071] 8409 BD,0C,50        DST  @FAC6,@BYTES      Copy actual string length in
[1072] 840C BD,34,52        DST  @FAC8,@DATA       Restore original DATA pointer
[1073] 840F 06,92,CD        CALL CTSTR             Create a temporary string
[1074] 8412 8F,50           DCZ  @FAC6
[1075] 8414 64,2E           BS   G842E
[1076] 8416 8E,80,84        CZ   @RAMTOP           Data from RAM
[1077] 8419 44,23           BR   G8423
[1078] 841B 34,50,B0        MOVE @FAC6,V*TEMP5,V*SREF
       841E 1C,B0,66
[1079] 8421 44,2E           BR   G842E
[1080] 8423 BD,56,50 G8423  DST  @FAC6,@FFF1       FFF1 : byte count
[1081] 8426 BD,54,66        DST  @TEMP5,@DDD1      DDD1 : source address in ERAM
[1082] 8429 BD,58,1C        DST  @SREF,@EEE1       EEE1 : destination address on
[1083] 842C 0F,8B           XML  GVWITE            Write data from ERAM to VDP
[1084] 842E 44,38    G842E  BR   G8438
[1085] 8430 0F,74    G8430  XML  PARSE             Parse up to the ending ":"
[1086] 8432 B5              BYTE COLONZ
[1087] 8433 D6,4C,65        CEQ  STRVAL,@FAC2      * IMAGE ERROR *
[1088] 8436 44,5E           BR   USNGZ1
[1089] 8438 D6,42,B5 G8438  CEQ  COLONZ,@CHAT      Probably no variable list
[1090] 843B 64,48           BS   G8448
[1091] 843D 06,95,AD        CALL CHKEND            We better check that through
[1092] 8440 41,09           BR   ERRSYN             something sneaky sneaked in
[1093] 8442 8E,51           CZ   @FAC7             End of line exit
[1094] 8444 63,95           BS   EOLEX
[1095] 8446 44,63           BR   G8463             Look for format item
[1096] 8448 8E,51    G8448  CZ   @FAC7             Exclude null strings
[1097] 844A 64,5E           BS   USNGZ1
[1098] 844C BD,5C,4E        DST  @FAC4,@ARG        Get start address for string
[1099] 844F BC,5E,51        ST   @FAC7,@ARG2       Get format string length
[1100] 8452 D6,B0,5C USNGZ0 CEQ  >23,V*ARG         Found no format item yet
       8455 23
[1101] 8456 64,60           BS   G8460
[1102] 8458 91,5C           DINC @ARG              Try next address
[1103] 845A 92,5E           DEC  @ARG2             Update address
[1104] 845C 44,52           BR   USNGZ0            Try up to the end of the stri
[1105] 845E 57,C3    USNGZ1 BR   ERRIM             * IMAGE ERROR
[1106]               * Now we're sure that we have at least one legal format ite
[1107]               * (anything with a "#" in it)

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0019 
FLMGR-359
[1108] 8460 BE,42,B3 G8460  ST   COMMAZ,@CHAT      Fake comma seperator for prin
[1109] 8463 0F,77    G8463  XML  VPUSH             Current string might be tempo
[1110] 8465 BD,0C,50        DST  @FAC6,@BYTES      Create a workstring for outpu
[1111] 8468 90,0D           INC  @BYTES+1          Create space for end of strin
[1112] 846A 0C              CARRY                  String would be too long
[1113] 846B 64,5E           BS   USNGZ1
[1114] 846D 0F,71           XML  GETSTR            Length whold equal format str
[1115] 846F BD,14,1C        DST  @SREF,@CURLIN     Create a temporary string
[1116] 8472 A1,1C,50        DADD @FAC6,@SREF       Compute last position in stri
[1117] 8475 86,B0,1C        CLR  V*SREF            Set end of string indicator
[1118] 8478 BD,4E,E0 USNGZ3 DST  V@4(@VSPTR),@FAC4 Update FAC4 area in case garb
       847B 04,6E
[1119] 847D 34,50,B0        MOVE @FAC6,V*FAC4,V*CURLIN Copy format
       8480 14,B0,4E
[1120] 8483 BD,4E,14        DST  @CURLIN,@FAC4     Complete preps for VPUSH
[1121] 8486 BF,4A,00        DST  >001C,@FAC        SREF = >001C
       8489 1C
[1122] 848A 91,50           DINC @FAC6             Include 0 in string length
[1123] 848C 0F,77           XML  VPUSH             Make the string temporary
[1124] 848E BD,14,E0        DST  V@4(@VSPTR),@CURLIN Update current line pointer
       8491 04,6E
[1125] 8493 D6,B0,14 USNGZ4 CEQ  >23,V*CURLIN      Try to locate the next format
       8496 23
[1126] 8497 64,C3           BS   G84C3
[1127] 8499 8E,B0,14        CZ   V*CURLIN          Not end of string yet
[1128] 849C 64,A2           BS   G84A2
[1129] 849E 91,14           DINC @CURLIN           Update pointer if not found
[1130] 84A0 44,93           BR   USNGZ4             and continue searching
[1131] 84A2 D6,42,B3 G84A2  CEQ  COMMAZ,@CHAT      Stop on last variable
[1132] 84A5 45,C3           BR   USNGZ9
[1133] 84A7 0F,78           XML  VPOP              Restore original workstring d
[1134] 84A9 BC,0C,51        ST   @FAC7,@BYTES      Pring the current format stri
[1135] 84AC 92,0C           DEC  @BYTES            Don't count the last "0"
[1136] 84AE BE,03,01        ST   1,@MNUM+1         Indicate direct output withou
[1137] 84B1 06,97,18        CALL CHKRZ0            Copy string to output record
[1138] 84B4 06,96,A5        CALL OUTREC            Also output current record
[1139]               * FAC still contains the right data, however it is easier j
[1140]               * to copy the original string again.
[1141] 84B7 BD,14,4E        DST  @FAC4,@CURLIN     Reconstruct CRULIN
[1142] 84BA 0F,78           XML  VPOP              Copy original string info
[1143] 84BC 0F,77           XML  VPUSH             Without actually removing it
[1144] 84BE A5,14,50        DSUB @FAC6,@CURLIN     Reconstruct start address
[1145] 84C1 44,78           BR   USNGZ3            Continue for the next variabl
[1146] 84C3 D5,14,E0 G84C3  DCEQ V@4(@VSPTR),@CURLIN Avoid "#" as count
       84C6 04,6E
[1147] 84C8 64,E9           BS   USNZ42
[1148] 84CA 93,14           DDEC @CURLIN           Backup to the sign
[1149] 84CC D6,B0,14        CEQ  >2E,V*CURLIN      Used ".#####"
       84CF 2E
[1150] 84D0 44,DB           BR   G84DB
[1151] 84D2 D5,14,E0        DCEQ V@4(@VSPTR),@CURLIN
       84D5 04,6E
[1152] 84D7 64,E9           BS   USNZ42
[1153] 84D9 93,14           DDEC @CURLIN           Avoid checking count bit
[1154] 84DB D6,B0,14 G84DB  CEQ  >2D,V*CURLIN      Check for minus
       84DE 2D
[1155] 84DF 64,E9           BS   USNZ42
[1156] 84E1 D6,B0,14        CEQ  >2B,V*CURLIN      Check for plus
       84E4 2B
[1157] 84E5 64,E9           BS   USNZ42
[1158] 84E7 91,14           DINC @CURLIN           It's neither, so we undo
[1159]               * Check for availability of variables
[1160] 84E9 D6,42,B3 USNZ42 CEQ  COMMAZ,@CHAT      Exit if no more pt item
[1161] 84EC 45,C3           BR   USNGZ9

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0020 
FLMGR-359
[1162] 84EE 0F,79           XML  PGMCHR            Get next expression
[1163] 84F0 A5,14,E0        DSUB V@4(@VSPTR),@CURLIN Make CURLIN offset for
       84F3 04,6E
[1164]               *                                garbage collection
[1165] 84F5 0F,74           XML  PARSE             Parse up to ";" or ","
[1166] 84F7 B4              BYTE SEMICZ
[1167] 84F8 A1,14,E0        DADD V@4(@VSPTR),@CURLIN Reconstruct new CLN after
       84FB 04,6E
[1168]               *                                garbage collection
[1169] 84FD 87,52           DCLR @FAC8             Start with clean sheet for co
[1170] 84FF 87,55           DCLR @FAC11
[1171] 8501 86,57           CLR  @FAC13
[1172] 8503 BD,0E,14        DST  @CURLIN,@VAR4     Now start checking process
[1173] 8506 D6,B0,14        CEQ  >2E,V*CURLIN
       8509 2E
[1174] 850A 65,33           BS   USNGZ5
[1175] 850C D6,B0,14        CEQ  >23,V*CURLIN      Has to be "+" or "-"
       850F 23
[1176] 8510 65,27           BS   G8527
[1177] 8512 D6,B0,14        CEQ  >2D,V*CURLIN
       8515 2D
[1178] 8516 45,1B           BR   G851B
[1179] 8518 B6,55,02        OR   >02,@FAC11        Set explict sign flag for CNS
[1180] 851B D6,B0,14 G851B  CEQ  >2B,V*CURLIN
       851E 2B
[1181] 851F 45,27           BR   G8527
[1182] 8521 B6,55,02        OR   >02,@FAC11        Set explict sign flag for CNS
[1183] 8524 B6,55,04        OR   >04,@FAC11        Set positive sign flag for CN
[1184] 8527 06,85,E5 G8527  CALL ACCNM             Accept first character plus "
[1185] 852A BC,56,53        ST   @FAC9,@FAC12      Set up FAC12 for CNS
[1186] 852D D6,B0,0E        CEQ  >2E,V*VAR4        Found decimal point
       8530 2E
[1187] 8531 45,40           BR   G8540
[1188] 8533 86,53    USNGZ5 CLR  @FAC9             Prepare for use as counter of
[1189]               *                              of # sign after decimal poin
[1190] 8535 06,85,E5        CALL ACCNM             Accept some more "#"'s
[1191] 8538 BC,57,53        ST   @FAC9,@FAC13      Set up FAC13 for CNS
[1192] 853B A0,53,56        ADD  @FAC12,@FAC9      FAC9 now contains the total n
[1193]               *                              of "#" sign, decimal point a
[1194]               *                              maybe a sign bit
[1195] 853E 92,53           DEC  @FAC9             Exclude the decimal point
[1196] 8540 D7,B0,0E G8540  DCEQ >5E5E,V*VAR4      Attempt to decode  ^^
       8543 5E,5E
[1197] 8545 45,64           BR   USNZ55
[1198] 8547 95,0E           DINCT @VAR4            Update address
[1199] 8549 D7,B0,0E        DCEQ  >5E5E,V*VAR4
       854C 5E,5E
[1200] 854E 45,62           BR   G8562
[1201] 8550 95,0E           DINCT @VAR4            Update address
[1202] 8552 B6,55,08        OR   >08,@FAC11        Set E-format bit for CNS
[1203] 8555 D6,B0,0E        CEQ  >5E,V*VAR4
       8558 5E
[1204] 8559 45,64           BR   USNZ55
[1205] 855B 91,0E           DINC @VAR4             Update end address
[1206] 855D B6,55,10        OR   >10,@FAC11        Set extended E-format bit for
[1207] 8560 45,64           BR   USNZ55
[1208] 8562 97,0E    G8562  DDECT @VAR4            Correct for previous errors
[1209]               * At this point, CURLIN is pointing at the first item of th
[1210]               * format, VAR4 is pointing at the character following the i
[1211] 8564 CA,4C,64 USNZ55 CHE  >64,@FAC2         Detected numerical argument
[1212] 8567 65,96           BS   G8596
[1213] 8569 DA,55,02        CLOG >02,@FAC11        Exclude the sign count
[1214] 856C 65,70           BS   G8570
[1215] 856E 92,53           DEC  @FAC9             FAC9 : Number of significant

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0021 
FLMGR-359
[1216] 8570 DA,55,08 G8570  CLOG >08,@FAC11        If E-format is used
[1217] 8573 65,7C           BS   G857C
[1218] 8575 CE,53,0A        CGT  >0A,@FAC9         More than 10 significant digi
[1219] 8578 77,C3           BS   ERRIM
[1220] 857A 45,81           BR   G8581
[1221] 857C CE,53,0E G857C  CGT  14,@FAC9          More than 14 significant digi
[1222] 857F 77,C3           BS   ERRIM
[1223] 8581 B6,55,01 G8581  OR   >01,@FAC11        Set fixed format output it fo
[1224] 8584 0F,73           XML  XCNS    1          Convert number to fixed form
[1225]               * FAC11 points to the beginning of the string after supress
[1226]               * leading 0's, FAC12 contains the length of the string
[1227] 8586 BC,57,55        ST   @FAC11,@FAC13     FAC13 now point to beginning
[1228]               *                              the string
[1229] 8589 86,55           CLR  @FAC11            Clear high byte
[1230] 858B 34,55,B0        MOVE @FAC11,*FAC13,V*CURLIN Copy the result string f
       858E 14,90,57
[1231]               *                                   temporary
[1232] 8591 BD,14,0E        DST  @VAR4,@CURLIN     Move pointer behind print fie
[1233] 8594 44,93           BR   USNGZ4            Continue after printing
[1234] 8596 BD,54,0E G8596  DST  @VAR4,@FAC10      Compute total length
[1235] 8599 A5,54,14        DSUB @CURLIN,@FAC10
[1236] 859C C4,51,55        CH   @FAC11,@FAC7      String exceeds limits
[1237] 859F 45,B1           BR   G85B1
[1238] 85A1 BE,00,2A        ST   >2A,@VAR0         Prepare a "*****.." string
[1239] 85A4 BC,B0,14 G85A4  ST   @VAR0,V*CURLIN    Fill the remainder of field
       85A7 00
[1240] 85A8 91,14           DINC @CURLIN           Up to the end
[1241] 85AA D5,14,0E USNZ67 DCEQ @VAR4,@CURLIN     Which is stored in VAR4
[1242] 85AD 45,A4           BR   G85A4
[1243] 85AF 44,93           BR   USNGZ4
[1244] 85B1 8F,50    G85B1  DCZ  @FAC6
[1245] 85B3 65,BE           BS   USNZ68
[1246] 85B5 34,50,B0        MOVE @FAC6,V*FAC4,V*CURLIN Copy result string
       85B8 14,B0,4E
[1247] 85BB A1,14,50        DADD @FAC6,@CURLIN     And update address in string
[1248] 85BE BE,00,20 USNZ68 ST   SPACE,@VAR0       Fill remainder with spaces
[1249] 85C1 45,AA           BR   USNZ67
[1250] 85C3 0F,78    USNGZ9 XML  VPOP              Temporary string back out
[1251] 85C5 BC,0C,15        ST   @CURLIN+1,@BYTES  Output up to the current
[1252]               *                              position
[1253] 85C8 A4,0C,4F        SUB  @FAC5,@BYTES      Create one byte result
[1254] 85CB 65,D3           BS   USNZ95            Avoid empty strings
[1255] 85CD BE,03,01        ST   1,@MNUM+1         Prevent skip if field too sma
[1256] 85D0 06,97,18        CALL CHKRZ0            Preform all nomal I/O stuff
[1257] 85D3 0F,78    USNZ95 XML  VPOP              Remove source format string
[1258] 85D5 06,95,AD        CALL CHKEND            Check for end of line exit
[1259] 85D8 63,95           BS   EOLEX             Take end of line exit
[1260] 85DA 0F,7E           XML  SPEED
[1261] 85DC 00              BYTE SYNCHK          * Then it HAS to be a ";"
[1262] 85DD B4              BYTE SEMICZ
[1263] 85DE 06,95,AD        CALL CHKEND            Now - must be EOS
[1264] 85E1 63,81           BS   PRSMZ1            Supressed end of record, make
[1265]               *                              it a pending record
[1266] 85E3 41,09           BR   ERRSYN            SYNTAX ERROR
[1267]               * Collect string of "#"'s
[1268] 85E5 90,53    ACCNM  INC  @FAC9             Update item count
[1269] 85E7 91,0E           DINC @VAR4              and item address
[1270] 85E9 D6,B0,0E        CEQ  >23,V*VAR4        Decode as many "#"'s as
       85EC 23
[1271]               *                              possible
[1272] 85ED 65,E5           BS   ACCNM
[1273] 85EF 00              RTN                    Return from duty
[1274]               ***********************************************************
Link to comment
Share on other sites

Also look at page 147 of the XB manual:

 

A colon causes the next element to be put on next line or record. To print several blank lines, you may put several colons after the PRINT statement.

However, they must have spaces between them so they are not confused with the statement separator symbol (: :).

 

This tells you exactly what was done wrong and why you get a syntax error!

 

By the way you can see that several tests in the GPL code do look for Colon characters as separators but a SPACE between COLON characters is interpreted as a line print only.

Even the XB manual makes this clear.

 

NOTE: The stupid Arari Age page will not let me put (colon colon) on the page like in the XB manual. (You get a smiley face instead.)

Edited by RXB
Link to comment
Share on other sites

Hi Ksarul,

 

so, this way ?

 

1 PRINT 1 :: :: :: PRINT 2

 

Or in another way ?

 

And why does it stuck the computer WITH 32K installed, and NOT, if 32K is NOT installed....?

 

I will try this weekend with the CPS99, and with some other, NON-TI-RAM-Cards.....

maybe there is a difference.

Link to comment
Share on other sites

Try this:

10 FOR I=1 TO 10 :: NEXT I =works fine

then:

10 FOR I=1 TO 10 :: :: NEXT I =syntax error

then:

10 FOR I=1 TO 10 :: :: :: NEXT I = crash

 

So I think the double colons and the print statement are confusing the issue. It looks like XB just doesn't like three separators in a row. It is puzzling that it crashes with 32K and doesn't crash if 32K is not there. Will take a look tonight.

  • Like 2
Link to comment
Share on other sites

  • 2 years later...

Sorry I want things to work as you type them, substitutions are stupid to do.

 

A freaking Smiley face is not on ANY KEYBOARD MADE so why throw away 40 years of how keys on a keyboard work?

 

Sure it is: colon, parenthesis. I mean, for that matter, why bother with words? There are no words on a keyboard! hehehehe ;)

  • Like 1
Link to comment
Share on other sites

 

Sure it is: colon, parenthesis. I mean, for that matter, why bother with words? There are no words on a keyboard! hehehehe ;)

I took typing class when in High school in the 1960's and no words are spell with any smiley face.

 

Again why change to some special key combination that requires something I have to search for that should not exist?

 

This is really a level of bad ideas on a grand scale.

Link to comment
Share on other sites

I took typing class when in High school in the 1960's and no words are spell with any smiley face.

 

Again why change to some special key combination that requires something I have to search for that should not exist?

 

This is really a level of bad ideas on a grand scale.

 

“Let's do the time warp again!” ;-)

 

...lee

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

  • Recently Browsing   0 members

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