ORG 100H XEQ 100H LXI SP,0CBFFH MVI A,9 TAB KEY WILL DELETE LINE STA KILL MVI A,7FH DEL KEY WILL DELETE 1 CHARACTER STA RUBO XRA A STA MODE LHLD SYSGLO+GLLOW SYS GLOBAL AREA PLUS GLLOW OFFSET SHLD MMAX CALL CLRS IDON LXI H,EDMS CALL OUTR CMRT MVI A,'>' CALL TVTO CALL DTIN CALL SCNB JC INMD SCRH PUSH B LXI D,CTB4 LHLD IPNT SHLD ADDS MVI A,4 STA NCHR MVI B,N4C5 CALL CTSH JZ MTCH MVI A,1 STA NCHR MVI B,N1C5 CALL CTSH JNZ WHAT MTCH SHLD TEMP LDA NCHR MOV C,A MVI B,0 LHLD IPNT DAD B SHLD IPNT MOV A,M CPI ' '+1 JNC WHAT MTGO CALL SCNB SHLD IPNT LHLD TEMP POP B EXCT LXI D,CMRT PUSH D PCHL EDMS ASC 'EDIT' DB 8DH KILL DS 1 RUBO DS 1 MODE DS 1 MMAX DS 2 ADDS DS 2 IPNT DS 2 OUTR MOV A,M MVI B,2 ORA A JP OTCH SUI 80H DCR B OTCH PUSH B MOV B,A CALL TVTO PUT B TO SCREEN POP B DCR B JZ OTCL INX H JMP OUTR OTCL MVI A,1AH LINE FEED TO VDM DRIVER CALL TVTO RET TVTO PUSH B SAVE REGISTERS PUSH D PUSH H PUSH PSW CPI 7FH DEL? JZ T1 MOVE CURSOR 1 SPACE TO LEFT CPI 9 TAB? JZ T2 SEND 2 CR'S TO VDM DRIVER - ERASING LINE CPI 0DH CR? JZ T3 SEND CRLF TO VDM MOV B,A CALL 0C019H B TO SCREEN T4 POP PSW RESTORE REGISTERS POP H POP D POP B RET T1 MVI B,1 CURSOR 1 TO LEFT CALL 0C019H JMP T4 T2 MVI B,0DH ERASE LINE CALL 0C019H MVI B,0DH CALL 0C019H JMP T4 T3 MVI B,0AH CRLF TO SCREEN CALL 0C019H MVI B,0DH CALL 0C019H JMP T4 DTIN LXI H,IBUF SHLD IPNT LDA KILL MOV E,A LDA RUBO MOV D,A LXI B,100H NXCH CALL TVTI CMP E JZ DTIN CMP D JNZ STOR DCR C JM DTIN DCR B DCX H JMP NXCH STOR MOV M,A CPI 0DH RZ MOV A,C CPI CMAX JZ NXCH MOV A,M INX H INR C INR B JMP NXCH IBUF DS 64 TVTI PUSH D SAVE REGISTERS PUSH B PUSH H TVT2 CALL 0C01FH KEYBOARD IN JZ TVT2 NOTHING THERE ANI 7FH STRIP OFF MSB PUSH PSW CALL TVTO ECHO CHARACTER TO SCREEN POP PSW POP H POP B POP D RET CMAX EQU 64 DTOT PUSH H PUSH D PUSH B PUSH PSW DTO1 CALL TVTO POP PSW POP B POP D POP H RET NXTC LXI B,2 JC NXUP PUSH B CPI '-' JNZ CNVV POP B MVI B,1 PUSH B LHLD IPNT INX H SHLD IPNT CNVV LHLD IPNT MOV B,H MOV C,L CALL DBCV DCR H JP WHAT POP B MOV C,L INR C MOV A,B ORA A JZ NXUP MOV A,L NXBK STA TEMP LHLD TOPL XCHG LHLD PNTR NATP DCX H DCX H CALL OVTS JC NAOK XCHG SHLD PNTR JMP NDON NAOK MOV A,M CPI 0DH JNZ NATP+1 INX H SHLD PNTR LDA TEMP DCR A JNZ NXBK JMP NDON NXUP DCR C JZ NDON CALL NLST JC BOTM SHLD PNTR JMP NXUP NDON LDA MODE LHLD PNTR ORA A JNZ LIST CALL CLRS JMP LNOT DBCV LXI H,0 DBC1 LDAX B CPI 0DH RZ MOV D,H MOV E,L DAD H DAD H DAD D DAD H SUI 48 CPI 10 CMC JC WHAT MOV E,A MVI D,0 DAD D INX B JMP DBC1 WHAT LXI H,WTMS LXI SP,0CBFFH CALL OUTR JMP CMRT WTMS ASC 'WHAT?' DB 8DH TEMP DS 2 TOPL DS 2 PNTR DS 2 OVTS MOV A,E SUB L MOV A,D SBB H RET NLST LHLD PNTR MOV A,M INX H CPI 0DH RZ JNC NLST+3 DCX H RET BOTM LXI SP,0CBFFH LHLD EFPN SHLD PNTR LXI H,BTMS CALL OUTR JMP CMRT BTMS ASC 'BOTTOM' DB 8DH WAIT CALL 0C01FH HALTS LISTING UNTIL SPACE BAR HIT JZ WAIT CPI ' ' JZ CONT EFPN DS 2 LIST LHLD PNTR CALL CLRS CALL CRLF MVI D,16 NLS1 DCR D RZ CALL LNOT CALL 0C01FH JZ CONT CPI ' ' SPACE BAR STOPS LISTING UNTIL HIT AGAIN JZ WAIT CONT JMP NLS1 CLRS PUSH B SAVE REGISTERS AND CLEAR SCREEN PUSH D PUSH H PUSH PSW CALL 0C0D5H POP PSW POP H POP D POP B RET CRLF PUSH B SAVE REGISTERS AND CRLF TO SCREEN PUSH D PUSH H PUSH PSW MVI A,0DH CALL TVTO MVI A,0AH CALL TVTO POP PSW POP H POP D POP B RET LNOT MVI B,1 MOV A,M CPI 2 RC INX H LNO1 INR B CALL DTOT CPI 0DH RZ JMP LNOT+2 MSCR LHLD IPNT MOV A,M CPI 'P' JZ STMD CPI 'L' JNZ WHAT XRA A STMD STA MODE RET TOPR LHLD TOPL SHLD PNTR LDA MODE ORA A JNZ LIST TPLE CALL CLRS JMP LNOT KLRT LHLD IPNT MOV A,M CPI ' '+1 JC WHAT STA KILL RET NEWF LXI H,BF SHLD PNTR SHLD EFPN SHLD TOPL MVI M,1 CALL CRLF JMP INMD INMD LXI SP,STAK LXI H,INMS CALL OUTR INLP CALL DTIN LXI H,IBUF MOV A,M CPI 0DH JZ IDON CALL NLST SHLD PNTR SHLD MVAD CALL CENT JMP INLP STAK EQU 0CBFFH INMS ASC 'INPUT' DB 8DH MVAD DS 2 CENT LHLD EFPN INR C MVI B,0 DAD B XCHG LHLD MMAX CALL OVTS JNC MOFL MSOK LHLD EFPN CALL RMOV LHLD EFPN DAD B SHLD EFPN LHLD IPNT DCR C DAD B SHLD MVAD LHLD IPNT XCHG LHLD PNTR CALL LMOV RET MOFL LXI H,OFMS LXI SP,STAK CALL CRLF CALL OUTR JMP CMRT OFMS ASC 'MEM OVERFLOW' DB 8DH RMOV PUSH B MOV B,H MOV C,L LHLD MVAD NXRM LDAX B STAX D MOV A,L CMP C JNZ RMCT MOV A,H CMP B JZ RDON RMCT DCX B DCX D JMP NXRM RDON POP B RET LMOV PUSH B MOV B,D MOV C,E XCHG LHLD MVAD XCHG LMLP LDAX B MOV M,A MOV A,C CMP E JNZ LMCT MOV A,B CMP D JZ LDON LMCT INX H INX B JMP LMLP LDON POP B RET EDCR LXI H,BF SHLD PNTR SHLD TOPL CALL EFFN SHLD EFPN LHLD PNTR LDA MODE ORA A JNZ LIST CALL CLRS JMP LNOT EFFN LHLD MMAX XCHG LHLD PNTR EFF1 CALL OVTS JC MOFL MOV A,M CPI 1 RZ INX H JMP EFF1 INSL JC INMD DCR C DCR C LXI H,IBUF+2 SHLD IPNT CALL NLST SHLD MVAD SHLD PNTR CALL CENT RET DELE MVI C,2 JC DLOC LHLD IPNT MOV B,H MOV C,L CALL DBCV MOV C,L INR C DCR H JP WHAT DLOC DCR C RZ LHLD EFPN SHLD MVAD CALL NLST JC BOTM XCHG LHLD PNTR CALL LMOV SHLD EFPN JMP DLOC APND MOV A,C SUI 3 JC WHAT DCR C DCR C CALL NLST JC BOTM DCX H SHLD TEMP LXI H,IBUF+1 SHLD TEM1 MVI B,0 JMP CNGO TEM1 DS 2 CNGO MOV A,B CMP C JZ EQUL JNC LESS LHLD TEMP ADD L MOV L,A MOV A,H ACI 0 MOV H,A MOV A,C SUB B SHLD MVAD LHLD EFPN PUSH B MOV C,A MVI B,0 DAD B XCHG LHLD MMAX CALL OVTS JNC MOFL LHLD EFPN CALL RMOV LHLD EFPN DAD B SHLD EFPN POP B JMP EQUL EQUL LHLD TEMP XCHG LHLD TEM1 INX H EQLP DCR C JM CCDN MOV A,M STAX D INX H INX D JMP EQLP CCDN LHLD PNTR LDA MODE ORA A JZ LNOT JMP LIST LESS LHLD TEMP MOV A,L ADD C MOV L,A MOV A,H ACI 0 MOV H,A XCHG LHLD EFPN SHLD MVAD LHLD TEMP MOV A,L ADD B MOV L,A MOV A,H ACI 0 MOV H,A XCHG CALL LMOV SHLD EFPN JMP EQUL CCRT JC WHAT LHLD IPNT MOV D,M MVI B,0 CCR1 INX H MOV A,M CPI 0DH JZ WHAT CMP D JZ LSTR INR B JMP CCR1 LSTR SHLD TEM1 LHLD IPNT INX H SHLD IPNT LHLD PNTR STSH MOV C,B SHLD TEMP XCHG LHLD IPNT CALL SEAR JZ STMT LHLD TEMP MOV A,M CPI 0DH JZ CCDN JC BOTM INX H JMP STSH SEAR LDAX D CMP M RNZ INX H INX D DCR C JNZ SEAR RET STMT LHLD TEM1 MVI C,0 STM1 INX H MOV A,M CPI 0DH JZ CNGO INR C JMP STM1 LOC1 LXI H,IBUF+1 MVI B,-2 LNCX MOV A,M CPI 0DH JZ LOC2 INR B INX H JMP LNCX LOC2 MOV A,B ORA A JM WHAT INR B RET LOCT CALL LOC1 LXI H,IBUF+2 SHLD IPNT CALL NLST JC BOTM LNCH MOV C,B SHLD TEMP XCHG LHLD IPNT CALL SEAR JZ LMTH LHLD TEMP INX H MOV A,M CPI 1 JZ BOTM JMP LNCH LMTH LHLD TEMP DCX H MOV A,M CPI 0DH JNZ LMTH+3 INX H SHLD PNTR LMT1 LDA MODE ORA A JNZ LIST CALL CLRS JMP LNOT PRTN MVI C,2 JC PLP1 LHLD IPNT MOV B,H MOV C,L CALL DBCV MOV C,L DCR H JP WHAT MOV A,C INR C ORA A PLP1 CNZ CLRS LHLD PNTR PLP2 DCR C RZ SHLD PNTR CALL LNOT JC BOTM JMP PLP2 CTB4 ASC 'EDIT' DW EDCR ASC 'CLRS' DW CLRS ASC 'PAGE' DW LIST ASC 'NEWF' DW NEWF ASC 'BOTM' DW BTMM ASC 'MODE' DW MSCR ASC 'LIST' DW LCHR ASC 'DLOD' DW DLOD ASC 'DSAV' DW DSAV ASC 'A' DW APND ASC 'D' DW DELE ASC 'I' DW INSL ASC 'E' DW EDCR ASC 'L' DW LOCT ASC 'N' DW NXTC ASC 'C' DW CCRT ASC 'T' DW TOPR ASC 'P' DW PRTN ASC 'F' DW FIND ASC 'R' DW RLCR ASC 'Q' DW MONT FIND CALL LOC1 LXI H,IBUF+2 SHLD IPNT FIN1 CALL NLST SHLD PNTR JC BOTM MOV C,B XCHG LHLD IPNT CALL SEAR LHLD PNTR JZ LMT1 JMP FIN1 BTMM LHLD EFPN SHLD PNTR RET RLCR MOV A,C SUI 3 JC WHAT DCR C DCR C LXI H,IBUF+1 SHLD TEM1 LHLD PNTR SHLD TEMP MVI B,0 LNGT MOV A,M CPI 13 JZ CNGO JC BOTM INX H INR B JMP LNGT LCHR CALL CLRS LHLD TOPL CALL LNOT JNC LCHR+6 RET SCNB LHLD IPNT MOV A,M CPI ' ' RNZ INX H SHLD IPNT JMP SCNB+3 INAD INX D DCR C JNZ INAD INR C RET CTSH LHLD ADDS LDA NCHR MOV C,A CALL SEAR CNZ INAD LDAX D MOV L,A INX D LDAX D MOV H,A RZ INX D DCR B JNZ CTSH INR B RET N4C5 EQU 9 N1C5 EQU 12 NCHR DS 1 MONT EQU 0C004H DSAV LXI H,SVMS CALL OUTR PUSH B PUSH D PUSH H MVI A,PSCO LXI D,DSKB CALL PSCAN JC DR JZ DR MOV A,E CPI 0FFH JZ DR STA FNUM JMP DSAV2 DB 0AEH DW 4C0H DB 0 DSKB DS 20 DSAV2 LDA FNUM LXI B,6FFFH LXI D,BF MVI L,01 CALL SYS DB DWROP JMP DR JMP 100H FNUM DS 1 DR POP H POP D POP B JMP DSAV DLOD LXI H,LDMS CALL OUTR PUSH B PUSH D PUSH H MVI H,PSOP LXI D,DSKB CALL PSCAN JC DL JZ DL MOV A,E CPI 0FFH JZ DL STA FNUM LXI B,6FFFH LXI D,BF MVI L,01 CALL SYS DB DRDOP JMP DL POP H POP D POP B JMP EDIT DL POP H POP D POP B JMP DLOD SVMS ASC 'ENTER NAME OF SAVE FILE -C/R-' LDMS ASC 'ENTER NAME OF LOAD FILE -C/R-' COPY NPTDEFS EDIT EQU 100H BF EQU $ END