EDTR LXI H,EDMSG CALL DSPLY LXI H,1 SHLD LINCT LXI H,PBUFF SHLD LINST EDIT1 LXI H,PBUFF MOV A,M CPI 01H JZ MPRT CALL GCOM CALL EDIT2 JMP EDIT1 MPRT LXI H,MSGL CALL DSPLY CALL GCOM CALL PCOM LXI H,1 SHLD LINCT JMP EDIT1 MSGL ASC 'PGM SPACE EMPTY--ENTER `I` OR `E`' DB 0DH PCOM CPI 'E' JZ EDRTR CPI 'I' JZ INSTX POP H JMP MPRT GCOM LXI H,RCOM CALL DSPLY CALL CHI STA EDCOM CALL CRLF LDA EDCOM RET EDIT2 CPI 'E' JZ EDRTR CPI 'P' JZ DPRG CPI 'N' JZ NEXT CPI 'B' JZ BACK CPI 'C' JZ CURPR CPI 'D' JZ KILL CPI 'I' JZ INST CPI 'R' JZ RESE CPI 'Z' JZ LASTL LXI H,EDMS1 CALL DSPLY RET RESE LXI H,1 SHLD LINCT XCHG LXI H,PBUFF SHLD LINST RET CURPR LHLD LINST CALL DSPLY RET KILL LHLD LINCT MVI A,0 MOV C,A CMP H JNZ KILL3 INR A CMP L JNZ KILL3 MOV C,A KILL3 LHLD LINST XCHG CALL NXTAD MOV A,M CPI 1 JNZ KILL1 CMP C JNZ KILL4 STA PBUFF JMP KIRET KILL4 STAX D LHLD LINCT DCX H SHLD LINCT CALL BKADR JMP KIRET KILL1 MOV A,M STAX D INX H INX D CPI 1 JNZ KILL1 KIRET RET NXTAD LHLD LINST NXTA1 MOV A,M CPI 0DH INX H JNZ NXTA1 SHLD TEMX RET INST CALL NXTAD MVI C,'=' CALL CHO CALL KEYIN LDA CHMAX SUB B INR A STA CCNT CALL EMEM SHLD CEPTR LDA CCNT MOV E,A MVI D,0 DAD D SHLD EOPTR LXI D,PBUFE MOV A,D CMP H JC IERR JNZ IOKAY MOV A,E CMP L JNC IOKAY IERR LXI H,OSMSG CALL DSPLY JMP IRET IOKAY LHLD EOPTR MVI A,1 MOV M,A XCHG LHLD TEMX MOV C,M CMP C MOV M,A LHLD CEPTR XCHG JZ INST6 INST3 DCX H DCX D LDAX D CPI 1 JZ INST4 MOV M,A JMP INST3 INST4 MOV M,C INST6 LDA CCNT MOV C,A LHLD TEMX XCHG LXI H,EBUFF CALL BLKTFR LHLD LINCT INX H SHLD LINCT LHLD TEMX SHLD LINST IRET RET EMEM LXI H,PBUFF EMEM1 MOV A,M INX H CPI 1 JNZ EMEM1 DCX H RET INSTX MVI C,'=' CALL CHO CALL KEYIN LDA CHMAX SUB B INR A MOV C,A LXI H,PBUFF XCHG LXI H,EBUFF CALL BLKTFR MVI A,01 STAX D RET OSMSG ASC '--PROGRAM SPACE FULL--' DB 0DH CEPTR DS 2 TEMX DS 2 CCNT DS 1 EOPTR DS 2 NEXT LHLD LINST NEXT1 MOV A,M CPI 0DH INX H JNZ NEXT1 MOV A,M CPI 1 JNZ NEXT2 LXI H,EOFMS CALL DSPLY JMP NEXRT NEXT2 SHLD LINST CALL DSPLY LHLD LINCT INX H SHLD LINCT NEXRT RET BACK LHLD LINCT SUB A CMP H JNZ BACK1 MOV A,L CPI 1 JNZ BACK1 LXI H,SMSG CALL DSPLY JMP BCKRT SMSG ASC '--START OF FILE--' DB 0DH BACK1 DCX H SHLD LINCT CALL BKADR CALL DSPLY BCKRT RET EDRTR LXI H,RMSG CALL DSPLY POP H RET BKADR LHLD LINST DCX H BKAD1 DCX H MOV A,M CPI 0DH JNZ BKAD1 INX H SHLD LINST RET LASTL LHLD LINCT XCHG LHLD LINST LAST2 MOV A,M INX H CPI 0DH JNZ LAST1 INX D LAST1 CPI 01 JNZ LAST2 DCX H SHLD LINST CALL BKADR DCX D XCHG SHLD LINCT RET EDCOM DS 1 LINST DS 2 LINCT DS 2 EOFMS ASC '--END OF PROGRAM--' DB 0DH RMSG ASC '...LEAVING EDITOR' DB 0DH EDMSG ASC 'PILOT EDITOR READY' DB 0DH RCOM ASC '*' DB 01 EDMS1 ASC '***INVALID EDIT COMMAND' DB 0DH DSAVE CALL CLRS LXI H,DSMG CALL DSPLY LXI H,DSLAB PUSH B PUSH D PUSH H DSGC CALL 0C01FH JZ DSGC MOV M,A MOV C,A PUSH PSW CALL CO POP PSW CPI 0DH JZ DSA INX H JMP DSGC DSA POP H POP D POP B DSA1 MVI A,PSCO+40H LXI D,DSKB LXI H,DSLAB CALL PSCAN JC PTD JZ PTD MOV A,E CPI 0FFH JZ PTD STA FNUM LXI B,4FFFH LXI D,PBUFB MVI L,01 CALL SYS DB DWROP JMP PTD LDA FNUM CALL SYS DB CLOOP JMP PTD JMP RSTRT DB 0AEH DW 4C0H DB 0 DSKB DS 20 DSLAB DS 10 FNUM DS 1 DLOAD CALL CLRS LXI H,DSMG CALL DSPLY LXI H,DLLAB PUSH B PUSH D PUSH H DLGC CALL 0C01FH JZ DLGC MOV M,A MOV C,A PUSH PSW CALL CO POP PSW CPI 0DH JZ DLA INX H JMP DLGC DLA POP H POP D POP B DLA1 MVI A,PSOP+40H LXI D,DLKB LXI H,DLLAB X CALL PSCAN JC PTD JZ PTD MOV A,E CPI 0FFH JZ PTD STA DLFNUM LXI B,4FFFH LXI D,PBUFB MVI L,01 CALL SYS DB DRDOP JMP PTD LDA DLFNUM CALL SYS DB CLOOP JMP PTD JMP RSTRT DLKB DS 20 DLLAB DS 10 DLFNUM DS 1 INF MVI A,PSOP+40H LXI D,INFB LXI H,INFL JMP X INFB DS 20 INFL ASC 'INS/1' DB 0DH CSAVE JMP PTD CLOAD JMP PTD DSMG ASC 'ENTER FILE NAME - C/R' DB 0DH DB 0DH PBUFB EQU $ ORG PBUFB PBUFF DB 01 END