ORG 0100H NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP JMP L0147 DB 'THE ELECTRIC PENCIL II' L0123: DB ' (C) 1978 MICHAEL SHRAYER VER DS-II ' L0147: LXI SP,17B3H ;SET STACK POINTER XRA A ;GET A 0 OUT 0FEH ;INITIALIZE VDM-1 LDA 0002H ;1ST PAGE OF BIOS STA L11C9+2 ;SELF MODIFY CP/M CALL ADDRS. STA L11BF+2 STA L11C2+2 MVI A,1 STA 5CH ;DEFAULT CP/M FCB ; ;ENTER HERE TO CLEAR TEXT BUFFER COMPLETELY ; L015E: LXI H,17B3H CALL L12A3 ;ZERO OUT H,L TO BASE OF CP/M DCX H ;LAST ADDR BEFORE CP/M DCR H ;1 PAGE EARLIER SHLD L17C2 CALL L0E89 ;INIT. PRINT VARIABLES ? LXI H,183BH MVI M,0DH INX H SHLD L17CC LXI D,L04FA ;POINT TO SIGN ON MESSAGE LXI H,0CDC6H ;IT'S DEST. ON VDM-1 SCRN CALL L0783 ;CLEAR SCREEN & PRT SIGN-ON MSG L017E: CALL L11BF ;GET CONSOLE STAT ORA A ;SET FLAGS JZ L017E ;WAIT IF CHAR NOT READY ; ;THIS IS THE RECOMMENDED ENTRY PT IF ;RE-INITIALIZATION NOT DESIRED ; L0185: XRA A ;GET A 0 OUT 0FEH ;INITIALIZE VDM-1 MOV H,A MOV L,A SHLD L17BE ;ZERO OUT ROW & COL. LXI H,183CH L0190: CALL L0645 LXI SP,17B3H LXI H,0193H PUSH H LXI H,0000H SHLD L17D6 SHLD L17D4 LHLD L17CC XRA A MOV M,A STA L17C1 STA L17B4 STA L17D8 STA L17BD STA L17BA CALL L029E MOV A,M PUSH PSW LDA L17B9 ORA A MOV A,M JZ L01C6 MVI A,09H L01C6: ORI 80H MOV M,A CALL L11B6 MOV C,A POP PSW MOV M,A MOV A,C L01D0: CPI 7FH JZ L0334 ;DESTRUCTIVE BACKSPACE CPI ' ' JNC L0419 ;PRINTABLE CHAR CPI 0AH JZ L038D ;LINE FEED CPI 0CH JZ L0388 ;FORM FEED CPI 0DH JZ L0395 ;CARRIAGE RET. (CUR ONLY) CPI 'T'-40H JZ L0810 ;ERASE TO END OF LINE L01EE: CPI 'Y'-40H JZ L0616+1 ;DELETE LINE CPI 'D'-40H JZ L03AE ;DELETE CHAR CPI 'F'-40H JZ L0411 ;INSERT CHAR CPI 'A'-40H JZ L0336 ;CURSOR LEFT CPI 'S'-40H JZ L0491 ;CURSOR RIGHT CPI 'I'-40H JZ L039A ;HORIZ TAB (CUR ONLY) CPI 'P'-40H JZ L12EC ;PRINT SUB-SYSTEM PUSH PSW CALL L061E CALL L029E POP PSW CPI 'W'-40H JZ L0343 ;CURSOR UP CPI 'Z'-40H JZ L0316 ;CURSOR DOWN CPI 'R'-40H JZ L049B ;REPEAT FUNCTION MOV C,A XRA A STA L17B9 MOV A,C CPI 'K'-40H JZ L096E ;I/O SCOREBOARD CPI 'E'-40H JZ L02D1 ;SCROLL UP CPI 'X'-40H JZ L02E6 ;SCROLL DOWN CPI 'V'-40H JZ L081B ;STRING SEARCH CPI 'C'-40H JZ L093D ;CONTINUE SEARCH CPI 'G'-40H JZ L03C4 ;INSERT LINE CPI 'N'-40H JZ L02B4 ;HOME CUR OR CUR TO EOF CPI 'U'-40H JZ L0587 ;DELETE BLOCK CPI 'H'-40H JZ L059D ;INSERT BLOCK CPI 'B'-40H JZ L0185 ;CURSOR TO BEG. OF FILE CPI 'Q'-40H JZ L02C5 ;HOME CUR OR CUR TO EOF CPI 'O'-40H RNZ ;NO MATCH FOUND LXI D,L028D ;ALL TEXT SECURE MESSAGE LXI H,0CDD6H ;IT'S LOCATION ON SCREEN CALL L0783 ;PRINT MESSAGE CALL L11B6 ;WAIT FOR CONSOLE CHAR CPI 'Y' ;YES ? JNZ L096E ;NO - DO I/O SCOREBOARD CALL L1137 ;ELSE CLEAR VDM-1 SCREEN JZ 0 ;AND REBOOT CPM (ALWAYS 0) ; ; ; JC L02C4 L0282: DB 3EH ; ;FOLLOWING ROUTINE MODIFIES THE MESSAGE PRINT ROUTINE AT ;12E3 SUCH THAT THE 1ST INST ==> LDAX D & 2ND INST ==> ;COMPLEMENT OF THE ACCUM.'S CONTENTS UPON ENTRY TO L0283 ;(XRA E FOR THE SIGN-ON & OTHER LITERALS). ; L0283: CMA ;COMPLEMENT THE ACCUM. ON ENTRY PUSH H ;SAVE H,L MOV H,A ; MVI L,1AH ;LDAX D INSTRUCTION L0288: SHLD L12E3 ;MODIFY THE PRINT ROUTINE POP H ;RESTORE REGS. RZ ;ALWAYS ZERO ; ;MORE ENCYPHERED LITERALS ;'ALL TEXT SECURE?' ; L028D: DB 0CCH, 0C2H, 0C3H, 0B0H, 0C5H, 0D7H, 0CBH, 0C0H DB 0B5H, 0C5H, 0D2H, 0DBH, 0CCH, 0C8H, 0DEH, 0A3H DB 09DH ; L029E: LDA L17BE MOV B,A L02A2: LDA L17BF RRC RRC MOV L,A ANI 03H ADI 0CCH MOV H,A MOV A,L ANI 0C0H ADD B MOV L,A RET ; ; DB 21H ; ;CURSOR TO END OF LINE OR HOME ; L02B4: XRA A ;GET A ZERO STA L17BE ;ZERO OUT COL POSITION L02B8: STA L17BF ;ZERO OUT ROW POSITION L02BB: CALL L03EC MOV A,C STA L17B6 INR A RET L02C4: DB 2AH ; ;HOME CURSOR OR CURSOR TO END OF FILE ; L02C5: LXI H,0 ;GET TWO ZEROS SHLD L17BE ;SAVE THEM AS ROW & COL. LHLD L17CC JMP L0190 ; ;SCROLL UP ; L02D1: LHLD L17C8 MOV A,M ORA A RZ CALL L0328 RZ CALL L02F8 LDA L17BD CPI 18H JNZ L02D1 ; ;SCROLL DOWN ; L02E6: CALL L034E RZ CALL L02F8 LDA L17BD CPI 05H JNZ L02E6 JMP L02D1 L02F8: CALL L1180 LDA L17B7 ORA A JZ L1173 STA L17D8 LDA L17BA INR A ANI 0FH STA L17BA RNZ CALL L1191 STA L17D8 RET ; ;CURSOR DOWN ; L0316: LDA L17B6 DCR A RM L031B: XRA A STA L17B9 LDA L17BF INR A ANI 0FH JNZ L02B8 L0328: LHLD L17C6 CALL L0666 ORA A RZ INX H JMP L0645 ; ;DELETE - DESTRUCTIVE BACKSPACE ; L0334: MVI M,' ' ; ;CURSOR LEFT - NON DESTRUCTIVE BACKSPACE ; L0336: MOV A,B DCR A JP L0396 ANI 3FH STA L17BE CALL L061E ; ;CURSOR UP ; L0343: XRA A STA L17B9 LDA L17BF DCR A JP L02B8 ; ; ; L034E: LHLD L17C6 LXI D,183CH MOV A,E SUB L MOV A,D SBB H JNZ L035E MOV A,E SUB L RZ L035E: CALL L0368 LHLD L17C4 JMP L0645 L0367: DB 21H L0368: MOV D,H MOV E,L DCX H L036B: DCX H MOV A,M CPI 0EH JNC L036B INX H L0373: SHLD L17C4 CALL L0666 INX H MOV A,E SUB L MOV A,D SBB H RC JNZ L0373 MOV A,E SUB L JNZ L0373 RET ; ;FORM FEED ; L0388: MVI M,0CH JMP L038F ; ;LINE FEED ; L038D: MVI M,0DH L038F: CALL L061E CALL L0316 L0395: XRA A L0396: STA L17BE RET ; ;TAB - CURSOR 8 CHARS TO RIGHT ; L039A: MOV A,B ADI 08H ANI 38H STA L17BE RNZ CALL L03EC RZ CALL L061E JMP L0316 DB 31H ; ;DELETE CHAR & COMPRESS REST OF FILE ; L03AE: INX H L03AF: MOV A,M DCX H MOV M,A INX H INX H MOV A,L ANI 3FH JNZ L03AF DCX H MVI M,' ' JZ L061E JM L0367 DB 22H ; ;INSERT LINE ROUTINE ; L03C4: MVI B,0 CALL L02A2 L03C9: PUSH H MOV B,M MVI C,01H MOV M,C LXI D,0CFBFH CALL L0407 JNC L03DD LXI H,0CFFFH CALL L057C L03DD: POP H CALL L0810 STA L17B6 JZ L0396 CALL L0401 DB 0C3H DB 0ACH L03EC: LXI B,64 CALL L02A2 DAD B L03F3: DCX H MOV A,M ANI 7FH CPI ' ' JNZ L0402 DCR C JNZ L03F3 RET L0401: DB 11H L0402: CPI 0EH RC INR C RET L0407: MOV A,L SUB E MOV A,H SBB D RC RNZ MOV A,L SUB E ORA A RET ; ;INSERT CHARACTER ; L0411: LDA L17B9 CMA STA L17B9 RET ; ;ENTRY POINT FOR NORMAL TYPING OF NORMAL CHARS ; L0419: CPI 5CH JZ L0425 LDA L17B9 ORA A JZ L0446 L0425: MOV A,B CPI 3FH JZ L07DD PUSH B PUSH H CPI 32H JC L0434 MVI C,' ' L0434: MOV B,M MOV M,C MOV C,B INX H MOV A,L ANI 3FH JNZ L0434 CALL L0661 CALL L061E POP H POP B L0446: MOV M,C MOV A,B INR A CPI 3FH JC L0396 JNZ L07DD MOV A,C CPI ' ' JNZ L0467 CALL L03EC JZ L0395 CALL L061E CALL L031B JMP L03C4 L0466: DB 0EH L0467: CALL L0661 MVI A,3FH SUB C MOV B,A PUSH PSW PUSH B CALL L061E CALL L031B POP B CALL L02A2 PUSH H CALL L03C9 POP H MVI M,0DH POP PSW STA L17BE INR A STA L17B6 PUSH H CALL L061E POP H MVI M,' ' RET ; ;CURSOR RIGHT ; L0491: MOV A,B INR A CPI 40H JZ L038F JMP L0396 ; ;REPEAT COMMAND ; L049B: LDA L17D6 ORA A RNZ LXI H,0000H L04A3: CALL L11B6 CALL L04CF JC L04A3 STA L17D6 L04AF: MOV A,L ORA H RZ DCX H SHLD L17D4 CALL L029E LDA L17D6 MOV C,A CALL L01D0 CALL L1180 LHLD L17CC MVI M,0 LHLD L17D4 JMP L04AF DB 11H L04CF: CPI 30H CMC RNC CPI 3AH RNC MOV B,H MOV C,L DAD H DAD H DAD B DAD H SUI 30H MOV C,A MVI B,00H DAD B STC RET L04E4: CALL L052B MOV D,H MOV E,L LDA L17BE MOV C,A MVI B,00H DAD B XCHG CALL L0666 CALL L0407 RC XCHG RET ; ;THIS IS THE SIGN ON MESSAGE ;IT IS ENCRYPTED BY XRA'ING IT WITH IT'S ;LOW ORDER ADDRESS. THE MESSAGE IS: ;'THE ELECTRIC PENCIL II (C) 1978 MICHAEL SHRAYER' ; L04FA: DB 0AEH, 0B3H, 0B9H, 0DDH, 0BBH, 0B3H, 045H, 042H DB 56H, 51H, 4DH, 46H, 26H, 57H, 4DH, 47H, 49H DB 42H, 40H, 2DH, 47H, 46H, 30H, 31H, 3AH, 50H DB 3DH, 35H, 27H, 2EH, 2FH, 21H, 3AH, 56H, 55H DB 5EH, 56H, 5EH, 65H, 6DH, 02H, 70H, 6CH, 77H DB 67H, 7EH, 6DH, 7BH, 2AH ; L052B: LHLD L17C6 LDA L17BF ORA A RZ MOV B,A L0534: CALL L0666 ORA A RZ INX H DCR B JNZ L0534 RET L053F: SUB B RZ JNC L0563+1 ;OR IS IT L0564 ? LHLD L17EF MOV D,H MOV E,L MOV A,B ADD E MOV E,A JNC L0550 INR D L0550: MVI B,00H DAD B L0553: LDAX D MOV M,A INX D INX H ORA A JNZ L0553 DCX H SHLD L17CC RZ CALL L0466 L0563: LXI H,0CC2AH ;THIS MIGHT BE A FOOLER RAL MOV C,A MVI B,00H L056A: DAD B CALL L12AF LHLD L17EF MOV B,M MVI C,01H MOV M,C LHLD L17CC XCHG SHLD L17CC L057C: LDAX D MOV M,A DCX D DCX H CMP C JNZ L057C INX H MOV M,B RET ; ;DELETE BLOCK COMMAND ; L0587: CALL L05EB INX D CALL L0553 CALL L12A3 CALL L0642 LDA L17B6 ORA A JZ L02B4 RET DB 3EH L059D: CALL L05EB PUSH H PUSH D PUSH H CALL L04E4 POP D CALL L0407 POP D JZ L0610 JC L05BB CALL L0407 JZ L0610 JC L0610 XRA A L05BB: STA L17B8 SHLD L17EF POP H INX H MOV A,E SUB L MOV C,A MOV A,D SBB H MOV B,A LDA L17B8 ORA A JZ L05D1 DAD B L05D1: PUSH B PUSH H LHLD L17CC CALL L056A POP H POP B INX D L05DC: MOV A,M STAX D INX D INX H DCX B MOV A,B ORA C JNZ L05DC JMP L0642 L05E9: DB 2AH DB 0FH L05EB: LXI H,L183C CALL L0606 JZ L0610 PUSH H CALL L0605 JZ L0610 MOV D,H MOV E,L CALL L0605 JNZ L0610 POP H RET L0605: INX H L0606: MOV A,M ORA A RZ CPI 5CH JNZ L0605 ORA A RET L0610: LXI D,078EH JMP L12BA L0616: MVI B,7DH ANI 0C0H MOV L,A CALL L0810 L061E: CALL L052B SHLD L17EF CALL L03EC LDA L17B6 MOV B,A MOV A,C STA L17B6 CALL L053F LHLD L17EF XCHG MVI B,00H CALL L02A2 LDA L17B6 ORA A CNZ L112A L0642: LHLD L17C6 L0645: LXI D,0CC00H SHLD L17C6 L064B: PUSH H CALL L0666 POP H XCHG CALL L07FB XCHG SHLD L17C8 MVI A,0D0H CMP D JNZ L064B JMP L02BB L0661: MVI B,00H CALL L02A2 L0666: MVI C,00H L0668: MOV A,M ORA A RZ INR C MVI A,40H CMP C JZ L072D MOV A,M ANI 7FH CPI 0CH RZ CPI 0DH RZ INX H JMP L0668 L067F: CALL L05E9 DB 11H ; ;STILL MORE ENCRYPTED LITERALS ;THIS TIME IT'S THE I/O SCOREBOARD ; ;'WORD NUMBER' DB 0D4H, 0CBH, 0D7H, 0C2H, 0A7H, 0C6H DB 0DCH, 0C7H, 0C9H, 0C9H, 0DFH, 08EH ;'DISK DRCTRY D' DB 0CBH, 0D9H, 0C2H, 0D9H, 0B3H, 0D0H, 0C7H DB 0D5H, 0C3H, 0CAH, 0C0H, 0BAH, 0BBH, 0D8H, 09DH ;'RCRD NUMBER' DB 0CCH, 0DCH, 0F2H, 0E5H, 082H, 0EDH DB 0F1H, 0E8H, 0E4H, 0E2H, 0FAH, 0A9H ; ;'SAVE DSKFIL S' DB 0F9H, 0EAH, 0FAH, 0E8H, 08EH, 0EBH, 0E3H DB 0FAH, 0F4H, 0FAH, 0F8H, 095H, 096H, 0E4H, 0B8H ;'LOAD DSKFIL L' DB 0F5H, 0F5H, 0FAH, 0F8H, 09DH, 0FAH, 0ECH DB 08BH, 087H, 08BH, 08FH, 0E4H, 0E5H, 08AH, 0C7H ;'KILL DSKFIL K' DB 083H, 080H, 086H, 087H, 0ECH, 089H, 09DH DB 084H, 096H, 098H, 09EH, 0F3H, 0F4H, 09EH, 0D6H ;'TAPE READER R' DB 083H, 099H, 089H, 09FH, 0FBH, 08EH, 098H, 09FH DB 09BH, 0A5H, 0B3H, 0C2H, 0C3H, 0B6H, 0E5H, 0E6H ;'TAPE WRITER W' DB 0B3H, 0A9H, 0B9H, 0AFH, 0CBH, 0BBH, 0BFH DB 0A7H, 0BBH, 0B5H, 0A3H, 0D2H, 0D3H, 0A3H, 0F5H ;'CLER AA CUR CAA' DB 0B5H, 0BBH, 0BDH, 0ABH, 0DAH, 0BAH, 0BDH DB 0DDH, 0BDH, 0AAH, 052H, 021H, 022H, 040H DB 045H, 044H, 006H ;'CLER AB CUR CAB' DB 044H, 044H, 04CH, 058H, 02BH, 04DH, 04FH DB 02EH, 04CH, 045H, 043H, 032H, 033H, 057H DB 054H, 054H, 017H ;'CLER SYSTEM CLR' DB 05BH, 055H, 05FH, 049H, 03CH, 04EH, 047H DB 04CH, 074H, 064H, 06FH, 003H, 004H, 066H DB 06AH, 075H, 028H ; ;IT SEEMS THAT THIS INST. SHOULD HAVE A LABEL ; JNZ L067F DB 0CDH L072D: DCX H DCR C JZ L07DD MOV A,M ANI 7FH CPI ' ' JNZ L072D L073A: DCR C JZ L07DD DCX H MOV A,M ANI 7FH CPI ' ' JZ L073A INX H INR C RNZ CALL L02C4 L074D: LXI H,470FH LDA L17E3 SUB B MOV B,A MVI C,00H LDA L17B5 CPI 5FH JNZ L0769 XRA A STA L17B5 JZ L079B CALL L0401 L0769: MOV A,M CALL L07F3 JNZ L0779 CALL L1652 INX D INX H JMP L0769 L0778: MOV A,M L0779: CPI ' ' JNZ L079C INX D INX H JMP L0778 L0783: PUSH H ;SAVE REGS CALL L1137 ;CLEAR VDM-1 SCREEN POP H ;RESTORE REGS JZ L1753 ;ALWAYS ZERO! CALL L0282 ;NEVER EXECUTED ; ;MORE ENCRYPTED LITERALS ;'MARKER ERROR' ; L078E: DB 0C3H, 0CEH, 0C2H, 0DAH, 0D7H, 0C1H DB 0B4H, 0D0H, 0C4H, 0C5H, 0D7H, 0CBH, 09AH ; L079B: MOV A,M L079C: INX H CPI 0EH RC CALL L07F3 JNZ L07AD XRA A STA L17C0 JMP L079B L07AD: INR C MOV A,B CMP C JNZ L079B MOV A,M CPI ' ' JZ L07CB INX H RC DCX H L07BC: MOV A,M CALL L07EB JZ L07CB DCR C JZ L07DD DCX H JMP L07BC L07CB: DCX H MOV A,M CALL L07EB JZ L07CB INX H MOV A,C INR A CMP B JNC L07DB INR C L07DB: XRA A RET L07DD: XRA A STA L17BE L07E1: XRA A STA L1809 LHLD L17C6 JMP L0190 L07EB: DCR C JZ L07DD CPI ' ' RZ INR C L07F3: CPI 5FH RZ CPI 7CH RET L07F9: DB 0CDH ;PROBABLY NOT USED DB 0EEH L07FB: DCR C JM L0810 LDAX D MOV M,A INX D INX H JMP L07FB L0806: LDAX D MOV M,A INX D INX H DCR C JNZ L0806 RET DB 2AH L0810: MVI C,' ' L0812: MOV M,C INX H MOV A,L ANI 3FH JNZ L0812 RET ; ;STRING SEARCH ROUTINE ; L081B: CALL L04E4 SHLD L17CA LXI D,108AH LXI H,0CDC0H CALL L0783 INX H MVI M,0A0H CALL L0FEA LXI H,0000H SHLD L17CE SHLD L17BB SHLD L17EF CALL L1069 LHLD L17EF MOV A,L ORA H JNZ L084F LDA L17BC ORA A JZ L093D DCX H L084F: PUSH H CALL L10A5 LDA L17BB MOV B,A LDA L17BC MOV C,A LHLD L17EF ADD L MOV L,A JNC L0864 INR H L0864: SHLD L17CA MOV A,C PUSH D CALL L053F POP D INX D LHLD L17EF XCHG LDA L17BC ORA A CNZ L112A CALL L11B1 POP H DCX H MOV A,L ORA H JNZ L084F JMP L0642 L0886: CALL L0401 ; ;THE PRINT SCOREBOARD (ENCRYPTED, OF COURSE) ; ;'WORD NUMBER' L0889: DB 0DEH, 0C5H, 0D9H, 0C8H, 0ADH, 0C0H DB 0DAH, 0DDH, 0D3H, 0D7H, 0C1H, 094H ; ;'PAGE NUMBER N' DB 0C5H, 0D7H, 0D0H, 0DDH, 0B9H, 0D4H, 0CEH DB 0D1H, 0DFH, 0DBH, 0CDH, 080H, 081H, 0ECH, 0A3H ; ;'RCRD NUMBER' DB 0F6H, 0E6H, 0F4H, 0E3H, 088H, 0E7H DB 0FFH, 0E6H, 0EEH, 0E8H, 0FCH, 0AFH ; ;'LEFT MARGIN M' DB 0FCH, 0F4H, 0F4H, 0E7H, 094H, 0F8H, 0F7H DB 0E5H, 0FFH, 0F0H, 0F4H, 09BH, 09CH, 0F0H, 0BEH ; ; ;'LINE LENGTH L' DB 0F3H, 089H, 08FH, 087H, 0E3H, 088H, 080H DB 088H, 080H, 09CH, 081H, 0EAH, 0EBH, 080H, 0CDH ; ;'LINE IINDENT I' DB 082H, 086H, 09EH, 094H, 0F2H, 09AH, 09AH DB 091H, 093H, 099H, 08CH, 0F9H, 0FAH, 092H, 0DCH ; ;'PAGE LENGTH G' DB 08DH, 09FH, 098H, 0A5H, 0C1H, 0AEH, 0A6H DB 0AAH, 0A2H, 0B2H, 0AFH, 0C8H, 0C9H, 0ADH, 0EBH ; ;'LINE SPACNG S' DB 0A0H, 0A4H, 0A0H, 0AAH, 0D0H, 0A2H, 0A2H DB 0B2H, 0B7H, 0BBH, 0B1H, 0D7H, 0D8H, 0AAH, 0FAH ; ;'CHAR SPACNG H' DB 0B8H, 0B4H, 0BCH, 0ACH, 0DFH, 053H, 051H DB 043H, 040H, 04AH, 042H, 026H, 027H, 040H, 009H ; ;'RGHT JUSTFY J' DB 058H, 04CH, 044H, 059H, 02EH, 045H, 045H DB 042H, 046H, 055H, 04DH, 035H, 036H, 05DH, 018H ; ;'FORM PAGING F' DB 05FH, 055H, 049H, 051H, 03DH, 04EH, 05EH DB 067H, 068H, 06CH, 064H, 004H, 005H, 060H, 027H ; ;'PRNT LENGTH P' DB 078H, 07BH, 064H, 07FH, 00CH, 061H, 06BH DB 061H, 077H, 065H, 07AH, 013H, 014H, 065H, 036H ; JNC L07F9 JMP L0886 ; ;CONTINUE SEARCH ROUTINE ; L093D: LDA L17BB ORA A JZ L07E1 CALL L10A5 DCX H CALL L0368 PUSH PSW PUSH H JZ L0953 LHLD L17C4 L0953: CALL L0666 INX H SHLD L17CA LXI H,0000H SHLD L17BE SHLD L17CE POP H POP PSW JZ L0645 LHLD L17C4 JMP L0645 ; ;DISK/TAPE I/O ROUTINES ; L096E: LXI D,0683H CALL L0D3E LXI H,0CD80H SHLD L17ED CALL L113A LHLD L17ED MOV A,L ANI 0C0H MOV L,A LXI D,0040H DAD D MOV A,H CPI 0D0H CZ L0A65 ;THIS MIGHT BE A FOOLER LDA 5CH ;DEFAULT FCB ORI 30H MOV M,A INX H MVI M,3AH INX H MVI M,0A0H CALL L0FEA SHLD L17ED LXI D,097DH PUSH D LXI D,1809H CALL L0CD0 RC CPI 'C' ;CLEAR COMMAND JZ L0CEC CPI 'R' ;READ TAPE COMMAND JZ L125B CPI 'W' ;WRITE TAPE COMMAND JZ L11F5 CPI 'D' ;DISK DIRECTORY COMMAND JZ L09DE CPI 'L' ;LOAD DISK COMMAND JZ L0A7F CPI 'S' ;SAVE DISK COMMAND JZ L0AE5 CPI 'K' ;KILL DISK FILE COMMAND JNZ L0D2E CALL L0BAF CALL L0BBF CALL L0BAA JMP L0A00 L09DA: LXI SP,0925H DB 01H ; ;DISK DIRECTORY COMMAND ; L09DE: CALL L0BAF CALL L0CCF JC L0A00 CPI 3FH JC L09FD DCX D CALL L0BBF LXI B,3F03H LXI H,0065H JNZ L0A06 CALL L09DA DB 11H L09FD: CALL L0BF3 L0A00: CALL L0C19 LXI B,3F0BH L0A06: CALL L0C1F MVI A,11H CALL L0BB1 CPI 0FFH JZ L0CD7 PUSH PSW LXI H,0CDB0H SHLD L17ED CALL L113A MVI A,' ' STA L17D8 POP PSW L0A23: LXI D,0010H LHLD L17ED DAD D RRC RRC RRC ANI 60H ORI 81H MOV E,A MVI A,0D0H CMP H JNZ L0A40 PUSH D CALL L1180 CALL L0A65 POP D L0A40: SHLD L17ED MVI C,08H CALL L0806 MVI M,2EH INX H MVI C,03H CALL L0806 MVI A,12H CALL L0BB1 ORA A JP L0A23 LXI D,0040H DAD D MVI A,0D0H CMP H JZ L1180 RET L0A64: DB 0CDH L0A65: MOV C,H LXI D,0CDC0H LXI H,0CE00H L0A6C: MOV A,M STAX D INX D INX H MOV A,C CMP H JNZ L0A6C XCHG PUSH H CALL L0810 POP H JNZ L0A64 ;NEVER TAKEN RET ; ;LOAD DISK FILE COMMMAND ; L0A7F: CALL L0BAF CALL L0BBF MVI A,0FH CALL L0BB1 CPI 0FFH JZ L0CD7 LHLD L17CC L0A92: MVI A,14H CALL L0BB1 ORA A JNZ L0ACC CALL L12C9 XCHG LXI D,0080H L0AA2: LDAX D MOV M,A ORA A JZ L0AC6 INX H INR E JNZ L0AA2 JMP L0A92 L0AB0: CALL L1296 ; ;'DIRECTORY FULL' (ENCRYPTED) ; L0AB3: DB 0F7H, 0FDH, 0E7H, 0F3H, 0F4H, 0ECH, 0F6H DB 0E8H, 0E2H, 09CH, 0FBH, 0EBH, 0F3H, 08CH, 0C1H ; JM L114C DB 21H L0AC6: CALL L0B81 JMP L1282 L0ACC: MVI A,10H CALL L0BB1 L0AD1: CALL L1296 ; ;'DISK ERROR' (ENCRYPTED) ; L0AD4: DB 090H, 09CH, 085H, 09CH, 0F8H DB 09CH, 088H, 089H, 093H, 08FH, 0DEH ; L0ADF: JNZ L0AD4+6 ;THIS JUMP NEVER TAKEN JMP L114C L0AE5: CALL L0BAF PUSH D CALL L0BBF CALL L11CE CALL L0BAA MVI A,16H CALL L0BB1 ORA A JM L0B8C MOV A,H INR A RLC MOV B,A MVI C,01H JNC L0B05 INR C L0B05: LXI H,0080H L0B08: LDAX D MOV M,A INX D INR L JNZ L0B08 MVI A,15H CALL L0BB1 ORA A JNZ L0B8C DCR B JNZ L0B05 DCR C JNZ L0B05 CALL L0B81 LXI D,0B6BH LHLD L17ED CALL L1753 INX H SHLD L17ED POP D CALL L0BBF MVI A,0FH CALL L0BB1 CPI 0FFH JZ L0ACC CALL L04E4 L0B41: MVI A,14H CALL L0BB1 ORA A JNZ L0ACC LXI D,0080H L0B4D LDAX D CMP M JNZ L0B7B ORA A JZ L0B5E INX H INR E JNZ L0B4D JMP L0B41 L0B5E: CALL L0B81 JMP L0A00 L0B64: PUSH H LXI H,0B71AH JZ L0288 ; ;'VERIIFYING TEXT' (ENCYPHERED) ; L0B6B: DB 03DH, 029H, 03FH, 027H, 029H, 029H, 038H DB 03CH, 034H, 054H, 021H, 033H, 02FH, 02CH, 079H ; DB 11H L0B7B: CALL L0BAA JMP L0AD1 L0B81: MVI A,10H CALL L0BB1 CPI 0FFH RNZ JMP L0AD1 L0B8C: PUSH PSW CALL L0BAA POP PSW JM L0AB0 CPI 02H JNZ L0AD1 CALL L1296 ; ;'DISK FULL' (ENCRYPTED) ; L0B9C: DB 0D8H, 0D4H, 0CDH, 0D4H, 080H DB 0E7H, 0F7H, 0EFH, 0E8H, 0A5H ; JNZ L0AD4+6 RET L0BAA: MVI A,13H JMP L0BB1 L0BAF: MVI A,0DH L0BB1: PUSH B PUSH D PUSH H MOV C,A LXI D,005CH CALL 5 ;CALL TO CP/M POP H POP D POP B RET L0BBF: CALL L0C19 CALL L0CCF JC L0CBC CPI 3FH JC L0D2E MVI C,08H L0BCF: MOV M,A INX H INX D LDAX D DCR C JZ L0BE7 ORA A JZ L0BE0 CPI ' ' JNZ L0BCF L0BE0: MVI M,' ' INX H DCR C JNZ L0BE0 L0BE7: MVI M,50H INX H MVI M,43H INX H MVI M,4CH CALL L0CD0 RC ; ;FOLLOWING IS A TEST OF THE DISK NO TO INSURE ;THAT IT IS BETWEEN 1 AND 4 ; L0BF3: CPI '1' JC L0C06 CPI '5' JNC L0C06 ANI 07H STA 5CH RNZ ;ALWAYS RETURN STA L0886+68H ;WHO CARES ? L0C06: CALL L1296 ; ;'SELECT ERROR' (ENCYPHERED) ; L0C09: DB 05AH, 04FH, 047H, 049H, 04EH, 05AH DB 02FH, 055H, 043H, 040H, 05CH, 046H, 015H ; RET DB 0CDH DB 0EEH L0C19: LXI B,20H LXI H,5DH L0C1F: PUSH H L0C20: MOV M,B INX H DCR C JNZ L0C20 POP H RET L0C28: CPI 2EH JZ L0CE4 STA L17EF LXI H,0000H L0C33: CALL L0CCF CALL L04CF JC L0C33 XRA A ORA H JNZ L0C9B PUSH D CALL L0C53 POP D JC L0C9B CALL L0CD0 JNC L0C28 RNZ ;ALWAYS RETURN SHLD L0889+83H L0C53: LDA L17EF ANI 0DFH ;CONVERT TO UPPER CASE CPI 'C' JZ L0E26 ;CENTER FOLLOWING LINE CPI 'D' JZ L0E55 ;SET ALL VALUES TO DEFAULT CPI 'F' JZ L0FD9 ;SET FORM PAGING SWITCH CPI 'G' JZ L0E9E ;SET PAGE LENGTH CPI 'H' JZ L0ED2 ;SET DIABLO HMI'S CPI 'I' JZ L0EEF ;SET LINE INDENT CPI 'J' JZ L0F0E ;SET JUSTIFICATION ON/OFF CPI 'L' JZ L0F20 ;SET LINE LENGTH CPI 'M' JZ L0F4E ;SET LEFT MARGIN CPI 'N' JZ L0F8B ;SET PAGE NUMBER CPI 'P' JZ L0FA8 ;SET PRINT LENGTH CPI 'S' JZ L0FB8 ;SET LINE SPACING CPI 5EH JZ L0F68 ;DO A REVERSE LINE-FEED STC RET L0C9B: LDA L17DC ORA A JNZ L0CA8 LHLD L17ED MVI M,3FH RET L0CA8: XRA A STA L17DC CALL L14BF CALL L02B4 LHLD L17D2 LDA L17DC ORA A JZ L0190 L0CBC: CALL L1296 ; ;'NEED FILE NAME' (ENCYPHERED) ; L0CBF: DB 0F1H, 085H, 084H, 086H, 0E3H, 082H, 08CH DB 08AH, 082H, 0E8H, 087H, 08BH, 086H, 089H, 0CDH ; DB 0CDH ; ;ROUTINE TO FETCH CHARS FROM A BUFFER ; L0CCF: INX D L0CD0: LDAX D CPI ' ' JZ L0CCF RET L0CD7: CALL L1296 ; ;'NOT FOUND' (ENCYPHERED) ; L0CDA: DB 094H, 094H, 088H, 0FDH, 098H DB 090H, 0B5H, 0AFH, 0A6H, 0E3H ; L0CE4: INX D L0CE5: LDAX D CPI 0EH JNC L0CE4 RET ; ;THE VARIOUS CLEAR COMMANDS ; L0CEC: CALL L0CCF CPI 'A' JZ L0D04 CPI 'L' JNZ L0D2E CALL L0CCF CPI 'R' JNZ L0D2E JMP L015E L0D04: CALL L0CCF CPI 'A' JNZ L0D19 CALL L04E4 SHLD L17CC CALL L12A3 JMP L07E1 DB 11H L0D19: CPI 'B' JNZ L0D2E CALL L04E4 XCHG LXI H,183CH CALL L0553 CALL L12A0 L0D2B: JMP L0185 ; ;KILL DISK FILE COMMAND ;(IT APPARENTLY DOESN'T DO A STRAIGHT RETURN) ; L0D2E: CALL L1296 ; ;'SYNTAX ERROR' ; L0D31: DB 062H, 06BH, 07DH, 060H, 074H, 06EH DB 017H, 07DH, 06BH, 068H, 074H, 06EH, 03DH ; ; ;ROUTINE TO PUT I/O SCOREBOARD ON SCREEN ; L0D3E: PUSH D ;SAVE REGS CALL L1137 ;CLEAR VDM-1 SCREEN LXI D,L04FA ;POINT TO SIGN-ON MSG LXI H,0CC07H ;LOCATION OF SIGN-ON MSG CALL L1753 ;PUT SIGN-ON ON SCREEN POP D ;RESTORE REGS LXI H,0CC80H ;POINT TO SCOREBOARD DEST. MVI C,4 ;NO LINES IN SCOREBOARD L0D51: CALL L1753 ;PRINT SCOREBOARD INX D MOV A,L ANI 0C0H ORI 17H MOV L,A CALL L1753 INX D MOV A,L ANI 0C0H ORI 2EH MOV L,A CALL L1753 INX D MOV A,L ORI 3FH MOV L,A INX H DCR C JNZ L0D51 L0D72: LXI D,0CCBBH LXI H,0CC93H PUSH D PUSH H CALL L04E4 LXI B,0000H MOV D,B MOV E,C L0D82: MOV A,M ORA A JZ L0DA7 INX H CPI 21H JC L0D82 L0D8D MOV A,M INX H CPI 21H JNC L0D8D INX D L0D95: CPI ' ' JC L0DA2 JNZ L0D8D MOV A,M INX H JMP L0D95 L0DA2: INX B ORA A JNZ L0D82 L0DA7: POP H PUSH B LXI B,2006H L0DAC: DCX H MOV M,B DCR C JNZ L0DAC CALL L0DBC POP D POP H L0DB7: PUSH H CALL L0810 POP H L0DBC: PUSH H CALL L0DC6 POP H JMP L0EC0 DB 0CDH DB 23H L0DC6: LXI B,7 LXI H,1802H SHLD L17EF L0DCF: MOV M,B INX H DCR C JNZ L0DCF XCHG LXI D,0D8F0H CALL L0E09 LXI D,0FC18H CALL L0E09 MVI C,2CH MOV A,B ORA A CNZ L0DFE LXI D,0FF9CH CALL L0E09 LXI D,0FFF6H CALL L0E09 LXI D,0FFFFH CALL L0E09 MOV A,B ORA A RNZ L0DFE: PUSH H LHLD L17EF MOV M,C INX H SHLD L17EF POP H RET L0E09: MVI A,2FH PUSH H L0E0C: INX 6 INX 6 INR A PUSH H DAD D JC L0E0C POP H MOV C,A CPI 30H JZ L0E1F MOV B,A JMP L0DFE L0E1F: MOV A,B ORA A JNZ L0DFE RET DB 21H ; ;HERE IS THE AUTO-CENTERING ROUTINE ; L0E26: MOV A,L ORA A STC RNZ L0E2A: CALL L0CE5 L0E2D INX D LDAX D ORA A STC RZ CPI 0EH JC L0E2D CPI 2EH JZ L0E2A CPI 24H STC RZ XCHG LDA L17E3 MOV B,A MVI C,00H CALL L079B CMC RC MOV A,B SUB C RAR STA L17DD XRA A RET DB 31H ; ;RETURN ALL PRINT VALUES TO THEIR DEFAULT VALUES ; L0E55: XRA A ORA L STC RNZ MVI C,15 LXI H,L17DD L0E5E: MOV M,A INX H DCR C JNZ L0E5E CALL L0E89 CALL L161C ; ;FOLLOWING SERIES OF CALLS UPDATES PRINT SCOREBOARD ;FOR ONE ITEM PER CALL ; L0E6A: CALL L0F5F ;LEFT MARGIN CALL L0F45 ;LINE LENGTH CALL L0F00 ;LINE INDENTATION CALL L0EAC ;PAGE LENGTH CALL L0FC5 ;LINE SPACING CALL L0EE6 ;HMI'S CALL L0F16 ;JUSTIFICATION CALL L0F97 ;PAGE NUMBER CALL L0FAF ;PRINT LENGTH JMP L0FE1 ;FORM PAGING ; L0E88: DB 3AH ; ;THIS ROUTINE UPDATES NON-ZERO DEFAULT PRINT VALUES ; L0E89: MVI A,10 ;DEFAULT HMI'S STA L17E1 MVI A,80 ;DEFAULT LINE LENGTH STA L17E3 MVI A,54 ;DEFAULT PAGE LENGTH STA L17EB MVI A,12 ;DEFAULT PAGE SPACING STA L17E6 ;(NOT USED IN DIABLO VERSIONS) RET ; ;SET PAGE LENGTH ; L0E9E: MOV A,L CPI 73 ;MAX VALUE + 1 CMC RC ORA A JNZ L0EA9 MVI A,54 ;DEFAULT VALUE L0EA9: STA L17EB L0EAC: LDA L17EB LXI H,0CD11H L0EB2: MVI D,0 MOV E,A MVI M,' ' DCX H MVI M,' ' DCX H PUSH H CALL L0DC6 POP H L0EC0: LXI D,1802H L0EC3: LDAX D ORA A RZ MOV M,A INX D INX H JNZ L0EC3 ;WE ALWAYS TAKE THIS JUMP LHLD L0889+83H ;WE NEVER GET HERE JMP L0E88 ;OR HERE, EITHER ; ;SET HMI'S FOR THE DIABLO ; L0ED2: MOV A,L ORA A JNZ L0ED9 MVI A,10 L0ED9: CPI 8 ;MINIMUM VALUE RC CPI 51 ;MAXIMUM VALUE + 1 CMC RC STA L17E1 CALL L161F L0EE6: LDA L17E1 LXI H,0CD3FH JMP L0EB2 ; ;SET LINE INDENTATION ; L0EEF: MOV A,L CPI 101 ;MAXIMUM VALUE + 1 CMC RC LDA L17E3 ;LINE LENGTH SUB L RC CPI 25 RC MOV A,L STA L17DE L0F00: LDA L17DE LXI H,0CCFFH JMP L0EB2 L0F09: DB 'PAGE ' ; ;SET JUSTIFICATION ON-OFF SWITCH ; L0F0E: MOV A,L CPI 2 CMC RC STA L17DF L0F16: LDA L17DF LXI H,0CD51H JMP L0EB2 DB 11H L0F20: MOV A,L ORA A JNZ L0F28 MVI A,80 MOV L,A L0F28: CPI 25 RC CPI 126 CMC RC LDA L17E5 ;LEFT MARGIN ADD L CPI 126 CMC RC LDA L17DE ;LINE INDENTATION MOV H,A MOV A,L SUB H RC CPI 25 RC MOV A,L STA L17E3 L0F45: LDA L17E3 LXI H,0CCE8H JMP L0EB2 ; ;SET LEFT MARGIN ; L0F4E: MOV A,L CPI 101 CMC RC LDA L17E3 ;LINE LENGTH ADD L CPI 126 CMC RC MOV A,L STA L17E5 L0F5F: LDA L17E5 LXI H,0CCD1H JMP L0EB2 ; ;DO REVERSE LINE FEED ; L0F68: LDA L17DC ORA A STC RZ MOV A,L ORA A JNZ L0F74 INR A L0F74: MOV C,A LXI H,17EBH MOV A,M INR A INX H SUB M SUB C RC L0F7E: CALL L11C5 CALL L16C7 INR M DCR C JNZ L0F7E RET DB 2AH ; ;ROUTINE TO SET PAGE NUMBER ; L0F8B: MOV A,L ORA A JZ L0F91 DCR A L0F91: STA L17E7 STA L17E8 L0F97: LDA L17E7 INR A LXI H,0CCA8H JMP L0EB2 ; ;' TIME' (ENCYPHERED) ; L0FA1: DB 081H, 0F6H, 0EAH, 0E9H, 0E0H, 0A6H ; DB 01H ; ;ROUTINE TO SET PRINT LENGTH ; L0FA8: MOV A,L STA L17E9 STA L17EA L0FAF: LDA L17E9 LXI H,0CD7FH JMP L0EB2 ; ;ROUTINE TO SET LINE SPACING ; L0FB8: MOV A,L CPI 6 CMC RC ORA A JZ L0FC2 DCR A L0FC2: STA L17E4 L0FC5: LDA L17E4 INR A LXI H,0CD28H JMP L0EB2 ; ;'LOCATED "' (ENCYPHERED) ; L0FCF: DB 083H, 09FH, 092H, 093H, 087H DB 091H, 091H, 0F6H, 0F5H, 0D8H ; ; ;ROUTINE TO SET FORMS PAGING SWITCH ; L0FD9: MOV A,L CPI 2 CMC RC STA L17E0 L0FE1: LDA L17E0 LXI H,0CD68H JMP L0EB2 L0FEA: LXI B,0032H LXI D,1809H PUSH D XRA A L0FF2: STAX D INX D DCR C JNZ L0FF2 POP D L0FF9: CALL L11B6 MOV C,A CPI 7FH JNZ L1024 MOV A,B ORA A JZ L0FF9 MVI M,' ' DCR B DCX D XRA A STAX D DCX H MVI M,0A0H JMP L0FF9 ; ;'CAN NOT LOCATE "' (ENCYPHERED) ; L1013: DB 050H, 055H, 05BH, 036H, 059H, 057H, 04DH, 03AH DB 057H, 053H, 05EH, 05FH, 04BH, 065H, 001H, 000H DB 023H ; L1024: CPI 0DH JNZ L102D MVI M,' ' INX H RET L102D CPI 2FH JZ L1037 CPI 23H JNZ L104D L1037: MOV A,B ORA A JZ L0FF9 JMP L1053 ; ;'PRINT COUNTER' (ENCYPHERED) ; L103F: DB 06FH, 012H, 008H, 00CH, 017H, 064H, 006H DB 009H, 012H, 006H, 01DH, 00FH, 019H, 04CH ; L104D CPI ' ' JC L0FF9 MOV A,B L1053: CPI 2FH JZ L0FF9 MOV A,C MOV M,C CPI 2FH JNZ L1060 XRA A L1060: STAX D INR B INX D INX H MVI M,0A0H JMP L0FF9 L1069: LXI H,1809H CALL L109A ORA A RZ STA L17BB CALL L109A STA L17BC XCHG LXI H,0000H L107E: LDAX D INX D CALL L04CF RNC SHLD L17EF JMP L107E ;'SEARCH STRING?' (ENCRYPTED) L108A: DB 0D9H, 0CEH, 0CDH, 0DFH, 0CDH, 0C7H, 0B0H DB 0C2H, 0C6H, 0C1H, 0DDH, 0DBH, 0D1H, 0A8H, 098H ; RET L109A: MVI B,0FFH L109C: MOV A,M INX H INR B ORA A JNZ L109C MOV A,B RET L10A5: LHLD L17CA DCX H L10A9: LXI D,1809H LDAX D MOV B,A L10AE: INX H MOV A,M ORA A JZ L10DB CMP B JNZ L10AE SHLD L17EF L10BB: INX H INX D LDAX D CMP M JZ L10BB CPI 23H JZ L10BB ORA A JZ L10D1 LHLD L17EF JMP L10A9 L10D1: PUSH H LHLD L17CE INX H SHLD L17CE POP H RET L10DB: STA L17BB LHLD L17CE MOV A,L ORA H JZ L110F XCHG CALL L0DC6 LXI D,0FCFH CALL L111B INX H INX H CALL L0EC0 LXI D,0FA1H CALL L1753 LDA L1803 ORA A JNZ L110A LDA L1802 CPI 31H JZ L1115 L110A: MVI M,53H JMP L1115 L110F: LXI D,1013H CALL L111B L1115: CALL L11B6 JMP L1115 L111B: LXI H,0CDC0H CALL L0783 LXI D,1809H CALL L12E3 MVI M,22H RET L112A: MOV B,A L112B: MOV A,M ANI 7FH STAX D INX D INX H DCR B JNZ L112B RET DB 3AH ; ;ROUTINE TO CLEAR VDM-1 SCREEN ; L1137: LXI H,0CC00H L113A: MVI A,0D0H MVI B,' ' L113E: MOV M,B INX H CMP H JNZ L113E RET ; ;PART OF THE SPEED/MODE CONTROL FOR SCROLLING ; L1145: CPI '9'+1 JNC L116D CPI '0' L114C: JZ L1164 JC L116D ANI 0FH PUSH B MOV B,A XRA A STC L1158: STA L17B3 RAL DCR B JNZ L1158 POP B XRA A RET DB 21H L1164: MVI A,0FFH STA L17B7 STA L17BA RET L116D: ANI 3FH STA L17BD RET ; ;THIS IS THE DELAY TIMER FOR THE SCROLLING MODE ; L1173: LDA L17B3 MOV B,A MVI C,0FFH XRA A L117A: DCX B CMP B JNZ L117A RET L1180: CALL L11B1 CNZ L1145 CPI ' ' JZ L1191 LDA L17D8 CPI ' ' RNZ L1191: CALL L11B6 STA L17D8 CPI ' ' JZ L11A7 CPI 0DH JZ L11AC CALL L1145 JMP L1191 L11A7: XRA A STA L17BA RET L11AC: XRA A STA L17B7 RET L11B1: CALL L11BF ORA A RZ L11B6: CALL L11C2 CPI 1BH ;ESCAPE JZ L07E1 RET L11BF: JMP 0006H ;CONSOLE STATUS CALL L11C2: JMP 0009H ;CONSOLE DATA WAIT CALL L11C5: MVI A,1BH L11C7: PUSH B MOV C,A L11C9: CALL 000FH ;LIST CHAR OUT CALL POP B RET L11CE: CALL L04E4 L11D1: XCHG LHLD L17CC MOV A,L SUB E MOV L,A MOV A,H SBB D MOV H,A ORA L RNZ CALL L1296 ; ;'NO TEXT AFTER CURSOR' (ENCRYPTED) ; L11E0: DB 0AEH, 0AEH, 0C2H, 0B7H, 0A1H, 0BDH, 0B2H, 0C7H DB 0A9H, 0AFH, 0BEH, 0AEH, 0BEH, 0CDH, 0ADH, 0BAH DB 0A2H, 0A2H, 0BDH, 0A1H, 0F4H ; ; ;WRITE TAPE ROUTINE ; L11F5: CALL L1220 JNZ L0D2E PUSH PSW CALL L04E4 SHLD L17FB CALL L11D1 INX H SHLD L17F9 MVI A,0D0H STA L17F8 POP PSW LXI H,17F2H CALL 0C016H ;NOTE DIRECT CALL TO SOLOS CALL L1296 ; ;'WRITTEN' (ENCRYPTED) ; L1218: DB 04FH, 04BH, 053H, 04FH, 048H, 058H, 050H, 01FH ; L1220: CALL L0CCF MVI C,05H LXI H,17F2H L1228: ORA A JNZ L1236 L122C: MOV M,A INX H DCR C JNZ L122C JMP L1240 DB 11H L1236: MOV M,A INX H INX D LDAX D DCR C JNZ L1228 ORA C RNZ L1240: INX D LDAX D ORA A JZ L1253 CPI 31H JZ L1253 CPI 32H RNZ MVI B,40H JMP L1255 L1253: MVI B,80H L1255: INX D LDAX D ORA A MOV A,B RET DB 21H ; ;SUBROUTINE TO READ TAPE ; L125B: CALL L1220 JNZ L0D2E LHLD L17CC XCHG LXI H,17F2H CALL 0C013H ;NOTE DIRECT CALL TO SOLOS JNC L127D CALL L1293 ; ;'TAPE ERROR' (ENCRYPTED) ; L1271: DB 025H, 033H, 023H, 031H, 055H DB 033H, 025H, 02AH, 036H, 028H, 07BH ; RET L127D: CALL L12C9 XCHG DCX H L1282: SHLD L17CC CALL L0D72 CALL L1293 ; ;'READY' (ENCRYPTED) ; L128B: DB 0D9H, 0C9H, 0CCH, 0CAH, 0D6H, 090H ; RET DB 01H L1293: CALL L12A0 L1296: POP D LXI 6,17AFH LHLD L17ED JMP L1753 L12A0: LHLD L17CC ; ;ROUTINE TO ZERO ALL OF MEMORY FROM H,L TO BASE OF CP/M ; L12A3: LDA 7H ;GET CPM'S LOW PAGE MVI B,00H L12A8: MOV M,B INX H CMP H JNZ L12A8 RET L12AF: XCHG LHLD L17C2 CALL L0407 RNC LXI D,12D4H L12BA: LXI H,0CDD6H CALL L0783 CALL L12A0 L12C3: CALL L11B6 JMP L12C3 L12C9: XCHG LHLD L17C2 CALL L0407 RNC CALL L1293 ; ;'FILE AREA FULL' (ENCRYPTED) ; L12D4: DB 092H, 09CH, 09AH, 092H, 0F8H, 098H, 088H DB 09EH, 09DH, 0FDH, 098H, 08AH, 0ACH, 0ADH, 0E2H ; ; ;ROUTINE TO PRINT AN ENCRYPTED MESSAGE ; L12E3: LDAX D ;CAUTION - SELF MODIFIED INST ORA A ;CAUTION - BECOMES XRA E RZ MOV M,A INX D INX H JMP L12E3 ; ;ENTRY INTO THE PRINT SUB-SYSTEM ; L12EC: LDA L17D6 ORA A CZ L061E CALL L04E4 SHLD L17D2 LDA L17D7 ORA A JNZ L133A STA L17B9 LXI D,0889H CALL L0D3E CALL L0E6A LXI H,0CE3EH L130F: INX H INX H MVI M,0A0H CALL L0FEA SHLD L17ED LXI D,1809H CALL L0CD0 CNC L0C28 JNC L130F LDA L17D6 STA L17D7 LXI H,0CE40H CALL L113A LXI D,103FH LXI H,0CE58H CALL L1753 L133A: LHLD L17D4 INX H XCHG LXI H,0CEDDH CALL L0DB7 CALL L1351 LHLD L17D4 MOV A,L ORA H JZ L0642 RET L1351: LXI H,17E7H MOV A,M INX H MOV M,A INX H MOV A,M INX H MOV M,A INX H MOV A,M INX H MOV M,A CALL L1763 SHLD L17D0 PUSH H CALL L1726 POP H CALL L161C L136D CALL L14C8 JNZ L1376 CALL L1763 L1376: LHLD L17D2 MOV D,H MOV E,L LDA L17E1 STA L17E2 LDA L17DA MOV B,A STA L17DB XRA A STA L17D9 STA L17DA LDA L17DE ADD B CALL L074D+2 JC L1447 PUSH H SHLD L17D2 MOV A,B SUB C MOV B,A JZ L13CF PUSH B LXI H,17E2H MOV C,M XRA A L13A9: ADD C DCR B JNZ L13A9 POP B MOV B,A L13B0: MOV A,C SUB B JNC L13CE CMA INR A MOV B,A INR M JMP L13B0 L13BC: CALL L11BF ORA A JNZ L11C2 INR A CALL 0C022H ;NOTE THE DIRECT CALL TO SOLOS JZ L13BC ANI 7FH RET DB 01H L13CE: MOV C,A L13CF: POP H CALL L15AC JNZ L13E7 CALL L1609 CALL L162F MOV C,B CALL L1609 CALL L162F JM L141A DB 21H L13E7: PUSH B LDA L17DF ORA A JZ L13FE MOV A,B ADD C MOV C,A LDA L17DE ADD C MOV C,A LDA L17DB ADD C JMP L1402 L13FE: LDA L17E3 INR A L1402: MOV C,A CALL L15E6 POP B CALL L1609 CALL L1625 MOV C,B CALL L1609 CALL L1625 JM L141A SHLD L0889+65H L141A: CALL L161C L141D: LDA L17E4 MOV C,A LXI H,17ECH L1424: DCR M JZ L1432 CALL L16C7 DCR C JP L1424 JMP L1376 L1432: CALL L1438 JMP L136D L1438: CALL L16BF LDA L17E0 ORA A RZ L1440: CALL L1713 JNC L1440 RET L1447: STA L17F1 ORA C JZ L14BF SHLD L17D2 MOV A,C ORA A JZ L14A0 CALL L15AC JNZ L146B CALL L161C CALL L162F JM L1480 ;ALWAYS TAKE THIS JUMP CALL L0CCF-1 ;DUMMY INST LHLD L0889+83H ;ANOTHER DUMMY L146B: DCX H DCX H DCR C PUSH B LDA L17DE ADD C MOV C,A LDA L17DB ADD C MOV C,A CALL L15E6 POP B CALL L1625 L1480: XRA A STA L17B4 STA L17DD STA L17C1 CALL L1763 CALL L161C LXI H,17EAH MOV A,M ORA A JZ L14A3 DCR M JNZ L14A3 JMP L14B1 DB 11H L14A0: CALL L1763 L14A3: CALL L1723 LDA L17F1 CPI 0CH JZ L1432 JNC L141D L14B1: LDA L17F1 CPI 0CH JNZ L14BF CALL L16BF JMP L14C2 L14BF: CALL L16C7 L14C2: MVI A,0DH JMP L11C7 DB 01H L14C8: XRA A STA L17C0 CALL L16CF LDA L17EB STA L17EC XCHG LHLD L17D0 XCHG SHLD L17D0 CALL L14E5 RZ XCHG SHLD L17D0 L14E5: MOV A,M CPI 24H RNZ INX H LDA L17E3 MOV B,A MVI C,00H CALL L079B CPI 0DH RNZ MOV A,B SUI 0AH CMP C RC LDA L17B4 PUSH PSW LDA L17C1 PUSH PSW LDA L17DD PUSH PSW XRA A STA L17C1 STA L17DD STA L17B4 CALL L15AC XCHG PUSH H LHLD L17D0 INX H MOV B,C CALL L162F MOV A,M CALL L07F3 JNZ L1530 CALL L1669 INX H MOV A,M CALL L07F3 CZ L1669 L1530: LDA L17E3 SUI 06H MOV C,A LXI H,17E8H INR M JNZ L153E INR M L153E: MOV A,M CPI 0AH JC L154B CPI 64H JC L154A DCR C L154A: DCR C L154B: MOV A,C SUB B MOV C,A L154E: MVI A,' ' CALL L167A DCR C JNZ L154E LXI H,0F09H MVI C,05H CALL L162F LXI H,17E8H MOV E,M MVI D,00H CALL L0DC6 MVI C,0FFH LXI H,1802H PUSH H L156E: INR C MOV A,M INX H ORA A JNZ L156E POP H CALL L162F LXI H,17ECH LDA L17E4 MOV C,A INR C L1581: CALL L16C7 DCR M DCR C JP L1581 CALL L161C LHLD L17D2 POP D CALL L0407 JNC L159A XCHG SHLD L17D2 L159A: POP PSW STA L17DD POP PSW STA L17C1 POP PSW STA L17B4 XRA A RZ ;WE ALWAYS RETURN LHLD L0889+83H DB 11H L15AC: CALL L11C5 LDA L17C0 CMA STA L17C0 ORA A JNZ L15D2 LDA L17C1 ORA A JNZ L15D2 LDA L17B4 ORA A JNZ L15D2 MVI A,36H CALL L11C7 INR C JZ L0886 RET L15D2: MVI A,35H CALL L11C7 XCHG PUSH B LDA L17DE INR A MOV C,A LDA L17DB ADD C MOV C,A JMP L15E7 L15E6: PUSH B L15E7: LDA L17DD ADD C MOV C,A LDA L17E5 ADD C MOV C,A CALL L15FD POP B XRA A STA L17DB JNZ L0CCF-1 RET L15FD CALL L11C5 MVI A,09H CALL L11C7 MOV A,C JMP L11C7 L1609: LDA L17DF ORA A RNZ L160E: PUSH B LDA L17E2 INR A STA L17E2 MOV C,A CALL L16B2 POP B RET L161C: LDA L17E1 L161F: STA L17E2 JMP L160E L1625: DCR C RM MOV A,M DCX H CALL L11C7 JMP L1625 L162F: DCR C RM MOV A,C ANI 1FH JNZ L163E XRA A STA L17D9 CALL L16CF L163E: MOV A,M INX H CALL L07F3 JZ L164C CALL L167A JMP L162F L164C: CALL L1669 JMP L163E L1652: CPI 5FH JNZ L1660 LDA L17C1 CMA STA L17C1 RZ DB 3EH L1660: LDA L17B4 CMA STA L17B4 RNZ DB 11H L1669: CALL L1652 RZ ORA A RNZ PUSH B LDA L17E2 MOV C,A CALL L16B2 POP B RET DB 3EH L167A: STA L17EF LDA L17B4 ORA A LDA L17EF JZ L16A0 PUSH B MOV B,A MVI C,02H CALL L16B2 MOV A,B CALL L11C7 LDA L17E2 DCR A MOV C,A CALL L16B2 MOV A,B CALL L16A0 POP B RET L16A0: CALL L11C7 LDA L17C1 ORA A RZ MVI A,08H CALL L11C7 MVI A,5FH JMP L11C7 L16B2: CALL L11C5 MVI A,1FH CALL L11C7 MOV A,C JMP L11C7 DB 2AH L16BF: CALL L161C MVI A,0CH JMP L16C9 L16C7: MVI A,0AH L16C9: STA L17D9 CALL L11C7 L16CF: MVI A,03H CALL L11C7 LDA L17D8 CPI ' ' JZ L16F4 CPI 1BH JZ L16F4 L16E1: CALL L13BC STA L17D8 CPI 06H RZ CPI ' ' JZ L16F4 CPI 1BH JNZ L16E1 L16F4: CALL L13BC CPI 06H JNZ L16F4 LDA L17D9 ORA A RZ XRA A STA L17D9 LDA L17D8 L1708: CPI 1BH JNZ L1713 CALL L14C2 JMP L07E1 L1713: CALL L13BC STA L17D8 CPI ' ' RZ CPI 0DH JNZ L1708 STC RET L1723: LHLD L17D2 L1726: MVI B,00H L1728: MOV A,M CPI ' ' JNZ L1733 INX H INR B JMP L1728 L1733: SHLD L17D2 STA L17B5 LDA L17DE MOV C,A LDA L17E3 SUB C SUB B JC L174F CPI 14H JC L174F MOV A,B L174B: STA L17DA RET L174F: XRA A JMP L174B L1753: SUB A MVI A,54H CALL L0283 CALL L12E3 JZ L0B64 CALL L0282 DB 2AH L1763: LHLD L17D2 MOV A,M CPI 2EH RNZ XCHG L176B: CALL L0CCF CPI 0DH POP H JZ L14B1 PUSH H STA L17DC CALL L0C28 INX D LDAX D CPI 2EH JZ L176B XCHG SHLD L17D2 XRA A STA L17DC RET ORG 17B3H L17B3: DB 0 L17B4: DB 0 L17B5: DB 0 L17B6: DB 0 L17B7: DB 0 L17B8: DB 0 L17B9: DB 0 L17BA: DB 0 L17BB: DB 0 L17BC: DB 0 L17BD: DB 0 L17BE: DB 0 ;HORIZ COL POSITION (0-63) L17BF: DB 0 ;VERT ROW POSITION (0 - 15) L17C0: DB 0 L17C1: DB 0 L17C2: DB 0 L17C3: DB 0 L17C4: DB 0 L17C5: DB 0 L17C6: DB 0 L17C7: DB 0 L17C8: DB 0 L17C9: DB 0 L17CA: DB 0 L17CB: DB 0 L17CC: DB 0 L17CD: DB 0 L17CE: DB 0 L17CF: DB 0 L17D0: DB 0 L17D1: DB 0 L17D2: DB 0 L17D3: DB 0 L17D4: DB 0 L17D5: DB 0 L17D6: DB 0 L17D7: DB 0 L17D8: DB 0 L17D9: DB 0 L17DA: DB 0 L17DB: DB 0 L17DC: DB 0 L17DD: DB 0 L17DE: DB 0 ;LINE INDENTATION L17DF: DB 0 ;JUSTIFICATION SWITCH L17E0: DB 0 L17E1: DB 0 ;DIABLO'S HMI L17E2: DB 0 ; L17E3: DB 0 ;LINE LENGTH L17E4: DB 0 ;LINE SPACING L17E5: DB 0 ;LEFT MARGIN L17E6: DB 0 ;PAGE SPACING (?) L17E7: DB 0 ;PAGE NUMBER L17E8: DB 0 ; L17E9: DB 0 ;PRINT LENGTH L17EA: DB 0 ; L17EB: DB 0 ;PAGE LENGTH L17EC: DB 0 ; L17ED: DB 0 L17EF: DB 0 L17F0: DB 0 L17F1: DB 0 ORG 17F8H L17F8: DB 0 L17F9: DB 0 L17FA: DB 0 L17FB: DB 0 ORG 1802H L1802: DB 0 L1803: DB 0 ORG 1809H L1809: DB 0 ORG L183C L183C: DB 0