CP/M 2.2 QUAD.CAPDISKETTECPM FROMNORTH * STAR ---------SYSTEM--TRACKS-BIOS USER CPM CCP CPM BDOS --------DIR.SEC1DIR.SEC2DIR.SEC3DIR.SEC4--------CPM DATADATASEC1DATASEC2DATASEC3DATASEC4........ TINYBASEASML ABSMAKROCOMXINTBASE COMBNEWTINY ASML !"#$%NEWBASE ASMP&'()*+,-./012NEWBASE COM$345INTBASE ASMX6789:;<=>?@ABCCREDIT COM"DEFINTBASE $$$STACK:EQU 0BFFFH CALL FILL0 START:CALL CRLF LXI H,WKLN SHLD NXTLN LXI H,0 SHLD WKLN SHLD LPLVL LXI H,READY CALL MESAG STRT1:LXI SP,STACK CALL READN CPI 2 JZ STRT1+3 MOV A,M SUI 0F0H CPI 10 JNC PTLIN ADD A LXI H,WKLST MOV E,A MVI D,0 DAD D MOV E,M INX H MOV D,M XCHG PCHL PTLIN:CALL INSRT JMP STRT1 SRTCH:LXI H,LINES MVI M,0 SHLD END JMP START LIST:LXI H,INBUF+1 CALL FNDNM NXT4:MOV A,M ORA A JZ START PRLP1:CALL CONVT MVI B,10 FDLP6 LHLD SAVE INX H MOV A,M MVLP6:STAX D INX D INX H MOV A,M CMP B JNZ MVLP6 MVI A,32 POP H DMOVE:STAX D INX D CPI 13 INX H JNZ CONLP RET CHOIC:DB 0 AUTO:LXI H,1 SHLD STEP LXI H,INBUF+1 CALL EXPR XCHG CALL CCOMM XCHG JNZ NXT40 PUSH H XCHG CALL EXPR SHLD STEP POP H NXT40:SHLD POINT LP56:LXI D,INBF1 CALL CONV1 LXI H,INBF1 CALL MESAG MVI B,0 CALL PIKUP CALL INSRT LHLD POINT XCHG LHLD STEP DAD D SHLD POINT JMP LP56 CONV1:MVICALL NEWPL NXT50:XCHG LHLD LINE XCHG CALL MOVUP JMP STRT1 ONELN:POP PSW JNC STRT1 LHLD LINE CALL NEWPL CALL MOVUP JMP STRT1 LINE:DS 2 EDIT:LXI H,INBUF+1 CALL FNDNM JNC LNERR CALL CONVT LXI D,INBUF LXI H,INBF1 MVI B,4 MVLP8:LDAX D MOV M,A INX D INX H CALL CHOUT DCR B JNZ MVLP8 RUN:CALL FILL0 LXI H,LINES RLOOP:MOV A,M ORA A JZ START PUSH H CALL ADDAH SHLD NXTLN POP H INX H MOV D,M INX H MOV E,M INX H XCHG SHLD WKLN XCHG CALLXI D,INBUF PRLP2:LDAX D CALL CHOUT INX D CMP B JNZ PRLP2 CALL DOS+16H JZ STOP CPI 13 JZ NXT6 CPI 20H JZ NXT5 LDA CHOIC ORA A JZ NXT4 NXT5:CALL CHIN NXT6:SUI 13 STA CHOIC JMP NXT4 CONVT:LXI D,INBUF INX H MOV A,M INX H PUSH H MOV L,M MOV H,A CALL CONV1 POP H INX H CONLP:MOV A,M ORA A JP DMOVE MVI A,32 STAX D INX D PUSH H MOV B,M LXI H,COMMS-1 FDLP6:SHLD SAVE INX H MOV A,M ORA A JP FDLP6+3 CPI 255 JZ SYERR CMP B JNZ A,30H STA TELL LXI B,-10000 CALL SDIG LXI B,-1000 CALL SDIG LXI B,-100 CALL SDIG LXI B,-10 CALL SDIG MOV A,L ADI 30H STAX D INX D XRA A STAX D RET SDIG:MVI A,2FH INR A SHLD SAVE DAD B JC SDIG+2 LXI H,TELL CMP M LHLD SAVE RZ STAX D INX D XRA A STA TELL RET TELL:DS 1 DELETE:LXI H,INBUF+1 CALL FNDNM SHLD LINE LHLD POINT DCX H MOV A,M PUSH PSW CPI 13 JZ ONELN POP PSW CPI 88H JNZ SYERR INX H CALL FNDNM JNC NXT50 L EXEC REXEC:LHLD NXTLN JMP RLOOP EXEC:CALL DOS+16H JZ STOP LXI B,RTAD1 PUSH B MOV A,M ORA A JP LET INX H CPI 0A0H JNC SYERR LXI D,CTABL XCHG SUI 80H ADD A CALL ADDAH MOV A,M INX H MOV H,M MOV L,A PUSH H XCHG RET RTAD1:MOV A,M INX H CPI 13 RZ CPI 82H RZ CPI 8EH JZ EXEC JMP SYERR REM:POP H RET PRINT:MOV A,M CPI 13 JZ CRLF CPI 8EH JZ CRLF CPI 88H JZ HERE PRLP:MOV A,M CPI 95H JZ QUOTE CALL EXPR CALL PRIHL LHLD POINT DCX H MOV A,M CPI 0DH JZ CRLF CPI 82H JZ CRLF CPI 8EH JZ CRLF CPI 88H JNZ SYERR HERE:EQU $ INX H MOV A,M CPI 0DH RZ CPI 8EH RZ JMP PRLP QUOTE:INX H MOV A,M INX H CPI 0DH JZ SYERR CPI 95H JZ PRINT CALL CHOUT JMP QUOTE+1 PRIHL:XCHG LXI H,NUMBF SHLD CHAR XCHG MVI A,32 CALL CO1 XRA A STA CHOIC MOV A,H ORA A JP NXT53 CALL NEGHL MVI A,'-' CALL CO1 NXT53:MVI C,47 LXI D,-10000 CALL PDIGT LXI D,-1000 CALL PDIGT LXI D,-100 CALL PDIGT LXI D,R INX H PUSH D CALL EXPR POP D XCHG MOV M,D INX H MOV M,E LHLD POINT DCX H RET IF:CALL EXPR XCHG LHLD POINT DCX H MOV A,M INX H CPI 81H JNZ SYERR MOV A,E ORA D POP B JNZ EXEC ELSE:LXI B,820DH ELLOP:MOV A,M INX H CMP B JZ EXEC CMP C RZ JMP ELLOP POKE:CALL EXPR XCHG CALL CCOMM JNZ SYERR PUSH D CALL EXPR POP D XCHG MOV M,E LHLD POINT DCX H RET OUT:CALL EXPR XCHG CALL CCOMM JNZ SYERR PUSH D CALL EXPR POP D XCHG MOPOSNM LXI H,0 POSNM:INX H SHLD LIMIT POP D LHLD NXTLN FOR2:PUSH H PUSH D SHLD NXTLN LHLD LIMIT PUSH H PUSH B LHLD LVAR PUSH H LXI B,-1 PUSH B LXI B,REXEC PUSH B XCHG JMP RTAD1 FNEXT:POP B POP B CALL FNDVR SHLD ENDPT POP B INX B MOV A,B ORA C JNZ STERR POP B MOV A,C CMP E JNZ STERR MOV A,B CMP D JNZ STERR XCHG MOV D,M INX H MOV E,M XCHG POP B DAD B XCHG MOV M,E DCX H MOV M,D SHLD LVAR POP H DCX H SHLD LIMIT MOV A,H MOV A,H ORA L JZ STERR LXI D,SBLVL LDAX D DCR A STAX D JM STERR POP D INX D INX D MOV A,D ORA E JNZ STERR POP H SHLD LPLVL POP H SHLD NXTLN POP H PUSH B JMP RTAD1 INPUT:SHLD SAVE3 MOV A,M CPI 95H JNZ INPT1 INX H INPLP:MOV A,M INX H CPI 95H JZ INPT1 CALL CHOUT JMP INPLP INPT1:MVI A,'?' CALL CHOUT MVI A,32 CALL CHOUT PUSH H CALL READN POP H LXI D,INBUF CALL DEFVR RNC LXI H,REDOM CALL MESAG LHLD SAVE3 JMP INPUT+3 DEFVR:XRNZ SYERR INX H XCHG LXI H,1 SHLD RUNTO LXI H,ARRTB-82H MOV A,B ADD A CALL ADDAH MOV A,M INX H ORA M JNZ DMERR XRA A PUSH D XCHG LHLD LSTAR MOV M,A XCHG XTHL INX D PUSH D DIMLP:CALL EXPR1 MOV A,H ORA A JM SYERR XCHG POP H MOV M,E INX H MOV M,D INX H PUSH H INX D LHLD RUNTO CALL IMUL SHLD RUNTO LHLD POINT DCX H MOV A,M INX H XCHG LHLD LSTAR INR M XCHG CPI 88H JZ DIMLP CPI ')' JNZ SYERR POP D LXI H,0 DAD SP D-10 CALL PDIGT MOV A,L ADI 30H CALL CO1 LDA CNTR5 MOV B,A LHLD CHAR MOV A,L SUI NUMBF&255+64 CMA CMP B CC CRLF LXI H,NUMBF JMP MESAG PDIGT:MVI B,47 SHLD SAVE INR B DAD D JC PDIGT+2 LHLD SAVE LDA CHOIC ORA A JNZ NXT70 MOV A,B CPI 30H RZ STA CHOIC NXT70:MOV A,B CO1:PUSH H LHLD CHAR MOV M,A INX H MVI M,0 SHLD CHAR POP H RET CHAR:DS 2 NUMBF:DS 7 GOTO:CALL EXPR CALL FNDN1 JNC LNERR POP B POP B JMP RLOOP LET:CALL FNDVR MOV A,M CPI 0A3H JNZ SYERV A,L STA OUTPL MOV A,E DB 0D3H OUTPL:DS 1 LHLD POINT DCX H RET FOR:POP B POP B LXI B,LPLVL LDAX B INR A STAX B CALL FNDVR MOV A,M CPI 0A3H JNZ SYERR PUSH D CALL EXPR0 SHLD SNUM LDAX D CPI 85H JNZ SYERR XCHG XTHL SHLD LVAR MOV M,D INX H MOV M,E POP H CALL EXPR0 SHLD LIMIT LDAX D CPI 87H LXI H,1 CZ EXPR9 MOV B,H MOV C,L PUSH D LHLD LIMIT XCHG LHLD SNUM CALL ISUB XCHG MOV H,B MOV L,C PUSH B CALL IDIV POP B MOV A,H ORA A JP ORA L JNZ DOMOR NOMOR:POP B POP B LXI B,LPLVL LDAX B DCR A STAX B JM SYERR LHLD ENDPT MOV A,M INX H CPI 88H JZ FNEXT+2 DCX H LXI B,REXEC PUSH B JMP RTAD1 DOMOR:POP D POP H JMP FOR2 GOSUB:CALL EXPR PUSH D LXI B,SBLVL LDAX B INR A STAX B CALL FNDN1 JNC LNERR XCHG LHLD NXTLN XCHG SHLD NXTLN POP B POP PSW POP PSW PUSH B PUSH D LHLD LPLVL PUSH H LXI H,0 SHLD LPLVL DCX H DCX H PUSH H JMP REXEC RTRN8:POP B POP B LHLD WKLN A A STA CNTR9 DEFLP:PUSH D CALL FNDVR MOV A,M CPI 88H JNZ INSTR LDA CNTR9 INR A STA CNTR9 INSTR:XTHL PUSH D CALL EXPR XCHG MOV A,M CPI 88H LDA CNTR9 JNZ ISTR1 DCR A STA CNTR9 ISTR1:ORA A JZ LEGL9 JM LEGL9 POP D POP D STC RET LEGL9:INX H XTHL MOV M,D INX H MOV M,E POP D POP H MOV A,M CPI 13 RZ CPI 8EH RZ INX H CPI 88H JNZ SYERR JMP DEFLP DIM:MOV A,M CPI 41H JC SYERR CPI 'Z'+1 JNC SYERR MOV B,A INX H MOV A,M CPI '(' JCR H MOV C,H LHLD RUNTO DAD H XCHG MVI B,0 DMFIL:MOV A,C CMP H JZ MEMOV MOV M,B DCX D INX H MOV A,D ORA E JNZ DMFIL XCHG LHLD LSTAR MOV B,H MOV C,L POP H MOV M,B DCX H MOV M,C XCHG SHLD LSTAR LHLD POINT MOV A,M INX H CPI 88H JZ DIM DCX H RET FILNM:EQU 4 OPEN:CALL LGLFL PUSH H CALL TSTFL CPI 80H JNZ DSKER XTHL INX H MOV A,M CPI 88H JNZ SYERR INX H MOV A,M CPI 95H JNZ SYERR INX H SHLD POINT CALL GTNM1 XTHL MVI M,0 INX H MOV M,A INX H MOV M,E INX H MOV M,D INX H POP D MOV M,E INX H MOV M,D LHLD POINT MVI B,95H SRCHQ:MOV A,M INX H CMP B JNZ SRCHQ RET WRITE:CALL LGLFL SHLD POINT CALL TSTFL LXI D,6 XCHG DAD D SHLD WFILE ORA A JZ DEFWT INR A JNZ DSKER TCOMM:LHLD POINT INX H MOV A,M CPI 88H JNZ SYERR WTVRS:INX H CALL EXPR CALL WRTHL XCHG MOV A,M CPI 88H JZ WTVRS RET WRTHL:MVI A,01H CALL WRITA MOV A,L CALL WRITA MOV A,H WRITA:PUSH H PULHLD WFILE INX H INX H XCHG JMP CMDSK DEFWT:DCR A STAX D INR A MOV M,A INX H MOV M,A JMP TCOMM READ:CALL LGLFL SHLD POINT CALL TSTFL LXI D,6 XCHG DAD D SHLD WFILE ORA A JZ DEFRD DCR A JNZ DSKER TCOM1:LHLD POINT INX H MOV A,M CPI 88H JNZ SYERR RDVRS:INX H CALL FNDVR PUSH H CALL RDHL XCHG MOV M,D INX H MOV M,E POP H MOV A,M CPI 88H JZ RDVRS RET RDHL:CALL READA DCR A JNZ DSKER CALL READA MOV L,A CALL READA MOV H,A RET R INX H INX H XCHG PUSH B MVI B,1 JMP CMDSK DEFRD:INR A STAX D LXI D,SECTR-1 MOV M,E INX H MOV M,D JMP TCOM1 CLOSF:CALL LGLFL PUSH H CALL TSTFL CPI 80H JZ DSKER MVI M,80H XCHG POP H INR A RNZ PUSH H LXI H,6 DAD D SHLD WFILE XRA A MVI B,0 WLOOP:CALL WRITA DCR B JNZ WLOOP POP H RET TSTFL:MOV H,A ADD A ADD A ADD A MOV L,A LXI D,BUFFS DAD D MOV A,M RET LGLFL:MOV A,M SUI 30H JM SYERR CPI FILNM JNC SYERR RET GTNM1:CALL DLOO,H XCHG POP D POP D LXI B,RTRN PUSH B ORA A JZ ERR CPI 16 JNC ERR PUSH PSW ADD A PUSH H LXI H,OPERS-2 ADD L MOV L,A MVI A,0 ADC H MOV H,A MOV C,M INX H MOV B,M POP H POP PSW PUSH B CPI 7 RNC MOV A,D XRA H ANI 80H JZ NXT77 XCHG NXT77:MOV A,H CMP D MOV A,L LXI H,0 RNZ CMP E RET OPERS:DW INE,ILE DW IGE,IEQ DW ILT,IGT DW IADD,ISUB DW IMUL,IDIV DW EXPON DW IMOD,IAND DW IXOR,IOR ERR:POP H LXI H,0 RTRN:XCHG POP H PUSH DAD H DAD H DAD H MOV C,A MVI B,0 DAD B JMP HEX+1 ALPHA:CPI 'F'+1 JNC CHEK1 CPI 'A' JC CHEK1 SUI 'A'-10 JMP GOTNM CHEK1:XCHG MOV B,A CPI '[' JZ ADDR CPI '(' JZ LPARN CPI ')' JZ RPARN CPI 13 JZ DON66 ORA A JP TSTVR CPI 160 JC DON66 CPI 183 JNC DON66 CPI 175 JNC FNCTN SUI 159 MOV B,A PUSH H LXI H,VALUS DCR A CALL ADDAH MOV C,M POP H RET RPARN:LDA PCHEK ORA A JZ SYERR DON66:LXI B,0 RET LPARN:CALL EXPR1 RETAD:XCHG LHLD POINSH D PUSH PSW LHLD WFILE MOV E,M INX H MOV D,M INX D MOV M,D DCX H MOV M,E INX H DAD D MOV M,A DCX D MOV A,D ANI SECTR>8 CNZ WBUFF POP PSW POP D POP H RET WBUFF:LHLD WFILE DCX H MOV D,M DCX H MOV E,M MOV A,D ORA E JZ NORM1 DCX D MOV M,E INX H MOV M,D XRA A INX H MOV M,A INX H MOV M,A LXI D,-5 DAD D MOV E,M INX H MOV D,M INX D MOV M,D DCX H MOV M,E DCX D LHLD WFILE PUSH B LXI B,-5 DAD B MOV A,M MVI B,0 EADA:PUSH D PUSH H LHLD WFILE MOV E,M INX H MOV D,M INX D MOV A,D ANI SECTR>8 CNZ RBUFF LHLD WFILE MOV E,M INX H MOV D,M INX D MOV M,D DCX H MOV M,E INX H INX H DAD D MOV A,M POP H POP D RET RBUFF:MVI A,-1 MOV M,A DCX H MOV M,A DCX H MOV D,M DCX H MOV E,M MOV A,D ORA E JZ DSKER DCX D MOV M,D INX H MOV M,E DCX H DCX H MOV D,M DCX H MOV E,M INX D MOV M,E INX H MOV M,D DCX D DCX H DCX H MOV A,M LHLD WFILE K JC DSKER MOV B,A MOV E,M INX H MOV D,M INX H MOV A,M INX H MOV H,M MOV L,A MOV A,B RET WFILE:DS 2 BUFFS:DS FILNM*264 ;****** EXPRESSION EVALUATOR EXPR9:XCHG EXPR0:INX H EXPR1:MVI A,1 STA PCHEK JMP PUSH EXPR:XRA A STA PCHEK PUSH:SHLD POINT LXI H,0FFFFH PUSH H INX H PUSH H LXI H,70AH PUSH H EXPLP:LHLD POINT CALL GET SHLD POINT MOV H,B MOV L,C SHLD SAVE EXTRA:POP H PUSH H MOV A,L CMP C JNC COMLP PUSH D PUSH B JMP EXPLP COMLP:MOV A H INR H JZ GOBAK LHLD SAVE MOV B,H MOV C,L JMP EXTRA DONE1:POP B LHLD POINT DCX H XCHG RET GOBAK:LHLD SAVE MOV A,H ORA A JZ DONE1 PUSH D PUSH H JMP EXPLP GET:SHLD POINT XCHG LXI H,0 LDAX D CPI '%' JZ HEX CNMLP:LDAX D INX D CPI 30H JC CHEK1 CPI 3AH JNC CHEK1 SUI 30H MOV B,H MOV C,L DAD H DAD H DAD B DAD H MOV C,A MVI B,0 DAD B JMP CNMLP HEX:INX D LDAX D INX D CPI 30H JC CHEK1 CPI 3AH JNC ALPHA SUI 30H GOTNM:DAD H T DCX H MOV A,M CPI ')' JNZ SYERR INX H MOV A,M INX H JMP CHEK1+1 FNCTN:SUI 175 MOV B,A ADD A PUSH H MOV C,A CALL NONUM MOV A,C LXI H,FUNCS CALL ADDAH MOV E,M INX H MOV D,M POP H MOV A,B ORA A JZ CALL MOV A,M CPI '(' JNZ SYERR INX H LXI B,RETAD PUSH B PUSH D CALL EXPR1 XCHG LHLD POINT DCX H MOV A,M CPI ')' JNZ SYERR RET TSTVR:CALL NONUM CALL FNDVR XCHG MOV A,M INX H MOV L,M MOV H,A LDAX D INX D JMP CHEK1 ADDR:CALL NONUM INX H CALL FNDVR MOV A,M CPI ']' JNZ SYNTX INX H MOV A,M INX H JMP CHEK1+1 NONUM:DCX H XCHG LHLD POINT MOV A,D CMP H JNZ SYERR MOV A,E CMP L JNZ SYERR RET FNDVR:MOV A,M CPI 'A' JC SYERR CPI 'Z'+1 JNC SYERR MOV B,A INX H MOV A,M XCHG CPI '(' JZ ARRAY LXI H,VARRS-82H MOV A,B ADD A MOV C,A MVI B,0 DAD B XCHG RET ARRAY:LXI H,0 SHLD RUNTO INX H SHLD V1 LXI H,ARRTB-82H MOV A,B ADD A MOV C,A MVI B,0 DAD B MOV A, JMP SYERR DON47:CPI ')' JNZ SYERR LHLD RUNTO DAD H POP B DAD B XCHG RET IDIV:MOV A,D XRA H ANI 80H PUSH PSW MOV A,H ORA A CM NEGHL XCHG MOV A,H ORA A CM NEGHL XCHG CALL DIV POP PSW RZ JMP NEGHL DIV:SHLD TEMP LXI H,BNUM MVI M,17 LXI B,0 PUSH B ORA A LOOP2:MOV A,E RAL MOV E,A MOV A,D RAL MOV D,A DCR M POP H XCHG RZ XCHG MVI A,0 ADC A DAD H MOV B,H ADD L LHLD TEMP SUB L MOV C,A MOV A,B SBB H MOV B,A PUSH B JNSH H PUSH PSW MOV H,D MOV L,E CALL IMUL XCHG POP PSW POP H CC IMUL POP B JMP PLOOP IAND:MOV A,D ANA H MOV H,A MOV A,E ANA L MOV L,A RET IOR:MOV A,D ORA H MOV H,A MOV A,E ORA L MOV L,A RET IXOR:MOV A,D XRA H MOV H,A MOV A,E XRA L MOV L,A RET IEQ:RNZ DCX H RET INE:RZ DCX H RET ILT:RC RZ DCX H RET IGT:RNC DCX H RET ILE:RC DCX H RET IGE:DCX H RC RZ INX H RET PEEK:XCHG MOV L,M MVI H,0 RET NOT:XCHG JMP FLIP ABS:MOV A,D ORA A XCHG RP JMP NEGHL INP:MOVMVI C,104 FL0LP:MOV M,B INX H DCR C JNZ FL0LP RET ADDAH:ADD L MOV L,A RNC INR H RET RND:LHLD SEED MVI B,11H MOV A,L RND1:ANI 2DH JPO RSKIP CMC RSKIP:MOV A,H RAR MOV H,A MOV A,L RAR MOV L,A DCR B JNZ RND1 SHLD SEED INX H XCHG CALL IMOD INX H RET VALUS:DB 5,5,5,5 DB 5,5,10,10 DB 15,15,16,15,3 DB 2,2 ;============= END OF EXPRESSION EVALUATOR FNDNM:CALL EXPR FNDN1:SHLD SAVE MVI B,0 LXI H,LINES SHLD OLDLN FLOOP:LHLD OLDLN MOV A,M ORA A JZ NOCAR INX H MOV A,M IRT XREAD: MVI B,0 PIKUP:CALL CHIN CPI 3 JZ STOP CPI 95 JZ BACK CPI 13 JZ DONE CPI 32 JC PIKUP MOV C,A MOV A,B INR A CPI 96 JZ PIKUP MOV M,C INX H INR B MOV A,C CALL CHOUT JMP PIKUP BACK:MOV C,B DCR C JM PIKUP DCR B DCX H CALL CHOUT JMP PIKUP DONE:MOV M,A JMP CHOUT READN:LXI H,INBF1 CALL XREAD LXI H,INBF1-1 LXI B,INBUF CHGLP:INX H MOV A,M CPI '0' JC NXTCH CPI '9' JC COPY NXTCH:CPI 13 JZ RETRN CPI ' ' JZ CHGLP SHLD SAVE LXI D,COMMS FDLP1:M INX H MOV H,M MOV L,A ORA H JZ UNDIF MOV A,M STA COUNT XCHG INX H INX D PUSH D ARRLP:CALL EXPR1 MOV A,H ORA A JM SUBER XCHG POP H MOV C,M INX H MOV B,M INX H PUSH H MOV A,B CMP D JC SUBER JNZ SKP47 MOV A,C CMP E JC SUBER SKP47:PUSH B LHLD V1 CALL IMUL XCHG LHLD RUNTO DAD D SHLD RUNTO POP D INX D LHLD V1 CALL IMUL SHLD V1 LHLD POINT DCX H MOV A,M INX H XCHG LXI H,COUNT DCR M JZ DON47 XCHG CPI 88H JZ ARRLP C SKIP DAD B XTHL SKIP:LXI H,BNUM CMC JMP LOOP2 TEMP:DS 2 BNUM:DS 1 IMOD:CALL IDIV XCHG RET IMUL:MOV B,H MOV C,L ORA A LXI H,0 MULP:MOV A,B RAR MOV B,A MOV A,C RAR MOV C,A JNC MSKIP DAD D MSKIP:XCHG DAD H XCHG ORA B RZ JMP MULP IADD:DAD D RET ISUB:MOV A,E SUB L MOV L,A MOV A,D SBB H MOV H,A RET EXPON:MOV B,L LXI H,0 MOV A,D ORA E RZ MOV A,B INX H ORA A RZ RAR MOV B,A JNC PLOOP MOV H,D MOV L,E PLOOP:MOV A,B ORA A RZ RAR MOV B,A PUSH B PU A,E STA INPPL DB 0DBH INPPL:DS 1 MOV L,A MVI H,0 RET SGN:LXI H,-1 MOV A,D ORA A RM INX H ORA E RZ INX H RET CALL:INX H LXI D,RETAD PUSH D CLLOP:CALL EXPR1 PUSH H CALL CCOMM JZ CLLOP CPI ')' JNZ SYERR RET CCOMM:LHLD POINT DCX H MOV A,M INX H CPI 88H RET NEGHL:DCX H FLIP:MOV A,H CMA MOV H,A MOV A,L CMA MOV L,A RET FREE:MOV A,D ORA A LHLD END JM FREE1 LXI D,STACK JMP ISUB FREE1:XCHG LXI H,LINES JMP ISUB FILL0:LXI H,LINES+300H SHLD LSTAR LXI H,VARRS MVI B,0 NX H MOV E,M LHLD SAVE CMP H JC GBACK JNZ NOCAR MOV A,E CMP L JC GBACK JNZ NOCAR LHLD OLDLN STC RET GBACK:LHLD OLDLN CALL NEWPL SHLD OLDLN JMP FLOOP NOCAR:LHLD OLDLN ORA A RET LEGAL:SHLD SAVE XCHG LXI H,0 LP95:LDAX D CPI 30H JC DONE5 CPI 3AH JNC DONE5 INX D SUI 30H MOV B,H MOV C,L DAD H DAD H DAD B DAD H JC SYERR MOV C,A MVI B,0 DAD B JC SYERR JMP LP95 DONE5:XCHG MOV A,D ORA E JZ EXIT1 SHLD SAVE1 LHLD SAVE RET EXIT1:POP H LHLD SAVE CALL EXEC JMP STALHLD SAVE LDAX D CMP M INX D INX H JZ FDLP1+3 CPI 255 JZ COPY1 ORA A JP AHEAD DCX H DCX H CPI 95H JNZ COPY STAX B INX B INX H QLOOP:MOV A,M CPI 0DH JZ SYERR STAX B INX B INX H CPI '"' JNZ QLOOP DCX H DCX B MVI A,95H JMP COPY AHEAD:LDAX D INX D ORA A JP AHEAD JMP FDLP1 COPY1:LHLD SAVE MOV A,M COPY:STAX B INX B JMP CHGLP RETRN:MOV H,B MOV L,C MVI M,13 INX H INX H LXI B,INBUF MOV A,L SUB C STA COUNT MOV H,B MOV L,C RET ;OOOOOOOOOOOOOO INSRT:CALL LEGAL LHLD SAVE1 MOV A,M CPI 13 JZ DELLN PUSH D XCHG CALL FNDN1 JNC NXT3 CALL NEWPL CALL MOVUP NXT3:LXI D,INBUF LHLD SAVE1 XCHG CALL ISUB LDA COUNT SUB L INR A INR A STA COUNT LHLD OLDLN XCHG LHLD END MOV A,E CMA MOV E,A MOV A,D CMA MOV D,A INX D DAD D MOV B,H MOV C,L LHLD END LDA COUNT CALL NEWP1 CALL MOVDN LHLD OLDLN LDA COUNT MOV M,A INX H POP D MOV M,D INX H MOV M,E INX H XCHG LHLD SAVE1 XCHG SUI 3 MOV B,A PUTLP:LDAX D MOV M,A INX D INX HLN LXI D,INBF1 CALL CONV1 LXI H,INBF1 CALL MESAG JMP START MESAG:MOV A,M ORA A RZ CALL CHOUT INX H JMP MESAG DISKM:DB 'DISK',0 ROMMG:DB 'NO ROOM',0 SUBRM:DB 'SUBSCRIPT OUT OF RANGE',0 UNDFM:DB 'UNDEFINED ARRAY',0 REDOM:DB 'REDO FROM START',0 STAKM:DB 'STACK',0 LINEM:DB 'LINE NUMBER',0 DIMER:DB 'DIMENSION',0 OVEMG:DB 'MEMORY OVERFLOW',0 SYNTX:DB 'SYNTAX',0 ERRM:DB ' ERROR',0 INLNM:DB ' IN LINE ',0 READY:DB 'READY',13,0 STOPM:DB 'STOP',0 CHIN:MVI A,0 STA 0EDFDH CALL DOS+10H C RZ DCX B JMP MOVDN+3 END:DW LINES NEWPL:MOV A,M NEWP1:ADD L MOV E,A MVI A,0 ADC H MOV D,A XCHG RET ;IIIIIIIIIIII THE END IS NEAR LOAD:CALL OPENR LXI H,LINES LOADN:CALL BYTI MOV M,A ORA A JZ LDDUN INX H DCR A MOV B,A LODLP:CALL BYTI MOV M,A INX H DCR B JNZ LODLP JMP LOADN LDDUN:SHLD END JMP START PSAVE:CALL OPENW LXI H,LINES SAVLP:MOV A,M CALL BYTO INX H ORA A JZ SVDUN MOV B,A DCR B SAVL1:MOV A,M INX H CALL BYTO DCR B JNZ SAVL1 JMP SAVLP SVDUN:CALL CLOSEWRFIL CALL GTNAM SHLD ISIZE XCHG SHLD DIADR STA IUNIT MVI A,-1 STA ICNTR RET OPENW:LXI H,WRFIL CALL GTNAM SHLD OSIZE SHLD OSIZ1 XCHG SHLD DOADR STA OUNIT XRA A LXI H,OCNTR MOV M,A INX H MOV A,M INX H MOV M,A RET INPM:DB 'INPUT' DB 0DH OUTM:DB 'OUTPUT' DB 0DH ROOMM:DB 'NO ROOM' DB 0DH DISKM:DB 'DISK ERROR' DB 0DH XPNTR:DS 2 DOADR:DS 2 DOAD1:DS 2 OCNTR:DB 0 FTYPE:DS 1 OTYPE:DS 1 OSIZ1:DS 2 OSIZE:DS 2 OUNIT:DS 1 IUNIT:DS 1 DIADR:DS 2 DIAD1:DS 2 ICNTR:DB 0FFH IO MORE TO READ DCX H SHLD ISIZE LHLD DIADR INX H SHLD DIADR DCX H LXI D,IBUFR PUSH B LDA IUNIT MVI B,1 CMDSK:MOV C,A MVI A,1 CALL DSKOM POP B JC DSKER RET ; ;READ A BYTE FROM DISK ; BYTI:PUSH D PUSH H LXI H,ICNTR MOV A,M INR A MOV M,A PUSH PSW CZ IMORE LXI H,IBUFR POP PSW CALL ADDAH MOV A,M POP H POP D RET FOPEN:EQU $ FLOK1:CALL CRLF CALL PRITN XRA A DCR A STA FTYPE XCHG SHLD XPNTR FLOK2:LHLD XPNTR GTNAM:SHLD XPNTR MVI A,1 STA FTYPE CALL DLOOK STA UNIT DCR B JNZ PUTLP RET DELLN:XCHG CALL FNDN1 JNC STRT1 CALL NEWPL CALL MOVUP JMP STRT1 LNERR:LXI H,LINEM JMP PERR STOP:LXI H,STOPM CALL MESAG JMP PRLNM MEMOV:LXI H,OVEMG JMP PERR STERR:LXI H,STAKM JMP PERR UNDIF:LXI H,UNDFM JMP PERR SUBER:LXI H,SUBRM JMP PERR DMERR:LXI H,DIMER JMP PERR NORM1:LXI H,ROMMG JMP PERR DSKER:LXI H,DISKM JMP PERR SYERR:LXI H,SYNTX PERR:CALL MESAG LXI H,ERRM CALL MESAG PRLNM:LHLD WKLN MOV A,H ORA L JZ START LXI H,INLNM CALL MESAG LHLD WKPI 3 RNZ CALL CRLF JMP STOP CRLF:MVI A,13 CHOUT:CALL CHT1 PUSH H LXI H,CNTR5 INR M PUSH PSW MOV A,M ANI 63 MOV M,A POP PSW POP H CPI 13 RNZ XRA A STA CNTR5 MVI A,10 CO: CHT1:PUSH B MOV B,A MVI A,0 CALL DOS+0DH POP B RET MOVUP:MOV B,D MOV C,E XCHG LHLD END XCHG DCX B DCX H MUPLP:INX B INX H MOV A,M STAX B MOV A,E CMP L JNZ MUPLP MOV A,D CMP H JNZ MUPLP MOV H,B MOV L,C SHLD END RET MOVDN:SHLD END LDAX D MOV M,A DCX D DCX H MOV A,B ORA C JMP START ;IIIIIIIIIIII THE END IS NEAR ;NORTH STAR DISK FILE ROUTINE ; ;MAINTAINS SECTOR BUFFERS FOR INPQT AND OUTPUT ;CALL OPENR TO OPEN A FILE FOR READ ;CALL OPENW TO OPEN FILE FOR WRITE ;CALL BYTI TO READ A BYTE ;CALL BYTO TO WRITE A BYTE ;AFTER COMPLETION OF WRITING CALL CLOSE ;TO FLUSH WRITE BUFFER ; DOS:EQU 2000H CI:EQU DOS+10H COB:EQU DOS+0DH CNTLC:EQU DOS+16H DWRIT:EQU DOS+1FH DSKOM:EQU DOS+22H DLOOK:EQU DOS+1CH WARM:EQU DOS+28H RUB:EQU 7FH DSTK:EQU DOS+5AH OPENR:LXI H,SIZE:DS 2 UNIT:DB 0 DXADR:DW 0 DPNTR:DW 0 ; ;WRITE A BYTE TO DISK ; COX:CALL CO BYTO:PUSH PSW PUSH D PUSH H MOV E,A LXI H,OCNTR PUSH H MOV A,M MOV D,A LXI H,OBUFR CALL ADDAH MOV M,E POP H INR D MOV M,D CZ OMORE POP H POP D POP PSW RET OMORE:LHLD OSIZE ;REFRESH OUTPUT BUFFER MOV A,H ORA L JZ NOROM DCX H SHLD OSIZE LHLD DOADR INX H SHLD DOADR DCX H LXI D,OBUFR PUSH B LDA OUNIT MVI B,0 JMP CMDSK IMORE:LHLD ISIZE ;REFRESH INPQT BUFFER MOV A,H ORA L JZ NOROM ;N JC DERR MOV E,M INX H MOV D,M INX H LHIN1:MOV A,M INX H MOV H,M MOV L,A LDA UNIT RET NOROM:EQU NORM1 DERR:MVI A,'?' CALL CO CALL CI CALL CO SUI '#' STA FTYPE JZ FNEW JMP START FNEW:SHLD DXADR LXI D,-1 XCHG LDA UNIT RET CLOSE:LXI B,0FFH ;CLOSE FILE,FLUSH OUTPUT BUFFER CLOSP:MOV A,C CALL BYTO DCR B JNZ CLOSP LDA OTYPE ORA A RNZ LHLD OSIZE ;NEW FILE,CREATE DIRECTORY ENTRY XCHG LHLD OSIZ1 MOV A,L SUB E MOV L,A MOV A,H SBB D MOV H,A SHLD OSIZE LXI H,BLANX LDA OUNIT CALL DLOOK JC NOROM XCHG LHLD DXADR XCHG MOV M,E INX H MOV M,D INX H XCHG LHLD OSIZE XCHG MOV M,E INX H MOV M,D INX H MVI M,0 LXI B,-12 DAD B XCHG LXI H,OFILE MOVLP:MOV A,M CPI 30H JC DWRIT STAX D INX D INX H JMP MOVLP BLANX:DB 0DH,' ' DB 0DH PRITN:MOV A,M CALL CO INX H CPI 0DH JNZ PRITN JMP CRLF IBUFR:DS 256 OBUFR:DS 256 FUNCS:DW CALL,NOT DW PEEK,INP DW RND,SGN DW ABS,FREE CNTR5:DS 1 PCHEK:DS 1 SEED:DW 100H STEP:DS 2 CNTR9:DS 1 RUNTO:DS 2 V1:DS 'TO' DB 85H DB 'NEXT' DB 86H DB 'STEP' DB 87H DB ',' DB 88H DB 'GOTO' DB 89H DB 'GOSUB' DB 8AH DB 'LET' DB 8BH DB 'END' DB 8CH DB 'STOP' DB 8DH DB ':' DB 8EH DB 'OUT' DB 8FH DB 'POKE' DB 90H DB 'INPUT' DB 91H DB '?' DB 92H DB 'PRINT' DB 92H DB 'READ' DB 93H DB 'WRITE' DB 94H DB '"' DB 95H DB 'DIM' DB 96H DB 'REM' DB 97H DB 'OPEN' DB 98H DB 'CLOSE' DB 99H DB 3CH,3EH,0A0H DB 3CH,3DH,0A1H DB 3EH,3DH,0A2H DB 3DH,0A3H DB 3CH,0A4H,3EH,0A5H DB 2BH,0A6HFOR DW SYERR DW FNEXT DW SYERR DW SYERR DW GOTO DW GOSUB DW LET DW START DW STOP DW SYERR DW OUT DW POKE DW INPUT DW PRINT DW READ DW WRITE DW SYERR DW DIM DW REM DW OPEN DW CLOSF LINES:DB 0 :DW IF DW SYERR DW SYERR DW RTRN8 DW 18><2*2!s:l@2,!,8!" *+"#1,h!e~6A#F6S#N6MO!\wUU:,@U!6H#6E#6XxO2>2by2G-2cy!w+ywʳ!6P#6R#6N͙!'UôJ<'''_!~W!-!sz<w1 /:=2}-E×!!vä :G-k:x_!!~W!!sz<w̆E!Y~<wZ!!~ > hE:xh s::*J-*#P"!~4###~G*w#"!~!"*+ 2 LSTAR:DS 2 SAVE3:DS 2 SAVE:DS 2 SAVE1:DS 2 OLDLN:DS 2 NEWLN:DS 2 LSTCH:DS 2 POINT:DS 2 NXTLN:DS 2 WKLN:DS 2 LPLVL:DW 0 SBLVL:DB 0 ENDPT:DS 2 LIMIT:DS 2 SNUM:DS 2 LVAR:DS 2 VARRS:DS 52 ARRTB:DS 52 IFILE: OFILE: INBUF:DS 96 INBF1:DS 5 WRFIL:DS 91 WKLST:DW LIST,AUTO DW DELET,EDIT DW RUN,SRTCH DW DOS+28H,LOAD DW PSAVE ;XXXXXXXXXXXXXXXXXXX THIS IS THE TABLE OF COMMANDS COMMS:DB 'IF' DB 80H DB 'THEN' DB 81H DB 'ELSE' DB 82H DB 'RETURN' DB 83H DB 'FOR' DB 84H DB,2DH,0A7H DB 2AH,0A8H,2FH,0A9H DB 5EH,0AAH DB 'MOD' DB 171 DB 'AND' DB 172 DB 'XRA' DB 173 DB 'OR' DB 174 DB 'CALL' DB 175 DB 'NOT' DB 176 DB 'PEEK' DB 177 DB 'INP' DB 178 DB 'RND' DB 179 DB 'SGN' DB 180 DB 'ABS' DB 181 DB 'FREE' DB 182 DB 'LIST' DB 0F0H DB 'AUTO' DB 0F1H DB 'DEL' DB 0F2H DB 'EDIT' DB 0F3H DB 'RUN' DB 0F4H DB 'SCR' DB 0F5H DB 'BYE' DB 0F6H DB 'LOAD' DB 0F7H DB 'SAVE' DB 0F8H DB 255 COUNT:DS 1 CTABL:DW IF DW SYERR DW SYERR DW RTRN8 DW '@> ~# Xq#ay!~@#ͯ>:ͯ> 22-s>?ͯ! ."yhh2>2YMAKRO ASSEMBLER AMA.3 q#|}!X*#~+ .:~##O~#!6A#6S#6M#6"~#fo(:f!K-4ͬ>:hx7 Sz7{7-pä!-}!v-6 #s* ͹ * ͹ f>ͯy_:b :*=2*:- : !v-:~# > :/r#s#6>:h~O~#7G qx/<7> h> h@Ɛ'@'h{:-2-6|} :-xïy k xk*+-:M-O͝go…©# x G! ))))?؅oô0 !+-FX#FX!+-Gw#xw0:F> k#A- !- 4>Ʌo$y!I>6!C>ä!Hv7 DISK ERRORS }o|gx#"N-~$[.[0:[A[[*N-~ #"N-ÅK 2-͎ W –*P-!."!"#"]%"-"A-"C-*]%"P-2L-*A-"J-1,*J-". :-  ")-:L- ͆ 2, ͺ :- & :, & ͂ & ;; l! .2-   ` ? ; w#.w#q M !: ;+ Ÿ E!-?ʃ <ʓ ʟ w#n *} ) #n &n !- p#p# ; ! ; w#Ҷ !- ; w# +#+6 -{z 6;# >X2-ͣ2b>2&Bͼ!."D*D~ "Dz#O  !*5Oz  O͉ Õ*-  !*4!-~6 D*-p#p#që:~h#-:{h:L-*J-#*B|s+r**͂ >_"@>}>G">O"}TT}J b͔>Gv"}2*ͨj%}J:*H}@ͨ06ڨ"j%}""}{}@oz"} g@ʲ"l@}TWT"}o")))j%}Wͨv"j%}"e"j%<}"}ڿҮͨ>!_>6"j%}"j%}"}"͔">o)))_*N-~,#"N-{:*<2*}eXLDAX PUSHPOPINXDCX DAD INRDCRMOV@ADDADCSUBSBBANAXRAORACMPRSTADIACISUISBIANIXRIORICPIINOUTMVIJMPCALLLXILDA:STA2SHLD"LHLD*LDDRLDDLDIRLDINEGDRLDoRRDgSBCDCSDEDSSSPDsLSPD{LBCDKLDED[XTIXPCIXSPIXXTIYPCIYSPIYSIXD"LIXD*SIYD"LIYD*BIT@RESSTBSLCRLRRSRCSRA.SLA&SLS6SRL>CADJSBCBCOUTACIN@DJNZIMVJR PO PE(P0M8NZZNCC*+-ʘH͝Æ<"j%>"">ñ>">ÿ>" ͂:L-~ j%|'ͩ}>F"}-2*:- !5-"+-$b͆m>2, ͆ʛ͆ʛ͆S͆!"͆!&V͆!6V͆!V͆!P͆͆ʛ͆ʢ͆ʯ͆ʸ͆ʽ͆͆n͆ʧ͆͆͆=͆͆%mWOW:5-ORzSyJCbz!2W-5-{_zWb:W-!$h!5-"+-2,  : ~͸M *J- "J-~Nb##~Ib#~F$!!:-~e:L-N c A[?Y!5-"+-£k͆¸o&¯|×ʗ*ͬgE+|<2R-> 2M-ͅ!R-5~2_&+"B#7?ɋ...*###"j%:- ; |͂#"N-j%|% <*J-{#"J-? y* G:L-:xì͂b(, c7+ʋ('"#$I %] & !ʽʤ ʓdnʰzQZl   ) 5 ʹʰʰ ʉ 2 q ڞ  j%, ͂~ ;,#"N- Dj%:- ; "J-:- Ï j%**s+r+:_%w+"***#~#2_%V#^"*bk:- " Ï j%"}  $:-PDw j%DM:- ; [j%:L-!J-^#V& ##"X- !-"N-~ ;*J-~ w+" ~s+^r#W" !"-#~#!+6 #6"* ,P!&säOUT OF MEMORY ! ."T]X* * ~#D" *͙ q#[:c2G-g; :ʠ* *~ ͼ͂ ʲ;ʲ:*I>:h7j%|7}7-:*Ià!K-4ͬ25j%:- ͂"z * M ͎w+ ##w}~ͯy}>ͯj%:- ; *-r#s#:L-:_%8 w& * {Gz:L-+>P2-j%DMx x"" G"!͂"N-'X͂~ ;,#"N-q:-  j%:- *J-"J-}_|W*C-"C->"ͨj%}pv"}"j%x}>W"{"j%:_%}Tz!_%f$&o|2:L-}*J-#"J-o:}Ĭ*X-#"X-!- ~<w!6-"+-ÆNCLUDbMLASTcFILL,ABSNT+XPAND"NOEXP#APUSH$APOP%SETQ&PAGE'TITLE(LIBRY!EXTRNENTRY LINKINPUTCOMPSLISTNOLSTIFDEFIFNEGIFNEIFEQUSRREPTREPNDIFGZIFGNZGOTOLOCAL LOCND MACRO USE NIFIFORGSET EQUDBDSDWENDCPDRCPDCPIICPIRINDRINDINIRINIRETIMRETNEOUTDROUTDOUTIROUTIHLTvRLCRRCRALRARRETCMA/STC7DAA'CMC?EXXEXEIDINOPXCHGXTHLSPHLPCHLSTA'!*N-; ';~$#+"N-`͂<&, ~#L3#>+~;j%}`j%}͂;$#"N-͂ͣ qͣ y qͣ#ʊ :~q!qͬ .j%}ÿj%|:L-; !6!5-"+-. :-   !-"N-~Y͆͆!4!5NIFIFENDIF!7-"+-~>=y͆e ":L-"j%*P++|}f$""ͩ})))2*}ڝͨj%}":*":*"ͩ}ͨͩ}"""ͩ}@ͩ})))"*P-"!"P-!."**P-"P-*""**DM*~#yx:P*P" Y"<ABCDEHLMSPIXIYIVRFXHYHXLYLPSW2_&!"U-%"B*N-+ 2S-#~ ʵ"N-(2S-O:V-y@o%$#"N->2_&*5#"N-*$5'%#"N-~ '#"N-~'6 S_0:A͍*N-+2V-õ5:V-*T-|W-! 0?)))_d! 0?)o|Y5-HO]BwD«! T])))0 ?_îñj%>R2-!>SW>U2-Â":- >V:- >M2-z :- >A>O2-" >L!-~S9#~EA#~P!"-+ >D*)#") *`~#"`#"N-*^5*b"`!^4+5͊#| ͊#"`͊#"#͊#"b͊#"/͊#"]*]O#*/O#j%&"]*bO#!84L%"bO#NRPEͣ w#FF9FD6 5#"#*`O#!O#*b"`!d"/*]|ÉFT!84ͣ w#͂ #"N-#'!w ww# f6 :2:> > > !:,* *~4:8*$$"#"#!!,"*!."!"#"-**"C-:L-,!'U͙! *" *tsàUNEXPECTED END READ/WRITE ERR {2$#*$O#*/O#*#O#! 4L%"#O# $"#!O#!l!"/: =m *#~#"#͊#+| ͊#"#͊#"#͊#"/͊#"$! 5.l!OPERATION STACK ERROR !*#+#~$%&%,&%#%%6#:$w#H%,H%H%6#3%%*#*#{z"#'!!"!!"T-"_%^'!c&"c%"g%^'!^'͂(%<%+%-ʳ%(%"%!^'!&'^'! ^'*N-#"N-͈&"T-p&*g%+~*!+%&m'"a%!%m'm'"T-%^'*g%^'*_&^'%bk"N-#F#N#~>G&&#~>G&:&*&#~>G& :&+#F~# J&x<*N-~&:_&2_%*T-W2`&!c&"c%"g%|/g}/o͂<&(&"&) ;;&͝2a&;&&!)( ### & #"N-p%͂)#"N-͂ó&#"N-͈&&&#^#V"c%Y,͂1,r)!:,6A#6S#6M!=,w# #)2,2,2=,2Q,*/"/,!b)"/>F2-*/,"/2,)U)U)D6:ƒ)@w# ͪ)ʸ)ڟ)w#‡)ͪ)ʸ)Җ)>Gq#ã).![?Бͣ)ͪ)ڣ)w#½):,<)2,!Y,!~Y,1,><2*:G-y> ͯ!v:*F̼:G->2G-*)a!Hvy2G-ͬ6͉ͪ!͝H(6*]%*P-"-!."-*]%*P-P"-*-"-͂*P-"]%"-*-ï SYMBOL TABLE *N- D *N-#~'#"N-+":L-; !-o!{-"X-!-6 ~'# ~ ' Î,.w#[ >,2 ͂,? #~2 #"#"#! 4*#*r#s#6M$$"#"$AM Cͣ w#[ d  d  d  Nd  Dd *$~ Ҟ #6$*#*#: w+ʯ w+¯ "#!! !!s~+2 2e$"#͂"# ,$!~#[̵$$!  !!L#*M#r+s+"M#!!{z>2>2j >2]!>2>2j >2]!*M##^#V"M# ; ! .")-. !- DAM~#ʞ#°#~#µ#NNC³#~°#*##"#+*} #*#) $///*#*$"$~+c$##?1$9$"$$~@#>?P$!$<4+5 $*$$$*#}| ,~p$:$<+_*#ʋ$~#[̵$w${$+~<ʪ$~[$ʦ$ʦ$#Ò$$&Ò$~#]µ$~##~#]ʒ$$.]ʒ$$2$ ,*#~ ~#$$+"#F!$4"g%O+~2`&y#/#"N- :a%!_&w :a%!_&wP|g}oɷxGyO'DMA'T'`i*!s#r#"!*!+V+^"! DM!yʈ'A')x' z''|"e%!c%6{_zW5>)D*e%OxG' !c%?ï'')'!|g}o ͕'|g}o( (7?$'@%"(0:?A[?+'-&'*|'/'>J'<'&:'^'!'\':T(:G-ͪ+ͯDM*-"N-*N-T]> !"N-#s(ږ( *N-Nq#„(>2W-Ͱe(:W-x2W-H(*-DM*- ~¼(> GX#´(V~#~S#~SV#Ͱ²((͐ð( X X:,O) 'q>2>2>2>2>2>2>2_R!!*~4Bw͢ !/"-!1*8#" ʖ~ Һ!$_^#V? Ó`i5|*6"8ÄÄ"^+~ #~"8*6"8! ~ʄ; aʽ 3 0:ͻ 2#~#ng#~y> F!3"!#~Z W*!#~#~n>  #I!"!5̈́  5""+!| ? *+*"+ã>02}0>/<"! !*!2 #~$ʴ ~ #5r#s*++5*++~# {h ~#h95̈́ 5M{y*++1 < ~ ,": "<r#s,"6!+DM*6*: `i͆ |!#"6*-"-*6*<bÚ "4x y x V#^ s+r"<+"6|#1 = *4~#+bÚú5~ #5}o& ҷ s#r!_r#^#Vzx2y5 ҷ 3 <*-"-*1!"1++bͦh*/| !35 ##| "1"-5z x"~#~#>?> 0- : 0))))O  G- A- 7 G[ (o )d k k k ҃ ֟G! = N: -*++~) #~#. ֯GO y! ^#Vxo ~( #r -*++~) ~#ng- # ~]—#~#. +*+z { ~A [ G#~( !xO !"#"!xO ~#fo ~2#-| N#F#x H y * *"* "*++~#!5y , ) *) z| | ͟ Í "!6ŷ{_zW5>)D*OxG !?ì ͆ DM!xGyO ) {ozgE!zx) #~ #" + >)  *!~ `i6 ##}2`i; *#~ ʧ Y *# :<<2*%*8{/_z/WDM*8: *%:w#r#s#*#Gw#ž ғ Ó!q ! ! !k !K !4 !} !, !& !!*/|ʄ!*/!Ä~#DISK NO ROOMSUBSCRIPT OUT OF RANGEUNDEFINED ARRAYREDO FROM STARTSTACKLINE NUMBERDIMENSIONMEMORY OVERFLOWSYNTAX ERROR IN LINE READY STOP>Oý > !4 2> @BK*8 +#~{z`i"8"8! "*++~ 2 # ' *Óғ* Ó͢ *~ʄ "-#V#^#"/h*-Haʽ :S~ʠ# ր ~#fo~# h ~ ~$5*++~  #~ ü#G#~# ʬ! "> ͅ2|4͍ >-ͅ/iiii}0ͅ:G*}! P/"!k*!:„x02x*w#6"5 ҷ H#~ #5s#~ #~#$ Gw#6DM4~( #-~)  ![*2~$U ~7:<25~:J=2ʇ7#!6DM q4dʎʎ sÎ#r#s~ # ~A [ G#~( #!"!x ~# *w-| s#r#* "*++~#*4) *)p#z *DMp+q"*+~#ʞ+#>292"+!#! *+"+`i"!}`F|ŷʵҵ!o>gN#Fzʎ|}!9 C F 6 < @ ! / ( !$*!DMT*++*!|F"+!# 0- :- 0DM)) )O#G bkxGbk zg{ozg{ozg{o++++++#n&Î zÍ Kxo&!z###r -̈́ t ) *++~#+|/g}/oz** 23go"/"1*8#"!>yp# ½ Ʌo$*}- ?|g}o "# # 5"!*"%*%~6 #~#^*!* 6 {* 6 *%7*% "% *%"!!0c :c 0DM)) ) O B zp "#*!*!hÄͻʽ _ʯ ʯ ʯ ʾ | Ox<`| q#y| H | +>| w!z !#~0 9) . "!4*!# %  ++w+x ~_>Wo P K [ d T  B IFTHENELSERETURNFORTONEXTSTEP,GOTOGOSUBLETENDSTOP:OUTONINPUT?PRINT"DIMREMCLEARRETIDIEIDELAY<><=>==<>+-*/^MODANDXRAORCALLNOT@INPRNDSGNABSFREELISTAUTODELRUNNEWBYELOADSAVE! _  m D(  33_ZENTRY:EQU 5 ;CI:EQU DOS+10H ;COB:EQU DOS+0DH ;DWRIT:EQU DOS+1FH ;DSKOM:EQU DOS+22H ;DLOOK:EQU DOS+1CH WARM:EQU 0 RUB:EQU 7FH BAXCHAR:EQU 8 SECTR:EQU 128 JMP FIRST ; DOSCO:PUSH PSW PUSH B PUSH D PUSH H MOV E,A MVI C,6 CALL ENTRY POP H POP D POP B POP PSW RET DOSCI:PUSH B PUSH D PUSH H CILOOP:MVI C,6 MVI E,0FFH CALL ENTRY ORA A JZ CILOOP POP H POP D POP B RET CNTLC:PUSH B PUSH D PUSH H MVI C,6 MVI E,0FFH CALL ENTRY POP H POP D POP B CPI 3 RET FIRST: CALL FILL0 S CHOUT INX D CMP B JNZ PRLP2 CALL CNTLC JZ STOP CPI 13 JZ NXT6 CPI 20H JZ NXT5 LDA CHOIC ORA A JZ NXT4 NXT5:CALL CHIN NXT6:SUI 13 STA CHOIC JMP NXT4 CONVT:LXI D,INBUF INX H MOV A,M INX H PUSH H MOV L,M MOV H,A CALL CONV1 POP H INX H CONLP:MOV A,M ORA A JP DMOVE MVI A,32 STAX D INX D PUSH H MOV B,M LXI H,COMMS-1 FDLP6:SHLD SAVE INX H MOV A,M ORA A JP FDLP6+3 CPI 255 JZ SYERR CMP B JNZ FDLP6 LHLD SAVE INX H MOV A CALL SDIG LXI B,-1000 CALL SDIG LXI B,-100 CALL SDIG LXI B,-10 CALL SDIG MOV A,L ADI 30H STAX D INX D XRA A STAX D RET SDIG:MVI A,2FH INR A SHLD SAVE DAD B JC SDIG+2 LXI H,TELL CMP M LHLD SAVE RZ STAX D INX D XRA A STA TELL RET DELETE:LXI H,INBUF+1 CALL FNDNM SHLD LINE LHLD POINT DCX H MOV A,M PUSH PSW CPI 13 JZ ONELN POP PSW CPI 88H JNZ SYERR INX H CALL FNDNM JNC NXT50 CALL NEWPL NXT50:XCHG LHLD LINE XCHG JZ STOP LXI B,RTAD1 PUSH B MOV A,M ORA A JP LET INX H CPI 0A0H JNC SYERR LXI D,CTABL XCHG SUI 80H ADD A CALL ADDAH MOV A,M INX H MOV H,M MOV L,A PUSH H XCHG RET RTAD1:MOV A,M INX H CPI 13 RZ CPI 82H RZ CPI 8EH JZ EXEC JMP SYERR REM:POP H RET PRINT:MOV A,M CPI 13 JZ CRLF CPI 8EH JZ CRLF CPI 88H JZ HERE PRLP:MOV A,M CPI 95H JZ QUOTE CALL EXPR CALL PRIHL LHLD POINT DCX H MOV A,M CPI 0DH JZ CRLF CPI 82H JZ CRLF CPI 8EMOV B,A LHLD CHAR MOV A,L SUI NUMBF&255+64 CMA CMP B CC CRLF LXI H,NUMBF JMP MESAG PDIGT:MVI B,47 SHLD SAVE INR B DAD D JC PDIGT+2 LHLD SAVE LDA CHOIC ORA A JNZ NXT70 MOV A,B CPI 30H RZ STA CHOIC NXT70:MOV A,B CO1:PUSH H LHLD CHAR MOV M,A INX H MVI M,0 SHLD CHAR POP H RET GOTO:CALL EXPR CALL FNDN1 JNC LNERR POP B POP B JMP RLOOP LET:CALL FNDVR MOV A,M CPI 0A3H JNZ SYERR INX H PUSH D CALL EXPR POP D XCHG MOV M,D INX H MOV M,E LHLD TART:CALL CRLF LXI H,WKLN SHLD NXTLN LXI H,0 SHLD WKLN SHLD LPLVL LXI H,READY CALL MESAG STRT1:LXI SP,STACK CALL READN CPI 2 JZ STRT1+3 MOV A,M SUI 0F0H CPI 10 JNC PTLIN ADD A LXI H,WKLST MOV E,A MVI D,0 DAD D MOV E,M INX H MOV D,M XCHG PCHL PTLIN:CALL INSRT JMP STRT1 SRTCH:LXI H,LINES MVI M,0 SHLD END JMP START LIST:LXI H,INBUF+1 CALL FNDNM NXT4:MOV A,M ORA A JZ START PRLP1:CALL CONVT MVI B,10 LXI D,INBUF PRLP2:LDAX D CALL,M MVLP6:STAX D INX D INX H MOV A,M CMP B JNZ MVLP6 MVI A,32 POP H DMOVE:STAX D INX D CPI 13 INX H JNZ CONLP RET CHOIC:DB 0 AUTO:LXI H,1 SHLD STEP LXI H,INBUF+1 CALL EXPR XCHG CALL CCOMM XCHG JNZ NXT40 PUSH H XCHG CALL EXPR SHLD STEP POP H NXT40:SHLD POINT LP56:LXI D,INBF1 CALL CONV1 LXI H,INBF1 CALL MESAG MVI B,0 CALL PIKUP CALL INSRT LHLD POINT XCHG LHLD STEP DAD D SHLD POINT JMP LP56 CONV1:MVI A,30H STA TELL LXI B,-10000 CALL MOVUP JMP STRT1 ONELN:POP PSW JNC STRT1 LHLD LINE CALL NEWPL CALL MOVUP JMP STRT1 EDIT:LXI H,INBUF+1 CALL FNDNM JNC LNERR CALL CONVT LXI D,INBUF LXI H,INBF1 MVI B,4 MVLP8:LDAX D MOV M,A INX D INX H CALL CHOUT DCR B JNZ MVLP8 RUN:CALL FILL0 LXI H,LINES RLOOP:MOV A,M ORA A JZ START PUSH H CALL ADDAH SHLD NXTLN POP H INX H MOV D,M INX H MOV E,M INX H XCHG SHLD WKLN XCHG CALL EXEC REXEC:LHLD NXTLN JMP RLOOP EXEC:CALL CNTLC H JZ CRLF CPI 88H JNZ SYERR HERE:EQU $ INX H MOV A,M CPI 0DH RZ CPI 8EH RZ JMP PRLP QUOTE:INX H MOV A,M INX H CPI 0DH JZ SYERR CPI 95H JZ PRINT CALL CHOUT JMP QUOTE+1 PRIHL:XCHG LXI H,NUMBF SHLD CHAR XCHG MVI A,32 CALL CO1 XRA A STA CHOIC MOV A,H ORA A JP NXT53 CALL NEGHL MVI A,'-' CALL CO1 NXT53:MVI C,47 LXI D,-10000 CALL PDIGT LXI D,-1000 CALL PDIGT LXI D,-100 CALL PDIGT LXI D,-10 CALL PDIGT MOV A,L ADI 30H CALL CO1 LDA CNTR5 POINT DCX H RET IF:CALL EXPR XCHG LHLD POINT DCX H MOV A,M INX H CPI 81H JNZ SYERR MOV A,E ORA D POP B JNZ EXEC ELSE:LXI B,820DH ELLOP:MOV A,M INX H CMP B JZ EXEC CMP C RZ JMP ELLOP POKE:CALL EXPR XCHG CALL CCOMM JNZ SYERR PUSH D CALL EXPR POP D XCHG MOV M,E LHLD POINT DCX H RET OUT:CALL EXPR XCHG CALL CCOMM JNZ SYERR PUSH D CALL EXPR POP D XCHG MOV A,L STA OUTPL MOV A,E DB 0D3H OUTPL:DS 1 LHLD POINT DCX H RET FOR:POP B POP B LXI B,LPLVL LDAX B INR A STAX B CALL FNDVR MOV A,M CPI 0A3H JNZ SYERR PUSH D CALL EXPR0 SHLD SNUM LDAX D CPI 85H JNZ SYERR XCHG XTHL SHLD LVAR MOV M,D INX H MOV M,E POP H CALL EXPR0 SHLD LIMIT LDAX D CPI 87H LXI H,1 CZ EXPR9 MOV B,H MOV C,L PUSH D LHLD LIMIT XCHG LHLD SNUM CALL ISUB XCHG MOV H,B MOV L,C PUSH B CALL IDIV POP B MOV A,H ORA A JP POSNM LXI H,0 POSNM:INX H SHLD LIMIT POP D LHLD NXTLN FOR2:PUSH H PUSH D JM SYERR LHLD ENDPT MOV A,M INX H CPI 88H JZ FNEXT+2 DCX H LXI B,REXEC PUSH B JMP RTAD1 DOMOR:POP D POP H JMP FOR2 GOSUB:CALL EXPR PUSH D LXI B,SBLVL LDAX B INR A STAX B CALL FNDN1 JNC LNERR XCHG LHLD NXTLN XCHG SHLD NXTLN POP B POP PSW POP PSW PUSH B PUSH D LHLD LPLVL PUSH H LXI H,0 SHLD LPLVL DCX H DCX H PUSH H JMP REXEC RTRN8:POP B POP B LHLD WKLN MOV A,H ORA L JZ STERR LXI D,SBLVL LDAX D DCR A STAX D JM STERR CNTR9 INR A STA CNTR9 INSTR:XTHL PUSH D CALL EXPR XCHG MOV A,M CPI 88H LDA CNTR9 JNZ ISTR1 DCR A STA CNTR9 ISTR1:ORA A JZ LEGL9 JM LEGL9 POP D POP D STC RET LEGL9:INX H XTHL MOV M,D INX H MOV M,E POP D POP H MOV A,M CPI 13 RZ CPI 8EH RZ INX H CPI 88H JNZ SYERR JMP DEFLP DIM:MOV A,M CPI 41H JC SYERR CPI 'Z'+1 JNC SYERR MOV B,A INX H MOV A,M CPI '(' JNZ SYERR INX H XCHG LXI H,1 SHLD RUNTO LXI H,ARRTB-82H MOV A,B ADD MOV MOV M,B DCX D INX H MOV A,D ORA E JNZ DMFIL XCHG LHLD LSTAR MOV B,H MOV C,L POP H MOV M,B DCX H MOV M,C XCHG SHLD LSTAR LHLD POINT MOV A,M INX H CPI 88H JZ DIM DCX H RET FILNM:EQU 4 OPEN:CALL LGLFL PUSH H CALL TSTFL CPI 80H JNZ DSKER XTHL INX H MOV A,M CPI 88H JNZ SYERR INX H MOV A,M CPI 95H JNZ SYERR INX H SHLD POINT CALL GTNM1 XTHL MVI M,0 INX H MOV M,A INX H MOV M,E INX H MOV M,D INX H POP D MOV M,E IH MOV M,E INX H DAD D MOV M,A DCX D MOV A,D ANI SECTR>8 CNZ WBUFF POP PSW POP D POP H RET WBUFF:LHLD WFILE DCX H MOV D,M DCX H MOV E,M MOV A,D ORA E JZ NORM1 DCX D MOV M,E INX H MOV M,D XRA A INX H MOV M,A INX H MOV M,A LXI D,-5 DAD D MOV E,M INX H MOV D,M INX D MOV M,D DCX H MOV M,E DCX D LHLD WFILE PUSH B LXI B,-5 DAD B MOV A,M MVI B,0 LHLD WFILE INX H INX H XCHG JMP CMDSK DEFWT:DCR A STAX D INR A MOV SHLD NXTLN LHLD LIMIT PUSH H PUSH B LHLD LVAR PUSH H LXI B,-1 PUSH B LXI B,REXEC PUSH B XCHG JMP RTAD1 FNEXT:POP B POP B CALL FNDVR SHLD ENDPT POP B INX B MOV A,B ORA C JNZ STERR POP B MOV A,C CMP E JNZ STERR MOV A,B CMP D JNZ STERR XCHG MOV D,M INX H MOV E,M XCHG POP B DAD B XCHG MOV M,E DCX H MOV M,D SHLD LVAR POP H DCX H SHLD LIMIT MOV A,H ORA L JNZ DOMOR NOMOR:POP B POP B LXI B,LPLVL LDAX B DCR A STAX B POP D INX D INX D MOV A,D ORA E JNZ STERR POP H SHLD LPLVL POP H SHLD NXTLN POP H PUSH B JMP RTAD1 INPUT:SHLD SAVE3 MOV A,M CPI 95H JNZ INPT1 INX H INPLP:MOV A,M INX H CPI 95H JZ INPT1 CALL CHOUT JMP INPLP INPT1:MVI A,'?' CALL CHOUT MVI A,32 CALL CHOUT PUSH H CALL READN POP H LXI D,INBUF CALL DEFVR RNC LXI H,REDOM CALL MESAG LHLD SAVE3 JMP INPUT+3 DEFVR:XRA A STA CNTR9 DEFLP:PUSH D CALL FNDVR MOV A,M CPI 88H JNZ INSTR LDA A CALL ADDAH MOV A,M INX H ORA M JNZ DMERR XRA A PUSH D XCHG LHLD LSTAR MOV M,A XCHG XTHL INX D PUSH D DIMLP:CALL EXPR1 MOV A,H ORA A JM SYERR XCHG POP H MOV M,E INX H MOV M,D INX H PUSH H INX D LHLD RUNTO CALL IMUL SHLD RUNTO LHLD POINT DCX H MOV A,M INX H XCHG LHLD LSTAR INR M XCHG CPI 88H JZ DIMLP CPI ')' JNZ SYERR POP D LXI H,0 DAD SP DCR H MOV C,H LHLD RUNTO DAD H XCHG MVI B,0 DMFIL:MOV A,C CMP H JZ MENX H MOV M,D LHLD POINT MVI B,95H SRCHQ:MOV A,M INX H CMP B JNZ SRCHQ RET WRITE:CALL LGLFL SHLD POINT CALL TSTFL LXI D,6 XCHG DAD D SHLD WFILE ORA A JZ DEFWT INR A JNZ DSKER TCOMM:LHLD POINT INX H MOV A,M CPI 88H JNZ SYERR WTVRS:INX H CALL EXPR CALL WRTHL XCHG MOV A,M CPI 88H JZ WTVRS RET WRTHL:MVI A,01H CALL WRITA MOV A,L CALL WRITA MOV A,H WRITA:PUSH H PUSH D PUSH PSW LHLD WFILE MOV E,M INX H MOV D,M INX D MOV M,D DCX M,A INX H MOV M,A JMP TCOMM READ:CALL LGLFL SHLD POINT CALL TSTFL LXI D,6 XCHG DAD D SHLD WFILE ORA A JZ DEFRD DCR A JNZ DSKER TCOM1:LHLD POINT INX H MOV A,M CPI 88H JNZ SYERR RDVRS:INX H CALL FNDVR PUSH H CALL RDHL XCHG MOV M,D INX H MOV M,E POP H MOV A,M CPI 88H JZ RDVRS RET RDHL:CALL READA DCR A JNZ DSKER CALL READA MOV L,A CALL READA MOV H,A RET READA:PUSH D PUSH H LHLD WFILE MOV E,M INX H MOV D,M INX D MOV A,D ANI SECTR>8 CNZ RBUFF LHLD WFILE MOV E,M INX H MOV D,M INX D MOV M,D DCX H MOV M,E INX H INX H DAD D MOV A,M POP H POP D RET RBUFF:MVI A,-1 MOV M,A DCX H MOV M,A DCX H MOV D,M DCX H MOV E,M MOV A,D ORA E JZ DSKER DCX D MOV M,D INX H MOV M,E DCX H DCX H MOV D,M DCX H MOV E,M INX D MOV M,E INX H MOV M,D DCX D DCX H DCX H MOV A,M LHLD WFILE INX H INX H XCHG PUSH B MVI B,1 JMP CMDSK DEFRD:INR A STAX D LXI V H,M MOV L,A MOV A,B RET WFILE:DS 2 BUFFS:DS FILNM*264 ;****** EXPRESSION EVALUATOR EXPR9:XCHG EXPR0:INX H EXPR1:MVI A,1 STA PCHEK JMP PUSH EXPR:XRA A STA PCHEK PUSH:SHLD POINT LXI H,0FFFFH PUSH H INX H PUSH H LXI H,70AH PUSH H EXPLP:LHLD POINT CALL GET SHLD POINT MOV H,B MOV L,C SHLD SAVE EXTRA:POP H PUSH H MOV A,L CMP C JNC COMLP PUSH D PUSH B JMP EXPLP COMLP:MOV A,H XCHG POP D POP D LXI B,RTRN PUSH B ORA A JZ ERR CPI 16 JNC ELHLD POINT DCX H XCHG RET GOBAK:LHLD SAVE MOV A,H ORA A JZ DONE1 PUSH D PUSH H JMP EXPLP GET:SHLD POINT XCHG LXI H,0 LDAX D CPI '%' JZ HEX CNMLP:LDAX D INX D CPI 30H JC CHEK1 CPI 3AH JNC CHEK1 SUI 30H MOV B,H MOV C,L DAD H DAD H DAD B DAD H MOV C,A MVI B,0 DAD B JMP CNMLP HEX:INX D LDAX D INX D CPI 30H JC CHEK1 CPI 3AH JNC ALPHA SUI 30H GOTNM:DAD H DAD H DAD H DAD H MOV C,A MVI B,0 DAD B JMP HEX+1 ALPHA:CPI 'F'+1 FNCTN:SUI 175 MOV B,A ADD A PUSH H MOV C,A CALL NONUM MOV A,C LXI H,FUNCS CALL ADDAH MOV E,M INX H MOV D,M POP H MOV A,B ORA A JZ CALL MOV A,M CPI '(' JNZ SYERR INX H LXI B,RETAD PUSH B PUSH D CALL EXPR1 XCHG LHLD POINT DCX H MOV A,M CPI ')' JNZ SYERR RET TSTVR:CALL NONUM CALL FNDVR XCHG MOV A,M INX H MOV L,M MOV H,A LDAX D INX D JMP CHEK1 ADDR:CALL NONUM INX H CALL FNDVR MOV A,M CPI ']' JNZ SYNTX INX H MOV A,M NX H INX D PUSH D ARRLP:CALL EXPR1 MOV A,H ORA A JM SUBER XCHG POP H MOV C,M INX H MOV B,M INX H PUSH H MOV A,B CMP D JC SUBER JNZ SKP47 MOV A,C CMP E JC SUBER SKP47:PUSH B LHLD V1 CALL IMUL XCHG LHLD RUNTO DAD D SHLD RUNTO POP D INX D LHLD V1 CALL IMUL SHLD V1 LHLD POINT DCX H MOV A,M INX H XCHG LXI H,COUNT DCR M JZ DON47 XCHG CPI 88H JZ ARRLP JMP SYERR DON47:CPI ')' JNZ SYERR LHLD RUNTO DAD H POP B DAD B XCHD,SECTR-1 MOV M,E INX H MOV M,D JMP TCOM1 CLOSF:CALL LGLFL PUSH H CALL TSTFL CPI 80H JZ DSKER MVI M,80H XCHG POP H INR A RNZ PUSH H LXI H,6 DAD D SHLD WFILE XRA A MVI B,0 WLOOP:CALL WRITA DCR B JNZ WLOOP POP H RET TSTFL:MOV H,A ADD A ADD A ADD A MOV L,A LXI D,BUFFS DAD D MOV A,M RET LGLFL:MOV A,M SUI 30H JM SYERR CPI FILNM JNC SYERR RET GTNM1:CALL DLOOK JC DSKER MOV B,A MOV E,M INX H MOV D,M INX H MOV A,M INX H MORR PUSH PSW ADD A PUSH H LXI H,OPERS-2 ADD L MOV L,A MVI A,0 ADC H MOV H,A MOV C,M INX H MOV B,M POP H POP PSW PUSH B CPI 7 RNC MOV A,D XRA H ANI 80H JZ NXT77 XCHG NXT77:MOV A,H CMP D MOV A,L LXI H,0 RNZ CMP E RET OPERS:DW INE,ILE DW IGE,IEQ DW ILT,IGT DW IADD,ISUB DW IMUL,IDIV DW EXPON DW IMOD,IAND DW IXOR,IOR ERR:POP H LXI H,0 RTRN:XCHG POP H PUSH H INR H JZ GOBAK LHLD SAVE MOV B,H MOV C,L JMP EXTRA DONE1:POP B JNC CHEK1 CPI 'A' JC CHEK1 SUI 'A'-10 JMP GOTNM CHEK1:XCHG MOV B,A CPI '[' JZ ADDR CPI '(' JZ LPARN CPI ')' JZ RPARN CPI 13 JZ DON66 ORA A JP TSTVR CPI 160 JC DON66 CPI 183 JNC DON66 CPI 175 JNC FNCTN SUI 159 MOV B,A PUSH H LXI H,VALUS DCR A CALL ADDAH MOV C,M POP H RET RPARN:LDA PCHEK ORA A JZ SYERR DON66:LXI B,0 RET LPARN:CALL EXPR1 RETAD:XCHG LHLD POINT DCX H MOV A,M CPI ')' JNZ SYERR INX H MOV A,M INX H JMP CHEK1+1 INX H JMP CHEK1+1 NONUM:DCX H XCHG LHLD POINT MOV A,D CMP H JNZ SYERR MOV A,E CMP L JNZ SYERR RET FNDVR:MOV A,M CPI 'A' JC SYERR CPI 'Z'+1 JNC SYERR MOV B,A INX H MOV A,M XCHG CPI '(' JZ ARRAY LXI H,VARRS-82H MOV A,B ADD A MOV C,A MVI B,0 DAD B XCHG RET ARRAY:LXI H,0 SHLD RUNTO INX H SHLD V1 LXI H,ARRTB-82H MOV A,B ADD A MOV C,A MVI B,0 DAD B MOV A,M INX H MOV H,M MOV L,A ORA H JZ UNDIF MOV A,M STA COUNT XCHG IG RET IDIV:MOV A,D XRA H ANI 80H PUSH PSW MOV A,H ORA A CM NEGHL XCHG MOV A,H ORA A CM NEGHL XCHG CALL DIV POP PSW RZ JMP NEGHL DIV:SHLD TEMP LXI H,BNUM MVI M,17 LXI B,0 PUSH B ORA A LOOP2:MOV A,E RAL MOV E,A MOV A,D RAL MOV D,A DCR M POP H XCHG RZ XCHG MVI A,0 ADC A DAD H MOV B,H ADD L LHLD TEMP SUB L MOV C,A MOV A,B SBB H MOV B,A PUSH B JNC SKIP DAD B XTHL SKIP:LXI H,BNUM CMC JMP LOOP2 IMOD:CALL IDIV XCHG RET IMUL:MOV B,H MOV C,L ORA A LXI H,0 MULP:MOV A,B RAR MOV B,A MOV A,C RAR MOV C,A JNC MSKIP DAD D MSKIP:XCHG DAD H XCHG ORA B RZ JMP MULP IADD:DAD D RET ISUB:MOV A,E SUB L MOV L,A MOV A,D SBB H MOV H,A RET EXPON:MOV B,L LXI H,0 MOV A,D ORA E RZ MOV A,B INX H ORA A RZ RAR MOV B,A JNC PLOOP MOV H,D MOV L,E PLOOP:MOV A,B ORA A RZ RAR MOV B,A PUSH B PUSH H PUSH PSW MOV H,D MOV L,E CALL IMUL XCHG POP PSW POP H CC IMUL POP B JMP PLOOP IAND:MOV RA E RZ INX H RET CALL:INX H LXI D,RETAD PUSH D CLLOP:CALL EXPR1 PUSH H CALL CCOMM JZ CLLOP CPI ')' JNZ SYERR RET CCOMM:LHLD POINT DCX H MOV A,M INX H CPI 88H RET NEGHL:DCX H FLIP:MOV A,H CMA MOV H,A MOV A,L CMA MOV L,A RET FREE:MOV A,D ORA A LHLD END JM FREE1 LXI D,STACK JMP ISUB FREE1:XCHG LXI H,LINES JMP ISUB FILL0:LXI H,LINES+300H SHLD LSTAR LXI H,VARRS MVI B,0 MVI C,104 FL0LP:MOV M,B INX H DCR C JNZ FL0LP RET ADDAH:ADD L MOV L,A RNC INR H RET RND:LHLD STC RET GBACK:LHLD OLDLN CALL NEWPL SHLD OLDLN JMP FLOOP NOCAR:LHLD OLDLN ORA A RET LEGAL:SHLD SAVE XCHG LXI H,0 LP95:LDAX D CPI 30H JC DONE5 CPI 3AH JNC DONE5 INX D SUI 30H MOV B,H MOV C,L DAD H DAD H DAD B DAD H JC SYERR MOV C,A MVI B,0 DAD B JC SYERR JMP LP95 DONE5:XCHG MOV A,D ORA E JZ EXIT1 SHLD SAVE1 LHLD SAVE RET EXIT1:POP H LHLD SAVE CALL EXEC JMP START XREAD: MVI B,0 PIKUP:CALL CHIN CPI 3 JZ STOP CPI 95 JZ BACK CPI 7FH JZ BACK CPI 8 JZ BI 255 JZ COPY1 ORA A JP AHEAD DCX H DCX H CPI 95H JNZ COPY STAX B INX B INX H QLOOP:MOV A,M CPI 0DH JZ SYERR STAX B INX B INX H CPI '"' JNZ QLOOP DCX H DCX B MVI A,95H JMP COPY AHEAD:LDAX D INX D ORA A JP AHEAD JMP FDLP1 COPY1:LHLD SAVE MOV A,M COPY:STAX B INX B JMP CHGLP RETRN:MOV H,B MOV L,C MVI M,13 INX H INX H LXI B,INBUF MOV A,L SUB C STA COUNT MOV H,B MOV L,C RET ;OOOOOOOOOOOOOO INSRT:CALL LEGAL LHLD SAVE1 MOV A,M CPI 13 JZ DELLN PUSH D XCHG CALL FNC STRT1 CALL NEWPL CALL MOVUP JMP STRT1 LNERR:LXI H,LINEM JMP PERR STOP:LXI H,STOPM CALL MESAG JMP PRLNM MEMOV:LXI H,OVEMG JMP PERR STERR:LXI H,STAKM JMP PERR UNDIF:LXI H,UNDFM JMP PERR SUBER:LXI H,SUBRM JMP PERR DMERR:LXI H,DIMER JMP PERR NORM1:LXI H,ROMMG JMP PERR DSKER:LXI H,DISKM JMP PERR SYERR:LXI H,SYNTX PERR:CALL MESAG LXI H,ERRM CALL MESAG PRLNM:LHLD WKLN MOV A,H ORA L JZ START LXI H,INLNM CALL MESAG LHLD WKLN LXI D,INBF1 CALL CONV1 LXI H,INBF1 CALL MESAG A,D ANA H MOV H,A MOV A,E ANA L MOV L,A RET IOR:MOV A,D ORA H MOV H,A MOV A,E ORA L MOV L,A RET IXOR:MOV A,D XRA H MOV H,A MOV A,E XRA L MOV L,A RET IEQ:RNZ DCX H RET INE:RZ DCX H RET ILT:RC RZ DCX H RET IGT:RNC DCX H RET ILE:RC DCX H RET IGE:DCX H RC RZ INX H RET PEEK:XCHG MOV L,M MVI H,0 RET NOT:XCHG JMP FLIP ABS:MOV A,D ORA A XCHG RP JMP NEGHL INP:MOV A,E STA INPPL DB 0DBH INPPL:DS 1 MOV L,A MVI H,0 RET SGN:LXI H,-1 MOV A,D ORA A RM INX H O SEED MVI B,11H MOV A,L RND1:ANI 2DH JPO RSKIP CMC RSKIP:MOV A,H RAR MOV H,A MOV A,L RAR MOV L,A DCR B JNZ RND1 SHLD SEED INX H XCHG CALL IMOD INX H RET VALUS:DB 5,5,5,5 DB 5,5,10,10 DB 15,15,16,15,3 DB 2,2 ;============= END OF EXPRESSION EVALUATOR FNDNM:CALL EXPR FNDN1:SHLD SAVE MVI B,0 LXI H,LINES SHLD OLDLN FLOOP:LHLD OLDLN MOV A,M ORA A JZ NOCAR INX H MOV A,M INX H MOV E,M LHLD SAVE CMP H JC GBACK JNZ NOCAR MOV A,E CMP L JC GBACK JNZ NOCAR LHLD OLDLN ACK CPI 13 JZ DONE CPI 32 JC PIKUP MOV C,A MOV A,B INR A CPI 96 JZ PIKUP MOV M,C INX H INR B MOV A,C CALL CHOUT JMP PIKUP BACK:MOV C,B DCR C JM PIKUP DCR B DCX H MVI A,BAXCHAR CALL CHOUT JMP PIKUP DONE:MOV M,A JMP CHOUT READN:LXI H,INBF1 CALL XREAD LXI H,INBF1-1 LXI B,INBUF CHGLP:INX H MOV A,M CPI '0' JC NXTCH CPI '9' JC COPY NXTCH:CPI 13 JZ RETRN CPI ' ' JZ CHGLP SHLD SAVE LXI D,COMMS FDLP1:LHLD SAVE LDAX D CMP M INX D INX H JZ FDLP1+3 CPDN1 JNC NXT3 CALL NEWPL CALL MOVUP NXT3:LXI D,INBUF LHLD SAVE1 XCHG CALL ISUB LDA COUNT SUB L INR A INR A STA COUNT LHLD OLDLN XCHG LHLD END MOV A,E CMA MOV E,A MOV A,D CMA MOV D,A INX D DAD D MOV B,H MOV C,L LHLD END LDA COUNT CALL NEWP1 CALL MOVDN LHLD OLDLN LDA COUNT MOV M,A INX H POP D MOV M,D INX H MOV M,E INX H XCHG LHLD SAVE1 XCHG SUI 3 MOV B,A PUTLP:LDAX D MOV M,A INX D INX H DCR B JNZ PUTLP RET DELLN:XCHG CALL FNDN1 JNJMP START MESAG:MOV A,M ORA A RZ CALL CHOUT INX H JMP MESAG DISKM:DB 'DISK',0,0DH ROMMG:DB 'NO ROOM',0 SUBRM:DB 'SUBSCRIPT OUT OF RANGE',0 UNDFM:DB 'UNDEFINED ARRAY',0 REDOM:DB 'REDO FROM START',0 STAKM:DB 'STACK',0 LINEM:DB 'LINE NUMBER',0 DIMER:DB 'DIMENSION',0 OVEMG:DB 'MEMORY OVERFLOW',0 SYNTX:DB 'SYNTAX',0 ERRM:DB ' ERROR',0 INLNM:DB ' IN LINE ',0 READY:DB 'READY',13,0 STOPM:DB 'STOP',0 CHIN:MVI A,0 CALL DOSCI CPI 3 RNZ CALL CRLF JMP STOP CRLF:MVI A,13 CHOUT:CALL CHT1 PUSH H LXI H,CNTR5 INR M PUSH PSW MOV A,M ANI 63 MOV M,A POP PSW POP H CPI 13 RNZ XRA A STA CNTR5 MVI A,10 CO: CHT1: JMP DOSCO MOVUP:MOV B,D MOV C,E XCHG LHLD END XCHG DCX B DCX H MUPLP:INX B INX H MOV A,M STAX B MOV A,E CMP L JNZ MUPLP MOV A,D CMP H JNZ MUPLP MOV H,B MOV L,C SHLD END RET MOVDN:SHLD END LDAX D MOV M,A DCX D DCX H MOV A,B ORA C RZ DCX B JMP MOVDN+3 END:DW LINES NEWPL:MOV A,M NEWP1:ADD L MOV E,A MVI A,0 ADC H MOV D,A XINPQT AND OUTPUT ;CALL OPENR TO OPEN A FILE FOR READ ;CALL OPENW TO OPEN FILE FOR WRITE ;CALL BYTI TO READ A BYTE ;CALL BYTO TO WRITE A BYTE ;AFTER COMPLETION OF WRITING CALL CLOSE ;TO FLUSH WRITE BUFFER ; OPENR:LXI H,WRFIL CALL GTNAM SHLD ISIZE XCHG SHLD DIADR STA IUNIT MVI A,-1 STA ICNTR RET OPENW:LXI H,WRFIL CALL GTNAM SHLD OSIZE SHLD OSIZ1 XCHG SHLD DOADR STA OUNIT XRA A LXI H,OCNTR MOV M,A INX H MOV A,M INX H MOV M,A RET INPM:DB 'INPUT' DB 0DH OUTM:DB 'OUTPUT' DB ORA L JZ NOROM DCX H SHLD OSIZE LHLD DOADR INX H SHLD DOADR DCX H LXI D,OBUFR PUSH B LDA OUNIT MVI B,0 JMP CMDSK IMORE:LHLD ISIZE ;REFRESH INPQT BUFFER MOV A,H ORA L JZ NOROM ;NO MORE TO READ DCX H SHLD ISIZE LHLD DIADR INX H SHLD DIADR DCX H LXI D,IBUFR PUSH B LDA IUNIT MVI B,1 CMDSK:MOV C,A MVI A,1 CALL DSKOM POP B JC DSKER RET ; ;READ A BYTE FROM DISK ; BYTI:PUSH D PUSH H LXI H,ICNTR MOV A,M INR A MOV M,A PUSH PSW CZ IMORE LXI H,IBUFR POP PSW CALL ADD CLOSP:MOV A,C CALL BYTO DCR B JNZ CLOSP LDA OTYPE ORA A RNZ LHLD OSIZE ;NEW FILE,CREATE DIRECTORY ENTRY XCHG LHLD OSIZ1 MOV A,L SUB E MOV L,A MOV A,H SBB D MOV H,A SHLD OSIZE LXI H,BLANX LDA OUNIT CALL DLOOK JC NOROM XCHG LHLD DXADR XCHG MOV M,E INX H MOV M,D INX H XCHG LHLD OSIZE XCHG MOV M,E INX H MOV M,D INX H MVI M,0 LXI B,-12 DAD B XCHG LXI H,OFILE MOVLP:MOV A,M CPI 30H JC DWRIT STAX D INX D INX H JMP MOVLP BLANX:DB 0DH,' ' DB 0DH PRITN:MOV A,M CCH DB 'STOP' DB 8DH DB ':' DB 8EH DB 'OUT' DB 8FH DB 'POKE' DB 90H DB 'INPUT' DB 91H DB '?' DB 92H DB 'PRINT' DB 92H DB 'READ' DB 93H DB 'WRITE' DB 94H DB '"' DB 95H DB 'DIM' DB 96H DB 'REM' DB 97H DB 'OPEN' DB 98H DB 'CLOSE' DB 99H DB 3CH,3EH,0A0H DB 3CH,3DH,0A1H DB 3EH,3DH,0A2H DB 3DH,0A3H DB 3CH,0A4H,3EH,0A5H DB 2BH,0A6H,2DH,0A7H DB 2AH,0A8H,2FH,0A9H DB 5EH,0AAH DB 'MOD' DB 171 DB 'AND' DB 172 DB 'XRA' DB 173 DB 'OR' DB 174 DB 'CALL' DB 175 DB 'NOT'CHG RET ;IIIIIIIIIIII THE END IS NEAR LOAD:CALL OPENR LXI H,LINES LOADN:CALL BYTI MOV M,A ORA A JZ LDDUN INX H DCR A MOV B,A LODLP:CALL BYTI MOV M,A INX H DCR B JNZ LODLP JMP LOADN LDDUN:SHLD END JMP START PSAVE:CALL OPENW LXI H,LINES SAVLP:MOV A,M CALL BYTO INX H ORA A JZ SVDUN MOV B,A DCR B SAVL1:MOV A,M INX H CALL BYTO DCR B JNZ SAVL1 JMP SAVLP SVDUN:CALL CLOSE JMP START ;IIIIIIIIIIII THE END IS NEAR ;NORTH STAR DISK FILE ROUTINE ; ;MAINTAINS SECTOR BUFFERS FOR 0DH ROOMM:DB 'NO ROOM' DB 0DH XPNTR:DS 2 DOADR:DS 2 DOAD1:DS 2 OCNTR:DB 0 FTYPE:DS 1 OTYPE:DS 1 OSIZ1:DS 2 OSIZE:DS 2 OUNIT:DS 1 IUNIT:DS 1 DIADR:DS 2 DIAD1:DS 2 ICNTR:DB 0FFH ISIZE:DS 2 UNIT:DB 0 DXADR:DW 0 DPNTR:DW 0 ; ;WRITE A BYTE TO DISK ; COX:CALL CO BYTO:PUSH PSW PUSH D PUSH H MOV E,A LXI H,OCNTR PUSH H MOV A,M MOV D,A LXI H,OBUFR CALL ADDAH MOV M,E POP H INR D MOV M,D CZ OMORE POP H POP D POP PSW RET OMORE:LHLD OSIZE ;REFRESH OUTPUT BUFFER MOV A,HAH MOV A,M POP H POP D RET FOPEN:EQU $ FLOK1:CALL CRLF CALL PRITN XRA A DCR A STA FTYPE XCHG SHLD XPNTR FLOK2:LHLD XPNTR GTNAM:SHLD XPNTR MVI A,1 STA FTYPE CALL DLOOK STA UNIT JC DERR MOV E,M INX H MOV D,M INX H LHIN1:MOV A,M INX H MOV H,M MOV L,A LDA UNIT RET NOROM:EQU NORM1 DERR:MVI A,'?' CALL DOSCO CALL DOSCI CALL DOSCO SUI '#' STA FTYPE JZ FNEW JMP START FNEW:SHLD DXADR LXI D,-1 XCHG LDA UNIT RET CLOSE:LXI B,0FFH ;CLOSE FILE,FLUSH OUTPUT BUFFER ALL CO INX H CPI 0DH JNZ PRITN JMP CRLF IBUFR:DS 256 OBUFR:DS 256 FUNCS:DW CALL,NOT DW PEEK,INP DW RND,SGN DW ABS,FREE ; WKLST:DW LIST,AUTO DW DELETE,EDIT DW RUN,SRTCH DW WARM DW PSAVE ;XXXXXXXXXXXXXXXXXXX THIS IS THE TABLE OF COMMANDS COMMS:DB 'IF' DB 80H DB 'THEN' DB 81H DB 'ELSE' DB 82H DB 'RETURN' DB 83H DB 'FOR' DB 84H DB 'TO' DB 85H DB 'NEXT' DB 86H DB 'STEP' DB 87H DB ',' DB 88H DB 'GOTO' DB 89H DB 'GOSUB' DB 8AH DB 'LET' DB 8BH DB 'END' DB 8 DB 176 DB 'PEEK' DB 177 DB 'INP' DB 178 DB 'RND' DB 179 DB 'SGN' DB 180 DB 'ABS' DB 181 DB 'FREE' DB 182 DB 'LIST' DB 0F0H DB 'AUTO' DB 0F1H DB 'DEL' DB 0F2H DB 'EDIT' DB 0F3H DB 'RUN' DB 0F4H DB 'SCR' DB 0F5H DB 'BYE' DB 0F6H DB 'LOAD' DB 0F7H DB 'SAVE' DB 0F8H DB 255 CTABL:DW IF DW SYERR DW SYERR DW RTRN8 DW FOR DW SYERR DW FNEXT DW SYERR DW SYERR DW GOTO DW GOSUB DW LET DW START DW STOP DW SYERR DW OUT DW POKE DW INPUT DW PRINT DW READ DW WRITE DW SYERR DW DIM DW REM DW OPEN DW CLOSF CHAR:DS 2 COUNT:DS 1 TEMP:DS 2 BNUM:DS 1 TELL:DS 1 LINE:DS 2 NUMBF:DS 7 DS 256 STACK: CNTR5:DS 1 PCHEK:DS 1 SEED:DW 100H STEP:DS 2 CNTR9:DS 1 RUNTO:DS 2 V1:DS 2 LSTAR:DS 2 SAVE3:DS 2 SAVE:DS 2 SAVE1:DS 2 OLDLN:DS 2 NEWLN:DS 2 LSTCH:DS 2 POINT:DS 2 NXTLN:DS 2 WKLN:DS 2 LPLVL:DW 0 SBLVL:DB 0 ENDPT:DS 2 LIMIT:DS 2 SNUM:DS 2 LVAR:DS 2 VARRS:DS 52 ARRTB:DS 52 IFILE: OFILE: INBUF:DS 96 INBF1:DS 5 WRFIL:DS 91 LINES:DB 0  RUB:EQU WIDTH:EQU 80 DISK:EQU 0 ENTRY:EQU 5 ;CI:EQU DOS+10H ;COB:EQU DOS+0DH ;DWRIT:EQU DOS+1FH ;DSKOM:EQU DOS+22H ;DLOOK:EQU DOS+1CH WARM:EQU 0 RUB:EQU 7FH BAXCHAR:EQU 8 SECTR:EQU 128 JMP FIRST ; DOSCO:PUSH PSW PUSH B PUSH D PUSH H MOV E,A MVI C,6 CALL ENTRY POP H POP D POP B POP PSW RET DOSCI:PUSH B PUSH D PUSH H CILOOP:MVI C,6 MVI E,0FFH CALL ENTRY ORA A JZ CILOOP POP H POP D POP B RET CNTLC:PUSH B PUSH D PUSH H MVI C,6 MVI E,0FFH CALL ENTRY POP H POP D POP B CPI 3 JMP START SRTCHNZ: SHLD PSTART JMP START LIST:LXI H,INBUF+1 CALL FNDNM NXT4:MOV A,M ORA A JZ START PRLP1:CALL CONVT MVI B,10 LXI D,INBUF PRLP2:LDAX D CALL CHOUT INX D CMP B JNZ PRLP2 CALL CNTLC JZ STOP CPI 13 JZ NXT6 CPI 20H JZ NXT5 LDA CHOIC ORA A JZ NXT4 NXT5:CALL CHIN NXT6:SUI 13 STA CHOIC JMP NXT4 CONVT:LXI D,INBUF INX H MOV A,M INX H PUSH H MOV L,M MOV H,A CALL CONV1 POP H INX H CONLP:MOV A,M ORA A JP DMOVE MVI ALL CONV1 LXI H,INBF1 CALL MESAG MVI B,0 CALL PIKUP CALL INSRT LHLD POINT XCHG LHLD STEP DAD D SHLD POINT JMP LP56 CONV1:MVI A,30H STA TELL LXI B,-10000 CALL SDIG LXI B,-1000 CALL SDIG LXI B,-100 CALL SDIG LXI B,-10 CALL SDIG MOV A,L ADI 30H STAX D INX D XRA A STAX D RET SDIG:MVI A,2FH INR A SHLD SAVE DAD B JC SDIG+2 LXI H,TELL CMP M LHLD SAVE RZ STAX D INX D XRA A STA TELL RET DELETE:LXI H,INBUF+1 CALL FNDNM SHLD LINE ORA A JZ START PUSH H CALL ADDAH SHLD NXTLN POP H INX H MOV D,M INX H MOV E,M INX H XCHG SHLD WKLN XCHG CALL EXEC REXEC:LHLD NXTLN JMP RLOOP EXEC:CALL CNTLC JZ STOP LXI B,RTAD1 PUSH B MOV A,M ORA A JP LET INX H CPI 0A0H JNC SYERR LXI D,CTABL XCHG SUI 80H ADD A CALL ADDAH MOV A,M INX H MOV H,M MOV L,A PUSH H XCHG RET RTAD1:MOV A,M INX H CPI 13 RZ CPI 82H RZ CPI 8EH JZ EXEC JMP SYERR REM:POP H RET PRINT:MOV A,M C RET ; ;CODE STARTS HERE; ; FIRST: LXI H,LINES SHLD PSTART CALL FILL0 START:CALL CRLF LXI H,WKLN SHLD NXTLN LXI H,0 SHLD WKLN SHLD LPLVL LXI H,READY CALL MESAG STRT1:LXI SP,STACK CALL READN CPI 2 JZ STRT1+3 MOV A,M SUI 0F0H CPI 10 JNC PTLIN ADD A LXI H,WKLST MOV E,A MVI D,0 DAD D MOV E,M INX H MOV D,M XCHG PCHL PTLIN:CALL INSRT JMP STRT1 SRTCH: INX B MOV H,B MOV L,C CALL EXPR MOV A,H ORA L JNZ SRTCHNZ LHLD PSTART MVI M,0 SHLD END,32 STAX D INX D PUSH H MOV B,M LXI H,COMMS-1 FDLP6:SHLD SAVE INX H MOV A,M ORA A JP FDLP6+3 CPI 255 JZ SYERR CMP B JNZ FDLP6 LHLD SAVE INX H MOV A,M MVLP6:STAX D INX D INX H MOV A,M CMP B JNZ MVLP6 MVI A,32 POP H DMOVE:STAX D INX D CPI 13 INX H JNZ CONLP RET CHOIC:DB 0 AUTO:LXI H,1 SHLD STEP LXI H,INBUF+1 CALL EXPR XCHG CALL CCOMM XCHG JNZ NXT40 PUSH H XCHG CALL EXPR SHLD STEP POP H NXT40:SHLD POINT LP56:LXI D,INBF1 CA LHLD POINT DCX H MOV A,M PUSH PSW CPI 13 JZ ONELN POP PSW CPI 88H JNZ SYERR INX H CALL FNDNM JNC NXT50 CALL NEWPL NXT50:XCHG LHLD LINE XCHG CALL MOVUP JMP STRT1 ONELN:POP PSW JNC STRT1 LHLD LINE CALL NEWPL CALL MOVUP JMP STRT1 EDIT:LXI H,INBUF+1 CALL FNDNM JNC LNERR CALL CONVT LXI D,INBUF LXI H,INBF1 MVI B,4 MVLP8:LDAX D MOV M,A INX D INX H CALL CHOUT DCR B JNZ MVLP8 RUN:LHLD PSTART CALL FILL0 LHLD PSTART RLOOP:MOV A,M PI 13 JZ CRLF CPI 8EH JZ CRLF CPI 88H JZ HERE PRLP:MOV A,M CPI 95H JZ QUOTE CALL EXPR CALL PRIHL LHLD POINT DCX H MOV A,M CPI 0DH JZ CRLF CPI 82H JZ CRLF CPI 8EH JZ CRLF CPI 88H JNZ SYERR HERE:EQU $ INX H MOV A,M CPI 0DH RZ CPI 8EH RZ JMP PRLP QUOTE:INX H MOV A,M INX H CPI 0DH JZ SYERR CPI 95H JZ PRINT CALL CHOUT JMP QUOTE+1 PRIHL:XCHG LXI H,NUMBF SHLD CHAR XCHG MVI A,32 CALL CO1 XRA A STA CHOIC MOV A,H ORA A JP NXT53 CALL NEGHL MVI A,'-' CALL CO1 NXT53:MVI C,47 LXI D,-10000 CALL PDIGT LXI D,-1000 CALL PDIGT LXI D,-100 CALL PDIGT LXI D,-10 CALL PDIGT MOV A,L ADI 30H CALL CO1 LDA CNTR5 MOV B,A LHLD CHAR MOV A,L ;SUI NUMBF&255+64 LXI H,NUMBF SUB L ADD B CPI WIDTH CNC CRLF ;LXI H,NUMBF JMP MESAG PDIGT:MVI B,47 SHLD SAVE INR B DAD D JC PDIGT+2 LHLD SAVE LDA CHOIC ORA A JNZ NXT70 MOV A,B CPI 30H RZ STA CHOIC NXT70:MOV A,B CO1:PUSH H LHLD CHAR MOV M,A INX H MVI M,R POP D XCHG MOV M,E LHLD POINT DCX H RET OUT:CALL EXPR XCHG CALL CCOMM JNZ SYERR PUSH D CALL EXPR POP D XCHG ; MOV A,L ; STA OUTPL ; MOV A,E ; DB 0D3H ;OUTPL:DS 1 ;Z80 CODE PUSH B MOV C,L MOV A,E COUT A POP B ;END Z80 CODE LHLD POINT DCX H RET FOR:POP B POP B LXI B,LPLVL LDAX B INR A STAX B CALL FNDVR MOV A,M CPI 0A3H JNZ SYERR PUSH D CALL EXPR0 SHLD SNUM LDAX D CPI 85H JNZ SYERR XCHG XTHL SHLD LVAR MOV M,D INX H MOV M,ERR POP B MOV A,C CMP E JNZ STERR MOV A,B CMP D JNZ STERR XCHG MOV D,M INX H MOV E,M XCHG POP B DAD B XCHG MOV M,E DCX H MOV M,D SHLD LVAR POP H DCX H SHLD LIMIT MOV A,H ORA L JNZ DOMOR NOMOR:POP B POP B LXI B,LPLVL LDAX B DCR A STAX B JM SYERR LHLD ENDPT MOV A,M INX H CPI 88H JZ FNEXT+2 DCX H LXI B,REXEC PUSH B JMP RTAD1 DOMOR:POP D POP H JMP FOR2 GOSUB:CALL EXPR PUSH D LXI B,SBLVL LDAX B INR A STAX B CALL FNDN1 Z INPT1 CALL CHOUT JMP INPLP INPT1:MVI A,'?' CALL CHOUT MVI A,32 CALL CHOUT PUSH H CALL READN POP H LXI D,INBUF CALL DEFVR RNC LXI H,REDOM CALL MESAG LHLD SAVE3 JMP INPUT+3 DEFVR:XRA A STA CNTR9 DEFLP:PUSH D CALL FNDVR MOV A,M CPI 88H JNZ INSTR LDA CNTR9 INR A STA CNTR9 INSTR:XTHL PUSH D CALL EXPR XCHG MOV A,M CPI 88H LDA CNTR9 JNZ ISTR1 DCR A STA CNTR9 ISTR1:ORA A JZ LEGL9 JM LEGL9 POP D POP D STC RET LEGL9:INX H XTHL MOV,D INX H PUSH H INX D LHLD RUNTO CALL IMUL SHLD RUNTO LHLD POINT DCX H MOV A,M INX H XCHG LHLD LSTAR INR M XCHG CPI 88H JZ DIMLP CPI ')' JNZ SYERR POP D LXI H,0 DAD SP DCR H MOV C,H LHLD RUNTO DAD H XCHG MVI B,0 DMFIL:MOV A,C CMP H JZ MEMOV MOV M,B DCX D INX H MOV A,D ORA E JNZ DMFIL XCHG LHLD LSTAR MOV B,H MOV C,L POP H MOV M,B DCX H MOV M,C XCHG SHLD LSTAR LHLD POINT MOV A,M INX H CPI 88H JZ DIM DCX H RET 0 SHLD CHAR POP H RET GOTO:CALL EXPR CALL FNDN1 JNC LNERR POP B POP B JMP RLOOP LET:CALL FNDVR MOV A,M CPI 0A3H JNZ SYERR INX H PUSH D CALL EXPR POP D XCHG MOV M,D INX H MOV M,E LHLD POINT DCX H RET IF:CALL EXPR XCHG LHLD POINT DCX H MOV A,M INX H CPI 81H JNZ SYERR MOV A,E ORA D POP B JNZ EXEC ELSE:LXI B,820DH ELLOP:MOV A,M INX H CMP B JZ EXEC CMP C RZ JMP ELLOP POKE:CALL EXPR XCHG CALL CCOMM JNZ SYERR PUSH D CALL EXP POP H CALL EXPR0 SHLD LIMIT LDAX D CPI 87H LXI H,1 CZ EXPR9 MOV B,H MOV C,L PUSH D LHLD LIMIT XCHG LHLD SNUM CALL ISUB XCHG MOV H,B MOV L,C PUSH B CALL IDIV POP B MOV A,H ORA A JP POSNM LXI H,0 POSNM:INX H SHLD LIMIT POP D LHLD NXTLN FOR2:PUSH H PUSH D SHLD NXTLN LHLD LIMIT PUSH H PUSH B LHLD LVAR PUSH H LXI B,-1 PUSH B LXI B,REXEC PUSH B XCHG JMP RTAD1 FNEXT:POP B POP B CALL FNDVR SHLD ENDPT POP B INX B MOV A,B ORA C JNZ STE JNC LNERR XCHG LHLD NXTLN XCHG SHLD NXTLN POP B POP PSW POP PSW PUSH B PUSH D LHLD LPLVL PUSH H LXI H,0 SHLD LPLVL DCX H DCX H PUSH H JMP REXEC RTRN8:POP B POP B LHLD WKLN MOV A,H ORA L JZ STERR LXI D,SBLVL LDAX D DCR A STAX D JM STERR POP D INX D INX D MOV A,D ORA E JNZ STERR POP H SHLD LPLVL POP H SHLD NXTLN POP H PUSH B JMP RTAD1 INPUT:SHLD SAVE3 MOV A,M CPI 95H JNZ INPT1 INX H INPLP:MOV A,M INX H CPI 95H J M,D INX H MOV M,E POP D POP H MOV A,M CPI 13 RZ CPI 8EH RZ INX H CPI 88H JNZ SYERR JMP DEFLP DIM:MOV A,M CPI 41H JC SYERR CPI 'Z'+1 JNC SYERR MOV B,A INX H MOV A,M CPI '(' JNZ SYERR INX H XCHG LXI H,1 SHLD RUNTO LXI H,ARRTB-82H MOV A,B ADD A CALL ADDAH MOV A,M INX H ORA M JNZ DMERR XRA A PUSH D XCHG LHLD LSTAR MOV M,A XCHG XTHL INX D PUSH D DIMLP:CALL EXPR1 MOV A,H ORA A JM SYERR XCHG POP H MOV M,E INX H MOV MIF DISK FILNM:EQU 4 OPEN:CALL LGLFL PUSH H CALL TSTFL CPI 80H JNZ DSKER XTHL INX H MOV A,M CPI 88H JNZ SYERR INX H MOV A,M CPI 95H JNZ SYERR INX H SHLD POINT CALL GTNM1 XTHL MVI M,0 INX H MOV M,A INX H MOV M,E INX H MOV M,D INX H POP D MOV M,E INX H MOV M,D LHLD POINT MVI B,95H SRCHQ:MOV A,M INX H CMP B JNZ SRCHQ RET WRITE:CALL LGLFL SHLD POINT CALL TSTFL LXI D,6 XCHG DAD D SHLD WFILE ORA A JZ DEFWT INR A JNZ DSKER TCOMM:LHLD POINT INX H MOV A,M CPI 88H JNZ SYERR WTVRS:INX H CALL EXPR CALL WRTHL XCHG MOV A,M CPI 88H JZ WTVRS RET WRTHL:MVI A,01H CALL WRITA MOV A,L CALL WRITA MOV A,H WRITA:PUSH H PUSH D PUSH PSW LHLD WFILE MOV E,M INX H MOV D,M INX D MOV M,D DCX H MOV M,E INX H DAD D MOV M,A DCX D MOV A,D ANI SECTR>8 CNZ WBUFF POP PSW POP D POP H RET WBUFF:LHLD WFILE DCX H MOV D,M DCX H MOV E,M MOV A,D ORA E JZ NORM1 DCX D MOERR RDVRS:INX H CALL FNDVR PUSH H CALL RDHL XCHG MOV M,D INX H MOV M,E POP H MOV A,M CPI 88H JZ RDVRS RET RDHL:CALL READA DCR A JNZ DSKER CALL READA MOV L,A CALL READA MOV H,A RET READA:PUSH D PUSH H LHLD WFILE MOV E,M INX H MOV D,M INX D MOV A,D ANI SECTR>8 CNZ RBUFF LHLD WFILE MOV E,M INX H MOV D,M INX D MOV M,D DCX H MOV M,E INX H INX H DAD D MOV A,M POP H POP D RET RBUFF:MVI A,-1 MOV M,A DCX H MOV M,A DCX H WLOOP:CALL WRITA DCR B JNZ WLOOP POP H RET TSTFL:MOV H,A ADD A ADD A ADD A MOV L,A LXI D,BUFFS DAD D MOV A,M RET LGLFL:MOV A,M SUI 30H JM SYERR CPI FILNM JNC SYERR RET GTNM1:CALL DLOOK JC DSKER MOV B,A MOV E,M INX H MOV D,M INX H MOV A,M INX H MOV H,M MOV L,A MOV A,B RET WFILE:DS 2 BUFFS:DS FILNM*264 ENDIF ;****** EXPRESSION EVALUATOR EXPR9:XCHG EXPR0:INX H EXPR1:MVI A,1 STA PCHEK JMP PUSH EXPR:XRA A STA PCHEK PUSH:SHLD POINT L XCHG NXT77:MOV A,H CMP D MOV A,L LXI H,0 RNZ CMP E RET OPERS:DW INE,ILE DW IGE,IEQ DW ILT,IGT DW IADD,ISUB DW IMUL,IDIV DW EXPON DW IMOD,IAND DW IXOR,IOR ERR:POP H LXI H,0 RTRN:XCHG POP H PUSH H INR H JZ GOBAK LHLD SAVE MOV B,H MOV C,L JMP EXTRA DONE1:POP B LHLD POINT DCX H XCHG RET GOBAK:LHLD SAVE MOV A,H ORA A JZ DONE1 PUSH D PUSH H JMP EXPLP GET:SHLD POINT XCHG LXI H,0 LDAX D CPI '%' JZ HEX CNMLP:LDAX D INX D CPI 30H CPI 183 JNC DON66 CPI 175 JNC FNCTN SUI 159 MOV B,A PUSH H LXI H,VALUS DCR A CALL ADDAH MOV C,M POP H RET RPARN:LDA PCHEK ORA A JZ SYERR DON66:LXI B,0 RET LPARN:CALL EXPR1 RETAD:XCHG LHLD POINT DCX H MOV A,M CPI ')' JNZ SYERR INX H MOV A,M INX H JMP CHEK1+1 FNCTN:SUI 175 MOV B,A ADD A PUSH H MOV C,A CALL NONUM MOV A,C LXI H,FUNCS CALL ADDAH MOV E,M INX H MOV D,M POP H MOV A,B ORA A JZ CALL MOV A,M CPI '(' JNZ SYERR IV M,E INX H MOV M,D XRA A INX H MOV M,A INX H MOV M,A LXI D,-5 DAD D MOV E,M INX H MOV D,M INX D MOV M,D DCX H MOV M,E DCX D LHLD WFILE PUSH B LXI B,-5 DAD B MOV A,M MVI B,0 LHLD WFILE INX H INX H XCHG JMP CMDSK DEFWT:DCR A STAX D INR A MOV M,A INX H MOV M,A JMP TCOMM READ:CALL LGLFL SHLD POINT CALL TSTFL LXI D,6 XCHG DAD D SHLD WFILE ORA A JZ DEFRD DCR A JNZ DSKER TCOM1:LHLD POINT INX H MOV A,M CPI 88H JNZ SY MOV D,M DCX H MOV E,M MOV A,D ORA E JZ DSKER DCX D MOV M,D INX H MOV M,E DCX H DCX H MOV D,M DCX H MOV E,M INX D MOV M,E INX H MOV M,D DCX D DCX H DCX H MOV A,M LHLD WFILE INX H INX H XCHG PUSH B MVI B,1 JMP CMDSK DEFRD:INR A STAX D LXI D,SECTR-1 MOV M,E INX H MOV M,D JMP TCOM1 CLOSF:CALL LGLFL PUSH H CALL TSTFL CPI 80H JZ DSKER MVI M,80H XCHG POP H INR A RNZ PUSH H LXI H,6 DAD D SHLD WFILE XRA A MVI B,0XI H,0FFFFH PUSH H INX H PUSH H LXI H,70AH PUSH H EXPLP:LHLD POINT CALL GET SHLD POINT MOV H,B MOV L,C SHLD SAVE EXTRA:POP H PUSH H MOV A,L CMP C JNC COMLP PUSH D PUSH B JMP EXPLP COMLP:MOV A,H XCHG POP D POP D LXI B,RTRN PUSH B ORA A JZ ERR CPI 16 JNC ERR PUSH PSW ADD A PUSH H LXI H,OPERS-2 ADD L MOV L,A MVI A,0 ADC H MOV H,A MOV C,M INX H MOV B,M POP H POP PSW PUSH B CPI 7 RNC MOV A,D XRA H ANI 80H JZ NXT77 JC CHEK1 CPI 3AH JNC CHEK1 SUI 30H MOV B,H MOV C,L DAD H DAD H DAD B DAD H MOV C,A MVI B,0 DAD B JMP CNMLP HEX:INX D LDAX D INX D CPI 30H JC CHEK1 CPI 3AH JNC ALPHA SUI 30H GOTNM:DAD H DAD H DAD H DAD H MOV C,A MVI B,0 DAD B JMP HEX+1 ALPHA:CPI 'F'+1 JNC CHEK1 CPI 'A' JC CHEK1 SUI 'A'-10 JMP GOTNM CHEK1:XCHG MOV B,A CPI '[' JZ ADDR CPI '(' JZ LPARN CPI ')' JZ RPARN CPI 13 JZ DON66 ORA A JP TSTVR CPI 160 JC DON66 NX H LXI B,RETAD PUSH B PUSH D CALL EXPR1 XCHG LHLD POINT DCX H MOV A,M CPI ')' JNZ SYERR RET TSTVR:CALL NONUM CALL FNDVR XCHG MOV A,M INX H MOV L,M MOV H,A LDAX D INX D JMP CHEK1 ADDR:CALL NONUM INX H CALL FNDVR MOV A,M CPI ']' JNZ SYNTX INX H MOV A,M INX H JMP CHEK1+1 NONUM:DCX H XCHG LHLD POINT MOV A,D CMP H JNZ SYERR MOV A,E CMP L JNZ SYERR RET FNDVR:MOV A,M CPI 'A' JC SYERR CPI 'Z'+1 JNC SYERR MOV B,A INX H MOV A,M XCHG CPI '(' JZ ARRAY LXI H,VARRS-82H MOV A,B ADD A MOV C,A MVI B,0 DAD B XCHG RET ARRAY:LXI H,0 SHLD RUNTO INX H SHLD V1 LXI H,ARRTB-82H MOV A,B ADD A MOV C,A MVI B,0 DAD B MOV A,M INX H MOV H,M MOV L,A ORA H JZ UNDIF MOV A,M STA COUNT XCHG INX H INX D PUSH D ARRLP:CALL EXPR1 MOV A,H ORA A JM SUBER XCHG POP H MOV C,M INX H MOV B,M INX H PUSH H MOV A,B CMP D JC SUBER JNZ SKP47 MOV A,C CMP E JC SUBER SK B,0 PUSH B ORA A LOOP2:MOV A,E RAL MOV E,A MOV A,D RAL MOV D,A DCR M POP H XCHG RZ XCHG MVI A,0 ADC A DAD H MOV B,H ADD L LHLD TEMP SUB L MOV C,A MOV A,B SBB H MOV B,A PUSH B JNC SKIP DAD B XTHL SKIP:LXI H,BNUM CMC JMP LOOP2 IMOD:CALL IDIV XCHG RET IMUL:MOV B,H MOV C,L ORA A LXI H,0 MULP:MOV A,B RAR MOV B,A MOV A,C RAR MOV C,A JNC MSKIP DAD D MSKIP:XCHG DAD H XCHG ORA B RZ JMP MULP IADD:DAD D RET ISUB:MOV A,E SUB L H RET ILT:RC RZ DCX H RET IGT:RNC DCX H RET ILE:RC DCX H RET IGE:DCX H RC RZ INX H RET PEEK:XCHG MOV L,M MVI H,0 RET NOT:XCHG JMP FLIP ABS:MOV A,D ORA A XCHG RP JMP NEGHL INP: ;MOV A,E ;STA INPPL ;DB 0DBH ;INPPL:DS 1 ;Z80 CODE PUSH B MOV C,E CIN A POP B ;END Z80 CODE MOV L,A MVI H,0 RET SGN:LXI H,-1 MOV A,D ORA A RM INX H ORA E RZ INX H RET CALL:INX H LXI D,RETAD PUSH D CLLOP:CALL EXPR1 PUSH H CALL CCOMM JZ CLLOP CPI ')' JNZ SYERR RET CCOMM:LHLD H XCHG CALL IMOD INX H RET VALUS:DB 5,5,5,5 DB 5,5,10,10 DB 15,15,16,15,3 DB 2,2 ;============= END OF EXPRESSION EVALUATOR FNDNM:CALL EXPR FNDN1:SHLD SAVE MVI B,0 LHLD PSTART SHLD OLDLN FLOOP:LHLD OLDLN MOV A,M ORA A JZ NOCAR INX H MOV A,M INX H MOV E,M LHLD SAVE CMP H JC GBACK JNZ NOCAR MOV A,E CMP L JC GBACK JNZ NOCAR LHLD OLDLN STC RET GBACK:LHLD OLDLN CALL NEWPL SHLD OLDLN JMP FLOOP NOCAR:LHLD OLDLN ORA A RET LEGAL:SHLD SAVE XCHG LXI H,0 LP95:LDAX D JMP PIKUP BACK:MOV C,B DCR C JM PIKUP DCR B DCX H MVI A,BAXCHAR CALL CHOUT JMP PIKUP DONE:MOV M,A JMP CHOUT READN:LXI H,INBF1 CALL XREAD LXI H,INBF1-1 LXI B,INBUF CHGLP:INX H MOV A,M CPI '0' JC NXTCH CPI '9' JC COPY NXTCH:CPI 13 JZ RETRN CPI ' ' JZ CHGLP SHLD SAVE LXI D,COMMS FDLP1:LHLD SAVE LDAX D CMP M INX D INX H JZ FDLP1+3 CPI 255 JZ COPY1 ORA A JP AHEAD DCX H DCX H CPI 95H JNZ COPY STAX B INX B INX H QLOOP:MOV A,M CPI 0DH JZ SYERR STAX B INX B INX P47:PUSH B LHLD V1 CALL IMUL XCHG LHLD RUNTO DAD D SHLD RUNTO POP D INX D LHLD V1 CALL IMUL SHLD V1 LHLD POINT DCX H MOV A,M INX H XCHG LXI H,COUNT DCR M JZ DON47 XCHG CPI 88H JZ ARRLP JMP SYERR DON47:CPI ')' JNZ SYERR LHLD RUNTO DAD H POP B DAD B XCHG RET IDIV:MOV A,D XRA H ANI 80H PUSH PSW MOV A,H ORA A CM NEGHL XCHG MOV A,H ORA A CM NEGHL XCHG CALL DIV POP PSW RZ JMP NEGHL DIV:SHLD TEMP LXI H,BNUM MVI M,17 LXIMOV L,A MOV A,D SBB H MOV H,A RET EXPON:MOV B,L LXI H,0 MOV A,D ORA E RZ MOV A,B INX H ORA A RZ RAR MOV B,A JNC PLOOP MOV H,D MOV L,E PLOOP:MOV A,B ORA A RZ RAR MOV B,A PUSH B PUSH H PUSH PSW MOV H,D MOV L,E CALL IMUL XCHG POP PSW POP H CC IMUL POP B JMP PLOOP IAND:MOV A,D ANA H MOV H,A MOV A,E ANA L MOV L,A RET IOR:MOV A,D ORA H MOV H,A MOV A,E ORA L MOV L,A RET IXOR:MOV A,D XRA H MOV H,A MOV A,E XRA L MOV L,A RET IEQ:RNZ DCX H RET INE:RZ DCXPOINT DCX H MOV A,M INX H CPI 88H RET NEGHL:DCX H FLIP:MOV A,H CMA MOV H,A MOV A,L CMA MOV L,A RET FREE:MOV A,D ORA A LHLD END JM FREE1 LXI D,STACK JMP ISUB FREE1:XCHG LHLD PSTART JMP ISUB FILL0: ;LHLD PSTART SHLD LSTAR LXI H,VARRS MVI B,0 MVI C,104 FL0LP:MOV M,B INX H DCR C JNZ FL0LP RET ADDAH:ADD L MOV L,A RNC INR H RET RND:LHLD SEED MVI B,11H MOV A,L RND1:ANI 2DH JPO RSKIP CMC RSKIP:MOV A,H RAR MOV H,A MOV A,L RAR MOV L,A DCR B JNZ RND1 SHLD SEED INX CPI 30H JC DONE5 CPI 3AH JNC DONE5 INX D SUI 30H MOV B,H MOV C,L DAD H DAD H DAD B DAD H JC SYERR MOV C,A MVI B,0 DAD B JC SYERR JMP LP95 DONE5:XCHG MOV A,D ORA E JZ EXIT1 SHLD SAVE1 LHLD SAVE RET EXIT1:POP H LHLD SAVE CALL EXEC JMP START XREAD: MVI B,0 PIKUP:CALL CHIN CPI 3 JZ STOP CPI 95 JZ BACK CPI 7FH JZ BACK CPI 8 JZ BACK CPI 13 JZ DONE CPI 32 JC PIKUP MOV C,A MOV A,B INR A CPI 96 JZ PIKUP MOV M,C INX H INR B MOV A,C CALL CHOUT H CPI '"' JNZ QLOOP DCX H DCX B MVI A,95H JMP COPY AHEAD:LDAX D INX D ORA A JP AHEAD JMP FDLP1 COPY1:LHLD SAVE MOV A,M COPY:STAX B INX B JMP CHGLP RETRN:MOV H,B MOV L,C MVI M,13 INX H INX H LXI B,INBUF MOV A,L SUB C STA COUNT MOV H,B MOV L,C RET ;OOOOOOOOOOOOOO INSRT:CALL LEGAL LHLD SAVE1 MOV A,M CPI 13 JZ DELLN PUSH D XCHG CALL FNDN1 JNC NXT3 CALL NEWPL CALL MOVUP NXT3:LXI D,INBUF LHLD SAVE1 XCHG CALL ISUB LDA COUNT SUB L INR A INR A STA COUNT LHLD OLDLN XCHG LHLD END MOV A,E CMA MOV E,A MOV A,D CMA MOV D,A INX D DAD D MOV B,H MOV C,L LHLD END LDA COUNT CALL NEWP1 CALL MOVDN LHLD OLDLN LDA COUNT MOV M,A INX H POP D MOV M,D INX H MOV M,E INX H XCHG LHLD SAVE1 XCHG SUI 3 MOV B,A PUTLP:LDAX D MOV M,A INX D INX H DCR B JNZ PUTLP RET DELLN:XCHG CALL FNDN1 JNC STRT1 CALL NEWPL CALL MOVUP JMP STRT1 LNERR:LXI H,LINEM JMP PERR STOP:LXI H,STOPM CALL MESAG JMP PRLNM MEMOV:LXI H,OVEMG JMP PERR,0DH ROMMG:DB 'NO ROOM',0 SUBRM:DB 'SUBSCRIPT OUT OF RANGE',0 UNDFM:DB 'UNDEFINED ARRAY',0 REDOM:DB 'REDO FROM START',0 STAKM:DB 'STACK',0 LINEM:DB 'LINE NUMBER',0 DIMER:DB 'DIMENSION',0 OVEMG:DB 'MEMORY OVERFLOW',0 SYNTX:DB 'SYNTAX',0 ERRM:DB ' ERROR',0 INLNM:DB ' IN LINE ',0 READY:DB 'READY',13,0 STOPM:DB 'STOP',0 CHIN:MVI A,0 CALL DOSCI CPI 3 RNZ CALL CRLF JMP STOP CRLF:MVI A,13 CHOUT:CALL CHT1 PUSH H LXI H,CNTR5 INR M ;PUSH PSW ;MOV A,M ;ANI 63 ;MOV M,A ;POP PSW POP H LOADN:CALL BYTI MOV M,A ORA A JZ LDDUN INX H DCR A MOV B,A LODLP:CALL BYTI MOV M,A INX H DCR B JNZ LODLP JMP LOADN LDDUN:SHLD END JMP START PSAVE:CALL OPENW LHLD PSTART SAVLP:MOV A,M CALL BYTO INX H ORA A JZ SVDUN MOV B,A DCR B SAVL1:MOV A,M INX H CALL BYTO DCR B JNZ SAVL1 JMP SAVLP SVDUN:CALL CLOSE JMP START ENDIF ;IIIIIIIIIIII THE END IS NEAR IF DISK ;NORTH STAR DISK FILE ROUTINE ; ;MAINTAINS SECTOR BUFFERS FOR INPQT AND OUTPUT ;CALL OPENR TO OPEN A FILE FOR READ ;CDS 2 DOAD1:DS 2 OCNTR:DB 0 FTYPE:DS 1 OTYPE:DS 1 OSIZ1:DS 2 OSIZE:DS 2 OUNIT:DS 1 IUNIT:DS 1 DIADR:DS 2 DIAD1:DS 2 ICNTR:DB 0FFH ISIZE:DS 2 UNIT:DB 0 DXADR:DW 0 DPNTR:DW 0 ; ;WRITE A BYTE TO DISK ; COX:CALL CO BYTO:PUSH PSW PUSH D PUSH H MOV E,A LXI H,OCNTR PUSH H MOV A,M MOV D,A LXI H,OBUFR CALL ADDAH MOV M,E POP H INR D MOV M,D CZ OMORE POP H POP D POP PSW RET OMORE:LHLD OSIZE ;REFRESH OUTPUT BUFFER MOV A,H ORA L JZ NOROM DCX H SHLD OSIZE LHLD DOADR INX H LL CRLF CALL PRITN XRA A DCR A STA FTYPE XCHG SHLD XPNTR FLOK2:LHLD XPNTR GTNAM:SHLD XPNTR MVI A,1 STA FTYPE CALL DLOOK STA UNIT JC DERR MOV E,M INX H MOV D,M INX H LHIN1:MOV A,M INX H MOV H,M MOV L,A LDA UNIT RET NOROM:EQU NORM1 DERR:MVI A,'?' CALL DOSCO CALL DOSCI CALL DOSCO SUI '#' STA FTYPE JZ FNEW JMP START FNEW:SHLD DXADR LXI D,-1 XCHG LDA UNIT RET CLOSE:LXI B,0FFH ;CLOSE FILE,FLUSH OUTPUT BUFFER CLOSP:MOV A,C CALL BYTO DCR B JNZ CLOSP LDA OTYPE O STERR:LXI H,STAKM JMP PERR UNDIF:LXI H,UNDFM JMP PERR SUBER:LXI H,SUBRM JMP PERR DMERR:LXI H,DIMER JMP PERR NORM1:LXI H,ROMMG JMP PERR DSKER:LXI H,DISKM JMP PERR NIF DISK PSAVE: READ: WRITE: OPEN: CLOSF: ENDIF SYERR:LXI H,SYNTX PERR:CALL MESAG LXI H,ERRM CALL MESAG PRLNM:LHLD WKLN MOV A,H ORA L JZ START LXI H,INLNM CALL MESAG LHLD WKLN LXI D,INBF1 CALL CONV1 LXI H,INBF1 CALL MESAG JMP START MESAG:MOV A,M ORA A RZ CALL CHOUT INX H JMP MESAG DISKM:DB 'DISK',0 CPI 13 RNZ XRA A STA CNTR5 MVI A,10 CO: CHT1: JMP DOSCO MOVUP:MOV B,D MOV C,E XCHG LHLD END XCHG DCX B DCX H MUPLP:INX B INX H MOV A,M STAX B MOV A,E CMP L JNZ MUPLP MOV A,D CMP H JNZ MUPLP MOV H,B MOV L,C SHLD END RET MOVDN:SHLD END LDAX D MOV M,A DCX D DCX H MOV A,B ORA C RZ DCX B JMP MOVDN+3 END:DW LINES NEWPL:MOV A,M NEWP1:ADD L MOV E,A MVI A,0 ADC H MOV D,A XCHG RET ;IIIIIIIIIIII THE END IS NEAR IF DISK LOAD:CALL OPENR LHLD PSTART ALL OPENW TO OPEN FILE FOR WRITE ;CALL BYTI TO READ A BYTE ;CALL BYTO TO WRITE A BYTE ;AFTER COMPLETION OF WRITING CALL CLOSE ;TO FLUSH WRITE BUFFER ; OPENR:LXI H,WRFIL CALL GTNAM SHLD ISIZE XCHG SHLD DIADR STA IUNIT MVI A,-1 STA ICNTR RET OPENW:LXI H,WRFIL CALL GTNAM SHLD OSIZE SHLD OSIZ1 XCHG SHLD DOADR STA OUNIT XRA A LXI H,OCNTR MOV M,A INX H MOV A,M INX H MOV M,A RET INPM:DB 'INPUT' DB 0DH OUTM:DB 'OUTPUT' DB 0DH ROOMM:DB 'NO ROOM' DB 0DH XPNTR:DS 2 DOADR:SHLD DOADR DCX H LXI D,OBUFR PUSH B LDA OUNIT MVI B,0 JMP CMDSK IMORE:LHLD ISIZE ;REFRESH INPQT BUFFER MOV A,H ORA L JZ NOROM ;NO MORE TO READ DCX H SHLD ISIZE LHLD DIADR INX H SHLD DIADR DCX H LXI D,IBUFR PUSH B LDA IUNIT MVI B,1 CMDSK:MOV C,A MVI A,1 CALL DSKOM POP B JC DSKER RET ; ;READ A BYTE FROM DISK ; BYTI:PUSH D PUSH H LXI H,ICNTR MOV A,M INR A MOV M,A PUSH PSW CZ IMORE LXI H,IBUFR POP PSW CALL ADDAH MOV A,M POP H POP D RET FOPEN:EQU $ FLOK1:CARA A RNZ LHLD OSIZE ;NEW FILE,CREATE DIRECTORY ENTRY XCHG LHLD OSIZ1 MOV A,L SUB E MOV L,A MOV A,H SBB D MOV H,A SHLD OSIZE LXI H,BLANX LDA OUNIT CALL DLOOK JC NOROM XCHG LHLD DXADR XCHG MOV M,E INX H MOV M,D INX H XCHG LHLD OSIZE XCHG MOV M,E INX H MOV M,D INX H MVI M,0 LXI B,-12 DAD B XCHG LXI H,OFILE MOVLP:MOV A,M CPI 30H JC DWRIT STAX D INX D INX H JMP MOVLP BLANX:DB 0DH,' ' DB 0DH PRITN:MOV A,M CALL CO INX H CPI 0DH JNZ PRITN JMP CRLF IBUFR:DS 256 OBUFR:DS 256 ENDIF FUNCS:DW CALL,NOT DW PEEK,INP DW RND,SGN DW ABS,FREE ; WKLST:DW LIST,AUTO DW DELETE,EDIT DW RUN,SRTCH DW WARM DW PSAVE ;XXXXXXXXXXXXXXXXXXX THIS IS THE TABLE OF COMMANDS COMMS:DB 'IF' DB 80H DB 'THEN' DB 81H DB 'ELSE' DB 82H DB 'RETURN' DB 83H DB 'FOR' DB 84H DB 'TO' DB 85H DB 'NEXT' DB 86H DB 'STEP' DB 87H DB ',' DB 88H DB 'GOTO' DB 89H DB 'GOSUB' DB 8AH DB 'LET' DB 8BH DB 'END' DB 8CH DB 'STOP' DB 8DH DB ':' DB 8EH DB 'OUT' DB 'RND' DB 179 DB 'SGN' DB 180 DB 'ABS' DB 181 DB 'FREE' DB 182 DB 'LIST' DB 0F0H DB 'AUTO' DB 0F1H DB 'DEL' DB 0F2H DB 'EDIT' DB 0F3H DB 'RUN' DB 0F4H DB 'SCR' DB 0F5H DB 'BYE' DB 0F6H DB 'LOAD' DB 0F7H DB 'SAVE' DB 0F8H DB 255 CTABL:DW IF DW SYERR DW SYERR DW RTRN8 DW FOR DW SYERR DW FNEXT DW SYERR DW SYERR DW GOTO DW GOSUB DW LET DW START DW STOP DW SYERR DW OUT DW POKE DW INPUT DW PRINT DW READ DW WRITE DW SYERR DW DIM DW REM DW OPEN DW CLOSF CHAR:D*9"!"9U>2_6!"7_ z!K"I!"K"M!` 1,s y~ Җ!_^#V v`i|²*76"^"7^+~ #§~·"^!ͪ ~^  |En  :Ql 2Q#~#ng͔#~H> F!"=#~)ʡ &*=#~#~=>  #!"0!9 o"0"G1͔!1 - *G*0"Gr>02"͹͹͹͹}0>/<"= ڻ!"*=2"!ͪ "#*G+~ ¡ #ͪ ;*#͑v#¡ {V ~#V9 ¡ M{y*G+M <͟ ~¡ "T¡ "Vr#s"R!DM*R*Tͦ `i; |!#"R*I"I*R*VPÈ͟ "Px} y} x} V#^ s+r"V+"R|M = *P~#ʬ+PÈÐ~¡ #}o& ͭ h s#r!_r#^#VEͭ h O <*I"I*M!"M++PsV*K|} !O5} ##|} "M"I";~¯#~#ʯ|â>?|> |s !  *;Û22~$ ͟ ~:2<22~:2=22 8 ֟G! =v N:-ʡ *G+~)¡ #~#֯GO͏ y!v ^#Vx$ ~(¡ #' *G+~)¡ ͏ ͟ ~#ng͏ #͟ ~]H#~#+*Gz¡ {¡ ~Aڡ [ҡ G#~(ʾ !xO !"3#"5! xO ~#foʃ ~2#| N#F#xډ yډ *5͌ *3"3*5͌ "5*G+~#!5. á )¡ *3) z|B |B T B "!!6ŷ{_zW5>)D*OxGҀ !!?a ; DM!xGyOҜ )Ò {ozgE!zx#Gҿ bkxGbk͌ ܌ ÿ zg{ozg{ozg{o++++++# DB 8FH DB 'POKE' DB 90H DB 'INPUT' DB 91H DB '?' DB 92H DB 'PRINT' DB 92H DB 'READ' DB 93H DB 'WRITE' DB 94H DB '"' DB 95H DB 'DIM' DB 96H DB 'REM' DB 97H DB 'OPEN' DB 98H DB 'CLOSE' DB 99H DB 3CH,3EH,0A0H DB 3CH,3DH,0A1H DB 3EH,3DH,0A2H DB 3DH,0A3H DB 3CH,0A4H,3EH,0A5H DB 2BH,0A6H,2DH,0A7H DB 2AH,0A8H,2FH,0A9H DB 5EH,0AAH DB 'MOD' DB 171 DB 'AND' DB 172 DB 'XRA' DB 173 DB 'OR' DB 174 DB 'CALL' DB 175 DB 'NOT' DB 176 DB 'PEEK' DB 177 DB 'INP' DB 178 S 2 COUNT:DS 1 TEMP:DS 2 BNUM:DS 1 TELL:DS 1 LINE:DS 2 NUMBF:DS 7 DS 256 STACK: CNTR5:DS 1 PCHEK:DS 1 SEED:DW 100H STEP:DS 2 CNTR9:DS 1 RUNTO:DS 2 V1:DS 2 PSTART:DW LINES LSTAR:DS 2 SAVE3:DS 2 SAVE:DS 2 SAVE1:DS 2 OLDLN:DS 2 NEWLN:DS 2 LSTCH:DS 2 POINT:DS 2 NXTLN:DS 2 WKLN:DS 2 LPLVL:DW 0 SBLVL:DB 0 ENDPT:DS 2 LIMIT:DS 2 SNUM:DS 2 LVAR:DS 2 VARRS:DS 52 ARRTB:DS 52 IFILE: OFILE: INBUF:DS 96 INBF1:DS 5 WRFIL:DS 91 LINES:DB 0 OS+1FH ;DSKOM:EQU DOS+22H ;DLOOK:EQU DOSv*#;͑v!ͪ h !1w#|%_ *7~^v "I#V#^#"KV*I6En :)~ʎ#ҡ րv ~#fo~# Vá ~ zz~$*G+~ zzz¡ #~ ê#Gʿ|#~# ʡ ʚ|!%"> s2Q|"B >-s/WWWW}0s:,G*}!%Pz /"=Y*=:Qrx02Qx*w#6"ͭ h 6#~¡ #s#~¡ #~$¡ #Gw#¼~(¡ #~)¡ #~$ʣ͟ ~¡ #r#s*G+*G+~<<7#!16DM &4CC (C#r#s~ #¡ ~Aڡ [ҡ G#~(¡ #!"3! xv ~# *9w| s#r#*3͌ "3*G+~#*94ʇ)¡ *3)p#z¾*9DMp+q"9*G~#S+#>2-2-"G!#! *G͑"G`i"=}|nŷjj!Jo>gN#FzC|}! ; !$ʄ*=DM *G+*=|}"G!#ʹ0:0DM)) )O Þ0:0))))O úGA7G[| ($ ) l n&C zB Kxo&!z###' 9 ) )¡ *G+~#+|/g}/oz*X ,æ *7æ *#"9!Xyp# n Ʌo$*.}- ?|g}o ".#͇ # "=*7"A*A~ #~#^*= { *A7*A;"Aø *A"=!0 : 0DM)) )ڡ O ڡ z! "?*=*=V^ln _` ` ` o - Ox<`- q#y|- H - +>|- w|!1+ !0#~0ڋ 9  "=*=#ʞ ++ #~ ʡ #"¸ + >  Û *=~ `i6 ##}2`i *?~ X ͭ ;͑*?ͦ :<<2*A*{/_z/WDM*:Ϳͮ*A:w#r#s#*?Gw#O ͭ v;͑v!"ä !g í !8ä !ä ! ä ! ä !.ä ! ä ! ä !H !O *K|^!V *K1͔!1 ^~|# DISK NO ROOMSUBSCRIPT OUT OF RANGEUNDEFINED ARRAYREDO FROM STARTSTACKLINE NUMBERDIMENSIONMEMORY OVERFLOWSYNTAX ERROR IN LINE READY STOP>3zn > ͎!,4 2,> $BK* +#~{šzš`i""w+x ñ~_>W$   {  J R0 IFTHENELSERETURNFORT33_ZPROGRAM:EQU 2000H RAM:EQU 1100H MLAST INTRUPT:MACRO ARG PUSH PSW MVI A,ARG STA INTER POP PSW RET MACND ; WIDTH:EQU 80 DISK:EQU 0 ENTRY:EQU 5 ;CI:EQU DOS+10H ;COB:EQU DOS+0DH ;DWRIT:EQU DOS+1FH ;DSKOM:EQU DOS+22H ;DLOOK:EQU DOS+1CH WARM:EQU 0 RUB:EQU 7FH BAXCHAR:EQU 8 SECTR:EQU 128 ; ROM0:JMP FIRST NOP NOP NOP NOP NOP INTRUPT 1 INTRUPT 2 INTRUPT 3 INTRUPT 4 INTRUPT 5 INTRUPT 6 INTRUPT 7 ; DOSCO:PUSH PSW PUSH B PUSH D PUSH H MOV E,A MVI C,6 CALL ENTRY POP H POP D UI 0F0H CPI 10 JNC PTLIN ADD A LXI H,WKLST MOV E,A MVI D,0 DAD D MOV E,M INX H MOV D,M XCHG PCHL PTLIN:CALL INSRT JMP STRT1 NEW: INX B MOV H,B MOV L,C CALL EXPR MOV A,H ORA L JNZ NEWNZ LHLD PSTART MVI M,0 SHLD END JMP START NEWNZ: CALL FLAST JMP START FLAST:SHLD PSTART MVI D,0 FEND:MOV E,M DAD D DCX H MOV A,M CPI 0DH INX H JNZ NOGOOD MOV A,M ORA A JNZ FEND SHLD END RET NOGOOD:LHLD PSTART MVI M,0 SHLD END RET LIST:LXI H,INBUF+1 CALL FNDNM NXT4:MOV A,M ORA A ONEXTSTEP,GOTOGOSUBLETENDSTOP:OUTONINPUT?PRINTREADWRITE"DIMREMOPENCLOSECLEARRETIDIEI<><=>==<>+-*/^MODANDXRAORCALLNOT@INPRNDSGNABSFREELISTAUTODELEDITRUNNEWBYELOADSAVE s5  :^n  S _ gqo POP B POP PSW RET DOSCI:PUSH B PUSH D PUSH H CILOOP:MVI C,6 MVI E,0FFH CALL ENTRY ORA A JZ CILOOP POP H POP D POP B RET CNTLC:PUSH B PUSH D PUSH H MVI C,6 MVI E,0FFH CALL ENTRY POP H POP D POP B CPI 3 RET ; ;CODE STARTS HERE; ; FIRST: LXI H,LINES CALL FLAST LHLD PSTART MOV A,M INR M CMP M JZ RUN MOV M,A CALL FILL0 START:CALL CRLF LXI H,WKLN SHLD NXTLN LXI H,READY CALL MESAG STRT1:LXI SP,STACK LHLD END INX H SHLD LSTAR CALL READN CPI 2 JZ STRT1+3 MOV A,M S JZ START PRLP1:CALL CONVT MVI B,10 LXI D,INBUF PRLP2:LDAX D CALL CHOUT INX D CMP B JNZ PRLP2 CALL CNTLC JZ STOP CPI 13 JZ NXT6 CPI 20H JZ NXT5 LDA CHOIC ORA A JZ NXT4 NXT5:CALL CHIN NXT6:SUI 13 STA CHOIC JMP NXT4 CONVT:LXI D,INBUF INX H MOV A,M INX H PUSH H MOV L,M MOV H,A CALL CONV1 POP H INX H CONLP:MOV A,M ORA A JP DMOVE MVI A,32 STAX D INX D PUSH H MOV B,M LXI H,COMMS-1 FDLP6:SHLD SAVE INX H MOV A,M ORA A JP FDLP6+3 CPI 255 JZ SYERR CMP B JNZ FDLP6 LHLD SAVE INX H MOV A,M MVLP6:STAX D INX D INX H MOV A,M CMP B JNZ MVLP6 MVI A,32 POP H DMOVE:STAX D INX D CPI 13 INX H JNZ CONLP RET CHOIC:DB 0 AUTO:LXI H,1 SHLD STEP LXI H,INBUF+1 CALL EXPR XCHG CALL CCOMM XCHG JNZ NXT40 PUSH H XCHG CALL EXPR SHLD STEP POP H NXT40:SHLD POINT LP56:LXI D,INBF1 CALL CONV1 LXI H,INBF1 CALL MESAG MVI B,0 CALL PIKUP CALL INSRT LHLD POINT XCHG LHLD STEP DAD D SHLD POINT JMP LP56 CONV1:MVI A,30H STA TELL LXI B,-10000 CALL SDIG LXI B,-1LL MOVUP JMP STRT1 ;EDIT:LXI H,INBUF+1 ;CALL FNDNM ;JNC LNERR ;CALL CONVT ;LXI D,INBUF ;LXI H,INBF1 ;MVI B,4 ;MVLP8:LDAX D ;MOV M,A ;INX D ;INX H ;CALL CHOUT ;DCR B ;JNZ MVLP8 RUN:CALL FILL0 LHLD PSTART RLOOP:MOV A,M ORA A JZ START PUSH H CALL ADDAH SHLD NXTLN POP H INX H MOV D,M INX H MOV E,M INX H XCHG SHLD WKLN XCHG CALL EXEC REXEC:LHLD NXTLN JMP RLOOP EXEC:CALL CNTLC JZ STOP LXI B,RTAD1 PUSH B LDA INTER ORA A JNZ SERVE SBACK:MOV A,M ORA A JP LET CPI 177 JZ DH RZ CPI 8EH RZ JMP PRLP PRSTR:INX H CALL PAREX LDAX D MOV B,A STROUT:INX D DCR B JZ STBACK LDAX D CALL CHOUT JMP STROUT QUOTE:INX H QUOT1:MOV A,M INX H CPI 0DH JZ SYERR CPI 95H JZ PRINT CALL CHOUT JMP QUOT1 PRIHL:XCHG LXI H,NUMBF SHLD CHAR XCHG MVI A,32 CALL CO1 XRA A STA CHOIC MOV A,H ORA A JP NXT53 CALL NEGHL MVI A,'-' CALL CO1 NXT53:MVI C,47 LXI D,-10000 CALL PDIGT LXI D,-1000 CALL PDIGT LXI D,-100 CALL PDIGT LXI D,-10 CALL PDIGT MOV A,L ADI 30H CALL CO1POP H RET STREQ:INX H CALL PAREX MOV A,M CPI 0A3H JNZ SYERR INX H MOV A,M INX H CPI 95H JZ QEQ CPI '$' JNZ SYERR PUSH D CALL PAREX XTHL LDAX D MOV B,A SMOVE:LDAX D MOV M,A INX D INX H DCR B JNZ SMOVE POP H RET QEQ:XCHG MVI M,0 MOV B,H MOV C,L QEQLP:INR M INX B LDAX D INX D CPI 95H JZ OKQEQ STAX B JMP QEQLP OKQEQ:XCHG RET PAREX:MOV A,M CPI '(' JNZ SYERR INX H CALL EXPR1 XCHG MOV A,M CPI ')' JNZ SYERR INX H RET LET:MOV A,M CPI '$' JZ STREQ CALL FNDVR MOVSTA OUTPL ; MOV A,E ; DB 0D3H ;OUTPL:DS 1 ;Z80 CODE PUSH B MOV C,L MOV A,E COUT A POP B ;END Z80 CODE LHLD POINT DCX H RET FOR:POP B POP B LXI B,LPLVL LDAX B INR A STAX B CALL FNDVR MOV A,M CPI 0A3H JNZ SYERR PUSH D CALL EXPR0 SHLD SNUM LDAX D CPI 85H JNZ SYERR XCHG XTHL SHLD LVAR MOV M,D INX H MOV M,E POP H CALL EXPR0 SHLD LIMIT LDAX D CPI 87H LXI H,1 CZ EXPR9 MOV B,H MOV C,L PUSH D LHLD LIMIT XCHG LHLD SNUM CALL ISUB XCHG MOV H,B MOV L,C PUSH B CALL ID000 CALL SDIG LXI B,-100 CALL SDIG LXI B,-10 CALL SDIG MOV A,L ADI 30H STAX D INX D XRA A STAX D RET SDIG:MVI A,2FH INR A SHLD SAVE DAD B JC SDIG+2 LXI H,TELL CMP M LHLD SAVE RZ STAX D INX D XRA A STA TELL RET DELETE:LXI H,INBUF+1 CALL FNDNM SHLD LINE LHLD POINT DCX H MOV A,M PUSH PSW CPI 13 JZ ONELN POP PSW CPI 88H JNZ SYERR INX H CALL FNDNM JNC NXT50 CALL NEWPL NXT50:XCHG LHLD LINE XCHG CALL MOVUP JMP STRT1 ONELN:POP PSW JNC STRT1 LHLD LINE CALL NEWPL CALETAT INX H CPI 0A0H JNC SYERR LXI D,CTABL XCHG SUI 80H ADD A CALL ADDAH MOV A,M INX H MOV H,M MOV L,A PUSH H XCHG RET RTAD1:MOV A,M INX H CPI 13 RZ CPI 82H RZ CPI 8EH JZ EXEC JMP SYERR REM:POP H RET PRINT:MOV A,M CPI 13 JZ CRLF CPI 8EH JZ CRLF CPI 88H JZ HERE PRLP:MOV A,M CPI 95H JZ QUOTE CPI '$' JZ PRSTR CALL EXPR CALL PRIHL LHLD POINT DCX H STBACK:MOV A,M CPI 0DH JZ CRLF CPI 82H JZ CRLF CPI 8EH JZ CRLF CPI 88H JNZ SYERR HERE:EQU $ INX H MOV A,M CPI 0 LDA CNTR5 MOV B,A LHLD CHAR MOV A,L ;SUI NUMBF&255+64 LXI H,NUMBF SUB L ADD B CPI WIDTH CNC CRLF ;LXI H,NUMBF JMP MESAG PDIGT:MVI B,47 SHLD SAVE INR B DAD D JC PDIGT+2 LHLD SAVE LDA CHOIC ORA A JNZ NXT70 MOV A,B CPI 30H RZ STA CHOIC NXT70:MOV A,B CO1:PUSH H LHLD CHAR MOV M,A INX H MVI M,0 SHLD CHAR POP H RET GOTO:CALL EXPR CALL FNDN1 JNC LNERR POP B POP B JMP RLOOP LETAT:INX H CALL PAREX PUSH D MOV A,M CPI 0A3H JNZ SYERR INX H CALL EXPR XCHG XTHL MOV M,E A,M CPI 0A3H JNZ SYERR INX H PUSH D CALL EXPR POP D XCHG MOV M,D INX H MOV M,E LHLD POINT DCX H RET IF:CALL EXPR XCHG LHLD POINT DCX H MOV A,M INX H CPI 81H JNZ SYERR MOV A,E ORA D POP B JNZ EXEC ELSE:LXI B,820DH ELLOP:MOV A,M INX H CMP B JZ EXEC CMP C RZ JMP ELLOP ;POKE:CALL EXPR ;XCHG ;CALL CCOMM ;JNZ SYERR ;PUSH D ;CALL EXPR ;POP D ;XCHG ;MOV M,E ;LHLD POINT ;DCX H ;RET OUT:CALL EXPR XCHG CALL CCOMM JNZ SYERR PUSH D CALL EXPR POP D XCHG ; MOV A,L ; IV POP B MOV A,H ORA A JP POSNM LXI H,0 POSNM:INX H SHLD LIMIT POP D LHLD NXTLN FOR2:PUSH H PUSH D SHLD NXTLN LHLD LIMIT PUSH H PUSH B LHLD LVAR PUSH H LXI B,-1 PUSH B LXI B,REXEC PUSH B XCHG JMP RTAD1 FNEXT:POP B POP B CALL FNDVR SHLD ENDPT POP B INX B MOV A,B ORA C JNZ STERR POP B MOV A,C CMP E JNZ STERR MOV A,B CMP D JNZ STERR XCHG MOV D,M INX H MOV E,M XCHG POP B DAD B XCHG MOV M,E DCX H MOV M,D SHLD LVAR POP H DCX H SHLD LIMIT MOV A,H ORA L JNZ DOMOR NOMOR:POP B POP B LXI B,LPLVL LDAX B DCR A STAX B JM SYERR LHLD ENDPT MOV A,M INX H CPI 88H JZ FNEXT+2 DCX H LXI B,REXEC PUSH B JMP RTAD1 DOMOR:POP D POP H JMP FOR2 ON:CALL EXPR XCHG MOV A,M CPI 88H JNZ SYERR INX H PUSH D CALL EXPR XCHG XTHL MOV A,L ANI 7 ADD A MOV L,A MVI H,0 LXI B,VECTS DAD B PUSH H XCHG CALL FNDN1 JNC LNERR XCHG POP H MOV M,E INX H MOV M,D POP H RET SERVE:PUSH H LXI H,INTER ADD A MOV E,A MVI D,0 MOV M,D INX H DAD D MOV E,M INX H SHLD LPLVL POP H SHLD NXTLN POP H PUSH B PUSH D RET DELAY:CALL EXPR XCHG DELP:MOV A,D ORA E RZ DCX D CALL WAITS JMP DELP WAITS:LXI B,131 WAITL:DCX B MOV A,B ORA C JNZ WAITL RET INPUT:SHLD SAVE3 MOV A,M CPI 95H JNZ INPT1 INX H INPLP:MOV A,M INX H CPI 95H JZ INPT1 CALL CHOUT JMP INPLP INPT1:MVI A,'?' CALL CHOUT MVI A,32 CALL CHOUT PUSH H CALL READN POP H LXI D,INBUF CALL DEFVR RNC LXI H,REDOM CALL MESAG LHLD SAVE3 JMP INPUT+3 DEFVR:XRA A STA CNTR9 DEFLP:MOV JNZ FORWD JMP IENTER LEGL9:INX H XTHL MOV M,D INX H MOV M,E POP D POP H IENTER:MOV A,M CPI 13 RZ CPI 8EH RZ INX H CPI 88H JNZ SYERR JMP DEFLP DIM:MOV A,M CPI 41H JC SYERR CPI 'Z'+1 JNC SYERR MOV B,A INX H MOV A,M CPI '(' JNZ SYERR INX H XCHG LXI H,1 SHLD RUNTO LXI H,ARRTB-82H MOV A,B ADD A CALL ADDAH MOV A,M INX H ORA M JNZ DMERR XRA A PUSH D XCHG LHLD LSTAR MOV M,A XCHG XTHL INX D PUSH D DIMLP:CALL EXPR1 MOV A,H ORA A JM SYERR XCHG POP H MOV M,E INX M CPI 88H JNZ SYERR INX H MOV A,M CPI 95H JNZ SYERR INX H SHLD POINT CALL GTNM1 XTHL MVI M,0 INX H MOV M,A INX H MOV M,E INX H MOV M,D INX H POP D MOV M,E INX H MOV M,D LHLD POINT MVI B,95H SRCHQ:MOV A,M INX H CMP B JNZ SRCHQ RET WRITE:CALL LGLFL SHLD POINT CALL TSTFL LXI D,6 XCHG DAD D SHLD WFILE ORA A JZ DEFWT INR A JNZ DSKER TCOMM:LHLD POINT INX H MOV A,M CPI 88H JNZ SYERR WTVRS:INX H CALL EXPR CALL WRTHL XCHG MOV A,M CPI 88H JZ WTVRS RET WRTHL:MVI A, MVI B,0 LHLD WFILE INX H INX H XCHG JMP CMDSK DEFWT:DCR A STAX D INR A MOV M,A INX H MOV M,A JMP TCOMM READ:CALL LGLFL SHLD POINT CALL TSTFL LXI D,6 XCHG DAD D SHLD WFILE ORA A JZ DEFRD DCR A JNZ DSKER TCOM1:LHLD POINT INX H MOV A,M CPI 88H JNZ SYERR RDVRS:INX H CALL FNDVR PUSH H CALL RDHL XCHG MOV M,D INX H MOV M,E POP H MOV A,M CPI 88H JZ RDVRS RET RDHL:CALL READA DCR A JNZ DSKER CALL READA MOV L,A CALL READA MOV H,A RET READA:PUSH D PUSH H LHLD WFILE H MOV D,M MOV A,D ORA E JNZ GREST STA INTER EI JMP SBACK GOSUB:CALL EXPR PUSH D CALL FNDN1 JNC LNERR XCHG GREST: LXI B,SBLVL LDAX B INR A STAX B LHLD NXTLN XCHG SHLD NXTLN POP B POP PSW POP PSW PUSH B PUSH D LHLD LPLVL PUSH H LXI H,0 SHLD LPLVL DCX H DCX H PUSH H JMP REXEC RETI:POP H CALL RTRN8 EI JMP EXEC ENI:EI RET DISI:DI RET RTRN8:POP D POP B LHLD WKLN MOV A,H ORA L JZ STERR LXI H,SBLVL DCR M JM STERR POP H INX H INX H MOV A,H ORA L JNZ STERR POPA,M CPI '$' JZ GETSTR PUSH D CALL FNDVR MOV A,M CPI 88H JNZ INSTR LDA CNTR9 INR A STA CNTR9 INSTR:XTHL PUSH D CALL EXPR XCHG MOV A,M CPI 88H LDA CNTR9 JNZ ISTR1 DCR A STA CNTR9 ISTR1:ORA A JZ LEGL9 JM LEGL9 POP D POP D STC RET GETSTR:INX H PUSH D CALL PAREX PUSH H LXI H,INBF1 XCHG MVI M,1 MOV B,H MOV C,L INX B STRAN:LDAX D INX D CPI 0DH JZ STDON STAX B INX B INR M JMP STRAN STDON:POP H POP D FORWD:LDAX D INX D CPI 88H JZ IENTER CPI 8EH JZ IENTER CPI 0DH H MOV M,D INX H PUSH H INX D LHLD RUNTO CALL IMUL SHLD RUNTO LHLD POINT DCX H MOV A,M INX H XCHG LHLD LSTAR INR M XCHG CPI 88H JZ DIMLP CPI ')' JNZ SYERR POP D LHLD RUNTO DAD H XCHG MVI B,0 DMFIL:MOV M,B DCX D INX H MOV A,D ORA E JNZ DMFIL XCHG LHLD LSTAR MOV B,H MOV C,L POP H MOV M,B DCX H MOV M,C XCHG SHLD LSTAR LHLD POINT MOV A,M INX H CPI 88H JZ DIM DCX H RET IF DISK FILNM:EQU 4 OPEN:CALL LGLFL PUSH H CALL TSTFL CPI 80H JNZ DSKER XTHL INX H MOV A,01H CALL WRITA MOV A,L CALL WRITA MOV A,H WRITA:PUSH H PUSH D PUSH PSW LHLD WFILE MOV E,M INX H MOV D,M INX D MOV M,D DCX H MOV M,E INX H DAD D MOV M,A DCX D MOV A,D ANI SECTR>8 CNZ WBUFF POP PSW POP D POP H RET WBUFF:LHLD WFILE DCX H MOV D,M DCX H MOV E,M MOV A,D ORA E JZ NORM1 DCX D MOV M,E INX H MOV M,D XRA A INX H MOV M,A INX H MOV M,A LXI D,-5 DAD D MOV E,M INX H MOV D,M INX D MOV M,D DCX H MOV M,E DCX D LHLD WFILE PUSH B LXI B,-5 DAD B MOV A,M MOV E,M INX H MOV D,M INX D MOV A,D ANI SECTR>8 CNZ RBUFF LHLD WFILE MOV E,M INX H MOV D,M INX D MOV M,D DCX H MOV M,E INX H INX H DAD D MOV A,M POP H POP D RET RBUFF:MVI A,-1 MOV M,A DCX H MOV M,A DCX H MOV D,M DCX H MOV E,M MOV A,D ORA E JZ DSKER DCX D MOV M,D INX H MOV M,E DCX H DCX H MOV D,M DCX H MOV E,M INX D MOV M,E INX H MOV M,D DCX D DCX H DCX H MOV A,M LHLD WFILE INX H INX H XCHG PUSH B MVI B,1 JMP CMDSK DEFRD:INR A STAX D LXI D,SECTR-1 MOV M,E INX H MOV M,D JMP TCOM1 CLOSF:CALL LGLFL PUSH H CALL TSTFL CPI 80H JZ DSKER MVI M,80H XCHG POP H INR A RNZ PUSH H LXI H,6 DAD D SHLD WFILE XRA A MVI B,0 WLOOP:CALL WRITA DCR B JNZ WLOOP POP H RET TSTFL:MOV H,A ADD A ADD A ADD A MOV L,A LXI D,BUFFS DAD D MOV A,M RET LGLFL:MOV A,M SUI 30H JM SYERR CPI FILNM JNC SYERR RET GTNM1:CALL DLOOK JC DSKER MOV B,A MOV E,M INX H MOV D,M INX H MOV A,M INX H MOV H,M MOV L,A MOV A,B RET WFILE:DS 2 BUFFS:DS FILNM* MOV C,M INX H MOV B,M POP H POP PSW PUSH B CPI 7 RNC MOV A,D XRA H ANI 80H JZ NXT77 XCHG NXT77:MOV A,H CMP D MOV A,L LXI H,0 RNZ CMP E RET OPERS:DW INE,ILE DW IGE,IEQ DW ILT,IGT DW IADD,ISUB DW IMUL,IDIV DW EXPON DW IMOD,IAND DW IXOR,IOR ERR:POP H LXI H,0 RTRN:XCHG POP H PUSH H INR H JZ GOBAK LHLD SAVE MOV B,H MOV C,L JMP EXTRA DONE1:POP B LHLD POINT DCX H XCHG RET GOBAK:LHLD SAVE MOV A,H ORA A JZ DONE1 PUSH D PUSH H JMP EXPLP GET:SHLD POINT XCHG LXI H,0 JC DON66 CPI 183 JNC DON66 CPI 175 JNC FNCTN SUI 159 MOV B,A PUSH H LXI H,VALUS DCR A CALL ADDAH MOV C,M POP H RET RPARN:LDA PCHEK ORA A JZ SYERR DON66:LXI B,0 RET LPARN:CALL EXPR1 RETAD:XCHG LHLD POINT DCX H MOV A,M CPI ')' JNZ SYERR INX H MOV A,M INX H JMP CHEK1+1 FNCTN:SUI 175 MOV B,A ADD A PUSH H MOV C,A CALL NONUM MOV A,C LXI H,FUNCS CALL ADDAH MOV E,M INX H MOV D,M POP H MOV A,B ORA A JZ CALL MOV A,M CPI '(' JNZ SYERR INX H LXI B,RETAD PUSH B PUSH DB,0 DAD B XCHG RET ARRAY:LXI H,0 SHLD RUNTO INX H SHLD V1 LXI H,ARRTB-82H MOV A,B ADD A MOV C,A MVI B,0 DAD B MOV A,M INX H MOV H,M MOV L,A ORA H JZ UNDIF MOV A,M STA COUNT XCHG INX H INX D PUSH D ARRLP:CALL EXPR1 MOV A,H ORA A JM SUBER XCHG POP H MOV C,M INX H MOV B,M INX H PUSH H MOV A,B CMP D JC SUBER JNZ SKP47 MOV A,C CMP E JC SUBER SKP47:PUSH B LHLD V1 CALL IMUL XCHG LHLD RUNTO DAD D SHLD RUNTO POP D INX D LHLD V1 CALL IMUL SHLD V1 LHLD POINT DCX A,B SBB H MOV B,A PUSH B JNC SKIP DAD B XTHL SKIP:LXI H,BNUM CMC JMP LOOP2 IMOD:CALL IDIV XCHG RET IMUL:MOV B,H MOV C,L ORA A LXI H,0 MULP:MOV A,B RAR MOV B,A MOV A,C RAR MOV C,A JNC MSKIP DAD D MSKIP:XCHG DAD H XCHG ORA B RZ JMP MULP IADD:DAD D RET ISUB:MOV A,E SUB L MOV L,A MOV A,D SBB H MOV H,A RET EXPON:MOV B,L LXI H,0 MOV A,D ORA E RZ MOV A,B INX H ORA A RZ RAR MOV B,A JNC PLOOP MOV H,D MOV L,E PLOOP:MOV A,B ORA A RZ RAR MOV B,A PUSH B PUSH H264 ENDIF ;****** EXPRESSION EVALUATOR EXPR9:XCHG EXPR0:INX H EXPR1:MVI A,1 STA PCHEK JMP PUSH EXPR:XRA A STA PCHEK PUSH:SHLD POINT LXI H,0FFFFH PUSH H INX H PUSH H LXI H,70AH PUSH H EXPLP:LHLD POINT CALL GET SHLD POINT MOV H,B MOV L,C SHLD SAVE EXTRA:POP H PUSH H MOV A,L CMP C JNC COMLP PUSH D PUSH B JMP EXPLP COMLP:MOV A,H XCHG POP D POP D LXI B,RTRN PUSH B ORA A JZ ERR CPI 16 JNC ERR PUSH PSW ADD A PUSH H LXI H,OPERS-2 ADD L MOV L,A MVI A,0 ADC H MOV H,A LDAX D CPI '#' JZ HEX CNMLP:LDAX D INX D CPI 30H JC CHEK1 CPI 3AH JNC CHEK1 SUI 30H MOV B,H MOV C,L DAD H DAD H DAD B DAD H MOV C,A MVI B,0 DAD B JMP CNMLP HEX:INX D LDAX D INX D CPI 30H JC CHEK1 CPI 3AH JNC ALPHA SUI 30H GOTNM:DAD H DAD H DAD H DAD H MOV C,A MVI B,0 DAD B JMP HEX+1 ALPHA:CPI 'F'+1 JNC CHEK1 CPI 'A' JC CHEK1 SUI 'A'-10 JMP GOTNM CHEK1:XCHG MOV B,A CPI '[' JZ ADDR CPI '(' JZ LPARN CPI ')' JZ RPARN CPI 13 JZ DON66 ORA A JP TSTVR CPI 160 CALL EXPR1 XCHG LHLD POINT DCX H MOV A,M CPI ')' JNZ SYERR RET TSTVR:CALL NONUM CALL FNDVR XCHG MOV A,M INX H MOV L,M MOV H,A LDAX D INX D JMP CHEK1 ADDR:CALL NONUM INX H CALL FNDVR MOV A,M CPI ']' JNZ SYNTX INX H MOV A,M INX H JMP CHEK1+1 NONUM:DCX H XCHG LHLD POINT MOV A,D CMP H JNZ SYERR MOV A,E CMP L JNZ SYERR RET FNDVR:MOV A,M CPI 'A' JC SYERR CPI 'Z'+1 JNC SYERR MOV B,A INX H MOV A,M XCHG CPI '(' JZ ARRAY LXI H,VARRS-82H MOV A,B ADD A MOV C,A MVI H MOV A,M INX H XCHG LXI H,COUNT DCR M JZ DON47 XCHG CPI 88H JZ ARRLP JMP SYERR DON47:CPI ')' JNZ SYERR LHLD RUNTO DAD H POP B DAD B XCHG RET IDIV:MOV A,D XRA H ANI 80H PUSH PSW MOV A,H ORA A CM NEGHL XCHG MOV A,H ORA A CM NEGHL XCHG CALL DIV POP PSW RZ JMP NEGHL DIV:SHLD TEMP LXI H,BNUM MVI M,17 LXI B,0 PUSH B ORA A LOOP2:MOV A,E RAL MOV E,A MOV A,D RAL MOV D,A DCR M POP H XCHG RZ XCHG MVI A,0 ADC A DAD H MOV B,H ADD L LHLD TEMP SUB L MOV C,A MOV PUSH PSW MOV H,D MOV L,E CALL IMUL XCHG POP PSW POP H CC IMUL POP B JMP PLOOP IAND:MOV A,D ANA H MOV H,A MOV A,E ANA L MOV L,A RET IOR:MOV A,D ORA H MOV H,A MOV A,E ORA L MOV L,A RET IXOR:MOV A,D XRA H MOV H,A MOV A,E XRA L MOV L,A RET IEQ:RNZ DCX H RET INE:RZ DCX H RET ILT:RC RZ DCX H RET IGT:RNC DCX H RET ILE:RC DCX H RET IGE:DCX H RC RZ INX H RET PEEK:XCHG MOV L,M MVI H,0 RET NOT:XCHG JMP FLIP ABS:MOV A,D ORA A XCHG RP JMP NEGHL INP: ;MOV A,E ;STA INPPL ;DB 0DBH ;INPPL:DS 1 ;Z80 CODE PUSH B MOV C,E CIN A POP B ;END Z80 CODE MOV L,A MVI H,0 RET SGN:LXI H,-1 MOV A,D ORA A RM INX H ORA E RZ INX H RET CALL:INX H LXI D,RETAD PUSH D CLLOP:CALL EXPR1 PUSH H CALL CCOMM JZ CLLOP CPI ')' JNZ SYERR RET CCOMM:LHLD POINT DCX H MOV A,M INX H CPI 88H RET NEGHL:DCX H FLIP:MOV A,H CMA MOV H,A MOV A,L CMA MOV L,A RET FREE:MOV A,D ORA E LHLD LSTAR RZ XCHG LHLD PSTART JMP ISUB CLEAR: FILL0: XCHG XRA A STA SAVE MVI B,0 LHLD PSTART SHLD OLDLN FLOOP:LHLD OLDLN MOV A,M ORA A JZ NOCAR INX H MOV A,M INX H MOV E,M LHLD SAVE CMP H JC GBACK JNZ NOCAR MOV A,E CMP L JC GBACK JNZ NOCAR LHLD OLDLN STC RET GBACK:LHLD OLDLN CALL NEWPL SHLD OLDLN JMP FLOOP NOCAR:LHLD OLDLN ORA A RET LEGAL:SHLD SAVE XCHG LXI H,0 LP95:LDAX D CPI 30H JC DONE5 CPI 3AH JNC DONE5 INX D SUI 30H MOV B,H MOV C,L DAD H DAD H DAD B DAD H JC SYERR MOV C,A MVI B,0 DAD B JC SYERR JMP LP95 DONE5:XCHG M MOV A,M CPI '0' JC NXTCH CPI '9' JC COPY NXTCH:CPI 13 JZ RETRN CPI ' ' JZ CHGLP SHLD SAVE LXI D,COMMS FDLP1:LHLD SAVE LDAX D CMP M INX D INX H JZ FDLP1+3 CPI 255 JZ COPY1 ORA A JP AHEAD DCX H DCX H CPI 95H JNZ COPY STAX B INX B INX H QLOOP:MOV A,M CPI 0DH JZ SYERR STAX B INX B INX H CPI '"' JNZ QLOOP DCX H DCX B MVI A,95H JMP COPY AHEAD:LDAX D INX D ORA A JP AHEAD JMP FDLP1 COPY1:LHLD SAVE MOV A,M COPY:STAX B INX B JMP CHGLP RETRN:MOV H,B MOV L,C MVI M,13 H MOV M,E INX H XCHG LHLD SAVE1 XCHG SUI 3 MOV B,A PUTLP:LDAX D MOV M,A INX D INX H DCR B JNZ PUTLP RET DELLN:XCHG CALL FNDN1 JNC STRT1 CALL NEWPL CALL MOVUP JMP STRT1 LNERR:LXI H,LINEM JMP PERR STOP:LXI H,STOPM CALL MESAG JMP PRLNM MEMOV:LXI H,OVEMG JMP PERR STERR:LXI H,STAKM JMP PERR UNDIF:LXI H,UNDFM JMP PERR SUBER:LXI H,SUBRM JMP PERR DMERR:LXI H,DIMER JMP PERR NORM1:LXI H,ROMMG JMP PERR DSKER:LXI H,DISKM JMP PERR NIF DISK PSAVE: READ: WRITE: OPEN: CLOSF: E 'SYNTAX',0 ERRM:DB ' ERROR',0 INLNM:DB ' IN LINE ',0 READY:DB 'READY',13,0 STOPM:DB 'STOP',0 CHIN:MVI A,0 CALL DOSCI CPI 3 RNZ CALL CRLF JMP STOP CRLF:MVI A,13 CHOUT:CALL CHT1 PUSH H LXI H,CNTR5 INR M ;PUSH PSW ;MOV A,M ;ANI 63 ;MOV M,A ;POP PSW POP H CPI 13 RNZ XRA A STA CNTR5 MVI A,10 CO: CHT1: JMP DOSCO MOVUP:MOV B,D MOV C,E XCHG LHLD END XCHG DCX B DCX H MUPLP:INX B INX H MOV A,M STAX B MOV A,E CMP L JNZ MUPLP MOV A,D CMP H JNZ MUPLP MOV H,B MOV L,C SHLD SBLVL MOV H,A MOV L,A SHLD WKLN SHLD LPLVL LHLD END INX H SHLD LSTAR LXI H,VARRS MVI B,0 MVI C,121 FL0LP:MOV M,B INX H DCR C JNZ FL0LP XCHG RET ADDAH:ADD L MOV L,A RNC INR H RET RND:LHLD SEED MVI B,11H MOV A,L RND1:ANI 2DH JPO RSKIP CMC RSKIP:MOV A,H RAR MOV H,A MOV A,L RAR MOV L,A DCR B JNZ RND1 SHLD SEED INX H XCHG CALL IMOD INX H RET VALUS:DB 5,5,5,5 DB 5,5,10,10 DB 15,15,16,15,3 DB 2,2 ;============= END OF EXPRESSION EVALUATOR FNDNM:CALL EXPR FNDN1:SHLDOV A,D ORA E JZ EXIT1 SHLD SAVE1 LHLD SAVE RET EXIT1:POP H LHLD SAVE CALL EXEC JMP START XREAD: MVI B,0 PIKUP:CALL CHIN CPI 3 JZ STOP CPI 95 JZ BACK CPI 7FH JZ BACK CPI 8 JZ BACK CPI 13 JZ DONE CPI 32 JC PIKUP MOV C,A MOV A,B INR A CPI 96 JZ PIKUP MOV M,C INX H INR B MOV A,C CALL CHOUT JMP PIKUP BACK:MOV C,B DCR C JM PIKUP DCR B DCX H MVI A,BAXCHAR CALL CHOUT JMP PIKUP DONE:MOV M,A JMP CHOUT READN:LXI H,INBF1 CALL XREAD LXI H,INBF1-1 LXI B,INBUF CHGLP:INX H INX H INX H LXI B,INBUF MOV A,L SUB C STA COUNT MOV H,B MOV L,C RET ;OOOOOOOOOOOOOO INSRT:CALL LEGAL LHLD SAVE1 MOV A,M CPI 13 JZ DELLN PUSH D XCHG CALL FNDN1 JNC NXT3 CALL NEWPL CALL MOVUP NXT3:LXI D,INBUF LHLD SAVE1 XCHG CALL ISUB LDA COUNT SUB L INR A INR A STA COUNT LHLD OLDLN XCHG LHLD END MOV A,E CMA MOV E,A MOV A,D CMA MOV D,A INX D DAD D MOV B,H MOV C,L LHLD END LDA COUNT CALL NEWP1 CALL MOVDN LHLD OLDLN LDA COUNT MOV M,A INX H POP D MOV M,D INXNDIF SYERR:LXI H,SYNTX PERR:CALL MESAG LXI H,ERRM CALL MESAG PRLNM:LHLD WKLN MOV A,H ORA L JZ START LXI H,INLNM CALL MESAG LHLD WKLN LXI D,INBF1 CALL CONV1 LXI H,INBF1 CALL MESAG JMP START MESAG:MOV A,M ORA A RZ CALL CHOUT INX H JMP MESAG DISKM:DB 'DISK',0,0DH ROMMG:DB 'NO ROOM',0 SUBRM:DB 'SUBSCRIPT OUT OF RANGE',0 UNDFM:DB 'UNDEFINED ARRAY',0 REDOM:DB 'REDO FROM START',0 STAKM:DB 'STACK',0 LINEM:DB 'LINE NUMBER',0 DIMER:DB 'DIMENSION',0 OVEMG:DB 'MEMORY OVERFLOW',0 SYNTX:DBEND RET MOVDN:SHLD END LDAX D MOV M,A DCX D DCX H MOV A,B ORA C RZ DCX B JMP MOVDN+3 NEWPL:MOV A,M NEWP1:ADD L MOV E,A MVI A,0 ADC H MOV D,A XCHG RET ;IIIIIIIIIIII THE END IS NEAR IF DISK LOAD:CALL OPENR LHLD PSTART LOADN:CALL BYTI MOV M,A ORA A JZ LDDUN INX H DCR A MOV B,A LODLP:CALL BYTI MOV M,A INX H DCR B JNZ LODLP JMP LOADN LDDUN:SHLD END JMP START PSAVE:CALL OPENW LHLD PSTART SAVLP:MOV A,M CALL BYTO INX H ORA A JZ SVDUN MOV B,A DCR B SAVL1:MOV A,M INX H CALL BYTO DCR B JNZ SAVL1 JMP SAVLP SVDUN:CALL CLOSE JMP START ENDIF ;IIIIIIIIIIII THE END IS NEAR IF DISK ;NORTH STAR DISK FILE ROUTINE ; ;MAINTAINS SECTOR BUFFERS FOR INPQT AND OUTPUT ;CALL OPENR TO OPEN A FILE FOR READ ;CALL OPENW TO OPEN FILE FOR WRITE ;CALL BYTI TO READ A BYTE ;CALL BYTO TO WRITE A BYTE ;AFTER COMPLETION OF WRITING CALL CLOSE ;TO FLUSH WRITE BUFFER ; OPENR:LXI H,WRFIL CALL GTNAM SHLD ISIZE XCHG SHLD DIADR STA IUNIT MVI A,-1 STA ICNTR RET OPENW:LXI H,XI H,OCNTR PUSH H MOV A,M MOV D,A LXI H,OBUFR CALL ADDAH MOV M,E POP H INR D MOV M,D CZ OMORE POP H POP D POP PSW RET OMORE:LHLD OSIZE ;REFRESH OUTPUT BUFFER MOV A,H ORA L JZ NOROM DCX H SHLD OSIZE LHLD DOADR INX H SHLD DOADR DCX H LXI D,OBUFR PUSH B LDA OUNIT MVI B,0 JMP CMDSK IMORE:LHLD ISIZE ;REFRESH INPQT BUFFER MOV A,H ORA L JZ NOROM ;NO MORE TO READ DCX H SHLD ISIZE LHLD DIADR INX H SHLD DIADR DCX H LXI D,IBUFR PUSH B LDA IUNIT MVI B,1 CMDSK:MOV C,A A,'?' CALL DOSCO CALL DOSCI CALL DOSCO SUI '#' STA FTYPE JZ FNEW JMP START FNEW:SHLD DXADR LXI D,-1 XCHG LDA UNIT RET CLOSE:LXI B,0FFH ;CLOSE FILE,FLUSH OUTPUT BUFFER CLOSP:MOV A,C CALL BYTO DCR B JNZ CLOSP LDA OTYPE ORA A RNZ LHLD OSIZE ;NEW FILE,CREATE DIRECTORY ENTRY XCHG LHLD OSIZ1 MOV A,L SUB E MOV L,A MOV A,H SBB D MOV H,A SHLD OSIZE LXI H,BLANX LDA OUNIT CALL DLOOK JC NOROM XCHG LHLD DXADR XCHG MOV M,E INX H MOV M,D INX H XCHG LHLD OSIZE XCHG MOV M,E B 'RETURN' DB 83H DB 'FOR' DB 84H DB 'TO' DB 85H DB 'NEXT' DB 86H DB 'STEP' DB 87H DB ',' DB 88H DB 'GOTO' DB 89H DB 'GOSUB' DB 8AH DB 'LET' DB 8BH DB 'END' DB 8CH DB 'STOP' DB 8DH DB ':' DB 8EH DB 'OUT' DB 8FH DB 'ON' DB 90H DB 'INPUT' DB 91H DB '?' DB 92H DB 'PRINT' DB 92H ; IF DISK DB 'READ' DB 93H DB 'WRITE' DB 94H ENDIF ; DB '"' DB 95H DB 'DIM' DB 96H DB 'REM' DB 97H ; IF DISK DB 'OPEN' DB 98H DB 'CLOSE' DB 99H ENDIF ; DB 'CLEAR' DB 9AH DB 'RETIUN' DB 0F4H DB 'NEW' DB 0F5H DB 'BYE' DB 0F6H DB 'LOAD' DB 0F7H DB 'SAVE' DB 0F8H DB 255 CTABL:DW IF DW SYERR DW SYERR DW RTRN8 DW FOR DW SYERR DW FNEXT DW SYERR DW SYERR DW GOTO DW GOSUB DW LET DW START DW STOP DW SYERR DW OUT DW ON DW INPUT DW PRINT DW READ DW WRITE DW SYERR DW DIM DW REM DW OPEN DW CLOSF DW CLEAR DW RETI DW DISI DW ENI DW DELAY ; ORG RAM DS 256 STACK: CHAR:DS 2 COUNT:DS 1 TEMP:DS 2 BNUM:DS 1 TELL:DS 1 LINE:DS 2 NUMBF:DS 7 CNTR5:DS 1 PWRFIL CALL GTNAM SHLD OSIZE SHLD OSIZ1 XCHG SHLD DOADR STA OUNIT XRA A LXI H,OCNTR MOV M,A INX H MOV A,M INX H MOV M,A RET INPM:DB 'INPUT' DB 0DH OUTM:DB 'OUTPUT' DB 0DH ROOMM:DB 'NO ROOM' DB 0DH XPNTR:DS 2 DOADR:DS 2 DOAD1:DS 2 OCNTR:DB 0 FTYPE:DS 1 OTYPE:DS 1 OSIZ1:DS 2 OSIZE:DS 2 OUNIT:DS 1 IUNIT:DS 1 DIADR:DS 2 DIAD1:DS 2 ICNTR:DB 0FFH ISIZE:DS 2 UNIT:DB 0 DXADR:DW 0 DPNTR:DW 0 ; ;WRITE A BYTE TO DISK ; COX:CALL CO BYTO:PUSH PSW PUSH D PUSH H MOV E,A L MVI A,1 CALL DSKOM POP B JC DSKER RET ; ;READ A BYTE FROM DISK ; BYTI:PUSH D PUSH H LXI H,ICNTR MOV A,M INR A MOV M,A PUSH PSW CZ IMORE LXI H,IBUFR POP PSW CALL ADDAH MOV A,M POP H POP D RET FOPEN:EQU $ FLOK1:CALL CRLF CALL PRITN XRA A DCR A STA FTYPE XCHG SHLD XPNTR FLOK2:LHLD XPNTR GTNAM:SHLD XPNTR MVI A,1 STA FTYPE CALL DLOOK STA UNIT JC DERR MOV E,M INX H MOV D,M INX H LHIN1:MOV A,M INX H MOV H,M MOV L,A LDA UNIT RET NOROM:EQU NORM1 DERR:MVIINX H MOV M,D INX H MVI M,0 LXI B,-12 DAD B XCHG LXI H,OFILE MOVLP:MOV A,M CPI 30H JC DWRIT STAX D INX D INX H JMP MOVLP BLANX:DB 0DH,' ' DB 0DH PRITN:MOV A,M CALL CO INX H CPI 0DH JNZ PRITN JMP CRLF IBUFR:DS 256 OBUFR:DS 256 ENDIF FUNCS:DW CALL,NOT DW PEEK,INP DW RND,SGN DW ABS,FREE ; WKLST:DW LIST,AUTO DW DELETE,SYERR ;EDIT DW RUN,NEW DW WARM DW PSAVE ;XXXXXXXXXXXXXXXXXXX THIS IS THE TABLE OF COMMANDS COMMS:DB 'IF' DB 80H DB 'THEN' DB 81H DB 'ELSE' DB 82H D' DB 9BH DB 'DI' DB 9CH DB 'EI' DB 9DH DB 'DELAY' DB 9EH DB 3CH,3EH,0A0H DB 3CH,3DH,0A1H DB 3EH,3DH,0A2H DB 3DH,0A3H DB 3CH,0A4H,3EH,0A5H DB 2BH,0A6H,2DH,0A7H DB 2AH,0A8H,2FH,0A9H DB 5EH,0AAH DB 'MOD' DB 171 DB 'AND' DB 172 DB 'XRA' DB 173 DB 'OR' DB 174 DB 'CALL' DB 175 DB 'NOT' DB 176 DB '@' DB 177 DB 'INP' DB 178 DB 'RND' DB 179 DB 'SGN' DB 180 DB 'ABS' DB 181 DB 'FREE' DB 182 DB 'LIST' DB 0F0H DB 'AUTO' DB 0F1H DB 'DEL' DB 0F2H ;DB 'EDIT' ;DB 0F3H DB 'RCHEK:DS 1 SEED:DW 100H STEP:DS 2 CNTR9:DS 1 RUNTO:DS 2 V1:DS 2 PSTART:DS 2 LSTAR:DS 2 SAVE3:DS 2 SAVE:DS 2 SAVE1:DS 2 OLDLN:DS 2 NEWLN:DS 2 LSTCH:DS 2 POINT:DS 2 NXTLN:DS 2 WKLN:DS 2 LPLVL:DS 2 SBLVL:DS 1 ENDPT:DS 2 LIMIT:DS 2 END:DS 2 SNUM:DS 2 LVAR:DS 2 VARRS:DS 52 ARRTB:DS 52 INTER:DS 1 VECTS:DS 16 IFILE: OFILE: INBUF:DS 96 INBF1:DS 5 WRFIL:DS 91 ; ; ORG PROGRAM LINES:DB 0 MLAST INTRUPT:MACRO ARG PUSH PSW MVI A,ARG STA INTER POP PSW RET MACND ; WIDTH:EQU 801͕ ! ̓ :;ʥ:] B!5̓ # @ *KC1*Kd ʼL W_ʂ pF=Iʓiʓ_"A *Y"["p+T]Z!""[[W{OzGʰT]#+"Wð "Kð4@ "Kð4Q+~# QQ+Q~͍Q#~ pQ~͍Q#Q "@+~#2*K*,6C*Kd &,w#"K ¤[ʤ6 #"Käz{KW*Y%}|;y w#! 6B#6A#6K  *d|͏ͦgʥX *["[*d/+|/"dMAO*[+"["8! ^#V"n+"d*8"[*n2c!"d"6<>*[~+"[͝ ~ ͍#@D;>- 2c1@@0o1T])))0O "d"6 !"6"d*[+~"[A[?a{? *[+~"[0:?͢²*[*Ka "f*h"KG~s7ȹ7#c#"h@ʏ&ʗʫ¤#"h{ aڤ#a"[à*W#q*[~+½# "@*K+ #"h*@"[*f"K>+G~7ȹ7+Ւ, *f"K*Kͭ̓/z) {*K͢S ͭ*K"K͏ // @ *d|5 ~r # ] z] "K/*W*B6 z{> > !l ʳ 4 ³ 6 5> ~¹ * Ò:m *Ā  33>^͟ @͟  >$͜  , *###̀d y  * ̀d :m/2m> ~ ʕ #à EDIT TEXT EDITOR DISKERROR ILLEGAL NO ROOM CANNOT FIND INPUT ! ̓ å! ! *a*Y6*a6!  ~#  q#' -  !^+~ !~ z ~# ] > ~ U "W6/;#~͈ z 6: ;`   Q?#  p>  ) + ? Si>? > /*!~+ å5pͳ<ʥ*K"@pK~K# ='"K,*K~/ # T& ʃp:: T> ʃ2:T"K/"d*W *B6 *d*W"W*K*_6*d*]"]*_"_*KF6~+x*dDM*K*]5 *_͒*OxGCd*WS[@ʤ+"Kä*@"K*Kd+"W> å:2G :Ga:G:O{_͙~# i  i~# Ê~ȷ* ®2:ʾ:K:L 2:yi:: 2y:aɯx  P +~7#+  %~7# 44#~ +RyD> > ʥDDsœyW#6ҥ!l5555: > : w+ʱO W6 ͚ +W yHWWw+"a͕ /:]@!!\    :\!+:m  !"f+@&"+/"f+ /+}o|g*_"]|*K"_/"]/*]*_6!"K/*Wcv5 ͢ʂ͗"d*d*K!"c"d*d|/g}/o#:cͭ5  *d|͢> *K~+~+z##*W6!6"K*K~+ ## "K*W"K!~#)z*f"h*W *[*K>+K#6*h*f6z§|w#q"[͢"Ko*h*W#RDM+"W*WFq*W"Ww+ùpm*[~*Kv*K ͒"K5 *KB͢ "K*h*d*665! ̓ *[~ʥ + 25 B*d+|'!9}/͕ *K~6͓ *K~c # S S *W+6r *W+~‚ : #{zu w/~ʥ + • • !6B*h*f6*W *h*[+*fE, *[~ *W6 !*W6 x !.  ͒*D|1 ͥ *W6#6>2; *!     *u" :w2   :c# ''']"K!"_5 *]%*_%6 | 5Ͱ{! ͕ ̓ !M> ʥʥB@ʆoow#w~ BÚ }++͂B>? >+!"D7ͥ/'# /'*D|7y *W- Ć*W~͆# 6"W7?*W67!"@*W6!"K. *@*W6(͒7?!6"K"W7> |?}HƐ'@' *W6"Q$|2T ~#sl"NJ͕ ~# ^#V#5 €͕ / *ѯ!~+:~### ##. w#! w# !\w#* !"DA |?}HƐ'@' *W6"Q$|2T ~#sl"NJ͕ ~# ^#V#5 €͕ / *ѯ!~+:~### ##. w#! w#