; ; File: ice.bin ; ; Size: 4096 bytes ; Checksum: 8F71 ; CRC-32: 2DD54974 ; ; Date: Sat Aug 18 17:33:41 2018 ; ; CPU: Zilog Z80 (Z80 family) ; ; ; ;.pabs ;.phex ;.xlink ;.xsym ;.title "Z80 IceBox version 2.0" ;; ************************************** ;; ** ** ;; ** IIIIII CCCCCC EEEEEEEEEE ** ;; ** II CC CC EE ** ;; ** II CC EE ** ;; ** II CC EEEEEE ** ;; ** II CC EE ** ;; ** II CC CC EE ** ;; ** IIIIII CCCCCC EEEEEEEEEE ** ;; ** ** ;; ************************************** ;; * EQUATES * ;; *********** ; .PRNTX "Z80 ICEBOX - HEAD OF ASSEMBLY" ;REGSS =\ "1=ASSEMBLE REGISTER MODIFY CODE,0=DROP" ;MEMSS =\ "1=ASSEMBLE MEMORY & PORT MODIFY,0=DROP" ;R2708 =\ "1=2708 0=2716 VERSION" ; ;ICERAM == 0FC00H ;ICEROM == 0F000H ;MESSAGES== 0D002H ;MESS6 == 0D000H ;CTRLC == 'C'&1FH ;CTRLX == 'X'&1FH ;CR == 0DH ;LF == 0AH ;ARROW == 5EH ;DEL == 7FH ;BS == 8 ;DELCHAR == 5FH ;SPACE == 20H ;COMMA == 02CH ;SLASH == 02FH ;PERIOD == 02EH ; INPUT-OUTPUT EQUATES ;CRTD == 0E0H ;CRTS == CRTD+1 ;LPTD == 0E2H ;LPTS == LPTD+1 ;DATA == 0E4H ;SECTOR == DATA+1 ;TRACK == DATA+2 ;COMMAND == DATA+3 ;STATUS == COMMAND ;SELECT == 0F1H ;FIFO == 0F2H ;CENABLE == 0F0H ;EXTL == 0F8H ;EXTH == 0F9H ;WPROTL == 0FAH ;WPROTH == 0FBH ;BADRH == 0FCH ;BADRL == 0FDH ;BTYPE == 0FEH ;MISC == 0FFH ;IOBYTE == 3 ; ****************** ; * INITIALIZATION * ; ****************** ; .LOC ICEROM org 0F000H ; F000 : C3 03 F0 jp ice ; GET PC TO F003 ; F003 ICE: F003 : 31 20 FC ld sp, STACK ; FC20 F006 : AF xor a ; ZERO ALL THE MAPS F007 : 06 05 ld b,005H F009 : 21 42 FC ld hl,DMPLOW ; FC42 F00C ..CLR: F00C : 77 ld (hl),a F00D : 23 inc hl F00E : 10 FC djnz ..CLR ; F00C F010 : 01 F8 08 ld bc,008F8H ; AND TURN ON STUFF F013 ..INIT: F013 : ED 79 out (c),a F015 : 0C inc c F016 : 20 FB jr nz, ..INIT ; F013 ; INITALIZE THE USARTS F018 : 01 E1 02 ld bc,002E1H F01B : 11 40 AE ld de,0AE40H ; INITALIZATION DATA F01E : 21 27 4E ld hl,04E27H ; *16\8 BITS\NO PARITY\1STOP F021 ..ILP2: F021 : ED 51 out (c),d F023 : ED 59 out (c),e F025 : ED 61 out (c),h F027 : ED 69 out (c),l F029 : 0D dec c ; ==CRTD F02A : ED 78 in a,(c) ; FLUSH THE DATA F02C : ED 78 in a,(c) F02E : 0E E3 ld c,LPTS ; 0E3H F030 : 10 EF djnz ..ILP2 ; F021 ; INIT THE RAM F032 : 21 20 FC ld hl,STACK ; FC20 F035 : 22 40 FC ld (MONSP),hl ; SET UP A REASONABLE MONITOR STACK F038 : 3E 01 ld a,001H ; ICE SIGNON F03A : CD BD F0 call PRINTM ; F0BD F03D : C3 17 F1 jp MAIN ; F117 ; ; CRTOUT - SEND A CHARACTER TO THE CRT ; ENTRY - A -> CHARACTER ; EXIT - EVERYTHING RESTORED ; F040 CONOUT: F040 : 79 ld a,c F041 CRTOUT: F041 : C5 push bc F042 : 0E E1 ld c,CRTS ; 0E1H F044 : 18 0C jr UART ; F052 ; ; LPTOUT - SEND CHARACTER TO PRINTER, EAT CR's ; WAIT FOR DATASET READY. ; ENTRY - A -> CHARACTER ; EXIT - ALL RESTORED ; F046 LPTOUT: F046 : FE 0D cp 00DH ; NO CARRIAGE RETURN F048 : C8 ret z F049 : C5 push bc F04A : 0E E3 ld c,LPTs ; 0E3H F04C ..LPT: F04C : ED 40 in b,(c) F04E : CB 78 bit 7,b ; DATA SET READY F050 : 20 FA jr nz, ..LPT ; F04C F052 UART: F052 : ED 40 in b,(c) F054 : CB 40 bit 0,b F056 : 28 FA jr z,UART ; F052 F058 : 0D dec c F059 : ED 79 out (c),a F05B : C1 pop bc F05C : C9 ret ; F05D : FF DB X0FF F05E : FF DB X0FF F05F : FF DB X0FF F060 : FF DB X0FF F061 : FF DB X0FF F062 : FF DB X0FF F063 : FF DB X0FF F064 : FF DB X0FF F065 : FF DB X0FF ; ; NON MASKABLE INTERRUPT - BREAKPOINT PROCESSING ; ; .LOC ICEROM+66H NMI POINT ; F066 : C3 69 F0 jp NMI ; CHANGE TOP ADDRESS BITS TO REAL ADDR F069 F069 NMI: F069 : 32 3E FC ld (XFC3E),a ; STA AFSAVE F06C : DB F2 in a,(0F2H) ; IN FIFO F06E : 32 29 FC ld (XFC29),a ; STA PCSAVE+1 F071 : DB F2 in a,(0F2H) ; IN FIFO F073 : 32 28 FC ld (XFC28),a ; STA PCSAVE F076 : DB F2 in a,(0F2H) ; IN FIFO SHOULD BE A AGAIN F078 : 33 inc sp F079 : 33 inc sp F07A : ED 73 2A FC ld (XFC2A),sp ; LSPD SPSAVE F07E : 31 40 FC ld sp,XFC40 ; LXI SP, AFSAVE+2 ; PUSH EVERYTHING F081 : F5 push af F082 : AF xor a F083 : 3C inc a ; WRITE PROTECT F084 : D3 FF out (0FFH),a ; OUT BTYPE F086 : C5 push bc F087 : D5 push de F088 : E5 push hl F089 : DD E5 push ix F08B : FD E5 push iy F08D : 08 ex af,af' F08E : F5 push af F08F : D9 exx F090 : C5 push bc F091 : D5 push de F092 : E5 push hl F093 : 31 20 FC ld sp,XFC20 ; LXI SP, STACK F096 : ED 57 ld a,i ; CHECK INTERRUPTS F098 : 3E FF ld a,0FFH ; ENABLED F09A : EA 9E F0 jp pe,..NMI2 ; F09E F09D : AF xor a F09E ..NMI2: F09E : 32 25 FC ld (XFC25),a ; STA IFF F0A1 : 2A 20 FC ld hl,(XFC20) ; LXI H,NMIJP F0A4 : E9 jp (hl) ; F0A5 LIST: F0A5 : 3A 03 00 ld a,(X0003) ; LDA IOBYTE F0A8 : E6 C0 and 0C0H F0AA : 79 ld a,c F0AB : F2 40 F0 jp p,CONOUT ; F040 F0AE : E2 46 F0 jp po,LPTOUT ; F046 F0B1 : C5 push bc F0B2 : 0E E3 ld c,0E3H F0B4 LF0B4: F0B4 : ED 40 in b,(c) F0B6 : CB 78 bit 7,b F0B8 : CA 52 F0 jp z,UART ; F052 F0BB : 18 F7 jr LF0B4 ; ; PRINTM - PRINT MESSAGE FROM A POOL OF MESSAGES ; ENTRY - A -> NUMBER OF THE MESSAGE ; EXIT - A -> ZORKED ; H -> ZORKED ; F0BD PRINTM: F0BD : 21 A5 F8 ld hl,MESSAGES F8A5 F0C0 : B7 or a F0C1 : 28 0B jr z,CONOMSG F0CE F0C3 : C5 push bc F0C4 : 47 ld b,a F0C5 ..LOOP: F0C5 : 7E ld a,(hl) F0C6 : E6 80 and 080H F0C8 : 23 inc hl F0C9 : 28 FA jr z,..LOOP F0C5 F0CB : 10 F8 djnz ..LOOP F0C5 F0CD : C1 pop bc ; ; CONOMSG - PRINT MESSAGE ON CONSOLE ; ENTRY - HL -> STRING ENDD BY BYTE WITH SIGN BIT ON ; EXIT - A -> ZORKED ; F0CE CONOMSG: F0CE : 7E ld a,(hl) F0CF : CD 41 F0 call CRTOUT F041 F0D2 : CB 7F bit 7,a ; TERMINATD BY BIT 7 ON F0D4 : C0 ret nz F0D5 : 23 inc hl F0D6 : 18 F6 jr CONOMSG F0CE ; ; GETCHR - GET A CHARACTER FROM THE CRT AND ; AND FORCE TO UPPER CASE ; EXIT - A -> CHARACTER ; F0D8 GETCHR: F0D8 : CD E1 F0 call CRTIN F0E1 F0DB : FE 60 cp 060H ; IS CHAR LOWER CASE??? F0DD : F8 ret m ; RETURN IF CHAR OK F0DE : E6 5F and 05FH ; FORCE TO UPPER CASE F0E0 : C9 ret ; F0E1 CRTIN: F0E1 : CD F8 F0 call CRTSTAT F0F8 F0E4 : 28 FB jr z,CRTIN F0E1 F0E6 : DB E0 in a,(0E0H) CRTD F0E8 : E6 7F and 07FH F0EA : FE 5F cp 05FH F0EC : C0 ret nz F0ED : 3E 7F ld a,07FH F0EF : C9 ret ; F0F0 LPTIN: F0F0 : CD FD F0 call LPTSTAT F0FD F0F3 : 28 FB jr z,LPTIN F0F0 F0F5 : DB E2 in a,(0E2H) LPTD F0F7 : C9 ret ; F0F8 CRTSTAT: CONSTAT: F0F8 : C5 push bc F0F9 : 0E E1 ld c,0E1H CRTS F0FB : 18 03 jr UARTSTAT F100 ; F0FD LPTSTAT: F0FD : C5 push bc F0FE : 0E E3 ld c,LPTS 0E3H F100 UARTSTAT: F100 : ED 78 in a,(c) F102 : C1 pop bc F103 : E6 02 and 002H ; DATA READY? F105 : C8 ret z F106 : 3E FF ld a,0FFH ; TRUE FOR CP/M F108 : C9 ret ; ; INPUT ROUTINE FOR DEBUG ; F109 INCHAR: F109 : CD D8 F0 call GETCHR F0D8 F10C : FE 18 cp CTRLX 018H F10E : C0 ret nz F10F : C3 56 F3 jp DEBUG F356 ; ; UPPER LEVEL ICE ; F112 ERROR: F112 : 3E 00 ld a,000H ; PRINT 'WHAT?' F114 : CD BD F0 call PRINTM F0BD F117 MAINLOOP: ; PROMPT USER F117 : 3E 02 ld a,002H ; % F119 : CD BD F0 call PRINTM F0BD F11C : CD D8 F0 call GETCHR F0D8 F11F : FE 03 cp CTRLC 003H F121 : 28 51 jr z,BOOT ; ^C = BOOT CP/M F174 F123 : FE 18 cp CTRLX 018H F125 : 28 F0 jr z,MAINLOOP ; ^X = KILL LINE F117 F127 : FE 41 cp 'A' 041H F129 : 28 10 jr z,ARCADESET ; A = SET ARCADE MODE F13B F12B : FE 43 cp 'C' 043H F12D : 28 16 jr z,COMERCIAL ; C = SET COMMERCIAL MODE F145 F12F : FE 44 cp 'D' 044H F131 : CA 4A F3 jp z,DEBUGE ; D = DEBUG MODE F34A F134 : FE 14 cp 014H F136 : CA 60 F1 jp z,TERSE ; ^T = BOOT TERSE F160 F139 : 18 D7 jr ERROR F112 ; F13B ARCADESET: ; SET MEMORY MAP/WRITE PROTECT F13B : 3E 18 ld a,018H F13D : 11 13 00 ld de,00013H F140 : 21 FF FF ld hl,0FFFFH F143 : 18 08 jr PREBUG ; F14D ; F145 COMERCIAL: F145 : 3E 19 ld a,019H F147 : 11 F0 50 ld de,050F0H F14A : 21 FF FF ld hl,0FFFFH F14D PREBUG: ; SET WRITE PROTECT AND EXTERNAL MAP F14D : 0E F8 ld c,EXTL 0F8H F14F : ED 59 out (c),e F151 : 0C inc c F152 : ED 51 out (c),d F154 : 0C inc c F155 : ED 69 out (c),l F157 : 0C inc c F158 : ED 61 out (c),h F15A : CD BD F0 call PRINTM F0BD F15D : C3 4A F3 jp DEBUGE F34A ; ; ^T BOOT TERSE F160 TERSE: F160 : CD 02 F2 call HOME F202 F163 : 0E 01 ld c,001H F165 : CD 47 F2 call SETSEC F247 F168 : 21 00 00 ld hl,X0000 F16B : 1E 20 ld e,020H F16D : CD 14 F2 call TERSERD F214 F170 LF170: F170 : C3 00 00 jp L0000 ; jmp to TERSE bootstrap ; F173 WBOOT: F173 : 3E AF ld a,0AFH F175 : 08 ex af,af' F176 : CD 02 F2 call HOME F202 F179 : 0E 02 ld c,002H F17B : CD 47 F2 call SETSEC F247 F17E : 01 80 FC ld bc,0FC80H BUFFER F181 : CD 52 F2 call SETDMA F252 F184 : CD 57 F2 call READ F257 F187 : B7 or a F188 : C2 17 F1 jp nz,LF117 F18B : 3A 82 FC ld a,(XFC82) F18E : DE 03 sbc a,003H F190 : 2E 00 ld l,000H F192 : 67 ld h,a F193 : E5 push hl F194 : DD E1 pop ix F196 : 1E 19 ld e,019H F198 ..LP4: F198 : CD 14 F2 call DSTAT F214 F19B : DB E6 in a,(0E6H) TRACK F19D : FE FE cp 0FEH F19F : 28 15 jr z,..LP5 F1B6 F1A1 : 3E 01 ld a,001H F1A3 : 32 24 FC ld (XFC24),a TRK F1A6 : 2F cpl F1A7 : D3 E5 out (0E5H),a SECTOR F1A9 : E5 push hl F1AA : CD DC F2 call SEEK F2DC F1AD : E1 pop hl F1AE : B7 or a F1AF : C2 17 F1 jp nz,MAINLOOP F117 F1B2 : 1E 12 ld e,012H ; MORE SECTORS F1B4 : 18 E2 jr ..LP4 F198 ; F1B6 ..LP5: F1B6 : DD E5 push ix F1B8 : E1 pop hl F1B9 : 01 00 15 ld bc,01500H F1BC ..LP6: F1BC : 7E ld a,(hl) F1BD : 2F cpl F1BE : 77 ld (hl),a F1BF : 23 inc hl F1C0 : 0D dec c F1C1 : C2 BC F1 jp nz,LF1BC F1C4 : 10 F6 djnz LF1BC ; DONE READING IN CPM NOW FIX JUMPS IN MEMORY ; AND DO MISC STUFF F1C6 : DD E5 push ix F1C8 : D1 pop de F1C9 : 3E C3 ld a,0C3H F1CB : 32 00 00 ld (X0000),a F1CE : 32 05 00 ld (X0005),a F1D1 : 21 06 08 ld hl,00806H F1D4 : 19 add hl,de F1D5 : 22 06 00 ld (X0006),hl F1D8 : 21 03 15 ld hl,01503H F1DB : 19 add hl,de F1DC : 22 01 00 ld (X0001),hl F1DF : 2B dec hl F1E0 : 2B dec hl F1E1 : 2B dec hl F1E2 : 11 1D F3 ld de,0F31DH F1E5 : EB ex de,hl F1E6 : 01 2D 00 ld bc,0002DH F1E9 : ED B0 ldir ; COLD OR WARM F1EB : 08 ex af,af' F1EC : B7 or a F1ED : 20 0B jr nz,BDONE F1FA ; COLD F1EF : 21 00 00 ld hl,X0000 F1F2 : 22 03 00 ld (X0003),hl F1F5 : 3E 03 ld a,003H F1F7 : CD BD F0 call PRINTM F1FA BDONE: F1FA : 3A 04 00 ld a,(X0004) F1FD : E6 01 and 001H F1FF : 4F ld c,a F200 : DD E9 jp (ix) ;INFO: index jump ; ; CP/M DISC ROUTINES ; ; HOME DRIVE F202 HOME: F202 : E1 pop hl F203 : 31 20 FC ld sp,XFC20 ; reset sp STACK F206 : E5 push hl F207 : ED 46 im 0 ; 8080 MODE F209 : 3E 04 ld a,004H F20B : D3 F1 out (0F1H),a SELECT F20D : 3E 05 ld a,005H F20F : D3 0E out (00EH),a 0EH <------?? F211 : C3 32 F2 jp HOME1 F232 ; ; READ for TERSE ; F214 TERSERD: F214 : 01 E4 80 ld bc,080E4H F217 : 3E 63 ld a,063H F219 : D3 E7 out (0E7H),a COMMAND F21B ..LOOP: F21B : FB ei F21C : 76 halt F21D : ED A2 ini F21F : C2 1B F2 jp nz,..LOOP F21B F222 : 1D dec e F223 : 06 80 ld b,080H F225 : C2 1B F2 jp nz,..LOOP F21B F228 : 3E 2F ld a,02FH F22A : D3 E7 out (0E7H),a COMMAND F22C ..WAIT: F22C : CD 0E F3 call DSTAT F30E F22F : 20 FB jr nz,..WAIT F22C F231 : C9 ret ; ; CP/M DISC ROUTINES ; ; HOME DRIVE - NO INPUTS F232 HOME1: F232 : AF xor a F233 : 32 24 FC ld (XFC24),a TRK F236 : 16 03 ld d,003H F238 : 21 38 F2 ld hl,0F238H F23B : 3E F1 ld a,0F1H ; WAS #00001110B IN LISTING F23D : D3 E7 out (0E7H),a COMMAND F23F : C3 F8 F2 jp SEEKWAIT F2F8 ;SETTRK - SET TRACK TO VALUE IN C REG F242 SETTRK: F242 : 79 ld a,c F243 : 32 24 FC ld (XFC24),a TRK F246 : C9 ret ; SETSEC - SET SECTOR TO VALUE IN C REG F247 SETSEC: F247 : 79 ld a,c F248 : 2F cpl F249 : D3 E5 out (0E5H),a SECTOR F24B : C9 ret ; ; SET DISC NUMBER TO VALUE IN C REGISTER (0-3) F24C SELDSK: F24C : 79 ld a,c F24D : CB D7 set 2,a F24F : D3 F1 out (0F1H),a SELECT F251 : C9 ret ;SET BUFFER ADDRESS TO VALUE IN BC REG PAIR F252 SETDMA: F252 : ED 43 22 FC ld (XFC22),bc DMA F256 : C9 ret ; F257 READ: F257 : CD DC F2 call SEEK F2DC F25A : B7 or a F25B : C0 ret nz F25C : 16 04 ld d,004H F25E ..READ1: F25E : 2A 22 FC ld hl,(XFC22) DMA F261 : 01 E4 80 ld bc,080E4H F264 : 3E 73 ld a,073H F266 : D3 E7 out (0E7H),a COMMAND F268 ..LOOP: F268 : FB ei F269 : 76 halt F26A : ED A2 ini F26C : C2 68 F2 jp nz,..LOOP F268 F26F : 2A 22 FC ld hl,(XFC22) DMA F272 : 06 80 ld b,080H F274 ..FLP: F274 : 7E ld a,(hl) F275 : 2F cpl F276 : 77 ld (hl),a F277 : 23 inc hl F278 : 10 FA djnz ..FLP F274 F27A : DB E7 in a,(0E7H) ; CHECK UP STATUS F27C : 2F cpl F27D : E6 9C and 09CH F27F : C8 ret z F280 : 15 dec d F281 : 20 DB jr nz,..READ1 F25E F283 : C3 B6 F2 jp WRER F2B6 ; WRITE A SECTOR. RETURNS 0=NO ERRORS, 1=ERROR F286 WRITE: F286 : CD DC F2 call SEEK F2DC F289 : B7 or a F28A : C0 ret nz F28B : 2A 22 FC ld hl,(XFC22) DMA F28E : 11 80 FC ld de,0FC80H BUFFER F291 : 06 80 ld b,080H F293 ..WLP0: F293 : 7E ld a,(hl) F294 : 23 inc hl F295 : 2F cpl F296 : 12 ld (de),a F297 : 13 inc de F298 : 10 F9 djnz ..WLP0 F293 F29A : 16 03 ld d,003H F29C ..ELP: F29C : 21 80 FC ld hl,0FC80H BUFFER F29F : 01 E4 80 ld bc,080E4H F2A2 : 3E 53 ld a,053H F2A4 : D3 E7 out (0E7H),a COMMAND F2A6 ..OLP: F2A6 : FB ei F2A7 : 76 halt F2A8 : ED A3 outi F2AA : C2 A6 F2 jp nz,..OLP F2A6 F2AD : DB E7 in a,(0E7H) STATUS F2AF : 2F cpl F2B0 : E6 FC and 0FCH F2B2 : C8 ret z F2B3 : 15 dec d F2B4 : 20 E6 jr nz,..ELP F29C F2B6 WRER: F2B6 : CB 7F bit 7,a F2B8 : C2 18 F3 jp nz,NOTRDY F318 F2BB : 06 0F ld b,00FH ; WRITE PROTECTED F2BD : CB 77 bit 6,a F2BF : 20 14 jr nz,WERROR F2D5 F2C1 : 06 10 ld b,010H ; WRITE FAULT F2C3 : CB 6F bit 5,a F2C5 : 20 0E jr nz,WERROR F2D5 F2C7 : 06 0D ld b,00DH ; RECORD NOT FOUND F2C9 : CB 67 bit 4,a F2CB : 20 08 jr nz,WERROR F2D5 F2CD : 06 0C ld b,00CH ; CRC ERROR F2CF : CB 5F bit 3,a F2D1 : 20 02 jr nz,WERROR F2D5 F2D3 : 06 0E ld b,00EH F2D5 WERROR: F2D5 : 78 ld a,b F2D6 : CD BD F0 call PRINTM F0BD F2D9 : 3E 01 ld a,001H F2DB : C9 ret ; F2DC SEEK: F2DC : 16 03 ld d,003H F2DE : 21 EE F2 ld hl,0F2EEH F2E1 : DB E6 in a,(0E6H) TRACK F2E3 : 06 07 ld b,007H F2E5 : 3A 24 FC ld a,(XFC24) TRK F2E8 : 2F cpl F2E9 : B8 cp b F2EA : 20 02 jr nz,..SK2 F2EE F2EC : AF xor a F2ED : C9 ret ; F2EE ..SK2: F2EE : 3A 24 FC ld a,(XFC24) TRK F2F1 : 2F cpl F2F2 : D3 E4 out (0E4H),a DATA F2F4 : 3E E1 ld a,0E1H ; SEEK, HEAD LOAD, 10MS F2F6 : D3 E7 out (0E7H),a COMMAND F2F8 SEEKWAIT: F2F8 : CD 0E F3 call DSTAT F30E F2FB : 20 FB jr nz,SEEKWAIT F2F8 F2FD : E6 18 and 018H ; SEEK ERROR / CRC ERROR F2FF : C8 ret z F300 : 15 dec d F301 : 28 01 jr z,LF304 F303 : E9 jp (hl) ;INFO: index jump ; F304 SEEKERROR: F304 : CB 67 bit 4,a F306 : 06 0B ld b,00BH ; SEEK ERROR F308 : 20 CB jr nz,WERROR F2D5 F30A : 06 0C ld b,00CH ; CRC ERROR F30C : 18 C7 jr WERROR F2D5 ; F30E DSTAT: F30E : DB E7 in a,(0E7H) STATUS F310 : 2F cpl F311 : CB 7F bit 7,a F313 : 20 03 jr nz,NOTRDY F318 F315 : CB 47 bit 0,a F317 : C9 ret ; F318 NOTRDY: F318 : 3E 0A ld a,00AH ; NOT READY F31A : CD BD F0 call PRINTM F0BD F31D : C3 17 F1 jp MAINLOOP F117 F320 : C3 73 F1 jp WBOOT F173 F323 : C3 F8 F0 jp CONSTAT F0F8 F326 : C3 E1 F0 jp CONIN F0E1 F329 : C3 40 F0 jp CONOUT F040 F32C : C3 A5 F0 jp LIST F0A5 F32F : C3 40 F0 jp PUNCH F040 F332 : C3 E1 F0 jp READER F0E1 F335 : C3 32 F2 jp HOME1 F232 F338 : C3 4C F2 jp SELDSK F24C F33B : C3 42 F2 jp SETTRK F242 F33E : C3 47 F2 jp SETSEC F247 F341 : C3 52 F2 jp SETDMA F252 F344 : C3 57 F2 jp READ F257 F347 : C3 86 F2 jp WRITE F286 ; F34A DEBUGE: F34A : 3E 1B ld a,01BH F34C : CD BD F0 call PRINTM F0BD F34F : 18 05 jr DEBUG F356 ; F351 DERROR: F351 : 3E 00 ld a,000H F353 : CD BD F0 call PRINTM F0BD F356 DEBUG: F356 : 31 20 FC ld sp,XFC20 STACK F359 : 21 56 F3 ld hl,0F356H DEBUG F35C : 22 20 FC ld (XFC20),hl NMIJP F35F : 3E 09 ld a,009H F361 : CD BD F0 call PRINTM F0BD F364 ..DB1: F364 : CD 09 F1 call INCHAR F109 F367 : 4F ld c,a F368 : AF xor a F369 : D3 FE out (0FEH),a F36B : 79 ld a,c F36C : FE 42 " B" cp 042H F36E : CA AB F3 jp z,BREAK F3AB F371 : FE 47 " G" cp 047H F373 : CA 0C F4 jp z,GO F40C F376 : FE 44 " D" cp 044H F378 : CA 17 F5 jp z,DUMP F517 F37B : FE 41 " A" cp 041H F37D : CA 35 F6 jp z,ASDUMP F635 F380 : FE 46 " F" cp 046H F382 : CA 48 F6 jp z,LF648 F385 : FE 51 " Q" cp 051H F387 : CA 17 F1 jp z,MAINLOOP LF117 F38A : FE 58 " X" cp 058H F38C : CA 85 F6 jp z,EXAMREGS F685 F38F : FE 52 " R" cp 052H F391 : CA F7 F6 jp z,REGISTER F6F7 F394 : FE 4D " M" cp 04DH F396 : CA 78 F4 jp z,MEMORY F478 F399 : FE 50 " P" cp 050H F39B : CA 7C F4 jp z,PORT F47C F39E : FE 53 " S" cp 053H F3A0 : CA 61 F4 jp z,STEP F461 F3A3 : FE 49 " I" cp 049H F3A5 : CA BA F7 jp z,LF7BA F3A8 : C3 64 F3 jp LF364 ; ; BREAKPOINT ; F3AB BREAK: F3AB : 3E 11 ld a,011H ; 'BREAK ON ' F3AD : CD BD F0 call PRINTM F0BD F3B0 ..BRK1: F3B0 : CD 09 F1 call INCHAR F109 F3B3 : FE 4D " M" cp 04DH F3B5 : 01 12 02 ld bc,00212H F3B8 : 28 1C jr z,..BRK2 F3D6 F3BA : FE 50 " P" cp 050H F3BC : 01 13 01 ld bc,00113H F3BF : 28 15 jr z,..BRK1 F3D6 F3C1 : FE 0D cp 00DH F3C3 : 20 EB jr nz,..BRK1 F3B0 F3C5 : 3E 0E ld a,00EH F3C7 : 32 47 FC ld (XFC47),a F3CA : D3 FE out (0FEH),a F3CC : 3E 1E ld a,01EH F3CE : CD BD F0 call PRINTM F0BD F3D1 : 01 FF FF ld bc,0FFFFH F3D4 : 18 2D jr LF403 ; F3D6 ..BRK2: F3D6 : 79 ld a,c F3D7 : CD BD F0 call PRINTM F0BD F3DA ..BRK0: F3DA : CD 09 F1 call INCHAR F109 F3DD : FE 52 " R" cp 052H F3DF : 20 06 jr nz,..BK2 F3E7 F3E1 : CB D8 set 3,b F3E3 : 3E 14 ld a,014H ; READ F3E5 : 18 08 jr ..BK3 F3EF ; F3E7 ..BK2: F3E7 : FE 57 " W" cp 057H F3E9 : 20 EF jr nz,..BRK0 F3DA F3EB : CB D0 set 2,b F3ED : 3E 15 ld a,015H F3EF ..BK3: F3EF : CD BD F0 call PRINTM F0BD F3F2 : 78 ld a,b F3F3 : D3 FE out (0FEH),a BTYPE F3F5 : 32 47 FC ld (XFC47),a BTSAVE F3F8 : 3E 16 ld a,016H ; ' AT ' F3FA : CD BD F0 call PRINTM F0BD F3FD : CD E8 F7 call KEYBD F7E8 F400 : CD 4A F8 call CONVRT F84A F403 LF403: F403 : 79 ld a,c F404 : D3 FD out (0FDH),a BADRL F406 : 78 ld a,b F407 : D3 FC out (0FCH),a BADRH F409 : C3 56 F3 jp DEBUG F356 ; ; GO ; F40C GO: F40C : 3E 17 ld a,017H F40E : CD BD F0 call PRINTM F0BD F411 : CD 09 F1 call INCHAR F109 F414 : FE 0D cp 00DH F416 : 28 10 jr z,..G2 F428 F418 : 3E 16 ld a,016H F41A : CD BD F0 call PRINTM F0BD F41D : CD E8 F7 call KEYBD F7E8 F420 : CD 4A F8 call CONVRT F84A F423 : 60 ld h,b F424 : 69 ld l,c F425 : 22 28 FC ld (XFC28),hl ; SAVE IN REGISTER AREA PORT=SELECT F428 ..G2: F428 : 3A 47 FC ld a,(XFC47) BTSAVE F42B : D3 FE out (0FEH),a BTYPE F42D GO25: F42D : AF xor a F42E : D3 F1 out (0F1H),a ; DISABLE FLOPPY INTERRUPTS PORT=SELECT F430 : 21 F3 C3 ld hl,0C3F3H ; JP AND DI INSTRUCTIONS F433 : 3A 25 FC ld a,(XFC25) ; INTERRUPTS? IFF F436 : B7 or a F437 : 28 02 jr z,..G3 F43B F439 : CB DD set 3,l F43B ..G3: F43B : 22 26 FC ld (XFC26),hl ; LOADS JUMPER TOO EIDI F43E : ED 73 40 FC ld (XFC40),sp MONSP F442 : 31 2C FC ld sp,0FC2CH PCSAVE+4 F445 : E1 pop hl F446 : D1 pop de F447 : C1 pop bc F448 : D9 exx F449 : F1 pop af F44A : 08 ex af,af' F44B : FD E1 pop iy F44D : DD E1 pop ix F44F : E1 pop hl F450 : D1 pop de F451 : C1 pop bc F452 : F1 pop af F453 : ED 7B 2A FC ld sp,(XFC2A) ; DON'T CHANGE FLAGS SPSAVE F457 : 3E 03 ld a,003H ; TURN ON WRITE PROTECT F459 : D3 FF out (0FFH),a ; 4 M1'S TO ..g MISC F45B : 3A 3F FC ld a,(XFC3F) AFSAVE+1 F45E : C3 26 FC jp EIDI FC26 ; ; STEP ; F461 STEP: F461 : 21 85 F6 ld hl,EXAMREGS F685H F464 : 22 20 FC ld (XFC20),hl NMIJP F467 : 2A 28 FC ld hl,(XFC28) PCSVE F46A : 01 FC 0A ld bc,00AFCH BADRH+0A00H F46D : ED 61 out (c),h F46F : 0C inc c F470 : ED 69 out (c),l F472 : 0C inc c F473 : ED 41 out (c),b ; SET BREAK TYPE F475 : C3 2D F4 jp LF42D ; ; MEMORY & PORT ; F478 MEMORY: F478 : 3E 07 ld a,007H F47A : 18 0A jr LF486 ; F47C PORT: F47C : 3A 46 FC ld a,(XFC46) ; GET STATUS BYTE F47F : CB CF set 1,a ; SET PORT COMMAND BIT F481 : 32 46 FC ld (XFC46),a F484 : 3E 1D ld a,01DH ; "PORT" F486 P0: F486 : CD BD F0 call PRINTM F0BD F489 : CD E8 F7 call KEYBD ; READ ADDRESS F7E8 F48C : CD 4A F8 call CONVRT ; MAKE IT BINARY F84A F48F ..P1: F48F : 21 48 FC ld hl,0FC48H KEYBUF F492 : 50 ld d,b F493 : 59 ld e,c F494 : CD EB F5 call LF5EB F497 : 3A 46 FC ld a,(XFC46) F49A : CB 4F bit 1,a F49C : 20 07 jr nz,LF4A5 F49E : 3E 05 ld a,005H F4A0 : D3 FF out (0FFH),a F4A2 : 0A ld a,(bc) F4A3 : 18 02 jr LF4A7 ; F4A5 ..M1: F4A5 : ED 78 in a,(c) F4A7 ..M2: F4A7 : CD 81 F8 call LF881 F4AA : 3A 46 FC ld a,(XFC46) F4AD : CB 47 bit 0,a F4AF : 28 17 jr z,LF4C8 F4B1 : CB 4F bit 1,a F4B3 : 20 13 jr nz,..P1A F4C8 F4B5 : 36 20 ld (hl),020H F4B7 : 23 inc hl F4B8 : 36 2F ld (hl),02FH F4BA : 23 inc hl F4BB : 3E 05 ld a,005H F4BD : D3 FF out (0FFH),a F4BF : 0A ld a,(bc) F4C0 : CD 2B F6 call LF62B F4C3 : 77 ld (hl),a F4C4 : 23 inc hl F4C5 : 36 2F ld (hl),02FH F4C7 : 23 inc hl F4C8 ..P1A: F4C8 : 36 A0 ld (hl),0A0H F4CA : C5 push bc F4CB : 21 48 FC ld hl,0FC48H F4CE : CD CE F0 call LF0CE F4D1 : CD E8 F7 call KEYBD F7E8 F4D4 : 1A ld a,(de) F4D5 ..P2: F4D5 : FE 2C " ," cp 02CH F4D7 : 28 04 jr z,..P4 F4DD F4D9 : FE 0A cp 00AH F4DB : 20 0C jr nz,LF4E9 F4DD ..P3: F4DD : C1 pop bc F4DE : 3A 46 FC ld a,(XFC46) DMPSTA F4E1 : E6 FD and 0FDH F4E3 : 32 46 FC ld (XFC46),a DMPSTA F4E6 : C3 56 F3 jp DEBUG F356 ; F4E9 ..P4: F4E9 : FE 0D cp 00DH F4EB : 20 04 jr nz,LF4F1 F4ED : C1 pop bc F4EE : 03 inc bc F4EF : 18 9E jr LF48F ; F4F1 ..P6: F4F1 : FE 5E " ^" cp 05EH ;GO BACKWARDS???? F4F3 : 20 04 jr nz,LF4F9 F4F5 : C1 pop bc F4F6 : 0B dec bc F4F7 : 18 96 jr LF48F ; F4F9 ..P7: F4F9 : CD 4A F8 call CONVRT F84A F4FC : 3A 46 FC ld a,(XFC46) DMPSTA F4FF : CB 4F bit 1,a ; IN PORT COMMAND????? F501 : 20 0C jr nz,LF50F F503 : 79 ld a,c ; BINARY OF LAST TWO DIGITS TYPED F504 : C1 pop bc ; GET BACK MEM LOCATION F505 : 08 ex af,af' F506 : 3E 04 ld a,004H F508 : D3 FF out (0FFH),a MISC F50A : 08 ex af,af' F50B : 02 ld (bc),a ; PUT IN NEW DATA F50C : C5 push bc ; SAVE POINTER F50D : 18 05 jr LF514 ; F50F ..M8: F50F : 79 ld a,c ; GET DATA USER TYPED F510 : C1 pop bc ; RESTORE PORT # IN 'C' F511 : ED 79 out (c),a ; WRITE DATA TO PORT F513 : C5 push bc F514 ..M9: F514 : 1A ld a,(de) ; GET TERMINATOR F515 : 18 BE jr ..P2 F4D5 ; ; DUMP ROUTINE - ; ; REGS - DE -> POINTS AT ..PORY ; HL -> OUTPUT BUFFER FOR 2-DIGIT HEX EQUIVALENTS ; BC -> " " ASCII EQUIVALENT ; F517 DUMP: F517 : 3E 08 ld a,008H ; "DUMP " F519 : CD BD F0 call PRINTM F51C : CD E8 F7 call KEYBD ; READ UPPER & LOWER BOUNDS F7E8 F51F : 6B ld l,e F520 : CD 4A F8 call CONVRT F84A F523 : ED 43 42 FC ld (XFC42),bc F527 : DD 21 42 FC ld ix,XFC42 F52B : 67 ld h,a F52C : 7D ld a,l F52D : BB cp e F52E : 20 19 jr nz,LF549 F530 : ED 4B 44 FC ld bc,(XFC44) F534 : 3E FF ld a,0FFH F536 : B8 cp b F537 : 20 06 jr nz,LF53F F539 : B9 cp c F53A : 20 03 jr nz,LF53F F53C : 01 00 00 ld bc,X0000 F53F LF53F: F53F : 79 ld a,c F540 : E6 F0 and 0F0H F542 : 4F ld c,a F543 : ED 43 42 FC ld (XFC42),bc F547 : 18 05 jr LF54E ; F549 LF549: F549 : 7C ld a,h F54A : FE 2C " ," cp 02CH F54C : 28 12 jr z,LF560 F54E LF54E: F54E : 21 7F 00 ld hl,0007FH F551 : 09 add hl,bc F552 : 38 07 jr c,LF55B F554 : 44 ld b,h F555 : 7D ld a,l F556 : F6 0F or 00FH F558 : 4F ld c,a F559 : 18 09 jr LF564 ; F55B LF55B: F55B : 01 FF FF ld bc,0FFFFH F55E : 18 04 jr LF564 ; F560 LF560: F560 : 13 inc de F561 : CD 4A F8 call CONVRT F84A F564 LF564: F564 : ED 43 44 FC ld (XFC44),bc F568 : DD 7E 01 ld a,(ix+001H) F56B : B8 cp b F56C : 28 05 jr z,LF573 F56E : D2 51 F3 jp nc,DERROR F351 F571 : 18 07 jr LF57A ; F573 LF573: F573 : DD 7E 00 ld a,(ix+000H) F576 : B9 cp c F577 : D2 51 F3 jp nc,DERROR F351 F57A LF57A: F57A : DD 56 01 ld d,(ix+001H) F57D : DD 7E 00 ld a,(ix+000H) F580 : E6 F0 and 0F0H F582 : 5F ld e,a F583 : CD 20 F6 call LF620 F586 : CD EB F5 call LF5EB F589 : 7B ld a,e F58A LF58A: F58A : DD BE 00 cp (ix+000H) F58D : 28 07 jr z,LF596 F58F : CD DD F5 call LF5DD F592 : 13 inc de F593 : 7B ld a,e F594 : 18 F4 jr LF58A ; F596 LF596: F596 : 3E 05 ld a,005H F598 : D3 FF out (0FFH),a F59A : 1A ld a,(de) F59B : F5 push af F59C : CD 81 F8 call LF881 F59F : 36 20 ld (hl),020H F5A1 : 23 inc hl F5A2 : F1 pop af F5A3 : CD 2B F6 call LF62B F5A6 : 02 ld (bc),a F5A7 : 03 inc bc F5A8 : 7A ld a,d F5A9 : DD BE 03 cp (ix+003H) F5AC : 20 06 jr nz,LF5B4 F5AE : 7B ld a,e F5AF : DD BE 02 cp (ix+002H) F5B2 : 28 16 jr z,LF5CA F5B4 LF5B4: F5B4 : 7B ld a,e F5B5 : E6 0F and 00FH F5B7 : FE 0F cp 00FH F5B9 : 20 0C jr nz,LF5C7 F5BB : CD 01 F6 call LF601 F5BE : CD 20 F6 call LF620 F5C1 : 13 inc de F5C2 : CD EB F5 call LF5EB F5C5 : 18 CF jr LF596 ; F5C7 ..8: F5C7 : 13 inc de ;BUMP TO NEXT LOCATION F5C8 : 18 CC jr ..4 F596 ; F5CA ..9: F5CA : 7B ld a,e ; DO WE HAVE TO FILL OUT THE LINE?? F5CB : E6 0F and 00FH F5CD : FE 0F cp 00FH ; AT THE END OF THE LINE F5CF : 28 06 jr z,..10 F5D7 F5D1 : CD DD F5 call DFILL ; FILL IN WITH BLANKS F5DD F5D4 : 13 inc de F5D5 : 18 F3 jr ..9 F5CA ; F5D7 ..10: F5D7 : CD 01 F6 call DPRNT ; PRINT OUT LAST LINE F601 F5DA : C3 56 F3 jp DEBUG F356 ; ; EXTRA DUMPER ROUTINES ; F5DD DFILL: F5DD : C5 push bc ; PUT IN SPACES AS FILLER F5DE : 06 03 ld b,003H F5E0 ..DF1: F5E0 : 36 20 ld (hl),020H F5E2 : 23 inc hl F5E3 : 10 FB djnz ..DF1 F5E0 F5E5 : C1 pop bc F5E6 : 3E 20 ld a,020H F5E8 : 02 ld (bc),a F5E9 : 03 inc bc F5EA : C9 ret ; F5EB DADDR: F5EB : 3A 46 FC ld a,(XFC46) DMPSTA F5EE : CB 4F bit 1,a ; IF IN PORT CMND, PRINT ONLY TWO DIGITS F5F0 : 20 04 jr nz,..D1 F5F6 F5F2 : 7A ld a,d ; CONVERT "DE" TO ASCII F5F3 : CD 81 F8 call ASCII F881 F5F6 ..D1: F5F6 : 7B ld a,e F5F7 : CD 81 F8 call ASCII F881 F5FA : 36 3A ld (hl),03AH F5FC : 23 inc hl F5FD : 36 20 ld (hl),020H F5FF : 23 inc hl F600 : C9 ret ; F601 DPRNT: F601 : 3E AF ld a,0AFH ; PRINTS LINE ON TERMINAL F603 : 02 ld (bc),a F604 : D5 push de ; SAVE ..P LOC F605 : 21 48 FC ld hl,0FC48H KEYBUF F608 : CD CE F0 call CONOMSG F0CE F60B : CD F8 F0 call CONSTAT ; ANYTHING TYPED? F0F8 F60E : FE FF cp 0FFH ; KEYBOARD INTERRUPT? F610 : 28 08 jr z,..1 F61A F612 : 21 A3 F8 ld hl,0F8A3H MESS6 F615 : CD CE F0 call CONOMSG F0CE F618 : D1 pop de F619 : C9 ret ; F61A ..1: F61A : E1 pop hl F61B : DB E0 in a,(0E0H) ; READ TO RESET STATUS F61D : C3 56 F3 jp DEBUG F356 ; F620 DLOAD: F620 : 21 48 FC ld hl,0FC48H ; RESET POINTERS KEYBUF F623 : 01 7E FC ld bc,0FC7EH F626 : 3E 2F ld a,02FH F628 : 02 ld (bc),a F629 : 03 inc bc F62A : C9 ret ; F62B APRNT: F62B : FE 7F cp 07FH ; CHECK IF CHAR IS PRINTABLE F62D : 30 03 jr nc,..AP1 F632 F62F : FE 20 cp 020H F631 : D0 ret nc F632 ..AP1: F632 : 3E 2E ld a,'.' F634 : C9 ret ; F635 ASDUMP: F635 : 3A 46 FC ld a,(XFC46) ; SET OR RESET BIT #1 DMPSTA F638 : CB 47 bit 0,a ; IS IT ZERO?? F63A : 28 04 jr z,LF640 F63C : CB 87 res 0,a ; CLEAR IT F63E : 18 02 jr ..AD2 F642 ; F640 ..AD1: F640 : CB C7 set 0,a F642 ..AD2: F642 : 32 46 FC ld (XFC46),a ; RESET THE BYTE DMPSTA F645 : C3 56 F3 jp DEBUG F356 ; ; SET PORT FF ; F648 LF648: F648 : 3E 1F ld a,01FH F64A : CD BD F0 call PRINTM F64D : CD E8 F7 call KEYBD F7E8 F650 : CD 4A F8 call CONVRT F84A F653 : 60 ld h,b F654 : 69 ld l,c F655 : CD 7D F6 call LF67D F658 : 13 inc de F659 : CD 4A F8 call CONVRT F84A F65C : ED 43 42 FC ld (XFC42),bc F660 : CD 7D F6 call LF67D F663 : 13 inc de F664 : CD 4A F8 call CONVRT F84A F667 : ED 5B 42 FC ld de,(XFC42) F66B : 2B dec hl F66C LF66C: F66C : 23 inc hl F66D : 3E 04 ld a,004H F66F : D3 FF out (0FFH),a F671 : 71 ld (hl),c F672 : 7D ld a,l F673 : BB cp e F674 : 20 F6 jr nz,LF66C F676 : 7C ld a,h F677 : BA cp d F678 : 20 F2 jr nz,LF66C F67A : C3 56 F3 jp DEBUG F356 ; F67D LF67D: F67D : 1A ld a,(de) F67E : FE 2C " ," cp 02CH F680 : C8 ret z F681 : E1 pop hl F682 : C3 51 F3 jp DERROR F351 ; ; REGISTER DUMP ; F685 EXAMREGS: F685 : 3E 1A ld a,01AH F687 : CD BD F0 call PRINTM F68A : 11 48 FC ld de,0FC48H KEYBUF F68D : 2A 3E FC ld hl,(XFC3E) AFSAVE F690 : CB 7D bit 7,l F692 : CD DD F6 call PM F6DD F695 : CB 75 bit 6,l F697 : CD DD F6 call PM F6DD F69A : CB 55 bit 2,l F69C : CD DD F6 call PM F6DD F69F : CB 45 bit 0,l F6A1 : CD DD F6 call PM F6DD F6A4 : EB ex de,hl F6A5 : 7A ld a,d F6A6 : CD E6 F6 call DBYTE F6E6 F6A9 : 11 3D FC ld de,0FC3DH AFSAVE-1 F6AC : 06 06 ld b,006H F6AE ..DZ: F6AE : 1A ld a,(de) F6AF : 1B dec de F6B0 : CD E6 F6 call DBYTE F6E6 F6B3 : 10 F9 djnz LF6AE F6B5 : ED 5B 36 FC ld de,(XFC36) IXSAVE F6B9 : CD EC F6 call WORD F6EC F6BC : ED 5B 34 FC ld de,(XFC34) F6C0 : CD EC F6 call LF6EC F6C3 : ED 5B 2A FC ld de,(XFC2A) F6C7 : CD EC F6 call LF6EC F6CA : ED 5B 28 FC ld de,(XFC28) F6CE : CD EC F6 call LF6EC F6D1 : 2B dec hl F6D2 : CB FE set 7,(hl) F6D4 : 21 48 FC ld hl,0FC48H KEYBUF F6D7 : CD CE F0 call CONOMSG F0CE F6DA : C3 56 F3 jp DEBUG F356 ; F6DD PM: F6DD : 3E 2B ld a,02BH '+' F6DF : 20 02 jr nz,..SKIP F6E3 F6E1 : 3E 20 ld a,020H F6E3 ..SKIP: F6E3 : 12 ld (de),a F6E4 : 13 inc de F6E5 : C9 ret ; F6E6 DBYTE: F6E6 : 36 20 ld (hl),' ' F6E8 : 23 inc hl F6E9 : C3 81 F8 jp ASCII F881 ; F6EC WORD: F6EC : 36 20 ld (hl),020H F6EE : 23 inc hl F6EF : 7A ld a,d F6F0 : CD 81 F8 call ASCII F881 F6F3 : 7B ld a,e F6F4 : C3 81 F8 jp ASCII F881 ; ; MODIFY REGISTERS ; F6F7 REGISTER: F6F7 : 3E 1C ld a,01CH ; "MODIFY REGISTER" F6F9 : CD BD F0 call PRINTM F6FC : CD E8 F7 call KEYBD ; READ WHAT REG(S) ARE TO BE MODIFIED F7E8 F6FF : 21 66 FC ld hl,0FC66H ; SKIP OVER INPUT SECTION F702 : DD 21 28 FC ld ix,XFC28 ; POINT AT REG SAVE AREA PCSAVE F706 : 1A ld a,(de) F707 : 36 20 ld (hl),020H F709 : 23 inc hl F70A : 01 00 00 ld bc,X0000 F70D : FE 50 " P" cp 050H ; "PC"? F70F : 28 1A jr z,..X F72B F711 : 03 inc bc F712 : 03 inc bc F713 : FE 53 " S" cp 053H ; "SP"? F715 : 28 14 jr z,..X F72B F717 : 01 0C 00 ld bc,0000CH F71A : FE 49 " I" cp 049H ; "IX OR IY" ? F71C : 20 10 jr nz,..3 F72E F71E : 13 inc de F71F : 1A ld a,(de) ;.. NEXT DIGIT F720 : FE 59 " Y" cp 059H F722 : 28 07 jr z,..X F72B F724 : FE 58 " X" cp 058H F726 : C2 51 F3 jp nz,DERROR F351 F729 : 03 inc bc F72A : 03 inc bc F72B ..X: F72B : C3 88 F7 jp ..D F788 ; F72E ..3: F72E : 01 0F 00 ld bc,0000FH ; POINT TO SAVE AREA F731 : FE 4C " L" cp 04CH ; WANT REG 'L'? F733 : 28 42 jr z,..S F777 F735 : 03 inc bc F736 : 03 inc bc F737 : FE 45 " E" cp 045H ; WANT 'E' REG? F739 : 28 3C jr z,..S F777 F73B : 03 inc bc F73C : 03 inc bc F73D : FE 43 " C" cp 043H F73F : 28 36 jr z,..S F777 F741 : 03 inc bc F742 : 03 inc bc F743 : FE 46 " F" cp 046H F745 : 28 30 jr z,..S F777 ..7: F747 : 01 10 00 ld bc,00010H ; POINT TO SAVE AREA F74A : FE 48 " H" cp 048H F74C : 20 06 jr nz,..8 F754 F74E : 13 inc de F74F : 1A ld a,(de) ; GET NEXT CHAR F750 : FE 4C " L" cp 04CH F752 : 18 21 jr ..Q F775 ; F754 ..8: F754 : 03 inc bc F755 : 03 inc bc F756 : FE 44 " D" cp 044H F758 : 20 06 jr nz,..9 F760 F75A : 13 inc de F75B : 1A ld a,(de) ; GET NEXT CHAR F75C : FE 45 " E" cp 045H F75E : 18 15 jr ..Q F775 ; F760 ..9: F760 : 03 inc bc F761 : 03 inc bc F762 : FE 42 " B" cp 042H F764 : 20 06 jr nz,..10 F76C F766 : 13 inc de F767 : 1A ld a,(de) ; GET NEXT CHAR F768 : FE 43 " C" cp 043H F76A : 18 09 jr ..Q F775 ; F76C ..10: F76C : FE 41 " A" cp 041H ; DUMP ACCUMULATOR F76E : C2 51 F3 jp nz,DERROR F351 F771 : 03 inc bc F772 : 03 inc bc F773 : 18 02 jr ..S F777 ; ; DUMP SINGLE REGISTER ; F775 ..Q: F775 : 30 11 jr nc,..D ; DUMP DOUBLE REG F788 F777 ..S: F777 : DD 09 add ix,bc ; POINT 'IX' AT REGISTER IN SAVE SPACE F779 : DD 7E 01 ld a,(ix+001H) ; READ USER REGISTER CONTENTS F77C : CD 81 F8 call ASCII F881 F77F : CD A2 F7 call RPRNT F7A2 F782 : DD 71 01 ld (ix+001H),c ; CHANGE TO NEW CONTENTS F785 : C3 56 F3 jp DEBUG F356 ; F788 ..D: F788 : DD 09 add ix,bc F78A : DD 7E 01 ld a,(ix+001H) F78D : CD 81 F8 call ASCII F881 F790 : DD 7E 00 ld a,(ix+000H) F793 : CD 81 F8 call ASCII F881 F796 : CD A2 F7 call LF7A2 F799 : DD 70 01 ld (ix+001H),b ; CHANGE TO NEW DATA F79C : DD 71 00 ld (ix+000H),c F79F : C3 56 F3 jp DEBUG F356 ; F7A2 RPRNT: F7A2 : 36 A0 ld (hl),0A0H F7A4 : 21 66 FC ld hl,0FC66H F7A7 : CD CE F0 call LF0CE F7AA : CD E8 F7 call KEYBD F7E8 F7AD : 1A ld a,(de) F7AE : FE 0D cp 00DH F7B0 : 28 04 jr z,..1 F7B6 F7B2 : CD 4A F8 call CONVRT F84A F7B5 : C9 ret ; F7B6 ..1: F7B6 : C1 pop bc F7B7 : C3 56 F3 jp DEBUG F356 ; ; INTERRUPT REGISTER ; F7BA LF7BA: F7BA : 3E 20 ld a,020H F7BC : CD BD F0 call PRINTM F7BF : CD D8 F0 call GETCHR F0D8 F7C2 : FE 45 " E" cp 045H F7C4 : 06 21 ld b,021H F7C6 : 28 0D jr z,LF7D5 F7C8 : 04 inc b F7C9 : FE 44 " D" cp 044H F7CB : 28 08 jr z,LF7D5 F7CD : 3A 26 FC ld a,(XFC26) EIDI F7D0 : FE F3 " " cp 0F3H F7D2 : 28 01 jr z,LF7D5 F7D4 : 05 dec b F7D5 LF7D5: F7D5 : 78 ld a,b F7D6 : CD BD F0 call PRINTM F7D9 : 3E 21 ld a,021H F7DB : B8 cp b F7DC : 3E FB ld a,0FBH F7DE : 28 02 jr z,LF7E2 F7E0 : 3E F3 ld a,0F3H F7E2 LF7E2: F7E2 : 32 26 FC ld (XFC26),a EIDI F7E5 : C3 56 F3 jp DEBUG F356 ; ; KEYBD - READ INPUT FOR CONSOLE TERMINAL ; SAVE & ECHO CHARACTERS 0-9, A-F & VALID ; TERMINATORS. IGNORES ALL OTHER CHARACTERS ; ; EXIT - DE -> POINTS AT INPUT STRING BUFFER ; A -> BLASTED ; B -> BLASTED ; F7E8 KEYBD: F7E8 : 11 48 FC ld de,0FC48H ; POINT AT STRING BUFFER KEYBUF F7EB : 06 00 ld b,000H F7ED ..1: F7ED : CD D8 F0 call GETCHR F0D8 F7F0 : FE 5F " _" cp DELCHAR ; BACKSPACE ..??? 05FH F7F2 : 20 0F jr nz,..2 F803 F7F4 : 78 ld a,b ;ARE WE AT CHAR DELETE LIMIT??? F7F5 : B7 or a F7F6 : 28 F5 jr z,LF7ED ;YUP F7F8 : D5 push de F7F9 : 3E 04 ld a,004H ; F7FB : CD BD F0 call PRINTM F7FE : D1 pop de ; RESTORE POINTER F7FF : 1B dec de F800 : 05 dec b ; CHAR CHAR COUNTER F801 : 18 EA jr ..1 F7ED ; F803 ..2: F803 : FE 0D cp 00DH ; ???? F805 : 28 08 jr z,LF80F F807 : FE 0A cp 00AH F809 : 28 04 jr z,LF80F F80B : FE 5E " ^" cp 05EH F80D : 20 08 jr nz,..4 F817 F80F ..3: F80F : 12 ld (de),a ; SAVE CHARACTER F810 : 3E 06 ld a,006H F812 : CD BD F0 call PRINTM F815 : 18 2F jr LF846 ; F817 ..4: F817 : FE 18 cp 018H ; ^X SCRATCH THE WHOLE LINE F819 : 20 03 jr nz,LF81E F81B : C3 56 F3 jp DEBUG F356 ; F81E LF81E: F81E : FE 2C " ," cp 02CH ; ALLOW THESE THRU F820 : 28 16 jr z,LF838 F822 : FE 27 " '" cp 027H F824 : 28 12 jr z,LF838 F826 : FE 30 " 0" cp 030H ; BELOW A ASCII "0"??? F828 : 38 C3 jr c,LF7ED F82A : FE 5A " Z" cp 05AH ; HIGHER THAN A "Z"??? F82C : 30 BF jr nc,..1 F7ED F82E : FE 3A " :" cp 03AH F830 : 38 06 jr c,..DIG ; CHAR IS A "0-9" F838 F832 : FE 41 " A" cp 041H F834 : 30 02 jr nc,..DIG ; CHAR IS "A-Z" F838 F836 : 18 B5 jr LF7ED ; F838 ..DIG: F838 : 12 ld (de),a ; SAVE THE CHARACTER TYPED F839 : 13 inc de F83A : CD 41 F0 call CRTOUT ; ECHO IT IN TERMINAL F041 F83D : 04 inc b F83E : 78 ld a,b F83F : FE 18 cp 018H ; AT MAX # OF CHARACTERS F841 : 20 AA jr nz,..1 ; GET MORE F7ED F843 : C3 51 F3 jp DERROR F351 ; F846 ..XIT: F846 : 11 48 FC ld de,0FC48H KEYBUF F849 : C9 ret ; ; CONVRT - CONVERT ASCII INPUT TO HEX BINARY ; LAST FOUR DIGITS BEFORE TERMINATOR ; ARE CONVERTED ; ; ENTRY - DE -> POINTS AT ASCII INPUT STRING ; ; EXIT - A -> BLASTED ; - BC -> BINARY EQUIV. OF LAST FOUR DIGITS ; - HL -> SAVED & RESTORED ; - DE -> UPDATED TO CONVERSION TERMINATOR ; F84A CONVRT: F84A : E5 push hl F84B : 21 00 00 ld hl,X0000 ; CLEAR DATA REG PAIR F84E ..1: F84E : 1A ld a,(de) ; GET CHAR TO CONVERT F84F : FE 0D " " cp 00DH ; CHECK FOR TERMINATOR F851 : 28 25 jr z,..OUT F878 F853 : FE 0A " " cp 00AH F855 : 28 21 jr z,..OUT F878 F857 : FE 5E " ^" cp 05EH F859 : 28 1D jr z,..OUT F878 F85B : FE 2C " ," cp 02CH F85D : 28 19 jr z,..OUT F878 F85F : FE 3A " :" cp 03AH ; IS CHAR 0-9???? F861 : 38 06 jr c,..2 F869 F863 : FE 47 " G" cp 047H ; LEGAL CHARACTER??? F865 : 30 15 jr nc,..ERR F87C F867 : D6 07 sub 007H F869 ..2: F869 : D6 30 sub 030H F86B : 06 04 ld b,004H ; SHIFT AMOUNT F86D ..3: F86D : CB 25 sla l ; STUFF 0 INTO LOW BITS, HIGH INTO CARRY F86F : CB 14 rl h ; CARRY INTO LOW BIT, SCREW THE HIGH BIT F871 : 10 FA djnz ..3 F86D F873 : B5 or l ; PLACE IN THE CURRENT CHAR F874 : 6F ld l,a F875 : 13 inc de ; POINT AT NEXT CHAR F876 : 18 D6 jr ..1 F84E ; F878 ..OUT: F878 : 44 ld b,h F879 : 4D ld c,l F87A : E1 pop hl F87B : C9 ret ; F87C ..ERR: F87C : E1 pop hl F87D : E1 pop hl F87E : C3 51 F3 jp DERROR F351 ; ; ; ASCII - CONVERT BINARY TO ASCII ; ; ENTRY - A -> DATA TO CONVERT ; - HL -> WHERE TO STUFF CONVERTED DATA ; ; EXIT - A -> BLASTED ; - HL -> UPDATED TO NEXT AVAILABLE LOCATION ; F881 ASCII: F881 : F5 push af F882 : E6 F0 and 0F0H ; MASK OUT LOW BITS F884 : CD 9E F8 call ..SFT F89E F887 : CD 95 F8 call ..1 ; MAKE ACCUM ..II F895 F88A : 77 ld (hl),a ; SAVE IT IN BUFFER F88B : 23 inc hl ; BUMP POINTER F88C : F1 pop af ; NOW DO LOW 4 BITS F88D : E6 0F and 00FH F88F : CD 95 F8 call ..1 F895 F892 : 77 ld (hl),a F893 : 23 inc hl F894 : C9 ret ; F895 ..1: F895 : FE 0A cp 00AH F897 : 38 02 jr c,LF89B F899 : C6 07 add a,007H F89B ..2: F89B : C6 30 " 0" add a,030H F89D : C9 ret ; F89E ..SFT: F89E : 1F " " rra F89F : 1F " " rra F8A0 : 1F " " rra F8A1 : 1F " " rra F8A2 : C9 " " ret ; MESS6: F8A3 : 0D " " dec c F8A4 : 8A " " adc a,d F8A5 MESSAGES: F8A5 : 57 "What" F8A9 : BF " " F8AA : 07 " " F8AB : 0D " " F8AC : 0A " " F8AD : 00 " " F8AE : 00 " " F8AF : 00 " " F8B0 : 00 " " F8B1 : 00 " " F8B2 : 00 " " F8B3 : 00 " " F8B4 : 00 " " F8B5 : 00 " " F8B6 : 00 " " F8B7 : 00 " " F8B8 : 00 " " F8B9 : 00 " " F8BA : 00 " " F8BB : 00 " " F8BC : 00 " " F8BD : 00 " " F8BE : 00 " " F8BF : 00 " " F8C0 : 00 " " F8C1 : 49 "ICEBOX Version 2. " F8D3 : 0D " " F8D4 : 0A " " F8D5 : A5 " " F8D6 : 42 "Boot" F8DA : A0 " " F8DB : 08 " " F8DC : 20 88 " " F8DE : 0D " " F8DF : 0A " " F8E0 : AD " " F8E1 : 0D " " F8E2 : 8A " " F8E3 : 4D "Modify Memory" F8F0 : A0 " " F8F1 : 44 "Dump" F8F5 : A0 " " F8F6 : 0D " " F8F7 : 0A " " F8F8 : AD " " F8F9 : 44 "Disc not ready" F907 : A0 " " F908 : 53 "Seek Error " F913 : 43 "CRC Error" F91C : A0 " " F91D : 52 "Record not found" F92D : A0 " " F92E : 4C "Lost Data" F937 : A0 " " F938 : 57 "Write Protected" F947 : A0 " " F948 : 57 "Write Fault" F953 : A0 " " F954 : 42 "Break on Memory Port" F968 : A0 " " F969 : 72 "rea" F96C : E4 77 72 " writ" F971 : E5 " " F972 : 20 61 " at" F975 : A0 " " F976 : 47 "G" F977 : EF " " F978 : 41 "Arcad" F97D : E5 " " F97E : 43 "Commercia" F987 : EC 0D 53 " S" F98A : 5A "Z" F98B : 56 "V" F98C : 43 "C" F98D : 20 41 " A" F98F : 20 20 " " F991 : 42 "B" F992 : 20 20 " " F994 : 43 "C" F995 : 20 20 " " F997 : 44 "D" F998 : 20 20 " " F99A : 45 "E" F99B : 20 20 " " F99D : 48 "H" F99E : 20 20 " " F9A0 : 4C "L" F9A1 : 20 20 " " F9A3 : 20 49 " I" F9A5 : 58 "X" F9A6 : 20 20 " " F9A8 : 20 49 " I" F9AA : 59 "Y" F9AB : 20 20 " " F9AD : 20 53 " S" F9AF : 50 "P" F9B0 : 20 20 " " F9B2 : 20 50 " P" F9B4 : 43 "C" F9B5 : 20 0D " " F9B7 : 8A " " F9B8 : 0D " " F9B9 : 0A " " F9BA : 44 "Debu" F9BE : E7 " " F9BF : 4D "Modify Register " F9CF : 4D "Modify Port" F9DA : A0 " " F9DB : 20 2A " *" F9DD : 2A 2A 20 "** " F9E0 : 42 "Breakpoint disabled *** " F9F8 : 46 "Fill memory" FA03 : A0 " " FA04 : 49 "Interupts" FA0D : A0 " " FA0E : 45 "Enable" FA14 : E4 44 69 " Disable" FA1C : E4 00 00 ; ************* ; * RAM CELLS * ; ************* ; .LOC ICERAM ; .BLKB 32 ;STACK == . ;NMIJP: .BLKW 1 ;DMA: .BLKB 2 ; DMA ADDRESS FOR DISC ;TRK: .BLKB 1 ; TRACK NUMBER FOR DLAYED SEEK ;IFF: .BLKB 1 ; INTRRUPT FLIP FLOP ;EIDI: .BLKB 1 ; ENABLE OR DISABLE ;JUMPER: .BLKB 1 ; FOR JUMP INSTRUCTION ;PCSAVE: .BLKW 1 ; SAVE BUFFER FOR USER REGISTERS ;SPSAVE: .BLKW 1 ; SAVE BUFFER FOR USER STACK ; .BLKW 4 ;IYSAVE: .BLKW 1 ;IXSAVE: .BLKW 1 ; .BLKW 3 ;AFSAVE: .BLKW 1 ;MONSP: .BLKW 1 ; MONITOR STACK POINTER SAVE ;DMPLOW: .BLKW 1 ; LIMITS FOR DUMP ;DMPHI: .BLKW 1 ;DMPSTA: .BLKB 1 ;DUMP STATUS BYTE ;BTSAVE: .BLKB 1 ; BREAK TYPE SAVE ;KEYBUF: .BLKB 80 ; KEYBOARD I/O BUFFER ; .LOC ICERAM+128 ;BUFFER: .BLKB 128 ; DISC SECTOR BUFFER FC20 STACK: FC22 NMIJP: FC25 XFC25: FC26 XFC26: FC28 XFC28: FC29 XFC29: FC2A XFC2A: FC34 XFC34: FC36 XFC36: FC3F XFC3F: FC40 XFC40: FC42 XFC42: FC44 XFC44: FC46 XFC46: FC47 XFC47: FC48 KEYBUF: FC82 XFC82: