; COMPLETE DISASSEMBLY OF COLECO MOUSE TRAP BY CAPTAIN COSMOS ; 100 HUNDRED PERCENT ALL LINKS RESOLVED. ; CREDIT GOES WHERE CREDIT IS DUE. THIS IS A PAINFUL, TIME CONSUMING EXPERIENCE. ; I SPENT A LOT OF TIME WORKING ON THIS AND IT WOULD SUCK 100% IS SOMEONE USED MY WORK TO MAKE MONEY. ; THIS WAS DONE FOR EDUCATIONAL PURPOSES ONLY AND ALL CREDIT GOES TO ME AND ME ONLY. ; SPENT A GOOD AMOUNT OF MAN HOURS AND EYE STRAIN ON THIS FOR YOU THE COLECO COMMUNITY SO IF YOU WANT MORE THAN BE KIND, LIKE, SHOW ME LOVE AND DO NOT SELL MY WORK. ; STARTED SOMETIME IN 23 OCTOBER ; COMPLETED ON 24 OCTOBER, 2023 (TECHNICALLY NOT COMPLETED...COMPLETED) THERE CAN ALWAYS BE MORE DONE SUCH AS OPTIMIZE CODE, MAKE MEMORY RETARGETED. PLAY_SONGS: EQU $1F61 GAME_OPT: EQU $1F7C FILL_VRAM: EQU $1F82 INIT_TABLE: EQU $1FB8 GET_VRAM: EQU $1FBB PUT_VRAM: EQU $1FBE INIT_SPR_NM_TBL: EQU $1FC1 WR_SPR_NM_TBL: EQU $1FC4 INIT_TIMER: EQU $1FC7 FREE_SIGNAL: EQU $1FCA REQUEST_SIGNAL: EQU $1FCD TEST_SIGNAL: EQU $1FD0 TIME_MGR: EQU $1FD3 WRITE_REGISTER: EQU $1FD9 READ_REGISTER: EQU $1FDC WRITE_VRAM: EQU $1FDF INIT_WRITER: EQU $1FE5 WRITER: EQU $1FE8 POLLER: EQU $1FEB SOUND_INIT: EQU $1FEE PLAY_IT: EQU $1FF1 SOUND_MAN: EQU $1FF4 PUTOBJ: EQU $1FFA RAND_GEN: EQU $1FFD SPRITE_NAME_TABLE: EQU $71D7 SPRITE_ORDER_TABLE: EQU $71FB WORK_BUFFER: EQU $702B CONTROLLER_BUFFER: EQU $7054 FNAME "Mouse Trap V1.rom" CPU Z80 ORG $8000 DW $AA55 ; CHANGE TO $55AA IN ORDER TO RETURN COLECO LOGO AND PAUSE DW SPRITE_NAME_TABLE DW SPRITE_ORDER_TABLE DW WORK_BUFFER WORD_8008: DW CONTROLLER_BUFFER DW START JP TEST_SIGNAL JP RST_10_PUT_OBJ JP RST_18_PLAY_IT JP WRITE_VRAM JP RST_28_NMI_JMP_TABLE JP RST_30_NMI_BIT_RESET RETI NOP JP NMI DB "MOUSETRAP",1EH,1FH DB "/PRESENTS EXIDY'S/1982" RST_30_NMI_BIT_RESET: LD IX, $718F LD IY, $719B LD A, ($71AC) CP 1 RET Z LD IX, $719B LD IY, $718F RET RST_10_PUT_OBJ: PUSH AF PUSH BC PUSH DE PUSH HL PUSH IX PUSH IY CALL PUTOBJ POP IY POP IX POP HL POP DE POP BC POP AF RET RST_28_NMI_JMP_TABLE: PUSH AF LD A, 1 LD ($71D5), A POP AF PUSH HL LD HL, LOC_807E EX (SP), HL JP (IX) LOC_807E: PUSH HL LD HL, $71D5 RES 0, (HL) BIT 7, (HL) LD (HL), 0 POP HL CALL NZ, NMI RET LOC_808D: PUSH HL LOC_808E: LD A, ($727F) CALL TEST_SIGNAL JR Z, LOC_808E POP HL RET NMI: PUSH AF PUSH HL PUSH DE PUSH BC PUSH IX PUSH IY EXX PUSH HL PUSH DE PUSH BC EXX LD A, ($71D5) BIT 0, A JR Z, DISPLAY_AFTER_SCAN_LINE SET 7, A LD ($71D5), A JR FINISH_NMI DISPLAY_AFTER_SCAN_LINE: CALL WRITER CALL SUB_80DC LD A, 9 CALL WR_SPR_NM_TBL CALL PLAY_SONGS CALL SOUND_MAN CALL TIME_MGR CALL READ_REGISTER LD ($71D6), A FINISH_NMI: EXX POP BC POP DE POP HL EXX POP IY POP IX POP BC POP DE POP HL POP AF RETN SUB_80DC: LD A, ($7053) LD HL, BYTE_80F7 OR A LD A, 1 JR Z, LOC_80EB XOR A LD HL, BYTE_8100 LOC_80EB: LD ($7053), A LD DE, $71FB LD BC, 9 LDIR RET BYTE_80F7: DB 000,007,002,003,004,005,006,001,008 BYTE_8100: DB 000,007,006,005,008,001,002,003,004 RST_18_PLAY_IT: PUSH HL PUSH DE PUSH BC PUSH IX PUSH IY CALL PLAY_IT POP IY POP IX POP BC POP DE POP HL RET INIT_CONTROLLERS: LD B, 0 LD HL, $7000 CALL CLEAR_OUT_SOME_RAM CALL CLEAR_OUT_SOME_RAM CALL CLEAR_OUT_SOME_RAM LD A, 9BH LD HL, (WORD_8008) LD (HL), A INC HL LD (HL), A CALL GAME_OPT LD B, 1 LD C, 9 CALL READ_JOYSTICK LD HL, $71AD CP 5 LD (HL), 1 JR C, SET_BACKGROUND_TO_BLACK LD (HL), 2 SUB 4 SET_BACKGROUND_TO_BLACK: LD ($71AE), A LD B, 7 LD C, 1 CALL WRITE_VRAM_REGISTER RET READ_JOYSTICK: LD ($7060), BC LOC_8157: LD HL, 380H LD ($7063), HL LOC_815D: LD HL, $7062 DEC (HL) JR NZ, CALL_THE_POLLER INC HL DEC (HL) JR NZ, CALL_THE_POLLER INC HL DEC (HL) JR Z, LOC_8186 CALL_THE_POLLER: CALL POLLER LD BC, ($7060) LD A, ($705A) CALL SUB_8180 LD A, ($705F) CALL SUB_8180 JR LOC_815D SUB_8180: CP B RET C CP C RET NC POP HL RET LOC_8186: LD A, ($73C4) RES 6, A LD C, A LD B, 1 CALL WRITE_VRAM_REGISTER LD B, 7 LD C, 1 CALL WRITE_VRAM_REGISTER JR LOC_8157 INIT_SCREEN_BLACK_BACKGROUND: LD B, 7 LD C, 1 CALL WRITE_VRAM_REGISTER CALL DISABLE_NMI LD HL, $7111 LD DE, $7112 LD BC, 0FAH LD (HL), 0 LDIR LD HL, 0 LD DE, 3FFFH XOR A CALL FILL_VRAM LD A, 0 LD ($73C6), A LD A, 9 LD HL, $7204 CALL INIT_WRITER LD A, 1 LD ($73C7), A LD HL, $71FB LD A, 0 LD B, 9 LOC_81D4: LD (HL), A INC HL INC A DJNZ LOC_81D4 LD HL, $71D7 LD DE, 4 LD A, 0C3H LD B, 9 LOC_81E3: LD (HL), A ADD HL, DE DJNZ LOC_81E3 LD A, 5 LD DE, $721F LOC_81EC: LD HL, BYTE_81F8 LD BC, 6 LDIR DEC A JR NZ, LOC_81EC RET BYTE_81F8: DB 088,088,088,049,000,000 START: XOR A LD B, A LD ($71D3), A LOC_8203: LD A, ($71D3) LD ($71D4), A LD A, B LD ($71D3), A LD HL, LOC_8203 PUSH HL LD A, ($71D3) LD L, A LD H, 0 ADD HL, HL LD DE, JUMP_TABLE_00 ADD HL, DE LD E, (HL) INC HL LD D, (HL) EX DE, HL JP (HL) JUMP_TABLE_00: DW LOC_822F DW LOC_8239 DW LOC_823F DW LOC_8245 DW DISPLAY_TREASURES DW LOC_8258 DW INITIALIZE_SOUND_AND_VIDEO_READ_CONTROLLER LOC_822F: XOR A LD ($7065), A CALL INIT_SCREEN_BLACK_BACKGROUND LD B, 1 RET LOC_8239: CALL INIT_CONTROLLERS LD B, 2 RET LOC_823F: CALL INITIALIZE_VRAM_TABLES LD B, 3 RET LOC_8245: CALL SUB_962B CALL SUB_92BC CALL MOUSE_TO_SCREEN LD B, 4 RET DISPLAY_TREASURES: CALL TREASURE_TO_SCREEN_01 CALL BONUS_AND_OTHER_EXTRAS RET LOC_8258: CALL SUB_8481 LD B, 3 RET INITIALIZE_SOUND_AND_VIDEO_READ_CONTROLLER: CALL DISABLE_NMI LD B, 0DH LD HL, SOUND_TABLE CALL SOUND_INIT LD B, 0AH LD C, 0CH CALL READ_JOYSTICK PUSH AF LD HL, 3000H LD A, 3 CALL INIT_TABLE LD HL, 3000H LD A, 2 CALL INIT_TABLE POP AF CP 0AH LD B, 2 RET Z LD B, 0 RET INIT_WRITER_FOR_DEFERED_WRITES: LD A, ($7065) OR A RET NZ XOR A LD ($71D5), A LD A, 1 LD ($73C6), A LD A, 9 LD HL, $7204 CALL INIT_WRITER LD C, 0E2H LD B, 1 JP WRITE_VRAM_REGISTER DISABLE_NMI: LD C, 0C2H LD B, 1 CALL WRITE_VRAM_REGISTER LD A, 0 LD ($7065), A LD ($73C6), A RET WRITE_VRAM_REGISTER: LD IX, WRITE_REGISTER RST 28H RET INITIALIZE_VRAM_TABLES: XOR A LD ($70F2), A CALL SUB_9ABA CALL SUB_96B9 LD C, 82H LD B, 1 CALL WRITE_VRAM_REGISTER LD DE, $718F CALL SUB_8359 LD DE, $719B CALL SUB_8359 LD HL, 1800H CALL CLEAR_VRAM_DISPLAY_PLAY_FIELD LD HL, 1C00H CALL CLEAR_VRAM_DISPLAY_PLAY_FIELD LD A, 3 LD HL, 0 CALL INIT_TABLE LD A, 1 LD HL, 800H CALL INIT_TABLE LD A, 4 LD HL, 1300H CALL INIT_TABLE XOR A LD HL, 1380H CALL INIT_TABLE LD A, 9 CALL INIT_SPR_NM_TBL CALL SPRITES_TO_VRAM LD B, 0DH LD HL, SOUND_TABLE CALL SOUND_INIT LD A, 1 LD ($71AC), A LD B, 0FH LD HL, $7111 PUSH HL POP IX CALL CLEAR_OUT_SOME_RAM LD (IX+6), 1 LD (IX+0AH), 2 LD (IX+0BH), 6 CALL SUB_8378 CALL WR_SPR_NM_TBL CALL SUB_83C8 CALL COLOR_TABLE_TO_VRAM CALL MOUSE_PATTERNS_TO_VRAM RET CLEAR_VRAM_DISPLAY_PLAY_FIELD: PUSH HL CALL CLEAR_SOME_VRAM POP HL LD A, 2 CALL INIT_TABLE LD IX, PLAY_FIELD CALL PUTOBJ RET CLEAR_OUT_SOME_RAM: LD (HL), 0 INC HL DJNZ CLEAR_OUT_SOME_RAM RET SUB_8359: LD HL, BYTE_8362 LD BC, 0AH LDIR RET BYTE_8362: DB 003,001,088,001,048,048,048,048,048,048 SPRITES_TO_VRAM: LD HL, 1380H LD DE, 80H LD A, 0D0H CALL FILL_VRAM RET SUB_8378: LD HL, $71D7 LD DE, 4 LD B, 9 LOC_8380: LD (HL), 0C3H ADD HL, DE DJNZ LOC_8380 LD IX, $7111 LD DE, 0FH LD B, 8 LOC_838E: LD (IX+3), 0C3H LD (IX+0BH), 0 ADD IX, DE DJNZ LOC_838E LD HL, $71B9 LD B, 4 JR CLEAR_OUT_SOME_RAM COLOR_TABLE_TO_VRAM: LD HL, COLOR_TABLE LD DE, 1300H LD BC, 20H CALL WRITE_VRAM RET SUB_83C8: LD HL, BYTE_9FE1 LOC_83CB: LD E, (HL) INC HL LD D, (HL) INC HL LOC_83CF: PUSH HL PUSH DE LD A, (HL) CP 0FFH JP Z, LOC_83F3 LD B, A INC B LD HL, PLAY_FIELD_PATTERNS_01 LD DE, 8 LOC_83DF: DJNZ LOC_83FE POP DE PUSH DE LD IY, 1 LD A, 3 CALL PUT_VRAM POP DE POP HL INC DE INC HL JP LOC_83CF LOC_83F3: POP DE POP HL INC HL LD A, (HL) CP 0FFH JP NZ, LOC_83CB JR LOCRET_8402 LOC_83FE: ADD HL, DE JP LOC_83DF LOCRET_8402: RET TREASURE_TO_SCREEN_01: CALL INIT_PATTERN_NAME_TABLE CALL DISPLAY_GATES CALL WRITE_TO_VRAM_REGISTER_1 CALL SUB_9378 CALL SUBTRACT_BONE_FROM_DISPLAY LD A, 1 LD HL, 5 CALL REQUEST_SIGNAL LD ($71B7), A LD A, 1 LD HL, 0AH CALL REQUEST_SIGNAL LD ($7283), A CALL REQUEST_A_TIMER_SIGNAL_01 LD A, 1 LD HL, 1 CALL REQUEST_SIGNAL LD ($7282), A CALL DISPLAY_TREASURE_01 CALL DISPLAY_BONUS UPDATE_JOYSTICK: CALL POLLER CALL SUB_AA09 LD A, ($7282) CALL TEST_SIGNAL OR A CALL NZ, SUB_A7B5 LD A, ($7281) CALL TEST_SIGNAL OR A CALL NZ, UPDATE_CATS LD A, ($71AE) DEC A JR Z, LOC_8466 LD A, ($7183) CALL TEST_SIGNAL OR A CALL NZ, SUB_9D71 LOC_8466: LD A, ($7283) CALL TEST_SIGNAL OR A CALL NZ, SUB_8898 LD A, ($71B5) OR A RET NZ CALL SUB_8575 RST 30H LD A, (IX+2) OR A RET Z JP UPDATE_JOYSTICK SUB_8481: LD A, ($70D3) CP 0FFH JR NZ, SUB_8481 CALL SETUP_PLAYFIELD_PATTERNS CALL SPRITES_TO_VRAM CALL SUB_8378 LD HL, 1000H CALL SUB_9A07 CALL SUB_84CF CALL PLAY_LEVEL_COMPLETE_SOUND LOC_849D: LD A, ($706F) CP 0FFH JR NZ, LOC_849D CALL DISABLE_NMI LD A, ($73C4) RES 6, A LD C, A LD B, 1 LD IX, WRITE_REGISTER RST 28H RST 30H INC (IX+1) LD (IX+2), 58H CALL SUB_9919 LD HL, 1800H DEC A JR Z, LOC_84C8 LD HL, 1C00H LOC_84C8: CALL CLEAR_VRAM_DISPLAY_PLAY_FIELD CALL PLAY_FIELD_PATTERNS_02 RET SUB_84CF: RST 30H LD HL, 19C8H DEC A JR Z, LOC_84D9 LD HL, 1DC8H LOC_84D9: LD A, 0 LD BC, 20H CALL FILL_SOME_VRAM ADD HL, BC CALL FILL_SOME_VRAM ADD HL, BC CALL FILL_SOME_VRAM ADD HL, BC CALL FILL_SOME_VRAM ADD HL, BC CALL FILL_SOME_VRAM ADD HL, BC CALL FILL_SOME_VRAM LD DE, 1E8H LD IY, 10H LD HL, LEVEL_COMPLETE_TXT CALL PUT_TO_SCREEN LD DE, 22AH LD IY, 0CH LD HL, TEN_THOUSAND_TXT CALL PUT_TO_SCREEN LD DE, 24AH LD IY, 0CH LD HL, BLANK_LINE_TXT CALL PUT_TO_SCREEN RET PUT_TO_SCREEN: LD A, 2 LD IX, PUT_VRAM RST 28H RET FILL_SOME_VRAM: PUSH AF PUSH BC PUSH DE PUSH HL LD DE, 0FH LD IX, FILL_VRAM RST 28H POP HL POP DE POP BC POP AF RET LEVEL_COMPLETE_TXT: DB 032,076,069,086,069,076,032,067,079,077,080,076,069,084,069,032 TEN_THOUSAND_TXT: DB 032,049,048,044,048,048,048,032,080,084,083,032 BLANK_LINE_TXT: DB 000,097,097,097,097,097,097,097,097,097,097,000 SETUP_PLAYFIELD_PATTERNS: LD HL, PLAY_FIELD_PATTERNS_01 JR PATTERNS_TO_VRAM PLAY_FIELD_PATTERNS_02: LD HL, BYTE_9FB9 PATTERNS_TO_VRAM: LD DE, 6EH LD IY, 1 LD A, 3 LD IX, PUT_VRAM RST 28H RET SUB_8575: LD A, ($71B7) CALL TEST_SIGNAL OR A RET Z LD A, ($71AC) DEC A LD E, A LD A, ($705F) JR NZ, LOC_858A LD A, ($705A) LOC_858A: LD HL, $71B6 CP (HL) RET Z LD (HL), A DEC A JP Z, RED_GATES DEC A JP Z, YELLOW_GATES DEC A JP Z, BLUE_GATES DEC A DEC A RET NZ LD A, E OR A JR NZ, LOC_85AE LD A, ($7192) OR A RET Z DEC A LD ($7192), A JR CHANGE_TO_DOG_PLAY_SOUND LOC_85AE: LD A, ($719E) OR A RET Z DEC A LD ($719E), A CHANGE_TO_DOG_PLAY_SOUND: LD A, 1 LD ($71B3), A LD A, 10H LD ($71D0), A XOR A LD ($71CF), A CALL SUBTRACT_BONE_FROM_DISPLAY LD A, 1EH LD ($71B4), A LD B, 12H RST 18H LD B, 13H RST 18H LD B, 14H RST 18H LD A, 2 LD ($7111), A LD IX, MOUSE CALL PUTOBJ RET DISPLAY_GATES: LD A, 1 LD ($706E), A ADD A, A LD ($706C), A ADD A, A LD ($706D), A CALL YELLOW_GATES CALL BLUE_GATES CALL RED_GATES RET RED_GATES: LD A, ($706C) OR A JR Z, LOC_8606 LD HL, RED_VERT XOR A JR LOC_860B LOC_8606: LD HL, RED_HORZ LD A, 2 LOC_860B: LD ($706C), A LD IX, RED_PIV JP LOC_8648 YELLOW_GATES: LD A, ($706D) OR A JR Z, LOC_8621 LD HL, YELLOW_HORZ XOR A JR LOC_8626 LOC_8621: LD HL, YELLOW_VERT LD A, 4 LOC_8626: LD ($706D), A LD IX, YELLOW_PIV JP LOC_8648 BLUE_GATES: LD A, ($706E) OR A JR Z, LOC_863C LD HL, BLUE_HORZ XOR A JR LOC_8641 LOC_863C: LD HL, BLUE_VERT LD A, 1 LOC_8641: LD ($706E), A LD IX, BLUE_PIV LOC_8648: LD A, (HL) CP 0FFH JR Z, LOC_8664 LD IY, $7111 PUSH HL CALL SUB_869E CALL GATE_TO_VRAM POP HL LD DE, 0BH LD BC, 4 ADD HL, DE ADD IX, BC JR LOC_8648 LOC_8664: LD IX, $706C LD A, (IX+0) OR (IX+2) JR Z, LOC_867B LD B, A LD HL, LOC_867B LD DE, 4 LOC_8677: ADD HL, DE DJNZ LOC_8677 JP (HL) LOC_867B: LD A, 7 JR PUT_GATE_TO_SCREEN PUT_GATE_TO_SCREEN: LD ($7068), A LD HL, $7068 LD DE, 195H LD IY, 1 LD A, 2 LD IX, PUT_VRAM RST 28H RET SUB_869E: LD A, 7 PUSH AF LD B, (HL) INC HL LD C, (HL) INC HL LD D, (HL) INC HL LD E, (HL) INC HL LOC_86A9: LD A, (IY+0BH) OR A JR Z, LOC_86BD LD A, (IY+1) SUB B JR NC, LOC_86B9 LD A, B SUB (IY+1) LOC_86B9: SUB 8 JR C, LOC_86CB LOC_86BD: POP AF PUSH DE LD DE, 0FH ADD IY, DE POP DE DEC A JR Z, LOCRET_86E7 PUSH AF JR LOC_86A9 LOC_86CB: LD A, (IY+3) SUB C JR NC, LOC_86D5 LD A, C SUB (IY+3) LOC_86D5: SUB 8 JR C, LOC_86DB JR LOC_86BD LOC_86DB: LD (IY+1), D LD (IY+3), E LD (IY+8), 0 JR LOC_86BD LOCRET_86E7: RET GATE_TO_VRAM: LD A, (HL) LD E, (IX+0) LD D, (IX+1) CP 0F0H CALL NC, SUB_8702 CALL C, SOMETHING_TO_VRAM LD A, (HL) CP 0FFH JR Z, LOC_8728 LD D, (IX+3) LD E, (IX+2) SUB_8702: AND 7 LD B, A INC HL EX DE, HL LOC_8707: PUSH BC PUSH HL PUSH DE LD A, (DE) LD DE, 1 LD BC, ($71A8) ADD HL, BC PUSH IX LD IX, FILL_VRAM RST 28H POP IX POP DE INC DE LD BC, 20H POP HL ADD HL, BC POP BC DJNZ LOC_8707 EX DE, HL RET LOC_8728: INC HL RET SOMETHING_TO_VRAM: PUSH HL LD IY, 3 LD A, 2 PUSH IX LD IX, PUT_VRAM RST 28H POP IX POP HL LD DE, 3 ADD HL, DE RET RED_PIV: DB 015,002,000,000,073,001,107,001,083,001,117,001 RED_VERT: DB 116,147,124,147,245,011,000,010,096,009,255,084,083,092,083,011,000,100,242,096,007,000,164,083,172,083,013,000,096,241,096,000,000,255 RED_HORZ: DB 116,131,124,131,245,001,096,009,000,024,255,076,075,076,067,129,097,097,242,000,013,000,156,075,156,067,003,097,098,241,000,000,000,255 YELLOW_PIV: DB 145,000,023,001,145,002,083,002,203,001,141,001,199,001,137,001,011,001,205,000 YELLOW_HORZ: DB 140,027,140,035,006,105,107,243,011,000,016,140,155,140,163,026,105,105,242,011,000,000,092,107,092,115,029,105 DB 105,242,011,000,000,060,107,060,115,006,105,107,242,014,000,000,092,059,092,067,003,105,107,242,014,000,000,255 YELLOW_VERT: DB 180,067,172,067,017,000,012,243,104,104,132,148,147,156,147,015,000,109,242,001,104,000,100,099,108,099,012,000 DB 109,242,001,104,000,068,099,076,099,017,000,104,242,031,104,000,100,051,108,051,013,000,104,242,031,104,000,255 BLUE_PIV: DB 139,000,007,001,017,001,209,000,213,001,181,001,209,001,145,001,139,002,075,002 BLUE_VERT: DB 052,067,060,067,012,000,018,243,112,112,131,132,051,124,051,112,000,014,242,030,112,000,164,099,156,099,112,000 DB 018,241,112,000,000,132,099,124,099,114,000,012,242,001,112,000,092,155,092,163,113,113,027,242,011,000,000,255 BLUE_HORZ: DB 092,027,092,035,116,113,005,243,011,000,015,140,059,140,067,116,113,004,242,013,000,000,172,107,172,115,116,113 DB 005,241,000,000,000,140,107,140,115,113,113,028,242,011,000,000,084,147,076,147,114,000,016,242,001,112,000,255 SUB_8898: LD A, ($71B3) OR A JR Z, LOC_88CC LD A, ($71B4) DEC A LD ($71B4), A JR NZ, LOC_88AD LD ($71B3), A XOR A JR LOC_88D4 LOC_88AD: CP 9 LD A, ($7111) JR NC, LOC_88C0 BIT 1, A JR NZ, LOC_88BC LD A, 3 JR LOC_88D4 LOC_88BC: LD A, 4 JR LOC_88D4 LOC_88C0: BIT 0, A JR Z, LOC_88C8 RES 0, A JR LOC_88D4 LOC_88C8: SET 0, A JR LOC_88D4 LOC_88CC: LD A, ($7111) BIT 0, A JR Z, LOC_88C8 DEC A LOC_88D4: LD ($7111), A LD B, 6 LD IY, $7120 LD DE, 0FH LOC_88E0: LD A, (IY+7) OR A JR Z, LOC_88FB PUSH DE PUSH BC CALL SUB_9D1A POP BC POP DE LD C, A LD A, (IY+0) RES 0, A CP C JR Z, LOC_88FB LD (IY+0), C JR LOC_890B LOC_88FB: BIT 0, (IY+0) JR Z, LOC_8907 RES 0, (IY+0) JR LOC_890B LOC_8907: SET 0, (IY+0) LOC_890B: ADD IY, DE DJNZ LOC_88E0 RET SUB_8910: CALL SUB_8969 JR LOC_8918 SUB_8915: CALL SUB_8949 LOC_8918: LD A, (IY+1) SUB (IX+1) JR NC, LOC_8926 LD A, (IX+1) SUB (IY+1) LOC_8926: CP 0CH JR NC, LOC_8946 LD B, A LD A, (IY+3) SUB (IX+3) JR NC, LOC_8939 LD A, (IX+3) SUB (IY+3) LOC_8939: CP 0CH JR NC, LOC_8946 LD HL, $71CC ADD A, B CP (HL) LD A, 1 JR C, LOCRET_8948 LOC_8946: LD A, 0 LOCRET_8948: RET SUB_8949: PUSH IX LD IX, $71D1 LD A, 78H CP (IX+0) JR Z, LOC_896F CP (IX+1) JR Z, LOC_896F LD A, 79H CP (IX+0) JR Z, LOC_896F CP (IX+1) JR Z, LOC_896F POP IX SUB_8969: LD A, 10H LD ($71CC), A RET LOC_896F: POP IX LD A, 7 LD ($71CC), A RET SOUND_TABLE: DW BACKGROUND_TUNE_01A DW $706F DW TREASURE_TUNE_01A DW $70D3 DW LEVEL_COMPLETE_A DW $706F DW LEVEL_COMPLETE_B DW $7079 DW BACKGROUND_TUNE_02A DW $706F DW BACKGROUND_TUNE_02B DW $7079 DW BACKGROUND_TUNE_03A DW $706F DW BACKGROUND_TUNE_03B DW $7079 DW BIRD_EATS_MOUSE_01A DW $706F DW BIRD_EATS_MOUSE_02A DW $706F DW BIRD_EATS_MOUSE_01B DW $7079 DW BIRD_EATS_MOUSE_02B DW $7079 DW TREASURE_TUNE_02A DW $7083 DW TREASURE_TUNE_02B DW $708D DW DOG_EAT_CAT_1A DW $70B5 DW DOG_EAT_CAT_1B DW $70BF DW DOG_EAT_CAT_1C DW $70C9 DW TURN_INTO_DOG_A DW $7097 DW TURN_INTO_DOG_B DW $70A1 DW TURN_INTO_DOG_C DW $70AB DW EAT_CHEESE DW $7083 DW BACKGROUND_TUNE_01B DW $7079 DW BIRD_ENTRY_A DW $70D3 DW BIRD_ENTRY_B DW $70DD DW BIRD_ENTRY_C DW $70E7 DW PICK_UP_BONE_A DW $7097 DW PICK_UP_BONE_B DW $70A1 DW PICK_UP_BONE_C DW $70AB DW TREASURE_TUNE_03A DW $70D3 DW TREASURE_TUNE_03B DW $70DD DW TREASURE_TUNE_01B DW $70DD DW LEVEL_COMPLETE_C DW $7083 DW TREASURE_TUNE_02C DW $70C9 DW CAT_EATS_MOUSE_A DW $706F DW CAT_EATS_MOUSE_B DW $7079 DW CAT_EATS_MOUSE_C DW $7083 DW DOG_EAT_CAT_2A DW $70B5 DW DOG_EAT_CAT_2B DW $70BF DW DOG_EAT_CAT_2C DW $70C9 BACKGROUND_TUNE_01A: DB 064,252,049,004,036,064,170,096,004,036,064,172,049,004,036,064,170,096,004,036,064,197,049,004,036,064,170,096,004,036,064,027,050 DB 004,036,064,170,096,004,036,064,059,050,004,036,064,190,096,004,036,064,224,049,004,036,064,190,096,004,036,064,252,049,004,036,064 DB 190,096,004,036,064,093,050,004,036,064,190,096,004,036,064,129,050,004,036,064,214,096,004,036,064,027,050,004,036,064,214,096,004 DB 036,064,059,050,004,036,064,214,096,004,036,064,167,050,004,036,064,214,096,004,036,064,202,050,004,036,064,240,096,004,036,064,093 DB 050,004,036,064,240,096,004,036,064,129,050,004,036,064,240,096,004,036,064,250,050,004,036,064,240,096,004,036,024 LEVEL_COMPLETE_A: DB 064,127,048,016,034,064,127,048,007,034,064,127,048,007,034,064,127,048,018,064,202,048,018,064 DB 190,048,018,064,170,048,018,064,127,048,018,064,101,048,018,064,095,048,018,064,085,048,054,016 LEVEL_COMPLETE_C: DB 128,254,048,016,034,128,202,064,018,128,170,048,016,034,128,170,048,018,128,151,048,018 DB 128,127,048,018,128,101,048,018,128,085,048,018,128,076,048,018,128,064,048,054,180,016 LEVEL_COMPLETE_B: DB 192,083,049,018,192,254,048,009,192,226,048,009,192,254,048,009,192,046,049,009,192,083,049,009,192 DB 046,049,009,192,083,049,009,192,125,049,009,192,148,049,009,192,197,049,009,192,148,049,009,192,125 DB 049,009,192,148,049,009,192,197,049,009,192,093,050,009,192,167,050,009,192,248,051,054,016 BACKGROUND_TUNE_02A: DB 064,254,048,005,064,240,048,005,064,254,048,005,064,240,048,005,064,254,048,010,064,083,049,005,064,046,049,005,066,029,049,010,023 DB 024,064,029,049,005,064,254,048,005,064,226,048,010,064,170,048,010,064,254,048,005,064,240,048,005,064,254,048,005,064,240,048,005 DB 064,254,048,010,064,083,049,005,064,064,049,005,064,083,049,005,064,254,048,005,064,083,049,005,064,064,049,005,064,083,049,005,064 DB 064,049,005,064,083,049,005,064,064,049,005,024 BACKGROUND_TUNE_02B: DB 128,083,065,005,128,064,065,005,128,083,065,005,128,064,065,005,128,083,065,010,128,252,065,005,128,197,065,005,130,172,065,010,023 DB 024,128,172,065,005,128,125,065,005,128,046,065,010,128,226,064,010,128,083,065,005,128,064,065,005,128,083,065,005,128,064,065,005 DB 128,083,065,010,128,252,065,005,128,224,065,005,128,252,065,005,128,125,065,005,128,252,065,005,128,224,065,005,128,252,065,005,128 DB 224,065,005,128,252,065,005,128,224,065,005,024 BACKGROUND_TUNE_03A: DB 042,064,254,048,005,064,226,048,005,064,214,048,005,064,226,048,005,064,254,048,010,042,064,190,048,005,064,170,048,005,064,160 DB 048,005,064,170,048,005,064,190,048,010,042,064,170,048,005,064,190,048,005,064,170,048,005,064,160,048,005,064,170,048,005,064 DB 190,048,005,064,214,048,005,064,226,048,005,064,214,048,005,064,226,048,005,064,214,048,005,064,190,048,005,064,214,048,005,064 DB 226,048,005,064,254,048,005,064,013,049,005,064,254,048,005,064,226,048,005,064,214,048,005,064,226,048,005,064,254,048,010,042 DB 064,190,048,005,064,170,048,005,064,160,048,005,064,170,048,005,064,190,048,010,042,064,170,048,005,064,190,048,005,064,170,048 DB 005,064,160,048,005,064,170,048,005,064,190,048,005,064,214,048,005,064,226,048,005,064,254,048,010,052,024 BACKGROUND_TUNE_03B: DB 128,172,081,016,036,128,172,081,016,036,128,252,081,016,036,128,252,081,016,036,128,027,082,016,036,128,027,082,016,036,128,252,081 DB 016,036,128,248,083,016,036,128,172,081,016,036,128,172,081,016,036,128,252,081,016,036,128,252,081,016,036,128,027,082,016,036,128 DB 027,082,016,036,128,252,081,010,128,167,082,005,128,202,082,005,128,167,082,005,128,202,082,005,128,167,082,005,128,202,082,005,024 BIRD_EATS_MOUSE_01A: DB 064,190,032,012,064,202,032,012,064,214,032,012,064,226,032,012,064,240,032,006,064,254 DB 032,006,064,013,033,006,064,029,033,006 BIRD_EATS_MOUSE_02A: DB 064,046,033,003,064,064,033,003,064,083,033,003,064,104,033,003,064,125,033,003,064,148,033 DB 003,064,172,033,003,064,197,033,003,064,224,033,003,064,252,033,003,064,027,034,024,016 BIRD_EATS_MOUSE_01B: DB 128,013,033,012,128,029,033,012,128,046,033,012,128,064,033,012,128,083,033,006,128,104 DB 033,006,128,125,033,006,128,148,033,006 BIRD_EATS_MOUSE_02B: DB 128,172,033,002,033,128,197,033,002,033,128,224,033,002,033,128,252,033,002,033,128,027,034,002,033,128,059,034 DB 002,033,128,093,034,002,033,128,129,034,002,033,128,167,034,002,033,128,202,034,002,033,128,250,034,016,016 TREASURE_TUNE_02A: DB 002,003,030,000,000,016 TREASURE_TUNE_02B: DB 195,001,000,016,031,016,022,063,016 DOG_EAT_CAT_1A: DB 195,124,224,008,017,252,232,017,195,092,000,019,020,001,031,021,195,255,147,004,017,184,212,017,195 DB 223,002,010,017,029,031,019,195,255,099,004,017,184,228,017,195,223,002,017,017,016,031,019,016 DOG_EAT_CAT_1B: DB 067,156,224,008,017,252,232,017,067,124,000,019,020,001,031,021,002,150,004,212,017,002 DB 006,010,024,019,002,102,004,228,017,002,006,017,031,019,016 DOG_EAT_CAT_1C: DB 131,140,224,008,017,252,232,017,131,108,000,019,020,001,031,021,131,055,146,004,017,196,212,017,131 DB 059,001,010,017,025,031,019,131,055,098,004,017,196,228,017,131,059,001,017,017,025,040,019,016 TURN_INTO_DOG_A: DB 002,150,004,212,017,002,006,010,024,019,002,102,004,228,017,002,006,017,031,019,016 TURN_INTO_DOG_B: DB 195,255,147,004,017,184,212,017,195,223,002,010,017,029,031,019,195 DB 255,099,004,017,184,228,017,195,223,002,017,017,016,031,019,016 TURN_INTO_DOG_C: DB 131,055,146,004,017,196,212,017,131,059,001,010,017,025,031,019,131 DB 055,098,004,017,196,228,017,131,059,001,017,017,025,040,019,016 EAT_CHEESE: DB 002,150,001,000,000,002,134,001,000,000,002,117,001,000,000,002,101 DB 001,000,000,002,084,001,000,000,002,068,001,000,000,016 BACKGROUND_TUNE_01B: DB 168,128,214,096,004,044,128,214,096,004,044,128,190,096,004,044,128,190,096,004,044,128,240,096,004,044,128,240 DB 096,004,044,128,214,096,004,044,128,214,096,004,044,128,013,097,004,044,128,013,097,004,044,128,240,096,004,044 DB 128,240,096,004,044,128,046,097,004,044,128,046,097,004,044,128,013,097,004,044,128,013,097,004,036,024 BIRD_ENTRY_A: DB 064,252,065,007,064,083,065,007,064,104,065,007,064,083,065,007,064,064,065,007,064,083,065,007,064,104,065 DB 007,064,083,065,007,064,252,065,007,064,083,065,007,064,104,065,007,064,083,065,007,064,064,065,007,064,083 DB 065,007,064,104,065,007,064,083,065,007,066,252,065,028,027,036,016 BIRD_ENTRY_B: DB 128,059,066,014,128,027,066,014,128,252,065,014,128,027,066,014,128,059,066,014 DB 128,027,066,014,128,252,065,014,128,027,066,014,130,059,066,028,027,036,016 BIRD_ENTRY_C: DB 192,039,067,014,192,125,065,014,192,202,066,014,192,167,066,014,192,039,067,014 DB 192,125,065,014,192,202,066,014,192,167,066,014,194,039,067,028,027,036,016 PICK_UP_BONE_A: DB 002,150,010,250,017,002,006,020,029,024,016 PICK_UP_BONE_B: DB 131,133,051,013,017,240,244,065,131,119,002,018,017,021,026,025,016 PICK_UP_BONE_C: DB 194,255,083,013,246,017,194,255,003,018,031,020,016 TREASURE_TUNE_01A: DB 064,214,048,008,064,029,049,008,064,083,049,008,064,214,048,008,064,254,048,008,064 DB 064,049,008,064,029,049,008,064,190,048,008,064,226,048,008,064,214,048,024,116,016 TREASURE_TUNE_01B: DB 128,087,051,008,128,167,050,008,128,059,050,008,128,129,050,008,128,252,049,008,128 DB 172,049,008,128,059,050,008,128,197,049,008,128,125,049,008,128,172,049,024,180,016 TREASURE_TUNE_03A: DB 128,135,048,010,162,128,135,048,005,161,128,135,048,005,161,128,135,048,010,162,128 DB 127,048,010,162,128,127,048,010,162,128,127,048,010,162,128,113,048,005,161,128,113 DB 048,005,161,128,113,048,010,162,128,113,048,010,162,128,135,048,034,180,016 TREASURE_TUNE_03B: DB 192,170,048,010,226,192,170,048,005,225,192,170,048,005,225,192,170,048,010,226,192 DB 170,048,010,226,192,170,048,010,226,192,170,048,010,226,192,151,048,005,225,192,151 DB 048,005,225,192,151,048,010,226,192,151,048,010,226,192,170,048,034,244,016 TREASURE_TUNE_02C: DB 064,226,048,010,098,064,226,048,005,097,064,226,048,005,097,064,226,048,010,098,064 DB 226,048,010,098,064,226,048,010,098,064,226,048,010,098,064,202,048,005,097,064,202 DB 048,005,097,064,202,048,010,098,064,202,048,010,098,064,226,048,034,116,016 CAT_EATS_MOUSE_A: DB 067,156,224,008,017,252,232,017,067,124,000,019,020,001,031,021,064,046,033,003,064 DB 064,033,003,064,083,033,003,064,104,033,003,064,125,033,003,064,148,033,003,064,172 DB 033,003,064,197,033,003,064,224,033,003,064,252,033,003,064,027,034,024,016 CAT_EATS_MOUSE_B: DB 131,140,224,008,017,252,232,017,131,108,000,019,020,001,031,021,128,172,033,002,033,128,197,033 DB 002,033,128,224,033,002,033,128,252,033,002,033,128,027,034,002,033,128,059,034,002,033,128,093 DB 034,002,033,128,129,034,002,033,128,167,034,002,033,128,202,034,002,033,128,250,034,016,016 CAT_EATS_MOUSE_C: DB 195,124,224,008,017,252,232,017,195,092,000,019,020,001,031,021,016 DOG_EAT_CAT_2A: DB 195,124,224,008,017,252,232,017,195,092,000,019,020,001,031,021,195,255,147,004,017,184,212,017,195 DB 223,002,010,017,029,031,019,195,255,099,004,017,184,228,017,195,223,002,017,017,016,031,019,016 DOG_EAT_CAT_2B: DB 067,156,224,008,017,252,232,017,067,124,000,019,020,001,031,021,002,150,004 DB 212,017,002,006,010,024,019,002,102,004,228,017,002,006,017,031,019,016 DOG_EAT_CAT_2C: DB 131,140,224,008,017,252,232,017,131,108,000,019,020,001,031,021,131,055,146,004,017,196,212,017,131 DB 059,001,010,017,025,031,019,131,055,098,004,017,196,228,017,131,059,001,017,017,025,040,019,016 PLAY_TREASURE_TUNE_01: LD A, R BIT 0, A JR Z, PLAY_BONUS_TUNE_02 LD B, 2 RST 18H LD B, 1FH RST 18H RET PLAY_BONUS_TUNE_02: LD B, 1DH RST 18H LD B, 1EH RST 18H LD B, 21H RST 18H RET PLAY_BACKGROUND_TUNE_01: RST 30H LD A, (IX+1) CP 5 JR NC, PLAY_BACKGROUND_TUNE_02 CP 3 JR NC, PLAY_BACKGROUND_TUNE_03 LD B, 1 RST 18H LD B, 16H RST 18H RET PLAY_BACKGROUND_TUNE_03: LD B, 7 RST 18H LD B, 8 RST 18H RET PLAY_BACKGROUND_TUNE_02: LD B, 5 RST 18H LD B, 6 RST 18H RET PLAY_EAT_A_CAT_SOUND: LD A, ($70E7) CP 0FFH JR NZ, DONE_EATING_CAT_SOUND LD A, ($70B5) CP 0FFH JR NZ, PLAY_DOG_EATS_CAT_SOUND LD B, 0FH RST 18H LD B, 10H RST 18H LD B, 11H RST 18H JR DONE_EATING_CAT_SOUND PLAY_DOG_EATS_CAT_SOUND: LD B, 25H RST 18H LD B, 26H RST 18H LD B, 27H RST 18H DONE_EATING_CAT_SOUND: RET PLAY_CAT_EATS_MOUSE_SOUND: LD B, 0DH LD HL, SOUND_TABLE CALL SOUND_INIT LD B, 22H RST 18H LD B, 23H RST 18H LD B, 24H RST 18H RET PLAY_LEVEL_COMPLETE_SOUND: LD B, 3 RST 18H LD B, 20H RST 18H LD B, 4 RST 18H RET SUB_92BC: LD HL, 1400H CALL CLEAR_SOME_VRAM CALL SPRITES_TO_VRAM CALL INIT_PATTERN_NAME_TABLE CALL SUBTRACT_BONE_FROM_DISPLAY CALL SUB_9378 CALL DISPLAY_LIVES_LEFT LD A, ($71AD) DEC A CALL NZ, SUB_9316 CALL WRITE_TO_VRAM_REGISTER_1 CALL DISPLAY_GAME_OVER CALL DISPLAY_PLAYER_GET_READY CALL INITIALIZE_TIMER RET CLEAR_SOME_VRAM: XOR A LD DE, 300H CALL FILL_VRAM RET MOUSE_HUD_UPPER: DB 0A0H,0A1H MOUSE_HUD_LOWER: DB 0A2H,0A3H DISPLAY_LIVES_LEFT: LD A, ($718F) OR A RET Z CALL SUB_933F LD B, A LD A, ($71AC) CP 1 JR NZ, DISPLAY_MOUSE_HEAD DEC B RET Z DISPLAY_MOUSE_HEAD: PUSH BC LD HL, MOUSE_HUD_UPPER LD DE, 22H CALL MOUSE_HEAD_TO_VRAM POP BC LD HL, MOUSE_HUD_LOWER LD DE, 42H JR MOUSE_HEAD_TO_VRAM SUB_9316: LD A, ($719B) OR A RET Z CALL SUB_933F LD B, A LD A, ($71AC) CP 2 JR NZ, LOC_9328 DEC B RET Z LOC_9328: LD A, 3DH CALL SUB_935F LD HL, MOUSE_HUD_UPPER PUSH BC CALL MOUSE_HEAD_TO_VRAM POP BC LD A, 5DH CALL SUB_935F LD HL, MOUSE_HUD_LOWER JR MOUSE_HEAD_TO_VRAM SUB_933F: CP 6 RET C LD A, 5 RET MOUSE_HEAD_TO_VRAM: LD IY, 2 PUT_TO_VRAM: LD A, 2 PUSH BC PUSH DE PUSH HL PUSH IY LD IX, PUT_VRAM RST 28H POP IY POP HL POP DE POP BC INC DE INC DE DJNZ PUT_TO_VRAM RET SUB_935F: SUB B SUB B LD DE, 0 LD E, A RET SUB_9366: LD A, ($73C4) RES 6, A JR LOC_9372 WRITE_TO_VRAM_REGISTER_1: LD A, ($73C4) SET 6, A LOC_9372: LD C, A LD B, 1 JP WRITE_VRAM_REGISTER SUB_9378: LD HL, $7193 LD DE, 2 CALL SUB_938A CALL SUB_9392 LD HL, $719F LD DE, 17H SUB_938A: LD IY, 6 LD B, 1 JR PUT_TO_VRAM SUB_9392: LD A, ($71AD) DEC A RET NZ POP IY RET SUBTRACT_BONE_FROM_DISPLAY: CALL SUB_93D8 LD DE, 0DH XOR A LD IX, FILL_VRAM RST 28H LD A, ($7192) OR A JR Z, ADD_BONE_TO_DISPLAY CALL SUB_933F CALL SUB_93D8 LD E, A LD A, 66H LD IX, FILL_VRAM RST 28H ADD_BONE_TO_DISPLAY: CALL SUB_9392 LD A, ($719E) OR A RET Z CALL SUB_933F LD B, A LD DE, 16H CALL SUB_93DB LD A, L SUB B LD L, A LD E, B LD A, 66H LD IX, FILL_VRAM RST 28H RET SUB_93D8: LD DE, 9 SUB_93DB: LD HL, ($71A8) ADD HL, DE RET DISPLAY_PLAYER_GET_READY: LD B, 1 LD HL, GET_READY_P1 LD DE, 1A6H LD IY, 12H CALL PUT_TO_VRAM LD A, ($71AC) DEC A RET Z LD DE, 1B7H LD HL, 1400H ADD HL, DE LD DE, 1 LD A, 32H LD IX, FILL_VRAM RST 28H RET GET_READY_P1: DB 071,069,084,032,082,069,065,068,089,032,080,076,065,089,069,082,032,049 INITIALIZE_TIMER: LD HL, $7252 LD DE, 0 CALL INIT_TIMER LD HL, 1 LD A, 1 CALL REQUEST_SIGNAL LD ($727F), A LD HL, 1 LD A, 1 CALL REQUEST_SIGNAL LD ($7287), A RET DISPLAY_GAME_OVER: RST 30H LD HL, GAME_OVER_P2_TXT DEC A JR Z, LOC_9442 LD HL, GAME_OVER_P1_TXT LOC_9442: LD A, (IY+0) OR A RET NZ LD A, ($70F2) CP 1 RET Z LD DE, 1A6H LD IY, 12H LD A, 2 LD IX, PUT_VRAM RST 28H CALL SUB_9488 LD A, 1 LD ($70F2), A RET GAME_OVER_P1_TXT: DB 071,065,077,069,032,079,086,069,082,032,080,076,065,089,069,082,032,049 GAME_OVER_P2_TXT: DB 071,065,077,069,032,079,086,069,082,032,080,076,065,089,069,082,032,050 SUB_9488: LD HL, 6FFH LOC_948B: LD B, 0 LOC_948D: DJNZ $ DEC HL LD A, H OR L RET Z JR LOC_948B BONUS_AND_OTHER_EXTRAS: CALL DISPLAY_TREASURE_02 RST 30H LD A, (IX+2) OR A JP Z, LOC_94E4 CALL FLASH_BACKGROUND CALL SPRITES_TO_VRAM CALL SUB_8378 RST 30H XOR A LD ($71B3), A LD ($7111), A LD A, ($71AD) DEC A JR NZ, LOC_94BE DEC (IX+0) JR NZ, LOC_94E1 JR PRINT_GAME_OVER LOC_94BE: DEC (IX+0) XOR A CP (IY+0) JR NZ, LOC_94E1 CP (IX+0) JR NZ, LOC_94E1 PRINT_GAME_OVER: LD BC, 20H LD HL, GAME_OVER_TXT LD DE, 20AH CALL DISPLAY_GAME_OVER_WITH_CLEAR_BORDER CALL DISPLAY_GAME_OVER_WITH_CLEAR_BORDER CALL DISPLAY_GAME_OVER_WITH_CLEAR_BORDER LD B, 6 RET LOC_94E1: LD B, 3 RET LOC_94E4: CALL SUB_8378 CALL SPRITES_TO_VRAM LD B, 5 RET FLASH_BACKGROUND: LD B, 14H LD HL, 6 LD A, 1 CALL REQUEST_SIGNAL LD ($70F3), A BACKGROUND_TO_RED: PUSH BC LD B, 7 LD C, 9 CALL WRITE_VRAM_REGISTER BACKGROUND_TO_BLACK: LD A, ($70F3) CALL TEST_SIGNAL JR Z, BACKGROUND_TO_BLACK LD B, 7 LD C, 1 CALL WRITE_VRAM_REGISTER TIMER_LOOP: LD A, ($70F3) CALL TEST_SIGNAL JR Z, TIMER_LOOP POP BC DJNZ BACKGROUND_TO_RED RET DISPLAY_GAME_OVER_WITH_CLEAR_BORDER: PUSH BC PUSH DE LD A, 2 LD IY, 0BH CALL PUT_VRAM POP DE POP BC EX DE, HL ADD HL, BC EX DE, HL RET GAME_OVER_TXT: DB 032,032,032,032,032,032,032,032,032,032,032 DB 032,071,065,077,069,032,079,086,069,082,032 DB 032,032,032,032,032,032,032,032,032,032,032 MOUSE_TO_SCREEN: RST 30H LD HL, BYTE_95EF DEC A JR Z, LOC_9559 LD HL, BYTE_95F4 LOC_9559: LD B, 0 LD A, (IX+0) CALL SUB_933F DEC A LD C, A ADD HL, BC LD DE, $7112 LDI LD A, 7 LD ($7114), A LD IX, MOUSE CALL PUTOBJ XOR A LD ($71AF), A LD HL, BYTE_95F9 LD ($71AA), HL CALL INIT_WRITER_FOR_DEFERED_WRITES CALL PLAY_BACKGROUND_TUNE_01 LOC_9585: LD A, ($71AF) DEC A JR Z, LOC_958D LD A, 1 LOC_958D: LD ($71AF), A LOC_9590: LD IX, $7111 LD (IX+6), 1 LD (IX+0BH), 3 LD HL, ($71AA) LD A, (HL) CP 0FFH JR Z, LOC_95E5 LD A, ($71AF) DEC A JR Z, LOC_95C2 LD A, (HL) CP (IX+1) JR Z, LOC_95DF JR C, LOC_95BA INC (IX+1) INC (IX+1) JR LOC_95CE LOC_95BA: DEC (IX+1) DEC (IX+1) JR LOC_95CE LOC_95C2: LD A, (HL) CP (IX+3) JR Z, LOC_95DF INC (IX+3) INC (IX+3) LOC_95CE: LD IX, MOUSE CALL PUTOBJ LOC_95D5: LD A, ($7287) CALL TEST_SIGNAL JR Z, LOC_95D5 JR LOC_9590 LOC_95DF: INC HL LD ($71AA), HL JR LOC_9585 LOC_95E5: CALL SUB_9366 CALL SUB_9D60 CALL SUB_96FB RET BYTE_95EF: DB 10H, 20H, 30H, 40H, 50H BYTE_95F4: DB 0D8H,0C8H,0B8H,0A8H, 98H BYTE_95F9: DB 47H, 10H, 83H, 74H,0FFH SUB_95FE: LD A, ($71D3) LD HL, 1400H CP 3 RET Z CP 6 LD HL, 3800H RET Z LD A, ($71AC) DEC A LD HL, 1800H RET Z LD HL, 1C00H RET INIT_PATTERN_NAME_TABLE: CALL SUB_95FE LD ($71A8), HL LD A, 2 LD IX, INIT_TABLE RST 28H RET SUB_962B: LD A, ($71D4) CP 5 RET Z XOR A LD ($71B5), A CALL SUB_9919 LD A, ($71D4) CP 2 RET Z LD A, ($71AD) DEC A RET Z RST 30H LD A, (IY+0) OR A RET Z LD A, ($71AC) DEC A JR NZ, LOC_9651 LD A, 2 LOC_9651: LD ($71AC), A RET DISPLAY_BONUS: LD HL, BONUS_TXT LD DE, $70F4 LD BC, 5 LDIR PUSH DE POP HL INC DE LD BC, 10H LD (HL), 0 LDIR RET REQUEST_AND_FREE_TIMER_SIGNAL: PUSH HL PUSH BC LD A, 1 EX DE, HL CALL REQUEST_SIGNAL POP BC LD ($710A), A FREE_TIMER_SIGNAL: PUSH BC LD HL, $70F4 CALL PUT_SOME_VRAM LD B, 4 CALL TESTING_TIMER_SIGNAL_01 CALL PUT_SOME_VRAM LD B, 1 CALL TESTING_TIMER_SIGNAL_01 POP BC DJNZ FREE_TIMER_SIGNAL LD A, ($710A) CALL FREE_SIGNAL POP HL RET PUT_SOME_VRAM: LD DE, 2EAH LD IY, 0BH LD A, 2 LD IX, PUT_VRAM RST 28H RET TESTING_TIMER_SIGNAL_01: PUSH HL LOC_96A6: PUSH BC LOC_96A7: LD A, ($710A) CALL TEST_SIGNAL JR Z, LOC_96A7 POP BC DJNZ LOC_96A6 POP HL RET BONUS_TXT: DB 066,079,078,085,083 SUB_96B9: LD A, 7 LD ($710B), A LD ($710D), A XOR A LD ($710C), A LD ($710E), A RET REQUEST_A_TIMER_SIGNAL_01: RST 30H DEC A LD IY, $710B LD DE, $7190 JR Z, LOC_96DB LD IY, $710D LD DE, $719C LOC_96DB: LD A, (DE) CP 6 JR NC, LOC_96EC LD A, (DE) CP (IY+1) JR Z, LOC_96EC LD (IY+1), A DEC (IY+0) LOC_96EC: LD A, (IY+0) LD L, A LD H, 0 LD A, 1 CALL REQUEST_SIGNAL LD ($7281), A RET SUB_96FB: LD B, 0FH LD HL, $7120 CALL CLEAR_OUT_SOME_RAM LD B, 4 LD HL, $71B9 CALL CLEAR_OUT_SOME_RAM LD IX, $7120 PUSH IX LD DE, 0FH LD (IX+1), 6CH LD (IX+3), 23H LD (IX+0BH), 3 ADD IX, DE LD (IX+1), 0ACH LD (IX+3), 63H LD (IX+0BH), 3 LD IX, CAT_01 CALL PUTOBJ LD IX, CAT_02 CALL PUTOBJ LD A, 1 LD ($71A7), A POP IX LD A, 2 LD B, 6 LD DE, 0FH LOC_974A: LD (IX+6), A INC A ADD IX, DE DJNZ LOC_974A RET SUB_9753: LD C, A LD A, (IY+6) CP 1 RET Z CP 8 RET NC LD A, C PUSH AF LD IX, JMP_TABLE_01 LD A, (IY+0BH) OR A JR Z, LOC_9770 LD B, A LOC_976A: INC IX INC IX DJNZ LOC_976A LOC_9770: LD H, (IX+1) LD L, (IX+0) POP AF JP (HL) JMP_TABLE_01: DW LOC_9780 DW LOC_988C DW LOC_9896 DW EAT_A_CAT LOC_9780: LD HL, $71B9 LD B, 4 LOC_9785: LD A, (HL) OR A JR Z, LOC_9791 INC HL DJNZ LOC_9785 LD (IY+3), 0C3H RET LOC_9791: DEC B LD (HL), 1 LD C, B LD B, 0 LD (IY+9), C PUSH BC SLA C LD HL, UNK_97DD ADD HL, BC LD B, (HL) LD (IY+1), B INC HL LD B, (HL) LD (IY+3), B POP BC CALL SUB_98E7 XOR A CALL REQUEST_SIGNAL CALL SUB_97D3 LD (HL), A LD (IY+0BH), 1 LD A, ($71A7) OR A RET Z LD A, ($71AE) CP 1 LD A, 4 JR Z, LOC_97CA LD A, 6 LOC_97CA: CP (IY+6) RET NC XOR A LD ($71A7), A RET SUB_97D3: LD C, (IY+9) LD B, 0 LD HL, $7288 ADD HL, BC RET UNK_97DD: DB 6CH DB 13H DB 0BAH DB 53H DB 6CH DB 0A1H DB 2AH DB 53H UNK_97E5: DB 6CH DB 21H DB 0ACH DB 53H DB 6CH DB 93H DB 3CH DB 53H EAT_A_CAT: PUSH AF LD IX, $7111 CALL SUB_8915 OR A JR Z, LOC_9819 CALL LOC_808D LD A, ($71B3) OR A JR Z, LOC_980D CALL PLAY_EAT_A_CAT_SOUND CALL SCORE_PRINTING_01 LD (IY+0BH), 0 JR LOC_9819 LOC_980D: LD A, 1 LD ($71B5), A PUSH IY CALL PLAY_CAT_EATS_MOUSE_SOUND POP IY LOC_9819: POP AF OR A JR Z, LOC_985B LD B, A LD A, (IY+7) OR A JR Z, LOC_9839 SRL A JR NZ, LOC_982A LD A, 8 LOC_982A: SRL A JR NZ, LOC_9830 LD A, 8 LOC_9830: LD C, A CPL AND 0FH AND B JR Z, LOC_985A JR LOC_983A LOC_9839: LD A, B LOC_983A: CALL SUB_985F OR A JR Z, LOC_985A LD B, A LD A, R AND 3 LD E, A LD D, 0 LD HL, BYTE_9888 ADD HL, DE LD A, (HL) LD C, A LOC_984E: AND B JR NZ, LOC_985B SRL C JR NZ, LOC_9857 LD C, 8 LOC_9857: LD A, C JR LOC_984E LOC_985A: LD A, C LOC_985B: LD (IY+8), A RET SUB_985F: LD B, A LD A, (IY+6) CP 4 JR NC, LOC_9883 LD D, 0BH LD A, (IY+1) CP 5CH JR Z, LOC_9878 LD D, 0EH CP 8CH JR Z, LOC_9878 JR LOC_9883 LOC_9878: LD A, (IY+3) CP 33H JR Z, LOC_9885 CP 63H JR Z, LOC_9885 LOC_9883: LD D, 0FH LOC_9885: LD A, B AND D RET BYTE_9888: DB 001,002,004,008 LOC_988C: LD C, A LD B, (IY+7) AND B JR NZ, LOC_9897 LD A, C JR LOC_9897 LOC_9896: XOR A LOC_9897: LD (IY+8), A CALL SUB_97D3 LD A, (HL) CALL TEST_SIGNAL JR Z, LOC_98E3 LD A, (IY+0BH) DEC A JR Z, LOC_98D2 LD C, (IY+9) LD B, 0 PUSH BC LD HL, UNK_97E5 SLA C ADD HL, BC LD B, (HL) INC HL LD C, (HL) LD (IY+1), B LD (IY+3), C LD HL, $71B9 POP BC LD A, 3 SUB C LD C, A ADD HL, BC LD (HL), 0 LD (IY+9), 0 LD (IY+0BH), 3 RET LOC_98D2: XOR A LD HL, 78H CALL REQUEST_SIGNAL CALL SUB_97D3 LD (HL), A LD (IY+0BH), 2 XOR A RET LOC_98E3: LD A, (IY+8) RET SUB_98E7: LD A, ($71AE) CP 4 JR Z, LOC_98F4 LD HL, 2D0H BIT 0, C RET Z LOC_98F4: LD HL, 168H RET MOUSE_PATTERNS_TO_VRAM: LD HL, MOUSE_PATTERNS LD DE, 800H LD BC, 480H PUSH BC PUSH DE PUSH HL LD B, 0 CALL WRITE_VRAM POP DE POP HL POP BC PUSH BC LD B, 0 ADD HL, BC EX DE, HL ADD HL, BC POP BC LD C, 0 CALL WRITE_VRAM RET SUB_9919: PUSH AF XOR A LD ($7189), A LD ($71CE), A INC A LD ($71CD), A RST 30H LD A, 5 ADD A, (IX+1) CP 10H JR NC, LOC_9932 LD ($718E), A LOC_9932: POP AF RET DISPLAY_TREASURE_02: LD DE, TREASURE_ATRIBUTES LD A, ($7189) LD L, A LD H, 0 ADD HL, HL ADD HL, HL ADD HL, DE PUSH HL POP IX LD D, (IX+2) LD E, (IX+3) LD HL, UNK_99A5 LD A, 2 LD IY, 1 LD IX, PUT_VRAM RST 28H LD A, 0C3H LD ($718C), A LD IX, TREASURES CALL PUTOBJ RET DISPLAY_TREASURE_01: LD IY, $7189 LD DE, TREASURE_ATRIBUTES LD L, (IY+0) LD H, 0 ADD HL, HL ADD HL, HL ADD HL, DE LD A, (HL) LD (IY+1), A INC HL LD A, (HL) LD (IY+3), A PUSH HL LD IX, TREASURES CALL PUTOBJ POP IX LD D, (IX+1) LD E, (IX+2) LD HL, UNK_99A4 LD A, 2 LD IY, 1 LD IX, PUT_VRAM RST 28H RET UNK_99A4: DB 20H UNK_99A5: DB 0 PICKED_UP_TREASURE: PUSH AF PUSH BC PUSH DE PUSH HL CALL ADD_TREASURE_VALUE_TO_SCORE LD DE, $718E LD HL, $7189 INC (HL) LD A, (DE) CP (HL) JR NZ, LOC_99C3 PUSH AF CALL DISPLAY_TREASURE_02 POP AF CP 10H JR Z, LOC_99C6 JR LOC_99C6 LOC_99C3: CALL DISPLAY_TREASURE_01 LOC_99C6: POP HL POP DE POP BC POP AF RET TREASURE_ATRIBUTES: DB 148,019,000,115 DB 060,155,002,136 DB 084,019,000,107 DB 172,139,002,086 DB 044,059,001,006 DB 132,131,002,049 DB 148,051,000,243 DB 060,139,002,072 DB 188,059,001,024 DB 172,155,002,150 DB 052,035,000,167 DB 148,163,002,179 DB 108,059,001,014 DB 092,139,002,076 DB 124,091,001,144 SUB_9A07: PUSH AF PUSH BC PUSH DE PUSH HL PUSH IX LD A, H LD ($7250), A LD A, L LD ($7251), A LD HL, $724C RST 30H DEC A LD DE, $7193 JR Z, LOC_9A22 LD DE, $719F LOC_9A22: PUSH DE LD A, (DE) RLD LD B, 2 LOC_9A28: INC HL INC DE LD A, (DE) RLD INC DE LD A, (DE) RLD DJNZ LOC_9A28 LD HL, $724E LD DE, $7251 LD B, 3 OR A LOC_9A3C: LD A, (DE) ADC A, (HL) DAA LD (HL), A DEC HL DEC DE DJNZ LOC_9A3C POP DE LD A, 30H LD HL, $724C RRD LD (DE), A LD B, 2 CALL SUB_9B58 LD BC, 5 LD DE, $724D LD HL, $724C XOR A LD (HL), A LDIR CALL SUB_9378 POP IX POP HL CALL SOME_TYPE_OF_SCORING POP DE POP BC POP AF RET SOME_TYPE_OF_SCORING: PUSH BC PUSH HL PUSH IX PUSH IY RST 30H OR A LD A, (IX+0BH) ADD A, L DAA LD (IX+0BH), A LD A, (IX+0AH) ADC A, H DAA LD (IX+0AH), A SUB 40H JR C, LOC_9AB3 DAA LD (IX+0AH), A LD A, (IX+0) CP 5 JR NC, LOC_9AB3 INC (IX+0) LD HL, MOUSE_TXT LD DE, $70FA LD BC, 5 LDIR LD A, 60H CALL FILL_VRAM_01 LD B, 8 LD DE, 2 CALL REQUEST_AND_FREE_TIMER_SIGNAL LD A, 20H CALL FILL_VRAM_01 LOC_9AB3: POP IY POP IX POP HL POP BC RET SUB_9ABA: PUSH IX PUSH IY LD IX, $718F CALL SUB_9AD1 LD IX, $719B CALL SUB_9AD1 POP IY POP IX RET SUB_9AD1: LD (IX+0AH), 0 LD (IX+0BH), 0 RET SCORE_PRINTING_01: PUSH AF PUSH BC PUSH DE PUSH HL PUSH IX PUSH IY LD HL, ($71CF) LD IX, $71CF CALL SOME_SCORE POP IY POP IX POP HL POP DE POP BC POP AF RET ADD_TREASURE_VALUE_TO_SCORE: PUSH AF PUSH BC PUSH DE PUSH HL PUSH IX PUSH IY LD HL, ($71CD) LD IX, $71CD CALL SOME_SCORE POP IY POP IX POP HL POP DE POP BC POP AF RET SOME_SCORE: PUSH IX LD ($710F), HL LD HL, $7110 LD DE, $70FE LD A, 30H LD (DE), A DEC DE RRD LD (DE), A DEC DE RRD LD (DE), A PUSH AF DEC HL LD A, (HL) OR A JR Z, LOC_9B3C POP AF RRD DEC DE LD (DE), A DEC DE RRD CP 30H JR NZ, LOC_9B39 XOR A LOC_9B39: LD (DE), A JR LOC_9B41 LOC_9B3C: DEC DE LD (DE), A DEC DE LD (DE), A POP AF LOC_9B41: LD B, 6 LD DE, 2 CALL REQUEST_AND_FREE_TIMER_SIGNAL POP IX LD H, (IX+0) LD L, (IX+1) CALL SUB_9A07 CALL SCORE_BCD RET SUB_9B58: INC DE INC HL RLD LD (DE), A INC DE RLD LD (DE), A DJNZ SUB_9B58 RET SCORE_BCD: OR A LD A, 20H ADD A, (IX+1) DAA LD (IX+1), A LD A, 0 ADC A, (IX+0) DAA LD (IX+0), A RET FILL_VRAM_01: LD HL, 1308H LD DE, 4 LD IX, FILL_VRAM RST 28H RET MOUSE_TXT: DB 077,079,085,083,069 SUB_9B89: LD A, ($7185) CP 1 JP Z, LOC_9C05 CALL SUB_9C2E OR A JP Z, LOC_9C05 LD IY, $717A LD IX, $7111 CALL SUB_9BAD LD ($7181), A CALL SUB_9D1A LD ($717A), A RET SUB_9BAD: PUSH BC PUSH DE PUSH HL PUSH IX PUSH IY POP DE POP HL LD A, 0 PUSH AF LD BC, 0 INC DE INC HL LD A, (DE) SUB (HL) JR NC, LOC_9BCD EX DE, HL LD A, (DE) SUB (HL) EX DE, HL LD C, A POP AF SET 2, A PUSH AF JR LOC_9BD2 LOC_9BCD: LD C, A POP AF SET 0, A PUSH AF LOC_9BD2: INC HL INC HL INC DE INC DE LD A, (DE) SUB (HL) JR NC, LOC_9BE5 EX DE, HL LD A, (DE) SUB (HL) EX DE, HL LD B, A POP AF SET 1, A PUSH AF JR LOC_9BEA LOC_9BE5: LD B, A POP AF SET 3, A PUSH AF LOC_9BEA: LD A, B CP C JR Z, LOC_9C00 CP 10H JR NC, LOC_9BF7 POP AF AND 5 JR LOC_9C01 LOC_9BF7: CP 10H JR NC, LOC_9C00 POP AF AND 0AH JR LOC_9C01 LOC_9C00: POP AF LOC_9C01: POP HL POP DE POP BC RET LOC_9C05: CALL SUB_9C2E OR A JR NZ, LOC_9C10 CALL SUB_9BAD JR LOC_9C13 LOC_9C10: CALL SUB_9C1D LOC_9C13: LD ($7181), A CALL SUB_9D1A LD ($717A), A RET SUB_9C1D: PUSH DE PUSH HL LD A, R AND 7 LD E, A LD D, 0 LD HL, BYTE_9D2B ADD HL, DE LD A, (HL) POP HL POP DE RET SUB_9C2E: LD A, ($71AE) LD B, A LD A, ($71AC) DEC A LD HL, $7190 JR Z, LOC_9C3E LD HL, $719C LOC_9C3E: SLA B SLA B XOR A LOC_9C43: ADC A, (HL) DJNZ LOC_9C43 LD C, A CALL RAND_GEN AND 88H CP C LD A, 0 RET NC LD A, 1 RET BIRD_TO_SCREEN_CHECK_MOUSE_COLLISION: LD IY, $717A LD A, (IY+7) CALL SUB_9CC3 LD IX, BIRD_SPRITE CALL PUTOBJ LD A, ($717D) CP 15H JR C, DISPLAY_BIRD CP 0A2H JR NC, DISPLAY_BIRD LD A, ($717B) CP 0B9H JR NC, DISPLAY_BIRD CP 2DH JR C, DISPLAY_BIRD LD IX, $717A LD IY, $7111 CALL SUB_8915 OR A RET Z LD ($71B5), A LD A, 0FFH LD ($706F), A LD ($7079), A LD B, 9 RST 18H LD B, 0BH RST 18H RET DISPLAY_BIRD: LD A, ($7182) CALL FREE_SIGNAL LD A, ($7184) CALL FREE_SIGNAL LD A, ($7183) CALL FREE_SIGNAL LD A, 0 LD HL, 2D0H CALL REQUEST_SIGNAL LD ($7183), A LD A, 0C3H LD ($717D), A LD IX, BIRD_SPRITE CALL PUTOBJ RET SUB_9CC3: PUSH AF PUSH BC PUSH DE PUSH HL PUSH IX PUSH IY OR A JP Z, LOC_9D11 CALL SUB_9D1A LD L, A LD H, 0 ADD HL, HL LD DE, FLIGHT_CONTROL ADD HL, DE PUSH IY POP DE INC DE PUSH DE POP BC INC BC INC BC JP (HL) FLIGHT_CONTROL: DB 024,017,024,012,024,021,024,016,024,025,024,020,024,029,024,024,026,060,018,010,061,002,024 DB 022,010,060,002,026,060,018,024,014,026,061,018,010,060,002,024,006,010,061,002,026,061,018 LOC_9D11: POP IY POP IX POP HL POP DE POP BC POP AF RET SUB_9D1A: LD C, 0 LD HL, BYTE_9D2B LD B, 7 LOC_9D21: CP (HL) JP Z, LOC_9D29 INC C INC HL DJNZ LOC_9D21 LOC_9D29: LD A, C RET BYTE_9D2B: DB 08H, 0CH, 04H, 06H, 02H, 03H, 01H, 09H SUB_9D33: LD A, ($71AE) LD B, A SLA A SLA A SLA A SLA A SLA A NEG ADD A, 94H LD E, A LD A, R DEC B LOC_9D49: SRL A DJNZ LOC_9D49 ADD A, E CP 1EH JR NC, LOC_9D54 LD A, 1EH LOC_9D54: LD L, A LD H, 0 LD A, 0 CALL REQUEST_SIGNAL LD ($7182), A RET SUB_9D60: LD A, 0 LD HL, 2D0H CALL REQUEST_SIGNAL LD ($7183), A LD A, 0C3H LD ($717D), A RET SUB_9D71: LD A, ($717D) CP 0C3H JP NZ, LOC_9DE3 LD E, 0 LD A, ($7112) CP 77H JR NC, LOC_9D8B LD A, 0B7H LD ($717B), A LD E, 1 JR LOC_9D92 LOC_9D8B: LD A, 2FH LD ($717B), A LD E, 4 LOC_9D92: LD A, ($7114) CP 5FH JR NC, LOC_9DA3 LD A, 0A0H LD ($717D), A LD A, 8 OR E JR PLAY_BIRD_ENTRY_TUNE LOC_9DA3: LD A, 17H LD ($717D), A LD A, 2 OR E PLAY_BIRD_ENTRY_TUNE: LD ($7181), A CALL SUB_9D1A LD ($717A), A LD HL, 2 LD A, 1 CALL REQUEST_SIGNAL LD ($7183), A LD HL, 4B0H LD A, 0 CALL REQUEST_SIGNAL LD ($7184), A LD HL, 78H LD A, 0 CALL REQUEST_SIGNAL LD ($7182), A XOR A LD ($7185), A LD B, 17H RST 18H LD B, 18H RST 18H LD B, 19H RST 18H RET LOC_9DE3: LD A, ($7185) OR A JR NZ, LOC_9DF7 LD A, ($7184) CALL TEST_SIGNAL OR A JR Z, LOC_9DF7 LD A, 1 LD ($7185), A LOC_9DF7: LD A, ($7182) CALL TEST_SIGNAL OR A JR Z, LOC_9E06 CALL SUB_9D33 CALL SUB_9B89 LOC_9E06: JP BIRD_TO_SCREEN_CHECK_MOUSE_COLLISION PLAY_FIELD_PATTERNS_01: DB 000,000,000,000,000,000,000,000 DB 036,036,036,036,036,036,060,024 DB 024,060,036,036,036,036,036,036 DB 000,000,254,003,003,254,000,000 DB 000,000,127,192,192,127,000,000 DB 036,036,103,192,192,127,000,000 DB 036,036,230,003,003,254,000,000 DB 024,060,228,004,004,252,000,000 DB 024,060,036,039,032,032,127,000 DB 024,060,231,000,000,255,000,000 DB 000,000,255,000,000,231,060,024 DB 060,060,060,060,060,060,060,060 DB 000,000,255,255,255,255,000,000 DB 060,060,252,252,248,240,000,000 DB 000,000,240,248,252,252,060,060 DB 000,000,015,031,063,063,060,060 DB 060,060,063,063,031,015,000,000 DB 036,036,036,036,036,060,000,000 DB 000,000,060,036,036,036,036,036 DB 000,000,252,004,004,252,000,000 DB 000,000,063,032,032,063,000,000 DB 000,000,252,004,004,228,036,036 DB 000,000,063,032,032,039,036,036 DB 036,036,228,004,004,252,000,000 DB 036,036,039,032,032,063,000,000 DB 000,000,255,000,000,231,036,036 DB 036,036,231,000,000,255,000,000 DB 036,036,039,032,032,039,036,036 DB 036,036,228,004,004,228,036,036 DB 036,036,036,036,036,036,036,036 DB 000,000,255,000,000,255,000,000 DB 036,036,231,000,000,231,036,036 DB 000,060,024,024,024,024,060,000 DB 000,036,052,052,044,044,036,000 DB 000,000,254,003,003,230,036,036 DB 000,000,127,192,192,103,036,036 DB 000,000,124,196,196,100,036,036 DB 000,000,062,035,035,038,036,036 DB 000,000,252,004,004,228,060,024 DB 000,000,063,032,032,039,060,024 DB 036,036,100,196,196,124,000,000 DB 036,036,038,035,035,062,000,000 DB 024,060,228,004,004,228,060,024 DB 024,060,228,004,004,228,036,036 DB 024,060,039,032,032,039,036,036 DB 000,032,020,024,102,024,040,000 DB 004,040,004,042,017,038,008,128 DB 000,000,016,004,000,016,000,000 DB 000,034,008,034,008,034,000,000 DB 000,000,102,126,060,126,102,000 DB 000,000,000,000,028,053,055,029 DB 000,000,000,016,040,172,236,184 DB 005,014,031,030,014,003,000,000 DB 160,112,248,120,112,192,000,000 BYTE_9FB9: DB 000,000,000,012,028,000,000,000 DB 000,000,255,129,189,165,165,165 DB 165,165,165,189,129,255,000,000 DB 063,032,047,040,040,047,032,063 DB 252,004,244,020,020,244,004,252 BYTE_9FE1: DB 000,000,000,001,002,003,004,005 DB 006,007,255,008,000,008,009,010 DB 017,018,019,020,021,255,016,000 DB 022,023,024,025,026,027,028,029 DB 255,024,000,030,031,034,035,036 DB 037,038,039,255,168,000,055,056 DB 057,058,000,255,096,000,011,012 DB 013,014,015,016,049,255,104,000 DB 011,012,013,014,015,016,054,255 DB 112,000,011,012,013,014,015,016 DB 045,046,255,120,000,032,033,255 DB 128,000,040,041,042,043,044,045 DB 046,047,255,136,000,045,046,047 DB 255,144,000,045,046,047,255,152 DB 000,047,048,047,255,160,000,050 DB 051,052,053,255,255,255,000,000 DB 255,255 COLOR_TABLE: DB 032,032,032,032,032,032,032,032 DB 032,032,032,032,096,176,064,253 DB 032,064,096,208,112,032,240,240 DB 240,240,240,240,240,240,240,240 PLAY_FIELD: DW PLAY_FIELD_OBJECT DW UNK_A090 DB 0 DB 80H PLAY_FIELD_OBJECT: DB 0 DB 0 DB 0 DB 0 DB 0 DW PLAY_FIELD_FRAME UNK_A090: DB 0 DB 28H DB 0 DB 10H DB 0 DB 0 DB 0 PLAY_FIELD_FRAME: DB 15H, 15H DB 016,024,024,024,019,024,024,024,015,172,172,172,016,024,024,024,019,024,024,024,015 DB 023,170,171,110,023,110,000,110,023,000,000,000,023,110,000,110,023,110,170,171,023 DB 021,024,013,000,011,000,116,113,005,024,024,024,006,105,107,000,011,000,014,024,022 DB 023,110,000,110,102,110,023,110,000,110,000,110,000,110,023,110,102,110,000,110,023 DB 023,000,016,024,024,024,017,000,014,024,019,024,013,000,018,024,024,024,015,000,023 DB 023,110,023,110,000,110,000,110,000,110,023,110,000,110,000,110,000,110,023,110,023 DB 023,000,011,000,016,024,003,105,107,000,023,000,116,113,004,024,015,000,011,000,023 DB 023,110,000,110,023,110,000,110,023,110,023,110,023,110,000,110,023,110,000,110,023 DB 018,024,015,000,011,000,100,024,022,000,120,000,021,024,013,000,096,000,016,024,017 DB 172,000,023,110,000,110,096,110,023,110,121,110,023,110,000,110,096,110,023,000,172 DB 172,000,023,000,014,024,007,000,011,000,023,000,011,000,014,024,007,000,023,000,172 DB 172,000,023,110,000,110,000,110,000,110,023,110,000,110,000,110,000,110,023,000,172 DB 016,024,006,105,107,000,029,105,105,024,025,024,113,113,028,000,116,113,005,024,015 DB 023,110,000,110,023,110,023,110,000,110,023,110,000,110,023,110,023,110,000,110,023 DB 023,102,014,024,017,000,021,024,013,000,011,000,014,024,022,000,018,024,013,102,023 DB 023,110,000,110,000,110,023,110,000,110,000,110,000,110,023,110,000,110,000,110,023 DB 021,024,013,000,012,000,001,000,014,024,010,024,013,000,011,000,012,000,014,024,022 DB 023,110,000,110,023,110,112,110,000,110,096,110,000,110,000,110,023,110,000,110,023 DB 023,168,012,000,018,024,114,000,016,024,009,024,026,105,105,024,017,000,012,168,023 DB 023,169,023,110,000,110,000,110,023,000,000,000,023,110,000,110,000,110,023,169,023 DB 018,024,020,024,024,024,024,024,017,172,172,172,018,024,024,024,024,024,020,024,017 DW MOUSE DW CAT_01 DW CAT_02 DW CAT_03 DW CAT_04 DW CAT_05 DW CAT_06 DW BIRD_SPRITE DW TREASURES MOUSE: DW MOUSE_OBJECT DW $7111 DB 7 MOUSE_OBJECT: DB 3 DB 0 DW MOUSE_PATTERNS DB 14H DW MOUSE_FRAME_A DW MOUSE_FRAME_B DW DOG_FRAME_A DW DOG_FRAME_B DW DOG_FRAME_C MOUSE_FRAME_A: DB 07H, 00H MOUSE_FRAME_B: DB 07H, 04H DOG_FRAME_A: DB 06H, 08H DOG_FRAME_B: DB 06H, 0CH DOG_FRAME_C: DB 07H, 10H CAT_01: DW CAT_OBJECT DW $7120 DB 1 CAT_02: DW CAT_OBJECT DW $712F DB 2 CAT_03: DW CAT_OBJECT DW $713E DB 3 CAT_04: DW CAT_OBJECT DW $714D DB 4 CAT_05: DW CAT_OBJECT DW $715C DB 5 CAT_06: DW CAT_OBJECT DW $716B DB 6 CAT_OBJECT: DB 3 DB 14H DW CAT_PATTERNS DB 24H DW CAT_FRAME_A DW CAT_FRAME_B DW CAT_FRAME_C DW CAT_FRAME_D DW CAT_FRAME_E DW CAT_FRAME_F DW CAT_FRAME_G DW CAT_FRAME_H CAT_FRAME_A: DB 0BH, 00H CAT_FRAME_B: DB 0BH, 04H CAT_FRAME_C: DB 0BH, 08H CAT_FRAME_D: DB 0BH, 0CH CAT_FRAME_E: DB 0BH, 10H CAT_FRAME_F: DB 0BH, 14H CAT_FRAME_G: DB 0BH, 18H CAT_FRAME_H: DB 0BH, 1CH BIRD_SPRITE: DW BIRD DW $717A DB 0 BIRD: DB 2 DB 34H DW BIRD_PATTERNS DB 20H DW BIRD_FRAME_A DW BIRD_FRAME_B DW BIRD_FRAME_C DW BIRD_FRAME_D DW BIRD_FRAME_E DW BIRD_FRAME_F DW BIRD_FRAME_G DW BIRD_FRAME_H BIRD_FRAME_A: DB 0DH, 00H BIRD_FRAME_B: DB 0DH, 04H BIRD_FRAME_C: DB 0DH, 08H BIRD_FRAME_D: DB 0DH, 0CH BIRD_FRAME_E: DB 0DH, 10H BIRD_FRAME_F: DB 0DH, 14H BIRD_FRAME_G: DB 0DH, 18H BIRD_FRAME_H: DB 0DH, 1CH TREASURES: DW TREASURE_SPRITE_OBJECT DW $7189 DB 8 TREASURE_SPRITE_OBJECT: DB 3 DB 54H DW TREASURE_PATTERNS DB 3CH DW TREASURE_FRAME_CHEESE DW TREASURE_FRAME_KEY DW TREASURE_FRAME_GLASSES DW TREASURE_FRAME_CANDLE DW TREASURE_FRAME_BUGLE DW TREASURE_FRAME_RING DW TREASURE_FRAME_SAFETY_PIN DW TREASURE_FRAME_MARTINI DW TREASURE_FRAME_SCISSORS DW TREASURE_FRAME_PLIARS DW TREASURE_FRAME_CLOCK DW TREASURE_FRAME_PAPERCLIP DW TREASURE_FRAME_APPLE DW TREASURE_FRAME_GOBLET DW TREASURE_FRAME_DIAMOND TREASURE_FRAME_CHEESE: DB 06H, 00H TREASURE_FRAME_KEY: DB 06H, 04H TREASURE_FRAME_GLASSES: DB 06H, 08H TREASURE_FRAME_CANDLE: DB 06H, 0CH TREASURE_FRAME_BUGLE: DB 06H, 10H TREASURE_FRAME_RING: DB 06H, 14H TREASURE_FRAME_SAFETY_PIN: DB 06H, 18H TREASURE_FRAME_MARTINI: DB 06H, 1CH TREASURE_FRAME_SCISSORS: DB 06H, 20H TREASURE_FRAME_PLIARS: DB 06H, 24H TREASURE_FRAME_CLOCK: DB 06H, 28H TREASURE_FRAME_PAPERCLIP: DB 06H, 2CH TREASURE_FRAME_APPLE: DB 06H, 30H TREASURE_FRAME_GOBLET: DB 06H, 34H TREASURE_FRAME_DIAMOND: DB 06H, 38H MOUSE_PATTERNS: DB 000,000,000,000,028,052,055,029 DB 005,014,031,030,014,003,000,000 DB 000,000,000,016,040,044,236,184 DB 160,112,248,120,112,192,000,000 DB 000,000,000,008,020,052,055,029 DB 005,014,027,028,015,000,000,000 DB 000,000,000,000,056,044,236,248 DB 160,112,216,056,240,000,000,000 DB 000,000,000,014,023,037,007,012 DB 030,031,028,027,014,000,000,000 DB 000,000,000,112,232,164,224,048 DB 120,248,056,216,112,000,000,000 DB 000,000,000,028,039,005,007,028 DB 062,063,062,031,012,000,000,000 DB 000,000,000,056,228,160,224,056 DB 124,252,124,248,048,000,000,000 DB 000,000,000,014,023,037,007,012 DB 030,031,028,027,014,000,000,000 DB 000,000,000,112,232,164,224,048 DB 120,248,056,216,112,000,000,000 CAT_PATTERNS: DB 000,000,000,008,029,031,063,063 DB 063,031,007,015,031,021,000,000 DB 000,000,032,144,216,196,228,232 DB 232,200,024,160,224,064,000,000 DB 000,000,000,008,029,031,063,063 DB 063,031,007,015,031,037,000,000 DB 000,000,004,152,208,208,232,232 DB 228,196,004,156,240,032,000,000 DB 000,000,012,017,035,019,023,023 DB 023,035,063,031,020,018,000,000 DB 000,000,000,016,184,088,252,092 DB 188,248,224,224,080,072,000,000 DB 000,000,032,017,011,011,023,039 DB 039,019,031,031,020,037,000,000 DB 000,000,000,016,184,088,252,188 DB 092,248,224,224,160,032,000,000 DB 000,000,024,033,019,019,023,023 DB 023,019,016,013,003,001,000,000 DB 000,000,000,016,184,088,252,092 DB 188,248,224,240,248,084,000,000 DB 000,000,012,005,027,035,039,039 DB 039,019,024,005,003,002,000,000 DB 000,000,000,016,184,088,252,188 DB 092,248,224,240,248,168,000,000 DB 000,000,000,008,029,026,063,061 DB 058,031,007,007,005,004,000,000 DB 000,000,004,136,208,208,232,228 DB 228,200,248,248,040,164,000,000 DB 000,000,000,008,029,026,063,058 DB 061,031,007,007,010,018,000,000 DB 000,000,048,136,196,200,232,232 DB 232,196,252,248,040,072,000,000 BIRD_PATTERNS: DB 000,001,001,003,003,001,061,255 DB 063,015,003,003,001,003,003,007 DB 000,128,128,192,192,128,188,255 DB 252,240,192,192,128,192,192,224 DB 000,000,192,240,124,062,031,015 DB 007,007,063,028,012,004,000,000 DB 000,000,000,024,120,112,240,192 DB 192,224,240,240,120,056,028,012 DB 000,000,001,001,003,131,239,255 DB 255,239,131,003,001,001,000,000 DB 128,128,192,192,192,192,152,254 DB 254,152,192,192,192,192,128,128 DB 000,000,004,012,028,063,007,007 DB 015,031,062,124,240,192,000,000 DB 012,028,056,120,240,240,224,192 DB 192,240,112,120,024,000,000,000 DB 007,003,003,001,003,003,015,063 DB 255,061,001,003,003,001,001,000 DB 224,192,192,128,192,192,240,252 DB 255,188,128,192,192,128,128,000 DB 048,056,028,030,015,015,007,003 DB 003,015,014,030,024,000,000,000 DB 000,000,032,048,056,252,224,224 DB 240,248,124,062,015,003,000,000 DB 001,001,003,003,003,003,025,127 DB 127,025,003,003,003,003,001,001 DB 000,000,128,128,192,193,247,255 DB 255,247,193,192,128,128,000,000 DB 000,000,000,024,030,014,015,003 DB 003,007,015,015,030,028,056,048 DB 000,000,003,015,062,124,248,240 DB 224,224,252,056,048,032,000,000 TREASURE_PATTERNS: DB 000,000,000,000,001,003,007,015 DB 026,062,031,011,006,001,000,000 DB 000,000,000,192,224,048,120,240 DB 104,216,184,120,192,000,000,000 DB 000,000,003,004,004,003,000,000 DB 000,000,000,000,000,000,000,000 DB 000,000,224,016,016,224,128,128 DB 128,152,240,184,240,152,000,000 DB 000,000,000,000,000,001,002,004 DB 024,037,039,037,024,000,000,000 DB 000,000,000,000,192,076,020,032 DB 192,032,032,032,192,000,000,000 DB 000,000,000,000,000,001,003,002 DB 003,001,000,001,001,001,003,007 DB 000,000,000,000,128,192,064,192 DB 128,128,000,128,128,128,192,224 DB 000,000,000,000,016,024,028,031 DB 031,028,024,016,000,000,000,000 DB 000,000,000,000,000,000,008,248 DB 248,168,224,000,000,000,000,000 DB 000,000,000,007,014,007,001,007 DB 008,008,008,004,003,000,000,000 DB 000,000,000,096,176,096,128,224 DB 016,016,016,032,192,000,000,000 DB 000,000,000,002,002,004,004,008 DB 008,008,017,019,030,028,000,000 DB 000,000,000,048,120,088,024,048 DB 096,192,128,000,000,000,000,000 DB 000,000,000,000,031,015,007,003 DB 001,001,001,001,007,000,000,000 DB 000,000,032,064,240,224,064,128 DB 000,000,000,000,192,000,000,000 DB 000,000,012,018,018,026,007,001 DB 015,018,018,020,008,000,000,000 DB 000,000,000,000,000,000,000,000 DB 252,128,064,032,016,008,000,000 DB 000,000,002,004,012,004,002,001 DB 002,012,012,012,012,012,000,000 DB 000,000,064,032,048,032,064,128 DB 064,048,048,048,048,048,000,000 DB 000,000,000,007,012,025,017,017 DB 016,016,024,012,007,000,000,000 DB 000,000,000,224,048,024,008,008 DB 136,072,024,048,224,000,000,000 DB 000,000,000,000,015,016,039,040 DB 040,039,016,015,000,000,000,000 DB 000,000,000,000,224,000,248,004 DB 004,228,008,240,000,000,000,000 DB 000,000,000,000,000,006,015,031 DB 031,031,015,015,007,003,000,000 DB 000,000,048,064,128,176,240,248 DB 248,248,152,176,224,192,000,000 DB 000,000,029,018,021,026,031,007 DB 003,001,001,001,003,007,000,000 DB 000,000,184,072,168,088,248,224 DB 192,128,128,128,192,224,000,000 DB 000,000,000,000,003,013,018,031 DB 021,010,005,002,001,000,000,000 DB 000,000,000,000,192,176,072,248 DB 168,080,160,064,128,000,000,000 SUB_A7B5: LD IY, $7111 CALL SUB_A9BF LD ($71BD), A CALL SUB_A7EF LD (IY+8), A OR A JR NZ, LOC_A7CD CALL SUB_A850 JR LOC_A7E7 LOC_A7CD: LD A, ($71BD) AND (IY+0DH) AND (IY+8) LD B, A LD A, ($71BD) AND B CALL SUB_A80D OR A LD (IY+7), A JR Z, LOC_A7E7 CALL SUB_A81F LOC_A7E7: LD IX, MOUSE CALL PUTOBJ RET SUB_A7EF: PUSH IY RST 30H LD IY, $7054 DEC A LD C, (IY+3) JR Z, LOC_A7FF LD C, (IY+8) LOC_A7FF: XOR A LD B, 4 LOC_A802: SRL C RLA DJNZ LOC_A802 LD ($7119), A POP IY RET SUB_A80D: OR A RET PO LD B, A LD A, 5 AND (IY+7) JR NZ, LOC_A81B LD A, B AND 5 RET LOC_A81B: LD A, B AND 0AH RET SUB_A81F: BIT 3, (IY+7) JR Z, LOC_A82B DEC (IY+3) DEC (IY+3) LOC_A82B: BIT 2, (IY+7) JR Z, LOC_A837 INC (IY+1) INC (IY+1) LOC_A837: BIT 1, (IY+7) JR Z, LOC_A843 INC (IY+3) INC (IY+3) LOC_A843: BIT 0, (IY+7) JR Z, LOCRET_A84F DEC (IY+1) DEC (IY+1) LOCRET_A84F: RET SUB_A850: CALL SUB_A9DB OR A RET Z BIT 3, A JR Z, LOC_A866 LD B, 3 LD C, 0FFH LD D, (IY+3) CALL SUB_A89C LD (IY+3), D LOC_A866: BIT 2, A JR Z, LOC_A877 LD B, 4 LD C, 1 LD D, (IY+1) CALL SUB_A89C LD (IY+1), D LOC_A877: BIT 1, A JR Z, LOC_A888 LD B, 3 LD C, 1 LD D, (IY+3) CALL SUB_A89C LD (IY+3), D LOC_A888: BIT 0, A JR Z, LOC_A899 LD B, 4 LD C, 0FFH LD D, (IY+1) CALL SUB_A89C LD (IY+1), D LOC_A899: JP SUB_A850 SUB_A89C: PUSH AF LOC_A89D: LD A, C ADD A, D LD D, A AND 7 CP B JR NZ, LOC_A89D POP AF RET SCREEN_COLLISION_MATH: PUSH AF PUSH DE LD D, 0 LD A, 8 ADD A, (IY+1) LD E, A SRL E SRL E SRL E LD H, (IY+4) LD A, 9 ADD A, (IY+3) AND 0F8H LD L, A SLA L RL H SLA L RL H ADD HL, DE POP DE POP AF RET UPDATE_MOUSE: PUSH IY LD A, ($71C9) CP 78H JR Z, PERFORM_CORNER_WARP CP 79H JR NZ, DID_YOU_EAT_SOME_CHEESE PERFORM_CORNER_WARP: LD A, 1 LD ($7185), A LD A, R AND 3 LD DE, CORNER_WARP_TABLE LD L, A LD H, 0 ADD HL, HL ADD HL, DE LD A, (HL) LD (IY+1), A INC HL LD A, (HL) LD (IY+3), A CALL SUB_AA09 LD IX, MOUSE CALL PUTOBJ LD B, 0DH RST 18H LD B, 0EH RST 18H JR LOC_A955 DID_YOU_EAT_SOME_CHEESE: CP 6EH JR NZ, DID_YOU_PICK_UP_A_BONE RST 30H DEC (IX+2) LD HL, 9 CALL SUB_9A07 LD B, 15H RST 18H JR BONUS_SCORE_TO_VRAM DID_YOU_PICK_UP_A_BONE: CP 66H JR NZ, DID_YOU_PICK_UP_TREASURE RST 30H LD A, (IX+3) CP 0FAH JR NC, BONUS_SCORE_TO_VRAM INC (IX+3) CALL SUBTRACT_BONE_FROM_DISPLAY LD B, 1AH RST 18H LD B, 1CH RST 18H LD B, 1BH RST 18H JR BONUS_SCORE_TO_VRAM DID_YOU_PICK_UP_TREASURE: CP 20H JR NZ, LOC_A955 CALL PLAY_TREASURE_TUNE_01 CALL PICKED_UP_TREASURE BONUS_SCORE_TO_VRAM: LD DE, ($71C5) LD HL, $71CC LD (HL), 0 LD A, 2 LD IY, 1 LD IX, PUT_VRAM RST 28H LOC_A955: POP IY RET CORNER_WARP_TABLE: DB 188,019,044,019,188,163,044,163 UPDATE_CATS: PUSH IX PUSH IY LD IY, $7120 CALL CHECK_FOR_ALLOWABLE_TILES LD IX, CAT_01 RST 10H LD IY, $712F CALL CHECK_FOR_ALLOWABLE_TILES LD IX, CAT_02 RST 10H LD IY, $713E CALL CHECK_FOR_ALLOWABLE_TILES LD IX, CAT_03 RST 10H LD IY, $714D CALL CHECK_FOR_ALLOWABLE_TILES LD IX, CAT_04 RST 10H LD A, ($71AE) CP 1 JR Z, LOC_A9BA LD IY, $715C CALL CHECK_FOR_ALLOWABLE_TILES LD IX, CAT_05 RST 10H LD A, ($71AE) CP 3 JR C, LOC_A9BA LD IY, $716B CALL CHECK_FOR_ALLOWABLE_TILES LD IX, CAT_06 RST 10H LOC_A9BA: POP IY POP IX RET SUB_A9BF: LD B, 0 LD A, (IY+1) AND 7 CP 4 JR NZ, LOC_A9CC LD B, 0AH LOC_A9CC: LD A, (IY+3) AND 7 CP 3 JR NZ, LOC_A9D9 LD A, 5 OR B LD B, A LOC_A9D9: LD A, B RET SUB_A9DB: XOR A LD D, A LD A, (IY+1) SUB 4 AND 7 OR A JR Z, LOC_A9F2 CP 4 JP P, LOC_A9F0 SET 0, D JR LOC_A9F2 LOC_A9F0: SET 2, D LOC_A9F2: LD A, (IY+3) SUB 3 AND 7 OR A JR Z, LOC_AA07 CP 4 JP P, LOC_AA05 SET 3, D JR LOC_AA07 LOC_AA05: SET 1, D LOC_AA07: LD A, D RET SUB_AA09: LD IY, $7111 LD DE, 0FH LD B, 7 LOC_AA12: PUSH BC PUSH DE CALL SUB_A9BF CP 0FH JR NZ, LOC_AA3C LD A, (IY+6) CP 1 LD BC, 0AH JR Z, LOC_AA32 LD A, (IY+0BH) CP 2 JR Z, LOC_AA3C OR A JR Z, LOC_AA3C LD BC, 8 LOC_AA32: CALL CHECK_FOR_TILE_COLLISION LD A, (IY+6) DEC A CALL Z, UPDATE_MOUSE LOC_AA3C: POP DE ADD IY, DE POP BC DJNZ LOC_AA12 RET CHECK_FOR_TILE_COLLISION: CALL COLLISION_CHECK CALL TILE_COLLISIONS LD (IY+0DH), A RET TILE_COLLISIONS: LD E, 0 LD D, 5 LD IX, $71C6 LOC_AA55: LD HL, TILE_COLLISION_TABLE INC IX PUSH BC LD A, (IX+0) CPIR SCF JR Z, LOC_AA64 OR A LOC_AA64: RL E POP BC DEC D JR NZ, LOC_AA55 XOR A BIT 0, E JR Z, LOC_AA71 SET 1, A LOC_AA71: BIT 1, E JR Z, LOC_AA77 SET 2, A LOC_AA77: BIT 2, E JR Z, LOC_AA7D SET 4, A LOC_AA7D: BIT 3, E JR Z, LOC_AA83 SET 0, A LOC_AA83: BIT 4, E RET Z SET 3, A RET TILE_COLLISION_TABLE: DB 000,032,102,110,168,169,170,171,120,121 COLLISION_CHECK: PUSH BC PUSH IX PUSH IY CALL SCREEN_COLLISION_MATH PUSH IY LD BC, 20H PUSH BC PUSH HL OR A SBC HL, BC LD IY, 1 LD DE, $71C7 CALL GET_SOME_VRAM POP HL PUSH HL DEC HL LD IY, 3 CALL GET_SOME_VRAM POP HL POP BC POP IY LD A, (IY+6) DEC A CALL Z, SUB_AADC ADD HL, BC LD IY, 1 CALL GET_SOME_VRAM POP IY POP IX POP BC RET GET_SOME_VRAM: LD A, 2 EX DE, HL LD IX, GET_VRAM RST 28H EX DE, HL RET SUB_AADC: LD ($71C5), HL LD IX, $71C7 LD A, (IX+1) LD ($71D1), A LD A, (IX+3) LD ($71D2), A RET SUB_AAF0: PUSH BC PUSH DE PUSH HL PUSH IX LD C, 0FH LD A, (IY+6) CP 1 JR Z, LOC_AB50 XOR A CP (IY+0BH) JR Z, LOC_AB50 LD A, 2 LOC_AB06: PUSH AF PUSH IY CALL SUB_AB57 PUSH HL POP IX LD A, (IY+6) CP (IX+6) JR Z, LOC_AB48 LD A, (IX+0BH) OR A JR Z, LOC_AB48 CALL SUB_8910 CP 0 JR Z, LOC_AB48 LD A, (IY+1) SUB (IX+1) OR A JR Z, LOC_AB36 JP P, LOC_AB34 RES 2, C JR LOC_AB36 LOC_AB34: RES 0, C LOC_AB36: LD A, (IY+3) SUB (IX+3) OR A JR Z, LOC_AB48 JP P, LOC_AB46 RES 1, C JR LOC_AB48 LOC_AB46: RES 3, C LOC_AB48: POP IY POP AF INC A CP 8 JR C, LOC_AB06 LOC_AB50: LD A, C POP IX POP HL POP DE POP BC RET SUB_AB57: PUSH AF PUSH DE LD DE, 0FH CP 1 JP M, LOC_AB6F CP 8 JP P, LOC_AB6F LD HL, $7111 LOC_AB69: DEC A JR Z, LOC_AB72 ADD HL, DE JR LOC_AB69 LOC_AB6F: LD HL, 4000H LOC_AB72: POP DE POP AF RET CHECK_FOR_ALLOWABLE_TILES: LD A, (IY+0BH) CP 2 JR Z, LOC_AB88 LD A, (IY+7) OR A JR NZ, LOC_AB88 LD BC, 8 CALL CHECK_FOR_TILE_COLLISION LOC_AB88: CALL SUB_A9BF LD ($71BD), A CALL SUB_AAF0 LD ($71C0), A CALL SUB_A9DB OR (IY+0DH) LD B, A LD A, ($71C0) AND B LD B, A LD A, ($71BD) AND B CALL SUB_9753 LD (IY+7), A OR A JP NZ, SUB_A81F RET PADD_TO_12K: DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH