CPI '-' JZ SUBV CPI '+' JZ ADDV CALL GVALUE JMP AVAL ADDV INX H CALL GVALUE LDA TEMP ADD E CPI 100 JP OVMSG MOV E,A JMP AVAL SUBV INX H CALL GVALUE LDA TEMP SUB E CPI 9DH JP AVAL-1 CPI 100 JP UNMSG MOV E,A AVAL CALL ASSIGN RET EXMSG CALL TOP LXI H,EXPMSG CALL ERROR RET OVMSG MVI E,99 CALL ASSIGN CALL TOP LXI H,OVMSG CALL ERROR RET UNMSG MVI E,-99 CALL ASSIGN CALL TOP LXI H,UNFMSG CALL ERROR RET GVALUE CALL GETCH MOV E,A CALL LETTER JZ LTR CALL GETNM SHLD CPTR RET LTR SHLD CPTR CONV MOV B,M CALL VARMCH CPI 1 CZ BADFRM RZ INX H MOV E,M RET ASSIGN LHLD HLSAV CALL GETCH CALL LETTER JNZ EXMSG MOV B,M CALL VARMCH CPI 1 CZ BADFRM RZ INX H MOV M,E RET BASIC ORA H RET ROP RET EOP LDA LEVEL ORA A JZ RSTRT CALL RESRET RET LOAD LXI H,PBUFF CALL INPUT RET NEWN LHLD APTR MVI M,20H LHLD MEMTP MVI M,1 DCX H SHLD APTR RET INITV LXI H,NVAR MVI B,'A' MOV A,B NV CPI 'Z'+1 RZ MOV M,A INX H MVI A,0 MOV M,A INX H MOV A,B ADI 1 MOV B,A JMP NV SAVRET LXI H,LEVEL MOV A,M ADI 1 CPI 8 JM SAV2 LXI H,STMSG CALL ERROR RET SAV2 MOV M,A ADD A MOV C,A LHLD IPTR XCHG LXI H,RETSAV MOV A,L ADD C MOV L,A MOV M,D ADI 1 MOV L,A MOV M,E RET RESRET LDA LEVEL ADD A MOV C,A LXI H,RETSAV MOV A,L ADD C MOV L,A MOV D,M ADI 1 MOV L,A MOV E,M XCHG SHLD IPTR LXI H,LEVEL MOV A,M SUI 1 MOV M,A RET BLKTFR MOV A,C ORA A RZ MOV B,M INX H XCHG MOV M,B INX H XCHG MOV A,C SUI 1 MOV C,A JNZ BLKTFR RET KEYIN LXI H,EBUFF SHLD EPTR LXI H,CHMAX MOV B,M KIN2 LHLD EPTR CALL CI CPI 5FH JZ CANC CPI 7FH JZ CANC CPI 15H JZ CANL CPI 61H JM NTR XRI 20H NTR MOV M,A INX H SHLD EPTR CPI 0DH JZ KOUT DCR B MOV A,B ORA A JNZ KIN2 MVI C,0DH MOV M,C CALL CO KOUT CALL LF RET CANL MVI C,3CH CALL CO CALL CRLF JMP KEYIN CANC MOV A,B LXI H,CHMAX MOV C,M CMP C JZ KIN2 INR B LHLD EPTR DCX H SHLD EPTR JMP KIN2+3 CRLF MVI C,0DH CALL CO LF MVI C,0AH CALL CO RET INPUT CALL BLKBF LXI H,PBUFF INPT1 MOV A,M SHLD LLSAV CPI 1 JZ CHOP CALL RI CPI ' ' JNZ INPT3+3 JMP INPT1 INPT2 MOV A,M CPI 1 JZ CHOP INPT3 CALL RI CPI 0 JZ INPT3 CPI 7FH JZ INPT3 CPI 1AH JZ INEND CPI 15H JZ KLN CPI 5FH JZ CLC MOV M,A INX H CPI 0DH JNZ INPT2 CALL LF JMP INPT1 INPT4 MOV M,A INX H JMP INPT2 CLC DCX H JMP INPT3 KLN MVI C,3CH CALL CO CALL CRLF LHLD LLSAV JMP INPT3 CHOP LHLD LLSAV CALL DSPLY LXI H,IOVMSG CALL ERROR INEND MVI M,1 SHLD TOPP CALL CRLF LXI H,LEVEL MVI M,0 RET DSPLY MOV A,M INX H MOV D,H MOV E,L CPI 1 RZ MOV C,A LHLD OUTADR CALL OVCTR CPI 0DH JZ ENDOL XCHG JMP DSPLY ENDOL MVI C,0AH LHLD OUTADR CALL OVCTR XCHG CALL SKLN RET OVCTR PCHL PRGOUT LXI H,PBUFF CALL DSPLY CPI 1 JNZ PRGOUT+3 RET DPRG LXI H,CO SHLD OUTADR CALL PRGOUT RET LPRG LXI H,LO SHLD OUTADR CALL PRGOUT LXI H,CO SHLD OUTADR RET SPRG LXI H,PO SHLD OUTADR CALL PRGOUT LXI H,CO SHLD OUTADR RET CHO PUSH B PUSH D PUSH H PUSH PSW CALL 0C01FH JZ CHO1 CPI 1AH JZ INT2 CHO1 POP PSW POP H POP D POP B PUSH B PUSH D PUSH H PUSH PSW MOV B,C CALL 0C019H POP PSW POP H POP D POP B RET INT2 POP PSW POP H POP D POP B INTR PUSH H PUSH D PUSH B LXI H,INTMSG CALL ERROR CALL ENTR POP B POP D POP H RET CHI PUSH D PUSH B PUSH H CHI2 CALL 0C01FH JZ CHI2 CPI 15H JZ RBO CPI 5FH JZ DEL CPI 7FH JZ DEL MOV C,A PUSH PSW CALL CO POP PSW POP H POP B POP D RET RBO MVI C,0DH PUSH PSW PUSH B CALL CO POP B CALL CO POP PSW POP H POP B POP D RET DEL PUSH PSW MVI C,01 CALL CO POP PSW POP H POP B POP D RET ERROR CALL DSPLY XRA A RET BLMSG ASC '- LABEL NOT FOUND' DB 0DH IOVMSG ASC '/OVERFLOW' DB 0DH NRMSG ASC '*NO ROOM' DB 0DH EXPMSG ASC '*ILLEGAL EXPRESSION' DB 0DH OVFMSG ASC '*VALUE > 99' DB 0DH UNFMSG ASC '*VALUE < -99' DB 0DH STMSG ASC '*USE DEPTH EXCEEDED' DB 0DH NMSG ASC '*NUMERIC RESPONSE REQUIRED' DB 0DH INTMSG ASC '*INTERRUPTED' DB 0DH IBUFF ASC 'T:' DB 0DH ASC 'T:PILOT-8080, 1.1' DB 0DH ASC ':LOAD A NEW PROGRAM FROM THE CONSOLE SANS EDITOR?' DB 0DH ASC 'A:' DB 0DH ASC 'M: Y' DB 0DH ASC 'JN:*EDIT' DB 0DH ASC 'T:ENTER PILOT PROGRAM' DB 0DH ASC ':TERMINATE INPUT WITH CTL/Z' DB 0DH ASC 'LOAD:' DB 0DH ASC '*EDIT' DB 0DH ASC 'T: LOAD A NEW PROGRAM FROM CONSOLE WITH EDITOR?' DB 0DH ASC 'A:' DB 0DH ASC 'M: Y' DB 0DH ASC 'JN:*OEDIT' DB 0DH ASC 'NEDIT:' DB 0DH ASC '*OEDIT' DB 0DH ASC 'T: EDIT AN EXISTING PROGRAM?' DB 0DH ASC 'A:' DB 0DH ASC 'M: Y' DB 0DH ASC 'JN:*DISK DB 0DH ASC 'EDIT:' DB 0DH ASC '*DISK' DB 0DH ASC 'T: LOAD A NEW PROGRAM FROM DISK?' DB 0DH ASC 'A:' DB 0DH ASC 'M: Y' DB 0DH ASC 'JN:*TAPE' DB 0DH ASC 'DLOAD:' DB 0DH ASC '*TAPE' DB 0DH ASC 'T: LOAD A NEW PROGRAM FROM TAPE?' DB 0DH ASC 'A:' DB 0DH ASC 'M: Y' DB 0DH ASC 'JN:*%' DB 0DH ASC 'CLOAD:' DB 0DH ASC '*% IEP:' COPY PILO4:S/1