Listing of file='B1.SRC;01' on disk='vmedia/source_3-sector.ccvf'
BASIC INTERPRETER CCII V8.79 LINBF 8046H ;LINE BUFFER BUFP 8047H ;BASIC BUFFER 80ABH ;DATA FLAG 80ACH ;MAX RAM AVAIL 80AEH ;STRING SPACE ADDR 80CCH ;CURRENT LINE NO 80D2H ;STACK 80D2H ;$ SPACE ALLOCATION 80D4H ;START OF BASIC ADDR 80D6H ;END OF BASIC ADDR ;START OF VARIABLES 80D8H ;START OF ARRAYS ADDR 80DAH ;END OF ARRAYS ADDR TEMPHL 80DEH ;BUFFER POINTER BRTRY 80E0H RFLG 80E1H CRTRY 80E2H OBC 80E3H FPB 80F7H FATR 80F8H FNAM 80F9H FTYP 80FFH FSBK 8103H FSIZ 8105H FLBC 8107H FLAD 8108H FSAD 810AH FAUX 810FH FHAN 8111H FBLK 8115H FBUF 8117H FXBC 8119H DBFE 819DH XFFCN 819FH XFBLK 81A1H XFBUF 81A3H XFXBC 81A5H PUP 81B7H THRUFL 81DEH ; KBDFL 81DFH ;KYBD STATUS FLAG 81F1H ;BASIC OUTPUT FLAG 81E3H ;SERIAL INPUT FLAG BASFL 81F1H KBCHA 81FEH ;KYBD CHAR READY 81FFH ;CHAR READY FLAG 8200H ;INPUT FLAG PTR ORG 01F2CH ; INTERPRETER START 1F2CH START: CALL L356 ;INIT BASIC LXI H,2104H ;"READY" MSG CALL DISPLAY ;PRINT IT JMP ILKP ;INSERT LINK PTRS 1F38H JMP L3611 ;ESC-I 1F3BH JMP L0641 1F3EH CALL INIT LXI H,L027 ;SET RETURN PUSH H CALL L067 ;DO "AUTO" LHLD 8200H JMP L064 ;KYBD INPUT 1F4EH L001: LHLD 80C0H LDA L3502 ;(362BH) ORG $-2 1F52H L002: DCX H MVI M,0 MVI A,0EBH ORG $-1 ; CMPDH 1F56H L003: XCHG ; CMPHD 1F57H L004: MOV A,H SUB D RNZ MOV A,L SUB E RET 1F5DH L005: XTHL SHLD 820BH POP H MOV C,M INX H MOV B,M INX H PUSH B JMP 820AH ; MATH JUMP TABLE (?) 1F6AH DW 32ADH ;SGN DW 3371H ;INT DW 32C3H ;ABS DW 3934H ;CALL DW 2CF2H ;FRE DW 8211H ;INP DW 2D20H ;POS DW 3547H ;SQR DW 361FH ;RND DW 31B2H ;LOG DW 358EH ;EXP DW 3653H ;COS DW 3659H ;SIN DW 36BAH ;TAN DW 36CFH ;ATN DW 307BH ;PEEK DW 2F85H ;LEN DW 2DA7H ;STR$ DW 3060H ;VAL DW 2F94H ;ASC DW 2FA3H ;CHR$ DW 2FB3H ;LEFT$ DW 2FE3H ;RIGHT$ DW 2FEDH ;MID$ ; SIGN JUMP TABLE (?) 1F9AH DB 79H DW 3431H DB 79H DW 30B1H DB 7CH DW 31F0H DB 7CH DW 3232H DB 7FH DW 3550H DB 50H DW 2AE5H DB 46H DW 2AE4H 1FAFH DB -1 ; SUBTRACT 128 FROM NUMBER FOLLOWING TOKEN ; TO OBTAIN ASCII VALUE OF ITS LAST CHAR. 1FB0H DB 'EN',196 ;END DB 'FO',210 ;FOR DB 'NEX',212 ;NEXT DB 'DAT',193 ;DATA DB 'INPU',212 ;INPUT DB 'DI',205 ;DIM DB 'REA',196 ;READ DB 'FIL',197 ;FILE DB 'GOT',207 ;GOTO DB 'RU',206 ;RUN DB 'I',198 ;IF DB 'RESTOR',197 ;RESTORE DB 'GOSU',194 ;GOSUB DB 'RETUR',206 ;RETURN DB 'RE',205 ;REM DB 'GE',212 ;GET DB 'OU',212 ;OUT DB 'PU',212 ;PUT DB 'PLO',212 ;PLOT DB 'SAV',197 ;SAVE DB 'LOA',196 ;LOAD 2000H L006 EQU $-1 DB 'POK',197 ;POKE DB 'PRIN',212 ;PRINT DB 'LIS',212 ;LIST DB 'CON',212 ;CONT DB 'CLEA',210 ;CLEAR DB 'DE',198 ;DEF DB 'WAI',212 ;WAIT DB 'O',206 ;ON DB 'TAB',168 ;TAB( DB 'T',207 ;TO DB 'F',206 ;FN DB 'SPC',168 ;SPC( DB 'THE',206 ;THEN DB 'NO',212 ;NOT DB 'STE',171 ;STEP ; THIS USE 1F9AH JUMP TABLE ? ; (EXCEPT FOR AND/OR TOKENS) DB 173 ;- DB 170 ;* DB 175 ;/ DB 222 ;^ DB 'AN',196 ;AND DB 'O',210 ;OR DB 190 ;> DB 189 ;= DB 188 ;< ; THIS USE 1F6AH JUMP TABLE ? DB 'SG',206 ;SGN DB 'IN',212 ;INT DB 'AB',211 ;ABS DB 'CAL',204 ;CALL DB 'FR',197 ;FRE DB 'IN',207 ;INP DB 'PO',211 ;POS DB 'SQ',210 ;SQR DB 'RN',196 ;RND DB 'LO',199 ;LOG DB 'EX',208 ;EXP DB 'CO',211 ;COS DB 'SI',206 ;SIN DB 'TA',206 ;TAN DB 'AT',206 ;ATN DB 'PEE',203 ;PEEK DB 'LE',206 ;LEN DB 'STR',164 ;STR$ DB 'VA',204 ;VAL DB 'AS',195 ;ASC DB 'CHR',164 ;CHR$ DB 'LEFT',164 ;LEFT$ DB 'RIGHT',164 ;RIGHT$ DB 'MID',164 ;MID$ 2096H DB 0,0 2098H DW 2625H DW 253EH DW 2976H DW 2739H 20A0H DW 2886H DW 2B8AH DW 28C3H DW 39ECH DW 2705H DW 26E8H DW 27C8H DW 25F4H 20B0H DW 26F4H DW 2723H DW 273BH DW 3C20H DW 821CH DW 3BCAH DW 265AH DW 384CH 20C0H DW 37EBH DW 3085H DW 27E9H DW 247FH DW 2647H DW 26BCH DW 2D28H DW 3018H 20D0H DW 27AAH ; ERROR TABLE 20D2H DB 'N','F'+128 ;NEXT W/O FOR DB 'S','N'+128 ;SYNTAX DB 'R','G'+128 ;RET W/O GOSUB DB 'O','D'+128 ;OUT OF DATA DB 'C','F'+128 ;CALL FUNCTION DB 'O','V'+128 ;OVERFLOW DB 'O','M'+128 ;OUT OF MEMORY 20E0H DB 'U','S'+128 ;UNDEFINED LINE DB 'B','S'+128 ;BAD SUBSCRIPT DB 'D','D'+128 ;DOUBLE DIM DB '0','/'+128 ;/0 DB 'I','D'+128 ;ILLEGAL DIRECT DB 'T','M'+128 ;TYPE MISMATCH DB 'O','S'+128 ;OUT OF STRING DB 'L','S'+128 ;LONG STRING 20F0H DB 'S','T'+128 ;STRING TEMPORIES DB 'C','N'+128 ;CAN NOT DB 'U','F'+128 ;UNDEFINED FUNCTION DB 'S','L'+128 ;SAVE/LOAD 20F8H DB ' ERRO','R'+128,0 20FFH DB ' IN',160 2103H DB 0 2104H DB 13,10,255,13 DB 'READY',10,13,10 DB 0 2111H DB 13,255 2113H DB 13,'BREA',203,0 211AH L007: LXI H,4 DAD SP 211EH L008: MOV A,M INX H CPI 129 RNZ MOV C,M INX H MOV B,M INX H PUSH H MOV L,C MOV H,B MOV A,D ORA E XCHG JZ L009 CALL L003 ;CMPDH 2133H L009: LXI B,13 POP H RZ DAD B JMP L008 ; CK MEMORY SIZE ; MOVE MEMORY TO MAKE ROOM FOR BASIC LINE 213CH L010: CALL L016 ;CK FREE MEMORY 213FH L011: PUSH B XTHL POP B 2142H L012: CALL L004 ;CMPHD MOV A,M STAX B RZ DCX B DCX H JMP L012 214DH L013: PUSH H LHLD 80DAH ;END OF ARRAYS MVI B,0 DAD B DAD B CALL L016 ;CK FREE MEMORY ORG $-1 2157H L014: MOV E,D 2158H L015: POP H RET ; CK FREE MEMORY 215AH L016: PUSH D XCHG LXI H,-40 DAD SP CALL L004 ;CMPHD XCHG POP D RNC 2166H L017: MVI E,12 JMP L022 ;OM ERROR 216BH L018: LHLD 80C4H SHLD 80CCH ;CURRENT LINE NO ;=========================================================== ; ERROR TRAPS 2171H L019: MVI E,2 ;SYNTAX ERROR LXI B,141EH ; (LXI B) ; (MVI E,14H) ORG $-2 2174H L020: MVI E,14H ;DIV BY 0 ERROR LXI B,001EH ; (LXI B) ; (MVI E,0) ORG $-2 2177H L021: MVI E,0 ;NEXT W/O FOR ERROR ; PROCESS ERROR CODE 2179H L022: CALL INIT2 ;CLR STACK CALL L135 ;CR/LF,0 TO 8208H, 0 TO A CMA ;NOW 255 CALL L073 ;TO CRT MVI A,13 ;CR CALL L136 ;BASOUT, 0 TO 8208H, 0 TO A LXI H,20D2H ;ERROR TABLE 218BH L023: MOV D,A ;0 TO D DAD D ;POINT TO CODE IN TABLE MOV A,M ;1ST CHAR OF ERROR CALL L073 ;PRINT IT CALL L096 ;2ND CHAR OF ERROR CALL L073 ;PRINT IT LXI H,20F8H ;"ERROR" MSG 219AH L024: CALL DISPLAY ;PRINT IT LHLD 80CCH ;CURRENT LINE NO MOV A,H ;IF LINE # ANA L ; = -1 INR A ;DON'T PRINT CNZ L328 ;DO PRINT MVI A,193 ; (MVI A,) ; (POP B) ORG $-1 21A7H POP B 21A8H L025: LXI H,2104H ;"READY" MSG CALL DISPLAY ;PRINT IT ;============================================================= ; COMMAND (ENTERING BASIC LINE) GROUP 21AEH L026: LXI H,-1 ;INIT CUR LINE SHLD 80CCH ;TO -1 CALL L062 ;ZERO LINE BUFFER. WAIT FOR ;KYBD ENTRY. CR/LF,0 TO 8208H ;0 TO A, 8046H IN HL 21B7H L027: INX H ;BUF+1 MOV A,M ;1ST CHAR CPI 10 JZ L028 ;IF LF DCX H ;8046H NOW 21BFH L028: CALL L096 ;NEXT CHAR, SKIP SPACES, <C> ;IF ASCII NUMBER, <Z> IF ":" ;OR 0 (END STATEMENT OR LINE) INR A ;SET <Z><NZ> BUT DCR A ;NO EFFECT CARRY JZ L026 ;NULL LINE-DO AGAIN PUSH PSW CALL L112 ;DECIMAL # TO BINARY ;IN DE. IF NO # DE=0 PUSH D ;SAVE LINE NO CALL L041 ;CONVERT BASIC LINE IN BUFFER ;TO TOKEN FORM. BASIC BUFFER ;NOW HAS A 1 LINE BASIC PROGRAM ;8046H TO HL, 0 TO A, LINE LEN ;TO C. MOV B,A ;0 TO B POP D ;LINE # POP PSW ;FLAGS JNC L092 ;<NC> INDICATES A BASIC LINE TO ;BE PROCESSED. <C> INDICATES A ;LINE TO BE STORED IN MEMY PUSH D ;SAVE LINE PUSH B ;SAVE LINE LEN CALL L096 ;1ST CHAR-SKIP SPACES. ;<C> IF ASCII # ;<Z> IF ":" OR 0 ORA A ;NULL? PUSH PSW ;FLAGS CALL L035 ;GET LINE WITH # IN DE. IF NOT ;GET NEXT LINE. <C> IF LINE ;EXISTS, <Z> IF EOF. ;BC START ADDR ;DE LINE # ;HL NEXT LINE ADDR PUSH B ;LINE START ADDR JNC L030 ;NEW LINE # JUMP ;NO OLD LINE TO KILL XCHG ;NEXT LINE ADDR TO DE LHLD 80D6H ;END OF BASIC 21E7H L029: LDAX D ;DELETE OLD VERSION STAX B ;OF LINE FROM MEMORY INX B ;NEXT LINE START ADDR INX D ;TO END OF BASIC IS SHIFTED TO ;OLD LINE START ADDR (DELETE ;OLD LINE) CALL L004 ;CMPHD DONE IF DE=HL JNZ L029 ;NOT DONE MOV H,B ;SHIFT NEW MOV L,C ; END OF BASIC SHLD 80D6H ; AND SAVE 21F6H L030: POP D ;START ADDR FOR LINE POP PSW ;NULL LINE? JZ ILKP ;YES-INSERT LINK LHLD 80D6H ;END OF BASIC XTHL ;NEW LINE LEN TO HL ;END OF BASIC TO STACK POP B ;THEN TO BC DAD B ;NEW END OF BASIC PUSH H ; AND SAVE CALL L010 ;CK MEMORY SIZE. MOVE MEMY TO ;MAKE FOR NEW LINE POP H ;NEW END OF BASIC SHLD 80D6H ; SAVED XCHG ;LINE START ADDR TO HL MOV M,H ;INSERT # SO LINK <>0 INX H ;SKIP BASIC INX H ; LINE NUMBER POP D ;RESTORE LINE # MOV M,E ;INSERT INX H ; LINE MOV M,D ; NUMBER INX H LXI D,BUFP ;MOVE 2215H L031: LDAX D ; BASIC MOV M,A ; LINE INX H ; TO INX D ; MEMORY ORA A ;EOL? JNZ L031 ;NO ; INSERT LINK PTRS 221DH ILKP: CALL INIT ;INIT BASIC LINE PTRS. ZERO ;VARIABLES/ARRAYS. INIT STACK ;POINTER. 8299H TO HL INX H ;START OF BASIC XCHG ; TO DE 2222H ILKP1: MOV H,D ;START ADDR OF CURRENT MOV L,E ;LINE TO HL MOV A,M INX H ;IF FWD PTR =0 ORA M ;THEN THIS IS END JZ L026 ;OF BASIC INX H ;SKIP INX H ; LINE INX H ; NUMBER XRA A 222EH ILKP2: CMP M ;FIND BEGIN INX H ; OF NEXT JNZ ILKP2 ; BASIC LINE XCHG ;PUT START ADDR MOV M,E ;OF THIS LINE INX H ;IN LINK PTR MOV M,D ;OF PREV LINE JMP ILKP1 ;AND LOOP ; GET LINE WITH # IN DE. ; <C> IF LINE EXISTS ; <Z> IF EOF ; BC START ADDR ; DE LINE # ; HL NEXT LINE ADDR 223AH L035: LHLD 80D4H ;START OF BASIC 223DH L036: MOV B,H ;INTO BC MOV C,L MOV A,M ;CK FOR INX H ; END OF ORA M ; BASIC DCX H ;START OF LINE RZ ;IF EOF INX H ;SKIP OVER INX H ;LINK PTR MOV A,M ;GET THE INX H ; LINE MOV H,M ; NUMBER MOV L,A CALL L004 ;LINE REQUIRED? MOV H,B ;START ADDR OF MOV L,C ; LINE TO HL MOV A,M ;GET START ADDR INX H ; OF NEXT LINE MOV H,M ; & SAVE TO HL MOV L,A CMC RZ ;IF LINE WANTED <Z><C> IS SET CMC ;TO <NC> RNC ;IF NO ACTUAL LINE # JMP L036 ;TRY AGAIN ; INIT BASIC LINE PTRS ; ZERO VARIABLES/ARRAYS ; INIT STACK POINTER ; 8299H TO HL 225AH INIT: LHLD 80D4H ;START OF BASIC DCX H ;-1 225EH INIT1: SHLD 80C8H ;SAVE LHLD 80ACH ;MAX RAM SHLD 80C0H ;SAVE CALL L098 LHLD 80D6H ;ZERO SHLD 80D8H ; VARIABLES SHLD 80DAH ; & ARRAYS 2273H INIT2: POP B ;SAVE RET ADDR LHLD 80D2H ;START OF STRING AREA SPHL ;INIT BASIC STACK LXI H,80B0H ;BUFFER SHLD 80AEH ;BUFFER PTR XRA A MOV H,A ;ZERO TO MOV L,A ; HL SHLD 80D0H ;=0 STA 80C6H ;=0 PUSH H ;RST 0 TO STACK PUSH B ;REPLACE RET ADDR 2289H INIT3: LHLD 80C8H ;BASIC START-1 TO HL RET ; CONVERT BASIC LINE IN BUFFER TO TOKEN FORM. ; BASIC BUFFER NOW HAS A 1 LINE BASIC PROGRAM ; 8046H TO HL, 0 TO A, LINE LEN TO C. 228DH L041: XRA A STA 80ABH ;ZERO DATA FLAG MVI C,5 ;C = LEN OF BASIC TOKEN LINE. ;STARTS AT 5 AS BASIC LINK, ;LINE #, EOL = 5 BYTES LXI D,BUFP ;BUFFER START ADDR FOR TOKEN ;LINE. SAME BUF AS USED BY ;COMMAND LINE (ADDR IN HL). ;COMMAND LINE IS OVER WRITTEN ;BY TOKEN LINE 2296H L042: MOV A,M ;1ST CHAR IN CMD LINE CPI ' ' ;SPACE? INX H ;BUF+1 JZ L042 ;YES-SKIP DCX H ;KEEP HL STRAIGHT MOV B,A ;CHAR TO B CPI '"' ;QUOTES? JZ L052 ;YES ORA A ;EOL? JZ L055 ;YES LDA 80ABH ;DATA FLAG ORA A ;SET FLAGS MOV B,A MOV A,M ;GET CHAR AGAIN JNZ L048 ;DATA FLAG<>0 CPI '?' ;? FOR PRINT? MVI A,150 ;SET PRINT TOKEN JZ L048 ;YES MOV A,M ;CHAR AGAIN CPI '0' JC L043 ;<>DIGIT CPI '<' JC L048 ;< '<' 22C3H L043: PUSH D ;SAVE TOKEN BUF ADDR LXI D,1FB0H-1 ;CMD TOKEN TABLE PUSH H ;SAVE JMP L045 ;SHORT SKIP 22CBH L044: CALL L096 ;NEXT CHAR-SKIP SPACES 22CEH L045: INX D ;NEXT TOKEN TABLE CHAR 22CFH L046: LDAX D ;GET IT ANI 127 ;STRIP A7 BIT JZ L047 ;IF 0 JUMP. END OF TOKEN TABLE CMP M ;TOKEN CHAR? JNZ L053 ;NO-NEXT ONE LDAX D ;GET CHAR AGAIN ORA A ;SET FLAGS JP L044 ;<128, DO MORE POP PSW ;GET RID OF "PUSH H" IN L043 MOV A,B ;POSITION OF COMMAND IN TABLE ORI 128 ;PLUS A7 ON GIVES TOKEN VALUE JP 7EE1H ;NOT REALLY!! <M> SET! ; (JP) ; (POP H) ; (MOV A,M) ORG $-2 22E3H L047: POP H ;CMD LINE ADDR MOV A,M ;GET CHAR POP D ;TOKEN LINE ADDR 22E6H L048: INX H ;NEXT CMD LINE CHAR STAX D ;SAVE CHAR IN TOKEN LINE INX D ;TOKEN BUF+1 INR C ;INCR TOKEN LINE LEN SUI '9'+1 ;IS IT A ":"? JZ L049 ;YES! CPI 'I' ;DATA? (131-58=73) JNZ L050 ;NO 22F4H L049: STA 80ABH ;SET DATA FLAG (0 OR 73) 22F7H L050: SUI 'T' ;REM? (142-58=84) JNZ L042 ;NO-NEXT CMD MOV B,A ;0 TO B 22FDH L051: MOV A,M ;NEXT CHAR FROM CMD LINE ORA A ;SET FLAGS JZ L055 ;IF EOL CMP B ;QUOTES=34, REM=0 JZ L048 ;YES 2306H L052: INX H ;CMD LINE +1 STAX D ;STORE TOKEN CHAR INR C ;INCR TOKEN LEN INX D ;TOKEN BUF +1 JMP L051 ;DO MORE 230DH L053: POP H ;ADDR OF START OF CMD LINE PUSH H INR B ;KEEP TRACK OF CMD XCHG ;CMD TABLE TO HL 2311H L054: ORA M ;SET FLAGS INX H ;CMD TABLE +1 JP L054 ;IF LAST CHAR IN CMD TABLE, ;A7 IS ON. LOOP UNTIL DONE XCHG ;CMD LINE TO HL JMP L046 ;NEXT CMD 231AH L055: LXI H,LINBF ;LINE BUFFER STAX D ;A=0, DE=TOKEN LINE ADDR INX D ;INSERTS 3 ZEROS AT END OF STAX D ;TOKEN LINE, ONE FOR EOL, INX D ;TWO FOR EOF STAX D RET ;========================================================= ; KEYBOARD INTERRUPT GROUP ; DELETE/RESTORE CHARS 2323H L056: MVI A,25 ;SET -> CALL 8205H ;ECHO IT 2328H L057: MVI A,7 ;DO BELL TOO CALL 8205H ;ECHO MVI A,26 ;SET <- CALL 8205H ;ECHO 2332H L058: MOV A,M ;CURRENT CHAR CPI ' ' ;COMMAND <25? MVI A,25 ;SET <- JC L059 ;YES MVI A,' ' ;A SPACE CALL 8205H ;ECHO MVI A,26 ;SET <- 2341H L059: CALL 8205H ;ECHO MOV A,L ;LO BYTE OF BUF ADDR DCX H ;BUF-1 SHLD TEMPHL ;SAVE IT CPI 46H ;CK LO BYTE OF BUFFER ADDR ;FOR START OF BUFFER RNZ ;IF NOT CALL L135 ;CR/LF, 0 TO 8208H 234FH L060: LXI H,LINBF ;LINE BUFFER 2352H L061: SHLD TEMPHL ;BASIC BUF CHR PNTR RET ; ZERO LINE BUFFER ; WAIT FOR KYBD ENTRY ; CR/LF,0 TO 8208H ; 0 TO A, 8046H IN HL 2356H L062: LXI H,LINBF ;LINE BUFFER MVI A,99 ;ZERO 235BH L063: MVI M,0 ;BASIC INX H ;INPUT DCR A ;BUFFER JNZ L063 CALL L060 ;8046H TO 80DEH LHLD 8200H ;KBDFL TO HL MVI M,23 ;KYBD INPUT TO BASEX STA THRUFL ;23 TO THRUFL ; INPUT LOOP 236DH L064: EI ;ENABLE LDA THRUFL ;WAIT FOR CPI 13 ;ENTRY JNZ L064 ;NOT YET MVI M,12 ;12 TO 81DFH - ALL KYBD ;ENTRIES IGNORED EI ;ENABLE AGAIN XRA A STA READY ;CLR READY FLAG JMP L134 ;8046H TO HL, CR/LF, 0 TO ;8208H, RETURN ; BASEX ; KEYBOARD INTERRUPT ROUTINE 2380H L0641: LDA THRUFL ;USED TO FLAG THAT 1ST KEY ;OF AN ESC CODE HAS BEEN ;SEEN. NEXT CHAR IS CODE. CPI 27 ;ESCAPE? JZ L071 ;YES MOV A,E ;KYBD CHAR TO A DCR A ;IS IT AUTO? JZ L067 ;YES XRA A ;SET 0 MOV M,A ; INTO KBDFL MOV A,E ;GET CHAR CPI 3 ;PLOT? RZ ;YES! MVI M,23 ;23 TO KBDFL RC ;IF <3 LHLD TEMPHL ;BUFFER POINTER CPI 27 ;ESCAPE? JZ L070 ;YES ANA A ;SET FLAGS JP L066 ;IF <128 CPI 214 ;>214? JNC L066 ;YES! JMP L086 ;GET COMMAND FROM TOKEN ;COMMAND ADDR IN DE. NOTE ;214 IS AN ERROR...CCII ;TOKENS ARE 128 TO 197. A ;198 TO 213 WILL GET GARBAGE. 23AAH L065: INX H ;NEXT BUF BYTE MVI M,' ' ;SET A SPACE MOV A,L ;END OF BUFFER IS 80A8H CPI 0A8H ;END? JZ L056 ;YES..DO ->,BELL,<- LDAX D ;GET CMD CHAR INX D ;CMD BUF+1 ORA A ;A7 ON? (LAST CMD CHAR) PUSH PSW ;SAVE FLAGS ANI 127 ;STRIP A7 BIT MOV M,A ;CHAR TO BUFFER CALL 8205H ;ECHO POP PSW ;FLAGS JP L065 ;NOT LAST CHAR MVI A,' ' ;SPACE AFTER TOKEN 23C3H L066: INX H ;BUF+1 CPI 25 ;A ->? CZ L244 ;RESTORE NEXT BUF BYTE RZ ;IF NEXT BYTE=0 DCX H ;BACK TO ORIG CALL 8205H ;ECHO CPI 11 ;EL? JZ L060 ;YES - 8046H TO 80DEH CPI 26 ;A <-? JZ L058 ;YES CPI 12 ;EP? RZ ;YES CPI 13 ;CR? INX H ;BUF+1 JZ L069 ;YES MOV M,A ;NO-SAVE CHAR MOV A,L ;LO BYTE BUF ADDR CPI 0A8H ;END? JZ L057 ;DO BELL,<- JMP L061 ;NO-QUIT ; "AUTO" - LOAD & RUN MENU PROGRAM 23EBH L067: LXI H,LINBF ;LINE BUFFER LXI D,2404H ;FCS "MENU" MSG MVI B,9 ;LENGTH 23F3H L068: INX H ;MOVE FCS LDAX D ; CMD MSG MOV M,A ; TO BASIC INX D ; LINE BUFFER 23F7H DCR B JNZ L068 INX H MVI A,13 ;13 TO 81DEH 23FEH L069: STA THRUFL MVI M,0 ;END OF FCS CMD LINE RET ;148=TOKEN FOR LOAD ;137=TOKEN FOR RUN 2404H DB 148,'"MENU":',137 ; SETS BASEX FOR 2ND BYTE OF ESCAPE CODE 240DH L070: MOV A,L ;BUFFER LO BYTE INX H ;BUF+1 MVI M,' ' ;A SPACE CPI 0A6H ;AT 80A6H? - 2 BYTES ;BEFORE END TO ENSURE ;ROOM FOR SECOND CHAR JNC L056 ;NOT ENOUGH ROOM! ;DO ->,BELL,<- MOV A,E ;GET CHAR (27) STA THRUFL ; TO 81DEH RET ; HANDLE ESCAPE CODES 241BH L071: XRA A STA THRUFL ;0 TO 81DEH MOV A,E ;2ND CHAR ANI 31 ;ALLOW ONLY #S LHLD TEMPHL ;BUFFER ADDR INX H ;+1 CPI 4 ;ESC-D? JZ L072 ;YES CPI 5 ;ESC-E? JZ L072 ;YES CPI 23 ;ESC-W? JZ L072 ;YES CPI 31 ;ESC-CRT? JZ L072 ;YES MVI A,27 ;MUST BE ESC-ESC CALL 8205H ;SO ECHO IT MOV M,A ;AND SAVE INX H ;BUF+1 MOV A,E ;GET CHAR AGAIN CALL 8205H ;ECHO AGAIN MOV M,A ;AND SAVE IT SHLD TEMPHL ;AND BUFFER RET ; PROCESS ESC-D, ESC-E, ESC-W, ESC-CRT 244AH L072: LHLD 0036H ;8042H TO HL (FCS STACK) SPHL ;RESET STACK POINTER LXI H,0038H ;SET BEGEX PUSH H LHLD 000BH ;008DH TO HL ;START ADDR OF ESC TABLE MVI D,0 ;0 TO D MOV E,A ;ESC CODE IN E DAD D ;GET ESC DAD D ; ROUTINE ADDR MOV A,M ;ADDR LO INX H MOV H,M ;ADDR HI MOV L,A PUSH H ;ONTO STACK LHLD 8200H ;81DFH TO HL MVI M,0 ;0 TO KBDFL...KYBD TO VISUAL RET ;CURSOR DISPLAY, JMP TO ROUTINE ; ;============================================================== ; BYTE TO CRT 2465H L073: CPI ' ' JC 8205H ;ECHO PUSH PSW LDA 8208H PUSH H LXI H,8209H CMP M CNC L135 ;CR/LF, 0 TO 8208H, 0 TO A POP H INR A STA 8208H POP PSW JMP 8205H ;ECHO 247FH CALL L112 ;TO BINARY RNZ PUSH H CALL L035 ;GET LINE IN DE PUSH B 2488H L074: POP H CALL L005 POP B XRA A STA THRUFL MOV A,B ORA C JZ L015 PUSH B CALL L100 ;KYBD CHECK CALL L135 ;CR/LF, 0 TO 8208H, 0 TO A CALL L005 XTHL CALL L329 ;PRINT BYTES FREE POP H JMP L076 24A8H L075: LDA THRUFL ORA A MVI A,'9'+1 JNZ L080 MVI A,' ' CALL L073 ;TO CRT MVI A,'9'+1 CALL L073 ;TO CRT INX H 24BCH L076: MOV A,M ORA A JM L078 MVI A,' ' 24C3H L077: CALL L073 ;TO CRT 24C6H L078: MOV A,M CPI '"' JNZ L079 PUSH PSW LDA THRUFL XRI 1 STA THRUFL POP PSW 24D6H L079: CPI '9'+1 JZ L075 24DBH L080: ORA A INX H JZ L074 JP L077 MVI B,0 CALL L084 JC L081 PUSH PSW MVI A,' ' MOV B,A CALL L073 POP PSW 24F3H L081: CALL L086 ;SEARCH TOKENS 24F6H L082: LDAX D INX D ORA A PUSH PSW ANI 127 CALL L073 ;TO CRT POP PSW JP L082 MOV A,M ORA A JP L083 CALL L084 JNC L078 250EH L083: MOV A,B JMP L077 2512H L084: CPI 164 ;"-" TOKEN JNC L085 CPI 157 ;"TAB(" TOKEN STC RZ CPI 159 ;"FN" TOKEN STC RZ CPI 160 ;"SPC(" TOKEN STC RZ CMC RET 2525H L085: CPI 169 ;"OR" TOKEN RZ CPI 170 ;">" TOKEN RZ STC RET ; SEARCH TOKENS 252DH L086: SUI 127 MOV C,A LXI D,1FB0H-1;TOKEN TABLE 2533H L087: LDAX D INX D ORA A JP L087 DCR C JNZ L087 RET 253EH MVI A,100 STA 80C6H CALL L123 XTHL CALL L007 POP D JNZ L088 SPHL 2550H L088: XCHG MVI C,8 CALL L013 PUSH H CALL L119 XTHL PUSH H LHLD 80CCH ;CURRENT LINE NO XTHL CALL L095 SBB M CALL L160 CALL L159 PUSH H CALL L300 POP H PUSH B PUSH D LXI B,8100H MOV D,C MOV E,D MOV A,M CPI 163 MVI A,1 JNZ L089 CALL L096 ;NEXT CHAR-SKIP SPACE ;<C> IF ASCII # ;<Z> IF : OR 0 CALL L159 PUSH H CALL L300 CALL L292 POP H 258CH L089: PUSH B PUSH D PUSH PSW INX SP PUSH H LHLD 80C8H XTHL 2595H L090: MVI B,129 PUSH B INX SP 2599H L091: CALL L100 ;KYBD CHECK SHLD 80C8H MOV A,M CPI '9'+1 JZ L092 ORA A JNZ L019 ;SYNTAX ERROR INX H MOV A,M INX H ORA M INX H JZ L102 MOV E,M INX H MOV D,M XCHG SHLD 80CCH ;CURRENT LINE NO XCHG 25B9H L092: CALL L096 ;NEXT CHAR-SKIP SPACE ;<C> IF ASCII # ;<Z> IF : OR 0 LXI D,L091 PUSH D 25C0H L093: RZ 25C1H L094: SUI 128 JC L123 CPI 29 JNC L019 ;SYNTAX ERROR RLC MOV C,A MVI B,0 XCHG LXI H,2098H DAD B MOV C,M INX H MOV B,M PUSH B XCHG JMP L096 ;NEXT CHAR-SKIP SPACE ;<C> IF ASCII # ;<Z> IF : OR 0 25DCH L095: MOV A,M XTHL CMP M INX H XTHL JNZ L019 ;SYNTAX ERROR ; NEXT CHAR-SKIP SPACE ; <C> IF ASCII # ; <Z> IF : OR 0 25E4H L096: INX H 25E5H L097: MOV A,M CPI '9'+1 RNC CPI ' ' JZ L096 CPI '0' CMC INR A DCR A RET 25F4H CALL L112 ;TO BINARY MOV A,D ORA E JZ L098 PUSH H CALL L118 POP D JMP L099 2604H L098: XCHG ;SAVE HL LHLD 80D4H ;START OF BASIC DCX H ;-1 2609H L099: SHLD 80DCH ;SAVE XCHG ;GET HL RET ; KEYBOARD CHECK 260EH L100: EI LDA READY ANA A RZ JP L100 XRA A STA READY LDA KBCHA CALL BASOUT CPI 10 RNZ ; SET FOR "BREAK" ORI 0C0H ORG $-1 2625H RNZ SHLD 80C8H 2629H L101: POP B 262AH L102: PUSH PSW LHLD 80CCH ;CURRENT LINE NO MOV A,L ANA H INR A JZ L103 SHLD 80CEH LHLD 80C8H SHLD 80D0H 263DH L103: POP PSW LXI H,2111H ;"BREAK" MSG JNZ L024 ;PRINT IT JMP L025 ;READY INPUT 2647H MVI E,32 LHLD 80D0H MOV A,H ORA L JZ L022 ;CN ERROR XCHG LHLD 80CEH SHLD 80CCH ;CURRENT LINE NO XCHG RET 265AH L104: CALL L252 CALL 8205H ;ECHO CALL L097 RZ CALL L095 INR L JMP L104 ; CHECK IF LETTER ; < C> BAD ; <NC> LETTER 266BH L105: MOV A,M CPI 'A' RC CPI 'Z'+1 CMC RET 2673H L106: CALL L096 ;NEXT CHAR-SKIP SPACE ;<C> IF ASCII # ;<Z> IF : OR 0 2676H L107: CALL L159 2679H L108: CALL L292 JM L111 267FH L109: LDA RFLG CPI 144 2684H L110: JC L309 LXI B,9080H LXI D,0 CALL L307 MOV D,C RZ 2692H L111: MVI E,8 JMP L022 ;CF ERROR ; ASCII DECIMAL # TO BINARY 2697H L112: DCX H 2698H L113: LXI D,0 269BH L114: CALL L096 ;NEXT CHAR-SKIP SPACE ;<C> IF ASCII # ;<Z> IF : OR 0 RNC PUSH H PUSH PSW LXI H,MULHD CALL L004 ;CMPHD JC L019 ;SYNTAX ERROR MOV H,D MOV L,E DAD D DAD H DAD D DAD H POP PSW SUI '0' MOV E,A MVI D,0 DAD D XCHG POP H JMP L114 26BCH JZ INIT1 CALL L107 CALL L097 RNZ PUSH H LHLD 80ACH MOV A,L SUB E MOV E,A MOV A,H SBB D MOV D,A JC L019 ;SYNTAX ERROR LHLD 80D6H ;END OF BASIC LXI B,40 DAD B CALL L004 ;CMPHD JNC L017 XCHG SHLD 80D2H ;STRING SPACE ALLOC POP H JMP INIT1 26E8H JZ INIT CALL INIT1 LXI B,L091 JMP L115 26F4H MVI C,3 CALL L013 POP B PUSH H PUSH H LHLD 80CCH ;CURRENT LINE NO XTHL MVI D,140 PUSH D INX SP 2704H L115: PUSH B 2705H L116: CALL L112 ;TO BINARY 2708H L117: CALL L120 270BH L118: PUSH H LHLD 80CCH ;CURRENT LINE NO CALL L004 ;CMPHD POP H INX H CC L036 CNC L035 ;GET LINE IN DE MOV H,B MOV L,C DCX H RC MVI E,14 JMP L022 ;US ERROR 2723H RNZ MVI D,-1 CALL L007 SPHL CPI 140 MVI E,4 JNZ L022 ;RG ERROR POP H SHLD 80CCH ;CURRENT LINE NO LXI H,L091 XTHL 2739H L119: LXI B,0E3AH NOP ORG $-2 273BH L120: MVI C,0 MVI B,0 273FH L121: MOV A,C MOV C,B MOV B,A 2742H L122: MOV A,M ORA A RZ CMP B RZ INX H CPI '"' JZ L121 JMP L122 2750H L123: CALL L180 CALL L095 XRA H PUSH D LDA 80AAH PUSH PSW CALL L163 POP PSW XTHL SHLD 80C8H RAR CALL L162 JZ L127 276BH L124: PUSH H LHLD TEMPHL PUSH H INX H INX H MOV E,M INX H MOV D,M LXI H,8208H CALL L004 ;CMPHD JNC L125 LHLD 80D2H ;STRING SPACE ALLOC CALL L004 ;CMPHD POP D JNC L126 LHLD 80D6H ;END OF VARIABLES CALL L004 ;CMPHD JNC L126 MVI A,209 ORG $-1 2792H L125: POP D CALL L242 XCHG CALL L210 279AH L126: CALL L242 POP H CALL L304 POP H RET 27A3H L127: PUSH H CALL L303 POP D POP H RET 27AAH CALL L252 MOV A,M MOV B,A CPI 188 JZ L128 CALL L095 ADC B DCX H 27B9H L128: MOV C,E 27BAH L129: DCR C MOV A,B JZ L094 CALL L113 CPI ',' RNZ JMP L129 27C8H CALL L163 MOV A,M CPI 136 JZ L130 CALL L095 ORA C DCX H 27D6H L130: CALL L292 JZ L120 CALL L096 ;NEXT CHAR-SKIP SPACE ;<C> IF ASCII # ;<Z> IF : OR 0 JC L116 JMP L093 27E5H L131: DCX H CALL L096 ;NEXT CHAR-SKIP SPACE ;<C> IF ASCII # ;<Z> IF : OR 0 JZ L135 ;CR/LF, 0 TO 8208H, 0 TO A 27ECH L132: RZ CPI 157 JZ L140 CPI 160 JZ L139 PUSH H CPI ',' JZ L138 CPI ';' JZ L143 POP B CALL L163 PUSH H LDA 80AAH ORA A JNZ L133 CALL L330 CALL L214 LHLD TEMPHL LDA 8208H ADD M PUSH H LXI H,8209H CMP M POP H CNC L135 ;CR/LF, 0 TO 8208H, 0 TO A 2824H L133: CALL DISP1 POP H JMP L131 282BH L134: LXI H,LINBF ; CR/LF, 0 TO 8208H, 0 TO A 282EH L135: MVI A,13 CALL L073 ;TO CRT MVI A,10 2835H L136: CALL L073 ;TO CRT 2838H L137: XRA A STA 8208H RET 283DH L138: MVI A,9 CALL L073 ;TO CRT LDA 8208H ORI 7 INR A STA 8208H JMP L143 284EH L139: STC 284FH L140: PUSH PSW CALL L251 CALL L095 DAD H DCX H POP PSW CPI 160 PUSH H MVI A,-1 JZ L141 LDA 8208H CMA 2865H L141: ADD E JNC L143 INR A MOV B,A 286BH L142: MVI A,' ' CALL L073 ;TO CRT DCR B JNZ L142 2874H L143: POP H CALL L096 ;NEXT CHAR-SKIP SPACE ;<C> IF ASCII # ;<Z> IF : OR 0 JMP L132 287BH L144: LDA 80C7H ORA A JNZ L018 POP B JMP INIT3 2886H CPI '"' JNZ L145 CALL L215 CALL L095 DCX SP PUSH H CALL DISP1 POP H JMP L146 289AH L145: MVI A,'?' CALL L073 ;TO CRT 289FH L146: PUSH H CALL L208 CALL L062 ;ZERO LINE BUFFER. WAIT FOR ;KYBD ENTRY. CR/LF,0 TO 8208H ;0 TO A, 8046H IN HL MVI A,',' STA LINBF INX H MOV A,M CPI 10 DCX H POP B JZ L101 PUSH B ORA A JNZ L147 INX H MVI M,' ' INX H MOV M,A DCX H DCX H JMP L147 28C3H PUSH H LHLD 80DCH ORI 0AFH ORG $-1 28C8H L147: XRA A STA 80C7H XTHL JMP L149 28D0H L148: CALL L095 INR L 28D4H L149: CALL L180 XTHL PUSH D MOV A,M CPI ',' JZ L150 LDA 80C7H ORA A JNZ L155 MVI A,'?' CALL L073 ;TO CRT CALL L062 ;ZERO LINE BUFFER. WAIT FOR ;KYBD ENTRY. CR/LF,0 TO 8208H ;0 TO A, 8046H IN HL 28EEH L150: LDA 80AAH ORA A JZ L153 CALL L096 ;NEXT CHAR-SKIP SPACE ;<C> IF ASCII # ;<Z> IF : OR 0 MOV D,A MOV B,A CPI '"' JZ L152 MVI D,':' MVI B,',' LDA 80C7H ORA A JNZ L151 MOV D,A SHLD 80C2H POP H XTHL CALL L097 XTHL PUSH H LHLD 80C2H JNZ L151 MOV B,D 291CH L151: DCX H 291DH L152: CALL L216 XCHG LXI H,2934H XTHL PUSH D JMP L124 2929H L153: CALL L096 ;NEXT CHAR-SKIP SPACE ;<C> IF ASCII # ;<Z> IF : OR 0 CALL L315 XTHL CALL L303 2934H POP H CALL L097 JZ L154 CPI ',' JNZ L144 293FH L154: XTHL CALL L097 JNZ L148 POP D LDA 80C7H ORA A XCHG JNZ L099 ORA M XCHG RET 2952H L155: CALL L119 ORA A JNZ L156 INX H MOV A,M INX H ORA M MVI E,6 JZ L022 ;OD ERROR INX H MOV E,M INX H MOV D,M XCHG SHLD 80C4H XCHG 296BH L156: CALL L096 ;NEXT CHAR-SKIP SPACE ;<C> IF ASCII # ;<Z> IF : OR 0 CPI 131 JNZ L155 JMP L150 2976H LXI D,0 2979H L157: CNZ L180 SHLD 80C8H CALL L007 JNZ L021 ;NF ERROR SPHL PUSH D MOV A,M INX H PUSH PSW PUSH D CALL L298 XTHL PUSH H CALL L256 POP H CALL L303 POP H CALL L301 PUSH H CALL L307 POP H POP B SUB B CALL L301 JZ L158 XCHG SHLD 80CCH ;CURRENT LINE NO MOV L,C MOV H,B JMP L090 29B1H L158: SPHL LHLD 80C8H MOV A,M CPI ',' JNZ L091 CALL L096 ;NEXT CHAR-SKIP SPACE ;<C> IF ASCII # ;<Z> IF : OR 0 CALL L157 29C1H L159: CALL L163 29C4H L160: ORI '7' ORG $-1 29C5H L161: STC 29C6H L162: LDA 80AAH ADC A RPE 29CBH MVI E,24 JMP L022 ;TM ERROR 29D0H L163: DCX H MVI D,0 29D3H L164: PUSH D MVI C,1 CALL L013 CALL L169 SHLD 80CAH 29DFH L165: LHLD 80CAH 29E2H POP B MOV A,B CPI 120 CNC L160 MOV A,M MVI D,0 29ECH L166: SUI 171 JC L167 CPI 3 JNC L167 CPI 1 RAL XRA D CMP D MOV D,A JC L019 ;SYNTAX ERROR SHLD 80C2H CALL L096 ;NEXT CHAR-SKIP SPACE ;<C> IF ASCII # ;<Z> IF : OR 0 JMP L166 2A08H L167: MOV A,D ORA A JNZ L177 MOV A,M SHLD 80C2H SUI 164 RC CPI 7 RNC MOV E,A LDA 80AAH DCR A ORA E MOV A,E JZ L233 RLC ADD E MOV E,A LXI H,1F9AH ;SIGN (?) JUMP TABLE DAD D MOV A,B MOV D,M CMP D RNC INX H CALL L160 2A30H L168: PUSH B LXI B,L165 PUSH B MOV B,E MOV C,D CALL L297 MOV E,B MOV D,C MOV C,M INX H MOV B,M INX H PUSH B LHLD 80C2H JMP L164 2A47H L169: XRA A STA 80AAH CALL L096 ;NEXT CHAR-SKIP SPACE ;<C> IF ASCII # ;<Z> IF : OR 0 JC L315 CALL L105 ;CK LETTER <C> IF NO JNC L172 CPI 164 JZ L169 CPI '.' JZ L315 CPI 165 JZ L171 CPI '"' JZ L215 CPI 162 JZ L179 CPI 159 JZ L206 SUI 174 JNC L173 2A7AH L170: CALL L095 DB 028H ;ILLEGAL! CALL L163 CALL L095 DAD H RET 2A86H L171: MVI D,125 CALL L164 LHLD 80CAH PUSH H CALL L296 2A92H CALL L160 POP H RET 2A97H L172: CALL L180 2A9AH PUSH H XCHG SHLD TEMPHL LDA 80AAH ORA A CZ L298 POP H RET 2AA8H L173: MVI B,0 RLC MOV C,A PUSH B CALL L096 ;NEXT CHAR-SKIP SPACE ;<C> IF ASCII # ;<Z> IF : OR 0 MOV A,C CPI ')' JC L174 CALL L095 DB 028H ;ILLEGAL! CALL L163 CALL L095 INR L CALL L161 XCHG LHLD 80DEH XTHL PUSH H XCHG CALL L252 XCHG XTHL JMP L175 2AD3H L174: CALL L170 XTHL LXI D,2A92H PUSH D 2ADBH L175: LXI B,1F6AH ;MATH (?) JUMP TABLE DAD B MOV C,M INX H MOV H,M MOV L,C PCHL 2AE5H ORI 175 PUSH PSW CALL L160 CALL L109 POP PSW XCHG POP B XTHL XCHG CALL L299 PUSH PSW CALL L109 POP PSW POP B MOV A,C LXI H,L203 JNZ L176 ANA E MOV C,A MOV A,B ANA D PCHL 2B07H L176: ORA E MOV C,A MOV A,B ORA D PCHL 2B0CH L177: LXI H,2B1EH LDA 80AAH RAR MOV A,D RAL MOV E,A MVI D,100 MOV A,B CMP D RNC JMP L168 2B1EH DB 020H,02BH,079H,0B7H DB 01FH,0C1H,0D1H,0F5H DB 0CDH,0C6H,029H,021H DB 061H,02BH,0E5H,0CAH DB 019H,033H,0AFH,032H DB 0AAH,080H,0D5H,0CDH DB 059H,02FH,0D1H,0CDH DB 05DH,01FH,0CDH,05DH DB 01FH,0CDH,05DH,02FH DB 0CDH,0EDH,032H,0E1H DB 0E3H,055H,0E1H 2B49H L178: MOV A,E ORA D RZ MOV A,D SUI 1 RC XRA A CMP E INR A RNC DCR D DCR E LDAX B CMP M INX H INX B JZ L178 CMC JMP L293 2B61H INR A ADC C POP B ANA B ADI 255 SBB A JMP L294 2B6BH L179: MVI D,'Z' CALL L164 CALL L160 CALL L109 MOV A,E CMA MOV C,A MOV A,D CMA CALL L203 POP B JMP L165 2B82H CALL L097 RZ CALL L095 INR L LXI B,2B82H PUSH B ORI 0AFH ORG $-1 2B8FH L180: XRA A STA 80A9H MOV B,M 2B94H L181: CALL L105 ;CK LETTER <C> IF NO JC L019 XRA A MOV C,A STA 80AAH CALL L096 ;NEXT CHAR-SKIP SPACE ;<C> IF ASCII # ;<Z> IF : OR 0 JC L182 CALL L105 ;CK LETTER <C> IF NO JC L184 2BABH L182: MOV C,A 2BACH L183: CALL L096 ;NEXT CHAR-SKIP SPACE ;<C> IF ASCII # ;<Z> IF : OR 0 JC L183 CALL L105 ;CK LETTER <C> IF NO JNC L183 2BB8H L184: SUI '$' JNZ L185 INR A STA 80AAH RRC ADD C MOV C,A CALL L096 ;NEXT CHAR-SKIP SPACE ;<C> IF ASCII # ;<Z> IF : OR 0 2BC7H L185: LDA 80C6H ADD M SUI '(' JZ L192 XRA A STA 80C6H PUSH H LHLD 80D8H ;START OF ARRAYS XCHG LHLD 80D6H ;END OF BASIC 2BDCH L186: CALL L004 ;CMPHD JZ L188 MOV A,C SUB M INX H JNZ L187 MOV A,B SUB M 2BEAH L187: INX H JZ L190 INX H INX H INX H INX H JMP L186 2BF5H L188: POP H XTHL PUSH D LXI D,2A9AH CALL L004 ;CMPHD POP D JZ L191 XTHL PUSH H PUSH B LXI B,6 LHLD 80DAH ;END OF ARRAYS PUSH H DAD B POP B PUSH H CALL L010 ;CK MEMORY SIZE-MOVE MEMORY ;TO MAKE ROOM FOR BASIC LINE POP H SHLD 80DAH ;END OF ARRAYS MOV H,B MOV L,C SHLD 80D8H ;START OF ARRAYS 2C1BH L189: CALL L002 JNZ L189 POP D MOV M,E INX H MOV M,D INX H 2C26H L190: XCHG POP H RET 2C29H L191: STA RFLG LXI H,2103H SHLD TEMPHL POP H RET 2C34H L192: PUSH H LHLD 80A9H XTHL MOV D,A 2C3AH L193: PUSH D PUSH B CALL L106 POP B POP PSW XCHG XTHL PUSH H XCHG INR A MOV D,A MOV A,M CPI ',' JZ L193 CALL L095 DAD H SHLD 80CAH POP H SHLD 80A9H PUSH D CALL L430 JC L195 LDA 80A9H ORA A MVI E,18 JNZ L022 ;DD ERROR POP PSW SUB M JZ L199 2C6DH L194: MVI E,16 JMP L022 ;BS ERROR 2C72H L195: LXI D,4 POP PSW MOV M,C INX H MOV M,B INX H MOV C,A CALL L013 INX H INX H SHLD 80C2H MOV M,C INX H LDA 80A9H RAL MOV A,C 2C8AH L196: LXI B,11 JNC L197 POP B INX B 2C92H L197: MOV M,C INX H MOV M,B INX H PUSH PSW PUSH H CALL L312 XCHG POP H POP PSW DCR A JNZ L196 PUSH PSW MOV B,D MOV C,E XCHG DAD D JC L194 CALL L016 ;CK FREE MEMORY SHLD 80DAH ;END OF ARRAYS 2CB0H L198: CALL L002 JNZ L198 INX B MOV D,A LHLD 80C2H MOV E,M XCHG DAD H DAD B XCHG DCX H DCX H MOV M,E INX H MOV M,D INX H POP PSW JC L201 2CCAH L199: MOV B,A MOV C,A MOV A,M INX H MVI D,225 ORG $-1 2CCFH L200: POP H MOV E,M INX H MOV D,M INX H XTHL PUSH PSW CALL L004 ;CMPHD JNC L194 PUSH H CALL L312 POP D DAD D POP PSW DCR A MOV B,H MOV C,L JNZ L200 DAD H DAD H POP B DAD B XCHG 2CEEH L201: LHLD 80CAH RET ; "FRE" TOKEN 2CF2H LHLD 80DAH ;END OF ARRAYS XCHG LXI H,0 DAD SP LDA 80AAH ORA A JZ L202 CALL L238 CALL L2311 LHLD 80D2H ;STRING SPACE ALLOC XCHG LHLD 80C0H 2D0EH L202: MOV A,L SUB E MOV C,A MOV A,H SBB D 2D13H L203: MOV B,C 2D14H L204: MOV D,B MVI E,0 LXI H,80AAH MOV M,E MVI B,'Z' JMP L295 ; "POS" TOKEN 2D20H LDA 8208H 2D23H L205: MOV B,A XRA A JMP L204 2D28H CALL L209 CALL L208 LXI B,L119 PUSH B PUSH D CALL L095 NOP CALL L180 CALL L160 CALL L095 DAD H CALL L095 XRA H MOV B,H MOV C,L XTHL JMP L207 2D4BH L206: CALL L209 PUSH D CALL L170 CALL L160 XTHL CALL L005 POP D CALL L005 POP H CALL L005 CALL L005 DCX H DCX H DCX H DCX H PUSH H CALL L004 ;CMPHD PUSH D MVI E,34 JZ L022 ;UF ERROR CALL L303 POP H CALL L159 CALL L097 JNZ L019 ;SN ERROR POP H POP D POP B 2D82H L207: MOV M,C INX H MOV M,B JMP L213 2D88H L208: PUSH H LHLD 80CCH ;CURRENT LINE NO INX H MOV A,H ORA L POP H RNZ MVI E,22 JMP L022 ;ID ERROR 2D96H L209: CALL L095 SBB A MVI A,128 STA 80C6H ORA M MOV B,A CALL L181 JMP L160 ; "STR$" TOKEN 2DA7H CALL L160 CALL L330 CALL L214 CALL L238 LXI B,2FAFH PUSH B 2DB7H L210: MOV A,M INX H INX H PUSH H CALL L223 POP H MOV C,M INX H MOV B,M CALL L212 PUSH H MOV L,A CALL L235 POP D RET 2DCCH L211: CALL L223 2DCFH L212: LXI H,80BCH PUSH H MOV M,A INX H 2DD5H L213: INX H MOV M,E INX H MOV M,D POP H RET 2DDBH L214: DCX H 2DDCH L215: MVI B,'"' MOV D,B 2DDFH L216: PUSH H MVI C,-1 2DE2H L217: INX H MOV A,M INR C ORA A JZ L218 CMP D JZ L218 CMP B JNZ L217 2DF1H L218: CPI '"' CZ L096 ;NEXT CHAR-SKIP SPACE ;<C> IF ASCII # ;<Z> IF : OR 0 XTHL INX H XCHG MOV A,C CALL L212 2DFDH L219: LXI D,80BCH LHLD 80AEH ;STRING SPACE SHLD TEMPHL MVI A,1 STA 80AAH CALL L304 CALL L004 ;CMPHD SHLD 80AEH ;STRING SPACE POP H MOV A,M RNZ MVI E,30 JMP L022 ;ST ERROR ; DISPLAY ROUTINE 2E1CH INX H 2E1DH DISPLAY:CALL L214 2E20H DISP1: CALL L238 CALL L301 INR E 2E27H DISP2: DCR E RZ LDAX B CALL L073 CPI 13 CZ L137 INX B JMP DISP2 2E36H L223: ORA A MVI C,241 ORG $-1 2E38H POP PSW PUSH PSW LHLD 80D2H ;STRING SPACE ALLOC XCHG LHLD 80C0H CMA MOV C,A MVI B,-1 DAD B INX H CALL L004 ;CMPHD JC L224 SHLD 80C0H INX H XCHG POP PSW RET 2E54H L224: POP PSW MVI E,26 JZ L022 ;OS ERROR CMP A PUSH PSW LXI B,2E38H PUSH B 2E60H L225: LHLD 80ACH 2E63H L226: SHLD 80C0H LXI H,0 PUSH H LHLD 80D2H ;STRING SPACE ALLOC PUSH H LXI H,80B0H 2E71H XCHG LHLD 80AEH ;STRING SPACE CALL L003 ;CMPDH LXI B,2E71H JNZ L230 LHLD 80D6H ;END OF BASIC 2E81H L227: XCHG LHLD 80D8H ;START OF ARRAYS CALL L003 ;CMPDH JZ L229 MOV A,M INX H INX H ORA A CALL L231 JMP L227 2E95H L228: POP B 2E96H L229: XCHG LHLD 80DAH ;END OF ARRAYS CALL L003 ;CMPDH JZ L232 CALL L301 MOV A,E PUSH H DAD B ORA A JP L228 SHLD 80C2H POP H MOV C,M MVI B,0 DAD B DAD B INX H 2EB4H XCHG LHLD 80C2H CALL L003 ;CMPDH JZ L229 LXI B,2EB4H 2EC1H L230: PUSH B ORI 128 2EC4H L231: MOV A,M INX H INX H MOV E,M INX H MOV D,M INX H RP ORA A 2ECDH L2311: RZ MOV B,H MOV C,L CALL L001 MOV H,B MOV L,C RC POP H XTHL CALL L004 ;CMPHD XTHL PUSH H MOV H,B MOV L,C RNC POP B POP PSW POP PSW PUSH H PUSH D PUSH B RET 2EE7H L232: POP D POP H MOV A,L ORA H RZ DCX H MOV B,M DCX H MOV C,M PUSH H DCX H DCX H MOV L,M MVI H,0 DAD B MOV D,B MOV E,C DCX H MOV B,H MOV C,L LHLD 80C0H CALL L011 POP H MOV M,C INX H MOV M,B MOV L,C MOV H,B DCX H JMP L226 2F0CH L233: PUSH B PUSH H LHLD TEMPHL XTHL CALL L169 XTHL CALL L161 MOV A,M PUSH H LHLD TEMPHL PUSH H ADD M MVI E,28 JC L022 ;LS ERROR CALL L211 POP D CALL L240 XTHL CALL L239 PUSH H LHLD 80BEH XCHG CALL L234 CALL L234 LXI H,29E2H XTHL PUSH H JMP L219 2F43H L234: POP H XTHL CALL L005 MOV C,M INX H MOV B,M POP H 2F4CH L235: INR L 2F4DH L236: DCR L RZ LDAX B STAX D INX B INX D JMP L236 2F56H L237: CALL L161 2F59H L238: LHLD TEMPHL 2F5CH L239: XCHG 2F5DH L240: CALL L242 XCHG RNZ PUSH D MOV D,B MOV E,C DCX D MOV C,M CALL L001 JNZ L241 MOV B,A DAD B SHLD 80C0H 2F72H L241: POP H RET 2F74H L242: LHLD 80AEH ;STRING SPACE DCX H MOV B,M DCX H MOV C,M DCX H DCX H CALL L004 ;CMPHD RNZ SHLD 80AEH ;STRING SPACE RET ; "LEN" TOKEN 2F85H LXI B,L205 PUSH B 2F89H L243: CALL L237 XRA A MOV D,A STA 80AAH 2F91H L244: MOV A,M ORA A RET ; "ASC" TOKEN 2F94H CALL L243 JZ L111 INX H INX H MOV E,M INX H MOV D,M LDAX D JMP L205 ; "CHR$" TOKEN 2FA3H MVI A,1 CALL L211 CALL L253 LHLD 80BEH MOV M,E 2FAFH POP B JMP L219 ; "LEFT$" TOKEN 2FB3H CALL L248 XRA A 2FB7H L245: XTHL MOV C,A 2FB9H PUSH H MOV A,M CMP B JC L246 MOV A,B LXI D,0EH ORG $-2 2FC1H L246: MVI C,0 PUSH B CALL L223 POP B POP H PUSH H INX H INX H MOV B,M INX H MOV H,M MOV L,B MVI B,0 DAD B MOV B,H MOV C,L CALL L212 MOV L,A CALL L235 POP D CALL L240 JMP L219 ; "RIGHT$" TOKEN 2FE3H CALL L248 POP D PUSH D LDAX D SUB B JMP L245 ; "MID$" TOKEN 2FEDH XCHG MOV A,M CALL L249 PUSH B MVI E,-1 CPI ')' JZ L247 CALL L095 INR L CALL L252 3001H L247: CALL L095 DAD H POP PSW XTHL LXI B,2FB9H PUSH B DCR A CMP M MVI B,0 RNC MOV C,A MOV A,M SUB C CMP E MOV B,A RC MOV B,E RET 3018H CALL L250 PUSH PSW MVI E,0 CALL L097 JZ 8222H CALL L095 INR L CALL L252 JMP 8222H 302EH L248: XCHG CALL L095 DAD H 3033H L249: POP B POP D PUSH B MOV B,E INR B DCR B RNZ JMP L111 303DH L250: CALL L252 STA 8224H STA 8220H CALL L095 INR L JMP L252 304DH L251: CALL L096 ;NEXT CHAR-SKIP SPACE ;<C> IF ASCII # ;<Z> IF : OR 0 3050H L252: CALL L159 3053H L253: CALL L108 MOV A,D ORA A JNZ L111 CALL L097 MOV A,E RET ; "VAL" TOKEN 3060H CALL L243 JZ L265 MOV E,A INX H INX H MOV A,M INX H MOV H,M MOV L,A PUSH H DAD D MOV B,M MOV M,D XTHL PUSH B MOV A,M CALL L315 POP B POP H MOV M,B RET ; "PEEK" TOKEN 307BH CALL L292 CALL L254 LDAX D JMP L205 3085H CALL L159 CALL L292 CALL L254 PUSH D CALL L095 INR L CALL L252 POP D STAX D RET 3099H L254: JM L109 LDA RFLG CPI 145 JMP L110 30A4H L255: LXI H,352CH 30A7H L256: CALL L301 JMP L259 30ADH L257: CALL L301 LXI H,0D1C1H 30B3H L258: CALL L296 30B6H L259: MOV A,B ORA A RZ LDA RFLG ORA A JZ L299 SUB B JNC L260 CMA INR A XCHG CALL L297 XCHG CALL L299 POP B POP D 30D0H L260: CPI 25 RNC PUSH PSW CALL L306 MOV H,A POP PSW CALL L275 ORA H LXI H,TEMPHL JP L261 CALL L273 JNC L269 INX H INR M JZ L272 MVI L,1 CALL L279 JMP L269 30F6H L261: XRA A SUB B MOV B,A MOV A,M SBB E MOV E,A INX H MOV A,M SBB D MOV D,A INX H MOV A,M SBB C MOV C,A 3104H L262: CC L274 3107H L263: MOV L,B MOV H,E XRA A 310AH L264: MOV B,A MOV A,C ORA A JNZ L268 MOV C,D MOV D,H MOV H,L MOV L,A MOV A,B SUI 8 CPI 224 JNZ L264 311CH L265: XRA A 311DH L266: STA RFLG RET 3121H L267: DCR B DAD H MOV A,D RAL MOV D,A MOV A,C ADC A MOV C,A 3129H L268: JP L267 MOV A,B MOV E,H MOV B,L ORA A JZ L269 LXI H,RFLG ADD M MOV M,A JNC L265 RZ 313CH L269: MOV A,B 313DH L270: LXI H,RFLG ORA A CM L271 MOV B,M INX H MOV A,M ANI 128 XRA C MOV C,A JMP L299 314EH L271: INR E RNZ INR D RNZ INR C RNZ MVI C,128 INR M RNZ 3158H L272: MVI E,10 JMP L022 ;OV ERROR 315DH L273: MOV A,M ADD E MOV E,A INX H MOV A,M ADC D MOV D,A INX H MOV A,M ADC C MOV C,A RET 3169H L274: LXI H,CRTRY MOV A,M CMA MOV M,A XRA A MOV L,A SUB B MOV B,A MOV A,L SBB E MOV E,A MOV A,L SBB D MOV D,A MOV A,L SBB C MOV C,A RET 317DH L275: MVI B,0 317FH L276: SUI 8 JC L277 MOV B,E MOV E,D MOV D,C MVI C,0 JMP L276 318CH L277: ADI 9 MOV L,A 318FH L278: XRA A DCR L RZ MOV A,C 3193H L279: RAR MOV C,A MOV A,D RAR MOV D,A MOV A,E RAR MOV E,A MOV A,B RAR MOV B,A JMP L278 31A1H DB 000H,000H,000H,081H 31A5H DB 003H,0AAH,056H,019H DB 080H,0F1H,022H,076H DB 080H,045H,0AAH,038H DB 082H ; "LOG" TOKEN 31B2H L280: CALL L292 JPE L111 LXI H,RFLG MOV A,M LXI B,8035H LXI D,04F3H SUB B PUSH PSW MOV M,B PUSH D PUSH B CALL L259 POP B POP D INR B CALL L286 LXI H,31A1H CALL L257 LXI H,31A5H CALL L348 LXI B,8080H LXI D,0 CALL L259 POP PSW CALL L326 31E9H L281: LXI B,8031H LXI D,7218H LXI H,0D1C1H ORG $-2 31F0H POP B POP D 31F2H L282: CALL L292 RZ MVI L,0 CALL L287 MOV A,C STA 8238H XCHG SHLD 8233H LXI B,0 MOV D,B MOV E,B LXI H,L263 PUSH H LXI H,3214H PUSH H PUSH H LXI H,TEMPHL 3214H MOV A,M INX H ORA A JZ L283 PUSH H XCHG MVI E,8 JMP 822BH 3221H L283: MOV B,E MOV E,D MOV D,C MOV C,A RET 3226H L284: CALL L297 LXI B,8420H LXI D,0 CALL L299 3232H L285: POP B POP D 3234H L286: CALL L292 JZ L020 ;/0 ERROR MVI L,-1 CALL L287 INR M INR M DCX H MOV A,M STA 8258H DCX H MOV A,M STA 8254H DCX H MOV A,M STA 8250H MOV B,C XCHG XRA A MOV C,A MOV D,A MOV E,A STA 825BH JMP 824CH 325CH L287: MOV A,B ORA A JZ L290 MOV A,L LXI H,RFLG XRA M ADD B MOV B,A RAR XRA B MOV A,B JP L289 ADI 128 MOV M,A JZ 824AH CALL L306 MOV M,A DCX H RET 327AH L288: CALL L292 CMA POP H 327FH L289: ORA A 3280H L290: POP H JP L265 JMP L272 3287H L291: CALL L300 MOV A,B ORA A RZ ADI 2 JC L272 MOV B,A CALL L259 LXI H,RFLG INR M RNZ JMP L272 329EH L292: LDA RFLG ORA A RZ LDA BRTRY CPI 47 RAL 32A9H L293: SBB A RNZ INR A RET ; "SGN" TOKEN 32ADH CALL L292 32B0H L294: MVI B,136 LXI D,0 32B5H L295: LXI H,RFLG MOV C,A MOV M,B MVI B,0 INX H MVI M,128 RAL JMP L262 ; "ABS" TOKEN 32C3H CALL L292 RP 32C7H L296: LXI H,BRTRY MOV A,M XRI 128 MOV M,A RET 32CFH L297: XCHG LHLD TEMPHL XTHL PUSH H LHLD BRTRY XTHL PUSH H XCHG RET 32DCH L298: CALL L301 32DFH L299: XCHG SHLD TEMPHL MOV H,B MOV L,C SHLD BRTRY XCHG RET 32EAH L300: LXI H,TEMPHL 32EDH L301: MOV E,M INX H MOV D,M INX H MOV C,M INX H MOV B,M 32F4H L302: INX H RET 32F6H L303: LXI D,TEMPHL 32F9H L304: MVI B,4 32FBH L305: LDAX D MOV M,A INX D INX H DCR B JNZ L305 RET 3304H L306: LXI H,BRTRY MOV A,M RLC STC RAR MOV M,A CMC RAR INX H INX H MOV M,A MOV A,C RLC STC RAR MOV C,A RAR XRA M RET 3319H L307: MOV A,B ORA A JZ L292 LXI H,32A7H PUSH H CALL L292 MOV A,C RZ LXI H,BRTRY XRA M MOV A,C RM CALL L308 RAR XRA C RET 3333H L308: INX H MOV A,B CMP M RNZ DCX H MOV A,C CMP M RNZ DCX H MOV A,D CMP M RNZ DCX H MOV A,E SUB M RNZ POP H POP H RET 3346H L309: MOV B,A MOV C,A MOV D,A MOV E,A ORA A RZ PUSH H CALL L300 CALL L306 XRA M MOV H,A CM L310 MVI A,152 SUB B CALL L275 MOV A,H RAL CC L271 MVI B,0 CC L274 POP H RET 336AH L310: DCX D MOV A,D ANA E INR A RNZ DCR C RET ; "INT" TOKEN 3371H L311: LXI H,RFLG MOV A,M CPI 152 LDA TEMPHL RNC MOV A,M CALL L309 MVI M,152 MOV A,E PUSH PSW MOV A,C RAL CALL L262 POP PSW RET ; END PART 1