Chase H.Q. | Routines |
Prev: C0E1 | Up: Map | Next: C2E7 |
Called by $8F82 etc. being self modified.
|
||||||||
draw_tunnel | C15B | LD A,IYl | A = IY.low | |||||
C15D | CP $00 | Compare to <self modified> | ||||||
C15F | RET NZ | Return if non-zero | ||||||
C160 | LD A,$00 | A = <self modified> | ||||||
C162 | LD D,$EE | D = $EE | ||||||
C164 | DEC A | A-- | ||||||
C165 | JR Z,draw_tunnel_0 | Jump if zero | ||||||
C167 | LD D,$FF | D = $FF | ||||||
draw_tunnel_0 | C169 | LD E,D | E = D | |||||
C16A | LD ($C21D),DE | Self modify 'LD DE,x' @ C21C | ||||||
C16E | LD ($C2E4),SP | Save SP to restore on exit (self modify) | ||||||
C172 | LD A,(IY+$4E) | L = ~((IY[$4E] - 2) << 1) | ||||||
C175 | SUB $02 | |||||||
C177 | ADD A,A | |||||||
C178 | CPL | |||||||
C179 | LD L,A | |||||||
C17A | LD C,$00 | C = 0 | ||||||
C17C | LD H,$EB | H = $EB | ||||||
C17E | LD A,(HL) | A = *HL | ||||||
C17F | OR A | Set flags | ||||||
C180 | JP Z,draw_tunnel_2 | Jump if zero | ||||||
C183 | LD D,$10 | D = 16 | ||||||
C185 | JP P,draw_tunnel_3 | Jump if positive | ||||||
draw_tunnel_1 | C188 | LD D,$16 | D = 22 | |||||
C18A | LD L,$1F | L = 31 | ||||||
C18C | JR draw_tunnel_7 | Jump | ||||||
draw_tunnel_2 | C18E | DEC L | A = HL[-1] | |||||
C18F | LD A,(HL) | |||||||
C190 | INC L | |||||||
C191 | AND $F8 | Divide by 8 | ||||||
C193 | RRCA | |||||||
C194 | RRCA | |||||||
C195 | RRCA | |||||||
C196 | SRL A | A >>= 1 | ||||||
C198 | RR C | Rotate C | ||||||
C19A | INC A | A++ | ||||||
C19B | LD D,A | D = A | ||||||
draw_tunnel_3 | C19C | LD H,$E8 | H = $E8 | |||||
C19E | LD A,(HL) | A = *HL | ||||||
C19F | OR A | Set flags | ||||||
C1A0 | JR Z,draw_tunnel_4 | Jump if zero | ||||||
C1A2 | LD E,$10 | E = 16 | ||||||
C1A4 | JP M,draw_tunnel_5 | Jump if negative | ||||||
C1A7 | JP draw_tunnel_1 | Jump | ||||||
draw_tunnel_4 | C1AA | DEC L | L-- | |||||
C1AB | LD A,(HL) | A = *HL + 8 | ||||||
C1AC | ADD A,$08 | |||||||
C1AE | JR C,draw_tunnel_1 | Jump if carry | ||||||
C1B0 | AND $F8 | Divide by 8 | ||||||
C1B2 | RRCA | |||||||
C1B3 | RRCA | |||||||
C1B4 | RRCA | |||||||
C1B5 | LD B,A | B = A | ||||||
C1B6 | SRL A | E = 16 - (A >> 1) | ||||||
C1B8 | CPL | |||||||
C1B9 | ADD A,$11 | |||||||
C1BB | LD E,A | |||||||
draw_tunnel_5 | C1BC | LD A,$20 | A = 32 - B | |||||
C1BE | SUB B | |||||||
C1BF | LD L,$20 | L = 32 | ||||||
C1C1 | RL C | Rotate left | ||||||
C1C3 | JR C,draw_tunnel_6 | Jump if carry | ||||||
C1C5 | DEC L | L-- | ||||||
C1C6 | DEC A | A-- | ||||||
draw_tunnel_6 | C1C7 | LD C,A | C = A | |||||
draw_tunnel_7 | C1C8 | LD A,D | A = D | |||||
C1C9 | LD ($C222),A | Self modify 'JR x' @ draw_tunnel_11 -- jump table target | ||||||
C1CC | LD A,E | A = E | ||||||
C1CD | LD ($C237),A | Self modify 'JR x' @ draw_tunnel_12 -- jump table target | ||||||
C1D0 | LD A,(IY+$35) | A = IY[$35] | ||||||
C1D3 | LD B,A | B = A | ||||||
C1D4 | AND $0F | H = (A & 15) + $F0 | ||||||
C1D6 | ADD A,$F0 | |||||||
C1D8 | LD H,A | |||||||
C1D9 | LD A,B | A = ((B & $70) << 1) + L | ||||||
C1DA | AND $70 | |||||||
C1DC | ADD A,A | |||||||
C1DD | ADD A,L | |||||||
C1DE | JR NC,draw_tunnel_8 | Jump if no carry | ||||||
C1E0 | DEC A | A-- | ||||||
draw_tunnel_8 | C1E1 | LD L,A | L = A | |||||
C1E2 | LD A,$80 | A = 128 - B | ||||||
C1E4 | SUB B | |||||||
C1E5 | EX AF,AF' | Bank/unbank | ||||||
C1E6 | LD A,($A23F) | E = fast_counter & $E0 | ||||||
C1E9 | AND $E0 | |||||||
C1EB | LD E,A | |||||||
C1EC | RRC E | E >>= 2 | ||||||
C1EE | RRC E | |||||||
C1F0 | SUB E | A -= E | ||||||
C1F1 | RRC E | E >>= 2 | ||||||
C1F3 | RRC E | |||||||
C1F5 | SUB E | A -= E | ||||||
C1F6 | ADD A,IYl | A += IY.low | ||||||
C1F8 | LD D,$E6 | D = $E6 | ||||||
C1FA | LD E,A | E = A | ||||||
C1FB | LD A,(IY+$00) | B = IY[0] - B | ||||||
C1FE | SUB B | |||||||
C1FF | LD B,A | |||||||
C200 | LD A,(DE) | A = *DE | ||||||
C201 | LD E,A | E = A | ||||||
C202 | LD A,IYl | A = (16 - IY.low) + E | ||||||
C204 | CPL | |||||||
C205 | ADD A,$11 | |||||||
C207 | ADD A,E | |||||||
C208 | EXX | Bank/unbank | ||||||
C209 | LD B,A | B = A | ||||||
C20A | EXX | Bank/unbank | ||||||
C20B | SUB B | A -= B | ||||||
C20C | LD D,A | D = A | ||||||
C20D | EX AF,AF' | Bank/unbank | ||||||
C20E | ADD A,D | A = D | ||||||
C20F | JP P,draw_tunnel_9 | Jump if positive | ||||||
C212 | LD E,A | E = A | ||||||
C213 | SUB $81 | A -= $81 | ||||||
C215 | NEG | A = -A | ||||||
C217 | ADD A,D | A += D | ||||||
C218 | LD D,A | D = A | ||||||
C219 | LD A,E | A = E | ||||||
draw_tunnel_9 | C21A | EX AF,AF' | Bank/unbank | |||||
C21B | LD B,D | B = D | ||||||
Pixels of tunnel loaded here. Top byte, D, seems to affect bottom row? Bottom byte, E, affects whole pattern. The LD E,D later would explain that.
|
||||||||
C21C | LD DE,$EEEE | DE = <self modified> -- pixels of tunnel | ||||||
Loop
|
||||||||
draw_tunnel_10 | C21F | LD SP,HL | Put it in SP (so we can use PUSH for speed) | |||||
C220 | LD A,L | A = L | ||||||
draw_tunnel_11 | C221 | JR draw_tunnel_11 | Jump table (self modified) | |||||
C223 | PUSH DE | |||||||
C224 | PUSH DE | |||||||
C225 | PUSH DE | |||||||
C226 | PUSH DE | |||||||
C227 | PUSH DE | |||||||
C228 | PUSH DE | |||||||
C229 | PUSH DE | |||||||
C22A | PUSH DE | |||||||
C22B | PUSH DE | |||||||
C22C | PUSH DE | |||||||
C22D | PUSH DE | |||||||
C22E | PUSH DE | |||||||
C22F | PUSH DE | |||||||
C230 | PUSH DE | |||||||
C231 | PUSH DE | |||||||
C232 | PUSH DE | |||||||
C233 | SUB C | A -= C | ||||||
C234 | LD L,A | L = A | ||||||
C235 | LD SP,HL | Put it in SP (so we can use PUSH for speed) | ||||||
draw_tunnel_12 | C236 | JR draw_tunnel_12 | Jump table (self modified) | |||||
C238 | PUSH DE | |||||||
C239 | PUSH DE | |||||||
C23A | PUSH DE | |||||||
C23B | PUSH DE | |||||||
C23C | PUSH DE | |||||||
C23D | PUSH DE | |||||||
C23E | PUSH DE | |||||||
C23F | PUSH DE | |||||||
C240 | PUSH DE | |||||||
C241 | PUSH DE | |||||||
C242 | PUSH DE | |||||||
C243 | PUSH DE | |||||||
C244 | PUSH DE | |||||||
C245 | PUSH DE | |||||||
C246 | PUSH DE | |||||||
C247 | PUSH DE | |||||||
C248 | ADD A,C | A += C | ||||||
C249 | LD L,A | L = A | ||||||
C24A | LD A,H | A = H | ||||||
C24B | DEC H | H-- | ||||||
C24C | AND $0F | A &= 15 | ||||||
C24E | JP NZ,draw_tunnel_13 | Jump if non-zero | ||||||
C251 | LD A,L | L -= 32 | ||||||
C252 | SUB $20 | |||||||
C254 | LD L,A | |||||||
C255 | JR C,draw_tunnel_13 | Jump if carry | ||||||
C257 | LD A,H | H -= 16 | ||||||
C258 | ADD A,$10 | |||||||
C25A | LD H,A | |||||||
draw_tunnel_13 | C25B | RLC D | ||||||
C25D | LD E,D | E = D | ||||||
C25E | DJNZ draw_tunnel_10 | Loop | ||||||
C260 | EXX | Bank/unbank | ||||||
C261 | SRL B | B >>= 1 | ||||||
C263 | LD A,B | A = B | ||||||
C264 | SRL B | B >>= 2 | ||||||
C266 | SRL B | |||||||
C268 | SUB B | A -= B | ||||||
C269 | LD B,A | B = A | ||||||
C26A | EX AF,AF' | Bank/unbank | ||||||
C26B | AND A | Set flags | ||||||
C26C | JP M,draw_tunnel_20 | Jump if negative | ||||||
C26F | ADD A,B | A += B | ||||||
C270 | JP P,draw_tunnel_14 | Jump if positive | ||||||
C273 | LD E,A | E = A | ||||||
C274 | SUB $81 | A -= $81 | ||||||
C276 | NEG | A = -A | ||||||
C278 | ADD A,B | A = B | ||||||
C279 | LD B,A | B = A | ||||||
C27A | LD A,E | A = E | ||||||
draw_tunnel_14 | C27B | EX AF,AF' | Bank/unbank | |||||
C27C | LD A,B | A = B | ||||||
C27D | EXX | Bank/unbank | ||||||
C27E | LD B,A | B = A | ||||||
C27F | LD A,L | A = L | ||||||
C280 | AND $0F | A &= 15 | ||||||
C282 | JR NZ,draw_tunnel_15 | Jump if non-zero | ||||||
C284 | DEC L | L-- | ||||||
draw_tunnel_15 | C285 | LD C,$0F | C = 15 | |||||
Loop
|
||||||||
draw_tunnel_16 | C287 | LD SP,HL | Put it in SP (so we can use PUSH for speed) | |||||
C288 | PUSH DE | |||||||
C289 | PUSH DE | |||||||
C28A | PUSH DE | |||||||
C28B | PUSH DE | |||||||
C28C | PUSH DE | |||||||
C28D | PUSH DE | |||||||
C28E | PUSH DE | |||||||
C28F | PUSH DE | |||||||
C290 | PUSH DE | |||||||
C291 | PUSH DE | |||||||
C292 | PUSH DE | |||||||
C293 | PUSH DE | |||||||
C294 | PUSH DE | |||||||
C295 | PUSH DE | |||||||
C296 | PUSH DE | |||||||
C297 | LD A,H | A = H | ||||||
C298 | DEC H | H-- | ||||||
C299 | AND C | A &= C | ||||||
C29A | JP NZ,draw_tunnel_17 | Jump if non-zero | ||||||
C29D | LD A,L | L -= 32 | ||||||
C29E | SUB $20 | |||||||
C2A0 | LD L,A | |||||||
C2A1 | JR C,draw_tunnel_17 | Jump if carry | ||||||
C2A3 | LD A,H | H += 16 | ||||||
C2A4 | ADD A,$10 | |||||||
C2A6 | LD H,A | |||||||
draw_tunnel_17 | C2A7 | RLC D | ||||||
C2A9 | LD E,D | E = D | ||||||
C2AA | DJNZ draw_tunnel_16 | Loop | ||||||
C2AC | EX AF,AF' | |||||||
C2AD | AND A | Set flags | ||||||
C2AE | JP M,draw_tunnel_20 | Jump if negative | ||||||
C2B1 | CPL | B = ~A + $82 | ||||||
C2B2 | ADD A,$82 | |||||||
C2B4 | LD B,A | |||||||
C2B5 | LD DE,$0000 | DE = 0 | ||||||
C2B8 | LD A,$00 | A = <self modified> | ||||||
C2BA | AND A | Set flags | ||||||
C2BB | JR Z,draw_tunnel_18 | Jump if zero | ||||||
C2BD | DEC A | A-- | ||||||
C2BE | JR NZ,draw_tunnel_20 | Jump if non-zero | ||||||
C2C0 | DEC DE | DE-- | ||||||
draw_tunnel_18 | C2C1 | LD SP,HL | Put it in SP (so we can use PUSH for speed) | |||||
C2C2 | PUSH DE | |||||||
C2C3 | PUSH DE | |||||||
C2C4 | PUSH DE | |||||||
C2C5 | PUSH DE | |||||||
C2C6 | PUSH DE | |||||||
C2C7 | PUSH DE | |||||||
C2C8 | PUSH DE | |||||||
C2C9 | PUSH DE | |||||||
C2CA | PUSH DE | |||||||
C2CB | PUSH DE | |||||||
C2CC | PUSH DE | |||||||
C2CD | PUSH DE | |||||||
C2CE | PUSH DE | |||||||
C2CF | PUSH DE | |||||||
C2D0 | PUSH DE | |||||||
C2D1 | LD A,H | A = H | ||||||
C2D2 | DEC H | H-- | ||||||
C2D3 | AND C | A &= C | ||||||
C2D4 | JP NZ,draw_tunnel_19 | Jump if non-zero | ||||||
Scanline increment pattern.
|
||||||||
C2D7 | LD A,L | L -= 32 | ||||||
C2D8 | SUB $20 | |||||||
C2DA | LD L,A | |||||||
C2DB | JR C,draw_tunnel_19 | Jump if carry | ||||||
C2DD | LD A,H | H -= 16 | ||||||
C2DE | ADD A,$10 | |||||||
C2E0 | LD H,A | |||||||
draw_tunnel_19 | C2E1 | DJNZ draw_tunnel_18 | Next scanline ? | |||||
draw_tunnel_20 | C2E3 | LD SP,$0000 | Restore original SP (self modified) | |||||
C2E6 | RET | Return |
Prev: C0E1 | Up: Map | Next: C2E7 |