ralphb Posted August 11, 2015 Share Posted August 11, 2015 While testing my Extended BASIC grammar I stumbled upon this odd TI Extended BASIC behavior: 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 ... Quote Link to comment Share on other sites More sharing options...
+Schmitzi Posted August 11, 2015 Share Posted August 11, 2015 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 1 Quote Link to comment Share on other sites More sharing options...
+mizapf Posted August 11, 2015 Share Posted August 11, 2015 The image looks dimmed. Don't tell me you paused the emulator. 1 Quote Link to comment Share on other sites More sharing options...
RXB Posted August 12, 2015 Share Posted August 12, 2015 (edited) 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 August 12, 2015 by RXB Quote Link to comment Share on other sites More sharing options...
Tursi Posted August 12, 2015 Share Posted August 12, 2015 very interesting! Quote Link to comment Share on other sites More sharing options...
ralphb Posted August 12, 2015 Author Share Posted August 12, 2015 (all tests with XB-cart) Real TI with PEB + 32K = YES, hangs Real TI, naked (the TI, not me) = NO, the program exits correct Thanks, Ralf, as thorough as ever! And intriguing as well. Quote Link to comment Share on other sites More sharing options...
ralphb Posted August 12, 2015 Author Share Posted August 12, 2015 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 ... 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* Quote Link to comment Share on other sites More sharing options...
+Schmitzi Posted August 12, 2015 Share Posted August 12, 2015 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 Quote Link to comment Share on other sites More sharing options...
+mizapf Posted August 12, 2015 Share Posted August 12, 2015 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. Quote Link to comment Share on other sites More sharing options...
ralphb Posted August 12, 2015 Author Share Posted August 12, 2015 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). Quote Link to comment Share on other sites More sharing options...
RXB Posted August 13, 2015 Share Posted August 13, 2015 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] *********************************************************** Quote Link to comment Share on other sites More sharing options...
globeron Posted August 13, 2015 Share Posted August 13, 2015 Wow 423 lines of code (including comments) for 1 Print statement! Interesting finding btw. 1 Quote Link to comment Share on other sites More sharing options...
RXB Posted August 13, 2015 Share Posted August 13, 2015 (edited) 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 August 13, 2015 by RXB Quote Link to comment Share on other sites More sharing options...
+Ksarul Posted August 13, 2015 Share Posted August 13, 2015 Its a syntax thing, Rich. Just put a space after the last colon and before the closing parenthesis and it will display appropriately. Quote Link to comment Share on other sites More sharing options...
+Schmitzi Posted August 13, 2015 Share Posted August 13, 2015 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. Quote Link to comment Share on other sites More sharing options...
senior_falcon Posted August 13, 2015 Share Posted August 13, 2015 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. 2 Quote Link to comment Share on other sites More sharing options...
+Ksarul Posted August 13, 2015 Share Posted August 13, 2015 My note was for Rich and his smiley problem, Schmitzi. :: ) 2 Quote Link to comment Share on other sites More sharing options...
RXB Posted August 14, 2015 Share Posted August 14, 2015 (edited) My note was for Rich and his smiley problem, Schmitzi. :: ) Do we REALLY need the freaking smiley face? It looks so 1980's Edited August 14, 2015 by RXB Quote Link to comment Share on other sites More sharing options...
notwhoyouthink Posted December 20, 2017 Share Posted December 20, 2017 Do we REALLY need the freaking smiley face? It looks so 1980's "" 3 Quote Link to comment Share on other sites More sharing options...
RXB Posted December 21, 2017 Share Posted December 21, 2017 "yes.png" 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? Quote Link to comment Share on other sites More sharing options...
+OLD CS1 Posted December 21, 2017 Share Posted December 21, 2017 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 1 Quote Link to comment Share on other sites More sharing options...
RXB Posted December 21, 2017 Share Posted December 21, 2017 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. Quote Link to comment Share on other sites More sharing options...
notwhoyouthink Posted December 21, 2017 Share Posted December 21, 2017 (edited) I could not find a actual keyboard, but close enough. A keyboard overlay: Edited December 21, 2017 by notwhoyouthink Quote Link to comment Share on other sites More sharing options...
+Lee Stewart Posted December 21, 2017 Share Posted December 21, 2017 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 Quote Link to comment Share on other sites More sharing options...
+Lee Stewart Posted December 21, 2017 Share Posted December 21, 2017 My son said, 你說的好,可是鍵盤也沒有漢字。所以也不能寫漢字,對不對? ...lee Quote Link to comment Share on other sites More sharing options...
Recommended Posts
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.