| Chase H.Q. | Routines |
| Prev: 8F5F | Up: Map | Next: 916C |
|
This gets used on stage 3 when drawing the overhead structure graphics.
draw_stretchy_object_left is called first if the second x-position entry is zero. The perspective y-scale for the current row gives the vertical offset, and the depth set pair index is the depth less one, capped at 9. The x-position entries either side of the current position then say whether the object is visible and how far it is clipped. The deck itself is drawn a row at a time: each depth has a row count and one solid fill byte per row, and every row is a single colour fill across the clipped width.
sampled IX=$EAB2 DE=$6F26 HL=$9052 BC=$1420 (Stage 3)
|
||||||||||||||
| draw_overhead | 9052 | PUSH IX | Preserve | |||||||||||
| 9054 | PUSH DE | |||||||||||||
| 9055 | PUSH BC | |||||||||||||
| 9056 | LD A,(IX+$01) | A = IX[1] -- buffer offset/distance | ||||||||||||
| 9059 | AND A | Set flags | ||||||||||||
| 905A | CALL Z,draw_stretchy_object_left | |||||||||||||
| 905D | POP BC | Restore (restore DE to HL) | ||||||||||||
| 905E | POP HL | |||||||||||||
| 905F | POP IX | |||||||||||||
| 9061 | INC HL | HL++ | ||||||||||||
| 9062 | LD E,(HL) | DE = wordat(HL); HL++ | ||||||||||||
| 9063 | INC HL | |||||||||||||
| 9064 | LD D,(HL) | |||||||||||||
| 9065 | INC DE | DE += 2 | ||||||||||||
| 9066 | INC DE | |||||||||||||
| 9067 | LD A,($A23F) | A = fast_counter & $E0 | ||||||||||||
| 906A | AND $E0 | |||||||||||||
| 906C | LD L,A | L = A | ||||||||||||
| 906D | RRC L | |||||||||||||
| 906F | RRC L | |||||||||||||
| 9071 | SUB L | A -= L | ||||||||||||
| 9072 | RRC L | |||||||||||||
| 9074 | RRC L | |||||||||||||
| 9076 | SUB L | A -= L | ||||||||||||
| 9077 | ADD A,B | A += B | ||||||||||||
| 9078 | LD L,A | L = A | ||||||||||||
| 9079 | LD H,$E6 | H = $E6 | ||||||||||||
| 907B | LD A,(IY+$00) | A = IY[0] - IY[$35] | ||||||||||||
| 907E | SUB (IY+$35) | |||||||||||||
| 9081 | LD C,A | C = A | ||||||||||||
| 9082 | LD A,(HL) | A = *HL | ||||||||||||
| 9083 | LD L,A | L = A | ||||||||||||
| 9084 | SRL A | SRL A | ||||||||||||
| 9086 | ADD A,L | A += L | ||||||||||||
| 9087 | SUB C | A -= C | ||||||||||||
| 9088 | LD ($90F2),A | Self modify 'SUB x' at $90F1 | ||||||||||||
| 908B | LD A,B | A = B - 1 | ||||||||||||
| 908C | DEC A | |||||||||||||
| 908D | CP $09 | |||||||||||||
| 908F | JR C,do_9093 | |||||||||||||
| 9091 | LD A,$09 | A = $09 | ||||||||||||
| do_9093 | 9093 | LD B,A | B = A | |||||||||||
| 9094 | ADD A,A | HL = A * 2 + DE | ||||||||||||
| 9095 | LD L,A | |||||||||||||
| 9096 | LD H,$00 | |||||||||||||
| 9098 | ADD HL,DE | |||||||||||||
| 9099 | LD C,(HL) | C = *HL | ||||||||||||
| 909A | LD A,B | A = B | ||||||||||||
| 909B | ADD A,A | HL = (A * 3 + 20) + DE | ||||||||||||
| 909C | ADD A,B | |||||||||||||
| 909D | ADD A,$14 | |||||||||||||
| 909F | LD L,A | |||||||||||||
| 90A0 | LD H,$00 | |||||||||||||
| 90A2 | ADD HL,DE | |||||||||||||
| 90A3 | LD D,$01 | D = 1 | ||||||||||||
| 90A5 | LD A,(IX+$01) | A = IX[1] -- buffer offset/distance | ||||||||||||
| 90A8 | AND A | Set flags | ||||||||||||
| 90A9 | JP M,do_90c4 | |||||||||||||
| 90AC | RET NZ | |||||||||||||
| 90AD | LD A,(IX+$00) | A = IX[0] + $18 - C | ||||||||||||
| 90B0 | ADD A,$18 | |||||||||||||
| 90B2 | SUB C | |||||||||||||
| 90B3 | JR C,do_90c4 | |||||||||||||
| 90B5 | SUB $08 | A -= 8 | ||||||||||||
| 90B7 | JR C,do_90c4 | |||||||||||||
| 90B9 | CP $08 | |||||||||||||
| 90BB | JR C,do_90c4 | |||||||||||||
| 90BD | SRL A | A >>= 3 | ||||||||||||
| 90BF | SRL A | |||||||||||||
| 90C1 | SRL A | |||||||||||||
| 90C3 | LD D,A | D = A | ||||||||||||
| do_90c4 | 90C4 | DEC IX | IX -= 2 | |||||||||||
| 90C6 | DEC IX | |||||||||||||
| 90C8 | LD E,$1F | E = $1F | ||||||||||||
| 90CA | LD A,(IX+$01) | A = IX[1] -- buffer offset/distance | ||||||||||||
| 90CD | AND A | Set flags | ||||||||||||
| 90CE | RET M | |||||||||||||
| 90CF | JR NZ,do_90e4 | |||||||||||||
| 90D1 | LD A,(IX+$00) | A = IX[0] + C | ||||||||||||
| 90D4 | ADD A,C | |||||||||||||
| 90D5 | JR C,do_90e4 | |||||||||||||
| 90D7 | JR Z,do_90e4 | |||||||||||||
| 90D9 | CP $F7 | |||||||||||||
| 90DB | JR NC,do_90e4 | |||||||||||||
| 90DD | SRL A | A >>= 3 | ||||||||||||
| 90DF | SRL A | |||||||||||||
| 90E1 | SRL A | |||||||||||||
| 90E3 | LD E,A | E = A | ||||||||||||
| do_90e4 | 90E4 | LD C,D | C = D | |||||||||||
| 90E5 | LD A,E | A = (E - C) * 2; | ||||||||||||
| 90E6 | SUB C | |||||||||||||
| 90E7 | ADD A,A | |||||||||||||
| 90E8 | CPL | A = ~A + $3D | ||||||||||||
| 90E9 | ADD A,$3D | |||||||||||||
| 90EB | LD ($9116),A | *$9116 = A -- Self modify jump table target | ||||||||||||
| 90EE | LD A,(IY+$35) | A = IY[$35] | ||||||||||||
| 90F1 | SUB $00 | A -= <self modified> -- self modified by $9088 | ||||||||||||
| 90F3 | RET M | |||||||||||||
| 90F4 | PUSH AF | |||||||||||||
| 90F5 | INC A | A++ | ||||||||||||
| 90F6 | LD B,(HL) | B = *HL | ||||||||||||
| 90F7 | SUB B | A -= B | ||||||||||||
| 90F8 | JR NC,do_90fc | |||||||||||||
| 90FA | ADD A,B | A += B | ||||||||||||
| 90FB | LD B,A | B = A | ||||||||||||
| do_90fc | 90FC | INC HL | HL++ | |||||||||||
| 90FD | LD E,(HL) | DE = wordat(HL); HL++ | ||||||||||||
| 90FE | INC HL | |||||||||||||
| 90FF | LD D,(HL) | |||||||||||||
| 9100 | POP AF | |||||||||||||
| 9101 | LD L,A | L = A | ||||||||||||
| 9102 | AND $0F | H = (A & $0F) + $F0 | ||||||||||||
| 9104 | ADD A,$F0 | |||||||||||||
| 9106 | LD H,A | |||||||||||||
| 9107 | LD A,L | L = (L & $70) * 2 + C | ||||||||||||
| 9108 | AND $70 | |||||||||||||
| 910A | ADD A,A | |||||||||||||
| 910B | ADD A,C | |||||||||||||
| 910C | LD L,A | |||||||||||||
| 910D | JR do_draw | |||||||||||||
| do_continue | 910F | INC DE | DE++ | |||||||||||
| 9110 | DJNZ do_draw | |||||||||||||
| 9112 | RET | Return | ||||||||||||
| do_draw | 9113 | LD A,(DE) | A = *DE | |||||||||||
| 9114 | LD C,L | C = L | ||||||||||||
| do_9115 | 9115 | JR do_9115 | Self modified | |||||||||||
| 9117 | LD (HL),A | Store A to HL and advance, 29 times | ||||||||||||
| 9118 | INC L | |||||||||||||
| 9119 | LD (HL),A | |||||||||||||
| 911A | INC L | |||||||||||||
| 911B | LD (HL),A | |||||||||||||
| 911C | INC L | |||||||||||||
| 911D | LD (HL),A | |||||||||||||
| 911E | INC L | |||||||||||||
| 911F | LD (HL),A | |||||||||||||
| 9120 | INC L | |||||||||||||
| 9121 | LD (HL),A | |||||||||||||
| 9122 | INC L | |||||||||||||
| 9123 | LD (HL),A | |||||||||||||
| 9124 | INC L | |||||||||||||
| 9125 | LD (HL),A | |||||||||||||
| 9126 | INC L | |||||||||||||
| 9127 | LD (HL),A | |||||||||||||
| 9128 | INC L | |||||||||||||
| 9129 | LD (HL),A | |||||||||||||
| 912A | INC L | |||||||||||||
| 912B | LD (HL),A | |||||||||||||
| 912C | INC L | |||||||||||||
| 912D | LD (HL),A | |||||||||||||
| 912E | INC L | |||||||||||||
| 912F | LD (HL),A | |||||||||||||
| 9130 | INC L | |||||||||||||
| 9131 | LD (HL),A | |||||||||||||
| 9132 | INC L | |||||||||||||
| 9133 | LD (HL),A | |||||||||||||
| 9134 | INC L | |||||||||||||
| 9135 | LD (HL),A | |||||||||||||
| 9136 | INC L | |||||||||||||
| 9137 | LD (HL),A | |||||||||||||
| 9138 | INC L | |||||||||||||
| 9139 | LD (HL),A | |||||||||||||
| 913A | INC L | |||||||||||||
| 913B | LD (HL),A | |||||||||||||
| 913C | INC L | |||||||||||||
| 913D | LD (HL),A | |||||||||||||
| 913E | INC L | |||||||||||||
| 913F | LD (HL),A | |||||||||||||
| 9140 | INC L | |||||||||||||
| 9141 | LD (HL),A | |||||||||||||
| 9142 | INC L | |||||||||||||
| 9143 | LD (HL),A | |||||||||||||
| 9144 | INC L | |||||||||||||
| 9145 | LD (HL),A | |||||||||||||
| 9146 | INC L | |||||||||||||
| 9147 | LD (HL),A | |||||||||||||
| 9148 | INC L | |||||||||||||
| 9149 | LD (HL),A | |||||||||||||
| 914A | INC L | |||||||||||||
| 914B | LD (HL),A | |||||||||||||
| 914C | INC L | |||||||||||||
| 914D | LD (HL),A | |||||||||||||
| 914E | INC L | |||||||||||||
| 914F | LD (HL),A | |||||||||||||
| 9150 | INC L | |||||||||||||
| 9151 | LD (HL),A | Store A to HL | ||||||||||||
| 9152 | LD L,C | L = C -- restore | ||||||||||||
|
Move to next scanline (longer form).
|
||||||||||||||
| 9153 | LD A,H | Save for checking in a moment | ||||||||||||
| 9154 | DEC H | Move to next scanline (visually upwards) | ||||||||||||
| 9155 | AND $0F | Would it have rolled over into the top nibble? | ||||||||||||
| 9157 | JP NZ,do_continue | No - continue | ||||||||||||
|
It rolled over.
|
||||||||||||||
| 915A | LD A,H | Put back the bit stolen by rollover | ||||||||||||
| 915B | ADD A,$10 | |||||||||||||
| 915D | LD H,A | |||||||||||||
| 915E | LD A,L | Move to next chunk of 16 scanlines | ||||||||||||
| 915F | SUB $20 | |||||||||||||
| 9161 | LD L,A | |||||||||||||
| 9162 | JP NC,do_continue | Continue if it didn't roll over | ||||||||||||
| 9165 | LD A,H | Otherwise move to the next chunk of 128 scanlines (would put us outside the back buffer) | ||||||||||||
| 9166 | SUB $10 | |||||||||||||
| 9168 | LD H,A | |||||||||||||
| 9169 | JP do_continue | Loop | ||||||||||||
| Prev: 8F5F | Up: Map | Next: 916C |