MACLIB Z80 0000 = ROM EQU 0000H ;;;;;;;;;;;;;;;; ; WORK AREA ;;;;;;;;;;;;;;;; 8000 ORG 8000H 8000 START: DS 32 ; JUMP TABLE 8020 RBC DS 2 ; BC 8022 RDE DS 2 ; DE 8024 RHL DS 2 ; HL 8026 RAF DS 2 ; AF 8028 RBC2 DS 2 ; BC' 802A RDE2 DS 2 ; DE' 802C RHL2 DS 2 ; HL' 802E RAF2 DS 2 ; AF' 8030 RIX DS 2 ; IX 8032 RIY DS 2 ; IY 8034 RSP DS 2 ; SP 8036 RR DS 1 ; R 8037 RI DS 1 ; I 8038 RPC DS 2 ; PC 803A RIFF DS 2 ; IFF 803C DUMPR DS 2 ; FOR DUMP 803E EDITR DS 2 ; FOR EDIT 8040 INPUR DS 2 ; FOR IN 8042 DISR DS 2 ; FOR DISASM 8044 DISX DS 1 ; IX(DD), IY(FD) 8045 DISB DS 1 ; BIT/SET/RES(CB) 8046 DISD DS 1 ; +D 8047 DISF DS 1 8048 DISBUF DS 40 8100 = STACK EQU START+100H ;;;;;;;;;;;;;;;; ; CHAR CONT. ;;;;;;;;;;;;;;;; 000D = CR EQU 0DH 000A = LF EQU 0AH 0009 = TAB EQU 09H ;;;;;;;;;;;;;;;; ; I/O ;;;;;;;;;;;;;;;; 0010 = CTC0 EQU 10H 0018 = SIOA EQU 18H 001C = PIOA EQU 1CH ;;;;;;;;;;;;;;;; ; MAIN ;;;;;;;;;;;;;;;; 0000 ORG ROM 0000 C36900 JMP RST0 0008 ORG ROM+08H 0008 C30380 JMP START+3 0010 ORG ROM+10H 0010 C30680 JMP START+6 0018 ORG ROM+18H 0018 C30980 JMP START+9 0020 ORG ROM+20H 0020 C30C80 JMP START+12 0028 ORG ROM+28H 0028 C30F80 JMP START+15 0030 ORG ROM+30H 0030 C31280 JMP START+18 0038 ORG ROM+38H 0038 C31580 JMP START+21 0066 ORG ROM+66H 0066 C31880 JMP START+24 ;;;;;;;;;;;;;;;; ; RST VECTOR ;;;;;;;;;;;;;;;; RST0: 0069 E5 PUSH H 006A F5 PUSH PSW 006B DB1C IN PIOA 006D 2F CMA 006E B7 ORA A 006F CA7B00 JZ RST00 0072 1F RAR 0073 67 MOV H, A 0074 3E00 MVI A, 0 0076 1F RAR 0077 6F MOV L, A 0078 F1 POP PSW 0079 E3 XTHL 007A C9 RET 007B F3 RST00: DI IM1 007C+ED56 DB 0EDH,56H 007E 310000 LXI SP, 0 0081 21CE00 LXI H, INITBL 0084 110080 LXI D, START 0087 012000 LXI B, 32 ; JMP TABLE LDIR 008A+EDB0 DB 0EDH,0B0H 008C AF XRA A ; WORK AREA 008D 0624 MVI B, 36 008F 12 RST01: STAX D 0090 13 INX D DJNZ RST01 0091+10FC DB 10H,RST01-$-1 0093 011002 LXI B, 0200H+CTC0 ; CTC-0 OUTIR 0096+EDB3 DB 0EDH,0B3H 0098 011907 LXI B, 0700H+SIOA+1 ; SIO-A OUTIR 009B+EDB3 DB 0EDH,0B3H 009D 011D02 LXI B, 0200H+PIOA+1 ; PIO-A OUTIR 00A0+EDB3 DB 0EDH,0B3H ; CALL HELP ; JMP LOOP 00A2 C30010 JMP 1000H 00A5 3E10 RST1: MVI A,10H 00A7 D319 OUT SIOA+1 00A9 DB19 IN SIOA+1 00AB E621 ANI 21H 00AD EE20 XRI 20H 00AF C9 RET 00B0 CDA500 RST2: CALL RST1 JRZ RST2 00B3+28FB DB 28H,RST2-$-1 00B5 DB18 IN SIOA 00B7 C9 RET 00B8 F5 RST3: PUSH PSW 00B9 3E10 RST30: MVI A, 10H 00BB D319 OUT SIOA+1 00BD DB19 IN SIOA+1 00BF E624 ANI 24H 00C1 EE20 XRI 20H JRZ RST30 00C3+28F4 DB 28H,RST30-$-1 00C5 F1 POP PSW 00C6 D318 OUT SIOA RST4: RST5: 00C8 C9 RST6: RET 00C9 F3 RST7: DI RETI 00CA+ED4D DB 0EDH,4DH NMI: RETN 00CC+ED45 DB 0EDH,45H 00CE C30001 INITBL: JMP ENTRY ; MONITOR 00D1 C3A500 JMP RST1 00D4 C3B000 JMP RST2 00D7 C3B800 JMP RST3 00DA C3C800 JMP RST4 00DD C3C800 JMP RST5 00E0 C3C800 JMP RST6 00E3 C3C900 JMP RST7 00E6 C3CC00 JMP NMI 00E9 2007080701 DB 20H, 07H, 08H, 07H, 1 ; CTC-0 00EE 1705 DB 017H, 5 ; IE,M,PS,EDGE,TRIG,TC,RES,1 ; SIO-A 00F0 18 DB 018H ; 9600BPS(X16) 1-STOP, NO-P, 8-BIT 00F1 0444 DB 4, 044H ; CR1,CR0,SM1,SM0,S1,S0,P1,P0 00F3 03C1 DB 3, 0C1H ; RB1,RB0,AE,HP,CRC,AS,SY,RXE 00F5 056A DB 5, 06AH ; DTR,TB1,TB0,BK,TXE,CRC,RTS,CRCE ; PIO-A 00F7 CFFF DB 0CFH, 0FFH ; MODE-3, IN ;;;;;;;;;;;;;;;; ; ENTRY POINT ;;;;;;;;;;;;;;;; 0100 ORG ROM+100H 0100 C30901 ENTRY: JMP MON ; MONITOR ENTRY 0103 CD7203 CALL SAVE ; FROM DE TO HL 0106 C38B06 JMP CRLF 0109 222480 MON: SHLD RHL ; SAVE HL 010C E1 POP HL ; SAVE PC 010D 223880 SHLD RPC 0110 224280 SHLD DISR ; AND FOR Z SSPD RSP ; SAVE SP 0113+ED73 DB 0EDH,73H 0115+3480 DW RSP SSPD DUMPR ; AND FOR D 0117+ED73 DB 0EDH,73H 0119+3C80 DW DUMPR 011B 310081 LXI SP, STACK 011E F5 PUSH PSW 011F E1 POP HL ; SAVE AF 0120 222680 SHLD RAF LDAR ; SAVE R 0123+ED5F DB 0EDH,5FH 0125 323680 STA RR LDAI ; SAVE I 0128+ED57 DB 0EDH,57H 012A 323780 STA RI ; AND IFF 012D 3EF3 MVI A, 0F3H ; "DI" 012F E23401 JPO MON1 0132 3EFB MVI A, 0FBH ; "EI" 0134 323A80 MON1: STA RIFF 0137 F3 DI SBCD RBC ; SAVE BC/DE/IX/IY 0138+ED43 DB 0EDH,43H 013A+2080 DW RBC SDED RDE 013C+ED53 DB 0EDH,53H 013E+2280 DW RDE SIXD RIX 0140+DD22 DB 0DDH,22H 0142+3080 DW RIX SIYD RIY 0144+FD22 DB 0FDH,22H 0146+3280 DW RIY EXX 0148+D9 DB 0D9H SBCD RBC2 ; SAVE BC/DE/HL/AF' 0149+ED43 DB 0EDH,43H 014B+2880 DW RBC2 SDED RDE2 014D+ED53 DB 0EDH,53H 014F+2A80 DW RDE2 0151 222C80 SHLD RHL2 EXAF 0154+08 DB 08H 0155 F5 PUSH PSW 0156 E1 POP HL 0157 222E80 SHLD RAF2 JR LOOP 015A+180D DB 18H,LOOP-$-1 ;;;;;;;;;;;;;;;; ; CHECK , ;;;;;;;;;;;;;;;; 015C FE2C CHKCM: CPI ',' 015E C8 RZ JR ERROR 015F+1803 DB 18H,ERROR-$-1 ;;;;;;;;;;;;;;;; ; CHECK CR ;;;;;;;;;;;;;;;; 0161 FE0D CHKCR: CPI CR 0163 C8 RZ ;;;;;;;;;;;;;;;; ; ERROR ;;;;;;;;;;;;;;;; 0164 3E3F ERROR: MVI A, '?' 0166 CDB800 CALL RST3 ;;;;;;;;;;;;;;;; ; MAIN LOOP ;;;;;;;;;;;;;;;; 0169 310081 LOOP: LXI SP, STACK 016C 216901 LXI H, LOOP 016F E5 PUSH H 0170 CD7C06 CALL MSGS 0173 0D0A2A00 DB CR, LF, '*', 0 0177 CD7006 LOOP1: CALL INPUT 017A FE3A CPI ':' JRZ LOOP2 017C+280B DB 28H,LOOP2-$-1 017E FE41 CPI 'A' JRC LOOP1 0180+38F5 DB 38H,LOOP1-$-1 0182 FE5B CPI 'Z'+1 JRNC LOOP1 0184+30F1 DB 30H,LOOP1-$-1 0186 CDB800 CALL RST3 LOOP2: ;;;;;;;;;;;;;;;; ; G [HEX] ;;;;;;;;;;;;;;;; 0189 FE47 CPI 'G' JRNZ GOFIN 018B+2064 DB 20H,GOFIN-$-1 018D CDC706 CALL HEXIN 0190 CD6101 CALL CHKCR ; CHECK CR 0193 79 MOV A, C ; IF NO ADRS, USE SAVED PC 0194 B7 ORA A JRNZ GO1 0195+2003 DB 20H,GO1-$-1 0197 2A3880 LHLD RPC 019A 223880 GO1: SHLD RPC 019D 3A3780 LDA RI ; RECOVER I STAI 01A0+ED47 DB 0EDH,47H LBCD RBC2 ; RECOVER BC/DE/HL/AF' 01A2+ED4B DB 0EDH,4BH 01A4+2880 DW RBC2 LDED RDE2 01A6+ED5B DB 0EDH,5BH 01A8+2A80 DW RDE2 01AA 2A2C80 LHLD RHL2 EXX 01AD+D9 DB 0D9H 01AE 2A2E80 LHLD RAF2 01B1 E5 PUSH H 01B2 F1 POP PSW EXAF 01B3+08 DB 08H LBCD RBC ; RECOVER BC/DE/IX/IY/SP 01B4+ED4B DB 0EDH,4BH 01B6+2080 DW RBC LDED RDE 01B8+ED5B DB 0EDH,5BH 01BA+2280 DW RDE LIXD RIX 01BC+DD2A DB 0DDH,2AH 01BE+3080 DW RIX LIYD RIY 01C0+FD2A DB 0FDH,2AH 01C2+3280 DW RIY 01C4 2A3480 LHLD RSP BIT 7,H ; SP MUST POINT RAM 01C7+CB7C DB 0CBH,7*8+H+40H JRNZ GO2 01C9+2003 DB 20H,GO2-$-1 01CB 210000 LXI H, 0 01CE F9 GO2: SPHL 01CF 2A3880 LHLD RPC ; RECOVER PC ON STACK 01D2 E5 PUSH H 01D3 2A2680 LHLD RAF ; RECOVER AF ON STACK 01D6 E5 PUSH H 01D7 3A3680 LDA RR ; RECOVER R STAR 01DA+ED4F DB 0EDH,4FH 01DC 213A80 LXI H, RIFF BIT 3, M 01DF+CB5E DB 0CBH,3*8+M+40H 01E1 36F3 MVI M, 0F3H ; "DI" JRZ GO3 01E3+2802 DB 28H,GO3-$-1 01E5 36FB MVI M, 0FBH ; "EI" 01E7 23 GO3: INX H 01E8 36C9 MVI M, 0C9H ; "RET" 01EA 2A2480 LHLD RHL ; RECOVER HL 01ED F1 POP PSW 01EE C33A80 JMP RIFF ; RECOVER IFF AND GO GOFIN: ;;;;;;;;;;;;;;;; ; R ;;;;;;;;;;;;;;;; 01F1 FE52 CPI 'R' 01F3 C29102 JNZ REGFIN 01F6 CDB000 CALL RST2 01F9 CD6101 CALL CHKCR ; CHECK CR 01FC CD7C06 CALL MSGS 01FF 0D0A2D4243 DB CR, LF, '-BC- -DE- -HL- -AF- SZ-H-PNC', CR, LF, 0 0220 212080 LXI H, RBC 0223 CD7702 CALL REG3 ; SHOW BC/DE/HL/AF AND FLAGS 0226 CD7702 CALL REG3 ; SHOW BC/DE/HL/AF' AND FLAGS 0229 CD7C06 CALL MSGS 022C 2D49582D20 DB '-IX- -IY- -SP- -IR- -PC- IFF', CR, LF, 0 024B 213080 LXI H, RIX 024E CD6902 CALL REG1 ; SHOW IX/IY/SP/IR 0251 2A3880 LHLD RPC ; SHOW PC 0254 CD8902 CALL REG5 0257 3A3A80 LDA RIFF ; SHOW IFF 025A B7 ORA A 025B 3E30 MVI A, '0' JRZ REG0 025D+2801 DB 28H,REG0-$-1 025F 3C INR A 0260 CDB800 REG0: CALL RST3 0263 212080 LXI H, RBC ; GO EDIT MODE 0266 C3A502 JMP EDIT1 0269 0604 REG1: MVI B, 4 026B 5E REG2: MOV E, M 026C 23 INX H 026D 56 MOV D, M 026E 23 INX H 026F EB XCHG 0270 CD8902 CALL REG5 0273 EB XCHG DJNZ REG2 0274+10F5 DB 10H,REG2-$-1 0276 C9 RET 0277 CD6902 REG3: CALL REG1 027A 0608 MVI B, 8 027C 3E18 REG4: MVI A, 18H ; '0'/2 SLAR E 027E+CB23 DB 0CBH, 20H + E 0280 8F ADC A 0281 CDB800 CALL RST3 DJNZ REG4 0284+10F6 DB 10H,REG4-$-1 0286 C38B06 JMP CRLF 0289 CDAC06 REG5: CALL PRHEX4 028C 3E20 PSP: MVI A, ' ' 028E C3B800 JMP RST3 REGFIN: ;;;;;;;;;;;;;;;; ; E [HEX] ;;;;;;;;;;;;;;;; 0291 FE45 CPI 'E' JRNZ EDITFIN 0293+205C DB 20H,EDITFIN-$-1 0295 CDC706 CALL HEXIN 0298 CD6101 CALL CHKCR ; CHECK CR 029B 79 MOV A, C ; IF NO ADRS, USE SAVED ADRS 029C B7 ORA A JRNZ EDIT1 029D+2006 DB 20H,EDIT1-$-1 029F 2A3E80 LHLD EDITR JR EDIT1 02A2+1801 DB 18H,EDIT1-$-1 02A4 2B EDIT0: DCX H 02A5 CD8B06 EDIT1: CALL CRLF 02A8 CDAC06 CALL PRHEX4 ; SHOW ADRS 02AB CDA206 CALL PCOL 02AE 223E80 EDIT2: SHLD EDITR ; SAVE ADRS 02B1 CD8C02 CALL PSP 02B4 7E MOV A, M ; SHOW DATA 02B5 CDB106 CALL PRHEX2 02B8 CDA706 CALL PMINS 02BB CD0C07 CALL HEXIN1 ; 1ST INPUT JRNC EDIT4 02BE+3018 DB 30H,EDIT4-$-1 02C0 FE2E CPI '.' ; BACK IF . JRZ EDIT0 02C2+28E0 DB 28H,EDIT0-$-1 02C4 FE0D CPI CR ; END IF CR 02C6 C8 RZ 02C7 FE20 CPI ' ' ; SKIP IF SPACE 02C9 C26401 JNZ ERROR 02CC 7E MOV A, M 02CD CDB106 CALL PRHEX2 02D0 23 EDIT3: INX H ; NEXT LINE ? 02D1 7D MOV A, L 02D2 E607 ANI 07H JRNZ EDIT2 02D4+20D8 DB 20H,EDIT2-$-1 JR EDIT1 02D6+18CD DB 18H,EDIT1-$-1 02D8 F5 EDIT4: PUSH PSW ; SHOW 1ST DIGIT 02D9 CDBA06 CALL PRHEX 02DC F1 POP PSW 02DD 87 ADD A 02DE 87 ADD A 02DF 87 ADD A 02E0 87 ADD A 02E1 4F MOV C, A 02E2 CD0C07 CALL HEXIN1 ; 2ND INPUT 02E5 DA6401 JC ERROR 02E8 F5 PUSH PSW 02E9 CDBA06 CALL PRHEX ; SHOW 2ND DIGIT 02EC F1 POP PSW 02ED 81 ADD C 02EE 77 MOV M, A ; WRITE DATA JR EDIT3 02EF+18DF DB 18H,EDIT3-$-1 EDITFIN: ;;;;;;;;;;;;;;;; ; LOAD (INTEL-HEX) ;;;;;;;;;;;;;;;; 02F1 FE3A CPI ':' JRNZ LOADFIN 02F3+206B DB 20H,LOADFIN-$-1 02F5 0E00 LOAD0: MVI C, 0 ; C FOR CHECK-SUM 02F7 CDFD06 CALL HEXIN2 ; COUNT TO B JRC LOADERR 02FA+3853 DB 38H,LOADERR-$-1 02FC 47 MOV B, A 02FD 81 ADD C 02FE 4F MOV C, A 02FF CDFD06 CALL HEXIN2 ; ADRS-H JRC LOADERR 0302+384B DB 38H,LOADERR-$-1 0304 67 MOV H, A 0305 81 ADD C 0306 4F MOV C, A 0307 CDFD06 CALL HEXIN2 ; ADRS-L JRC LOADERR 030A+3843 DB 38H,LOADERR-$-1 030C 6F MOV L, A 030D 81 ADD C 030E 4F MOV C, A 030F 78 MOV A, B 0310 B7 ORA A 0311 C4AC06 CNZ PRHEX4 ; SHOW ADRS 0314 CDFD06 CALL HEXIN2 ; TYPE JRC LOADERR 0317+3836 DB 38H,LOADERR-$-1 0319 81 ADD C 031A 4F MOV C, A 031B 78 MOV A, B 031C B7 ORA A JRZ LOAD4 031D+2820 DB 28H,LOAD4-$-1 031F CDFD06 LOAD1: CALL HEXIN2 ; DATA JRC LOADERR 0322+382B DB 38H,LOADERR-$-1 0324 77 MOV M, A 0325 81 ADD C 0326 4F MOV C, A 0327 23 INX H DJNZ LOAD1 0328+10F5 DB 10H,LOAD1-$-1 032A CDFD06 LOAD2: CALL HEXIN2 ; CHECK-SUM JRC LOADERR 032D+3820 DB 38H,LOADERR-$-1 032F 81 ADD C JRNZ LOADERR 0330+201D DB 20H,LOADERR-$-1 0332 CDB000 LOAD3: CALL RST2 ; SKIP CR/LF 0335 FE3A CPI ':' JRNZ LOAD3 0337+20F9 DB 20H,LOAD3-$-1 0339 CDB800 CALL RST3 033C C3F502 JMP LOAD0 033F CDFD06 LOAD4: CALL HEXIN2 ; CHECK-SUM JRC LOADERR 0342+380B DB 38H,LOADERR-$-1 0344 81 ADD C JRNZ LOADERR 0345+2008 DB 20H,LOADERR-$-1 0347 CDB000 LOAD5: CALL RST2 ; SKIP CR/LF 034A FE0D CPI CR JRNZ LOAD5 034C+20F9 DB 20H,LOAD5-$-1 034E C9 RET LOADERR: 034F CDB000 CALL RST2 0352 FE0D CPI CR JRNZ LOADERR 0354+20F9 DB 20H,LOADERR-$-1 0356 CDA706 CALL PMINS 0359 2B DCX H 035A CDAC06 CALL PRHEX4 035D C36401 JMP ERROR LOADFIN: ;;;;;;;;;;;;;;;; ; S HEX, HEX ;;;;;;;;;;;;;;;; 0360 FE53 CPI 'S' JRNZ SAVEFIN 0362+2064 DB 20H,SAVEFIN-$-1 0364 CDC706 CALL HEXIN ; SAVE FROM 0367 CD5C01 CALL CHKCM ; CHECK , 036A E5 PUSH H 036B CDC706 CALL HEXIN ; SAVE TO 036E D1 POP D 036F CD6101 CALL CHKCR ; CHECK CR 0372 B7 SAVE: ORA A DSBC D ; SIZE = TO - FROM + 1 0373+ED52 DB 0EDH,D*8+42H 0375 23 INX H 0376 EB XCHG 0377 CD8B06 SAVE1: CALL CRLF 037A 7A MOV A, D ; CHECK SIZE 037B B3 ORA E JRZ SAVE4 037C+2838 DB 28H,SAVE4-$-1 037E 7D MOV A, L ; ODD START ? 037F 2F CMA 0380 E61F ANI 1FH 0382 3C INR A 0383 47 MOV B, A 0384 7A MOV A, D ; ODD END ? 0385 B7 ORA A JRNZ SAVE2 0386+2005 DB 20H,SAVE2-$-1 0388 7B MOV A, E 0389 90 SUB B JRNC SAVE2 038A+3001 DB 30H,SAVE2-$-1 038C 43 MOV B, E 038D CDA206 SAVE2: CALL PCOL 0390 78 MOV A, B ; COUNT 0391 CDB106 CALL PRHEX2 0394 7C MOV A, H ; ADRS-H 0395 CDB106 CALL PRHEX2 0398 7D MOV A, L ; ADRS-L 0399 CDB106 CALL PRHEX2 039C AF XRA A ; TYPE 039D CDB106 CALL PRHEX2 03A0 78 MOV A, B ; C FOR CHECK-SUM 03A1 84 ADD H 03A2 85 ADD L 03A3 4F MOV C, A 03A4 7E SAVE3: MOV A, M ; DATA 03A5 81 ADD C 03A6 4F MOV C, A 03A7 7E MOV A, M 03A8 23 INX H 03A9 1B DCX D 03AA CDB106 CALL PRHEX2 DJNZ SAVE3 03AD+10F5 DB 10H,SAVE3-$-1 03AF AF XRA A ; CHECK-SUM 03B0 91 SUB C 03B1 CDB106 CALL PRHEX2 JR SAVE1 03B4+18C1 DB 18H,SAVE1-$-1 03B6 CD7C06 SAVE4: CALL MSGS 03B9 3A30303030 DB ':00000001FF', CR, LF, 0 03C7 C9 RET SAVEFIN: ;;;;;;;;;;;;;;;; ; D [HEX][, HEX] ;;;;;;;;;;;;;;;; 03C8 FE44 CPI 'D' JRNZ DUMPFIN 03CA+205F DB 20H,DUMPFIN-$-1 03CC CDC706 CALL HEXIN 03CF 0D DCR C ; IF NO START, USE SAVED ADRS 03D0 F2D603 JP DUMP1 03D3 2A3C80 LHLD DUMPR 03D6 FE0D DUMP1: CPI CR JRZ DUMP2 03D8+2813 DB 28H,DUMP2-$-1 03DA CD5C01 CALL CHKCM ; CHECK , 03DD E5 PUSH H 03DE CDC706 CALL HEXIN 03E1 D1 POP D 03E2 CD6101 CALL CHKCR ; CHECK CR DSBC D 03E5+ED52 DB 0EDH,D*8+42H 03E7 23 INX H 03E8 EB XCHG 03E9 0D DCR C ; IF NO END, SET 1 PAGE SIZE 03EA F2F503 JP DUMP3 03ED 7D DUMP2: MOV A, L ; IF NO END, SET 1 PAGE SIZE 03EE E60F ANI 0FH 03F0 2F CMA 03F1 5F MOV E, A 03F2 1600 MVI D, 0 03F4 13 INX D 03F5 CD8B06 DUMP3: CALL CRLF 03F8 E5 PUSH H 03F9 7D MOV A, L ; SHOW ADRS 03FA E6F0 ANI 0F0H 03FC 6F MOV L, A 03FD CDAC06 CALL PRHEX4 0400 E1 POP H 0401 CDA206 CALL PCOL 0404 7D MOV A, L 0405 E60F ANI 0FH JRZ DUMP5 0407+280A DB 28H,DUMP5-$-1 0409 47 MOV B, A ; ODD START ? 040A CD7C06 DUMP4: CALL MSGS 040D 20202000 DB ' ', 0 DJNZ DUMP4 0411+10F7 DB 10H,DUMP4-$-1 0413 CD8C02 DUMP5: CALL PSP 0416 7E MOV A, M ; SHOW DATA 0417 23 INX H 0418 CDB106 CALL PRHEX2 041B 1B DCX D 041C 7A MOV A, D ; END ? 041D B3 ORA E JRZ DUMP6 041E+2807 DB 28H,DUMP6-$-1 0420 7D MOV A, L 0421 E60F ANI 0FH JRNZ DUMP5 0423+20EE DB 20H,DUMP5-$-1 JR DUMP3 0425+18CE DB 18H,DUMP3-$-1 0427 223C80 DUMP6: SHLD DUMPR ; SAVE ADRS 042A C9 RET DUMPFIN: ;;;;;;;;;;;;;;;; ; I [HEX] ;;;;;;;;;;;;;;;; 042B FE49 CPI 'I' JRNZ INFIN 042D+2024 DB 20H,INFIN-$-1 042F CDC706 CALL HEXIN 0432 CD6101 CALL CHKCR ; CHECK CR 0435 79 MOV A, C ; IF NO ADRS, USE SAVED ADRS 0436 B7 ORA A JRNZ IN1 0437+2003 DB 20H,IN1-$-1 0439 2A4080 LHLD INPUR 043C 224080 IN1: SHLD INPUR 043F CD8B06 CALL CRLF 0442 CDAC06 CALL PRHEX4 ; SHOW ADRS 0445 CD7C06 CALL MSGS 0448 203D2000 DB ' = ', 0 044C 4D MOV C, L 044D 44 MOV B, H INP A 044E+ED78 DB 0EDH,A*8+40H 0450 C3B106 JMP PRHEX2 ; SHOW DATA INFIN: ;;;;;;;;;;;;;;;; ; O HEX,HEX[,HEX]... ;;;;;;;;;;;;;;;; 0453 FE4F CPI 'O' JRNZ OUTFIN 0455+2024 DB 20H,OUTFIN-$-1 0457 CDC706 CALL HEXIN ; ADRS TO BC 045A 0D DCR C ; NO ADRS 045B FA6401 JM ERROR 045E CD5C01 CALL CHKCM ; CHECK , 0461 4D MOV C, L 0462 44 MOV B, H 0463 C5 OUT0: PUSH BC 0464 CDC706 CALL HEXIN ; DATA TO L 0467 0D DCR C ; NO DATA 0468 FA6401 JM ERROR 046B C1 POP BC 046C FE0D CPI CR 046E CA7404 JZ OUT1 0471 CD5C01 CALL CHKCM ; CHECK , OUT1: OUTP L 0474+ED69 DB 0EDH,L*8+41H 0476 FE2C CPI ',' JRZ OUT0 0478+28E9 DB 28H,OUT0-$-1 047A C9 RET OUTFIN: ;;;;;;;;;;;;;;;; ; F HEX, HEX, HEX ;;;;;;;;;;;;;;;; 047B FE46 CPI 'F' JRNZ FILLFIN 047D+202E DB 20H,FILLFIN-$-1 047F CDC706 CALL HEXIN ; START 0482 0D DCR C ; NO ADRS 0483 FA6401 JM ERROR 0486 CD5C01 CALL CHKCM ; CHECK , 0489 E5 PUSH H 048A CDC706 CALL HEXIN ; END 048D 0D DCR C ; NO ADRS 048E FA6401 JM ERROR 0491 D1 POP D 0492 CD5C01 CALL CHKCM ; CHECK , DSBC D 0495+ED52 DB 0EDH,D*8+42H 0497 23 INX H 0498 E5 PUSH H 0499 CDC706 CALL HEXIN ; DATA 049C 0D DCR C ; NO DATA 049D FA6401 JM ERROR 04A0 C1 POP B 04A1 CD6101 CALL CHKCR ; CHECK CR 04A4 EB XCHG 04A5 73 FILL1: MOV M, E 04A6 23 INX H 04A7 0B DCX B 04A8 79 MOV A, C 04A9 B0 ORA B JRNZ FILL1 04AA+20F9 DB 20H,FILL1-$-1 04AC C9 RET FILLFIN: ;;;;;;;;;;;;;;;; ; C HEX, HEX, HEX ;;;;;;;;;;;;;;;; 04AD FE43 CPI 'C' JRNZ COPYFIN 04AF+2029 DB 20H,COPYFIN-$-1 04B1 CDC706 CALL HEXIN ; START 04B4 0D DCR C ; NO ADRS 04B5 FA6401 JM ERROR 04B8 CD5C01 CALL CHKCM ; CHECK , 04BB E5 PUSH H 04BC CDC706 CALL HEXIN ; END 04BF 0D DCR C ; NO ADRS 04C0 FA6401 JM ERROR 04C3 D1 POP D 04C4 CD5C01 CALL CHKCM ; CHECK , DSBC D 04C7+ED52 DB 0EDH,D*8+42H 04C9 23 INX H 04CA E5 PUSH H 04CB CDC706 CALL HEXIN ; TO 04CE 0D DCR C ; NO ADRS 04CF FA6401 JM ERROR 04D2 C1 POP B 04D3 CD6101 CALL CHKCR ; CHECK CR 04D6 EB XCHG LDIR 04D7+EDB0 DB 0EDH,0B0H 04D9 C9 RET COPYFIN: ;;;;;;;;;;;;;;;; ; Z [HEX] [,[HEX]] ;;;;;;;;;;;;;;;; 04DA FE5A CPI 'Z' 04DC C20F05 JNZ DISFIN 04DF CDC706 CALL HEXIN 04E2 0D DCR C ; IF NO ADRS, USE SAVED ADRS 04E3 F2E904 JP DIS1 04E6 2A4280 LHLD DISR 04E9 EB DIS1: XCHG 04EA FE0D CPI CR 04EC CAFE04 JZ DIS2 04EF CD5C01 CALL CHKCM ; CHECK , 04F2 D5 PUSH D 04F3 CDC706 CALL HEXIN 04F6 D1 POP D 04F7 CD6101 CALL CHKCR ; CHECK CR 04FA 0D DCR C 04FB F20205 JP DIS3 04FE 210F00 DIS2: LXI H, 0FH 0501 19 DAD D 0502 E5 DIS3: PUSH H ; FROM DE TO HL 0503 B7 ORA A DSBC D 0504+ED52 DB 0EDH,D*8+42H 0506 E1 POP H 0507 D8 RC 0508 E5 PUSH H 0509 CD2207 CALL DISASM 050C E1 POP H JR DIS3 050D+18F3 DB 18H,DIS3-$-1 DISFIN: ;;;;;;;;;;;;;;;; ; H ;;;;;;;;;;;;;;;; 050F FE48 CPI 'H' 0511 C26D06 JNZ HELPFIN 0514 CDB000 CALL RST2 0517 CD6101 CALL CHKCR ; CHECK CR 051A CD7C06 HELP: CALL MSGS 051D 0D0A4D6F6E DB CR, LF, 'Monitor ', 0 0528 211B80 LXI H, START+27 052B 0605 MVI B, 5 052D 7E HELP0: MOV A, M 052E 23 INX H 052F CDB106 CALL PRHEX2 DJNZ HELP0 0532+10F9 DB 10H,HELP0-$-1 0534 CD7C06 CALL MSGS 0537 0D0A47205B DB CR, LF, 'G [start] : GO' 054F 0D0A522020 DB CR, LF, 'R : REG' 0568 0D0A44205B DB CR, LF, 'D [begin] [,end] : DUMP' 0582 0D0A45205B DB CR, LF, 'E [begin] : EDIT' 059C 0D0A432062 DB CR, LF, 'C begin, end, to : COPY' 05B6 0D0A462062 DB CR, LF, 'F begin, end, data: FILL' 05D0 0D0A49205B DB CR, LF, 'I [port] : IN' 05E8 0D0A4F2070 DB CR, LF, 'O port, data, ... : OUT' 0601 0D0A5A205B DB CR, LF, 'Z [begin] [,end] : DISASM' 061D 0D0A28496E DB CR, LF, '(Intel-HEX) : LOAD' 0637 0D0A532062 DB CR, LF, 'S begin, end : SAVE' 0651 0D0A482020 DB CR, LF, 'H : HELP' 066B 00 DB 0 066C C9 RET HELPFIN: ;;;;;;;;;;;;;;;; ; ELSE ;;;;;;;;;;;;;;;; 066D C36401 JMP ERROR ;;;;;;;;;;;;;;;; ; INPUT & TO UPPER CASE ;;;;;;;;;;;;;;;; 0670 CDB000 INPUT: CALL RST2 0673 FE61 CPI 'a' 0675 D8 RC 0676 FE7B CPI 'z'+1 0678 D0 RNC 0679 D620 SUI 20H 067B C9 RET ;;;;;;;;;;;;;;;; ; MESSAGE ;;;;;;;;;;;;;;;; 067C E3 MSGS: XTHL 067D CD8206 CALL MSG 0680 E3 XTHL 0681 C9 RET ;;;;;;;;;;;;;;;; ; PRINT (HL)... ;;;;;;;;;;;;;;;; 0682 7E MSG: MOV A, M 0683 23 INX H 0684 B7 ORA A 0685 C8 RZ 0686 CDB800 CALL RST3 JR MSG 0689+18F7 DB 18H,MSG-$-1 ;;;;;;;;;;;;;;;; ; PRINT CR LF ;;;;;;;;;;;;;;;; 068B 3E0D CRLF: MVI A, CR 068D CDB800 CALL RST3 0690 3E0A MVI A, LF 0692 CDB800 CALL RST3 0695 CDA500 CALL RST1 ; BREAK ? 0698 C8 RZ 0699 CDB000 CALL RST2 069C FE03 CPI 3 069E C0 RNZ 069F C36401 JMP ERROR ;;;;;;;;;;;;;;;; ; PRINT : ;;;;;;;;;;;;;;;; 06A2 3E3A PCOL: MVI A, ':' 06A4 C3B800 JMP RST3 ;;;;;;;;;;;;;;;; ; PRINT - ;;;;;;;;;;;;;;;; 06A7 3E2D PMINS: MVI A, '-' 06A9 C3B800 JMP RST3 ;;;;;;;;;;;;;;;; ; PRINT HEX, 4 DIGIT FROM HL ;;;;;;;;;;;;;;;; 06AC 7C PRHEX4: MOV A, H 06AD CDB106 CALL PRHEX2 06B0 7D MOV A, L ;;;;;;;;;;;;;;;; ; PRINT HEX, 2 DIGIT FROM A ;;;;;;;;;;;;;;;; 06B1 F5 PRHEX2: PUSH PSW 06B2 0F RRC 06B3 0F RRC 06B4 0F RRC 06B5 0F RRC 06B6 CDBA06 CALL PRHEX 06B9 F1 POP PSW ;;;;;;;;;;;;;;;; ; PRINT HEX, 1 DIGIT FROM A ;;;;;;;;;;;;;;;; 06BA E60F PRHEX: ANI 0FH 06BC C630 ADI '0' 06BE FE3A CPI '9'+1 JRC PRH1 06C0+3802 DB 38H,PRH1-$-1 06C2 C607 ADI 7 06C4 C3B800 PRH1: JMP RST3 ;;;;;;;;;;;;;;;; ; HEX TO HL, CHAR TO A, FLAG TO C ;;;;;;;;;;;;;;;; 06C7 210000 HEXIN: LXI H, 0 06CA 4D MOV C, L 06CB CD7006 H0: CALL INPUT 06CE FE0D CPI CR 06D0 CAC406 JZ PRH1 06D3 FE2C CPI ',' 06D5 CAC406 JZ PRH1 06D8 FE30 CPI '0' JRC H0 06DA+38EF DB 38H,H0-$-1 06DC FE3A CPI '9'+1 JRC H1 06DE+380F DB 38H,H1-$-1 06E0 FE41 CPI 'A' JRC H0 06E2+38E7 DB 38H,H0-$-1 06E4 FE47 CPI 'F'+1 JRNC H0 06E6+30E3 DB 30H,H0-$-1 06E8 CDB800 CALL RST3 06EB D607 SUI 7 JR H2 06ED+1803 DB 18H,H2-$-1 06EF CDB800 H1: CALL RST3 06F2 D630 H2: SUI '0' 06F4 0C INR C 06F5 29 DAD H 06F6 29 DAD H 06F7 29 DAD H 06F8 29 DAD H 06F9 85 ADD L 06FA 6F MOV L, A JR H0 06FB+18CE DB 18H,H0-$-1 ;;;;;;;;;;;;;;;; ; HEX TO A, 2 DIGIT, NO-ECHO ;;;;;;;;;;;;;;;; 06FD CD0C07 HEXIN2: CALL HEXIN1 0700 D8 RC 0701 87 ADD A 0702 87 ADD A 0703 87 ADD A 0704 87 ADD A 0705 5F MOV E, A 0706 CD0C07 CALL HEXIN1 0709 D8 RC 070A 83 ADD E 070B C9 RET ;;;;;;;;;;;;;;;; ; HEX TO A, 1 DIGIT, NO-ECHO ;;;;;;;;;;;;;;;; 070C CD7006 HEXIN1: CALL INPUT 070F FE30 CPI '0' 0711 D8 RC 0712 FE3A CPI '9'+1 JRC HI1 0714+3809 DB 38H,HI1-$-1 0716 FE41 CPI 'A' 0718 D8 RC 0719 FE47 CPI 'F'+1 071B 3F CMC 071C D8 RC 071D D607 SUI 7 071F D630 HI1: SUI '0' 0721 C9 RET ;;;;;;;;;;;;;;;; ; DISASM (DE) ;;;;;;;;;;;;;;;; 0722 CD8B06 DISASM: CALL CRLF 0725 EB XCHG 0726 224280 SHLD DISR LXIX DISBUF 0729+DD21 DB 0DDH,21H 072B+4880 DW DISBUF 072D CDAC06 CALL PRHEX4 0730 3E3A MVI A, ':' 0732 CDB800 CALL RST3 0735 EB XCHG 0736 CD4E09 CALL DISSUB 0739 1A LDAX D ; OP-CODE 073A 4F MOV C, A 073B 13 INX D 073C 7E MOV A, M ; NOT FOUND 073D B7 ORA A JRNZ D0 073E+200F DB 20H,D0-$-1 0740 AF DERR: XRA A 0741 324480 STA DISX LXIX DISBUF 0744+DD21 DB 0DDH,21H 0746+4880 DW DISBUF 0748 2A4280 LHLD DISR 074B EB XCHG 074C 21B407 LXI H, MDB 074F 3E09 D0: MVI A, TAB D1: STX A, 0 0751+DD7700 DB 0DDH,70H+A,0 INXIX 0754+DD23 DB 0DDH,23H 0756 7E D2: MOV A, M 0757 23 INX H 0758 B7 ORA A JRZ D3 0759+281D DB 28H,D3-$-1 075B FE20 CPI ' ' ; SPACE -> TAB JRZ D0 075D+28F0 DB 28H,D0-$-1 075F FE69 CPI 'i' JRC D1 0761+38EE DB 38H,D1-$-1 EXX 0763+D9 DB 0D9H 0764 D669 SUI 'i' 0766 87 ADD A 0767 4F MOV C, A 0768 0600 MVI B, 0 076A 21B907 LXI H, JPT 076D 09 DAD B 076E 5E MOV E, M 076F 23 INX H 0770 56 MOV D, M 0771 215607 LXI H, D2 0774 E5 PUSH H 0775 D5 PUSH D EXX 0776+D9 DB 0D9H 0777 C9 RET 0778 3A4480 D3: LDA DISX 077B 47 MOV B, A 077C 3A4780 LDA DISF 077F B8 CMP B 0780 C24007 JNZ DERR MVIX 0, 0 0783+DD360000 DB 0DDH,36H,0,0 0787 2A4280 LHLD DISR 078A E5 PUSH H 078B EB XCHG 078C B7 ORA A DSBC D 078D+ED52 DB 0EDH,D*8+42H 078F D1 POP D 0790 45 MOV B, L 0791 0E04 MVI C, 4 0793 CD8C02 D4: CALL PSP 0796 1A LDAX D 0797 13 INX D 0798 CDB106 CALL PRHEX2 079B 0D DCR C DJNZ D4 079C+10F5 DB 10H,D4-$-1 SDED DISR 079E+ED53 DB 0EDH,53H 07A0+4280 DW DISR 07A2 79 MOV A, C 07A3 87 ADD A 07A4 81 ADD C 07A5 3C INR A 07A6 47 MOV B, A 07A7 3E20 MVI A, ' ' 07A9 CDB800 D5: CALL RST3 DJNZ D5 07AC+10FB DB 10H,D5-$-1 07AE 214880 LXI H, DISBUF 07B1 C38206 JMP MSG 07B4 4442206E00MDB: DB 'DB n', 0 07B9 7F08 JPT: DW REGX ; I -> HL/IX/IY 07BB 0008 DW COND8 ; J -> NZ/Z/NC/C/PO/PE/P/M 07BD 0508 DW COND4 ; K -> NZ/Z/NC/C 07BF 3308 DW RELB ; L -> RELATIVE 07C1 4008 DW BYTE2 ; M -> WORD 07C3 4C08 DW BYTE1 ; N -> BYTE 07C5 5108 DW RSTX ; O -> RST 07C7 5E08 DW REGA ; P -> BC/DE/HL/AF, (IX/IY) 07C9 A008 DW REGS ; Q -> BC/DE/HL/SP, (IX/IY) 07CB B308 DW REGH ; R -> B/C/D/E/H/L/(HL)/A, (IX/IY+D) 07CD B908 DW REGL ; S -> B/C/D/E/H/L/(HL)/A, (IX/IY+D) 07CF 4009 DW BITN ; T -> 0-7 ;;;;;;;;;;;;;;;; ; PUT HEX, 4 DIGIT FROM HL ;;;;;;;;;;;;;;;; 07D1 7C IXHEX4: MOV A, H 07D2 CDD607 CALL IXHEX2 07D5 7D MOV A, L ;;;;;;;;;;;;;;;; ; PUT HEX, 2 DIGIT FROM A ;;;;;;;;;;;;;;;; 07D6 F5 IXHEX2: PUSH PSW 07D7 0F RRC 07D8 0F RRC 07D9 0F RRC 07DA 0F RRC 07DB CDDF07 CALL IXHEX 07DE F1 POP PSW ;;;;;;;;;;;;;;;; ; PUT HEX, 1 DIGIT FROM A ;;;;;;;;;;;;;;;; 07DF E60F IXHEX: ANI 0FH 07E1 C630 ADI '0' 07E3 FE3A CPI '9'+1 JRC IXH1 07E5+3802 DB 38H,IXH1-$-1 07E7 C607 ADI 7 IXH1: STX A, 0 07E9+DD7700 DB 0DDH,70H+A,0 INXIX 07EC+DD23 DB 0DDH,23H 07EE C9 RET ;;;;;;;;;;;;;;;; ; PUT MESSAGE ;;;;;;;;;;;;;;;; 07EF E3 IXMSGS: XTHL 07F0 CDF507 CALL IXMSG 07F3 E3 XTHL 07F4 C9 RET ;;;;;;;;;;;;;;;; ; PUT (HL)... ;;;;;;;;;;;;;;;; 07F5 7E IXMSG: MOV A, M 07F6 23 INX H 07F7 B7 ORA A 07F8 C8 RZ STX A, 0 07F9+DD7700 DB 0DDH,70H+A,0 INXIX 07FC+DD23 DB 0DDH,23H JR IXMSG 07FE+18F5 DB 18H,IXMSG-$-1 ; J = NZ/Z/NC/C/PO/PE/P/M 0800 79 COND8: MOV A, C 0801 E638 ANI 38H JR COND1 0803+1803 DB 18H,COND1-$-1 ; K = NZ/Z/NC/C 0805 79 COND4: MOV A, C 0806 E618 ANI 18H 0808 0F COND1: RRC 0809 0F RRC 080A 4F MOV C, A 080B 0600 MVI B, 0 080D E5 PUSH H 080E 212308 LXI H, MCC 0811 09 DAD B 0812 7E MOV A, M STX A, 0 0813+DD7700 DB 0DDH,70H+A,0 INXIX 0816+DD23 DB 0DDH,23H 0818 23 INX H 0819 7E MOV A, M 081A E1 POP H 081B B7 ORA A 081C C8 RZ STX A, 0 081D+DD7700 DB 0DDH,70H+A,0 INXIX 0820+DD23 DB 0DDH,23H 0822 C9 RET 0823 4E5A5A00 MCC: DB 'NZ', 'Z', 0 0827 4E434300 DB 'NC', 'C', 0 082B 504F5045 DB 'PO', 'PE' 082F 50004D00 DB 'P', 0, 'M', 0 ; L = 1BYTE-REL 0833 1A RELB: LDAX D 0834 13 INX D 0835 E5 PUSH H 0836 6F MOV L, A 0837 87 ADD A 0838 9F SBB A 0839 67 MOV H, A 083A 19 DAD D 083B CDD107 CALL IXHEX4 083E E1 POP H 083F C9 RET ; M = 2BYTE 0840 E5 BYTE2: PUSH H 0841 EB XCHG 0842 5E MOV E, M 0843 23 INX H 0844 56 MOV D, M 0845 23 INX H 0846 EB XCHG 0847 CDD107 CALL IXHEX4 084A E1 POP H 084B C9 RET ; N = 1BYTE 084C 1A BYTE1: LDAX D 084D 13 INX D 084E C3D607 JMP IXHEX2 ; O = RST 0851 79 RSTX: MOV A, C 0852 E638 ANI 38H 0854 CDD607 CALL IXHEX2 MVIX 'H', 0 0857+DD360048 DB 0DDH,36H,0,'H' INXIX 085B+DD23 DB 0DDH,23H 085D C9 RET ; P = BC/DE/HL/AF 085E 79 REGA: MOV A, C 085F 0F RRC 0860 0F RRC 0861 0F RRC 0862 E606 ANI 6 0864 FE04 CPI 4 JRNC REG8 0866+300E DB 30H,REG8-$-1 0868 C642 REG7: ADI 'B' ; BC/DE STX A, 0 086A+DD7700 DB 0DDH,70H+A,0 INXIX 086D+DD23 DB 0DDH,23H 086F 3C INR A STX A, 0 0870+DD7700 DB 0DDH,70H+A,0 INXIX 0873+DD23 DB 0DDH,23H 0875 C9 RET REG8: JRZ REGX 0876+2807 DB 28H,REGX-$-1 0878 CDEF07 CALL IXMSGS ; AF 087B 414600 DB 'AF', 0 087E C9 RET ; HL/IX/IY 087F 3A4480 REGX: LDA DISX 0882 B7 ORA A JRNZ REGE 0883+2007 DB 20H,REGE-$-1 0885 CDEF07 CALL IXMSGS ; HL 0888 484C00 DB 'HL', 0 088B C9 RET 088C 324780 REGE: STA DISF MVIX 'I', 0 ; IX/IY 088F+DD360049 DB 0DDH,36H,0,'I' INXIX 0893+DD23 DB 0DDH,23H 0895 D6ED SUI 0EDH 0897 9F SBB A 0898 C659 ADI 'Y' STX A, 0 089A+DD7700 DB 0DDH,70H+A,0 INXIX 089D+DD23 DB 0DDH,23H 089F C9 RET ; Q = BC/DE/HL/SP 08A0 79 REGS: MOV A, C 08A1 0F RRC 08A2 0F RRC 08A3 0F RRC 08A4 E606 ANI 6 08A6 FE04 CPI 4 JRC REG7 ; BC/DE 08A8+38BE DB 38H,REG7-$-1 JRZ REGX ; HL/IX/IY 08AA+28D3 DB 28H,REGX-$-1 08AC CDEF07 CALL IXMSGS ; SP 08AF 535000 DB 'SP', 0 08B2 C9 RET ; R = B/C/D/E/H/L/(HL)/A 08B3 79 REGH: MOV A, C 08B4 0F RRC 08B5 0F RRC 08B6 0F RRC JR REG10 08B7+1801 DB 18H,REG10-$-1 ; R = B/C/D/E/H/L/(HL)/A 08B9 79 REGL: MOV A, C 08BA E607 REG10: ANI 7 08BC FE04 CPI 4 JRNC REG11 08BE+3008 DB 30H,REG11-$-1 08C0 C642 ADI 'B' ; B/C/D/E STX A, 0 08C2+DD7700 DB 0DDH,70H+A,0 INXIX 08C5+DD23 DB 0DDH,23H 08C7 C9 RET REG11: JRNZ REG12 08C8+2007 DB 20H,REG12-$-1 MVIX 'H', 0 ; H 08CA+DD360048 DB 0DDH,36H,0,'H' INXIX 08CE+DD23 DB 0DDH,23H 08D0 C9 RET 08D1 FE06 REG12: CPI 6 JRNC REG13 08D3+3007 DB 30H,REG13-$-1 MVIX 'L', 0 ; L 08D5+DD36004C DB 0DDH,36H,0,'L' INXIX 08D9+DD23 DB 0DDH,23H 08DB C9 RET REG13: JRZ REG14 08DC+2807 DB 28H,REG14-$-1 MVIX 'A', 0 ; A 08DE+DD360041 DB 0DDH,36H,0,'A' INXIX 08E2+DD23 DB 0DDH,23H 08E4 C9 RET 08E5 3A4480 REG14: LDA DISX 08E8 B7 ORA A JRNZ REG15 08E9+2009 DB 20H,REG15-$-1 08EB CDEF07 CALL IXMSGS ; (HL) 08EE 28484C2900 DB '(HL)', 0 08F3 C9 RET 08F4 324780 REG15: STA DISF MVIX '(', 0 ; (IX/IY+D) 08F7+DD360028 DB 0DDH,36H,0,'(' INXIX 08FB+DD23 DB 0DDH,23H 08FD CD8C08 CALL REGE 0900 3A4580 LDA DISB ; DD/FD CB D OP? 0903 B7 ORA A JRNZ REG16 0904+2005 DB 20H,REG16-$-1 0906 1A LDAX D 0907 13 INX D 0908 324680 STA DISD REG16: EXX 090B+D9 DB 0D9H MVIX '+', 0 090C+DD36002B DB 0DDH,36H,0,'+' 0910 3A4680 LDA DISD 0913 B7 ORA A 0914 F21D09 JP REG17 NEG 0917+ED44 DB 0EDH,44H MVIX '-', 0 0919+DD36002D DB 0DDH,36H,0,'-' REG17: INXIX 091D+DD23 DB 0DDH,23H 091F 0600 MVI B, 0 0921 0EFF REG18: MVI C, -1 0923 0C REG19: INR C 0924 D60A SUI 10 JRNC REG19 0926+30FB DB 30H,REG19-$-1 0928 C63A ADI '0'+10 092A F5 PUSH PSW 092B 04 INR B 092C 79 MOV A, C 092D B7 ORA A JRNZ REG18 092E+20F1 DB 20H,REG18-$-1 0930 F1 REG20: POP PSW STX A, 0 0931+DD7700 DB 0DDH,70H+A,0 INXIX 0934+DD23 DB 0DDH,23H DJNZ REG20 0936+10F8 DB 10H,REG20-$-1 EXX 0938+D9 DB 0D9H MVIX ')', 0 0939+DD360029 DB 0DDH,36H,0,')' INXIX 093D+DD23 DB 0DDH,23H 093F C9 RET ; 0-7 0940 79 BITN: MOV A, C 0941 0F RRC 0942 0F RRC 0943 0F RRC 0944 E607 ANI 7 0946 C630 ADI '0' STX A, 0 0948+DD7700 DB 0DDH,70H+A,0 INXIX 094B+DD23 DB 0DDH,23H 094D C9 RET ;;;;;;;;;;;;;;;; ; DE = TARGET ADRS ; HL <- STRING ;;;;;;;;;;;;;;;; 094E AF DISSUB: XRA A 094F 324780 STA DISF 0952 324480 STA DISX 0955 324580 STA DISB 0958 21A309 LXI H, OPTBL 095B 1A LDAX D 095C FECB CPI 0CBH JRZ DISCB 095E+2818 DB 28H,DISCB-$-1 0960 FEDD CPI 0DDH JRZ DISDD 0962+2804 DB 28H,DISDD-$-1 0964 FEFD CPI 0FDH JRNZ DIS11 0966+2019 DB 20H,DIS11-$-1 0968 324480 DISDD: STA DISX ; DD/FD 096B 13 INX D 096C 1A LDAX D 096D FECB CPI 0CBH JRNZ DISL 096F+2018 DB 20H,DISL-$-1 0971 13 INX D ; DD/FD CB D 0972 1A LDAX D 0973 324680 STA DISD 0976 3ECB MVI A, 0CBH 0978 324580 DISCB: STA DISB ; (DD/FD) CB 097B 13 INX D 097C 21890B LXI H, CBTBL JR DISL 097F+1808 DB 18H,DISL-$-1 0981 FEED DIS11: CPI 0EDH JRNZ DISL 0983+2004 DB 20H,DISL-$-1 0985 13 INX D ; ED XX 0986 21D80B LXI H, EDTBL 0989 1A DISL: LDAX D 098A A6 ANA M 098B 23 INX H 098C BE NEXT: CMP M 098D 23 INX H 098E C8 RZ ; FOUND 098F F5 PUSH PSW 0990 AF XRA A 0991 BE N1: CMP M ; SKIP STRING 0992 23 INX H JRNZ N1 0993+20FC DB 20H,N1-$-1 0995 7E MOV A, M 0996 B7 ORA A JRZ MASK 0997+2803 DB 28H,MASK-$-1 0999 F1 POP PSW JR NEXT 099A+18F0 DB 18H,NEXT-$-1 099C F1 MASK: POP PSW 099D 23 INX H 099E 7E MOV A, M 099F B7 ORA A 09A0 C8 RZ ; NOT FOUND JR DISL 09A1+18E6 DB 18H,DISL-$-1 09A3 FF OPTBL: DB 0FFH 09A4 004E4F5000 DB 000H, 'NOP', 0 09A9 07524C4341 DB 007H, 'RLCA', 0 09AF 0845582041 DB 008H, 'EX AF,AF''', 0 09BA 0F52524341 DB 00FH, 'RRCA', 0 09C0 10444A4E5A DB 010H, 'DJNZ l', 0 09C8 17524C4100 DB 017H, 'RLA', 0 09CD 184A52206C DB 018H, 'JR l', CR, LF, 0 09D5 1F52524100 DB 01FH, 'RRA', 0 09DA 224C442028 DB 022H, 'LD (m),i', 0 09E4 2744414100 DB 027H, 'DAA', 0 09E9 2A4C442069 DB 02AH, 'LD i,(m)', 0 09F3 2F43504C00 DB 02FH, 'CPL', 0 09F8 324C442028 DB 032H, 'LD (m),A', 0 0A02 3753434600 DB 037H, 'SCF', 0 0A07 3A4C442041 DB 03AH, 'LD A,(m)', 0 0A11 3F43434600 DB 03FH, 'CCF', 0 0A16 7648414C54 DB 076H, 'HALT', CR, LF, 0 0A1E C34A50206D DB 0C3H, 'JP m', CR, LF, 0 0A26 C641444420 DB 0C6H, 'ADD A,n', 0 0A2F C95245540D DB 0C9H, 'RET', CR, LF, 0 0A36 CD43414C4C DB 0CDH, 'CALL m', 0 0A3E CE41444320 DB 0CEH, 'ADC A,n', 0 0A47 D34F555420 DB 0D3H, 'OUT n,A', 0 0A50 D653554220 DB 0D6H, 'SUB n', 0 0A57 D945585800 DB 0D9H, 'EXX', 0 0A5C DB494E2041 DB 0DBH, 'IN A,n', 0 0A64 DE53424320 DB 0DEH, 'SBC A,n', 0 0A6D E345582028 DB 0E3H, 'EX (SP),i', 0 0A78 E6414E4420 DB 0E6H, 'AND n', 0 0A7F E94A502028 DB 0E9H, 'JP (i)', CR, LF, 0 0A89 EB45582044 DB 0EBH, 'EX DE,HL', 0 0A93 EE584F5220 DB 0EEH, 'XOR n', 0 0A9A F3444900 DB 0F3H, 'DI', 0 0A9E F64F52206E DB 0F6H, 'OR n', 0 0AA4 F94C442053 DB 0F9H, 'LD SP,i', 0 0AAD FB454900 DB 0FBH, 'EI', 0 0AB1 FE4350206E DB 0FEH, 'CP n', 0 0AB7 00F8 DB 0, 0F8H 0AB9 8041444420 DB 080H, 'ADD A,s', 0 0AC2 8841444320 DB 088H, 'ADC A,s', 0 0ACB 9053554220 DB 090H, 'SUB s', 0 0AD2 9853424320 DB 098H, 'SBC A,s', 0 0ADB A0414E4420 DB 0A0H, 'AND s', 0 0AE2 A8584F5220 DB 0A8H, 'XOR s', 0 0AE9 B04F522073 DB 0B0H, 'OR s', 0 0AEF B843502073 DB 0B8H, 'CP s', 0 0AF5 00EF DB 0, 0EFH 0AF7 024C442028 DB 002H, 'LD (q),A', 0 0B01 0A4C442041 DB 00AH, 'LD A,(q)', 0 0B0B 00E7 DB 0, 0E7H 0B0D 204A52206B DB 020H, 'JR k,l', 0 0B15 00CF DB 0, 0CFH 0B17 014C442071 DB 001H, 'LD q,m', 0 0B1F 03494E4320 DB 003H, 'INC q', 0 0B26 0941444420 DB 009H, 'ADD i,q', 0 0B2F 0B44454320 DB 00BH, 'DEC q', 0 0B36 C1504F5020 DB 0C1H, 'POP p', 0 0B3D C550555348 DB 0C5H, 'PUSH p', 0 0B45 00C7 DB 0, 0C7H 0B47 04494E4320 DB 004H, 'INC r', 0 0B4E 0544454320 DB 005H, 'DEC r', 0 0B55 064C442072 DB 006H, 'LD r,n', 0 0B5D C052455420 DB 0C0H, 'RET j', 0 0B64 C24A50206A DB 0C2H, 'JP j,m', 0 0B6C C443414C4C DB 0C4H, 'CALL j,m', 0 0B76 C752535420 DB 0C7H, 'RST o', 0 0B7D 00C0 DB 0, 0C0H 0B7F 404C442072 DB 040H, 'LD r,s', 0 0B87 0000 DB 0, 0 0B89 F8 CBTBL: DB 0F8H 0B8A 00524C4320 DB 000H, 'RLC s', 0 0B91 0852524320 DB 008H, 'RRC s', 0 0B98 10524C2073 DB 010H, 'RL s', 0 0B9E 1852522073 DB 018H, 'RR s', 0 0BA4 20534C4120 DB 020H, 'SLA s', 0 0BAB 2853524120 DB 028H, 'SRA s', 0 0BB2 3853524C20 DB 038H, 'SRL s', 0 0BB9 00C0 DB 0, 0C0H 0BBB 4042495420 DB 040H, 'BIT t,s', 0 0BC4 8052455320 DB 080H, 'RES t,s', 0 0BCD C053455420 DB 0C0H, 'SET t,s', 0 0BD6 0000 DB 0, 0 0BD8 FF EDTBL: DB 0FFH 0BD9 444E454700 DB 044H, 'NEG', 0 0BDE 455245544E DB 045H, 'RETN', CR, LF, 0 0BE6 46494D2030 DB 046H, 'IM 0', 0 0BEC 474C442049 DB 047H, 'LD I,A', 0 0BF4 4D52455449 DB 04DH, 'RETI', CR, LF, 0 0BFC 4F4C442052 DB 04FH, 'LD R,A', 0 0C04 56494D2031 DB 056H, 'IM 1', 0 0C0A 574C442041 DB 057H, 'LD A,I', 0 0C12 5E494D2032 DB 05EH, 'IM 2', 0 0C18 5F4C442041 DB 05FH, 'LD A,R', 0 0C20 6752524400 DB 067H, 'RRD', 0 0C25 6F524C4400 DB 06FH, 'RLD', 0 0C2A A04C444900 DB 0A0H, 'LDI', 0 0C2F A143504900 DB 0A1H, 'CPI', 0 0C34 A2494E4900 DB 0A2H, 'INI', 0 0C39 A34F555449 DB 0A3H, 'OUTI', 0 0C3F A84C444400 DB 0A8H, 'LDD', 0 0C44 A943504400 DB 0A9H, 'CPD', 0 0C49 AA494E4400 DB 0AAH, 'IND', 0 0C4E AB4F555444 DB 0ABH, 'OUTD', 0 0C54 B04C444952 DB 0B0H, 'LDIR', 0 0C5A B143504952 DB 0B1H, 'CPIR', 0 0C60 B2494E4952 DB 0B2H, 'INIR', 0 0C66 B34F544952 DB 0B3H, 'OTIR', 0 0C6C B84C444452 DB 0B8H, 'LDDR', 0 0C72 B943504452 DB 0B9H, 'CPDR', 0 0C78 BA494E4452 DB 0BAH, 'INDR', 0 0C7E BB4F544452 DB 0BBH, 'OTDR', 0 0C84 00CF DB 0, 0CFH 0C86 4253424320 DB 042H, 'SBC HL,q', 0 0C90 434C442028 DB 043H, 'LD (m),q', 0 0C9A 4A41444320 DB 04AH, 'ADC HL,q', 0 0CA4 4B4C442071 DB 04BH, 'LD q,(m)', 0 0CAE 00C7 DB 0, 0C7H 0CB0 40494E2072 DB 040H, 'IN r,(C)', 0 0CBA 414F555420 DB 041H, 'OUT (C),r', 0 0CC5 0000 DB 0, 0 0CC7 END