; z80dasm 1.1.6 ; command line: z80dasm -l -o coleco.asm coleco.rom ;******* ColecoVision I/O Decoder ******** ;A7 = 1 (ENABLE DECODER) ;A6 A5 Wr ;0 0 0 y0 write ctrl EN 2 ;0 0 1 y1 read nothing ;0 1 0 y2 write VDP ;0 1 1 y3 read VDP ;1 0 0 y4 write ctrl EN 1 ;1 0 1 y5 read nothing ;1 1 0 y6 write audio ;1 1 1 y7 read ctrl input ;101X XXX0 VDP Wr REG 0xA0 ;101X XXX0 VDP Rd REG 0xA0 ;101X XXX1 VDP Wr RAM 0xA1 ;101X XXX1 VDP Rd RAM 0xA1 ;100X XXXX ctrl Wr EN 2 0x80 ;110X XXXX ctrl Wr EN 1 0xC0 ;111X XXXX ctrl Rd input 0xFF ;111X XXXX aud Wr out 0xFF ;**************** H2Z80 I/O Decoder **************** ;A7 A6 A5 A4 ;0 0 0 0 y0 write leds 0x00 ;0 0 0 1 y1 Wr/Rd CF card (A1 - A3) 0x10 ;0 0 1 0 y2 Wr/Rd nothing 0x20 ;0 0 1 1 y3 write bank sw (A3) 0x30 ;0 1 0 0 y4 Wr/Rd nothing 0x40 ;0 1 0 1 y5a Wr/Rd PIO Pa (A1) 0x50 ;0 1 0 1 y5b Wr/Rd PIO Pb (A1) 0x52 ;0 1 1 0 y6 Wr/Rd nothing 0x60 ;0 1 1 1 y7 Wr/Rd nothing 0x70 ;1 0 0 0 y8a Wr/Rd SIO Pa (A1) 0x80 ;1 0 0 0 y8b Wr/Rd SIO Pb (A1) 0x82 ;1 0 0 1 y9 Wr/Rd IDE HD (A1 - A3) 0x90 ;1 0 1 0 yA Wr/Rd nothing 0xA0 ;1 0 1 1 yB Wr/Rd VDP (A0) 0xB0 ;1 1 0 0 yC Wr/Rd nothing 0xC0 ;1 1 0 1 yD Wr/Rd nothing 0xD0 ;1 1 1 0 yEa read ctrl 1 (A0) 0xE0 ;1 1 1 0 yEb read ctrl 2 (A0) 0xE1 ;1 1 1 1 yFa write sound L (A0) 0xF0 ;1 1 1 1 yFb write sound R (A0) 0xF1 output "H2Z80_coleco_bios.rom" ;********************************************************************** ; Coleco Vision I/O port addresses - MACROS ;********************************************************************** IO_KP_Select EQU 000H ; Keypad select output port/mode IO_Joy_Select EQU 000H ; Joystick select output port/mode IO_Joy0_Read EQU 0E0H ; Joystick 1 input port IO_Joy1_Read EQU 0E1H ; Joystick 2 input port IO_Sound_Write EQU 0FFH ; Sound chip output port IO_VDP_Data EQU 0BEH ; VDP data port IO_VDP_Addr EQU 0BFH ; VDP VRAM address output port IO_VDP_Status EQU 0BFH ; VDP status input port ;********************************************************************** ; Coleco Vision Defines - MACROS ;********************************************************************** ;Not used any of they after modify the controller code ;Just here for consult NUM_DEV EQU 005h KDB_NULL EQU 00Fh CONTROLLER_0 EQU 000h STROBE_SET EQU 001h FIRE_MASK EQU 040h JOY_MASK EQU 00Fh ARM_MASK EQU 040h KBD_MASK EQU 00Fh PLYR_0 EQU 00002h PLYR_1 EQU 00007h SEG_0 EQU 007h SEG_1 EQU 018h FIRE EQU 000h JOY EQU 001h SPIN EQU 002h ARM EQU 003h KBD EQU 004h FIRE_OLD EQU 000h FIRE_STATE EQU 001h JOY_OLD EQU 002h JOY_STATE EQU 003h SPIN_OLD EQU 004h SPIN_STATE EQU 005h ARM_OLD EQU 006h ARM_STATE EQU 007h KBD_OLD EQU 008h KBD_STATE EQU 009h ;********************************************************************** ; H2Z80 Defines - MACROS ;********************************************************************** RG_BIT EQU 0 LF_BIT EQU 1 DW_BIT EQU 2 UP_BIT EQU 3 ST_BIT EQU 4 SL_BIT EQU 5 B_BIT EQU 6 A_BIT EQU 7 D_PAD_MASK EQU 0FH A_BUTTON_MASK EQU 80H B_BUTTON_MASK EQU 40h ;********************************************************************** ; Coleco Vision RAM addresses - Pointers ;********************************************************************** ;Debounce buffer. 5 pairs (old and state) of fire, joy, spin, arm and kbd for each player. DBNCE_BUFF EQU 073D7h ;Debounce buffer start (goes from 073D7h to 073EAh) - not used SPIN_SW0_CT EQU 073EBh ;Spinner counter port 1 SPIN_SW1_CT EQU 073ECh ;Spinner counter port 2 S0_C0 EQU 073eeh ;Segment 0 data, Controller port 1 S0_C1 EQU 073eFh ;Segment 0 data, Controller port 2 S1_C0 EQU 073F0h ;Segment 1 data, Controller port 1 S1_C1 EQU 073F1h ;Segment 1 data, Controller port 2 CTRL_MAP EQU 08008h ;Pointer to controller memory map ;*this one here is a poiter to the ROM memory ;that addresses the RAM position for the CTRL_MAP 12 bytes array org 00100h l0100h: ld sp,073b9h jp 0006eh rst 38h rst 38h jp 0800ch rst 38h rst 38h rst 38h rst 38h l010fh: rst 38h jp 0800fh rst 38h rst 38h rst 38h rst 38h rst 38h jp 08012h rst 38h rst 38h rst 38h rst 38h rst 38h jp 08015h rst 38h rst 38h rst 38h rst 38h rst 38h jp 08018h rst 38h rst 38h rst 38h rst 38h sub_012fh: rst 38h jp 0801bh rst 38h rst 38h rst 38h rst 38h rst 38h jp 0801eh ld hl,(073c8h) bit 7,h jr z,l0148h bit 0,h jr z,l014ch jr l014fh l0148h: bit 0,h jr z,l014fh l014ch: scf jr l0150h l014fh: or a l0150h: rl l rl h ld (073c8h),hl ld a,l ret rst 38h rst 38h rst 38h rst 38h rst 38h rst 38h rst 38h rst 38h rst 38h rst 38h rst 38h sub_0164h: rst 38h rst 38h jp 08021h inc a xor e ld d,023h ld d,02ah nop add a,b ld a,l cp 055h jp nz,00081h ld a,h cp 0aah jp nz,00081h ld hl,(0800ah) jp (hl) call 01fd6h ld hl,00033h ld (073c8h),hl call sub_1105h ld a,000h l018fh: ld (073c6h),a ld (073c7h),a jp l1319h pop hl ex (sp),hl push hl ld a,(bc) ld l,a inc bc ld a,(bc) inc bc ld h,a ex (sp),hl push de ld e,(hl) inc hl ld d,(hl) sub_01a6h: inc hl push hl ld a,e or d l01aah: jp nz,000b7h pop hl ld e,(hl) inc hl ld d,(hl) sub_01b1h: inc hl push hl ex de,hl ld e,(hl) inc hl ld d,(hl) inc bc ld a,(bc) rlca jp nc,000dah inc bc pop hl ex (sp),hl ld (hl),e sub_01c1h: inc hl ld (hl),d inc hl pop de ex (sp),hl dec hl xor a cp h jp nz,000d0h cp l jp z,000d6h ex (sp),hl push hl ex de,hl jp 000a3h pop hl ex de,hl ex (sp),hl jp (hl) pop hl ex (sp),hl push hl rrca ld h,a dec bc ld a,(bc) ld l,a ex (sp),hl inc bc l01e4h: inc bc l01e5h: ld a,(de) ld (hl),a inc hl inc de sub_01e9h: ex (sp),hl dec hl xor a cp l jp nz,000f4h cp h l01f1h: jp z,000f8h ex (sp),hl jp 000e5h pop hl jp 000c4h ld a,(ix+007h) cp 000h l0201h: jr nz,l020ch l0203h: ld a,(ix+005h) dec a ret z ld (ix+005h),a ret l020ch: push ix pop hl ld e,006h ld d,000h l0213h: add hl,de call l018fh+1 jr nz,l022eh call sub_01a6h dec hl ld a,(hl) dec a ret z ld (hl),a dec hl dec hl ld a,(ix+007h) call sub_01b1h inc hl res 2,(hl) or 0ffh l022eh: ret l022fh: ld a,(ix+008h) cp 000h ret z push ix pop hl ld d,000h ld e,009h add hl,de call l018fh+1 jr nz,l0263h call sub_01a6h dec hl call l018fh+1 jr z,l0261h ld a,(hl) l024ch: and 0f0h ld e,a dec hl dec hl l0251h: dec hl dec hl ld a,(hl) and 0f0h add a,e ld e,a ld a,(hl) and 00fh or e ld (hl),a or 0ffh jr l0263h l0261h: ld (hl),000h l0263h: ret ld a,(ix+004h) bit 4,c jr z,l026fh rrca rrca rrca rrca l026fh: and 00fh l0271h: or c out (IO_Sound_Write),a ret ld a,(ix+003h) and 00fh or d l027bh: out (IO_Sound_Write),a ld a,(ix+003h) and 0f0h ld d,a ld a,(ix+004h) and 00fh or d rrca rrca rrca rrca out (IO_Sound_Write),a ret ld a,000h rrd sub 001h push af rld pop af ret ld a,000h rld sub 001h push af rrd pop af l02a5h: ret ld a,(hl) and 0f0h ld b,a l02aah: rrca rrca l02ach: rrca rrca or b l02afh: ld (hl),a ret l02b1h: ld b,000h bit 7,a jr z,l02b9h ld b,0ffh l02b9h: add a,(hl) ld (hl),a l02bbh: inc hl ld a,(hl) adc a,b ld (hl),a dec hl ret ld hl,(07020h) dec hl dec hl ld c,b ld b,000h rlc c rlc c add hl,bc ld e,(hl) inc hl ld d,(hl) push de pop ix ret ld (ix+001h),l ld (ix+002h),h ld a,(de) and 03fh ld b,a ld a,(ix+000h) and 0c0h or b ld (ix+000h),a ret ld a,(ix+000h) cp 0ffh ret z and 03fh cp 03eh ret nz push ix pop hl inc hl ld e,(hl) inc hl ld d,(hl) ex de,hl ret ld (bc),a nop ld bc,00200h nop l0303h: ld bc,001fdh ld de,073bah call 00098h ld a,(073bah) ld b,a ld hl,(073bbh) ld (07020h),hl inc hl inc hl ld e,(hl) inc hl ld d,(hl) ex de,hl ld e,00ah ld d,000h l0320h: ld (hl),0ffh add hl,de djnz l0320h ld (hl),000h ld hl,l024ch ld (07022h),hl ld (07024h),hl ld (07026h),hl ld (07028h),hl ld a,0ffh ld (0702ah),a ld a,09fh out (IO_Sound_Write),a ld a,0bfh out (IO_Sound_Write),a ld a,0dfh out (IO_Sound_Write),a ld a,0ffh out (IO_Sound_Write),a ret rst 38h ld bc,l0100h nop ld bc,l024ch+1 ld de,073bah call 00098h ld a,(073bah) ld b,a push bc sub_035fh: call sub_01c1h ld a,(ix+000h) and 03fh pop bc cp b ret z ld (ix+000h),b dec hl dec hl ld d,(hl) dec hl ld e,(hl) ld (ix+001h),e ld (ix+002h),d call sub_035fh call 00295h ret ld b,001h call sub_01c1h l0384h: ld a,000h cp (ix+000h) ret z call 002d6h ld e,00ah ld d,000h add ix,de jr l0384h push ix ld hl,l024ch ld (07022h),hl ld (07024h),hl ld (07026h),hl ld (07028h),hl ld b,001h call sub_01c1h l03abh: ld a,(ix+000h) cp 000h jr z,l03d3h cp 0ffh jr z,l03cbh ld a,(ix+000h) and 0c0h rlca rlca rlca ld e,a ld d,000h ld hl,07022h add hl,de push ix pop de ld (hl),e inc hl ld (hl),d l03cbh: ld e,00ah ld d,000h add ix,de jr l03abh l03d3h: pop ix ret call sub_01e9h cp 0ffh ret z cp 03eh jr nz,l03e6h ld e,007h ld d,000h add hl,de jp (hl) l03e6h: call sub_012fh call 000fch jr nz,l03ffh ld a,(ix+000h) push af call sub_035fh pop bc ld a,(ix+000h) cp b jr z,l03ffh call 00295h l03ffh: ret ld a,09fh ld c,090h ld d,080h ld ix,(07024h) call 0034eh ld a,0bfh ld c,0b0h ld d,0a0h ld ix,(07026h) call 0034eh ld a,0dfh ld c,0d0h ld d,0c0h ld ix,(07028h) call 0034eh ld a,0ffh ld c,0f0h ld ix,(07022h) ld e,(ix+000h) inc e jr nz,l0439h out (IO_Sound_Write),a jr l044dh l0439h: call sub_0164h ld a,(ix+004h) and 00fh ld hl,0702ah cp (hl) jr z,l044dh ld (hl),a ld c,0e0h call sub_0164h l044dh: ret ld e,(ix+000h) inc e jr nz,l0458h out (IO_Sound_Write),a jr l045eh l0458h: call sub_0164h call 00175h l045eh: ret ld a,(ix+000h) and 03fh push af ld (ix+000h),0ffh ld l,(ix+001h) ld h,(ix+002h) ld a,(hl) ld b,a bit 5,a jr z,l0491h push bc and 01fh sub_0478h: inc hl ld (ix+001h),l ld (ix+002h),h ld (ix+004h),0f0h ld (ix+005h),a ld (ix+007h),000h ld (ix+008h),000h jp 00461h l0491h: bit 4,a jr z,l04a4h bit 3,a jr z,l049eh pop bc call 0025eh ret l049eh: ld a,0ffh push af jp 00461h l04a4h: and 03ch cp 004h jr nz,l04d2h pop iy push iy push bc inc hl ld e,(hl) ld (ix+001h),e inc hl ld d,(hl) ld (ix+002h),d inc hl push iy pop af push de pop iy ld de,003c6h push de jp (iy) ld d,000h ld e,007h add iy,de ld de,00461h push de jp (iy) l04d2h: push bc ld a,b and 003h cp 000h jr nz,l04fah inc hl inc hl inc hl inc hl ld (ix+001h),l ld (ix+002h),h dec hl ld de,00005h call sub_0478h ld bc,00003h lddr ld (ix+007h),000h ld (ix+008h),000h jr l0561h l04fah: cp 001h jr nz,l0519h ld e,006h ld d,000h add hl,de ld (ix+001h),l ld (ix+002h),h dec hl inc e call sub_0478h ld bc,00005h lddr ld (ix+008h),000h jr l0561h l0519h: cp 002h jr nz,l0545h ld e,006h ld d,000h add hl,de pop af push af and 0c0h jr nz,l0529h dec hl l0529h: ld (ix+001h),l ld (ix+002h),h dec hl ld e,009h call sub_0478h ld bc,00002h lddr ld a,000h ld (de),a dec de dec de ld c,003h lddr jr l0561h l0545h: ld e,008h ld d,000h add hl,de ld (ix+001h),l ld (ix+002h),h dec hl push ix pop iy ld e,009h add iy,de push iy pop de ld bc,00007h lddr l0561h: push ix pop hl pop af pop bc cp 0ffh ret z ld d,a and 03fh cp 004h jr nz,l0572h ld b,03eh l0572h: ld a,d and 0c0h or b ld (hl),a ret push ix pop iy add iy,de push iy pop de ret ld (bc),a nop cp 0ffh ld bc,l0100h add a,d inc b ld de,073bah call 00098h ld hl,(073bah) sub_0594h: ld e,(hl) inc hl ld d,(hl) ex de,hl ld a,(073bch) cp 000h jr z,l05a2h scf jr l05a3h l05a2h: or a l05a3h: ld e,(hl) inc hl ld d,(hl) inc hl ld c,(hl) inc hl ld b,(hl) inc hl ld a,000h ld (bc),a ld a,(de) push af and 00fh jp z,004e7h dec a jp z,005f1h dec a jp z,l0600h dec a jp z,l0600h dec a jr z,l05c6h pop af ret l05c6h: ld a,(de) rra rra rra rra and 00fh ld b,a ld e,(hl) inc hl ld d,(hl) inc hl or a jr z,l05e5h l05d5h: pop af push af push hl push bc ex de,hl call 004a3h pop bc pop hl ld e,(hl) inc hl ld d,(hl) inc hl djnz l05d5h l05e5h: pop af ret call l0572h ld a,(de) ld l,a inc de ld a,(de) add a,l ld (iy+005h),a ld h,000h pop af jr nc,l062fh push af ld a,(073c3h) bit 1,a jr z,l0630h ex de,hl l0600h: ld b,h ld c,l ld l,(hl) ld h,000h push hl add hl,hl add hl,hl add hl,hl push hl inc bc ld a,(bc) ld l,a inc bc ld a,(bc) ld h,a pop bc pop iy pop af bit 7,a jr z,l061bh call sub_0594h l061bh: call 005e8h bit 6,a jr z,l0625h call sub_0594h l0625h: call 005e8h bit 5,a jr z,l062fh call sub_0594h l062fh: ret l0630h: ex de,hl ld c,(hl) ld b,000h push bc pop iy inc hl ld a,(hl) inc hl ld h,(hl) ld l,a push hl push bc push de push iy ld a,003h call 01c27h pop bc pop hl ld e,l ld d,h add hl,bc dec hl srl h rr l srl h rr l srl h rr l sra e sra e sra e or a sbc hl,de inc hl push hl pop iy pop hl add hl,hl add hl,hl add hl,hl pop bc add hl,bc ld a,004h call 01c27h pop af ret push bc pop iy push de ld e,(hl) inc hl ld d,(hl) l0679h: bit 7,d jr nz,l0691h ld a,d cp 070h jr c,l0688h ld a,080h ld (de),a jr l0691h add a,b l0688h: ld hl,00587h ld bc,00001h call sub_1d01h l0691h: pop de inc de ret push af push bc push iy push de push hl ld a,003h call 01c27h pop hl pop de pop iy pop bc pop af push af push bc push iy push de push hl bit 4,a jr nz,l06bch add hl,bc ld a,004h call 01c27h l06b5h: pop hl pop de pop iy pop bc pop af ret l06bch: add hl,bc ld c,l ld b,h push iy pop hl l06c2h: push hl ld a,(bc) push bc ld bc,00008h ld hl,(08006h) add hl,bc ld b,008h l06ceh: dec hl ld (hl),a djnz l06ceh push de ld iy,00001h ld a,004h call 01c27h pop de pop bc inc de inc bc pop hl dec hl ld a,h sub_06e3h: or l jr nz,l06c2h jr l06b5h push bc ld bc,l0100h ex de,hl add hl,bc ex de,hl pop bc ret call l0572h inc de ld a,(de) ld (iy+005h),a inc de ld a,(de) ld (iy+006h),a pop af l06ffh: ret inc bc inc bc inc bc inc bc inc bc ex de,hl inc hl ld a,(hl) ld e,a ld d,000h push de inc hl ld e,(hl) inc hl ld d,(hl) inc hl add a,(hl) ld (bc),a ld c,(hl) ld b,000h push bc pop iy ex de,hl pop de pop af ret nc ld a,001h call 01c27h ret push ix ld hl,(073cdh) pop de ld (hl),e inc hl ld (hl),d inc hl ld (hl),b inc hl ex de,hl ld a,(073cbh) inc a ld hl,073cah cp (hl) jr nz,l0747h ld a,000h ld (073cbh),a ld hl,(073d1h) ld (073cdh),hl jr l074eh l0747h: ld (073cbh),a ld (073cdh),de l074eh: ret ld (bc),a nop ld bc,0fe00h rst 38h ld bc,0064fh ld de,073bah call 00098h ld a,(073bah) ld hl,(073bbh) ld (073cah),a ld a,000h ld (073cbh),a ld (073cch),a ld (073d1h),hl ld (073cdh),hl ld (073cfh),hl ret ld a,(073c6h) push af ld a,000h ld (073c6h),a l0782h: ld a,(073cch) ld hl,073cbh cp (hl) jr z,l07bch ld hl,(073cfh) ld e,(hl) inc hl ld d,(hl) inc hl ld b,(hl) inc hl push de pop ix push hl call sub_06e3h ld a,(073cch) inc a ld hl,073cah cp (hl) jr nz,l07b3h ld a,000h ld (073cch),a ld hl,(073d1h) ld (073cfh),hl pop hl jr l07bah l07b3h: ld (073cch),a pop hl ld (073cfh),hl l07bah: jr l0782h l07bch: pop af ld (073c6h),a ret ld (bc),a nop ld (bc),a nop ld bc,l0100h pop bc ld b,011h cp d ld (hl),e call 00098h ld ix,(073bah) ld a,(073bch) ld b,a ld a,(073c6h) cp 001h jr nz,l07e3h call 00623h ret l07e3h: ld h,(ix+001h) ld l,(ix+000h) ld a,(hl) ld c,a and 00fh jp z,l06ffh dec a jp z,l0a87h dec a jp z,l08deh+1 dec a jp z,l0955h jp 00ea2h ld d,(ix+003h) ld e,(ix+002h) push de pop iy ld d,(iy+002h) sub_080bh: ld e,(iy+001h) call 007e8h ld c,e ld d,(iy+004h) ld e,(iy+003h) call 007e8h ld b,e ld e,(iy+000h) ld d,000h add hl,de add hl,de ld e,005h add hl,de ld e,(hl) inc hl ld d,(hl) ex de,hl push bc pop de ld c,(hl) inc hl ld b,(hl) inc hl ld a,(ix+005h) bit 7,a jr z,l083bh call sub_080bh ret l083bh: push bc push de push hl cp 070h jr z,l0844h jr c,l084bh l0844h: ld h,a ld l,(ix+004h) ld a,(hl) jr l0880h l084bh: ld hl,(08006h) ld d,(ix+005h) ld e,(ix+004h) push hl push de push hl ld bc,00004h call sub_1d3eh pop hl ld a,(hl) cp 080h jr nz,l0866h pop de jr l087fh l0866h: inc hl inc hl ld b,(hl) inc hl ld e,(hl) ld d,000h inc hl ex de,hl jr l0872h l0871h: add hl,hl l0872h: djnz l0871h push hl pop bc ex de,hl pop de inc de inc de inc de inc de call sub_1d3eh l087fh: pop hl l0880h: ld a,(hl) cp 080h jr z,l0894h ld e,(hl) inc hl ld d,(hl) inc hl ld c,(hl) inc hl ld b,(hl) inc hl push ix call sub_080bh pop ix l0894h: pop hl pop de pop bc push bc sub_0898h: push de push hl ld h,(ix+005h) ld l,(ix+004h) ld a,070h cp h jr c,l08a8h ld hl,(08006h) l08a8h: ld (hl),e inc hl ld (hl),d inc hl ld (hl),c inc hl ld (hl),b inc hl push ix call sub_0898h pop ix pop hl pop de pop bc push ix call sub_080bh pop ix ld d,(ix+005h) ld a,070h cp d jr z,l08e7h jr c,l08e7h ld e,(ix+004h) exx ld hl,(08006h) push hl inc hl inc hl ld e,(hl) ld d,000h inc hl ld b,(hl) ex de,hl jr l08deh l08ddh: add hl,hl l08deh: djnz l08ddh push hl exx pop bc pop hl call sub_1d01h l08e7h: ret push hl sra d rr e sra d rr e sra d rr e bit 7,d jr nz,l0902h ld hl,0ff80h add hl,de pop hl ret nc ld e,07fh ret l0902h: ld hl,00080h add hl,de pop hl ret c ld e,080h ret push bc push de push hl exx pop hl pop de pop bc call 008c0h exx ld a,e bit 7,a jr nz,l091eh cp 020h ret nc l091eh: add a,c bit 7,a ret nz or a ret z bit 7,e jr z,l0948h ld a,c add a,e push de cp 021h jr c,l0931h ld a,020h l0931h: ld e,a ld d,000h push de pop iy pop de ld a,e exx push bc neg ld c,a ld b,000h add hl,bc ex de,hl add hl,bc ex de,hl pop bc exx jr l0964h l0948h: ld a,e add a,c cp 01fh jr z,l095dh jr c,l095dh ld a,020h sub e push de ld e,a l0955h: ld d,000h push de pop iy pop de jr l0964h l095dh: push bc ld b,000h push bc pop iy pop bc l0964h: ld e,000h l0966h: ld a,d add a,e bit 7,a jr nz,l0985h cp 018h jr nc,l0985h push bc push de exx push bc push de push hl push iy ld a,002h call 01c27h pop iy pop hl pop de pop bc exx pop de pop bc l0985h: exx push bc ld b,000h add hl,bc ex de,hl ld bc,00020h add hl,bc ex de,hl pop bc exx inc e ld a,e cp b jr nz,l0966h ret call 008c0h push bc ld b,000h push bc pop iy pop bc l09a2h: push bc push de push hl push iy ld a,002h call sub_1ba3h pop iy pop hl pop de pop bc push bc ld b,000h add hl,bc ld bc,00020h ex de,hl add hl,bc ex de,hl pop bc dec b jr nz,l09a2h ret push hl bit 7,d jr z,l09c9h ld h,0ffh jr l09cbh l09c9h: ld h,000h l09cbh: ld l,d add hl,hl add hl,hl add hl,hl add hl,hl add hl,hl bit 7,e jr z,l09d9h ld d,0ffh jr l09dbh l09d9h: ld d,000h l09dbh: add hl,de ex de,hl pop hl ret ld iy,(08006h) ld l,(ix+002h) ld h,(ix+003h) ld de,00001h add hl,de ld c,(hl) inc hl ld b,(hl) ld a,b cp 000h jr z,l0a00h cp 0ffh jp nz,00a54h ld a,c cp 0f9h jp m,00a54h l0a00h: inc hl ld c,(hl) inc hl ld b,(hl) ld a,b cp 000h jr z,l0a14h cp 0ffh jp nz,00a54h ld a,c cp 0f9h jp m,00a54h l0a14h: dec hl dec hl ld a,(hl) cp 000h jp z,l09c9h+1 dec hl ld c,(hl) inc hl ld b,(hl) ld hl,00008h add hl,bc ld a,l ld (iy+001h),a ld l,(ix+000h) ld h,(ix+001h) ld de,00005h add hl,de ex de,hl ld a,(de) ld l,a inc de ld a,(de) ld h,a push hl ld l,(ix+002h) ld h,(ix+003h) ld de,00000h add hl,de ld a,(hl) sla a ld bc,00000h ld c,a pop hl add hl,bc ld a,(hl) or 080h ld (iy+003h),a jp l0a00h ld iy,(08006h) ld l,(ix+002h) ld h,(ix+003h) ld de,00001h add hl,de ld c,(hl) inc hl ld b,(hl) ld a,b cp 000h jr z,l0a76h cp 0ffh jp nz,00a54h ld a,c cp 0e1h jp m,00a54h l0a76h: inc hl ld c,(hl) inc hl ld b,(hl) ld a,b cp 000h jr z,l0a8ah cp 0ffh jp nz,00a54h ld a,c cp 0e1h l0a87h: jp m,00a54h l0a8ah: dec hl dec hl ld a,(hl) cp 000h jp z,l09c9h+1 dec hl ld c,(hl) inc hl ld b,(hl) ld hl,00020h add hl,bc ld a,l ld (iy+001h),a ld l,(ix+000h) ld h,(ix+001h) ld de,00005h add hl,de ex de,hl ld a,(de) ld l,a inc de ld a,(de) ld h,a push hl ld l,(ix+002h) ld h,(ix+003h) ld de,00000h add hl,de ld a,(hl) sla a ld bc,00000h ld c,a pop hl add hl,bc ld a,(hl) or 080h ld (iy+003h),a jr l0b00h ld l,(ix+002h) ld h,(ix+003h) ld de,00001h add hl,de ld a,(hl) ld (iy+001h),a ld l,(ix+000h) ld h,(ix+001h) ld de,00005h add hl,de ex de,hl ld a,(de) ld l,a inc de ld a,(de) ld h,a push hl ld l,(ix+002h) ld h,(ix+003h) ld de,00000h add hl,de ld a,(hl) sla a ld bc,00000h ld c,a pop hl add hl,bc ld a,(hl) ld (iy+003h),a l0b00h: ld l,(ix+002h) ld h,(ix+003h) ld de,00003h add hl,de ld a,(hl) ld (iy+000h),a ld l,(ix+000h) ld h,(ix+001h) ld de,00005h add hl,de ex de,hl ld a,(de) ld l,a inc de ld a,(de) ld h,a push hl ld l,(ix+002h) ld h,(ix+003h) ld de,00000h add hl,de ld a,(hl) sla a ld bc,00000h ld c,a pop hl add hl,bc inc hl ld a,(hl) ld l,(ix+000h) ld h,(ix+001h) ld de,00001h add hl,de add a,(hl) ld (iy+002h),a xor a ld d,000h ld e,(ix+004h) push iy pop hl ld iy,00001h call sub_1fbeh jr l0b86h push iy push ix push iy push iy xor a ld d,000h ld e,(ix+004h) pop hl ld iy,00001h call 01fbbh ld a,000h pop iy ld (iy+001h),a ld a,080h ld (iy+003h),a xor a ld d,000h pop ix ld e,(ix+004h) pop hl ld iy,00001h call sub_1fbeh l0b86h: ret ld iy,(08006h) ld a,(073c3h) bit 1,a jr nz,l0b96h res 7,b jr l0b98h l0b96h: set 7,b l0b98h: ld (iy+003h),b push hl ld h,(ix+003h) ld l,(ix+002h) ld a,(hl) ld (iy+004h),a xor 080h ld (hl),a inc hl ld e,(hl) ld a,e and 007h neg add a,008h ld (iy+001h),a inc hl ld d,(hl) call 007e8h ld (iy+011h),e inc hl ld e,(hl) ld a,e and 007h ld (iy+000h),a inc hl ld d,(hl) call 007e8h ld (iy+012h),e ld hl,(08006h) ld de,00013h add hl,de ld d,(iy+012h) ld e,(iy+011h) ld bc,l0303h call sub_0898h ld d,(ix+005h) ld e,(ix+004h) ld a,(ix+006h) pop ix ld iy,(08006h) ld (iy+005h),a push de ld hl,(08006h) ld bc,00006h add hl,bc ld bc,0000bh ld a,d cp 070h jr nc,l0c07h call sub_1fe2h jr l0c0ah l0c07h: ex de,hl ldir l0c0ah: ld hl,(08006h) ld de,00013h add hl,de exx ld de,(08006h) ld hl,00008h add hl,de ex de,hl exx ld iy,(08006h) ld c,(iy+005h) ld b,009h l0c25h: ld a,(hl) sub c cp 012h jr nc,l0c39h cp 009h jr c,l0c31h sub 009h l0c31h: exx ld l,a ld h,000h add hl,de ld a,(hl) exx ld (hl),a l0c39h: inc hl djnz l0c25h pop de ld hl,(08006h) ld bc,00011h add hl,bc ld bc,0000bh ld a,d cp 070h jr nc,l0c51h call sub_1fdfh jr l0c53h l0c51h: ldir l0c53h: push ix ld de,(08006h) ld hl,00013h add hl,de ex de,hl ld bc,00014h add hl,bc ld b,009h l0c64h: ld a,(de) inc de push de ld de,00008h add hl,de push hl ld e,a ld d,000h ld c,a push bc ld a,009h sub b ld b,000h l0c76h: sub 003h jr c,l0c7dh inc b jr l0c76h l0c7dh: ld a,b ld iy,(08006h) add a,(iy+012h) bit 7,(iy+003h) ld iy,00001h jr nz,l0cb8h ld a,003h call 01fbbh pop bc ld hl,(08006h) push bc ld de,00084h add hl,de ld e,c srl e srl e srl e ld d,000h ld a,009h sub b ld c,a ld b,000h add hl,bc ld iy,00001h ld a,004h call 01fbbh jr l0cd9h l0cb8h: sra a sra a l0cbch: sra a cp 003h jr nc,l0cd9h ld d,a push de push hl ld a,003h call 01fbbh pop hl ld de,00068h add hl,de pop de ld iy,00001h ld a,004h call 01fbbh l0cd9h: pop bc pop hl pop de djnz l0c64h pop ix exx ld d,(ix+003h) ld e,(ix+002h) ld b,(ix+005h) ld c,(ix+004h) exx push ix pop hl ld iy,(08006h) ld a,(iy+004h) add a,a ld c,a ld b,000h ld de,00006h add hl,de add hl,bc ld e,(hl) inc hl ld d,(hl) ld hl,(08006h) ld bc,0007ch add hl,bc push hl push bc ld bc,00005h ld a,d cp 070h jr nc,l0d1ah call sub_1fe2h jr l0d1dh l0d1ah: ex de,hl ldir l0d1dh: ld iy,(08006h) pop bc add iy,bc ld a,(iy+004h) ld iy,(08006h) ld (iy+002h),a pop de ld hl,(08006h) ld bc,00064h add hl,bc ld b,004h l0d38h: ld a,(de) cp (ix+001h) push de jr nc,l0d55h exx add a,a add a,a add a,a ld l,a ld h,000h add hl,bc push hl exx pop de ex de,hl push bc ld bc,00008h ldir pop bc ex de,hl jr l0d85h l0d55h: sub (ix+001h) exx add a,a add a,a add a,a ld l,a ld h,000h add hl,de push hl exx pop de ld a,d cp 070h jr nc,l0d7ch push bc push hl push de ld bc,00008h call sub_1fe2h ld bc,00008h pop hl add hl,bc ex de,hl pop hl add hl,bc pop bc jr l0d85h l0d7ch: ex de,hl push bc ld bc,00008h ldir pop bc ex de,hl l0d85h: pop de inc de djnz l0d38h ld iy,(08006h) ld de,(08006h) ld hl,0001ch add hl,de ld c,(iy+000h) ld b,000h add hl,bc push hl pop ix ld hl,00064h add hl,de push hl ld a,010h ex af,af' l0da6h: pop hl ld d,(hl) inc hl push hl ld bc,0000fh add hl,bc ld e,(hl) ex de,hl ld b,(iy+001h) xor a l0db4h: dec b jp m,l0cbch add hl,hl rla jr l0db4h ld e,a call 00e2fh ld a,(iy+000h) inc a ld (iy+000h),a cp 008h jr z,l0dcfh cp 010h jr nz,l0dd4h l0dcfh: ld bc,00010h add ix,bc l0dd4h: inc ix ex af,af' dec a jr z,l0dddh ex af,af' jr l0da6h l0dddh: pop hl bit 7,(iy+003h) jr nz,l0e03h ld hl,(08006h) ld bc,00084h add hl,bc ld d,(iy+002h) bit 1,(iy+003h) jr nz,l0df8h ld c,00fh jr l0dfah l0df8h: ld c,000h l0dfah: ld b,009h l0dfch: ld a,(hl) and c or d ld (hl),a inc hl djnz l0dfch l0e03h: ld a,(iy+005h) bit 7,(iy+004h) jr z,l0e0eh add a,009h l0e0eh: ld c,a ld hl,(08006h) ld de,00013h add hl,de ld b,009h l0e18h: ld (hl),a inc a inc hl djnz l0e18h bit 7,(iy+003h) jr nz,l0e96h ld e,c ld d,000h ld hl,(08006h) ld bc,0001ch add hl,bc ld iy,00009h ld a,003h call sub_1fbeh ld iy,(08006h) ld hl,(08006h) ld bc,00084h add hl,bc ld ix,(08006h) ld bc,00013h add ix,bc ld b,009h l0e4ch: ld a,(ix+000h) inc ix srl a srl a srl a ld e,a ld d,000h push bc ld a,009h sub b ld b,000h l0e60h: cp 003h jr c,l0e69h sub 003h inc b jr l0e60h l0e69h: add a,(iy+011h) cp 020h jr nc,l0e87h ld a,b add a,(iy+012h) cp 018h jr nc,l0e87h push ix push hl ld a,004h ld iy,00001h call sub_1fbeh pop hl pop ix l0e87h: pop bc inc hl inc de dec b ld a,b cp 000h jr nz,l0e4ch ld iy,(08006h) jr l0eeah l0e96h: ld b,000h l0e98h: push bc ld a,c add a,b add a,b add a,b ld c,a ld hl,00000h ld de,00018h ld a,b l0ea5h: dec a jp m,00dach add hl,de jr l0ea5h ld iy,(08006h) ld a,(iy+012h) add a,b cp 018h jr nc,l0ee3h srl a srl a srl a ld d,a ld e,c push de ld bc,0001ch add hl,bc ld bc,(08006h) add hl,bc push hl ld iy,00003h ld a,003h call sub_1fbeh pop hl ld de,00068h add hl,de pop de ld iy,00003h ld a,004h call sub_1fbeh l0ee3h: pop bc inc b ld a,b cp 003h jr nz,l0e98h l0eeah: ld iy,(08006h) ld b,(iy+006h) ld a,b cp 080h jr z,l0f17h ld c,(iy+007h) ld h,(iy+011h) ld l,(iy+012h) or a sbc hl,bc jr z,l0f17h ld hl,(08006h) ld de,00008h add hl,de ld e,(iy+006h) ld d,(iy+007h) ld bc,l0303h call sub_080bh l0f17h: ld iy,(08006h) ld hl,(08006h) ld de,00013h add hl,de ld e,(iy+011h) ld d,(iy+012h) ld bc,l0303h call sub_080bh ret bit 0,(iy+003h) jr nz,l0f4bh or (ix+000h) ld (ix+000h),a ld a,h or (ix+008h) ld (ix+008h),a ld a,l or (ix+010h) ld (ix+010h),a sub_0f49h: jr l0f5fh l0f4bh: or a jr z,l0f51h ld (ix+000h),a l0f51h: ld a,h or a jr z,l0f58h ld (ix+008h),a l0f58h: ld a,l or a jr z,l0f5fh ld (ix+010h),a l0f5fh: bit 7,(iy+003h) jr z,l0fa1h push ix ld bc,00068h add ix,bc ld b,(iy+002h) bit 1,(iy+003h) jr nz,l0f79h ld c,00fh jr l0f7bh l0f79h: ld c,000h l0f7bh: ld a,e or a jr z,l0f87h ld a,(ix+000h) and c or b ld (ix+000h),a l0f87h: ld a,h or a jr z,l0f93h ld a,(ix+008h) and c or b ld (ix+008h),a l0f93h: ld a,l l0f94h: or a jr z,l0f9fh ld a,(ix+010h) l0f9ah: and c or b ld (ix+010h),a l0f9fh: pop ix l0fa1h: ret push bc exx ld h,(ix+003h) ld l,(ix+002h) l0faah: ld a,(hl) inc hl ld c,(hl) inc hl ld b,(hl) inc hl ld e,(hl) inc hl ld d,(hl) exx l0fb4h: add a,a add a,a ld e,a ld d,000h inc hl add hl,de ld c,(hl) inc hl ld b,(hl) inc hl ld e,(hl) inc hl ld d,(hl) ld h,b ld l,c l0fc4h: pop bc ld a,c ld c,b srl a srl a srl a srl a ld b,a push bc push ix l0fd3h: push hl push de ld l,(ix+004h) ld h,(ix+005h) inc ix inc ix inc hl inc hl ld e,(hl) inc hl ld d,(hl) push de pop iy pop de pop hl ld a,(hl) bit 7,(iy+000h) jr z,l0ff2h set 7,a l0ff2h: ld (iy+000h),a inc hl ld a,(de) exx ld l,a ld h,000h add hl,bc ld (iy+001h),l ld (iy+002h),h exx inc de ld a,(de) exx ld l,a ld h,000h add hl,de ld (iy+003h),l ld (iy+004h),h exx inc de djnz l0fd3h pop iy ld bc,00004h add iy,bc pop de l101ch: ld l,(iy+000h) ld h,(iy+001h) inc iy inc iy push hl pop ix push iy push de ld b,e call sub_1ffah pop de pop iy dec d jr nz,l101ch ret ld hl,(073d3h) l103ah: bit 5,(hl) call z,sub_0f49h bit 4,(hl) jr nz,l1048h inc hl l1044h: inc hl inc hl jr l103ah l1048h: ret push hl bit 3,(hl) jr z,l1079h bit 6,(hl) jr nz,l105fh inc hl l1053h: ld e,(hl) inc hl ld d,(hl) dec de ld a,e or d jr nz,l108fh pop hl push hl jr l108bh l105fh: inc hl ld e,(hl) inc hl ld d,(hl) ex de,hl ld e,(hl) inc hl ld d,(hl) dec de ld a,e or d jr nz,l108fh inc hl ld e,(hl) inc hl ld d,(hl) dec hl dec hl ld (hl),d dec hl ld (hl),e pop hl push hl jr l108bh l1079h: inc hl dec (hl) jr nz,l108dh pop hl push hl bit 6,(hl) jr z,l108bh inc hl inc hl ld a,(hl) dec hl ld (hl),a dec hl pop hl push hl l108bh: set 7,(hl) l108dh: pop hl ret l108fh: ld (hl),d dec hl ld (hl),e jr l108dh ld (bc),a nop ld (bc),a nop ld (bc),a nop ld bc,l0f94h ld de,073bah call 00098h ld hl,(073bah) ld de,(073bch) ld (073d3h),hl ld (hl),030h ex de,hl ld (073d5h),hl ret ld bc,l0100h nop ld bc,l0fb4h l10bbh: ld de,073beh call 00098h ld a,(073beh) ld c,a ld hl,(073d3h) ld b,a ld de,00003h or a jr z,l10d7h l10cfh: bit 4,(hl) jr nz,l113dh add hl,de dec c jr nz,l10cfh l10d7h: bit 5,(hl) jr nz,l113dh set 5,(hl) bit 6,(hl) jr z,l113dh bit 3,(hl) jr z,l113dh inc hl ld e,(hl) inc hl ld d,(hl) push de ld hl,(073d3h) push hl l10eeh: bit 4,(hl) jr nz,l1120h bit 5,(hl) jr nz,l1119h ld a,(hl) and 048h cp 048h jr nz,l1119h inc hl inc hl ld a,(hl) cp d jr c,l1119h jr nz,l110dh sub_1105h: dec hl ld a,(hl) cp e jr c,l1119h jr z,l113dh inc hl l110dh: ld d,(hl) dec hl ld e,(hl) dec de dec de dec de dec de ld (hl),e inc hl ld (hl),d jr l1119h l1119h: pop hl inc hl inc hl inc hl push hl jr l10eeh l1120h: ld b,000h or a pop hl pop de push hl ld hl,(073d5h) sbc hl,de ld c,l ld l,e ld h,d inc hl inc hl inc hl inc hl ldir ld bc,00008h sbc hl,bc ld (073d5h),hl pop hl l113dh: ret ld (bc),a nop ld bc,00200h nop ld bc,0103eh ld de,073bfh sub_114ah: call 00098h ld hl,(073c0h) ld a,(073bfh) ld c,a ex de,hl ld hl,(073d3h) xor a ld b,a l115ah: bit 5,(hl) jr z,l119ch push hl ld a,(hl) and 010h or 020h ld (hl),a xor a or d jr nz,l1174h or c l116ah: jr z,l116eh set 6,(hl) l116eh: inc hl ld (hl),e inc hl ld (hl),e jr l11b6h l1174h: set 3,(hl) ld a,c or a jr z,l1195h push de ex de,hl ld hl,(073d5h) ex de,hl set 6,(hl) inc hl ld (hl),e inc hl ld (hl),d ex de,hl pop de ld (hl),e inc hl ld (hl),d l118bh: inc hl ld (hl),e inc hl ld (hl),d inc hl ld (073d5h),hl jr l11b6h l1195h: inc hl ld (hl),e inc hl ld (hl),d inc hl jr l11b6h l119ch: bit 4,(hl) jr nz,l11a6h inc hl inc hl inc hl inc b jr l115ah l11a6h: push de push hl inc hl inc hl inc hl inc b ld (hl),030h ex de,hl pop hl res 4,(hl) ex de,hl pop de jr l115ah l11b6h: pop hl res 5,(hl) ld a,b ret ld bc,l0100h nop ld bc,l10bbh ld de,073c2h call 00098h ld a,(073c2h) ld c,a ld hl,(073d3h) ld b,a ld de,00003h or a jr z,l11deh l11d6h: bit 4,(hl) jr nz,l11e6h add hl,de dec c jr nz,l11d6h l11deh: bit 5,(hl) jr nz,l11e6h bit 7,(hl) jr nz,l11e9h l11e6h: xor a jr l11f3h l11e9h: bit 6,(hl) jr nz,l11efh set 5,(hl) l11efh: res 7,(hl) ld a,001h l11f3h: or a ret rrca ld b,001h inc bc add hl,bc nop ld a,(bc) rrca ld (bc),a dec bc rlca rrca dec b inc b ex af,af' rrca ;*************************************** ; ; CONTROLLER HANDLING ROUTINES BEGIN HERE ;* ;************************************** ;*************************************** ; ; This routine initializes the controller state tables, ; counters, and shadow bytes. ; ; Basicaly clear the RAM controllers mask part ; ;*************************************** ; This routine reads the raw controller state, then updates the ; table pointed to by (8008H). The format of this table is: ; ; Byte 0 = left controller enable flag ; Byte 1 = right controller enable flag ; Bit 0 = left fire button enable flag ; Bit 1 = directionals enable flag ; Bit 2 = spinner enable flag ; Bit 3 = right fire button enable flag ; Bit 4 = keypad enable flag ; Bit 5 = unused ; Bit 6 = unused ; Bit 7 = controller enable flag ; Bytes 2-6 = left controller result state ; Bytes 7-11 = right controller result state ; +0 = left fire button state (00H or 40H) ; +1 = directionals state (00H-0FH) ; +2 = spinner count (00H-FFH) ; +3 = right fire button state (00H or 40H) ; +4 = keypad state (00H-0EH, or 0FH for none) ; ; State changes are delayed by one call to ReadCtlState, which ; will provide debouncing if this is called once per vertical ; retrace. Debouncing is done with a raw state table at 73D7H: ; ; 73D7-73E0 = left controller raw state ; 73E1-73EA = right controller raw state ; +0 = raw left fire button state ; +2 = raw directionals state ; +4 = unused? (73DB, 73DC, 73E5, 73E6) ; +6 = raw right fire button state ; +8 = raw keypad state ; +0 = raw controller bits ; +1 = state flag (1 = same in prev call, 0 = different) ; Ram decode for coleco controller buttons ;p1 fire1 *8008h + 1 ; nothing = 0fh ; f1 = 40h ;p1 joystick: *8008h + 2 ; nothing = 0 ; up = 1h ; rg = 2h ; dw = 4h ; lf = 8h ;p1 spinner *8008h + 3 ;p1 arm (fire2) *8008h + 4 ; nothing = 0fh ; f2 = 40h ;p1 keypad *8008h + 5 ; nothing = 0fh ; 0 = 0h ; 1 = 1h * ; 2 = 2h ; 3 = 3h ; 4 = 4h * ; 5 = 5h ; 6 = 6h ; 7 = 7h ; 8 = 8h ; 9 = 9h ; * = Ah * ; # = Bh * ;p1 keypad S1_C0 ; nothing = 80 ; 0 = +5h ; 1 = +2h ; 2 = +8h ; 3 = +3h ; 4 = +Dh ; 5 = +Ch ; 6 = +1h ; 7 = +Ah ; 8 = +Eh ; 9 = +4h ; * = +6h ; # = +9h ;S0_C0 = 80h + p1_fire1 + p1_joy ;S1_C0 = 80h + p1_fire2 + p1_keypad ;S0_C1 = 80h + p2_fire1 + p2_joy ;S1_C1 = 80h + p2_fire2 + p2_keypad ;*********** Coleco Controller Init - clear controller memory *********** ;******************************************************************* ;* FROM HERE TO THE END OF CONTROLLER ROUTINES THERE ARE 532 bytes * ;******************************************************************* out (0c0h),a ;1205 xor a ;1207 ld ix,(08008h) ;1208 inc ix ;120c inc ix ;120e ld iy,073d7h ;1210 ld b,00ah ;1214 l1216h: ld (ix+000h),a ;1216 inc ix ;1219 ld (iy+000h),a ;121b inc iy ;121e sub_1220h: ld (iy+000h),a ;1220 inc iy ;1223 dec b ;1225 jr nz,l1216h ;1226 ld (073ebh),a ;1228 ld (073ech),a ;122b ld (073eeh),a ;122e ld (073efh),a ;1231 ld (073f0h),a ;1234 ld (073f1h),a ;1237 ret ;123a ;*********** Delay after strobe and before read *********** nop ;123b ret ;123c ;Nops needed to avoid direct address calls mismatches nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop ;FROM THE START TO HERE THERE ARE 165 bytes nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop ;FROM THE START TO HERE THERE ARE 276 bytes ;this instructions needs to stay here to coleco boot the games ;probably because calls that uses pure address to direct access this function l1319h: ;ethernal place holder LOL ld a,(073f1h) nop ;AND HERE WE CAME TO 280 bytes nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop ; ;FROM THE START TO HERE WE CAME UP TO 344 bytes ; ;****************************************** ; ; New controller routine starts from here ; Make H2Z80 controllers compatible ; ;****************************************** ; ; THIS ROUTINES ONLY TAKES UP 188 BYTES ; ;******* clear the controller memory and set deffault values ******* push ix ;save current ix to stack push bc ;save current bc to stack xor a ;deffault value (nothing pressed) ld (SPIN_SW0_CT),a ld (SPIN_SW1_CT),a ld ix,(CTRL_MAP) ;array pointed by 8008h (cardige ROM pointer address) ld a,9fh ;controller 0 enable ld (ix),a ;player 1 enable inc ix ;controller 1 enable ld (ix),a ;player 2 enable ;****** Read and decode the controller 0 port - Player 1 ****** in a,(IO_Joy0_Read) ;read controller 0 port data ld b,a ;copy it to b - future uses ;Decode part 1 - S0_C0 = 80h + p1_fire1 + p1_joy ;---fire 1 button decode (B button on NES controller) inc ix ;now point to fire 1 player 1 and B_BUTTON_MASK ;from here a = 40h (pressed) or 00h (release) ld (ix),a ;save result on fire 1 player 1 memory address in CTRL_MAP array add a,80h ;add deffault value for S0_C0 ld c,a ;ld player 1 fire 1 + deffault 80h values to c ;---joystick decode inc ix ;now point to joystick player 1 ;xor a ;clear a ld a,b ;restore controller input data ;all D pad buttons at once and D_PAD_MASK ;from here a = somatory of all D pad pressed buttons ld (ix),a ;save result on joystick player 1 memory address in CTRL_MAP array add a,c ;add player 1 fire 1 + deffault 80h values to a ld (S0_C0),a ;save the result data to S0_C0 ;Decode part 2 - S1_C0 = 80h + p1_fire2 + p1_keypad ;---fire 2 button decode - arm button (A button on NES controller) xor a ;clear a inc ix ;now point to player 1 spinner ld (ix),a ;deffault value for player 1 spinner inc ix ;now point to arm (fire 2) player 1 ld a,b ;restore controller input data and A_BUTTON_MASK ;from here a = 80h (pressed) or 00h (release) rrca ;from here a = 40h or 00h ld (ix),a ;save result on fire 1 player 1 memory address in CTRL_MAP array add a,80h ;add deffault value for S1_C0 ld c,a ;ld player 1 fire 1 + deffault 80h values to c ;---start and select buttons decode as coleco keypad buttons inc ix ;now point to keypad player 1 ld a,0fh ;nothing pressed keypad ld (ix),a ;save deffault status player 1 keypad to CTRL_MAP xor a ;clear a bit ST_BIT,b ;verify ST bit jr z,not_st_p1 ;is ST pressed? ld a,02h ;true - chose keypad b1 value to S1_C0 ld (ix),01h ;save it to CTRL_MAP - keypad b1 value for CTRL_MAP is 01h not_st_p1: ;false - ignore keypad b1 values - (ix) stay 0fh bit SL_BIT,b ;verify SL bit jr z,not_sl_p1 ;is SL pressed? ld a,0Dh ;true - chose keypad b4 value to S1_C0 ld (ix),04h ;save it to CTRL_MAP - keypad b4 value for CTRL_MAP is 04h not_sl_p1: ;false - ignore keypad b1 values - (ix) stay 0fh add a,c ;add player 1 fire 2 + deffault 80h + keypad S1_C0 values to a ld (S1_C0),a ;save the result data to S1_C0 ;****** Read and decode the controller 1 port - Player 2 ****** in a,(IO_Joy1_Read) ;read controller 1 port data ld b,a ;copy it to b - future uses ;Decode part 1 - S0_C1 = 80h + p2_fire1 + p2_joy ;---fire 1 button decode (B button on NES controller) inc ix ;now point to fire 1 player 2 and B_BUTTON_MASK ;from here a = 40h or 00h ld (ix),a ;save result on fire 1 player 2 memory address in CTRL_MAP array add a,80h ;add deffault value for S0_C1 ld c,a ;ld player 2 fire 1 + deffault 80h values to c ;---joystick decode inc ix ;now point to joystick player 2 ld a,b ;restore controller input data ;all D pad buttons at once and D_PAD_MASK ;from here a = somatory of all D pad pressed buttons ld (ix),a ;save result on joystick player 2 memory address in CTRL_MAP array add a,c ;add player 2 fire 1 + deffault 80h values to a ld (S0_C1),a ;save the result data to S0_C1 ;Decode part 2 - S1_C1 = 80h + p2_fire2 + p2_keypad ;---fire 2 button decode - arm button (A button on NES controller) xor a ;clear a inc ix ;now point to player 2 spinner ld (ix),a ;deffault value for player 2 spinner inc ix ;now point to arm (fire 2) player 2 ld a,b ;restore controller input data and A_BUTTON_MASK ;from here a = 80h or 00h rrca ;from here a = 40h or 00h ld (ix),a ;save result on fire 1 player 2 memory address in CTRL_MAP array add a,80h ;add deffault value for S1_C1 ld c,a ;ld player 2 fire 1 + deffault 80h values to c ;---start and select buttons decode as coleco keypad buttons inc ix ;now point to keypad player 2 ld a,0fh ;nothing pressed keypad ld (ix),a ;save deffault status player 2 keypad to CTRL_MAP xor a ;clear a bit ST_BIT,b ;verify ST bit jr z,not_st_p2 ;is ST pressed? ld a,02h ;true - chose keypad b1 value to S1_C1 ld (ix),01h ;save it to CTRL_MAP - keypad b1 value for CTRL_MAP is 01h not_st_p2: ;false - ignore keypad b1 values - (ix) stay 0fh bit SL_BIT,b ;verify SL bit jr z,not_sl_p2 ;is SL pressed? ld a,0Dh ;true - chose keypad b4 value to S1_C1 ld (ix),04h ;save it to CTRL_MAP - keypad b4 value for CTRL_MAP is 04h not_sl_p2: ;false - ignore keypad b1 values - (ix) stay 0fh add a,c ;add player 2 fire 2 + deffault 80h + keypad S1_C1 values to a ld (S1_C1),a ;save the result data to S1_C1 ;************ from here: debugging area ****************** ld h,00H ;its really necessary? ld l,00H ; ld e,00H ; in a,(IO_Joy0_Read) ;read controller 0 port data out (00h),a ;out it on leds port ;****** Restore memory and return ****** pop bc ;get old bc back from stack pop ix ;get old ix back from stack ret ;*************************************** ; Controller routines end ;*************************************** ld hl,00000h ld de,04000h ld a,000h call sub_18d4h call sub_18e9h call sub_1927h ld hl,l18a3h ld de,00060h l1430h: push hl push de ld a,(hl) cp 0ffh jr z,l1452h ld b,a inc b ld hl,014c3h ld de,00008h l143fh: djnz l1456h pop de push de ld iy,00001h ld a,003h call sub_1fbeh pop de l144dh: pop hl inc de inc hl jr l1430h l1452h: pop de pop hl jr l1459h l1456h: add hl,de jr l143fh l1459h: ld hl,l144dh ld de,00085h ld iy,00016h l1463h: ld a,002h call sub_1fbeh ld hl,l1463h ld de,000a5h ld iy,00016h ld a,002h call sub_1fbeh ld hl,014c1h ld de,0009bh ld iy,00002h ld a,002h call sub_1fbeh l1486h: ld hl,l14b4h ld de,l02aah ld iy,0000dh ld a,002h call sub_1fbeh ld hl,0143bh ld de,00000h ld a,004h ld iy,00012h call sub_1fbeh ld b,001h ld c,0c0h call 01fd9h ld hl,08000h ld a,(hl) cp 0aah jr nz,l14ffh inc hl l14b4h: ld a,(hl) cp 055h jr nz,l14ffh ld hl,08024h call sub_1946h ld de,08024h ld hl,l0201h call sub_1951h ld hl,08024h call sub_1946h inc hl ld d,h ld e,l call sub_1946h ld hl,sub_01c1h call sub_1951h ld hl,08024h call sub_1946h inc hl call sub_1946h inc hl ld de,l02ach ld iy,00004h ld a,002h call sub_1fbeh call 01968h ld b,001h ld c,080h call 01fd9h ld hl,(0800ah) jp (hl) l14ffh: ld hl,01479h ld de,l01aah ld iy,0000dh ld a,002h call sub_1fbeh ld hl,l1486h ld de,l01e4h ld iy,0001ah ld a,002h call sub_1fbeh ld hl,014a0h ld de,00227h ld iy,00014h ld a,002h call sub_1fbeh ld hl,08a00h call sub_196bh ld b,001h ld c,080h call 01fd9h l1539h: jr l1539h nop nop nop ret p ret p ret p ret p ret p ret p ret p ret p ret p ret nc add a,b sub b or b jr nc,$+66 ld h,b ld h,c ld l,b ld l,c ld (hl),b ld (hl),c ld a,b ld a,c add a,b add a,c adc a,b adc a,c ld h,h ld h,l ld l,h ld (hl),h ld (hl),l ld a,h add a,h add a,l adc a,h adc a,l ld h,d ld h,e ld l,d ld l,e ld (hl),d ld (hl),e ld a,d ld a,e add a,d add a,e adc a,d adc a,e ld h,(hl) ld h,a ld l,l halt ld (hl),a ld a,l add a,(hl) add a,a adc a,(hl) adc a,a ld d,h ld d,l ld d,d ld c,(hl) jr nz,l15c6h ld b,c ld c,l ld b,l jr nz,l15d3h ld b,(hl) ld b,(hl) ld b,d ld b,l ld b,(hl) ld c,a ld d,d l158bh: ld b,l jr nz,l15d7h ld c,(hl) ld d,e ld b,l ld d,d ld d,h ld c,c ld c,(hl) ld b,a jr nz,l15dbh ld b,c ld d,d ld d,h ld d,d ld c,c ld b,h ld b,a ld b,l ld c,a ld d,d jr nz,l15e9h ld e,b ld d,b ld b,c ld c,(hl) ld d,e ld c,c ld c,a ld c,(hl) jr nz,l15fbh ld c,a ld b,h ld d,l ld c,h ld b,l ld l,01dh jr nz,l15e8h add hl,sp jr c,l15ech jr nz,l15ffh ld c,a ld c,h ld b,l ld b,e ld c,a ld e,01fh nop nop nop l15c6h: nop nop nop nop nop ccf ld a,a rst 38h rst 38h di di ret p ret p l15d3h: nop add a,b ret nz ret nz l15d7h: ret nz ret nz nop nop l15dbh: ccf ld a,a rst 38h rst 38h di di di di nop add a,b ret nz ret nz ret nz l15e8h: ret nz l15e9h: ret nz ret nz ret p l15ech: ret p ret p ret p ret p ret p ret p ret p rst 38h rst 38h rst 38h ret p ret p rst 38h rst 38h rst 38h l15fbh: ret nz ret nz ret nz nop l15ffh: nop nop nop nop pop af pop af pop af ld a,e ld a,e ld a,e ccf ccf ret po ret po ret po ret nz ret nz ret nz add a,b add a,b rra ccf ld a,a ld a,c ld a,b ld a,a ld a,a ccf add a,b ret nz ret po ret po nop add a,b ret nz ret po di di ei ei ei rst 38h rst 38h rst 38h ret nz ret nz ret nz ret nz ret nz ret nz ret nz ret nz di di rst 38h rst 38h ld a,a ccf nop nop ret nz ret nz ret nz ret nz add a,b nop nop nop ret p ret p rst 38h rst 38h rst 38h rst 38h nop nop nop nop ret nz ret nz ret nz ret nz nop nop ccf rra rra rra ld c,00eh nop nop add a,b nop nop nop nop nop nop nop ret p ret p ret p ret p ret p ret p nop nop rra ld bc,07f79h ccf rra nop nop ret po ret po ret po ret po ret nz add a,b nop nop rst 38h rst 30h rst 30h rst 30h di di nop nop ret nz ret nz ret nz ret nz ret nz ret nz nop nop ld a,(hl) add a,c cp l and c and c cp l add a,c ld a,(hl) rra inc b inc b inc b nop nop nop nop ld b,h ld l,h l169dh: ld d,h ld d,h nop nop nop nop nop nop nop nop nop nop nop nop jr nz,l16cdh jr nz,l16cfh jr nz,l16b1h l16b1h: jr nz,l16b3h l16b3h: ld d,b ld d,b ld d,b nop nop nop l16b9h: nop nop ld d,b ld d,b ret m ld d,b ret m ld d,b ld d,b nop jr nz,l173dh and b ld (hl),b jr z,l16b9h jr nz,l16cbh l16cbh: ret nz ret z l16cdh: djnz l16efh l16cfh: ld b,b sbc a,b jr l16d3h l16d3h: ld b,b and b and b ld b,b xor b sub b ld l,b nop jr nz,$+34 jr nz,l16dfh l16dfh: nop nop nop nop jr nz,l1725h add a,b add a,b add a,b ld b,b jr nz,l16ebh l16ebh: jr nz,$+18 ex af,af' ex af,af' l16efh: ex af,af' djnz l1712h nop jr nz,l169dh ld (hl),b jr nz,l1768h xor b jr nz,l16fbh l16fbh: nop jr nz,$+34 ret m jr nz,l1721h nop nop nop nop nop nop jr nz,l1729h ld b,b nop nop nop nop ret m nop nop nop l1712h: nop nop nop nop nop nop nop jr nz,l171bh l171bh: nop ex af,af' djnz l173fh ld b,b add a,b l1721h: nop nop ld (hl),b adc a,b l1725h: sbc a,b xor b ret z adc a,b l1729h: ld (hl),b nop jr nz,l178dh jr nz,l174fh jr nz,l1751h ld (hl),b nop ld (hl),b adc a,b ex af,af' jr nc,$+66 add a,b ret m nop ret m ex af,af' l173dh: djnz l176fh l173fh: ex af,af' adc a,b ld (hl),b nop djnz l1775h ld d,b sub b ret m djnz l175ah nop ret m add a,b ret p ex af,af' l174fh: ex af,af' adc a,b l1751h: ld (hl),b l1752h: nop jr c,$+66 add a,b ret p adc a,b adc a,b ld (hl),b l175ah: nop ret m ex af,af' djnz l177fh ld b,b ld b,b ld b,b nop ld (hl),b adc a,b adc a,b ld (hl),b adc a,b l1768h: adc a,b ld (hl),b nop ld (hl),b adc a,b adc a,b ld a,b l176fh: ex af,af' djnz l1752h nop nop nop l1775h: jr nz,l1777h l1777h: jr nz,l1779h l1779h: nop nop nop nop jr nz,l177fh l177fh: jr nz,l17a1h ld b,b nop djnz l17a5h ld b,b add a,b ld b,b jr nz,l179ah nop nop nop l178dh: ret m nop ret m nop nop nop ld b,b jr nz,l17a6h ex af,af' djnz l17b9h ld b,b l179ah: nop ld (hl),b adc a,b djnz l17bfh jr nz,l17a1h l17a1h: jr nz,l17a3h l17a3h: ld (hl),b adc a,b l17a5h: xor b l17a6h: cp b or b add a,b ld a,b nop jr nz,l17fdh adc a,b adc a,b ret m adc a,b adc a,b nop ret p adc a,b adc a,b ret p adc a,b adc a,b l17b9h: ret p nop ld (hl),b adc a,b add a,b add a,b l17bfh: add a,b adc a,b ld (hl),b nop ret p adc a,b adc a,b adc a,b adc a,b adc a,b ret p nop ret m add a,b add a,b ret p add a,b add a,b ret m nop ret m add a,b add a,b ret p add a,b add a,b add a,b nop ld a,b add a,b add a,b add a,b sbc a,b adc a,b ld a,b nop adc a,b adc a,b adc a,b ret m adc a,b adc a,b adc a,b nop ld (hl),b jr nz,l180eh jr nz,l1810h jr nz,l1862h nop ex af,af' ex af,af' ex af,af' ex af,af' ex af,af' adc a,b ld (hl),b nop adc a,b sub b l17fdh: and b ret nz and b l1800h: sub b adc a,b nop add a,b add a,b add a,b add a,b add a,b add a,b ret m nop adc a,b ret c xor b l180eh: xor b adc a,b l1810h: adc a,b adc a,b nop adc a,b adc a,b ret z xor b sbc a,b adc a,b adc a,b nop ld (hl),b adc a,b adc a,b adc a,b adc a,b adc a,b ld (hl),b nop ret p adc a,b adc a,b ret p add a,b add a,b add a,b nop ld (hl),b adc a,b adc a,b adc a,b xor b sub b ld l,b nop ret p adc a,b adc a,b ret p and b sub b adc a,b nop ld (hl),b adc a,b add a,b ld (hl),b ex af,af' adc a,b ld (hl),b nop ret m jr nz,l1866h jr nz,l1868h jr nz,l186ah nop adc a,b adc a,b adc a,b adc a,b adc a,b adc a,b ld (hl),b nop adc a,b adc a,b adc a,b adc a,b adc a,b ld d,b jr nz,l185bh l185bh: adc a,b adc a,b adc a,b xor b xor b ret c adc a,b l1862h: nop adc a,b adc a,b ld d,b l1866h: jr nz,l18b8h l1868h: adc a,b adc a,b l186ah: nop adc a,b adc a,b ld d,b jr nz,l1890h jr nz,l1892h nop ret m ex af,af' djnz l1897h ld b,b add a,b ret m nop ret m ret nz ret nz ret nz ret nz ret nz ret m nop nop add a,b ld b,b jr nz,l1898h ex af,af' nop l188ah: nop ret m jr l18a6h jr l18a8h l1890h: jr l188ah l1892h: nop nop nop jr nz,l18e7h l1897h: adc a,b l1898h: nop nop nop nop nop nop nop nop nop nop ret m l18a3h: ld b,b jr nz,l18b6h l18a6h: nop nop l18a8h: nop nop nop nop nop ld (hl),b adc a,b ret m adc a,b adc a,b nop nop nop ret p l18b6h: ld c,b ld (hl),b l18b8h: ld c,b ret p nop nop nop ld a,b add a,b add a,b add a,b ld a,b nop nop nop ret p ld c,b ld c,b ld c,b ret p nop nop nop ret p add a,b ret po add a,b ret p nop nop sub_18d4h: nop ret p add a,b ret po add a,b add a,b nop nop nop ld a,b add a,b cp b adc a,b ld (hl),b nop nop nop adc a,b adc a,b l18e7h: ret m adc a,b sub_18e9h: adc a,b l18eah: nop nop nop ret m jr nz,l1910h jr nz,l18eah nop nop nop ld (hl),b jr nz,l1918h and b ret po nop nop nop sub b and b ret nz and b sub b nop nop nop add a,b add a,b add a,b add a,b ret m nop nop nop adc a,b ret c xor b l1910h: adc a,b adc a,b nop nop nop adc a,b ret z xor b l1918h: sbc a,b adc a,b nop nop nop ret m adc a,b adc a,b adc a,b ret m nop nop nop ret p adc a,b sub_1927h: ret p add a,b add a,b nop nop nop ret m adc a,b xor b sub b ret po nop nop nop ret m adc a,b ret m and b sub b nop nop nop ld a,b add a,b l193fh: ld (hl),b ex af,af' ret p nop nop nop ret m sub_1946h: jr nz,$+34 jr nz,l196ah nop nop nop adc a,b adc a,b adc a,b adc a,b sub_1951h: ld (hl),b nop nop nop adc a,b adc a,b sub b and b ld b,b nop nop nop adc a,b adc a,b xor b ret c adc a,b nop nop nop adc a,b ld h,b jr nz,l19c9h adc a,b l196ah: nop sub_196bh: nop nop adc a,b ld d,b jr nz,$+34 jr nz,l1973h l1973h: nop nop ret m djnz l1998h ld b,b l1979h: ret m nop jr c,l19bdh jr nz,l193fh jr nz,l19c1h jr c,l1983h l1983h: ld b,b jr nz,$+18 ex af,af' djnz l19a9h ld b,b nop ret po djnz $+34 jr l19b0h djnz $-30 nop ld b,b xor b djnz l1997h l1997h: nop l1998h: nop nop nop xor b ld d,b xor b ld d,b xor b ld d,b xor b nop ld bc,00e02h rrca ex af,af' add hl,bc l19a9h: ld (de),a inc de inc bc inc b ld c,00fh dec b l19b0h: inc d nop nop dec b nop djnz l19c8h ld a,(bc) dec bc dec d ld d,006h rlca l19bdh: djnz l19d0h dec b inc d l19c1h: nop nop ld bc,00e02h rrca inc bc l19c8h: inc b l19c9h: ld c,00fh inc bc inc b ld c,00fh inc c l19d0h: dec c rla jr $+1 ld c,a ld a,l out (0bfh),a ld a,h or 040h out (0bfh),a l19ddh: ld a,c out (0beh),a dec de ld a,d or e jr nz,l19ddh call sub_1fdch ret ld b,000h ld c,000h call 01fd9h ld b,001h ld c,080h call 01fd9h ld a,002h ld hl,l1800h call 01fb8h ld a,004h ld hl,l2000h call 01fb8h ld a,003h ld hl,00000h call 01fb8h ld a,000h ld hl,l1b00h call 01fb8h ld a,001h ld hl,03800h call 01fb8h ld b,007h ld c,000h call 01fd9h ret ld hl,l158bh ld de,0001dh ld iy,00060h ld a,003h call sub_1fbeh ld hl,015a3h ld de,00000h ld iy,00001h ld a,003h call sub_1fbeh ret ld bc,00000h l1a49h: ld a,(hl) cp 02fh ret z inc hl inc bc jr l1a49h push bc pop iy ld a,020h sbc a,c rra ld b,000h ld c,a add hl,bc ld b,h ld c,l ld h,d ld l,e ld d,b ld e,c ld a,002h call sub_1fbeh ret ld hl,01700h l1a6bh: ld de,000ffh l1a6eh: dec de ld a,d or e jr nz,l1a6eh dec hl ld a,h or l jr nz,l1a6bh ret ld hl,00000h l1a7ch: ld de,04000h ld a,000h call 01f82h call sub_1f85h ld b,00fh ld c,004h call 01fd9h call 01f7fh ld hl,l1a7ch ld de,00025h ld iy,00016h ld a,002h call sub_1fbeh ld hl,01a92h ld de,00065h ld iy,00017h ld a,002h call sub_1fbeh ld de,000c5h call sub_1acah ld de,00105h call sub_1acah ld de,00145h call sub_1acah l1ac1h: ld de,00185h l1ac4h: call sub_1acah ld de,l01e5h sub_1acah: call sub_1acah ld de,00225h call sub_1acah ld de,00265h call sub_1acah ld de,l02a5h sub_1adch: call sub_1acah ld de,00105h call 01ad7h ld de,00145h call sub_1adch ld de,00185h sub_1aeeh: call 01ae1h ld hl,l1ac1h+1 ld de,l01e5h call 01ae4h ld hl,l1ac1h+2 ld de,00225h l1b00h: call 01ae4h ld hl,l1ac4h ld de,00265h call 01ae4h ld hl,l1ac4h+1 ld de,l02a5h call 01ae4h ld de,l010fh call 01ad7h ld de,l014fh call sub_1adch ld de,l018fh call 01ae1h ld de,l01f1h call sub_1aeeh ld de,l022fh+2 call sub_1aeeh ld de,l0271h call sub_1aeeh ld de,l02b1h call sub_1aeeh ld de,l022fh call 01ad7h ld de,l026fh call sub_1adch ld de,l02afh call 01ae1h ld de,001fbh call 01afbh ld de,0023bh call 01afbh ld de,l027bh call 01afbh ld de,l02bbh call 01afbh ld hl,(073fah) ld de,00020h ld a,0f4h call 01f82h ld b,001h l1b76h: ld c,0c0h call 01fd9h ret ld d,h ld c,a jr nz,l1bd3h l1b80h: ld b,l ld c,h ld b,l ld b,e ld d,h jr nz,$+73 ld b,c ld c,l ld b,l jr nz,$+81 l1b8ch: ld d,b ld d,h ld c,c ld c,a ld c,(hl) inc l ld d,b ld d,d ld b,l ld d,e ld d,e jr nz,$+68 ld d,l ld d,h ld d,h ld c,a ld c,(hl) jr nz,$+81 ld c,(hl) jr nz,l1beeh sub_1ba3h: ld b,l ld e,c ld d,b ld b,c ld b,h ld l,031h sub_1baah: jr nz,$+63 jr nz,$+85 ld c,e ld c,c ld c,h ld c,h jr nz,$+51 cpl ld c,a ld c,(hl) ld b,l jr nz,l1c0ah ld c,h ld b,c ld e,c ld b,l ld d,d ld (03433h),a dec (hl) ld (hl),037h jr c,$+86 ld d,a ld c,a ld d,e ld hl,01aa9h ld iy,00016h ld a,002h l1bd3h: call sub_1fbeh ret ld hl,01abfh jr l1be4h ld hl,01ac0h jr l1be4h ld hl,l1ac1h l1be4h: ld iy,00001h ld a,002h call sub_1fbeh ret l1beeh: ld hl,l1ac4h+2 ld iy,00003h ld a,002h call sub_1fbeh ret ld hl,01ac9h ld iy,00001h ld a,002h l1c04h: call sub_1fbeh ret ld (bc),a nop l1c0ah: ld bc,00200h nop ld bc,01b08h ld de,073bah call 00098h ld a,(073bah) ld hl,(073bbh) ld c,a ld b,000h ld ix,073f2h add ix,bc add ix,bc ld (ix+000h),l ld (ix+001h),h ld a,(073c3h) bit 1,a jr z,l1c5ch ld a,c cp 003h jr z,l1c40h cp 004h jr z,l1c4eh jr l1c5ch l1c40h: ld b,004h ld a,l or h jr nz,l1c4ah ld c,003h jr l1c72h l1c4ah: ld c,007h jr l1c72h l1c4eh: ld b,003h ld a,l or h jr nz,l1c58h ld c,07fh l1c56h: jr l1c72h l1c58h: ld c,0ffh l1c5ah: jr l1c72h l1c5ch: ld iy,l1b76h add iy,bc add iy,bc ld a,(iy+000h) ld b,(iy+001h) l1c6ah: srl h rr l dec a jr nz,l1c6ah ld c,l l1c72h: call 01ccah ret l1c76h: rlca dec b dec bc ld b,00ah ld (bc),a dec bc inc b ld b,003h dec b nop l1c82h: ld bc,l0100h nop ld bc,0fe00h rst 38h ld (bc),a nop ld bc,l1b80h ld de,073bah call 00098h ld a,(073bah) ld de,(073bbh) ld iy,(073bfh) ld hl,(073bdh) call sub_1baah call sub_1d3eh ret ld (073feh),iy ld ix,073f2h ld c,a ld b,000h cp 004h jr nz,l1cc0h ld a,(073c3h) l1cbch: bit 1,a jr z,l1cech l1cc0h: ld iy,01bffh add iy,bc ld a,(iy+000h) cp 000h jr z,l1cech l1ccdh: sla e rl d dec a jr nz,l1ccdh push bc ld bc,(073feh) ld a,(iy+000h) cp 000h jr z,l1cebh l1ce0h: sla c rl b dec a l1ce5h: jr nz,l1ce0h ld (073feh),bc l1cebh: pop bc l1cech: push hl l1cedh: add ix,bc add ix,bc ld l,(ix+000h) ld h,(ix+001h) add hl,de ex de,hl pop hl ld bc,(073feh) ret ld (bc),a inc bc sub_1d01h: nop inc bc inc bc dec b nop ld bc,l0100h nop ld bc,0fe00h rst 38h ld (bc),a nop ld bc,l1c04h ld de,073bah call 00098h ld a,(073bah) ld de,(073bbh) ld iy,(073bfh) ld hl,(073bdh) push af cp 000h l1d2ah: jr nz,l1d4eh ld a,(073c7h) cp 001h jr nz,l1d4eh pop af push hl ld hl,(08002h) ld a,e sla a sla a ld e,a sub_1d3eh: add hl,de ex de,hl push iy pop bc ld a,c sla a sla a ld c,a l1d49h: pop hl ldir jr l1d55h l1d4eh: pop af call sub_1baah call sub_1d01h l1d55h: ret l1d56h: ld bc,l0100h nop l1d5ah: ld bc,l1c56h ld de,073bah l1d60h: call 00098h ld a,(073bah) l1d66h: ld b,a xor a ld hl,(08004h) l1d6bh: ld (hl),a l1d6ch: inc hl inc a cp b jr nz,l1d6bh ret ld bc,l0100h nop ld bc,l1c72h ld de,073bah call 00098h ld a,(073bah) ld ix,(08004h) push af ld iy,073f2h ld e,(iy+000h) ld d,(iy+001h) ld a,e out (0bfh),a ld a,d or 040h out (0bfh),a pop af l1d9ah: ld hl,(08002h) ld c,(ix+000h) inc ix ld b,000h add hl,bc add hl,bc add hl,bc add hl,bc ld b,004h ld c,0beh l1dach: outi nop nop jr nz,l1dach dec a jr nz,l1d9ah ret ld (bc),a l1db7h: nop ld bc,l0100h nop ld bc,01cb6h ld de,073bah call 00098h ld hl,(073bah) ld c,h ld b,l ld a,c out (0bfh),a ld a,b add a,080h out (0bfh),a ld a,b cp 000h jr nz,l1ddbh ld a,c ld (073c3h),a l1ddbh: ld a,b cp 001h jr nz,l1de4h ld a,c ld (073c4h),a l1de4h: ret l1de5h: inc bc nop cp 0ffh ld (bc),a nop ld (bc),a nop ld bc,l1ce5h ld de,073bah call 00098h ld hl,(073bah) ld de,(073bch) ld bc,(073beh) push hl push de pop hl ld de,04000h l1e07h: add hl,de ld a,l out (0bfh),a ld a,h out (0bfh),a push bc pop de pop hl ld c,0beh ld b,e l1e14h: outi nop nop jp nz,01d14h dec d jp m,01d21h jr nz,l1e14h ret inc bc nop cp 0ffh ld (bc),a nop ld (bc),a nop ld bc,01d22h ld de,073bah call 00098h ld hl,(073bah) ld de,(073bch) ld bc,(073beh) ld a,e out (0bfh),a ld a,d out (0bfh),a push bc pop de ld c,0beh ld b,e l1e49h: ini nop nop jp nz,l1d49h dec d jp m,l1d56h jr nz,l1e49h ret in a,(0bfh) ret ld ix,01d96h jr l1e70h ld ix,l1db7h jr l1e70h ld ix,l1de5h jr l1e70h ld ix,l1e07h l1e70h: exx ex af,af' sub_1e72h: push ix l1e74h: ex af,af' push af ex af,af' pop af exx push de exx pop de ld iy,00001h ld hl,(08006h) call sub_1ba3h pop ix push ix jp (ix) l1e8ch: inc de dec bc ld a,b or c exx jr nz,l1e74h pop ix ret ld hl,(08006h) ld bc,00008h push hl pop de add hl,bc ex de,hl call 01f00h call sub_1e72h call 01e5dh cp 001h sub_1eabh: jr nz,l1eb3h call 01e89h call 01e9ah l1eb3h: exx inc hl jr l1e8ch ld hl,(08006h) ld bc,00008h push hl pop de add hl,bc ex de,hl call sub_1f4eh call sub_1e72h call 01e5dh cp 001h jr nz,l1ee1h call 01e89h ld hl,(08006h) ld bc,00008h push hl pop de add hl,bc ex de,hl call sub_1f4eh call 01e9ah l1ee1h: exx inc hl jr l1e8ch ld hl,(08006h) ld bc,00008h push hl pop de add hl,bc ex de,hl call 01f12h call sub_1e72h call 01e5dh cp 001h jr nz,l1f02h call 01e89h call 01e9ah l1f02h: exx inc hl jp 01d8ch ld hl,(08006h) ld bc,00008h push hl pop de add hl,bc ex de,hl call sub_1eabh ex af,af' push af ex af,af' pop af exx push hl exx pop de ld hl,(08006h) ld bc,00008h add hl,bc ld iy,00004h call 01c27h call 01e5dh cp 001h jr nz,l1f55h call 01e89h ld hl,(08006h) ld bc,00008h push hl pop de add hl,bc ex de,hl call 01eeah ld a,004h exx push hl exx pop de ld hl,(08006h) ld bc,00008h add hl,bc sub_1f4eh: ld iy,00004h call 01c27h l1f55h: exx inc hl inc hl inc hl inc hl jp 01d8ch ex af,af' push af ex af,af' pop af cp 003h jr nz,l1f6fh ld hl,073c3h bit 1,(hl) jr z,l1f6fh ld a,001h ret l1f6fh: ld a,000h ret ex af,af' push af ex af,af' pop af exx push hl exx pop de ld hl,(08006h) ld bc,00008h add hl,bc ld iy,00001h sub_1f85h: call 01c27h ret ld a,004h exx push de exx pop de ld hl,(08006h) ld iy,00001h call sub_1ba3h ret ld a,004h exx push hl exx pop de ld hl,(08006h) ld iy,00001h call 01c27h ret push hl pop ix push de pop iy ld bc,00008h l1fb4h: ld a,(ix+000h) inc ix ld d,a ld e,004h l1fbch: rl a sub_1fbeh: rl h rl d rl h dec e jr nz,l1fbch ld e,004h l1fc9h: rl a rl l rl d rl l dec e jr nz,l1fc9h ld (iy+000h),h ld (iy+010h),l inc iy sub_1fdch: ld (iy+000h),h sub_1fdfh: ld (iy+010h),l sub_1fe2h: inc iy dec bc ld a,c or b jr nz,l1fb4h ret ld bc,00010h push hl l1feeh: ld a,(hl) inc hl ld (de),a inc de ld (de),a inc de dec bc ld a,c cp 008h jr nz,l1ffbh sub_1ffah: pop hl l1ffbh: ld a,c or b jr nz,l1feeh ret l2000h: ld bc,00008h l2003h: ld b,(hl) ld a,080h l2006h: rl b rra jr nc,l2006h ld (de),a inc hl inc de dec c jr nz,l2003h ret push hl pop ix ex de,hl ld bc,00008h l2019h: rl (ix+000h) rr (hl) rl (ix+001h) rr (hl) rl (ix+002h) rr (hl) rl (ix+003h) rr (hl) rl (ix+004h) rr (hl) rl (ix+005h) rr (hl) rl (ix+006h) rr (hl) rl (ix+007h) rr (hl) inc hl dec c jr nz,l2019h ret ld bc,00007h add hl,bc inc bc l2053h: ld a,(hl) ld (de),a inc de dec hl dec bc ld a,b or c jr nz,l2053h ret rst 38h rst 38h rst 38h rst 38h jp 00300h jp 00488h jp 006c7h jp l1d5ah jp l1d60h jp l1d66h jp l1d6ch jp sub_114ah jp l118bh jp l1979h jp sub_1927h jp sub_18d4h jp sub_18e9h jp l116ah jp 01b0eh jp l1b8ch jp 01c10h jp l1c5ah jp l1c76h jp l0f9ah jp 00fb8h jp l1044h jp 010bfh jp l1cbch jp l1cedh jp l1d2ah jp 00655h jp l0203h jp l0251h jp 01b1dh jp sub_1ba3h jp 01c27h jp 01c66h jp l1c82h jp l0faah jp l0fc4h jp l1053h jp 010cbh jp 00f37h jp 0023bh jp 01ccah jp l1d56h+1 jp sub_1d01h jp sub_1d3eh jp 00664h jp l0679h jp 011c1h jp l0213h jp 0025eh jp 0027fh jp 004a3h jp 006d8h jp 0003bh