; Disassembly of the file "VIDSTORY.BIN" - (c)19?? ; ; CPU Type: Z80 for the Bally/Astrocade Professional ; ; Created with dZ80 1.50 and Blood, Sweat & Tears ; Reassembles correctly with: zmac -i -m VIDSTORY.ASM ; ; on Thursday, 13 of March 2008 at 05:27 PM ; By: Richard C. Degler - From Scratch, Inc. ; ; HIDDEN EQU $4CF8 ; First Hidden Byte STACKA EQU $4DA8 ; Top of 176 byte Stack Area and ?? ; $4DA8 through $4F77 cleared to Initialize Video Story ; ?? EQU $4DA9 ; Don't Handle SENTRY Return = SF4 until one SENTRY Return = SF3 KYSHFT EQU $4DAA ; Add 0 or 24 to KeyCode if Shifted FILLBX EQU $4DAB ; 0 to draw a Hollow Box, or 1 to draw a Filled Box FILLCI EQU $4DAC ; 0 to draw a Hollow Circle, or 1 to draw a Filled Circle ; ?? EQU $4DAD ; ; ?? EQU $4DAE ; ; ?? EQU $4DAF ; Store old Return Address word in ?? Routine ; ?? EQU $4DB1 ; ; ?? EQU $4DB2 ; ; ?? EQU $4DB3 ; ; ?? EQU $4DB4 ; ; ?? EQU $4DB5 ; ; ?? EQU $4DB6 ; OLDHMR EQU $4DB7 ; Old Hold Magic Register ?? ; ?? EQU $4DB8 ; 0 by "=,4", 1 by "=,5" (default), or 2 by "=,6" for ?? ; ?? EQU $4DB9 ; 0 no flash pictures ??, 1 for Draw Pictures ?? CURSOR EQU $4DBA ; 0 to use Joystick 1 to Move Cursor, or 1 to use Knobs One and Three OLDSW0 EQU $4DBB ; Old Joystick 1 Reading ; ?? EQU $4DBC ; ; ?? EQU $4DBD ; Store ?? Address word in ?? Routine ; ?? EQU $4DBF ; Store ?? Address word in ?? Routine ; ?? EQU $4DC1 ; Save ?? in ?? Routine ; ?? EQU $4DC2 ; Save ?? in ?? Routine ; ?? EQU $4DC3 ; ; ?? EQU $4DC4 ; ; ?? EQU $4DC5 ; ; ?? EQU $4DC6 ; Save ?? in ?? Routine ; ?? EQU $4DC7 ; ; ?? EQU $4DC8 ; ; ?? EQU $4DC9 ; Saved as byte but Read as word ; ?? EQU $4DCB ; Saved as byte but Read as word ; ?? EQU $4DCD ; Saved as byte but Read as word ; ?? EQU $4DCF ; ; ?? EQU $4DD0 ; ; ?? EQU $4DD1 ; ; ?? EQU $4DD2 ; ; ?? EQU $4DD3 ; ; ?? EQU $4DD4 ; ; ?? EQU $4DD5 ; HOLDMR EQU $4DD6 ; 0 for PLOP, 16 for OR, or 32 for XOR in Hold Magic Register COLORM EQU $4DD7 ; Color Mode 0, 1, or 2 OLDMUC EQU $4DD8 ; Old Multi-Color 0 through 1 MULTIC EQU $4DD9 ; Multi-Color 0 through 1 ; ?? EQU $4DDA ; Store ?? Address word in ?? Routine ; ?? EQU $4DDC ; Store ?? Address word in ?? Routine ; ?? EQU $4DDE ; Store ?? Address word in ?? Routine ; ?? EQU $4DE0 ; Store ?? Address word in ?? Routine ; ?? EQU $4DE2 ; ; ?? EQU $4DE3 ; ; ?? EQU $4DE4 ; ; ?? EQU $4DE5 ; Store ?? Address word in ?? Routine ; ?? EQU $4DE7 ; Store ?? Address word in ?? Routine ; ?? EQU $4DE9 ; Store ?? Address word in ?? Routine ; ?? EQU $4DEB ; Store ?? Address word in ?? Routine ; 35 byte Location Blocks offset: ; +$00 - MAGIC to Write with ; +$01 - ; +$02 - Speed ?? ; +$03, $04 - Delta X ; +$05, $06 - X ; +$07 - ; +$08, $09 - Delta Y ; +$0A, $0B - Y ; +$0C - ; +$0D, $0E - Absolute MAGIC Address ; +$0F, $10 - ; +$11 - ; +$12, $13 - Data for Image ; +$14, $15 - Limit Table Address ; +$16 - ; +$17, $18 - ; +$19 - ; +$1A, $1B - Handler Address word for Block ?? ; +$1C - Header Up Counter or $FF for Only One Header ; +$1D - Delay Down Counter or $FF for No Draw of This Block ; +$1E, $1F - Current Header Address ; +$20, $21 - Header Base Address ; +$22 - BLOCK0 EQU $4DED ; Cursor Location Block VALIDC EQU BLOCK0+$12 ; $4DFF word = L3713 for Valid Cursor Data else Preset ALL BLOCK1 EQU $4E10 ; First Location Block BLOCK2 EQU $4E33 ; Second Location Block BLOCK3 EQU $4E56 ; Third Location Block BLOCK4 EQU $4E79 ; Fourth Location Block BLOCK5 EQU $4E9C ; Fifth Location Block BLOCK6 EQU $4EBF ; Sixth Location Block BLOCK7 EQU $4EE2 ; Seventh Location Block ; $4F05 (Set to 1 but Not Used ??) COLORS EQU $4F06 ; 8 byte RAM Color Table RMPCLR EQU $4F0E ; 0 to Freeze, 1 to Ramp Colors ; ?? EQU $4F0F ; ?? word ?? ; ?? EQU $4F11 ; ?? word ?? ; ?? EQU $4F13 ; ?? word ?? ; $4F15 through $4F26 ?? not used ; ?? EQU $4F27 ; ?? word ?? ; ?? EQU $4F29 ; ?? word ?? ; ?? EQU $4F2B ; ?? word ?? ; ?? EQU $4F2D ; ?? word ?? ; $4F2F through $4F3D ?? not used ; ?? EQU $4F3E data ?? ; $4F3F and $4F40 ?? not used ; ?? EQU $4F41 ; ?? word ?? ; $4F43 through $4F5C cleared by Clear Some Variables Routine ; $4F43 ?? not used ; ?? EQU $4F44 ; = 0 ?? ; ?? EQU $4F45 ; - 1 ?? ; ?? EQU $4F46 ; - 1 ?? ; ?? EQU $4F47 ; = 0 ?? ; ?? EQU $4F48 ; = 0 ?? ; ?? EQU $4F49 ?? not used ; ?? EQU $4F4A ; = 0 ?? ; ?? EQU $4F4B ; = 0 ?? ; ?? EQU $4F4C ; = 50 or 35 ?? ; ?? EQU $4F4D ; = 0 and not used ?? BGC0R3 EQU $4F4E ; Background Color Right Number 3 (out of order) BGC0RX EQU $4F4F ; Background Color Right Number X (not used) BGC0R2 EQU $4F50 ; Background Color Right Number 2 BGC0R1 EQU $4F51 ; Background Color Right Number 1 ; ?? EQU $4F52 ; = 0 ?? ; ?? EQU $4F53 = 75 at TWO PLACES but Not Read ?? ILINE1 EQU $4F54 ; = 50 or 0 Holds Interrupt Line Number #1 ILINE2 EQU $4F55 ; = 170 or 190 Interrupt Line Register #2 VECT01 EQU $4F56 ; word set to L21AD to point to Interrupt Routine #1 (first) VECT03 EQU $4F58 ; word set to L2368 to point to Interrupt Routine #3 (out of order) VECT02 EQU $4F5A ; word set to L2283 to point to Interrupt Routine #2 (second) ; $4F5C last byte cleared by Clear Some Variables Routine - not used ; $4F5D through $4F77 cleared by Clear Jump Address Table and User Time Base Routine ; $4F5D through $4F61 ?? not used ; Jump Address Table in RAM for Look Up Address Routine JUMP00 EQU $4F62 ; word with A = 0 for Sentry Return SCT0 ; JUMP01 EQU $4F64 ; word with A = 1 for Sentry Return SCT1 JUMP02 EQU $4F66 ; word with A = 2 for Sentry Return SCT2 ; JUMP03 EQU $4F68 ; word with A = 3 for Sentry Return SCT3 ; JUMP04 EQU $4F6A ; word with A = 4 for Sentry Return SCT4 ; JUMP05 EQU $4F6C ; word with A = 5 for Sentry Return SCT5 ; JUMP06 EQU $4F6E ; word with A = 6 for Sentry Return SCT6 ; JUMP07 EQU $4F70 ; word with A = 7 for Sentry Return SCT7 USRTB1 EQU $4F72 ; User Time Base #1 divide by 15 for CT3 through CT7 USRTB2 EQU $4F73 ; User Time Base #2 divide by 2 for CT2 USRTB3 EQU $4F74 ; User Time Base #3 for CT0 & CT1 ; $4F75 through $4F77 ?? not used ; $4F77 last byte cleared by Clear Jump Address Table and User Time Base Routine ; $4DA8 (STACKA) through $4F77 cleared to Initialize Video Story NOLIST INCLUDE "HVGLIB.H" LIST ORG FIRSTC ; L2000: JP L3ED2 ; Jump to Auto Start Cartridge L2003: ; Clear Screen Routine LD E,$00 LD HL,NORMEM ; Clear from $4000 through $4D47 LD BC,$0D48 L200B: LD (HL),E ; Set to 0 CPI ; Decrement BC, Increment HL (ignore Compare) JP PE,L200B ; Is BC NOT 0 ? RET L2012: ; Initialize HVG System Routines Routine LD (WASTER),A ; $0FFF = 0 for Safe Magic Write to Flush Shifter DEC A LD (TIMOUT),A ; $4FEC = 255 for Maximum Delay before PIZBRK SYSTEM EMUSIC ; End Music SYSSUK SETOUT DB $AA ; &(10) = 85*2 for VERBL DB $29 ; &(9) = 41 for HORCB DB $08 ; &(14) = 8 for INMOD SYSTEM ACTINT ; Activate Interrupts RET L2023: ; User Routine #80 starts here (DE = Key Mask) EXX LD HL,L202F PUSH HL ; Fake a Return Address to Return Node for Next Return LD HL,($010D) ; SYSDPT (UPI Jump Address Base) + 2*33 (Sense Transition) PUSH HL ; Fake a Return Address (direct to SENTRY) to Return From EXX DI RET ; Jump to System Routine at $01AC (MENTRY) was in $010D L202F: ; Return Node EI RET L2031: ; Extended User Routine starting address Table in ROM DW L2023 ; User Routine #80 to DI, Call SENTRY Routine, EI L2033: ; Extended User Mask ARGuments Table in ROM DB $03 ; User Routine #80 sucks DE register L2034: ; Do Look Up Address by A into HL Jump Table Routine LD E,A ; where A was 0 through 7 for RAM, or 0 through 39 for ROM LD D,$00 ADD HL,DE ADD HL,DE ; Table Base plus Two times (0 through 7) or (0 through 39) LD E,(HL) INC HL LD D,(HL) ; Look Up into DE RET L203D: ; Clear Jump Address Table and User Time Bases Routine LD E,$00 LD BC,$001B LD HL,$4F5D ; Clear from $4F5D through $4F77 L2045: LD (HL),E CPI ; Decrement BC, Increment HL (ignore Compare) JP PE,L2045 ; Is BC NOT 0 ? RET LD D,A ; (unreachable code ??) L204D: ; Set CTn to Delay and Jump by Table in RAM Routine DI LD A,D ; with D = Delay (of 1), E = 0 through 7 (always a 2) ?? LD D,$00 LD HL,CT0 ; Counter Timer 0 Address at $4FD5 ADD HL,DE LD (HL),A ; Store a 1 by E into CT0 through CT7 (always CT2) LD HL,JUMP00 ; Jump Table Base Address in RAM ADD HL,DE ADD HL,DE ; Point at Jump Address by Two Times E POP DE ; Steal Real Return Address LD (HL),E INC HL LD (HL),D ; Save Old Return Address in Jump Table EI RET ; Jump to Address in Jump Table (always JUMP02) L2061: ; Run at 60Hz ?? Routine LD BC,$0103 ; Reset Value = 1 and Counter Mask = 3 (CT0 & CT1) LD HL,USRTB3 ; $4F74 for User Time Base #3 CALL CTIMER ; to Decrement Time Base and Call DECCTS if Zero LD BC,$0204 ; Reset Value = 2 and Counter Mask = 4 (CT2) LD HL,USRTB2 ; $4F73 for User Time Base #2 CALL CTIMER ; to Decrement Time Base and Call DECCTS if Zero LD BC,$0FF8 ; Reset Value = 15 and Counter Mask = All Others LD HL,USRTB1 ; $4F72 for User Time Base #1 JP CTIMER ; to Decrement Time Base and Call DECCTS if Zero L207C: ; Handle SENTRY Return = SCT0 XOR A L207D: ; Common Exit Point for Handle SENTRY Return = SCT0 through SCT7 LD HL,JUMP00 ; Point to Jump Table in RAM CALL L2034 ; to Look Up Address by 0 through 7 in RAM Jump Table LD A,E OR D ; No Address in RAM Jump Table ? JR Z,L2089 ; (+$02) EX DE,HL JP (HL) ; Jump to Address in RAM Jump Table ?? L2089: ; Return Point for Unhandled SENTRY Return = SCT0 through SCT7 RET L208A: ; Handle SENTRY Return = SCT1 LD A,$01 JR L207D ; (-$11) L208E: ; Handle SENTRY Return = SCT2 LD A,$02 JR L207D ; (-$15) L2092: ; Handle SENTRY Return = SCT3 LD A,$03 JR L207D ; (-$19) L2096: ; Handle SENTRY Return = SCT4 LD A,$04 JR L207D ; (-$1d) L209A: ; Handle SENTRY Return = SCT5 LD A,$05 JP L207D ; (close enough for relative jump ??) L209F: ; Handle SENTRY Return = SCT6 LD A,$06 JP L207D ; (close enough for relative jump ??) L20A4: ; Handle SENTRY Return = SCT7 LD A,$07 JP L207D ; (close enough for relative jump ??) ; ?? ?? L20A9: ; ?? Routine LD E,(HL) ; with HL = L2172, L2176 or ?? INC HL LD D,(HL) LD L,E LD H,D ; HL = $4F29, $4F0F or ?? INC HL INC HL INC HL INC HL EX DE,HL ; DE = $4F2D, $4F13 or ?? + 4 ?? LD (HL),E INC HL LD (HL),D ; Save DE word in $4F29, $4F0F or ?? INC HL LD (HL),E INC HL LD (HL),D ; Save DE word in $4F2B, $4F11 or ?? + 2 ?? RET ; L20BB: (Not Called ??) POP HL CALL L20A9 ; to ?? JP (IY) ; to Where ?? L20C1: ; ?? Routine LD A,I ; Read I register ?? PUSH AF DI PUSH DE LD E,(HL) ; with HL = L2172 or L2176 INC HL LD D,(HL) PUSH DE POP IY ; IY = $4F29 or $4F0F INC HL LD C,(IY+$00) LD E,C LD B,(IY+$01) LD D,B LD A,(HL) INC HL CP C JR NZ,L20DC ; (+$02) LD A,(HL) CP B ; (L2174 or L2178) word NOT ($4F29 or $4F0F) ? L20DC: JR NZ,L20E3 ; (+$05) PUSH IY POP BC ; BC = $4F29 or $4F0F INC BC INC BC L20E3: INC BC INC BC LD A,(IY+$02) CP C LD A,(IY+$03) JR NZ,L20EF ; (+$01) CP B ; $4F2D or $4F13 or ($4F29 or $4F0F) + 2 word NOT ($4F2B or $4F11) ? L20EF: JR NZ,L20FB ; (+$0a) POP DE LD HL,$0001 POP AF JP PO,L20FA ; (close enough for relative jump ??) EI L20FA: RET L20FB: POP HL ; Absolute Screen Address (Was in IX) LD A,L LD (DE),A INC DE LD A,H LD (DE),A ; HL word into (DE) LD (IY+$00),C LD (IY+$01),B ; BC word into (IY) LD HL,$0000 ; Clear HL POP AF JP PO,L210F ; (close enough for relative jump ??) EI L210F: RET L2110: ; ?? Routine LD A,I ; Read I register ?? PUSH AF DI LD E,(HL) ; with HL = L2172 or L2176 INC HL LD D,(HL) PUSH DE POP IY ; IY = $4F29 or $4F0F INC HL LD C,(IY+$02) LD B,(IY+$03) LD A,(IY+$00) CP C JR NZ,L212B ; (+$04) LD A,(IY+$01) CP B ; ($4F29 or $4F0F) word NOT ($4F2B or $4F11) ? L212B: JR NZ,L2136 ; (+$09) LD HL,$0001 ; HL word = 1 POP AF JP PO,L2135 ; (close enough for relative jump ??) EI L2135: RET L2136: LD A,(BC) LD E,A INC BC LD A,(BC) LD D,A ; DE word = (($4F29 or $4F0F)) DEC BC ; BC word = ($4F29 or $4F0F) LD A,(HL) INC HL CP C JR NZ,L2143 ; (+$02) LD A,(HL) CP B ; ($4F41 or $4F27) word NOT ($4F29 or $4F0F) ? L2143: JR NZ,L214A ; (+$05) PUSH IY POP BC ; BC = $4F29 or $4F0F INC BC INC BC L214A: INC BC INC BC LD (IY+$02),C LD (IY+$03),B ; Set $4F29 or $4F0F to ($4F29 or $4F0F) + 2 or $4F2B or $4F11 LD HL,$0000 ; Clear HL POP AF JP PO,L215A ; (close enough for relative jump ??) EI L215A: RET L215B: ; Ramp Background Color (NOT Called ??) and LOCK UP ?? DI ADD A,$09 OUT (COL0R),A ; &(0) + 8 + 1 for Up in Color AND Intensity JP L215B ; (close enough for relative jump ??) L2163: ; Clear Some Variables Routine LD E,$00 LD BC,$001A LD HL,$4F43 ; Clear from $4F43 through $4F5C L216B: LD (HL),E CPI ; Decrement BC, Increment HL (ignore Compare) JP PE,L216B ; Is BC NOT 0 ? RET ; Addresses for ?? L2172: ; Data for ?? DW $4F29 DW $4F41 L2176: ; Data for ?? DW $4F0F DW $4F27 L217A: ; ?? Routine ?? BIT 2,(IX+$01) RET NZ SET 2,(IX+$01) ; (already set ??) LD A,($4F4C) CP (IX+$0B) ; is $4F4C Greater Than Block Y ? JR NC,L2194 ; (+$09) LD HL,$4F47 INC (HL) ; $4F47 + 1 ?? LD HL,L2176 JR L219B ; (+$07) L2194: LD HL,$4F48 INC (HL) ; $4F48 + 1 ?? LD HL,L2172 L219B: PUSH IX POP DE ; Copy IX to DE CALL L20C1 ; to ?? LD A,L OR H ; is HL Zero ? JR Z,L21AC ; (+$07) L21A5: LD A,R ; Set A to psudorandom 0 to 127 and copy IFF2 to Parity Flag ?? OUT (COL0R),A ; &(0) = ?? for Background Color and WAIT FOR INTERRUPT ?? JP L21A5 ; (close enough for relative jump ??) L21AC: RET L21AD: ; Interrupt Routine #1 pointed to by VECT01 in $4F56 to ?? PUSH AF PUSH BC PUSH DE PUSH HL EXX EX AF,AF' PUSH AF PUSH BC PUSH DE PUSH HL PUSH IY PUSH IX LD A,(ILINE2) OUT (INLIN),A ; &(15) set by $4F55 into Interrupt Line Register LD A,$4F LD I,A ; Set I Register to $4F for hi byte of $4F5A LD A,$5A OUT (INFBK),A ; &(13) = $5A for Interrupt Feedback to VECT02 CALL L2061 ; to ?? LD HL,$4F52 INC (HL) ; $4F52 + 1 ?? LD A,($4F4B) CP $00 ; is $4F4B Not Zero ? JP NZ,L2267 ; (close enough for relative jump ??) LD A,$01 EI LD ($4F4B),A ; Set $4F4B to 1 ?? XOR A LD ($4F44),A ; Set $4F44 to 0 ?? LD A,($4F48) LD ($4F46),A ; Store $4F48 in $4F46 L21E7: LD A,($4F4B) CP $01 ; is $4F4B Not Equal 1 ? JR NZ,L2261 ; (+$73) LD A,($4F44) OR A ; is $4F44 Not Zero ? JR NZ,L2261 ; (+$6d) LD A,($4F46) OR A ; is $4F46 Equal Zero ? JR Z,L2261 ; (+$67) LD HL,L2172 ; Point to ?? CALL L2110 ; to ?? LD A,L OR H ; is H or L Not Zero ? JR NZ,L2261 ; (+$5d) LD HL,$4F48 DEC (HL) ; $4F48 - 1 ?? LD HL,$4F46 DEC (HL) ; $4F46 - 1 ?? LD A,(BGC0R1) OUT (COL0R),A ; &(0) = $4F51 for Background Color #1 PUSH DE POP IX RES 2,(IX+$01) BIT 7,(IX+$01) JR Z,L2259 ; (+$3b) LD A,($4F52) LD C,A SUB (IX+$17) LD B,(IX+$18) CP B JR C,L222C ; (+$01) LD A,B L222C: LD C,(IX+$19) CP C JP C,L2252 ; (close enough for relative jump ??) LD B,$00 L2235: SUB C INC B CP C JP NC,L2235 ; (close enough for relative jump ??) LD C,A LD A,($4F52) SUB C LD (IX+$17),A LD (IX+$02),B LD HL,L2252 PUSH HL ; Fake a Return Address ?? LD H,(IX+$1B) LD L,(IX+$1A) ; Read Handler Address word for Block ?? DI JP (HL) ; to Block Handler ?? L2252: ; Fake Return Address after ?? Block Handler ?? BIT 7,(IX+$01) CALL NZ,L217A ; to ?? L2259: EI LD A,(BGC0R3) OUT (COL0R),A ; &(0) = $4F4E for Background Color #3 JR L21E7 ; (-$7a) L2261: ; Exit ?? DI LD A,$00 LD ($4F4B),A ; Set $4F4B to 0 ?? L2267: POP IX POP IY POP HL POP DE POP BC POP AF EX AF,AF' EXX POP HL POP DE POP BC POP AF EI RET L2277: ; Set Up Interrupt(s) Routine DI LD A,$08 OUT (INMOD),A ; &(14) = 8 for Screen Interrupt Enable Mode 0 ?? IM 2 CALL L21AD ; Direct to Interrupt Routine #1 to ?? DI RET L2283: ; Interrupt Routine #2 pointed to by VECT02 in $4F5A to ?? PUSH AF PUSH BC PUSH DE PUSH HL EXX EX AF,AF' PUSH AF PUSH BC PUSH DE PUSH HL PUSH IY PUSH IX LD A,(ILINE1) OUT (INLIN),A ; &(15) set by $4F54 for Hold Interrupt Line ?? LD A,$4F LD I,A ; Set I Register to $4F for hi byte of $4F58 LD A,$58 OUT (INFBK),A ; &(13) = $58 for Interrupt Feedback to VECT03 LD A,(RMPCLR) OR A ; $4F0E for Freeze Colors ? JR Z,L22C1 ; (+$1d) LD HL,COLORS ; RAM Color table LD B,$03 L22A9: LD A,(HL) ; Change Colors Up ADD A,$08 LD (HL),A INC HL ; COL3L through COL1L DJNZ L22A9 ; (-$07) INC HL ; Skip COL0L LD B,$03 L22B3: LD A,(HL) INC A ; Change Intensity Up LD (HL),A INC HL ; COL3R through COL1R DJNZ L22B3 ; (-$06) LD HL,COLORS ; RAM Color table again LD BC,$080B ; Out COLBX Port eight times OTIR L22C1: LD A,($4F4B) CP $01 ; is $4F4B Not Equal to 1 ? JR NZ,L22CD ; (+$05) LD A,$02 LD ($4F4B),A ; Set $4F4B to 2 ?? L22CD: LD A,($4F4A) CP $00 ; is $4F4A Not Equal to 0 ? JP NZ,L2267 ; (close enough for relative jump ??) LD A,$01 EI LD ($4F4A),A ; Set $4F4A to 1 ?? XOR A LD ($4F44),A ; Set $4F44 to 0 ?? LD A,($4F47) LD ($4F45),A ; Store $4F47 in $4F45 L22E5: LD A,($4F4A) CP $01 ; is $4F4A Not Equal to 1 ? JR NZ,L235F ; (+$73) LD A,($4F44) OR A ; is $4F44 Not Equal to 0 ? JR NZ,L235F ; (+$6d) LD A,($4F45) OR A ; is $4F45 Equal to 0 ? JR Z,L235F ; (+$67) LD HL,L2176 CALL L2110 ; to ?? LD A,L OR H ; is H or L set to Not Zero ? JR NZ,L235F ; (+$5d) LD HL,$4F47 DEC (HL) ; $4F47 - 1 LD HL,$4F45 DEC (HL) ; $4F45 - 1 LD A,(BGC0R2) OUT (COL0R),A ; &(0) = $4F50 for Background Color #2 PUSH DE POP IX RES 2,(IX+$01) BIT 7,(IX+$01) JR Z,L2357 ; (+$3b) LD A,($4F52) LD C,A ; (C = $4F52 then not used ??) SUB (IX+$17) LD B,(IX+$18) CP B JR C,L232A ; (+$01) LD A,B L232A: LD C,(IX+$19) CP C JP C,L2350 ; (close enough for relative jump ??) LD B,$00 L2333: SUB C INC B CP C JP NC,L2333 ; (close enough for relative jump ??) LD C,A LD A,($4F52) SUB C LD (IX+$17),A LD (IX+$02),B LD HL,L2350 PUSH HL ; Fake a Return Address ?? LD H,(IX+$1B) LD L,(IX+$1A) ; Read Handler Address word for Block ?? DI JP (HL) ; to Block Handler ?? L2350: ; Fake Return Address for ?? Block Handler ?? BIT 7,(IX+$01) CALL NZ,L217A ; to ?? L2357: EI LD A,(BGC0R3) OUT (COL0R),A ; &(0) = $4F4E for Background Color 3 JR L22E5 ; (-$7a) L235F: ; Exit ?? DI LD A,$00 LD ($4F4A),A ; Set $4F4A to 0 ?? JP L2267 ; (close enough for relative jump ??) L2368: ; Interrupt Routine #3 pointed to by VECT03 in $4F58 to ?? PUSH AF LD A,($4F53) OUT ($0F),A LD A,$4F LD I,A ; Set I Register to $4F for hi byte of $4F56 LD A,$56 OUT (INFBK),A ; &(13) = $56 for Interrupt Feedback to VECT01 LD A,($4F4A) CP $01 JR NZ,L2382 ; (+$05) LD A,$02 LD ($4F4A),A L2382: POP AF EI RET L2385: ; Convert Relative to Absolute (with A = MAGIC to Write) Routine AND $FC LD B,A LD A,D LD C,A LD L,H LD H,$00 ADD HL,HL ; ?? Times 40 ?? ADD HL,HL ADD HL,HL LD D,H LD E,L ADD HL,HL ADD HL,HL ADD HL,DE SRL A ; Divide ?? by 4 ?? SRL A LD E,A LD D,$00 ADD HL,DE LD A,C AND $03 BIT 6,B JR Z,L23A9 ; (+$05) NEG JR NZ,L23A9 ; (+$01) DEC HL L23A9: AND $03 OR B RET L23AD: ; Draw Pattern in BC (size in DE) to HL (oriented by A) Routine OUT (MAGIC),A ; &(12) = ?? for Magic Register ?? BIT 7,A ; Test for FLIP (non-standard Invert) JR NZ,L23E1 ; (+$2e) BIT 6,A ; Test for FLOP JR Z,L23CC ; (+$15) L23B7: PUSH DE PUSH HL L23B9: LD A,(BC) LD (HL),A DEC HL ; Left for Next byte INC BC DEC E ; Last byte in Row ? JR NZ,L23B9 ; (-$07) LD (HL),E ; Additional 0 Write for Shifter POP HL ; Recenter to First byte written LD DE,$0028 ADD HL,DE ; Down to Next line POP DE DEC D JR NZ,L23B7 ; (-$13) JR L23DF ; (+$13) L23CC: PUSH DE PUSH HL L23CE: LD A,(BC) LD (HL),A INC HL ; Right a byte INC BC DEC E ; Last byte in Row ? JR NZ,L23CE ; (-$07) LD (HL),E ; Additional 0 Write for Shifter POP HL ; Recenter to First byte written LD DE,$0028 ADD HL,DE ; Down to Next line POP DE DEC D JR NZ,L23CC ; (-$13) L23DF: JR L2413 ; (+$32) L23E1: BIT 6,A ; Test for FLOP JR Z,L23FD ; (+$18) L23E5: PUSH DE PUSH HL L23E7: LD A,(BC) LD (HL),A DEC HL ; Left a byte INC BC DEC E ; Last byte in Row ? JR NZ,L23E7 ; (-$07) LD (HL),E ; Additional 0 Write for Shifter POP HL ; Recenter to First byte written LD DE,$0028 SCF ; Clear Carry Flag (in two steps) CCF SBC HL,DE ; Up to Previous line POP DE DEC D JR NZ,L23E5 ; (-$16) JR L2413 ; (+$16) L23FD: PUSH DE PUSH HL L23FF: LD A,(BC) LD (HL),A INC HL ; Right a byte INC BC DEC E ; Last byte in Row ? JR NZ,L23FF ; (-$07) LD (HL),E ; Additional 0 Write for Shifter POP HL ; Recenter to First byte written LD DE,$0028 SCF ; Clear Carry Flag (in two steps) CCF SBC HL,DE ; Up to Previous line POP DE DEC D JR NZ,L23FD ; (-$16) L2413: ; Common Exit for all Draw Patterns IN A,(INTST) ; Read &(8) for Intercept Status Register RET L2416: ; Read Block for Draw Routine LD L,(IX+$12) LD H,(IX+$13) ; Read Pattern Base Address INC HL INC HL LD E,(HL) ; Save Width in Bytes INC HL LD D,(HL) ; Save Height in Pixels INC HL LD B,H LD C,L ; Pattern Data Starts Here LD L,(IX+$0D) LD H,(IX+$0E) ; Absolute MAGIC Address IN A,(INTST) ; Read &(8) for Intercept Status Register (ignored) ?? LD A,(IX+$00) ; Read MAGIC to Write with CALL L23AD ; to Draw Pattern RET L2433: ; Read Block for Draw (with A = ??) Routine LD L,(IX+$12) LD H,(IX+$13) ; Read Pattern Base Address LD C,(IX+$00) ; Read MAGIC to Write with LD A,(IX+$06) ; Read X Location BIT 6,C ; is FLOP Not Set ? JR Z,L2446 ; (+$03) ADD A,(HL) ; X + Width in Bytes JR L2447 ; (+$01) L2446: SUB (HL) ; X - Width in Bytes L2447: INC HL LD D,A ; Save Starting X byte LD A,(IX+$0B) ; Read Y Location BIT 7,C ; is (non-standard) FLIP Not Set ? JR Z,L2454 ; (+$04) ADD A,(HL) DEC A ; Y + Height in Pixels - 1 JR L2455 ; (+$01) L2454: SUB (HL) ; Y - Height in Pixels L2455: INC HL PUSH HL ; Save Pattern Data Starts Here pointer LD H,A ; Save Starting Y line IN A,(INTST) ; Read &(8) for Intercept Status Register (ignored) ?? LD A,C ; Read MAGIC to Write with CALL L2385 ; to Convert Relative to Absolute with D = ?? LD (IX+$00),A ; Save MAGIC to Write with (with Shift Added In) EX (SP),HL ; Exchange Pattern Data Starts Here pointer with HL ?? LD E,(HL) INC HL LD D,(HL) ; DE = Pattern Data Starts Here pointer ?? INC HL LD B,H LD C,L ; BC = Pattern Data Starts Here pointer + 2 ?? POP HL ; HL = ?? LD (IX+$0E),H ; ?? LD (IX+$0D),L ; Supposed to be $0F ?? JP L23AD ; to Draw Pattern (close enough for relative jump ??) L2472: ; Add Delta X to X, and Delta Y to Y, times A ?? Routine OR A RET Z LD B,A PUSH BC PUSH HL POP IY RES 3,(IX+$07) RES 3,(IX+$0C) LD H,(IX+$06) ; Read Block X LD L,(IX+$05) LD D,(IX+$04) ; Read Delta X LD E,(IX+$03) L248D: ADD HL,DE DJNZ L248D ; (-$03) BIT 0,(IX+$07) JR Z,L24C3 ; (+$2d) LD A,H LD B,(IY+$00) CP $CF JR NC,L24A9 ; (+$0b) CP B JR C,L24A9 ; (+$08) LD B,(IY+$01) CP B JR C,L24C3 ; (+$1c) JR Z,L24C3 ; (+$1a) L24A9: SET 3,(IX+$07) LD H,B LD L,$00 BIT 1,(IX+$07) JR Z,L24C3 ; (+$0d) LD A,D CPL LD D,A LD A,E CPL LD E,A INC DE LD (IX+$03),E LD (IX+$04),D ; Save Delta X L24C3: LD (IX+$05),L LD (IX+$06),H ; Save Block X POP BC LD H,(IX+$0B) ; Read Block Y LD L,(IX+$0A) LD D,(IX+$09) ; Read Delta Y LD E,(IX+$08) L24D6: ADD HL,DE DJNZ L24D6 ; (-$03) BIT 0,(IX+$0C) JR Z,L250C ; (+$2d) LD A,H LD B,(IY+$02) CP $CF JR NC,L24F2 ; (+$0b) CP B JR C,L24F2 ; (+$08) LD B,(IY+$03) CP B JR C,L250C ; (+$1c) JR Z,L250C ; (+$1a) L24F2: SET 3,(IX+$0C) LD H,B LD L,$00 BIT 1,(IX+$0C) JR Z,L250C ; (+$0d) LD A,D CPL LD D,A LD A,E CPL LD E,A INC DE LD (IX+$08),E LD (IX+$09),D ; Save Delta Y L250C: LD (IX+$0A),L LD (IX+$0B),H ; Save Y RET L2513: ; Set Up Block for Draw Routine LD A,(IX+$1D) ; Read Delay CP $FF ; is Block Draw Turned Off ? RET Z BIT 4,(IX+$07) ; is ?? JR Z,L2527 ; (+$08) LD L,(IX+$20) ; Read ?? LD H,(IX+$21) ; Read ?? JR L252D ; (+$06) L2527: LD L,(IX+$1E) ; Read ?? LD H,(IX+$1F) ; Read ?? L252D: DEC (IX+$1D) ; Count Down Delay and Return if Not Zero ? JR NZ,L255A ; (+$28) PUSH HL LD A,(IX+$1C) ; Read Header Count INC A ; was Header Count Equal to 255 ? JR Z,L2540 ; (+$07) LD DE,$0003 LD B,A ; Header Count + 1 L253D: ADD HL,DE ; Point to Next Header DJNZ L253D ; (-$03) L2540: LD B,A LD A,(HL) ; Header Data for ?? POP DE OR A ; is Header+0 Not Equal Zero ? JR NZ,L254A ; (+$04) EX DE,HL ; Loop Back to First Header ?? LD A,(HL) ; Read New Delay LD B,$00 ; Reset Header Count L254A: LD (IX+$1D),A ; Save Delay INC HL LD A,(HL) LD (IX+$12),A ; Save Hi byte Data Address INC HL LD A,(HL) LD (IX+$13),A ; Save Low byte Data Address LD (IX+$1C),B ; Save Header Count L255A: RET L255B: ; Read (HL) bytes from HL+1 to IX ?? and then ?? Routine DI PUSH IX POP DE LD C,(HL) INC HL LD B,$00 SYSTEM MOVE CALL L2433 ; to Set Up for Draw (with A = ??) LD A,($4F52) DEC A LD (IX+$17),A CALL L217A ; to ?? SET 7,(IX+$01) RET ; L2577: Not Used ?? POP DE POP HL PUSH BC PUSH IX PUSH IY PUSH DE POP IX CALL L255B ; to ?? POP IY POP IX POP BC JP (IY) ; to Where ?? L258B: ; Preset Some Variables Routine CALL L2012 ; to Initialize HVG System Routines CALL L203D ; to Clear Jump Address Table and User Time Bases CALL L2163 ; to Clear Some Variables LD HL,L21AD LD (VECT01),HL ; Set $4F56 word to L21AD for Interrupt Routine #1 LD A,$4B LD ($4F53),A ; Set $4F53 to 75 ?? XOR A LD ($4F4B),A ; Set $4F4B to 0 ?? XOR A LD ($4F4A),A ; Set $4F4A to 0 ?? LD HL,L2283 LD (VECT02),HL ; Set $4F5A word to L2283 for Interrupt Routine #2 LD A,$BE LD (ILINE2),A ; Set $4F55 to 190 for Interrupt Line Register LD HL,L2368 LD (VECT03),HL ; Set $4F58 word to L2368 for Interrupt Routine #3 LD A,$32 LD (ILINE1),A ; Set $4F54 to 50 ?? XOR A LD ($4F48),A ; Set $4F48 to 0 ?? XOR A LD ($4F47),A ; Set $4F47 to 0 ?? LD A,$32 LD ($4F4C),A ; Set $4F4C to 50 ?? XOR A LD ($4F52),A ; Set $4F52 to 0 ?? XOR A LD ($4F44),A ; Set $4F44 to 0 ?? LD HL,L2172 CALL L20A9 ; to ?? LD HL,L2176 CALL L20A9 ; to ?? XOR A LD (BGC0RX),A ; Set $4F4F to 0 for Black Background Color #X (not used) XOR A LD (BGC0R1),A ; Set $4F51 to 0 for Black Background Color #1 XOR A LD (BGC0R2),A ; Set $4F50 to 0 for Black Background Color #2 XOR A LD ($4F4D),A ; Set $4F4D to 0 ?? XOR A LD (BGC0R3),A ; Set $4F4E to 0 for Black Background Color #3 RET ; L25F3 ; Not Called ?? PUSH BC CALL L258B ; to Preset Some Variables ?? POP BC JP (IY) ; to Where ?? L25FA: ; ?? Routine XOR A BIT 2,(IX+$07) RET Z BIT 4,(IX+$07) RET NZ LD L,(IX+$0F) LD H,(IX+$10) LD B,(IX+$11) LD E,(HL) INC HL LD D,(HL) PUSH DE POP IY EXX BIT 6,(IX+$0C) JR Z,L2620 ; (+$05) LD BC,$0301 JR L262E ; (+$0e) L2620: LD H,(IX+$13) LD L,(IX+$12) INC HL INC HL LD A,(HL) SLA A LD B,A INC HL LD C,(HL) L262E: LD H,(IX+$06) ; Read Block X LD L,(IX+$0B) ; Read Block Y EXX L2635: EXX BIT 4,(IY+$07) JR NZ,L2694 ; (+$58) BIT 7,(IY+$01) JR Z,L2694 ; (+$52) BIT 6,(IY+$0C) JR Z,L2653 ; (+$0b) LD A,(IY+$02) OR A JR Z,L2694 ; (+$46) LD DE,$0301 JR L2663 ; (+$10) L2653: PUSH HL LD H,(IY+$13) LD L,(IY+$12) INC HL INC HL LD A,(HL) SLA A LD D,A INC HL LD E,(HL) POP HL L2663: LD A,(IY+$06) ; Read Block X EX AF,AF' LD A,(IY+$0B) ; Read Block Y EX DE,HL ADD HL,BC EX DE,HL INC E SRA E SUB L JP M,L267B ; (close enough for relative jump ??) CP E JP NC,L2694 ; (close enough for relative jump ??) JP L267F ; (close enough for relative jump ??) L267B: ADD A,E JP M,L2694 ; (close enough for relative jump ??) L267F: EX AF,AF' SUB H JP M,L268B ; (close enough for relative jump ??) CP D JP NC,L2694 ; (close enough for relative jump ??) JP L268F ; (close enough for relative jump ??) L268B: ADD A,D JP M,L2694 ; (close enough for relative jump ??) L268F: LD A,$01 AND A JR L2695 ; (+$01) L2694: XOR A L2695: EXX JR Z,L269E ; (+$06) SET 5,(IY+$07) LD B,$01 L269E: INC HL LD E,(HL) INC HL LD D,(HL) PUSH DE POP IY DEC B JP NZ,L2635 ; (close enough for relative jump ??) RET L26AA: ; ?? Routine CALL L2416 ; to ?? BIT 4,(IX+$16) JR Z,L26C4 ; (+$11) LD B,(IX+$02) L26B6: DEC (IX+$22) JR NZ,L26C0 ; (+$05) RES 7,(IX+$01) RET L26C0: DJNZ L26B6 ; (-$0c) JR L26D6 ; (+$12) L26C4: BIT 5,(IX+$16) JR Z,L26D6 ; (+$0c) SET 4,(IX+$16) LD (IX+$1C),$00 LD (IX+$1D),$01 L26D6: CALL L2513 ; to Set Up Block for Draw BIT 3,(IX+$01) JP NZ,L2416 ; (NOT close enough for relative jump ??) LD L,(IX+$14) LD H,(IX+$15) ; New Block Base Address ?? LD A,(IX+$02) ; Read Speed CALL L2472 ; to Add Delta X to X, and Delta Y to Y, times A CALL L2433 ; to Set Up for Draw (with A = ??) OR A RET Z CALL L25FA ; to ?? OR A RET Z SET 5,(IX+$07) RET ; Graphics Data Starts ?? L26FB: ; 72 bytes of 4x17 Data #1 for a Cottage DB $08,$08 ; X, Y Offsets to Hot Spot DB $04,$11 ; W Bytes by H Lines Pattern Size DB $00,$50,$15,$00 ; . . . . 1 1 . . . 1 1 1 . . . . DB $01,$54,$55,$40 ; . . . 1 1 1 1 . 1 1 1 1 1 . . . DB $05,$55,$55,$50 ; . . 1 1 1 1 1 1 1 1 1 1 1 1 . . DB $15,$55,$55,$54 ; . 1 1 1 1 1 1 1 1 1 1 1 1 1 1 . DB $55,$5A,$AA,$A8 ; 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 . DB $AA,$AA,$AA,$A8 ; 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 . DB $A9,$A9,$59,$58 ; 2 2 2 1 2 2 2 1 1 1 2 1 1 1 2 . DB $97,$59,$D9,$D8 ; 2 1 1 3 1 1 2 1 3 1 2 1 3 1 2 . DB $A9,$A9,$D9,$D8 ; 2 2 2 1 2 2 2 1(3)1 2 1 3 1 2 . DB $AA,$A9,$59,$58 ; 2 2 2 2 2 2 2 1 1 1 2 1 1 1 2 . DB $A5,$58,$00,$08 ; 2 2 1 1 1 1 2 . . . . . . . 2 . DB $A7,$DA,$AA,$A8 ; 2 2 1 3 3 1 2 2 2 2 2 2 2 2 2 . DB $A7,$DA,$A5,$A8 ; 2 2 1 3 3 1 2 2 2 2 1 1 2 2 2 . DB $A5,$5A,$95,$68 ; 2 2 1 1 1 1 2 2 2 1 1 1 1 2 2 . DB $A0,$0A,$99,$68 ; 2 2 . . . . 2 2 2 1 2 1 1 2 2 . DB $AA,$AA,$95,$68 ; 2 2 2 2 2 2 2 2 2 1 1 1 1 2 2 . DB $AA,$AA,$95,$68 ; 2 2 2 2 2 2 2 2 2 1 1 1 1 2 2 . L2743: ; 72 bytes of 4x17 Data #2 for a Cottage DB $08,$08 ; X, Y Offsets to Hot Spot DB $04,$11 ; W Bytes by H Lines Pattern Size DB $00,$50,$15,$00 ; . . . . 1 1 . . . 1 1 1 . . . . DB $01,$54,$55,$40 ; . . . 1 1 1 1 . 1 1 1 1 1 . . . DB $05,$55,$55,$50 ; . . 1 1 1 1 1 1 1 1 1 1 1 1 . . DB $15,$55,$55,$54 ; . 1 1 1 1 1 1 1 1 1 1 1 1 1 1 . DB $55,$5A,$AA,$A8 ; 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 . DB $AA,$AA,$AA,$A8 ; 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 . DB $A9,$A9,$59,$58 ; 2 2 2 1 2 2 2 1 1 1 2 1 1 1 2 . DB $94,$59,$19,$18 ; 2 1 1 . 1 1 2 1 . 1 2 1 . 1 2 . DB $A9,$A9,$19,$18 ; 2 2 2 1 2 2 2 1(.)1 2 1 . 1 2 . DB $AA,$A9,$59,$58 ; 2 2 2 2 2 2 2 1 1 1 2 1 1 1 2 . DB $A5,$58,$00,$08 ; 2 2 1 1 1 1 2 . . . . . . . 2 . DB $A4,$1A,$AA,$A8 ; 2 2 1 . . 1 2 2 2 2 2 2 2 2 2 . DB $A4,$1A,$A5,$A8 ; 2 2 1 . . 1 2 2 2 2 1 1 2 2 2 . DB $A5,$5A,$95,$68 ; 2 2 1 1 1 1 2 2 2 1 1 1 1 2 2 . DB $A0,$0A,$99,$68 ; 2 2 . . . . 2 2 2 1 2 1 1 2 2 . DB $AA,$AA,$95,$68 ; 2 2 2 2 2 2 2 2 2 1 1 1 1 2 2 . DB $AA,$AA,$95,$68 ; 2 2 2 2 2 2 2 2 2 1 1 1 1 2 2 . L278B: ; Header #1 for a Cottage DB $17 DW L26FB L278E: ; Header #2 for a Cottage DB $0F DW L2743 L2791: ; Loop Back for a Cottage DB $00 DW L278B L2794: ; 129 bytes of 5x25 Data #1 for a Fire Station DB $0B,$0C ; X, Y Offsets to Hot Spot DB $05,$19 ; W Bytes by H Lines Pattern Size DB $33,$30,$00,$00,$00 ; . 3 . 3 . 3 . . . . . . . . . . . . . . DB $CC,$CC,$00,$00,$00 ; 3 . 3 . 3 . 3 . . . . . . . . . . . . . DB $00,$33,$00,$80,$00 ; . . . . . 3 . 3 . . . . 2 . . . . . . . DB $00,$15,$42,$A0,$00 ; . . . . . 1 1 1 1 . . 2 2 2 . . . . . . DB $00,$10,$4A,$68,$00 ; . . . . . 1 . . 1 . 2 2 1 2 2 . . . . . DB $00,$10,$69,$DA,$00 ; . . . . . 1 . . 1 2 2 1 3 1 2 2 . . . . DB $00,$10,$A7,$F6,$80 ; . . . . . 1 . . 2 2 1 3 3 3 1 2 2 . . . DB $00,$12,$9F,$7D,$A0 ; . . . . . 1 . 2 2 1 3 3 1 3 3 1 2 2 . . DB $00,$1A,$55,$55,$68 ; . . . . . 1 2 2 1 1 1 1 1 1 1 1 1 2 2 . DB $00,$2A,$AA,$AA,$AA ; . . . . . 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 DB $00,$15,$55,$55,$55 ; . . . . . 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 DB $00,$1D,$D1,$D1,$DD ; . . . . . 1 2 1 2 1 . 1 2 1 . 1 2 1 2 1 DB $00,$15,$55,$55,$55 ; . . . . . 1 1 1 1 1 1(1)1 1 1 1 1 1 1 1 DB $00,$19,$55,$95,$59 ; . . . . . 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 DB $00,$19,$DD,$9D,$D9 ; . . . . . 1 2 1 3 1 3 1 2 1 3 1 3 1 2 1 DB $00,$19,$55,$95,$59 ; . . . . . 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 DB $00,$19,$DD,$9D,$D9 ; . . . . . 1 2 1 3 1 3 1 2 1 3 1 3 1 2 1 DB $00,$19,$55,$95,$59 ; . . . . . 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 DB $00,$15,$55,$55,$55 ; . . . . . 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 DB $00,$1D,$15,$55,$1D ; . . . . . 1 3 1 . 1 1 1 1 1 1 1 . 1 3 1 DB $00,$15,$AA,$6A,$95 ; . . . . . 1 1 1 2 2 2 2 1 2 2 2 2 1 1 1 DB $00,$1D,$AA,$6A,$9D ; . . . . . 1 3 1 2 2 2 2 1 2 2 2 2 1 3 1 DB $00,$15,$A9,$5A,$95 ; . . . . . 1 1 1 2 2 2 1 1 1 2 2 2 1 1 1 DB $00,$1D,$AA,$6A,$9D ; . . . . . 1 3 1 2 2 2 2 1 2 2 2 2 1 3 1 DB $00,$15,$55,$55,$55 ; . . . . . 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 L2815: ; 129 bytes of 5x25 Data #2 for a Fire Station DB $0A,$0C ; X, Y Offsets to Hot Spot DB $05,$19 ; W Bytes by H Lines Pattern Size DB $33,$30,$00,$00,$00 ; . 3 . 3 . 3 . . . . . . . . . . . . . . DB $CC,$CC,$00,$00,$00 ; 3 . 3 . 3 . 3 . . . . . . . . . . . . . DB $00,$33,$02,$00,$00 ; . . . . . 3 . 3 . . . 2 . . . . . . . . DB $00,$55,$0A,$80,$00 ; . . . . 1 1 1 1 . . 2 2 2 . . . . . . . DB $00,$41,$29,$A0,$00 ; . . . . 1 . . 1 . 2 2 1 2 2 . . . . . . DB $00,$41,$A4,$68,$00 ; . . . . 1 . . 1 2 2 1 . 1 2 2 . . . . . DB $00,$42,$90,$1A,$00 ; . . . . 1 . . 2 2 1 . . . 1 2 2 . . . . DB $00,$4A,$41,$06,$80 ; . . . . 1 . 2 2 1 . . 1 . . 1 2 2 . . . DB $00,$69,$55,$55,$A0 ; . . . . 1 2 2 1 1 1 1 1 1 1 1 1 2 2 . . DB $00,$AA,$AA,$AA,$A8 ; . . . . 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 . DB $00,$55,$55,$55,$54 ; . . . . 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 . DB $00,$44,$44,$44,$44 ; . . . . 1 . 1 . 1 . 1 . 1 . 1 . 1 . 1 . DB $00,$55,$55,$55,$54 ; . . . . 1 1 1 1 1 1(1)1 1 1 1 1 1 1 1 . DB $00,$65,$56,$55,$64 ; . . . . 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 . DB $00,$64,$46,$44,$64 ; . . . . 1 2 1 . 1 . 1 2 1 . 1 . 1 2 1 . DB $00,$65,$56,$55,$64 ; . . . . 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 . DB $00,$64,$46,$44,$64 ; . . . . 1 2 1 . 1 . 1 2 1 . 1 . 1 2 1 . DB $00,$65,$56,$55,$64 ; . . . . 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 . DB $00,$55,$55,$55,$54 ; . . . . 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 . DB $00,$44,$55,$54,$44 ; . . . . 1 . 1 . 1 1 1 1 1 1 1 . 1 . 1 . DB $00,$56,$A9,$AA,$54 ; . . . . 1 1 1 2 2 2 2 1 2 2 2 2 1 1 1 . DB $00,$46,$A9,$AA,$44 ; . . . . 1 . 1 2 2 2 2 1 2 2 2 2 1 . 1 . DB $00,$56,$A5,$6A,$54 ; . . . . 1 1 1 2 2 2 1 1 1 2 2 2 1 1 1 . DB $00,$46,$A9,$AA,$44 ; . . . . 1 . 1 2 2 2 2 1 2 2 2 2 1 . 1 . DB $00,$55,$55,$55,$54 ; . . . . 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 . L2896: ; Header #1 for a Fire Station DB $04 DW L2794 L2899: ; Header #2 for a Fire Station DB $02 DW L2815 L289C: ; Loop Back for a Fire Station DB $00 DW L2896 L289F: ; 154 bytes of 24x25 Data #1 for a House DB $0C,$0C ; X, Y Offsets to Hot Spot DB $06,$19 ; W Bytes by H Lines Pattern Size DB $00,$00,$00,$40,$00,$00 ; . . . . . . . . . . . . 1 . . . . . . . . . . . DB $00,$00,$01,$50,$00,$00 ; . . . . . . . . . . . 1 1 1 . . . . . . . . . . DB $00,$0A,$A5,$56,$A0,$00 ; . . . . . . 2 2 2 2 1 1 1 1 1 2 2 2 . . . . . . DB $00,$2A,$95,$55,$A8,$00 ; . . . . . 2 2 2 2 1 1 1 1 1 1 1 2 2 2 . . . . . DB $00,$AA,$95,$55,$AA,$00 ; . . . . 2 2 2 2 2 1 1 1 1 1 1 1 2 2 2 2 . . . . DB $02,$AA,$BF,$FF,$AA,$80 ; . . . 2 2 2 2 2 2 3 3 3 3 3 3 3 2 2 2 2 2 . . . DB $0A,$AA,$B0,$03,$AA,$A0 ; . . 2 2 2 2 2 2 2 3 . . . . . 3 2 2 2 2 2 2 . . DB $2A,$AA,$B1,$53,$FF,$F0 ; . 2 2 2 2 2 2 2 2 3 . 1 1 1 . 3 3 3 3 3 3 3 . . DB $3F,$FF,$F4,$47,$75,$70 ; . 3 3 3 3 3 3 3 3 3 1 . 1 . 1 3 1 3 1 1 1 3 . . DB $35,$55,$74,$47,$74,$70 ; . 3 1 1 1 1 1 1 1 3 1 1 1 1 1 3 1 3 1 1 1 3 . . DB $34,$10,$75,$57,$75,$70 ; . 3 1 . . 1 . . 1 3 1 1 1 1 1 3 1 3 1 1 1 3 . . DB $35,$55,$75,$57,$74,$70 ; . 3 1 1 1 1 1 1 1 3 1 1 1 1 1 3 1 3 1 . 1 3 . . DB $3F,$FF,$F4,$47,$75,$70 ; . 3 3 3 3 3 3 3 3 3 1 .(1). 1 3 1 3 1 1 1 3 . . DB $33,$33,$34,$47,$74,$70 ; . 3 . 3 . 3 . 3 . 3 1 . 1 . 1 3 1 3 1 . 1 3 . . DB $33,$33,$31,$53,$75,$70 ; . 3 . 3 . 3 . 3 . 3 . 1 1 1 . 3 1 3 1 1 1 3 . . DB $33,$33,$30,$03,$74,$70 ; . 3 . 3 . 3 . 3 . 3 . . . . . 3 1 3 1 . 1 3 . . DB $33,$33,$30,$C3,$75,$70 ; . 3 . 3 . 3 . 3 . 3 . . 3 . . 3 1 3 1 1 1 3 . . DB $33,$33,$33,$73,$74,$70 ; . 3 . 3 . 3 . 3 . 3 . 3 1 3 . 3 1 3 1 . 1 3 . . DB $F3,$33,$3D,$5F,$75,$7C ; 3 3 . 3 . 3 . 3 . 3 3 1 1 1 3 3 1 3 1 1 1 3 3 . DB $FF,$FF,$F5,$97,$FF,$FC ; 3 3 3 3 3 3 3 3 3 3 1 1 2 1 1 3 3 3 3 3 3 3 3 . DB $35,$55,$56,$A5,$55,$70 ; . 3 1 1 1 1 1 1 1 1 1 2 2 2 1 1 1 1 1 1 1 3 . . DB $34,$10,$56,$A5,$40,$70 ; . 3 1 . . 1 . . 1 1 1 2 2 2 1 1 1 . . . 1 3 . . DB $34,$10,$55,$A5,$40,$70 ; . 3 1 . . 1 . . 1 1 1 1 2 2 1 1 1 . . . 1 3 . . DB $35,$55,$56,$A5,$55,$70 ; . 3 1 1 1 1 1 1 1 1 1 2 2 2 1 1 1 1 1 1 1 3 . . DB $3F,$FF,$FF,$FF,$FF,$F0 ; . 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 . . L2939: ; 154 bytes of 24x25 Data #2 for a House DB $0C,$0C ; X, Y Offsets to Hot Spot DB $06,$19 ; W Bytes by H Lines Pattern Size DB $00,$00,$00,$40,$00,$00 ; . . . . . . . . . . . . 1 . . . . . . . . . . . DB $00,$00,$01,$50,$00,$00 ; . . . . . . . . . . . 1 1 1 . . . . . . . . . . DB $00,$0A,$A5,$56,$A0,$00 ; . . . . . . 2 2 2 2 1 1 1 1 1 2 2 2 . . . . . . DB $00,$2A,$95,$55,$A8,$00 ; . . . . . 2 2 2 2 1 1 1 1 1 1 1 2 2 2 . . . . . DB $00,$AA,$95,$55,$AA,$00 ; . . . . 2 2 2 2 2 1 1 1 1 1 1 1 2 2 2 2 . . . . DB $02,$AA,$BF,$FF,$AA,$80 ; . . . 2 2 2 2 2 2 3 3 3 3 3 3 3 2 2 2 2 2 . . . DB $0A,$AA,$B0,$03,$AA,$A0 ; . . 2 2 2 2 2 2 2 3 . . . . . 3 2 2 2 2 2 2 . . DB $2A,$AA,$B1,$53,$FF,$F0 ; . 2 2 2 2 2 2 2 2 3 . 1 1 1 . 3 3 3 3 3 3 3 . . DB $3F,$FF,$F4,$47,$75,$70 ; . 3 3 3 3 3 3 3 3 3 1 . 1 . 1 3 1 3 1 1 1 3 . . DB $35,$55,$74,$47,$74,$70 ; . 3 1 1 1 1 1 1 1 3 1 . 1 . 1 3 1 3 1 . 1 3 . . DB $34,$10,$75,$57,$75,$70 ; . 3 1 . . 1 . . 1 3 1 1 1 1 1 3 1 3 1 1 1 3 . . DB $35,$55,$75,$57,$74,$70 ; . 3 1 1 1 1 1 1 1 3 1 1 1 1 1 3 1 3 1 . 1 3 . . DB $3F,$FF,$F4,$47,$75,$70 ; . 3 3 3 3 3 3 3 3 3 1 .(1). 1 3 1 3 1 1 1 3 . . DB $33,$33,$34,$47,$74,$70 ; . 3 . 3 . 3 . 3 . 3 1 . 1 . 1 3 1 3 1 . 1 3 . . DB $33,$33,$31,$53,$75,$70 ; . 3 . 3 . 3 . 3 . 3 . 1 1 1 . 3 1 3 1 1 1 3 . . DB $33,$33,$30,$03,$74,$70 ; . 3 . 3 . 3 . 3 . 3 . . . . . 3 1 3 1 . 1 3 . . DB $33,$33,$30,$C3,$75,$70 ; . 3 . 3 . 3 . 3 . 3 . . 3 . . 3 1 3 1 1 1 3 . . DB $33,$33,$33,$73,$74,$70 ; . 3 . 3 . 3 . 3 . 3 . 3 1 3 . 3 1 3 1 . 1 3 . . DB $F3,$33,$3D,$5F,$75,$7C ; 3 3 . 3 . 3 . 3 . 3 3 1 1 1 3 3 1 3 1 1 1 3 3 . DB $FF,$FF,$F5,$97,$FF,$FC ; 3 3 3 3 3 3 3 3 3 3 1 1 2 1 1 2 3 3 3 3 3 3 3 . DB $35,$55,$56,$A5,$55,$70 ; . 3 1 1 1 1 1 1 1 1 1 2 2 2 1 1 1 1 1 1 1 3 . . DB $37,$DF,$56,$A5,$7F,$70 ; . 3 1 3 3 1 3 3 1 1 1 2 2 2 1 1 1 3 3 3 1 3 . . DB $37,$DF,$55,$A5,$7F,$70 ; . 3 1 3 3 1 3 3 1 1 1 1 2 2 1 1 1 3 3 3 1 3 . . DB $35,$55,$56,$A5,$55,$70 ; . 3 1 1 1 1 1 1 1 1 1 2 2 2 1 1 1 1 1 1 1 3 . . DB $3F,$FF,$FF,$FF,$FF,$F0 ; . 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 . . L29D3: ; 154 bytes of 24x25 Data #3 for a House DB $0C,$0C ; X, Y Offsets to Hot Spot DB $06,$19 ; W Bytes by H Lines Pattern Size DB $00,$00,$00,$40,$00,$00 ; . . . . . . . . . . . . 1 . . . . . . . . . . . DB $00,$00,$01,$50,$00,$00 ; . . . . . . . . . . . 1 1 1 . . . . . . . . . . DB $00,$0A,$A5,$56,$A0,$00 ; . . . . . . 2 2 2 2 1 1 1 1 1 2 2 2 . . . . . . DB $00,$2A,$95,$55,$A8,$00 ; . . . . . 2 2 2 2 1 1 1 1 1 1 1 2 2 2 . . . . . DB $00,$AA,$95,$55,$AA,$00 ; . . . . 2 2 2 2 2 1 1 1 1 1 1 1 2 2 2 2 . . . . DB $02,$AA,$BF,$FF,$AA,$80 ; . . . 2 2 2 2 2 2 3 3 3 3 3 3 3 2 2 2 2 2 . . . DB $0A,$AA,$B0,$03,$AA,$A0 ; . . 2 2 2 2 2 2 2 3 . . . . . 3 2 2 2 2 2 2 . . DB $2A,$AA,$B1,$53,$FF,$F0 ; . 2 2 2 2 2 2 2 2 3 . 1 1 1 . 3 3 3 3 3 3 3 . . DB $3F,$FF,$F4,$47,$75,$70 ; . 3 3 3 3 3 3 3 3 3 1 . 1 . 1 3 1 3 1 1 1 3 . . DB $35,$55,$74,$47,$74,$70 ; . 3 1 1 1 1 1 1 1 3 1 . 1 . 1 3 1 3 1 . 1 3 . . DB $34,$10,$75,$57,$75,$70 ; . 3 1 . . 1 . . 1 3 1 1 1 1 1 3 1 3 1 1 1 3 . . DB $35,$55,$75,$57,$74,$70 ; . 3 1 1 1 1 1 1 1 3 1 1 1 1 1 3 1 3 1 . 1 3 . . DB $3F,$FF,$F7,$77,$75,$70 ; . 3 3 3 3 3 3 3 3 3 1 3(1)3 1 3 1 3 1 1 1 3 . . DB $33,$33,$37,$77,$77,$70 ; . 3 . 3 . 3 . 3 . 3 1 3 1 3 1 3 1 3 1 3 1 3 . . DB $33,$33,$31,$53,$75,$70 ; . 3 . 3 . 3 . 3 . 3 . 1 1 1 . 3 1 3 1 1 1 3 . . DB $33,$33,$30,$03,$77,$70 ; . 3 . 3 . 3 . 3 . 3 . . . . . 3 1 3 1 3 1 3 . . DB $33,$33,$30,$C3,$75,$70 ; . 3 . 3 . 3 . 3 . 3 . . 3 . . 3 1 3 1 1 1 3 . . DB $33,$33,$33,$73,$77,$70 ; . 3 . 3 . 3 . 3 . 3 . 3 1 3 . 3 1 3 1 3 1 3 . . DB $F3,$33,$3D,$5F,$75,$7C ; 3 3 . 3 . 3 . 3 . 3 3 1 1 1 3 3 1 3 1 1 1 3 3 . DB $FF,$FF,$F5,$97,$FF,$FC ; 3 3 3 3 3 3 3 3 3 3 1 1 2 1 1 3 3 3 3 3 3 3 3 . DB $35,$55,$56,$A5,$55,$70 ; . 3 1 1 1 1 1 1 1 1 1 2 2 2 1 1 1 1 1 1 1 3 . . DB $37,$DF,$56,$A5,$7F,$70 ; . 3 1 3 3 1 3 3 1 1 1 2 2 2 1 1 1 3 3 3 1 3 . . DB $37,$DF,$55,$A5,$7F,$70 ; . 3 1 3 3 1 3 3 1 1 1 1 2 2 1 1 1 3 3 3 1 3 . . DB $35,$55,$56,$A5,$55,$70 ; . 3 1 1 1 1 1 1 1 1 1 2 2 2 1 1 1 1 1 1 1 3 . . DB $3F,$FF,$FF,$FF,$FF,$F0 ; . 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 . . L2A6D: ; Header #1 for a House DB $08 DW L289F L2A70: ; Header #2 for a House DB $08 DW L2939 L2A73: ; Header #3 for a House DB $08 DW L29D3 L2A76: ; Loop Back for a House DB $00 DW L2A6D L2A79: ; 151 bytes of 28x21 Data #1 for Two Deer DB $0A,$0A ; X, Y Offsets to Hot Spot DB $07,$15 ; W Bytes by H Lines Pattern Size DB $00,$00,$11,$00,$00,$00,$00 DB $00,$00,$51,$40,$00,$00,$00 DB $00,$03,$11,$30,$00,$00,$00 DB $00,$00,$D1,$C0,$00,$00,$00 DB $C0,$00,$3B,$00,$00,$00,$00 DB $30,$00,$3F,$40,$00,$00,$00 DB $0F,$FF,$F0,$00,$00,$00,$00 DB $0F,$FF,$C0,$00,$00,$00,$00 DB $03,$FF,$00,$00,$00,$00,$00 DB $03,$30,$C0,$00,$00,$44,$00 DB $0C,$C3,$30,$00,$01,$45,$00 DB $33,$0C,$C0,$00,$0C,$44,$C0 DB $00,$00,$00,$00,$03,$47,$00 DB $00,$00,$03,$00,$00,$EC,$00 DB $00,$00,$00,$C0,$00,$FD,$00 DB $00,$00,$00,$3F,$FF,$C0,$00 DB $00,$00,$00,$3F,$FF,$00,$00 DB $00,$00,$00,$0F,$FC,$F0,$00 DB $00,$00,$00,$0C,$C3,$0C,$00 DB $00,$00,$00,$03,$30,$C3,$00 DB $00,$00,$00,$00,$CC,$30,$00 ; . . . . . . . . . 1 . 1 . . . . . . . . . . . . . . . . ; . . . . . . . . 1 1 . 1 1 . . . . . . . . . . . . . . . ; . . . . . . . 3 . 1 . 1 . 3 . . . . . . . . . . . . . . ; . . . . . . . . 3 1 . 1 3 . . . . . . . . . . . . . . . ; 3 . . . . . . . . 3 1 3 . . . . . . . . . . . . . . . . ; . 3 . . . . . . . 3 3 3 1 . . . . . . . . . . . . . . . ; . . 3 3 3 3 3 3 3 3 . . . . . . . . . . . . . . . . . . ; . . 3 3 3 3 3 3 3 . . . . . . . . . . . . . . . . . . . ; . . . 3 3 3 3 3 . . . . . . . . . . . . . . . . . . . . ; . . . 3 . 3 . . 3 . . . . . . . . . . . 1 . 1 . . . . . ; . . 3 . 3 . . 3 . 3(.). . . . . . . . 1 1 . 1 1 . . . . ; . 3 . 3 . . 3 . 3 . . . . . . . . . 3 . 1 . 1 . 3 . . . ; . . . . . . . . . . . . . . . . . . . 3 1 . 1 3 . . . . ; . . . . . . . . . . . 3 . . . . . . . . 3 2 2 . . . . . ; . . . . . . . . . . . . 3 . . . . . . . 3 3 3 1 . . . . ; . . . . . . . . . . . . . 3 3 3 3 3 3 3 3 . . . . . . . ; . . . . . . . . . . . . . 3 3 3 3 3 3 3 . . . . . . . . ; . . . . . . . . . . . . . . 3 3 3 3 3 . 3 3 . . . . . . ; . . . . . . . . . . . . . . 3 . 3 . . 3 . . 3 . . . . . ; . . . . . . . . . . . . . . . 3 . 3 . . 3 . . 3 . . . . ; . . . . . . . . . . . . . . . . 3 . 3 . . 3 . . . . . . L2B10: ; 151 bytes of 28x21 Data #2 for Two Deer DB $0A,$0A ; X, Y Offsets to Hot Spot DB $07,$15 ; W Bytes by H Lines Pattern Size DB $00,$00,$11,$00,$00,$00,$00 DB $00,$00,$51,$40,$00,$00,$00 DB $00,$03,$11,$30,$00,$00,$00 DB $00,$00,$D1,$C0,$00,$00,$00 DB $C0,$00,$3B,$00,$00,$00,$00 DB $30,$00,$3F,$40,$00,$00,$00 DB $0F,$FF,$F0,$00,$00,$00,$00 DB $0F,$FF,$C0,$00,$00,$00,$00 DB $03,$FF,$3C,$00,$00,$00,$00 DB $03,$30,$C3,$00,$00,$44,$00 DB $00,$CC,$30,$C0,$01,$45,$00 DB $00,$33,$0C,$00,$0C,$44,$C0 DB $00,$00,$00,$00,$03,$47,$00 DB $00,$00,$03,$00,$00,$EC,$00 DB $00,$00,$00,$C0,$00,$FD,$00 DB $00,$00,$00,$3F,$FF,$C0,$00 DB $00,$00,$00,$3F,$FF,$00,$00 DB $00,$00,$00,$0F,$FC,$00,$00 DB $00,$00,$00,$0C,$C3,$00,$00 DB $00,$00,$00,$33,$0C,$C0,$00 DB $00,$00,$00,$CC,$33,$00,$00 ; . . . . . . . . . 1 . 1 . . . . . . . . . . . . . . . . ; . . . . . . . . 1 1 . 1 1 . . . . . . . . . . . . . . . ; . . . . . . . 3 . 1 . 1 . 3 . . . . . . . . . . . . . . ; . . . . . . . . 3 1 . 1 3 . . . . . . . . . . . . . . . ; 3 . . . . . . . . 3 2 3 . . . . . . . . . . . . . . . . ; . 3 . . . . . . . 3 3 3 1 . . . . . . . . . . . . . . . ; . . 3 3 3 3 3 3 3 3 . . . . . . . . . . . . . . . . . . ; . . 3 3 3 3 3 3 3 . . . . . . . . . . . . . . . . . . . ; . . . 3 3 3 3 3 . 3 3 . . . . . . . . . . . . . . . . . ; . . . 3 . 3 . . 3 . . 3 . . . . . . . . 1 . 1 . . . . . ; . . . . 3 . 3 . . 3(.). 3 . . . . . . 1 1 . 1 1 . . . . ; . . . . . 3 . 3 . . 3 . . . . . . . 3 . 1 . 1 . 3 . . . ; . . . . . . . . . . . . . . . . . . . 3 1 . 1 3 . . . . ; . . . . . . . . . . . 3 . . . . . . . . 3 2 3 . . . . . ; . . . . . . . . . . . . 3 . . . . . . . 3 3 3 1 . . . . ; . . . . . . . . . . . . . 3 3 3 3 3 3 3 3 . . . . . . . ; . . . . . . . . . . . . . 3 3 3 3 3 3 3 . . . . . . . . ; . . . . . . . . . . . . . . 3 3 3 3 3 . . . . . . . . . ; . . . . . . . . . . . . . . 3 . 3 . . 3 . . . . . . . . ; . . . . . . . . . . . . . 3 . 3 . . 3 . 3 . . . . . . . ; . . . . . . . . . . . . 3 . 3 . . 3 . 3 . . . . . . . . L2BA7: ; Header #1 for Two Deer DB $01 DW L2A79 L2BAA: ; Header #2 for Two Deer DB $01 DW L2B10 L2BAD: ; Header #3 for Two Deer DB $01 DW L2A79 ; (Data #1 again) L2BB0: ; Loop Back Header for Two Deer DB $00 DW L2BA7 L2BB3: ; 67 bytes of 36x7 Data #1 for a Garden (wide) DB $13,$04 ; X, Y Offsets to Hot Spot DB $09,$07 ; W Bytes by H Lines Pattern Size DB $00,$00,$00,$00,$00,$00,$00,$00,$00 DB $30,$01,$00,$30,$03,$00,$10,$03,$00 DB $00,$00,$00,$00,$00,$00,$00,$00,$00 DB $20,$02,$00,$20,$02,$00,$20,$02,$00 DB $20,$02,$00,$20,$02,$00,$20,$02,$00 DB $20,$02,$00,$20,$02,$00,$20,$02,$00 DB $00,$00,$00,$00,$00,$00,$00,$00,$00 ; . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ; . 3 . . . . . 1 . . . . . 3 . . . . . 3 . . . . . 1 . . . . . 3 . . . . ; . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ; . 2 . . . . . 2 . . . . . 2 . . . . . 2 . . . . . 2 . . . . . 2 . . . . ; . 2 . . . . . 2 . . . . . 2 . . . . .(2). . . . . 2 . . . . . 2 . . . . ; . 2 . . . . . 2 . . . . . 2 . . . . . 2 . . . . . 2 . . . . . 2 . . . . ; . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . L2BF6: ; 58 bytes of 36x6 Data #2 for a Garden (wide) DB $15,$04 ; X, Y Offsets to Hot Spot DB $09,$06 ; W Bytes by H Lines Pattern Size DB $00,$00,$00,$00,$00,$00,$00,$00,$00 DB $03,$00,$10,$03,$00,$30,$01,$00,$30 DB $00,$00,$00,$00,$00,$00,$00,$00,$00 DB $22,$22,$22,$22,$22,$22,$22,$22,$22 DB $0A,$80,$A8,$0A,$80,$A8,$0A,$80,$A8 DB $02,$00,$20,$02,$00,$20,$02,$00,$20 ; . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ; . . . 3 . . . . . 1 . . . . . 3 . . . . . 3 . . . . . 1 . . . . . 3 . . ; . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ; . 2 . 2 . 2 . 2 . 2 . 2 . 2 . 2 . 2 . 2 . 2 . 2 . 2 . 2 . 2 . 2 . 2 . 2 ; . . 2 2 2 . . . 2 2 2 . . . 2 2 2 . . . 2(2)2 . . . 2 2 2 . . . 2 2 2 . ; . . . 2 . . . . . 2 . . . . . 2 . . . . . 2 . . . . . 2 . . . . . 2 . . L2C30: ; 58 bytes of 36x6 Data #3 for a Garden (wide) DB $15,$04 ; X, Y Offsets to Hot Spot DB $09,$06 ; W Bytes by H Lines Pattern Size DB $01,$00,$30,$01,$00,$10,$03,$00,$10 DB $07,$40,$DC,$07,$40,$74,$0D,$C0,$74 DB $01,$00,$30,$01,$00,$10,$03,$00,$10 DB $22,$22,$22,$22,$22,$22,$22,$22,$22 DB $0A,$80,$A8,$0A,$80,$A8,$0A,$80,$A8 DB $02,$00,$20,$02,$00,$20,$02,$00,$20 ; . . . 1 . . . . . 3 . . . . . 1 . . . . . 1 . . . . . 3 . . . . . 1 . . ; . . 1 2 1 . . . 3 1 3 . . . 1 3 1 . . . 1 3 1 . . . 3 1 3 . . . 1 3 1 . ; . . . 1 . . . . . 3 . . . . . 1 . . . . . 1 . . . . . 3 . . . . . 1 . . ; . . 2 2 2 . . . 2 2 2 . . . 2 2 2 . . . 2 2 2 . . . 2 2 2 . . . 2 2 2 . ; . . 2 2 2 . . . 2 2 2 . . . 2 2 2 . . . 2(2)2 . . . 2 2 2 . . . 2 2 2 . ; . . . 2 . . . . . 2 . . . . . 2 . . . . . 2 . . . . . 2 . . . . . 2 . . L2C6A: ; Header #1 for a Garden (wide) DB $04 DW L2BB3 L2C6D: ; Header #2 for a Garden (wide) DB $04 DW L2BF6 L2C70: ; Header #3 for a Garden (wide) DB $0C DW L2C30 L2C73: ; Header #4 for a Garden (wide) DB $0C DW L2C30 ; (Data #3 again) L2C76: ; Header #5 for a Garden (wide) DB $04 DW L2BF6 ; (Data #2 again) L2C79: ; Header #6 for a Garden (wide) DB $04 DW L2BB3 ; (Data #1 again) L2C7C: ; Loop Back for a Garden (wide) DB $00 DW L2C6A L2C7F: ; 12 bytes of 8x4 Data #1 for a Turtle and Call to L3BB6 to ?? DB $04,$01 ; X, Y Offsets to Hot Spot DB $02,$04 ; W Bytes by H Lines Pattern Size DB $D0,$80 ; 3 1 . . 2 . . . DB $52,$A1 ; 1 1 . 2(2)2 . 1 DB $0A,$A8 ; . . 2 2 2 2 2 . DB $08,$08 ; . . 2 . . . 2 . L2C8B: ; 12 bytes of 8x4 Data #2 for a Turtle and Call to L3BB6 to ?? DB $04,$01 ; X, Y Offsets to Hot Spot DB $02,$04 ; W Bytes by H Lines Pattern Size DB $D0,$80 ; 3 1 . . 2 . . . DB $52,$A1 ; 1 1 . 2(2)2 . 1 DB $0A,$A8 ; . . 2 2 2 2 2 . DB $02,$02 ; . . . 2 . . . 2 L2C97: ; Header #1 for a Turtle and Call to L3BB6 to ?? DB $04 DW L2C7F L2C9A: ; Header #2 for a Turtle and Call to L3BB6 to ?? DB $04 DW L2C8B L2C9D: ; Loop Back for a Turtle and Call to L3BB6 to ?? DB $00 DW L2C97 L2CA0: ; 52 bytes of 24x8 Data #1 for a Fire Truck DB $0F,$02 ; X, Y Offsets to Hot Spot DB $06,$08 ; W Bytes by H Lines Pattern Size DB $FF,$FF,$FC,$05,$00,$00 ; 3 3 3 3 3 3 3 3 3 3 3 . . . 1 1 . . . . . . . . DB $CC,$CC,$CC,$57,$40,$00 ; 3 . 3 . 3 . 3 . 3 . 3 . 1 1 1 3 1 . . . . . . . DB $FF,$FF,$FD,$5F,$50,$00 ; 3 3 3 3 3 3 3 3 3 3 3 1 1 1 3(3)1 1 . . . . . . DB $00,$55,$55,$55,$54,$00 ; . . . . 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 . . . . . DB $01,$7D,$7D,$7D,$7D,$C0 ; . . . 1 1 3 3 1 1 3 3 1 1 3 3 1 1 3 3 1 3 . . . DB $01,$55,$55,$55,$55,$00 ; . . . 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 . . . . DB $01,$5A,$95,$5A,$69,$00 ; . . . 1 1 1 2 2 2 1 1 1 1 1 2 2 1 2 2 1 . . . . DB $00,$06,$80,$06,$18,$00 ; . . . . . . 1 2 2 . . . . . 1 2 . 1 2 . . . . . L2CD4: ; 74 bytes of 20x14 Data #2 for a Fire Truck DB $0C,$08 ; X, Y Offsets to Hot Spot DB $05,$0E ; W Bytes by H Lines Pattern Size DB $F0,$00,$00,$00,$00 ; 3 3 . . . . . . . . . . . . . . . . . . DB $CC,$00,$00,$00,$00 ; 3 . 3 . . . . . . . . . . . . . . . . . DB $FF,$00,$00,$00,$00 ; 3 3 3 3 . . . . . . . . . . . . . . . . DB $30,$C0,$00,$00,$00 ; . 3 . . 3 . . . . . . . . . . . . . . . DB $0F,$F0,$00,$00,$00 ; . . 3 3 3 3 . . . . . . . . . . . . . . DB $03,$0C,$00,$00,$00 ; . . . 3 . . 3 . . . . . . . . . . . . . DB $00,$FF,$01,$40,$00 ; . . . . 3 3 3 3 . . . 1 1 . . . . . . . DB $00,$33,$15,$10,$00 ; . . . . . 3 . 3 . 1 1 1 . 1 . . . . . . DB $00,$0F,$54,$14,$00 ; . . . . . . 3 3 1 1 1 .(.)1 1 . . . . . DB $15,$55,$55,$55,$00 ; . 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 . . . . DB $50,$50,$50,$50,$40 ; 1 1 . . 1 1 . . 1 1 . . 1 1 . . 1 . . . DB $55,$55,$55,$55,$40 ; 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 . . . DB $55,$A5,$55,$96,$40 ; 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 . . . DB $02,$A0,$02,$8A,$00 ; . . . 2 2 2 . . . . . 2 2 . 2 2 . . . . L2D1E: ; 52 bytes of 24x8 Data #3 for a Fire Truck DB $0F,$02 ; X, Y Offsets to Hot Spot DB $06,$08 ; W Bytes by H Lines Pattern Size DB $FF,$FF,$FC,$05,$00,$00 ; 3 3 3 3 3 3 3 3 3 3 3 . . . 1 1 . . . . . . . . DB $CC,$CC,$CC,$57,$40,$00 ; 3 . 3 . 3 . 3 . 3 . 3 . 1 1 1 3 1 . . . . . . . DB $FF,$FF,$FD,$5F,$50,$00 ; 3 3 3 3 3 3 3 3 3 3 3 1 1 1 3(3)1 1 . . . . . . DB $00,$55,$55,$55,$54,$00 ; . . . . 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 . . . . . DB $01,$7D,$7D,$7D,$7D,$C0 ; . . . 1 1 3 3 1 1 3 3 1 1 3 3 1 1 3 3 1 3 . . . DB $01,$55,$55,$55,$55,$00 ; . . . 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 . . . . DB $01,$5A,$55,$59,$65,$00 ; . . . 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1 1 . . . . DB $00,$0A,$80,$0A,$28,$00 ; . . . . . . 2 2 2 . . . . . 2 2 . 2 2 . . . . . L2D52: ; 74 bytes of 20x14 Data #4 for a Fire Truck DB $0C,$08 ; X, Y Offsets to Hot Spot DB $05,$0E ; W Bytes by H Lines Pattern Size DB $F0,$00,$00,$00,$00 ; 3 3 . . . . . . . . . . . . . . . . . . DB $CC,$00,$00,$00,$00 ; 3 . 3 . . . . . . . . . . . . . . . . . DB $FF,$00,$00,$00,$00 ; 3 3 3 3 . . . . . . . . . . . . . . . . DB $30,$C0,$00,$00,$00 ; . 3 . . 3 . . . . . . . . . . . . . . . DB $0F,$F0,$00,$00,$00 ; . . 3 3 3 3 . . . . . . . . . . . . . . DB $03,$0C,$00,$00,$00 ; . . . 3 . . 3 . . . . . . . . . . . . . DB $00,$FF,$01,$40,$00 ; . . . . 3 3 3 3 . . . 1 1 . . . . . . . DB $00,$33,$15,$10,$00 ; . . . . . 3 . 3 . 1 1 1 . 1 . . . . . . DB $00,$0F,$54,$14,$00 ; . . . . . . 3 3 1 1 1 .(.)1 1 . . . . . DB $15,$55,$55,$55,$00 ; . 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 . . . . DB $50,$50,$50,$50,$40 ; 1 1 . . 1 1 . . 1 1 . . 1 1 . . 1 . . . DB $55,$55,$55,$55,$40 ; 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 . . . DB $56,$A5,$56,$9A,$40 ; 1 1 1 2 2 2 1 1 1 1 1 2 2 1 2 2 1 . . . DB $02,$90,$02,$49,$00 ; . . . 2 2 1 . . . . . 2 1 . 2 1 . . . . L2D9C: ; Header #1 for a Fire Truck DB $08 DW L2CA0 L2D9F: ; Header #2 for a Fire Truck DB $08 DW L2CD4 L2DA2: ; Header #3 for a Fire Truck DB $08 DW L2D1E L2DA5: ; Header #4 for a Fire Truck DB $08 DW L2D52 L2DA8: ; Header #5 for a Fire Truck DB $08 DW L2D1E ; (Data #3 again) L2DAB: ; Header #6 for a Fire Truck DB $08 DW L2CD4 ; (Data #2 again) L2DAE: ; Loop Back for a Fire Truck DB $00 DW L2D9C L2DB1: ; 106 bytes of 24x17 Data #1 for Two Birds DB $10,$08 ; 74 bytes of 6x17 X, Y Offsets to Hot Spot DB $06,$11 ; W Bytes by H Lines Pattern Size DB $00,$00,$00,$02,$A0,$00 ; . . . . . . . . . . . . . . . 2 2 2 . . . . . . DB $00,$00,$00,$02,$E0,$00 ; . . . . . . . . . . . . . . . 2 3 2 . . . . . . DB $00,$00,$00,$00,$40,$00 ; . . . . . . . . . . . . . . . . 1 . . . . . . . DB $00,$00,$00,$06,$64,$00 ; . . . . . . . . . . . . . . 1 2 1 2 1 . . . . . DB $00,$00,$00,$1A,$69,$00 ; . . . . . . . . . . . . . 1 2 2 1 2 2 1 . . . . DB $00,$00,$00,$62,$A2,$40 ; . . . . . . . . . . . . 1 2 . 2 2 2 . 2 1 . . . DB $00,$00,$01,$80,$80,$90 ; . . . . . . . . . . . 1 2 . . . 2 . . . 2 1 . . DB $00,$00,$00,$03,$30,$00 ; . . . . . . . . . . . . . . . 3 . 3 . . . . . . DB $00,$00,$00,$00,$00,$00 ; . . . . . . . . . . . . . . . .(.). . . . . . . DB $00,$A8,$00,$00,$00,$00 ; . . . . 2 2 2 . . . . . . . . . . . . . . . . . DB $90,$B8,$18,$00,$00,$00 ; 2 1 . . 2 3 2 . . 1 2 . . . . . . . . . . . . . DB $24,$10,$60,$00,$00,$00 ; . 2 1 . . 1 . . 1 2 . . . . . . . . . . . . . . DB $09,$99,$80,$00,$00,$00 ; . . 2 1 2 1 2 1 2 . . . . . . . . . . . . . . . DB $02,$9A,$00,$00,$00,$00 ; . . . 2 2 1 2 2 . . . . . . . . . . . . . . . . DB $00,$A8,$00,$00,$00,$00 ; . . . . 2 2 2 . . . . . . . . . . . . . . . . . DB $00,$20,$00,$00,$00,$00 ; . . . . . 2 . . . . . . . . . . . . . . . . . . DB $00,$CC,$00,$00,$00,$00 ; . . . . 3 . 3 . . . . . . . . . . . . . . . . . L2E1B: ; 106 bytes of 24x17 Data #2 for Two Birds DB $10,$08 ; X, Y Offsets to Hot Spot DB $06,$11 ; W Bytes by H Lines Pattern Size DB $00,$00,$00,$02,$A0,$00 ; . . . . . . . . . . . . . . . 2 2 2 . . . . . . DB $00,$00,$02,$42,$E0,$60 ; . . . . . . . . . . . 2 1 . . 2 3 2 . . 1 2 . . DB $00,$00,$00,$90,$41,$80 ; . . . . . . . . . . . . 2 1 . . 1 . . 1 2 . . . DB $00,$00,$00,$26,$66,$00 ; . . . . . . . . . . . . . 2 1 2 1 2 1 2 . . . . DB $00,$00,$00,$0A,$68,$00 ; . . . . . . . . . . . . . . 2 2 1 2 2 . . . . . DB $00,$00,$00,$02,$A0,$00 ; . . . . . . . . . . . . . . . 2 2 2 . . . . . . DB $00,$00,$00,$00,$80,$00 ; . . . . . . . . . . . . . . . . 2 . . . . . . . DB $00,$00,$00,$03,$30,$00 ; . . . . . . . . . . . . . . . 3 . 3 . . . . . . DB $00,$00,$00,$00,$00,$00 ; . . . . . . . . . . . . . . . .(.). . . . . . . DB $00,$A8,$00,$00,$00,$00 ; . . . . 2 2 2 . . . . . . . . . . . . . . . . . DB $00,$B8,$00,$00,$00,$00 ; . . . . 2 3 2 . . . . . . . . . . . . . . . . . DB $00,$10,$00,$00,$00,$00 ; . . . . . 1 . . . . . . . . . . . . . . . . . . DB $01,$99,$00,$00,$00,$00 ; . . . 1 2 1 2 1 . . . . . . . . . . . . . . . . DB $06,$9A,$40,$00,$00,$00 ; . . 1 2 2 1 2 2 1 . . . . . . . . . . . . . . . DB $18,$A8,$90,$00,$00,$00 ; . 1 2 . 2 2 2 . 2 1 . . . . . . . . . . . . . . DB $60,$20,$24,$00,$00,$00 ; 1 2 . . . 2 . . . 2 1 . . . . . . . . . . . . . DB $00,$CC,$00,$00,$00,$00 ; . . . . 3 . 3 . . . . . . . . . . . . . . . . . L2E85: ; Header #1 for Two Birds DB $01 DW L2DB1 L2E88: ; Header #2 for Two Birds DB $01 DW L2E1B L2E8B: ; Loop Back for Two Birds DB $00 DW L2E85 L2E8E: ; 100 bytes of 24x16 Data #1 for a Kangaroo DB $0F,$0A ; X, Y Offsets to Hot Spot DB $06,$10 ; W Bytes by H Lines Pattern Size DB $00,$00,$04,$01,$00,$00 ; . . . . . . . . . . 1 . . . . 1 . . . . . . . . DB $00,$00,$05,$05,$00,$00 ; . . . . . . . . . . 1 1 . . 1 1 . . . . . . . . DB $00,$00,$01,$54,$00,$00 ; . . . . . . . . . . . 1 1 1 1 . . . . . . . . . DB $00,$00,$01,$5C,$00,$00 ; . . . . . . . . . . . 1 1 1 3 . . . . . . . . . DB $00,$00,$00,$55,$40,$00 ; . . . . . . . . . . . . 1 1 1 1 1 . . . . . . . DB $40,$00,$01,$55,$40,$00 ; 1 . . . . . . . . . . 1 1 1 1 1 1 . . . . . . . DB $50,$00,$05,$54,$00,$00 ; 1 1 . . . . . . . . 1 1 1 1 1 . . . . . . . . . DB $54,$00,$15,$55,$55,$00 ; 1 1 1 . . . . . . 1 1 1 1 1 1 1 1 1 1 1 . . . . DB $15,$00,$55,$54,$05,$00 ; . 1 1 1 . . . . 1 1 1 1 1 1 1 . . . 1 1 . . . . DB $05,$40,$55,$77,$00,$00 ; . . 1 1 1 . . . 1 1 1 1 1 3 1 3 . . . . . . . . DB $01,$50,$55,$5E,$00,$00 ; . . . 1 1 1 . . 1 1 1 1 1 1 3(2). . . . . . . . DB $00,$54,$55,$5F,$C0,$00 ; . . . . 1 1 1 . 1 1 1 1 1 1 3 3 3 . . . . . . . DB $00,$05,$55,$40,$40,$00 ; . . . . . . 1 1 1 1 1 1 1 . . . 1 . . . . . . . DB $00,$00,$55,$41,$00,$00 ; . . . . . . . . 1 1 1 1 1 . . 1 . . . . . . . . DB $00,$00,$15,$55,$55,$50 ; . . . . . . . . . 1 1 1 1 1 1 1 1 1 1 1 1 1 . . DB $00,$00,$01,$55,$55,$40 ; . . . . . . . . . . . 1 1 1 1 1 1 1 1 1 1 . . . L2EF2: ; 130 bytes of 28x18 Data #2 for a Kangaroo DB $12,$0A ; X, Y Offsets to Hot Spot DB $07,$12 ; W Bytes by H Lines Pattern Size DB $00,$00,$00,$04,$01,$00,$00 DB $00,$00,$00,$05,$05,$00,$00 DB $00,$00,$00,$02,$54,$00,$00 DB $00,$00,$00,$15,$50,$00,$00 DB $00,$00,$00,$15,$50,$00,$00 DB $00,$00,$00,$01,$50,$00,$00 DB $00,$00,$00,$05,$50,$00,$00 DB $00,$00,$00,$15,$55,$54,$00 DB $40,$00,$00,$55,$50,$14,$00 DB $50,$00,$01,$55,$73,$00,$00 DB $15,$40,$01,$55,$6C,$00,$00 DB $01,$55,$41,$55,$FC,$00,$00 DB $00,$15,$55,$55,$04,$00,$00 DB $00,$00,$01,$55,$10,$00,$00 DB $00,$00,$00,$55,$50,$00,$00 DB $00,$00,$00,$05,$50,$00,$00 DB $00,$00,$00,$01,$55,$55,$40 DB $00,$00,$00,$00,$55,$55,$00 ; . . . . . . . . . . . . . . 1 . . . . 1 . . . . . . . . ; . . . . . . . . . . . . . . 1 1 . . 1 1 . . . . . . . . ; . . . . . . . . . . . . . . . 2 1 1 1 . . . . . . . . . ; . . . . . . . . . . . . . 1 1 1 1 1 . . . . . . . . . . ; . . . . . . . . . . . . . 1 1 1 1 1 . . . . . . . . . . ; . . . . . . . . . . . . . . . 1 1 1 . . . . . . . . . . ; . . . . . . . . . . . . . . 1 1 1 1 . . . . . . . . . . ; . . . . . . . . . . . . . 1 1 1 1 1 1 1 1 1 1 . . . . . ; 1 . . . . . . . . . . . 1 1 1 1 1 1 . . . 1 1 . . . . . ; 1 1 . . . . . . . . . 1 1 1 1 1 1 3 . 3 . . . . . . . . ; . 1 1 1 1 . . . . . . 1 1 1 1 1 1 2(3). . . . . . . . . ; . . . 1 1 1 1 1 1 . . 1 1 1 1 1 3 3 3 . . . . . . . . . ; . . . . . 1 1 1 1 1 1 1 1 1 1 1 . . 1 . . . . . . . . . ; . . . . . . . . . . . 1 1 1 1 1 . 1 . . . . . . . . . . ; . . . . . . . . . . . . 1 1 1 1 1 1 . . . . . . . . . . ; . . . . . . . . . . . . . . 1 1 1 1 . . . . . . . . . . ; . . . . . . . . . . . . . . . 1 1 1 1 1 1 1 1 1 1 . . . ; . . . . . . . . . . . . . . . . 1 1 1 1 1 1 1 1 . . . . L2F74: ; 130 bytes of 24x21 Data #3 for a Kangaroo DB $12,$0A ; X, Y Offsets to Hot Spot DB $06,$15 ; W Bytes by H Lines Pattern Size DB $00,$00,$00,$04,$01,$00 ; . . . . . . . . . . . . . . 1 . . . . 1 . . . . DB $00,$00,$00,$05,$05,$00 ; . . . . . . . . . . . . . . 1 1 . . 1 1 . . . . DB $00,$00,$00,$02,$54,$00 ; . . . . . . . . . . . . . . . 2 1 1 1 . . . . . DB $00,$00,$00,$15,$50,$00 ; . . . . . . . . . . . . . 1 1 1 1 1 . . . . . . DB $00,$00,$00,$15,$50,$00 ; . . . . . . . . . . . . . 1 1 1 1 1 . . . . . . DB $00,$00,$00,$01,$50,$00 ; . . . . . . . . . . . . . . . 1 1 1 . . . . . . DB $00,$00,$00,$05,$50,$00 ; . . . . . . . . . . . . . . 1 1 1 1 . . . . . . DB $00,$00,$00,$15,$55,$54 ; . . . . . . . . . . . . . 1 1 1 1 1 1 1 1 1 1 . DB $40,$00,$00,$55,$50,$14 ; 1 . . . . . . . . . . . 1 1 1 1 1 1 . . . 1 1 . DB $50,$00,$01,$55,$73,$00 ; 1 1 . . . . . . . . . 1 1 1 1 1 1 3 . 3 . . . . DB $15,$40,$01,$55,$6C,$00 ; . 1 1 1 1 . . . . . . 1 1 1 1 1 1 2(3). . . . . DB $01,$55,$05,$55,$FC,$00 ; . . . 1 1 1 1 1 . . 1 1 1 1 1 1 3 3 3 . . . . . DB $00,$15,$55,$55,$04,$00 ; . . . . . 1 1 1 1 1 1 1 1 1 1 1 . . 1 . . . . . DB $00,$00,$05,$55,$10,$00 ; . . . . . . . . . . 1 1 1 1 1 1 . 1 . . . . . . DB $00,$00,$01,$55,$50,$00 ; . . . . . . . . . . . 1 1 1 1 1 1 1 . . . . . . DB $00,$00,$00,$55,$54,$00 ; . . . . . . . . . . . . 1 1 1 1 1 1 1 . . . . . DB $00,$00,$00,$01,$54,$00 ; . . . . . . . . . . . . . . . 1 1 1 1 . . . . . DB $00,$00,$00,$05,$50,$00 ; . . . . . . . . . . . . . . 1 1 1 1 . . . . . . DB $00,$00,$00,$15,$40,$00 ; . . . . . . . . . . . . . 1 1 1 1 . . . . . . . DB $00,$00,$00,$05,$55,$55 ; . . . . . . . . . . . . . . 1 1 1 1 1 1 1 1 1 1 DB $00,$00,$00,$01,$55,$54 ; . . . . . . . . . . . . . . . 1 1 1 1 1 1 1 1 . L2FF6: ; Header #1 for a Kangaroo DB $03 DW L2E8E L2FF9: ; Header #2 for a Kangaroo DB $01 DW L2EF2 L2FFC: ; Header #3 for a Kangaroo DB $01 DW L2F74 L2FFF: ; Loop Back for a Kangaroo DB $00 DW L2FF6 L3002: ; 64 bytes of 12x20 Data #1 for a Tree DB $05,$0E ; X, Y Offsets to Hot Spot DB $03,$14 ; W Bytes by H Lines Pattern Size DB $00,$03,$40 ; . . . . . . . 3 1 . . . DB $40,$01,$00 ; 1 . . . . . . 1 . . . . DB $14,$07,$0D ; . 1 1 . . . 1 3 . . 3 1 DB $35,$10,$04 ; . 3 1 1 . 1 . . . . 1 . DB $01,$D1,$14 ; . . . 1 3 1 . 1 . 1 1 . DB $10,$54,$50 ; . 1 . . 1 1 1 . 1 1 . . DB $34,$75,$C0 ; . 3 1 . 1 3 1 1 3 . . . DB $01,$54,$00 ; . . . 1 1 1 1 . . . . . DB $00,$54,$40 ; . . . . 1 1 1 . 1 . . . DB $00,$55,$1C ; . . . . 1 1 1 1 . 1 3 . DB $00,$54,$04 ; . . . . 1 1 1 . . . 1 . DB $00,$54,$00 ; . . . . 1 1 1 . . . . . DB $00,$54,$00 ; . . . . 1 1 1 . . . . . DB $00,$64,$00 ; . . . . 1 2 1 . . . . . DB $00,$64,$00 ; . . . . 1(2)1 . . . . . DB $00,$54,$00 ; . . . . 1 1 1 . . . . . DB $00,$54,$00 ; . . . . 1 1 1 . . . . . DB $00,$54,$00 ; . . . . 1 1 1 . . . . . DB $01,$55,$00 ; . . . 1 1 1 1 1 . . . . DB $05,$55,$40 ; . . 1 1 1 1 1 1 1 . . . L3042: ; Header #1 for a Tree DB $FF DW $3002 L3045: ; Loop Back for a Tree DB $00 DW $3042 ; Code Starts Again Here L3048: ; ?? Routine PUSH HL XOR A BIT 7,D JR NZ,L3057 ; (+$09) LD HL,($4DEB) SBC HL,DE JR C,L305C ; (+$07) JR Z,L3066 ; (+$0f) L3057: OR $01 JP L3066 ; (close enough for relative jump ??) L305C: LD HL,($4DE7) OR A SBC HL,DE JR NC,L3066 ; (+$02) OR $02 L3066: POP HL EXX PUSH HL BIT 7,D JR NZ,L3076 ; (+$09) LD HL,($4DE9) SBC HL,DE JR C,L307B ; (+$07) JR Z,L3085 ; (+$0f) L3076: OR $08 JP L3085 ; (close enough for relative jump ??) L307B: LD HL,($4DE5) OR A SBC HL,DE JR NC,L3085 ; (+$02) OR $04 L3085: POP HL EXX RET L3088: ; ?? Routine EX DE,HL BIT 7,H JR NZ,L309D ; (+$10) LD H,B LD L,C SBC HL,DE JR C,L3096 ; (+$03) LD H,B LD L,C RET L3096: BIT 7,D JR NZ,L309D ; (+$03) LD H,D LD L,E RET L309D: LD HL,$0000 RET L30A1: ; ?? Routine CALL L3048 ; to ?? LD B,A EX DE,HL EXX EX DE,HL EXX CALL L3048 ; to ?? LD C,A OR B RET Z LD A,C AND B RET NZ EX AF,AF' LD A,B LD ($4DE3),A ; Set $4DE3 to ?? LD ($4DE4),A ; Set $4DE4 to ?? LD A,C LD ($4DE2),A ; Set $4DE2 to ?? LD ($4DDE),DE ; Set $4DDE word to ?? LD ($4DE0),HL ; Set $4DE0 word to ?? EXX LD ($4DDA),DE ; Set $4DDA word to ?? LD ($4DDC),HL ; Set $4DDC word to ?? EXX L30CE: OR A JR NZ,L30DA ; (+$09) EX AF,AF' EX DE,HL EXX EX DE,HL EXX JR Z,L314C ; (+$74) XOR A RET L30DA: LD BC,$FFFF EXX LD BC,$FFFF EXX L30E2: PUSH HL BIT 7,D JR NZ,L30F1 ; (+$0a) BIT 7,H JR NZ,L30F1 ; (+$06) ADD HL,DE SRL H JP L30F4 ; (close enough for relative jump ??) L30F1: ADD HL,DE SRA H L30F4: RR L INC HL EX DE,HL EXX PUSH HL BIT 7,H ; L3100: ; Not a Label ?? JR NZ,L3108 ; (+$0a) BIT 7,D JR NZ,L3108 ; (+$06) ADD HL,DE SRL H JP L310B ; (close enough for relative jump ??) L3108: ADD HL,DE SRA H L310B: RR L EX DE,HL EXX PUSH DE LD A,E AND $C0 LD E,A LD A,C AND $C0 CP E POP DE JR NZ,L3168 ; (+$4d) LD A,B CP D JR NZ,L3168 ; (+$49) EXX PUSH DE LD A,E AND $C0 LD E,A LD A,C AND $C0 CP E POP DE JR NZ,L3167 ; (+$3b) LD A,B CP D JR NZ,L3167 ; (+$37) POP BC CALL L3088 ; to ?? EXX POP BC CALL L3088 ; to ?? EX AF,AF' JR NZ,L315B ; (+$1f) LD DE,($4DE0) LD ($4DDE),HL ; Set $4DDE word to ?? EXX LD DE,($4DDC) LD ($4DDA),HL ; Set $4DDA word to ?? EXX L314C: INC A EX AF,AF' XOR A LD ($4DE3),A ; Set $4DE3 to 0 ?? LD A,($4DE4) LD ($4DE2),A ; Store $4DE4 in $4DE2 ?? JP L30CE ; (close enough for relative jump ??) L315B: LD DE,($4DDE) EXX LD DE,($4DDA) EXX XOR A RET L3167: EXX L3168: CALL L3048 ; to ?? LD C,A LD A,($4DE2) AND C JR NZ,L3183 ; (+$11) LD A,C LD ($4DE3),A ; Set $4DE3 to ?? EX DE,HL LD B,H LD C,L EXX EX DE,HL LD B,H LD C,L EXX POP AF POP AF JP L30E2 ; (close enough for relative jump ??) L3183: LD A,C LD ($4DE2),A ; Set $4DE2 to ?? LD A,($4DE3) AND C JR NZ,L3198 ; (+$0b) EXX POP HL LD B,D LD C,E EXX POP HL LD B,D LD C,E JP L30E2 ; (close enough for relative jump ??) L3198: POP HL POP HL RET L319B: ; ?? Routine LD A,H SUB D PUSH AF JR NC,L31A2 ; (+$02) CPL INC A L31A2: LD H,A POP AF RET L31A5: ; ?? Routine JR C,L31AE ; (+$07) EX AF,AF' JR NC,L31B1 ; (+$07) L31AA: LD BC,$FFD8 RET L31AE: EX AF,AF' JR NC,L31AA ; (-$07) L31B1: LD BC,$0028 RET L31B5: ; Set Color Mode Routine LD A,(COLORM) ; Read $4DD7 for Color Mode OR A ; is Color Mode Not Equal 0 ? JR NZ,L31BF ; (+$04) LD A,(MULTIC) ; Set $4DD9 to 0 for Multi-Color 0 RET L31BF: CP $02 ; is Color Mode Not Equal 2 ? JR NZ,L31D0 ; (+$0d) L31C3: ; Set Color Mode to 2 Subroutine LD A,(MULTIC) LD (OLDMUC),A ; Save $4DD9 in $4DD8 for Old Multi-Color INC A AND $03 LD (MULTIC),A ; Multi-Color = (Old Multi-Color + 1) MOD 4 RET L31D0: ; Set Color Mode to 1 Subroutine CALL L31C3 ; to Set Color Mode to 2 Subroutine JR NZ,L31D6 ; (+$01) INC A ; A = Minimum of 1 L31D6: LD (MULTIC),A ; Set $4DD9 = 1, 1, 2 or 3 for Multi-Color RET L31DA: ; Compute Shift + Hold Magic Register Routine LD E,D LD D,$00 LD L,H LD H,$00 PUSH DE ADD HL,HL PUSH HL AND A SBC HL,DE PUSH HL AND A SBC HL,DE EX DE,HL POP HL POP BC EXX POP HL INC L LD A,(MULTIC) ; Read $4DD9 for Multi-Color RRCA RRCA LD D,A EX AF,AF' PUSH HL LD HL,HOLDMR ; Point to $4DD6 for Hold Magic Register OR (HL) POP HL RET L31FE: ; ?? Routine OUT (MAGIC),A ; &(12) = ?? for Magic Register ?? LD (IX+$00),D EXX BIT 7,H JR NZ,L3214 ; (+$0c) INC A BIT 2,A JR Z,L3211 ; (+$04) AND $30 INC IX L3211: ADD HL,DE JR L3215 ; (+$01) L3214: ADD HL,BC L3215: EXX ADD IX,BC DEC L JR NZ,L31FE ; (-$1d) RET L321C: ; ?? Routine OUT (MAGIC),A ; &(12) = ?? for Magic Register ?? LD (IX+$00),D EXX BIT 7,H JR NZ,L322D ; (+$07) EXX ADD IX,BC EXX ADD HL,DE JR L322E ; (+$01) L322D: ADD HL,BC L322E: EXX INC A BIT 2,A JR Z,L3238 ; (+$04) AND $30 INC IX L3238: DEC L JR NZ,L321C ; (-$1f) RET L323C: LD A,$9F CP H JR NC,L3245 ; (+$04) SRA H JR L3247 ; (+$02) L3245: SRL H L3247: RR L CP D JR NC,L3250 ; (+$04) SRA D JR L3252 ; (+$02) L3250: SRL D L3252: RR E CALL L30A1 ; to ?? EXX RET NZ PUSH IX PUSH IY PUSH HL CALL L319B ; to ?? EX (SP),HL EXX EX AF,AF' EX DE,HL ADD HL,HL EX DE,HL ADD HL,HL PUSH HL CALL L319B ; to ?? EX (SP),HL EXX CALL L31A5 ; to ?? EX AF,AF' JR C,L3275 ; (+$01) EX DE,HL L3275: PUSH HL EXX JR NC,L327A ; (+$01) EX DE,HL L327A: POP HL XOR A CALL L2385 ; to Convert Relative to Absolute (with A = PLOP) EX AF,AF' PUSH HL POP IX POP DE POP HL PUSH HL AND A SBC HL,DE POP HL JR C,L3295 ; (+$09) EX DE,HL CALL L31DA ; to Compute Shift + Hold Magic Register CALL L31FE ; to ?? JR L329B ; (+$06) L3295: CALL L31DA ; to Compute Shift + Hold Magic Register CALL L321C ; to ?? L329B: POP IY POP IX RET L32A0: ; ?? Routine EXX LD A,($4DD2) LD H,A LD ($4DD0),A ; Store $4DD2 in $4DD0 ?? EXX LD A,($4DD3) LD H,A LD ($4DD1),A ; Store $4DD3 in $4DD1 ?? EXX LD A,($4DD4) LD D,A EXX LD A,($4DD5) ; Store $4DD3 (Not $4DD4 ??) in $4DD5 ?? LD D,A CALL L31B5 ; to ?? JP L323C ; (close enough for relative jump ??) L32C0: ; ?? Routine LD A,($4DD1) LD ($4DD5),A ; Store $4DD1 in $4DD5 ?? LD A,($4DD0) LD ($4DD4),A ; Store $4DD0 in $4DD4 ?? JP L32A0 ; (close enough for relative jump ??) L32CF: ; ?? and Restore Old Multi-Color Routine CALL L32A0 ; to ?? LD A,(OLDMUC) LD (MULTIC),A ; Restore $4DD8 to $4DD9 for Multi-Color RET L32D9: ; ?? and Restore Old Multi-Color Routine CALL L32C0 ; to ?? LD A,(OLDMUC) LD (MULTIC),A ; Restore $4DD8 to $4DD9 for Multi-Color RET L32E3: ; Set Magic Register to A + Hold Magic Register Routine PUSH HL LD HL,HOLDMR ; Point to $4DD6 for Hold Magic Register OR (HL) POP HL OUT (MAGIC),A ; &(12) = ?? for Magic Register ?? RET L32EC: ; ?? Routine CALL L31B5 ; to ?? RRCA RRCA LD D,A EXX LD BC,($4DCD) INC C LD B,$08 XOR A LD A,C L32FC: RLA JR C,L3301 ; (+$02) DJNZ L32FC ; (-$05) L3301: LD A,B LD ($4DCF),A ; Set $4DCF to ?? LD HL,($4DC9) LD DE,($4DCB) PUSH IX PUSH IY EXX PUSH BC EXX PUSH BC PUSH DE XOR A LD B,A PUSH BC PUSH HL SBC HL,BC LD D,E LD H,L CALL L2385 ; to Convert Relative to Absolute (with A = PLOP) EXX LD H,A XOR $03 LD L,A EXX PUSH HL POP IX POP HL POP BC POP DE ADD HL,BC XOR A LD D,E LD H,L CALL L2385 ; to Convert Relative to Absolute (with A = PLOP) PUSH HL POP IY POP DE LD D,E XOR A LD E,A LD B,A LD H,A LD L,A DEC DE EXX LD BC,$0028 ADD IX,BC LD BC,$FFD8 ADD IY,BC LD A,H CALL L32E3 ; to ?? LD (IX+$00),D LD (IY+$00),D EXX L3354: PUSH DE LD A,($4DCF) LD B,A LD A,E L335A: SRL D RRA DJNZ L335A ; (-$05) LD E,A LD A,H ADD HL,DE CP H LD A,$00 JR NC,L3368 ; (+$01) INC A L3368: EX AF,AF' LD D,H LD E,L LD A,($4DCF) LD B,A LD A,E L3370: SRL D RRA DJNZ L3370 ; (-$05) LD E,A LD B,H LD C,L POP HL LD A,H SBC HL,DE CP H JR Z,L338C ; (+$0d) LD DE,$0028 ADD IX,DE LD DE,$FFD8 ADD IY,DE EX AF,AF' INC A EX AF,AF' L338C: LD D,H LD E,L LD H,B LD L,C EX AF,AF' JR Z,L3354 ; (-$3f) LD A,D OR A JR Z,L33E0 ; (+$49) LD A,H EXX LD E,A ADD A,L CPL LD C,A AND $03 CALL L32E3 ; to ?? SRA C SRA C LD B,$FF INC BC ADD IX,BC ADD IY,BC LD (IX+$00),D LD (IY+$00),D LD A,E ADD A,H LD E,A AND $03 CALL L32E3 ; to ?? SRL E SRL E LD A,C CPL INC A ADD A,E LD C,A LD A,$00 ADC A,A LD B,A ADD IX,BC ADD IY,BC LD (IX+$00),D LD (IY+$00),D LD B,$FF LD A,E CPL LD C,A INC BC ADD IX,BC ADD IY,BC EXX JP L3354 ; (close enough for relative jump ??) L33E0: LD A,H EXX LD E,A ADD A,L CPL LD C,A AND $03 CALL L32E3 ; to ?? SRA C SRA C LD B,$FF INC BC ADD IX,BC LD (IX+$00),D LD A,E ADD A,H LD E,A AND $03 CALL L32E3 ; to ?? SRL E SRL E LD A,C CPL INC A ADD A,E LD C,A LD A,$00 ADC A,A LD B,A ADD IX,BC LD (IX+$00),D POP BC POP IY POP IX RET L3417: ; ?? Routine CALL L32EC ; to ?? LD A,(OLDMUC) LD (MULTIC),A RET L3421: RRCA RRCA LD ($4DC6),A ; Set $4DC6 to ?? LD A,(HOLDMR) ; Read $4DD6 for Hold Magic Register OUT (MAGIC),A ; &(12) = $4DD6 (with no shift) for Magic Register XOR A LD ($4DC5),A ; Set $4DC5 to 0 ?? LD ($4DC4),A ; Set $4DC4 to 0 ?? CALL L2385 ; to Convert Relative to Absolute (with A = PLOP) SET 6,H PUSH HL LD E,A CP $03 LD A,(HL) JR Z,L3444 ; (+$06) LD B,E INC B L3440: RLCA RLCA DJNZ L3440 ; (-$04) L3444: LD C,A RRCA RRCA EX AF,AF' LD A,C AND $03 LD D,A L344C: LD A,E OR A JR Z,L345E ; (+$0e) LD B,E INC B L3452: LD A,C AND $03 CP D JR NZ,L3464 ; (+$0c) RRC C RRC C DJNZ L3452 ; (-$0c) L345E: LD B,$04 DEC HL LD C,(HL) JR L3452 ; (-$12) L3464: BIT 2,B JR Z,L346B ; (+$03) LD B,$00 INC HL L346B: LD A,B LD ($4DC3),A ; Set $4DC3 to ?? LD A,($4DC5) OR A JR NZ,L347C ; (+$07) LD ($4DBF),HL ; Store ?? word in $4DBF for ?? LD A,B LD ($4DC1),A ; Set $4DC1 to ?? L347C: EX (SP),HL RRC D RRC D LD A,E CP $03 JR Z,L349A ; (+$14) CPL AND $03 LD B,A INC B EX AF,AF' LD C,A L348D: LD A,C AND $C0 CP D JR NZ,L34A2 ; (+$0f) INC E RLC C RLC C DJNZ L348D ; (-$0d) L349A: LD E,$00 LD B,$04 INC HL LD C,(HL) JR L348D ; (-$15) L34A2: DEC E LD A,E BIT 7,A JR Z,L34AC ; (+$04) LD A,$03 LD E,A DEC HL L34AC: LD ($4DC2),A ; Set $4DC2 to ?? XOR A POP BC PUSH BC SBC HL,BC LD A,L EX AF,AF' LD A,L OR H JR NZ,L34C4 ; (+$0a) LD A,($4DC3) LD B,A LD A,E SUB B INC A LD L,A JR L34DC ; (+$18) L34C4: DEC L SLA L RL H SLA L RL H LD A,($4DC3) CPL AND $03 INC A ADD A,E INC A ADD A,L LD L,A LD A,H ADC A,$00 LD H,A L34DC: LD A,($4DC5) OR A JR NZ,L34E9 ; (+$07) INC A LD ($4DC5),A ; Set $4DC5 to 1 ?? LD ($4DBD),HL ; Store ?? word in $4DBD for ?? L34E9: EX (SP),HL PUSH HL RES 6,H LD A,($4DC3) CPL AND $03 LD B,A INC B LD A,($4DC6) LD C,A L34F9: OR C RLCA RLCA DJNZ L34F9 ; (-$05) LD E,A EX AF,AF' JR Z,L3518 ; (+$16) LD (HL),E DEC A LD E,A LD A,C LD B,$03 L3508: RRCA RRCA OR C DJNZ L3508 ; (-$05) LD B,E LD E,A LD A,B OR A INC HL JR Z,L3518 ; (+$04) L3514: LD (HL),E INC HL DJNZ L3514 ; (-$04) L3518: LD A,($4DC2) CPL AND $03 JR Z,L352C ; (+$0c) LD B,A LD C,$FC LD A,E L3524: AND C RLC C RLC C DJNZ L3524 ; (-$07) LD E,A L352C: LD (HL),E RLC D RLC D L3531: LD A,($4DC4) OR A JR NZ,L353C ; (+$05) LD BC,$0028 JR L353F ; (+$03) L353C: LD BC,$FFD8 L353F: POP HL ADD HL,BC EXX POP DE EXX LD A,($4DC3) LD E,A CPL AND $03 INC A LD C,A LD B,E INC B L354F: LD A,(HL) L3550: RLCA RLCA DJNZ L3550 ; (-$04) LD B,C L3555: LD C,A AND $03 CP D JR Z,L358B ; (+$30) INC E EXX DEC DE LD A,D OR E EXX JR NZ,L357D ; (+$1a) LD A,($4DC4) OR A JR NZ,L3593 ; (+$2a) INC A LD ($4DC4),A ; Set $4DC4 to 1 ?? LD HL,($4DBD) PUSH HL LD HL,($4DBF) PUSH HL LD A,($4DC1) LD ($4DC3),A ; Store $4DC1 in $4DC3 ?? JR L3531 ; (-$4c) L357D: LD A,C RLCA RLCA DJNZ L3555 ; (-$2d) INC HL LD C,$04 LD E,$00 LD B,$01 JR L354F ; (-$3c) L358B: PUSH HL LD A,C RRCA RRCA EX AF,AF' JP L344C ; (close enough for relative jump ??) L3593: RET L3594: ; ?? Routine LD A,($4DC8) LD D,A LD A,($4DC7) LD H,A CALL L31B5 ; to ?? JP L3421 ; (close enough for relative jump ??) L35A2: ; ?? Routine LD HL,$0000 LD ($4DEB),HL ; Set $4DEB word to $0000 ?? LD ($4DE9),HL ; Set $4DE9 word to $0000 ?? LD HL,$5000 LD ($4DE7),HL ; Set $4DE7 word to $5000 ?? LD HL,$5600 LD ($4DE5),HL ; Set $4DE5 word to $5600 ?? RET L35B8: ; Color Data Block in ROM DB $7E ; &(COL3L) = Gold (Left screen color 3) Ramp Colors Only DB $F5 ; &(COL2L) = Blue (Left screen color 2) DB $53 ; &(COL1L) = Red (Left screen color 1) DB $00 ; &(COL0L) = Black (Left screen color 0) DB $7E ; &(COL3R) = Gold (Right screen color 3) Ramp Intensity DB $F5 ; &(COL2R) = Blue (Right screen color 2) DB $53 ; &(COL1R) = Red (Right screen color 1) DB $00 ; &(COL0R) = Black (Right screen color 0) L35C0: ; Set Colors Routine LD BC,$0008 LD DE,COLORS ; Save Color Block to $4F06 in RAM LD HL,L35B8 LDIR LD BC,$080B ; Out COLBX Port eight times LD HL,COLORS OTIR RET L35D4: ; ?? Routine IN A,(SW0) ; Read &(16) for Player One Joystick LD B,A AND $10 ; Set Trigger as if Pulled LD HL,OLDSW0 XOR (HL) CP $10 ; Same as $4DBB Old Joystick Reading ? JP Z,L35F6 ; (close enough for relative jump ??) LD A,(HL) CP $10 JP NZ,L35ED ; (close enough for relative jump ??) LD (HL),$00 ; Save 0 as Old Joystick 1 JP L35F6 ; (close enough for relative jump ??) L35ED: LD (HL),$10 LD A,$01 LD HL,$4DBC XOR (HL) LD (HL),A L35F6: LD (IX+$09),$00 ; Set Delta Y to 0 LD (IX+$04),$00 ; Set Delta X to 0 LD A,(CURSOR) OR A ; is $4DBA set to Use Knobs ? JP NZ,L363C ; (close enough for relative jump ??) LD A,($4DB9) OR A JP NZ,L3611 ; (close enough for relative jump ??) LD C,$01 JP L3613 ; (close enough for relative jump ??) L3611: LD C,$04 L3613: BIT 0,B JP Z,L361E ; (close enough for relative jump ??) LD A,C NEG LD (IX+$09),A ; Save Delta Y L361E: BIT 1,B JP Z,L3626 ; (close enough for relative jump ??) LD (IX+$09),C ; Save Delta Y L3626: BIT 2,B JP Z,L3631 ; (close enough for relative jump ??) LD A,C NEG LD (IX+$04),A ; Save Delta X L3631: BIT 3,B JP Z,L3639 ; (close enough for relative jump ??) LD (IX+$04),C ; Save Delta X L3639: JP L36FF ; (close enough for relative jump ??) L363C: LD A,($4DB8) OR A ; is $4DB8 Not Zero ? JP NZ,L367E ; (close enough for relative jump ??) IN A,(POT0) ; Read &(28) for Player One Knob CP $20 JP C,L3660 ; (close enough for relative jump ??) NEG SRL A ADD A,$10 LD HL,$4DF3 LD B,A SUB (HL) JP NC,L365A ; (close enough for relative jump ??) NEG L365A: CP $10 JP NC,L3660 ; (close enough for relative jump ??) LD (HL),B L3660: IN A,(POT2) ; Read &(30) for Player Three Knob CP $20 JP C,L367B ; (close enough for relative jump ??) NEG SRL A LD HL,$4DF8 LD B,A SUB (HL) JP NC,L3675 ; (close enough for relative jump ??) NEG L3675: CP $10 JP NC,L367B ; (close enough for relative jump ??) LD (HL),B L367B: JP L36FF ; (close enough for relative jump ??) L367E: LD A,($4DB8) CP $01 ; is $4DB8 Equal to 2 ? JP NZ,L36A7 ; (close enough for relative jump ??) IN A,(POT0) ; Read &(28) for Player One Knob CP $20 JP C,L3696 ; (close enough for relative jump ??) NEG SRL A ADD A,$10 LD ($4DF3),A ; Set $4DF3 to 16 + ?? L3696: IN A,(POT2) ; Read &(30) for Player Three Knob CP $20 JP C,L36A4 ; (close enough for relative jump ??) NEG SRL A LD ($4DF8),A ; Set $4DF8 to ?? L36A4: JP L36FF ; (close enough for relative jump ??) L36A7: IN A,(POT0) ; Read &(28) for Player One Knob CP $20 JP C,L36D4 ; (close enough for relative jump ??) NEG SRL A ADD A,$10 LD D,A LD B,$00 LD A,(IX+$06) ; Read Block X CP D JP Z,L36C8 ; (close enough for relative jump ??) JP NC,L36C6 ; (close enough for relative jump ??) LD B,$01 JP L36C8 ; (close enough for relative jump ??) L36C6: LD B,$FF L36C8: LD A,($4DB9) OR A JP Z,L36D1 ; (close enough for relative jump ??) SLA B L36D1: LD (IX+$04),B ; Save Delta X L36D4: IN A,(POT2) ; Read &(30) for Player Three Knob CP $20 JP C,L36FF ; (close enough for relative jump ??) NEG SRL A LD E,A LD B,$00 LD A,(IX+$0B) ; Read Block Y CP E JP Z,L36F3 ; (close enough for relative jump ??) JP NC,L36F1 ; (close enough for relative jump ??) LD B,$01 JP L36F3 ; (close enough for relative jump ??) L36F1: LD B,$FF L36F3: LD A,($4DB9) OR A JP Z,L36FC ; (close enough for relative jump ??) SLA B L36FC: LD (IX+$09),B ; Save Delta Y L36FF: RET L3700: ; Save A for Hold Magic Register Temporaraly Routine LD B,A LD A,(HOLDMR) LD (OLDHMR),A ; Store $4DD6 in $4DB7 for Old Hold Magic Register LD A,B LD (HOLDMR),A ; Save A in $4DD6 for Hold Magic Register RET L370C: ; Restore Old Hold Magic Register Routine LD A,(OLDHMR) LD (HOLDMR),A ; Restore $4DB7 to $4DD6 for Hold Magic Register RET L3713: ; 10 bytes of 8x5 Data for Color CURSOR DB $02,$02 ; X, Y Offsets to Hot Spot DB $02,$05 ; W Bytes by H Lines Pattern Size DB $04,$00 ; . . 1 . . . . . DB $04,$00 ; . . 1 . . . . . DB $55,$40 ; 1 1(1)1 1 . . . DB $04,$00 ; . . 1 . . . . . DB $04,$00 ; . . 1 . . . . . L3721: ; Limit Table Data for Cursor DB $02 ; Left DB $9F ; Right DB $02 ; Top DB $46 ; Bottom L3725: ; ?? Routine LD A,($4DB6) OR A RET Z LD A,($4DB5) OR A JR NZ,L3733 ; (+$03) CALL L2416 ; to ?? L3733: CALL L35D4 ; to ?? LD A,$01 LD ($4DB5),A ; Set $4DB5 to 1 ?? JP L26AA ; (NOT close enough for relative jump ??) L373E: ; ?? Routine LD A,($4DB5) OR A RET Z LD IX,BLOCK0 ; Fixed Location Block XOR A LD ($4DB5),A ; Set $4DB5 to 0 ?? JP L2416 ; (NOT close enough for relative jump ??) L374E: ; Draw A Hollow Box ?? Routine LD A,($4DB4) LD HL,$4DB2 LD ($4DD5),A ; Store $4DB4 in $4DD5 ?? ADD A,(HL) LD ($4DD3),A ; Store ($4DB4 + $4DB2) in $4DD3 for ?? LD A,($4DB3) LD ($4DD4),A ; Store $4DB3 in $4DD4 ?? LD ($4DD2),A ; Store $4DB3 in $4DD2 ?? CALL L32CF ; to ?? LD A,($4DD0) LD HL,$4DB1 ADD A,(HL) LD ($4DD2),A ; Store ($4DD0 + $4DB1) in $4DD2 for ?? CALL L32D9 ; to ?? LD A,($4DB4) LD ($4DD3),A ; Store $4DB4 in $4DD3 ?? CALL L32D9 ; to ?? LD A,($4DB3) LD ($4DD2),A ; Store $4DB3 in $4DD2 ?? CALL L32D9 ; to ?? JP L31B5 ; (NOT close enough for relative jump ??) L3789: ; Draw A Hollow Box and Restore Old Multi-Color Routine CALL L374E ; to Draw A Hollow Box ?? LD A,(OLDMUC) LD (MULTIC),A ; Restore $4DD8 to $4DD9 for Multi-Color RET L3793: ; Draw a Filled Box ?? Routine LD HL,($4DB3) PUSH HL LD HL,($4DB1) PUSH HL L379B: CALL L374E ; to Draw A Hollow Box ?? LD A,($4DB2) CP $02 JR C,L37C1 ; (+$1c) SUB $02 LD ($4DB2),A ; Set $4DB2 to 2 ?? LD A,($4DB1) CP $02 JR C,L37C1 ; (+$10) SUB $02 LD ($4DB1),A ; Set $4DB1 to 2 ?? LD HL,$4DB4 INC (HL) LD HL,$4DB3 INC (HL) JP L379B ; (close enough for relative jump ??) L37C1: POP HL LD ($4DB1),HL ; Store Return ?? word in $4DB1 ?? POP HL LD ($4DB3),HL ; Store ?? word in $4DB3 ?? RET ; to Where ?? L37CA: ; ?? Routine LD A,($4DCD) PUSH AF L37CE: CALL L32EC ; to ?? ($4DCD times ??) LD HL,$4DCD DEC (HL) JR NZ,L37CE ; (-$09) POP AF LD ($4DCD),A ; Restore $4DCD after counting it down to 0 ?? RET L37DC: ; ?? Routine LD A,$55 LD ($4DD2),A ; Set $4DD2 to 85 ?? XOR A LD ($4DD3),A ; Set $4DD3 to 0 ?? LD B,$A0 L37E7: PUSH BC CALL L32A0 ; to ?? (160 times ??) LD HL,$4DD3 INC (HL) ; 160 times ?? POP BC DJNZ L37E7 ; (-$0b) RET L37F3: XOR A LD ($4DD2),A ; Set $4DD2 to 0 ?? LD ($4DD3),A ; Set $4DD3 to 0 ?? LD B,$A0 L37FC: PUSH BC CALL L32A0 ; to ?? (160 times ??) LD HL,$4DD3 INC (HL) ; 160 times ?? POP BC DJNZ L37FC ; (-$0b) RET L3808: ; ?? Routine XOR A LD ($4DD2),A ; Set $4DD2 to 0 ?? LD A,$9F LD ($4DD3),A ; Set $4DD3 to 159 ?? LD B,$55 L3813: PUSH BC CALL L32A0 ; to ?? (85 times ??) LD HL,$4DD2 INC (HL) ; 85 times ?? POP BC DJNZ L3813 ; (-$0b) RET L381F: ; ?? Routine XOR A LD ($4DD2),A ; Set $4DD2 to 0 ?? LD ($4DD3),A ; Set $4DD3 to 0 ?? LD B,$55 L3828: PUSH BC CALL L32A0 ; to ?? (85 times ??) LD HL,$4DD2 INC (HL) ; 85 times ?? POP BC DJNZ L3828 ; (-$0b) RET L3834: ; ?? Routine POP HL LD ($4DAF),HL ; Store old Return Address word in $4DAF ?? L3838: LD A,($4DBC) OR A ; ?? is Not Zero ? JR NZ,L3847 ; (+$09) LD DE,$0102 CALL L204D ; to Set CT2 to Delay of 1 and Jump to JUMP02 Address JP L3838 ; (close enough for relative jump ??) L3847: ; Jump to old Return Address stored in ?? DI LD HL,($4DAF) ; Read old Return Address word from $4DAF ?? JP (HL) ; to Where ?? L384C: ; ?? Routine LD A,($4DF3) LD ($4DAE),A ; Store $4DF3 in $4DAE ?? LD A,($4DF8) LD ($4DAD),A ; Store $4DF8 in $4DAD ?? RET ; Set as User Routine #2 in RAM to Draw Point or Dotted Line on "Up" ?? L3859: ; Loop Here waiting for Interrupt until Replaced ?? CALL L384C ; to ?? L385C: DI LD A,($4DF3) LD HL,$4DAE CP (HL) ; is $4DF3 Not Equal to $4DAE ? JR NZ,L386F ; (+$09) LD A,($4DF8) LD HL,$4DAD CP (HL) ; is $4DF8 Equal to $4DAD ? JR Z,L3896 ; (+$27) L386F: LD A,($4DBC) OR A ; is $4DBC Equal to Zero ? JR Z,L3893 ; (+$1e) CALL L373E ; to ?? LD A,($4DAE) LD ($4DD5),A ; Store $4DAE in $4DD5 ?? LD A,($4DAD) LD ($4DD4),A ; Store $4DAD in $4DD4 ?? LD A,($4DF3) LD ($4DD3),A ; Store $4DF3 in $4DD3 ?? LD A,($4DF8) LD ($4DD2),A ; Store $4DF8 in $4DD2 ?? CALL L32A0 ; to ?? L3893: CALL L384C ; to ?? L3896: LD DE,$0102 CALL L204D ; to Set CT2 to Delay of 1 and Jump to JUMP02 Address JP L385C ; (close enough for relative jump ??) ; Set as User Routine #2 in RAM to Draw Rubber Line on "Down" ?? L389F: ; Loop Here waiting for Interrupt until Replaced ?? CALL L3834 ; to ?? LD A,($4DF3) LD ($4DD5),A ; Store $4DF3 in $4DD5 ?? LD ($4DD3),A ; Store $4DF3 in $4DD3 ?? LD A,($4DF8) LD ($4DD4),A ; Store $4DF8 in $4DD4 ?? LD ($4DD2),A ; Store $4DF8 in $4DD2 ?? L38B4: ; Loop Here if $4DBC Not Zero ?? LD A,$20 CALL L3700 ; to Save XOR in Hold Magic Register Temporaraly CALL L32CF ; to ?? LD DE,$0102 CALL L204D ; to Set CT2 to Delay of 1 and Jump to JUMP02 Address DI CALL L32CF ; to ?? LD A,($4DF3) LD ($4DD3),A ; Store $4DF3 in $4DD3 ?? LD A,($4DF8) LD ($4DD2),A ; Store $4DF8 in $4DD2 ?? LD A,($4DBC) OR A ; is $4DBC Not Equal to Zero ? JR NZ,L38B4 ; (-$24) CALL L370C ; to Restore Old Hold Magic Register CALL L32A0 ; to ?? JP L389F ; (close enough for relative jump ??) ; Set as User Routine #2 in RAM to Draw a Circle on "mR" or "mS" Routine ; (on $4DAC = 0 Draw a Hollow Circle, on $4DAC = 1 Draw a Filled Circle) L38E1: ; Loop This Routine waiting for Interrupt until Replaced ?? CALL L3834 ; to ?? LD A,($4DF3) LD ($4DCB),A ; Store $4DF3 in $4DCB ?? LD A,($4DF8) LD ($4DC9),A ; Store $4DF8 in $4DC9 ?? LD A,$01 LD ($4DCD),A ; Set $4DCD to 1 ?? L38F5: ; Loop Here if $4DBC Not Zero ?? LD A,$20 CALL L3700 ; to to Save XOR in Hold Magic Register Temporaraly CALL L3417 ; to ?? CALL L370C ; to Restore Old Hold Magic Register LD DE,$0102 CALL L204D ; to Set CT2 to Delay of 1 and Jump to JUMP02 Address DI LD A,$20 CALL L3700 ; to to Save XOR in Hold Magic Register Temporaraly CALL L3417 ; to ?? LD A,($4DF8) LD B,A LD A,($4DC9) LD C,A SUB B BIT 7,A ; is ($4DF8 - $4DC9) Not Negative ? JR Z,L391E ; (+$02) NEG L391E: OR A ; is $4DF8 Not Equal $4DC9 ? JR NZ,L3922 ; (+$01) INC A ; Set A to Minimum of 1 ?? L3922: LD B,A ; Absolute Value of ($4DF8 - $4DC9) ?? LD A,C ADD A,B CP $54 ; is ($4DF8 - $4DC9 + $4DC9) Less Than 84 ? JR C,L392E ; (+$05) LD A,$54 SUB C ; A = 84 - $4DC9 ?? JR L392F ; (+$01) L392E: LD A,B ; A = Absolute Value of ($4DF8 - $4DC9) or 1 ?? L392F: LD ($4DCD),A ; Set $4DCD to A ?? LD A,($4DBC) OR A ; is $4DBC Not Equal to 0 ? JR NZ,L38F5 ; (-$43) CALL L370C ; to Restore Old Hold Magic Register LD A,(FILLCI) ; Read $4DAC OR A ; Draw a Filled Circle ? JR NZ,L3946 ; (+$05) CALL L32EC ; to ?? JR L3949 ; (+$03) L3946: CALL L37CA ; to ?? L3949: JP L38E1 ; (close enough for relative jump ??) ; Set as User Routine #2 in RAM to Draw a Box on "cH" Routine ; (on $4DAB = 0 Draw a Hollow Box, on $4DAB = 1 Draw a Filled Box) L394C: ; Loop This Routine waiting for Interrupt until Replaced ?? CALL L3834 ; to ?? LD A,($4DF3) LD ($4DB4),A ; Store $4DF3 in $4DB4 ?? LD A,($4DF8) LD ($4DB3),A ; Store $4DF8 in $4DB3 ?? XOR A LD ($4DB1),A ; Set $4DB1 to 0 ?? LD ($4DB2),A ; Set $4DB2 to 0 ?? L3962: ; Loop Here if $4DBC Not Zero ?? LD A,$20 CALL L3700 ; to to Save XOR in Hold Magic Register Temporaraly CALL L3789 ; to Draw A Hollow Box and Restore Old Multi-Color CALL L370C ; to Restore Old Hold Magic Register LD DE,$0102 CALL L204D ; to Set CT2 to Delay of 1 and Jump to JUMP02 Address DI LD A,$20 CALL L3700 ; to to Save XOR in Hold Magic Register Temporaraly CALL L3789 ; to Draw A Hollow Box and Restore Old Multi-Color CALL L370C ; to Restore Old Hold Magic Register LD HL,$4DB2 LD A,($4DF3) LD B,A LD A,($4DB4) SUB B ; is $4DF3 Greater Than $4DB4 ? JR C,L3994 ; (+$08) ADD A,(HL) LD (HL),A ; Add ($4DB4 - $4DF3) to $4DB2 ?? LD A,B LD ($4DB4),A ; Store $4DF3 in $4DB4 ?? JR L3997 ; (+$03) L3994: NEG LD (HL),A ; Store ($4DF3 - $4DB4) in $4DB2 ?? L3997: LD HL,$4DB1 LD A,($4DF8) LD B,A LD A,($4DB3) SUB B ; is $4DF8 Greater Than $4DB3 ? JR C,L39AC ; (+$08) ADD A,(HL) LD (HL),A ; Add ($4DB3 - $4DF8) to $4DB1 ?? LD A,B LD ($4DB3),A ; Store $4DF8 in $4DB3 ?? JR L39AF ; (+$03) L39AC: NEG LD (HL),A ; Store ($4DF8 - $4DB3) in $4DB1 ?? L39AF: LD A,($4DBC) OR A ; is $4DBC Not Equal to 0 ? JR NZ,L3962 ; (-$53) CALL L370C ; to Restore Old Hold Magic Register CALL L373E ; to ?? LD A,(FILLBX) ; Read $4DAB OR A ; Draw a Filled Box ? JR NZ,L39C6 ; (+$05) CALL L374E ; to Draw A Hollow Box ?? JR L39C9 ; (+$03) L39C6: CALL L3793 ; to Draw a Filled Box ?? L39C9: JP L394C ; (close enough for relative jump ??) ; Set as User Routine #2 in RAM to Bad Fill on "%" Routine L39CC: ; Loop This Routine waiting for Interrupt until Replaced ?? CALL L3834 ; to ?? CALL L373E ; to ?? XOR A LD ($4DBC),A ; Set $4DBC to 0 ?? XOR A LD ($4DD5),A ; Set $4DD5 to 0 ?? LD A,$9F LD ($4DD3),A ; Set $4DD3 to 159 ?? LD A,$55 LD ($4DD4),A ; Set $4DD4 to 85 ?? LD ($4DD2),A ; Set $4DD2 to 85 ?? LD A,(MULTIC) PUSH AF ; Save $4DD9 for Multi-Color LD A,$03 LD (MULTIC),A ; Set $4DD9 to 3 for Multi-Color Temporaraly LD A,$10 CALL L3700 ; to Save OR in Hold Magic Register Temporaraly CALL L32A0 ; to ?? CALL L370C ; to Restore Old Hold Magic Register POP AF LD (MULTIC),A ; Restore $4DD9 for Multi-Color LD A,($4DF3) LD ($4DC8),A ; Store $4DF3 in $4DC8 ?? LD A,($4DF8) LD ($4DC7),A ; Store $4DF8 in $4DC7 ?? CALL L3594 ; to ?? JP L39CC ; (close enough for relative jump ??) L3A11: ; ?? Subroutine LD A,($4DF3) LD ($4DD5),A ; Store $4DF3 in $4DD5 ?? LD A,($4DF8) LD ($4DD4),A ; Store $4DF8 in $4DD4 ?? RET ; Set as User Routine #2 in RAM to Fan Lines Left on "=,C" Routine L3A1E: ; Loop This Routine waiting for Interrupt until Replaced ?? CALL L3834 ; to ?? CALL L373E ; to ?? XOR A LD ($4DBC),A ; Set $4DBC to 0 ?? CALL L3A11 ; to ?? CALL L381F ; to ?? JP L3A1E ; (close enough for relative jump ??) ; Set as User Routine #2 in RAM to Fan Lines Right on "=,Up" Routine L3A31: ; Loop This Routine waiting for Interrupt until Replaced ?? CALL L3834 ; to ?? CALL L373E ; to ?? XOR A LD ($4DBC),A ; Set $4DBC to 0 ?? CALL L3A11 ; to ?? CALL L3808 ; to ?? JP L3A31 ; (close enough for relative jump ??) ; Set as User Routine #2 in RAM to Fan Lines Up on "=,Down" Routine L3A44: ; Loop This Routine waiting for Interrupt until Replaced ?? CALL L3834 ; to ?? CALL L373E ; to ?? XOR A LD ($4DBC),A ; Set $4DBC to 0 ?? CALL L3A11 ; to ?? CALL L37F3 ; to ?? JP L3A44 ; (close enough for relative jump ??) ; Set as User Routine #2 in RAM to Fan Lines Down on "=,%" Routine L3A57: ; Loop This Routine waiting for Interrupt until Replaced ?? CALL L3834 ; to ?? CALL L373E ; to ?? XOR A LD ($4DBC),A ; Set $4DBC to 0 ?? CALL L3A11 ; to ?? CALL L37DC ; to ?? JP L3A57 ; (close enough for relative jump ??) L3A6A: ; Clear Location Blocks 1 through 7 Routine DI LD A,$01 LD ($4DB6),A ; Set $4DB6 to 1 ?? LD B,$07 LD HL,BLOCK1 L3A75: PUSH HL POP IX ; IX = Absolute Screen Location ?? BIT 7,(IX+$01) ; is Pixel Color 2 or 3 ? JR Z,L3A89 ; (+$0b) PUSH BC ; Save BC and HL PUSH HL CALL L2416 ; to ?? POP HL POP BC ; Restore HL and BC RES 7,(IX+$01) ; Clear Pixel Color to 0 or 1 ? L3A89: LD DE,$0023 ADD HL,DE ; Down a Row and Left 5 bytes ?? DJNZ L3A75 ; (-$1a) XOR A OUT (HORCB),A ; &(9) = 0 for Horizontal Color Boundary ?? LD HL,L2172 CALL L20A9 ; to ?? LD HL,L2176 CALL L20A9 ; to ?? XOR A LD ($4F48),A ; Set $4F48 to 0 ?? LD ($4F47),A ; Set $4F47 to 0 ?? DI LD IX,BLOCK0 ; $4DEE ?? RES 2,(IX+$01) ; Clear Bit 2 of Fixed Location Block CALL L217A ; to ?? RET L3AB2: ; Clear Block 1 through 7 Deltas ?? Routine LD B,$07 ; for Seven Blocks LD DE,$001E LD HL,BLOCK1+$04 ; Starting at $4E14 L3ABA: LD (HL),$00 ; Clear Block +$04 (Delta X) INC HL INC HL INC HL RES 5,(HL) ; Block + $07 (to Clear ??) INC HL INC HL LD (HL),$00 ; Clear Block + $09 (Delta Y) ADD HL,DE ; to Next Block +$04 DJNZ L3ABA ; (-$0e) RET L3AC9: ; Handle Block 1 through 7 ?? BIT 5,(IX+$07) JR Z,L3AF9 ; (+$2a) CALL L35D4 ; to ?? LD A,(CURSOR) OR A ; is $4DBA clear to Use Joystick ? JR Z,L3AF9 ; (+$21) LD A,($4DB8) CP $02 ; is $4DB8 Less Than 2 ? JR NC,L3AED ; (+$0e) LD A,($4DF3) LD (IX+$06),A ; Save Block X LD A,($4DF8) LD (IX+$0B),A ; Save Block Y JR L3AF9 ; (+$0c) L3AED: LD A,(IX+$06) LD ($4DF3),A ; Set $4DF3 to Block ?? X LD A,(IX+$0B) LD ($4DF8),A ; Set $4DF8 to Block ?? Y L3AF9: CALL L26AA ; to ?? RET L3AFD: ; Handle Cursor Block 0 ?? LD A,($4DB9) OR A JR Z,L3B54 ; (+$51) LD A,($4DB6) OR A JR NZ,L3B27 ; (+$1e) LD A,($4DBC) OR A JR Z,L3B25 ; (+$16) CALL L3AB2 ; to Clear Block 1 through 7 Deltas LD A,$01 LD ($4DB6),A ; Set $4DB6 to 1 ?? LD HL,$4DF4 RES 2,(HL) RES 5,(HL) XOR A LD ($4DBC),A ; Set $4DBC to 0 ?? XOR A OUT (HORCB),A ; &(9) = 0 for Horizontal Color Boundary ?? L3B25: JR L3B54 ; (+$2d) L3B27: BIT 5,(IX+$07) JR Z,L3B41 ; (+$14) XOR A LD ($4DB6),A ; Set $4DB6 to 0 ?? CALL L373E ; to ?? XOR A LD ($4DBC),A ; Set $4DBC to 0 ?? XOR A OUT (HORCB),A ; &(9) = 0 for Horizontal Color Boundary ?? RES 5,(IX+$07) JR L3B54 ; (+$13) L3B41: LD A,($4DBC) OR A JR Z,L3B54 ; (+$0d) LD HL,$4DF4 SET 2,(HL) LD A,$80 OUT (HORCB),A ; &(9) = 128 for Set Border Color to Color 2 ?? XOR A LD ($4DBC),A ; Set $4DBC to 0 ?? L3B54: CALL L3725 ; to ?? RET L3B58: ; Limit Table for Block Draws DB $0F ; Left DB $96 ; Right DB $0F ; Top DB $46 ; Bottom L3B5C: ; 7 words of Location Block 7 through Block 1 Addresses for ?? DW BLOCK7 ; Location Block #7 DW BLOCK6 ; Location Block #6 DW BLOCK5 ; Location Block #5 DW BLOCK4 ; Location Block #4 DW BLOCK3 ; Location Block #3 DW BLOCK2 ; Location Block #2 DW BLOCK1 ; Location Block #1 L3B6A: ; Data for Empty Image DB $00,$00 ; X, Y Offsets to Hot Spot DB $01,$01 ; W Bytes by H Lines Pattern Size DB $00 ; .... L3B6F: ; 35 bytes of Default Info to Move into BLOCK1 thru BLOCK7 ?? DB $20 ; +$00 = MAGIC to Write with DB $80 ; +$01 DB $01 ; +$02 = Speed ?? DW $0000 ; +$03, $04 = Delta X DW $4000 ; +$05, $06 = X DB $01 ; +$07 DW $0000 ; +$08, $09 = Delta Y DW $3100 ; +$0A, $0B = Y DB $01 ; +$0C DW $0000 ; +$0D, $0E DW $0000 ; +$0F, $10 DB $00 ; +$11 DW L3B6A ; +$12, $13 = Data for Image (Empty by Default) DW L3B58 ; +$14, $15 = Limit Table (Table of 4 bytes for ??) DB $00 ; +$16 DW $FF00 ; +$17, $18 DB $08 ; +$19 DW L3AC9 ; +$1A, $1B to Handle Block ?? DB $FF ; +$1C = Header Up Counter (or $FF for One Header) DB $01 ; +$1D = Delay Down Counter DW L2FF9 ; +$1E, $1F = Header for Pattern Data Block DW L2FF9 ; +$20, $21 = Header Base Address DB $FF ; +$22 L3B92: ; Size Byte and 35 Bytes of Initial Cursor Data to Move into BLOCK0 DB $23 ; Size of Block DB $20 ; +$00 = MAGIC to Write with DB $20 ; +$01 DB $00 ; +$02 = Speed ?? DW $0000 ; +$03, $04 = Delta X DW $5000 ; +$05, $06 = X DB $01 ; +$07 DW $0000 ; +$08, $09 = Delta Y DW $2C00 ; +$0A, $0B = Y DB $01 ; +$0C DW $0000 ; +$0D, $0E DW L3B5C ; +$0F, $10 = Table of Block 7 through 1 Addresses) DB $07 ; +$11 DW L3713 ; +$12, $13 = Data for Cursor Image DW L3721 ; +$14, $15 = Limit Table for Cursor DB $00 ; +$16 DW $FF00 ; +$17, $18 DB $04 ; +$19 DW L3AFD ; +$1A, $1B to Handle Cursor Block 0 DB $FF ; +$1C = One Cursor Header DB $00 ; +$1D = No Delay DW $0000 ; +$1E, $1F for No Header for Pattern Data Block DW $0000 ; +$20, $21 for No Header Base Address DB $00 ; +$22 L3BB6: ; Load Block 1 through 7 and ?? Routine LD A,I ; Read I register ?? PUSH AF DI PUSH DE PUSH BC PUSH IX POP DE LD C,$23 LD HL,L3B6F LD B,$00 SYSTEM MOVE ; Move 35 bytes of Info from $3B6F into Destination Block POP BC POP DE LD (IX+$06),D ; Block X LD (IX+$0B),E ; Block Y LD (IX+$1E),C ; Pattern Data LD (IX+$1F),B CALL L2433 ; to Set Up for Draw (with A = ??) POP AF JP PO,L3BDE ; (close enough for relative jump ??) EI L3BDE: LD A,($4F52) DEC A LD (IX+$17),A JP L217A ; Jump to ?? L3BE8: ; Common Return for Draw Pictures Subroutine DI XOR A LD (OLDSW0),A ; Set $4DBB to 0 for Old Joystick 1 Reading XOR A LD ($4DBC),A ; Set $4DBC to 0 ?? LD A,$01 LD ($4DB6),A ; Set $4DB6 to 1 ?? LD A,$01 LD ($4DB9),A ; Set $4DB9 to 1 ?? JP $0000 ; Jump to System Soft Reset ; Draw Two Birds, a Tree, Two Deer and a Turtle on "=,mR" L3BFE: ; from Look Up Jump Address (ROM Table) with A = 28 CALL L3A6A ; to Clear Location Blocks 1 through 7 LD IX,BLOCK6 LD DE,$6C3A ; X = 108 ,Y = 58 LD BC,L2C97 ; Turtle Data CALL L3BB6 ; to ?? LD IX,BLOCK5 LD DE,$2840 ; X = 40 ,Y = 64 LD BC,L2BA7 ; Two Deer Data CALL L3BB6 ; to ?? LD IX,BLOCK4 LD DE,$6010 ; X = 96 ,Y = 16 LD BC,L2E85 ; Two Birds Data CALL L3BB6 ; to ?? LD IX,BLOCK7 LD DE,$4434 ; X = 68 ,Y = 52 LD BC,L3042 ; Tree Data CALL L3BB6 ; to ?? JP L3BE8 ; (close enough for relative jump ??) ; Draw a Cottage, Two Trees and Two Kangaroos on "=,cH" L3C38: ; from Look Up Jump Address (ROM Table) with A = 30 CALL L3A6A ; to Clear Location Blocks 1 through 7 LD IX,BLOCK7 LD DE,$3C34 ; X = 60 ,Y = 52 LD BC,L2FF6 ; Kangaroo Data CALL L3BB6 ; to ?? LD IX,BLOCK6 LD DE,$6046 ; X = 96 ,Y = 70 LD BC,L2FF6 ; Kangaroo Data CALL L3BB6 ; to ?? LD IX,BLOCK4 LD DE,$3010 ; X = 48 ,Y = 16 LD BC,L3042 ; Tree Data CALL L3BB6 ; to ?? LD IX,BLOCK1 LD DE,$5010 ; X = 80 ,Y = 16 LD BC,L278B ; Cottage Data CALL L3BB6 ; to ?? LD IX,BLOCK3 LD DE,$7010 ; X = 112 ,Y = 16 LD BC,L3042 ; Tree Data CALL L3BB6 ; to ?? JP L3BE8 ; (close enough for relative jump ??) ; Draw One Kangaroo on "=,9" L3C7F: ; from Look Up Jump Address (ROM Table) with A = 34 CALL L3A6A ; to Clear Location Blocks 1 through 7 LD IX,BLOCK7 LD DE,$5030 ; X = 80 ,Y = 48 LD BC,L2FF6 ; Kangaroo Data CALL L3BB6 ; to ?? JP L3BE8 ; (close enough for relative jump ??) ; Draw Two Houses and a Garden on "=,mS" L3C92: ; from Look Up Jump Address (ROM Table) with A = 29 CALL L3A6A ; to Clear Location Blocks 1 through 7 LD IX,BLOCK5 LD DE,$301E ; X = 48 ,Y = 30 LD BC,L2A6D ; House Data CALL L3BB6 ; to ?? LD IX,BLOCK6 LD DE,$741E ; X = 116 ,Y = 30 LD BC,L2A6D ; House Data CALL L3BB6 ; to ?? LD IX,BLOCK3 LD DE,$542A ; X = 84 ,Y = 42 LD BC,L2C6A ; Garden Data CALL L3BB6 ; to ?? JP L3BE8 ; (close enough for relative jump ??) ; Draw a Fire Station and a Fire Truck on "=,/" L3CBF: ; from Look Up Jump Address (ROM Table) with A = 31 CALL L3A6A ; to Clear Location Blocks 1 through 7 LD IX,BLOCK6 LD DE,$3830 ; X = 56 ,Y = 48 LD BC,L2896 ; Fire Station Data CALL L3BB6 ; to ?? LD IX,BLOCK4 LD DE,$5838 ; X = 88 ,Y = 56 LD BC,L2D9C ; Fire Truck Data CALL L3BB6 ; to ?? JP L3BE8 ; (close enough for relative jump ??) ; Draw One Cottage on "=,7" L3CDF: ; from Look Up Jump Address (ROM Table) with A = 32 CALL L3A6A ; to Clear Location Blocks 1 through 7 LD IX,BLOCK6 LD DE,$5030 ; X = 80 ,Y = 48 LD BC,L278B ; Cottage Data CALL L3BB6 ; to ?? JP L3BE8 ; (NOT close enough for relative jump ??) ; Draw Seven Turtles on "=,8" L3CF2: ; from Look Up Jump Address (ROM Table) with A = 33 CALL L3A6A ; to Clear Location Blocks 1 through 7 LD IX,BLOCK7 LD DE,$4434 ; X = 68 ,Y = 52 LD BC,L2C97 ; Turtle Data CALL L3BB6 ; to ?? LD IX,BLOCK6 LD DE,$4820 ; X = 72 ,Y = 32 LD BC,L2C97 ; Turtle Data CALL L3BB6 ; to ?? LD IX,BLOCK5 LD DE,$6023 ; X = 96 ,Y = 35 LD BC,L2C97 ; Turtle Data CALL L3BB6 ; to ?? LD IX,BLOCK4 LD DE,$3C28 ; X = 60 ,Y = 40 LD BC,L2C97 ; Turtle Data CALL L3BB6 ; to ?? LD IX,BLOCK3 LD DE,$3C44 ; X = 60 ,Y = 68 LD BC,L2C97 ; Turtle Data CALL L3BB6 ; to ?? LD IX,BLOCK2 LD DE,$603C ; X = 96 ,Y = 60 LD BC,L2C97 ; Turtle Data CALL L3BB6 ; to ?? LD IX,BLOCK1 LD DE,$7030 ; X = 112 ,Y = 48 LD BC,L2C97 ; Turtle Data CALL L3BB6 ; to ?? JP L3BE8 ; (NOT close enough for relative jump ??) ; Set Draw Mode to Rubber Line on "Down" L3D53: ; from Look Up Jump Address (ROM Table) with A = 2 LD HL,L389F L3D56: ; Common Return Point for Set Jump Address #2 (in RAM) Routines DI LD (JUMP02),HL ; Save to Jump Address #2 in RAM LD A,$01 LD ($4F73),A ; Set $4D73 to 1 ?? LD (CT2),A ; Counter Timer 2 at $4FD7 = 1 ?? CALL L3A6A ; to Clear Location Blocks 1 through 7 XOR A LD ($4DB9),A ; Set $4DB9 to 0 ?? EI RET ; Set Draw Mode to Point/Trace on "Up" L3D6B: ; from Look Up Jump Address (ROM Table) with A = 1 LD HL,L3859 JR L3D56 ; (-$1a) ; Set Draw Mode to Hollow Circle on "mR" L3D70: ; from Look Up Jump Address (ROM Table) with A = 4 XOR A L3D71: ; Common Return Point for Circle Routines ?? LD (FILLCI),A ; Set $4DAC to 0 for Hollow Circle, 1 for Filled Circle LD HL,L38E1 JR L3D56 ; (-$23) ; Set Draw Mode to Filled Circle on "mS" L3D79: ; from Look Up Jump Address (ROM Table) with A = 5 LD A,$01 JR L3D71 ; (-$0c) ; Set Draw Mode to Hollow Box on "cH" L3D7D: ; from Look Up Jump Address (ROM Table) with A = 6 XOR A L3D7E: ; Common Return Point for Box Routines ?? LD (FILLBX),A ; Set $4DAB to 0 for Hollow Box, 1 for Filled Box LD HL,L394C JR L3D56 ; (-$30) ; Set Draw Mode to Filled Box on "/" L3D86: ; from Look Up Jump Address (ROM Table) with A = 7 LD A,$01 JR L3D7E ; (-$0c) ; Set Draw Mode to Poorly Fill on "%" (MESS uses "O") L3D8A: ; from Look Up Jump Address (ROM Table) with A = 3 LD HL,L39CC JP L3D56 ; (close enough for relative jump ??) ; Set Draw Mode to Fan Lines Up on "=,Down" L3D90: ; from Look Up Jump Address (ROM Table) with A = 26 LD HL,L3A44 JP L3D56 ; (close enough for relative jump ??) ; Set Draw Mode to Fan Lines Down on "=,%" (MESS uses "Enter,O") L3D96: ; from Look Up Jump Address (ROM Table) with A = 27 LD HL,L3A57 JP L3D56 ; (close enough for relative jump ??) ; Set Draw Mode to Fan Lines Left on "=,C" L3D9C: ; from Look Up Jump Address (ROM Table) with A = 24 LD HL,L3A1E JP L3D56 ; (close enough for relative jump ??) ; Set Draw Mode to Fan Lines Right on "=,Up" L3DA2: ; from Look Up Jump Address (ROM Table) with A = 25 LD HL,L3A31 JP L3D56 ; (close enough for relative jump ??) ; Set Multi-color Mode 0 on "7" L3DA8: ; from Look Up Jump Address (ROM Table) with A = 8 XOR A L3DA9: ; Common Return Point for Multi-Color Mode Routines ?? LD (MULTIC),A ; Set $4DD9 = 0, 1, 2 or 3 for Multi-Color LD (OLDMUC),A ; Set $4DD8 = 0, 1, 2 or 3 for Old Multi-Color RET ; Set Multi-color Mode 1 on "8" L3DB0: ; from Look Up Jump Address (ROM Table) with A = 9 LD A,$01 JR L3DA9 ; (-$0b) ; Set Multi-color Mode 2 on "9" L3DB4: ; from Look Up Jump Address (ROM Table) with A = 10 LD A,$02 JR L3DA9 ; (-$0f) ; Set Multi-color Mode 3 on "*" L3DB8: ; from Look Up Jump Address (ROM Table) with A = 11 LD A,$03 JR L3DA9 ; (-$13) ; Set Color Mode 0 (for Color 1) on "4" L3DBC: ; from Look Up Jump Address (ROM Table) with A = 12 XOR A L3DBD: ; Common Return Point for Color Mode Routines ?? LD (COLORM),A ; Set $4DD7 to 0, 1 or 2 for Color Mode RET ; Set Color Mode 1 on "6" L3DC1: ; from Look Up Jump Address (ROM Table) with A = 14 LD A,$01 JR L3DBD ; (-$08) ; Set Color Mode 2 on "5" L3DC5: ; from Look Up Jump Address (ROM Table) with A = 13 LD A,$02 JR L3DBD ; (-$0c) ; Freeze Color Ramping on "1" L3DC9: ; from Look Up Jump Address (ROM Table) with A = 16 XOR A L3DCA: ; Common Return Point for Ramping Color Routines ?? LD (RMPCLR),A ; Set $4F0E to 0 to Freeze, 1 to Ramp Colors RET ; Ramp Colors ONLY on "2" L3DCE: ; from Look Up Jump Address (ROM Table) with A = 17 LD A,$28 L3DD0: ; Common Return Point for Ramping Boundary Routines ?? OUT (HORCB),A ; &(9) = 40 or 0 for Horizontal Color Boundary ?? LD A,$01 LD ($4F05),A ; Set $4F05 to 1 (Not Used ??) LD A,$01 JR L3DCA ; (-$11) ; Ramp Colors AND Intensity on "3" L3DDB: ; from Look Up Jump Address (ROM Table) with A = 18 XOR A JR L3DD0 ; (-$0e) ; Set PLOP Magic on "cE" ?? L3DDE: ; from Look Up Jump Address (ROM Table) with A = 20 XOR A L3DDF: ; Common Return Point for Set Magic Routines LD (HOLDMR),A ; Set $4DD6 to 0, 16 or 32 for Hold Magic Register LD (OLDHMR),A ; Set $4DB7 to 0, 16 or 32 for Old Hold Magic Register RET ; Set XOR Magic on "." ?? L3DE6: ; from Look Up Jump Address (ROM Table) with A = 22 LD A,$20 JR L3DDF ; (-$0b) ; Set OR Magic on "0" ?? L3DEA: ; from Look Up Jump Address (ROM Table) with A = 21 LD A,$10 JR L3DDF ; (-$0f) ; Reset Colors on "-" ?? L3DEE: ; from Look Up Jump Address (ROM Table) with A = 15 DI CALL L3DEA ; direct to Jump Address (ROM Table) as if A = 21 CALL L3DC9 ; direct to Jump Address (ROM Table) as if A = 16 CALL L35C0 ; to Set Colors CALL L35A2 ; to ?? LD A,$01 JP L3DA9 ; (close enough for relative jump ??) ; Hard Reset on "+" L3E00: ; from Look Up Jump Address (ROM Table) with A = 19 DI LD A,$00 LD (VALIDC),A ; Set $4DFF to 0 to Force a Hard Reset and Clear Screen JP $0000 ; Jump to System Soft Reset ; Soft Reset on "C" L3E09: ; from Look Up Jump Address (ROM Table) with A = 0 DI RST $00 ; to Restart Video Storybook at L2000 ; Begin Two-Part Command on "=" (MESS uses KeyPad Enter) L3E0B: ; from Look Up Jump Address (ROM Table) with A = 23 LD A,$18 LD (KYSHFT),A ; Set $4DAA to 24 for Shift Next Key Press RET ; Use Knobs One and Three on "=,*" L3E11: ; from Look Up Jump Address (ROM Table) with A = 35 LD A,$01 LD (CURSOR),A ; Set $4DBA to 1 RET ; Use Joystick One on "=,-" L3E17: ; from Look Up Jump Address (ROM Table) with A = 39 XOR A LD (CURSOR),A ; Set $4DBA to 0 RET ; What ?? on "=,4" L3E1C: ; from Look Up Jump Address (ROM Table) with A = 36 XOR A LD ($4DB8),A ; Set $4DB8 to 0 ?? RET ; What ?? on "=,5" L3E21: ; from Look Up Jump Address (ROM Table) with A = 37 LD A,$01 LD ($4DB8),A ; Set $4DB8 to 1 ?? RET ; What ?? on "=,6" L3E27: ; from Look Up Jump Address (ROM Table) with A = 38 LD A,$02 LD ($4DB8),A ; Set $4DB8 to 2 ?? RET L3E2D: ; Address Table in ROM for Look Up Jump Address Routine DW L3E09 ; A = 0 on "C" to Do a Soft Reset DW L3D6B ; A = 1 on "Up" to Draw Point/Dotted Trace DW L3D53 ; A = 2 on "Down" to Draw Rubber Line DW L3D8A ; A = 3 on "%" (MESS uses O) to Fill Poorly DW L3D70 ; A = 4 on "mR" to Set Hollow Circle Mode DW L3D79 ; A = 5 on "mS" to Set Filled Circle Mode DW L3D7D ; A = 6 on "cH" to Set Hollow Box Mode DW L3D86 ; A = 7 on "/" to Set Filled Box Mode DW L3DA8 ; A = 8 on "7" to Set Multi-Color Mode 1 DW L3DB0 ; A = 9 on "8" to Set Multi-Color Mode 2 DW L3DB4 ; A = 10 on "9" to Set Multi-Color Mode 3 DW L3DB8 ; A = 11 on "*" to Set Multi-Color Mode 4 DW L3DBC ; A = 12 on "4" to Set Color Mode 1 DW L3DC5 ; A = 13 on "5" to Set Color Mode 2 DW L3DC1 ; A = 14 on "6" to Set Color Mode 3 DW L3DEE ; A = 15 on "-" to Reset Colors to Default DW L3DC9 ; A = 16 on "1" to Stop Color Cycling DW L3DCE ; A = 17 on "2" to Start Color Cycling DW L3DDB ; A = 18 on "3" to Start Intensity Cycling DW L3E00 ; A = 19 on "+" to Blank Screen DW L3DDE ; A = 20 on "cE" to Set to PLOP Draws DW L3DEA ; A = 21 on "0" to Set to OR Draws DW L3DE6 ; A = 22 on "." to Set to XOR Draws DW L3E0B ; A = 23 on "=" to Shift the Following Key Press DW L3D9C ; A = 24 on Shifted "C" to Fan Lines Left DW L3DA2 ; A = 25 on Shifted "Up" to Fan Lines Right DW L3D90 ; A = 26 on Shifted "Down" to Fan Lines Up DW L3D96 ; A = 27 on Shifted "%" (or O) to Fan Lines Down DW L3BFE ; A = 28 on Shifted "mR" to Draw Birds, Tree, Deer and Turtle DW L3C92 ; A = 29 on Shifted "mS" to Draw Houses and Garden DW L3C38 ; A = 30 on Shifted "cH" to Draw Cottage, Trees and Kangaroos DW L3CBF ; A = 31 on Shifted "/" to Draw Fire Station and Fire Truck DW L3CDF ; A = 32 on Shifted "7" to Draw Cottage DW L3CF2 ; A = 33 on Shifted "8" to Draw Turtles DW L3C7F ; A = 34 on Shifted "9" to Draw Kangaroo DW L3E11 ; A = 35 on Shifted "*" to Read Knobs for Position DW L3E1C ; A = 36 on Shifted "4" to ?? DW L3E21 ; A = 37 on Shifted "5" to ?? DW L3E27 ; A = 38 on Shifted "6" to ?? DW L3E17 ; A = 39 on Shifted "-" to Read Joystick for Position ; Make a Noise to Acknowledge KeyPress L3E7D: ; Play Key Note Routine ADD A,A ADD A,$20 OUT (TONEC),A ; &(19) = 32 + (2 * A) for Tone C LD A,$30 OUT (TONMO),A ; &(16) = 48 for Master Oscillator LD A,$08 OUT (VOLC),A ; &(21) = 8 for Volume C LD A,$10 LD (STACKA),A ; Top of Stack Area = 16 (to Play Music ??) RET L3E90: ; Handle SENTRY Return = SF4 ?? Routine LD HL,$4DA9 ; Point to ?? XOR A CP (HL) ; is $4DA9 Not Equal Zero ? RET NZ LD (HL),$01 ; Set $4DA9 = 1 ? LD HL,KYSHFT ; Point to $4DAA for Shift Key Amount LD A,B DEC A ; Extended Return Code - 1 ADD A,(HL) ; Add 24 to KeyCode if Shifted LD (HL),$00 ; Unshift (even if Not Shifted) CP $28 ; KeyCode greater than 40 ? RET NC LD HL,L3E2D ; Jump Table Base in ROM CALL L2034 ; to Look Up Address by 0 through 39 in ROM Jump Table CALL L3E7D ; to Play Key Note 0 through 39 EX DE,HL JP (HL) ; Jump to Address from ROM Jump Table L3EAE: ; Handle SENTRY Return = SF3 ?? Routine XOR A LD ($4DA9),A ; Set $4DA9 to 0 to Enable Handle SENTRY Return = SF4 ?? RET L3EB3: ; DO IT Table Data DB $08 ; on SENTRY Return = SCT7 ?? DW L20A4 ; JMP to machine language routine and pop context DB $01 ; on SENTRY Return = SCT0 ?? DW L207C ; JMP to machine language routine and pop context DB $02 ; on SENTRY Return = SCT1 ?? DW L208A ; JMP to machine language routine and pop context DB $03 ; on SENTRY Return = SCT2 ?? DW L208E ; JMP to machine language routine and pop context DB $04 ; on SENTRY Return = SCT3 ?? DW L2092 ; JMP to machine language routine and pop context DB $05 ; on SENTRY Return = SCT4 ?? DW L2096 ; JMP to machine language routine and pop context DB $06 ; on SENTRY Return = SCT5 ?? DW L209A ; JMP to machine language routine and pop context DB $07 ; on SENTRY Return = SCT6 ?? DW L209F ; JMP to machine language routine and pop context DB $13 ; on SENTRY Return = SF4 ?? DW L3E90 ; JMP to machine language routine and pop context DB $12 ; on SENTRY Return = SF3 ?? DW L3EAE ; JMP to machine language routine and pop context DB $C0 ; End of DO IT Table ; Entry Point L3ED2: ; Initialize Video Story DI ; Disable Interrupts LD SP,STACKA ; Set Stack Pointer to $4DA8 LD HL,(VALIDC) ; $4DFF = Valid Cursor else Preset ALL Variables on Reset LD DE,L3713 ; Base Address for 14 Data Bytes for CURSOR OR A ; Test for Zero and Clear Carry Flag (No SUB word sized) SBC HL,DE ; Already Been Set Up with ($4DFF) = L3713 ? JR Z,L3F35 ; (+$54) LD BC,$01D0 ; 464 byte count XOR A LD HL,STACKA ; Clear Variables ABOVE Top of Stack L3EE8: LD (HL),A ; Loop to Clear $4DA8 through $4F77 CPI ; Decrement BC, Increment HL (ignore Compare) JP PE,L3EE8 ; Is BC NOT 0 ? LD A,$01 LD ($4DB6),A ; Set $4DB6 to 1 ?? CALL L258B ; to Preset Some Variables CALL L2003 ; to Clear Screen LD A,$23 LD ($4F4C),A ; Set $4F4C to 35 ?? XOR A LD (ILINE1),A ; Set $4F54 to 0 ?? LD A,$4B LD ($4F53),A ; Set $4F53 to 75 ?? LD A,$AA LD (ILINE2),A ; Set $4F55 to 170 for Interrupt Line Register LD A,$01 LD ($4DB8),A ; Set $4DB8 to 1 ?? LD A,$A6 OUT (VERBL),A ; &(10) = 83*2 for Vertical Blanking Line LD A,$01 LD (CURSOR),A ; Set $4DBA to 1 to Use Knobs to Move Cursor CALL L3DEE ; to Jump Address (ROM Table) as if A = 15 to Reset Colors LD A,$01 LD ($4DB5),A ; Set $4DB5 to 1 ?? LD A,$13 CALL L3E7D ; to Play Key Note 19 ?? XOR A LD ($4DB9),A ; Set $4DB9 to 0 ?? LD HL,L3B92 LD IX,BLOCK0 CALL L255B ; to Move 35 bytes of Initial Data into Cursor Block 0 L3F35: ; Skip to here to Defeat Hardware Reset LD HL,L2031-$80 ; User Routine #80 Address - 128 LD (USERTB),HL ; Set Extended Systems Table to $1FB1 LD HL,L2033-$40 ; User Argument Suck Table Address - 64 LD (UMARGT),HL ; Set Extended Mask ARGuments Table to $1FF3 XOR A OUT (HORCB),A ; &(9) = 0 for Horizontal Color Boundary SYSSUK FILL DW JUMP00 ; Jump Table Base Address in RAM DW $0010 ; Clear for 16 bytes (8 Jump Address words) DB $00 ; Set $4F62 through $4F71 to 0 XOR A LD ($4DBC),A ; Set $4DBC to 0 ?? LD (OLDSW0),A ; Set $4DBB to 0 for Old Joystick 1 Reading SYSSUK FILL DW CT0 DW $0009 DB $00 ; Set CounterTimers 0 through 7 and CNT to 0 CALL L2277 ; to Set Up Interrupt(s) L3F5C: LD HL,L3F5C ; ALWAYS Return Right Here !! PUSH HL ; Save Return Address for Sentry DO IT EI LD HL,STACKA XOR A CP (HL) ; is Top of Stack Area = 0 ? JR Z,L3F73 ; (+$0b) DEC (HL) ; is (Top of Stack Area - 1) NOT 0 ? JR NZ,L3F73 ; (+$08) XOR A LD BC,$0818 ; eight times to SNDBX Port to fake EMUSIC L3F6F: OUT (C),A ; &(18) = 0's to Clear ALL Music Ports DJNZ L3F6F ; (-$04) L3F73: ; Call Extended User Routine #80 - to ?? SYSSUK $80 DW ALKEYS ; System ALL KEYS Mask SYSSUK DOIT ; A = Sentry Return, B = Extended Return DW L3EB3 ; 3-byte/entry DO IT Table RET ; RETURN to L3F5C if Sentry NOT in Table ; L3F7C ; Duplicates Code above, leave intact to match ROM data DB $28,$54,$01,$D0 DB $01,$AF,$21,$A8,$4D,$77,$ED,$A1,$EA,$85,$3F,$3E,$01,$32,$B6,$4D DB $CD,$8B,$25,$CD,$03,$20,$3E,$23,$32,$4C,$4F,$AF,$32,$54,$4F,$3E DB $4B,$32,$53,$4F,$3E,$AA,$32,$55,$4F,$3E,$02,$32,$B8,$4D,$3E,$A6 DB $D3,$0A,$3E,$01,$32,$BA,$4D,$CD,$8B,$3E,$3E,$01,$32,$B5,$4D,$3E DB $13,$CD,$1A,$3F,$AF,$32,$B9,$4D,$21,$2F,$3C,$DD,$21,$ED,$4D,$CD DB $5B,$25,$21,$B1,$1F,$22,$FD,$4F,$21,$F3,$1F,$22,$FB,$4F,$AF,$D3 DB $09,$FF,$1B,$62,$4F,$10,$00,$00,$AF,$32,$BC,$4D,$32,$BB,$4D,$FF DB $1B,$D5,$4F,$09,$00,$00,$CD,$77,$22,$21,$F9,$3F,$E5,$FB,$21,$A8 END