| Hydrofool | Disassembly |
|
|
||||
| 60C2 | DEFB $58,$27,$20,$FB,$6C,$F8,$2B,$2D | |||
| 60CA | DEFB $65,$33,$FF,$FF,$ED,$10,$0D,$00 | |||
| 60D2 | DEFB $09,$00,$85,$1C,$10,$1C,$52,$1B | |||
| 60DA | DEFB $76,$1B,$03,$13,$00,$3E,$C3,$3C | |||
| 60E2 | DEFB $9D,$E0,$60,$18,$3E,$23,$5E | |||
| 60E9 | DEFW $5D42 | Saved SP | ||
| 60EB | DEFB $05 | Draw-queue length (number of object-record pointers at $60EC; see 9900) | ||
| 60EC | DEFW $8E0F,$A900,$8DB6,$8E27 | Draw queue: object-record pointers, drawn by 9900 | ||
| 60F4 | DEFW $A918 | |||
| 60F6 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 60FE | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 6106 | DEFB $00,$00,$00,$00 | |||
| 610A | DEFW $70E0 | |||
| 610C | DEFW $8FEF | |||
| 610E | DEFW $A918 | Active object list HEAD pointer: points at the most recently spawned object record; each record's +0/+1 links to the next, ending in the fixed records 8DB6 (player) -> $8DCF -> $8DEF -> $0000. Passed as IX into 84AE, which head-inserts the new object here. Other insertion points exist (e.g. $8DEF for creatures -- see 6663), placing objects later in the list. | ||
| 6110 | DEFW $788A | Currently-held item: pointer to its 4-byte item-table record (room,Y,X,sprite). Equals the fixed "empty hands" sentinel record at $788A when nothing is held. Set by 8AFB on pickup; the pointed-to record's room byte is zeroed on pickup and restored (to the current room, at the player's position) on drop. | ||
| 6112 | DEFB $00,$00,$00,$00,$00,$00,$00,$04 | |||
| 611A | DEFB $05 | |||
| 611B | DEFB $00,$00,$00,$00,$00 | SCORE (5-digit BCD, most-significant byte first). Added to by 8879, subtracted by 8894, displayed (last 4 digits) by 885A via 8523. | ||
| 6120 | DEFB $00,$00 | |||
| 6122 | DEFB $00 | "Gnomes Gnabbed" end-game stat counter (BCD), printed by 86CC via 854F | ||
| 6123 | DEFB $00 | "Goodies Gathered" end-game stat counter (BCD), printed by 86CC via 854F; incremented by 9341 on each successful item delivery to a Plug Room corner cube | ||
| 6124 | DEFB $00 | "Plugs Pulled" end-game stat counter (BCD), printed by 86CC via 854F | ||
| 6125 | DEFB $00 | Entry-point room number choosen selecting A/B/C/D in menu, see table 8567 | ||
| 6126 | DEFB $02 | Room number | ||
| 6127 | DEFW $6CD6 | Room description address | ||
| 6129 | DEFB $00 | Room shape/layout selector (0 or 1; bit 6 from byte 3 of Room description, shifted to bit 0). Selects one of 2 fixed wall/decoration layouts drawn by 642F. | ||
| 612A | DEFB $0E | Bits 4-7 from byte 2 of Room description, shifted to bits 0-3 | ||
| 612B | DEFB $00 | Room exit/door bitfield (from room description byte1; see 6329). Also reused throughout the code as a numeric base address for room-grid cell addressing ($612B+index, grid starting at $612C) -- these are two unrelated uses of the same address, not a conflict. | ||
|
8x8 grid (row-major, offset = row*8+col), cleared to 0 then populated by 62A2 from a shared room-type template (72D1 family, selected by $612A via the 72B1 pointer table), plus any per-room extra pairs from the room description itself (see 6CCF). Each entry's grid cell address is $612B+index (i.e. grid_offset = index-1); the stored value is either a plain content code (see table below), or one of $66/$67/$68/$69/$6A/$6B which additionally triggers a dedicated object-spawn routine (8EA7/8EF2/8F1E/8F4C/8E3F) -- these special values do NOT persist in the finished grid; they spawn a dynamic object instead (see 84AE) and the grid cell they occupied stays part of the static terrain layout only incidentally.
Static object codes: $01=small seaweed, $02=flat rock, $03=clam shell (no pearl), $04=small rock, $09=rock, $0D=seaweed, $7F=solid wall (seen as a contiguous 3x3 corner block), $0A-$10=display cubes/cases with varying item glyphs (seen in Plug Rooms). Creatures, pickups (spoon/ball/horseshoe/etc), and air-bubble sources are NEVER on the grid -- they're separate dynamic objects (see 84AE), not static terrain.
|
||||
| 612C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | Room grid 8x8 | ||
| 6134 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 613C | DEFB $00,$00,$00,$00,$00,$01,$00,$00 | |||
| 6144 | DEFB $00,$00,$00,$00,$00,$00,$00,$01 | |||
| 614C | DEFB $00,$02,$00,$00,$00,$01,$00,$00 | |||
| 6154 | DEFB $00,$00,$00,$00,$02,$00,$00,$00 | |||
| 615C | DEFB $00,$04,$04,$00,$00,$00,$00,$00 | |||
| 6164 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 616C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 6174 | DEFB $00 | |||
| 6175 | DEFB $43 | Room color 0..15 | ||
| 6176 | DEFB $40,$40,$40 | |||
| 6179 | DEFB $00 | |||
| 617A | DEFB $00 | |||
| 617B | DEFB $00 | Input device selector, read by 7EBE: 0=keyboard, 1=Kempston joystick, 2=Sinclair joystick, else=Cursor keys | ||
| 617C | DEFB $00 | Cumulative input-held counter, incremented each frame by 6186's mask value (used for key-repeat timing) | ||
| 617D | DEFB $BF | Keyboard row snapshot (contributes bit 4 -- fire/pick-up -- to 6186 via 7EBE) | ||
| 617E | DEFB $BF | Keyboard row snapshot (contributes bit 2 to 6186 via 7EBE) | ||
| 617F | DEFB $BF | Keyboard row snapshot (contributes bit 1 to 6186 via 7EBE) | ||
| 6180 | DEFB $BF,$BF | |||
| 6182 | DEFB $BF | Keyboard row snapshot (contributes bit 3 to 6186 via 7EBE) | ||
| 6183 | DEFB $BF | Keyboard row snapshot (contributes bit 0 to 6186 via 7EBE) | ||
| 6184 | DEFB $BF | Keyboard row snapshot (also contributes bit 4 -- fire/pick-up -- to 6186 via 7EBE) | ||
| 6185 | DEFB $00 | |||
|
Resolved 5-bit input mask, produced every frame by 7EBE from whichever control method $617B selects. Bit0=Right, bit1=Left, bit2=Down, bit3=Up (Kempston-port convention: reading Kempston directly copies its byte here unmodified), bit4=Fire/pick-up. Consumed by 8968 (movement -- resolved to a single direction via the table at 88F0) and 8AFB (fire button). Masked against a "previously pressed" copy at $6188 by 7EBE itself (edge-detection), and accumulated into a repeat counter at $617C.
|
||||
| 6186 | DEFB $00 | Resolved input mask (bit0=Right, bit1=Left, bit2=Down, bit3=Up, bit4=Fire/pick-up) -- see N-line | ||
| 6187 | DEFB $00 | |||
| 6188 | DEFB $FF | Previous frame's 6186 value, used by 7EBE for key-repeat/edge detection | ||
| 6189 | DEFB $01 | |||
| 618A | DEFB $00 | Message-window restore timer (counts down in 9808; the room/creature title is redrawn when it expires) | ||
| 618B | DEFW $A930 | Free-list head pointer for the dynamic object pool (A900), consumed/updated by 84AE. Its high byte (at $618C) is also read standalone as an empty/enabled check. | ||
| 618D | DEFW $BDAE | Current sprite: data address (copied from a A5DC record by 84ED) | ||
| 618F | DEFB $10 | Current sprite: height, in 8px rows (copied from a A5DC record by 84ED) | ||
| 6190 | DEFB $04,$00,$00 | Current sprite: width, in 8px columns, bit 7 = flip-flop flag (copied from a A5DC record by 84ED, unmasked) | ||
| 6193 | DEFB $FF | |||
| 6194 | DEFW $0000 | |||
| 6196 | DEFW $FFB9 | |||
| 6198 | DEFB $42 | Oil cans remaining (BCD), decremented by 6622 on pickup/use | ||
| 6199 | DEFB $00 | Flag, set to 1 by 6622 (oil can used) -- purpose of the flag itself not confirmed | ||
| 619A | DEFB $1C | Room number copy | ||
| 619B | DEFW $1C34 | |||
| 619D | DEFB $04 | |||
| 619E | DEFB $00 | Weapon ammo count (BCD-ish, decremented by 68C1 per shot), also acts as the weapon-held flag: tested by 8AFB on fire/pick-up to decide attack vs. pick-up/drop; hitting 0 auto-drops the weapon | ||
| 619F | DEFB $00 | |||
| 61A0 | DEFB $01 | |||
| 61A1 | DEFB $00 | |||
| 61A2 | DEFB $7F | |||
| 61A3 | DEFB $04 | |||
| 61A4 | DEFB $3A,$5C | |||
| 61A6 | DEFB $00 | |||
|
Used by the routine at 983C.
|
||||
|
Used by 983C to call a dynamic object's per-frame behaviour handler
|
||||
| 61A7 | JP (HL) | |||
|
Used by the routine at 61C1.
|
||||
|
Chains B records of 24 bytes each, starting at DE, writing each record's own first word as the address of the next. The last record links onto the existing free-list head at $618B instead of another new record, then $618B is updated to point at the chain's own start, prepending it to the free list.
|
||||
| 61A8 | PUSH DE | Save DE, the chain's start address | ||
| 61A9 | DEC B | B -= 1, the last record links to the existing free list instead of another new record | ||
| 61AA | LD HL,$0018 | HL = the next record's address, current + 24 bytes | ||
| 61AD | ADD HL,DE | |||
| 61AE | EX DE,HL | Write it as the current record's next-pointer, low then high byte, advance HL past it | ||
| 61AF | LD (HL),E | |||
| 61B0 | INC HL | |||
| 61B1 | LD (HL),D | |||
| 61B2 | DJNZ $61AA | Loop for each record | ||
| 61B4 | EX DE,HL | Swap back, DE = the existing free-list head at $618B | ||
| 61B5 | LD DE,($618B) | |||
| 61B9 | LD (HL),E | Write it as the last record's next-pointer | ||
| 61BA | INC HL | |||
| 61BB | LD (HL),D | |||
| 61BC | POP HL | Restore HL, the chain's start address | ||
| 61BD | LD ($618B),HL | Store it as the new free-list head at $618B | ||
| 61C0 | RET | |||
|
Used by the routine at 676D.
|
||||
|
Clears the free/active-list pointers, then initializes two object-record free lists, at $5B00 and $A900, 8 records each, via 61A8.
|
||||
| 61C1 | LD HL,$0000 | |||
| 61C4 | LD ($9D3C),HL | |||
| 61C7 | LD ($8DEF),HL | |||
| 61CA | LD ($618B),HL | |||
| 61CD | LD HL,$8DB6 | |||
| 61D0 | LD ($610E),HL | set Active object list HEAD pointer | ||
| 61D3 | LD DE,$5B00 | |||
| 61D6 | LD B,$08 | |||
| 61D8 | CALL $61A8 | Initialize the object free list | ||
| 61DB | LD DE,$A900 | |||
| 61DE | LD B,$08 | |||
| 61E0 | JP $61A8 | => Initialize the object free list | ||
|
Used by the routine at 6B05.
|
||||
|
Resets oil/rust state, restocks the item table from a master template, clears per-level Plug Room progress and per-room flags, and zeroes the score/end-game counters.
|
||||
| 61E3 | XOR A | clear rust timer 6502 | ||
| 61E4 | LD ($6502),A | |||
| 61E7 | LD ($6199),A | clear oil-used flag 6199 | ||
| 61EA | LD A,$42 | oil cans = 42 (BCD) 6198 | ||
| 61EC | LD ($6198),A | |||
| 61EF | LD DE,$788A | DE = item table base 788A, A = master item count from $7C82 | ||
| 61F2 | LD A,($7C82) | |||
| 61F5 | PUSH AF | *loop: save the record count | ||
| 61F6 | LD HL,$0004 | HL = the live record, 4 bytes on from the master | ||
| 61F9 | ADD HL,DE | |||
| 61FA | LD BC,$0004 | copy the 4-byte master item record over it | ||
| 61FD | LDIR | |||
| 61FF | EX DE,HL | advance to the next pair, restore the count | ||
| 6200 | POP AF | |||
| 6201 | DEC A | loop for each record | ||
| 6202 | JR NZ,$61F5 | |||
| 6204 | LD DE,$75B6 | DE = spawner table base 75B5 | ||
| 6207 | LD A,(DE) | *loop: A = this record's length byte | ||
| 6208 | CP $01 | |||
| 620A | JR Z,$6219 | $01 marks the table end | ||
| 620C | LD HL,$0001 | HL = the record's flag byte (offset 1) | ||
| 620F | ADD HL,DE | |||
| 6210 | LD (HL),$01 | mark it not-yet-triggered | ||
| 6212 | LD L,A | HL = this record's length, widened | ||
| 6213 | LD H,$00 | |||
| 6215 | ADD HL,DE | |||
| 6216 | EX DE,HL | step to the next record, loop | ||
| 6217 | JR $6207 | |||
| 6219 | LD HL,$5C92 | zero the score and end-game counters ($611B-$6124) via LDIR from a fixed all-zero block at $5C92 | ||
| 621C | LD DE,$611B | |||
| 621F | LD BC,$000A | |||
| 6222 | LDIR | |||
| 6224 | LD DE,$6CCF | Room descriptions start address | ||
| 6227 | LD HL,$0001 | per-room flag reset: HL = this room's byte1 | ||
| 622A | ADD HL,DE | |||
| 622B | LD A,(HL) | rotate its high nibble down | ||
| 622C | RRCA | |||
| 622D | RRCA | |||
| 622E | RRCA | |||
| 622F | RRCA | |||
| 6230 | CPL | build a mask that clears the door bits | ||
| 6231 | OR $F6 | |||
| 6233 | AND (HL) | apply it to byte1 | ||
| 6234 | LD (HL),A | |||
| 6235 | INC HL | advance to byte3, clear its "visited" bit 7 | ||
| 6236 | INC HL | |||
| 6237 | RES 7,(HL) | |||
| 6239 | LD A,(DE) | A = this record's length byte, widened into HL | ||
| 623A | LD L,A | |||
| 623B | LD H,$00 | |||
| 623D | ADD HL,DE | advance DE past the record | ||
| 623E | EX DE,HL | |||
| 623F | LD A,(DE) | read the next record's length byte | ||
| 6240 | CP $01 | |||
| 6242 | JR NZ,$6227 | loop until the table terminator | ||
| 6244 | LD HL,$7288 | HL = the first level's Plug Room state byte ($7288) | ||
| 6247 | LD A,($72AB) | B = the level count ($72AB) | ||
| 624A | LD B,A | |||
| 624B | LD DE,$0006 | DE = 6, the per-level stride | ||
| 624E | LD (HL),$00 | *loop: clear this level's state byte | ||
| 6250 | ADD HL,DE | step to the next level, loop | ||
| 6251 | DJNZ $624E | |||
| 6253 | RET | |||
|
A -= 1 first, then column = (A AND $F8) + 4 becomes X (+5); the original A AND $07 rotated left 3 (*8) + 4 becomes Y (+6). Converts a raw 0-63 grid index into the screen-position centre of that cell.
|
||||
| 6254 | DEC A | A -= 1, adjust before extracting the column bits | ||
| 6255 | PUSH AF | Save A | ||
| 6256 | AND $F8 | Isolate the column value and add 4 for the cell centre | ||
| 6258 | OR $04 | |||
| 625A | LD (IX+$05),A | Store as the object's X (IX+5) | ||
| 625D | POP AF | Restore A, isolate the row bits | ||
| 625E | AND $07 | |||
| 6260 | RLCA | Multiply by 8, three left shifts, add 4 for the cell centre | ||
| 6261 | RLCA | |||
| 6262 | RLCA | |||
| 6263 | OR $04 | |||
| 6265 | LD (IX+$06),A | Store as the object's Y (IX+6) and return | ||
| 6268 | RET | |||
|
Used by the routine at 676D.
|
||||
|
Stores the room number to $6126, walks the room-description chain from room 0 (each record's own length-byte offsets to the next) to find record A, storing its address at $6127. Extracts byte1 (door/exit bitfield) to $612B, byte2's high nibble (room-type template index into 72B1) to $612A, and byte3 bit 6 (shape selector) to $6129. Clears the 64-byte room grid at $612C, stamps in the room-type template via 62C8, then overlays this room's own extra (index,value) pairs, if its description is longer than the base 4 bytes, via the same 62C8 grid-writer.
|
||||
| 6269 | LD ($6126),A | set room number | ||
| 626C | LD B,A | |||
| 626D | LD HL,$6CCF | Room descriptions start address | ||
| 6270 | LD DE,$0000 | |||
| 6273 | JR $6277 | |||
| 6275 | LD E,(HL) | get offset to the next room description | ||
| 6276 | ADD HL,DE | |||
| 6277 | DJNZ $6275 | |||
| 6279 | LD ($6127),HL | Store room description address | ||
| 627C | INC HL | |||
| 627D | LD A,(HL) | |||
| 627E | LD ($612B),A | |||
| 6281 | INC HL | |||
| 6282 | LD A,(HL) | |||
| 6283 | RRCA | |||
| 6284 | RRCA | |||
| 6285 | RRCA | |||
| 6286 | RRCA | |||
| 6287 | AND $0F | |||
| 6289 | LD ($612A),A | |||
| 628C | INC HL | |||
| 628D | LD A,(HL) | |||
| 628E | RLCA | |||
| 628F | RLCA | |||
| 6290 | AND $01 | |||
| 6292 | LD ($6129),A | |||
| 6295 | LD HL,$612C | Clear room grid - 64 bytes at 612C | ||
| 6298 | LD DE,$612D | |||
| 629B | LD BC,$003F | |||
| 629E | LD (HL),$00 | |||
| 62A0 | LDIR | |||
| 62A2 | LD HL,($612A) | HL = the room-type index ($612A), widened | ||
| 62A5 | LD H,$00 | |||
| 62A7 | ADD HL,HL | doubled, DE = the 72B1 pointer table | ||
| 62A8 | LD DE,$72B1 | |||
| 62AB | ADD HL,DE | HL = this room type's table slot | ||
| 62AC | LD E,(HL) | read the template's address from it | ||
| 62AD | INC HL | |||
| 62AE | LD D,(HL) | |||
| 62AF | EX DE,HL | |||
| 62B0 | LD B,(HL) | B = the template's (index,value) pair count | ||
| 62B1 | DEC B | empty or negative: nothing to stamp in | ||
| 62B2 | JR Z,$62BB | |||
| 62B4 | JP M,$62BB | |||
| 62B7 | INC HL | advance past the count byte | ||
| 62B8 | CALL $62C8 | |||
| 62BB | LD HL,($6127) | HL = the room description, A = its length | ||
| 62BE | LD A,(HL) | |||
| 62BF | SUB $04 | exactly 4 bytes: no extra (index,value) pairs | ||
| 62C1 | JR Z,$62F8 | |||
| 62C3 | LD DE,$0004 | skip the 4-byte header | ||
| 62C6 | ADD HL,DE | |||
| 62C7 | LD B,A | B = the extra-pair count | ||
| 62C8 | LD E,(HL) | grid-entry writer: DE = this pair's grid index | ||
| 62C9 | LD D,$00 | |||
| 62CB | LD IX,$612B | IX = the grid base $612B | ||
| 62CF | ADD IX,DE | plus the index: the target cell | ||
| 62D1 | INC HL | A = the pair's value | ||
| 62D2 | LD A,(HL) | |||
| 62D3 | LD (IX+$00),A | store it into the cell, store A at (IX+0) | ||
| 62D6 | CP $66 | dispatch on the special value: $66 -> bubble source | ||
| 62D8 | CALL Z,$8EA7 | |||
| 62DB | CP $6A | $6A -> bubble source (full strength) | ||
| 62DD | CALL Z,$8EA7 | |||
| 62E0 | CP $67 | $67 -> plant/coral | ||
| 62E2 | CALL Z,$8EF2 | |||
| 62E5 | CP $69 | $69 -> 8F1E | ||
| 62E7 | CALL Z,$8F1E | |||
| 62EA | CP $6B | $6B -> 8F4C | ||
| 62EC | CALL Z,$8F4C | |||
| 62EF | CP $68 | $68 -> rearing snake | ||
| 62F1 | CALL Z,$8E3F | |||
| 62F4 | INC HL | advance to the next pair, loop B times (a special-value spawn routine can decrement B as a side effect, see 8EA7) | ||
| 62F5 | DEC B | |||
| 62F6 | DJNZ $62C8 | |||
| 62F8 | RET | |||
|
Via the per-level table at $7287; returns Z if so, with HL pointing at the entry's state byte.
|
||||
| 62F9 | LD A,($6126) | get room number | ||
| 62FC | LD B,A | B = the room number, A -= 1 | ||
| 62FD | DEC A | |||
| 62FE | LD HL,$7281 | HL = the per-level table $7281 | ||
| 6301 | LD DE,$0006 | DE = 6, the per-level entry stride | ||
| 6304 | ADD HL,DE | Advance to the next level's entry, subtracting 36 rooms per level, loop while still short | ||
| 6305 | SUB $24 | |||
| 6307 | JR NC,$6304 | |||
| 6309 | LD A,(HL) | A = this level's title-index base, advance HL, compare against the room number | ||
| 630A | INC HL | |||
| 630B | CP B | |||
| 630C | RET | |||
|
Used by the routine at 676D.
|
||||
|
For each of 4 slots in this level's delivery-state nibble, pokes marker $13 into the corresponding room-grid cell listed at $72AC when the slot's bit is set.
|
||||
| 630D | CALL $62F9 | Test whether the current room is this level's Plug Room | ||
| 6310 | RET NZ | Not the Plug Room: return | ||
| 6311 | LD A,(HL) | A = the Plug Room's delivery-state nibble byte | ||
| 6312 | LD HL,$72AC | HL = the per-slot grid-cell table $72AC | ||
| 6315 | LD BC,$612B | BC = $612B, the room grid base | ||
| 6318 | AND $0F | Isolate the low nibble, the 4 undelivered-slot bits | ||
| 631A | RET Z | All slots delivered: return | ||
| 631B | RRCA | Test this slot's bit, rotate into carry, skip the poke below if clear | ||
| 631C | JR NC,$6326 | |||
| 631E | LD E,(HL) | If set, read the cell offset (E,D) from the table | ||
| 631F | LD D,$00 | |||
| 6321 | EX DE,HL | |||
| 6322 | ADD HL,BC | Poke marker $13 into that grid cell | ||
| 6323 | LD (HL),$13 | |||
| 6325 | EX DE,HL | |||
| 6326 | INC HL | Advance to the next table entry, loop for the next slot | ||
| 6327 | JR $6318 | |||
|
Used by the routine at 91A6.
|
||||
|
Re-reads room description byte1 (at room_base+1), merges bit4 into bit0 and bit7 into bit3 (via AND $90, RRCA x4, OR), writes the result back into the room description itself AND into $612B. Bits 0-3 of the result are then tested by 6344/6377 to conditionally draw door graphics at fixed screen positions -- one bit per exit direction: bit0=North, bit1=East, bit2=South, bit3=West (see 67F1).
|
||||
| 6329 | PUSH BC | Save BC, DE, HL | ||
| 632A | PUSH DE | |||
| 632B | PUSH HL | |||
| 632C | LD HL,($6127) | HL points at the room description's byte1 (advance past the 2-byte pointer at $6127) | ||
| 632F | INC HL | |||
| 6330 | LD A,(HL) | A = byte1 masked to bits 4 and 7 (the two door-exit flag bits) | ||
| 6331 | AND $90 | |||
| 6333 | RRCA | Rotate right 4 places, moving bits 4/7 down into bits 0/3 | ||
| 6334 | RRCA | |||
| 6335 | RRCA | |||
| 6336 | RRCA | |||
| 6337 | OR (HL) | OR back into byte1's other bits | ||
| 6338 | CP (HL) | Compare against the original byte1 value | ||
| 6339 | LD (HL),A | Store the merged value back into byte1 | ||
| 633A | LD ($612B),A | Store the same merged value into $612B, the door bitfield | ||
| 633D | CALL NZ,$6344 | Draw single-piece doors, for $612B bits 0 and 3 | ||
| 6340 | POP HL | Restore HL, DE, BC and return | ||
| 6341 | POP DE | |||
| 6342 | POP BC | |||
| 6343 | RET | |||
|
Tests bit 0 of $612B (North), drawing one door-graphic piece via 8128 at a fixed screen position if set; then bit 3 (West), drawing a different fixed-position piece if set.
|
||||
| 6344 | LD BC,$C7C7 | BC = mask/colour $C7C7, A = the door bitfield $612B | ||
| 6347 | LD A,($612B) | |||
| 634A | BIT 0,A | Test bit 0 (North) | ||
| 634C | JR NZ,$6355 | if set, skip to the alternate mask below | ||
| 634E | LD BC,$BBBB | Otherwise BC = $BBBB, test bit 4 | ||
| 6351 | BIT 4,A | |||
| 6353 | JR Z,$635E | if clear, skip drawing entirely | ||
| 6355 | LD A,$83 | A = sprite $83, D/E = the fixed screen position for the North door piece | ||
| 6357 | LD D,$6C | |||
| 6359 | LD E,$B8 | |||
| 635B | CALL $8128 | Draw sprite C with its mask at screen position DE | ||
| 635E | LD BC,$C7C7 | BC = mask/colour $C7C7 again, A = the door bitfield | ||
| 6361 | LD A,($612B) | |||
| 6364 | BIT 3,A | Test bit 3 (West) | ||
| 6366 | JR NZ,$636E | if set, skip to the alternate mask below | ||
| 6368 | LD BC,$BBBB | Otherwise BC = $BBBB, test bit 7 | ||
| 636B | BIT 7,A | |||
| 636D | RET Z | if clear, return without drawing | ||
| 636E | LD A,$03 | A = sprite $03, D/E = the fixed screen position for the West door piece | ||
| 6370 | LD D,$6C | |||
| 6372 | LD E,$48 | |||
| 6374 | JP $8128 | => Draw sprite C with its mask at screen position DE | ||
|
Used by the routine at 676D.
|
||||
| 6377 | CALL $6344 | Draw single-piece doors, for $612B bits 0 and 3 | ||
| 637A | LD A,($612B) | |||
| 637D | BIT 1,A | |||
| 637F | JR Z,$63A8 | |||
| 6381 | LD A,$02 | |||
| 6383 | LD D,$DC | |||
| 6385 | LD E,$C8 | |||
| 6387 | LD BC,$BEBE | |||
| 638A | CALL $8128 | Draw sprite C with its mask at screen position DE | ||
| 638D | LD A,$02 | |||
| 638F | LD D,$D4 | |||
| 6391 | LD E,$D8 | |||
| 6393 | LD BC,$C1C1 | |||
| 6396 | CALL $8128 | Draw sprite C with its mask at screen position DE | ||
| 6399 | LD A,$02 | |||
| 639B | LD D,$CC | |||
| 639D | LD E,$E8 | |||
| 639F | LD BC,$BFBF | |||
| 63A2 | CALL $8128 | Draw sprite C with its mask at screen position DE | ||
| 63A5 | LD A,($612B) | |||
| 63A8 | BIT 2,A | |||
| 63AA | RET Z | |||
| 63AB | LD A,$02 | |||
| 63AD | LD D,$CC | |||
| 63AF | LD E,$18 | |||
| 63B1 | LD BC,$BCBC | |||
| 63B4 | CALL $8128 | Draw sprite C with its mask at screen position DE | ||
| 63B7 | LD A,$02 | |||
| 63B9 | LD D,$D4 | |||
| 63BB | LD E,$28 | |||
| 63BD | LD BC,$C0C0 | |||
| 63C0 | CALL $8128 | Draw sprite C with its mask at screen position DE | ||
| 63C3 | LD A,$02 | |||
| 63C5 | LD D,$DC | |||
| 63C7 | LD E,$38 | |||
| 63C9 | LD BC,$BDBD | |||
| 63CC | CALL $8128 | Draw sprite C with its mask at screen position DE | ||
| 63CF | RET | |||
|
Used by the routine at 676D.
|
||||
|
Zeroes the entire shadow screen buffer, $E390 through $17FF bytes, via a single-byte seed plus LDIR fill.
|
||||
| 63D0 | LD HL,$E390 | Shadow screen address | ||
| 63D3 | LD DE,$E391 | |||
| 63D6 | LD BC,$17FF | |||
| 63D9 | LD (HL),$00 | |||
| 63DB | LDIR | |||
| 63DD | RET | |||
|
|
||||
| 63DE | DEFB $E2,$63,$04,$64,$02,$7C,$14,$4C | |||
| 63E6 | DEFB $02,$7E,$40,$4C,$02,$7F,$6C,$4C | |||
| 63EE | DEFB $02,$7D,$14,$64,$82,$7C,$EC,$4C | |||
| 63F6 | DEFB $82,$7E,$C0,$4C,$82,$7F,$94,$4C | |||
| 63FE | DEFB $82,$7D,$EC,$64,$FF,$FF,$02,$7C | |||
| 6406 | DEFB $14,$4C,$02,$7E,$40,$4C,$82,$7D | |||
| 640E | DEFB $6C,$4C,$02,$7D,$14,$64,$82,$7C | |||
| 6416 | DEFB $EC,$4C,$82,$7E,$C0,$4C,$02,$7D | |||
| 641E | DEFB $94,$4C,$82,$7D,$EC,$64,$FF,$01 | |||
| 6426 | DEFB $02,$03,$09,$0A,$0B,$11,$12,$13 | |||
| 642E | DEFB $FF | |||
|
Used by the routine at 676D.
|
||||
|
Uses $6129 (0 or 1) to index a 2-entry pointer table at $63DE, selecting one of two fixed layout lists. Each list has two parts: a sequence of 4-byte records (count, screen Y, screen X -- drawn via 8128) terminated by $FF, immediately followed by a sequence of single bytes (grid indices) terminated by $FF, each poked into the room grid ($612B+index, i.e. grid_offset=index-1) as solid wall ($7F). This is the source of the 3x3 solid-wall corner block seen in every room grid -- it is not part of the room-type template; it is this fixed, $6129-selected layout.
|
||||
| 642F | LD A,($6129) | index the layout pointer table $63DE by $6129 (0 or 1) | ||
| 6432 | AND $01 | |||
| 6434 | ADD A,A | |||
| 6435 | LD L,A | |||
| 6436 | LD H,$00 | |||
| 6438 | LD DE,$63DE | HL = the table entry address | ||
| 643B | ADD HL,DE | |||
| 643C | LD E,(HL) | DE = the selected layout pointer, IX = DE | ||
| 643D | INC HL | |||
| 643E | LD D,(HL) | |||
| 643F | PUSH DE | |||
| 6440 | POP IX | |||
| 6442 | LD A,(IX+$00) | *loop: read this entry's count, jump away at the terminator ($FF) | ||
| 6445 | CP $FF | |||
| 6447 | JR Z,$645D | |||
| 6449 | LD C,(IX+$01) | C/B = count, DE = screen position | ||
| 644C | LD B,C | |||
| 644D | LD E,(IX+$02) | |||
| 6450 | LD D,(IX+$03) | |||
| 6453 | CALL $8128 | Draw sprite C with its mask at screen position DE | ||
| 6456 | LD DE,$0004 | advance IX by 4 (next entry), loop back | ||
| 6459 | ADD IX,DE | |||
| 645B | JR $6442 | |||
| 645D | INC IX | terminator reached: IX++ (skip the $FF), read the next byte | ||
| 645F | LD A,(IX+$00) | |||
| 6462 | CP $FF | test for the outer terminator ($FF), return if done | ||
| 6464 | RET Z | |||
| 6465 | LD C,A | C = grid index, B = 0 | ||
| 6466 | LD B,$00 | |||
| 6468 | LD HL,$612B | poke solid wall ($7F) into the grid cell, loop back | ||
| 646B | ADD HL,BC | |||
| 646C | LD (HL),$7F | |||
| 646E | JR $645D | |||
| 6470 | PUSH AF | save row (B) to $649A, C = column | ||
| 6471 | LD C,A | |||
| 6472 | LD A,B | |||
| 6473 | LD ($649A),A | |||
| 6476 | LD B,$00 | |||
| 6478 | LD HL,$612C | HL = grid cell address, read its content | ||
| 647B | ADD HL,BC | |||
| 647C | LD A,(HL) | |||
| 647D | CP $7F | bail out if solid wall ($7F) or already-redrawn (masked $7F) | ||
| 647F | JP Z,$64EB | |||
| 6482 | AND $7F | |||
| 6484 | JP Z,$64EB | |||
| 6487 | LD A,C | A = the grid column's low 3 bits | ||
| 6488 | AND $07 | |||
| 648A | RLA | x8 into D, the sub-cell row | ||
| 648B | RLA | |||
| 648C | RLA | |||
| 648D | LD D,A | |||
| 648E | RLA | x16 + $80: E, the screen low byte | ||
| 648F | ADD A,$80 | |||
| 6491 | LD E,A | |||
| 6492 | LD A,C | A = the column, aligned down | ||
| 6493 | AND $F8 | |||
| 6495 | ADD A,D | plus the sub-cell row and the $88 screen base | ||
| 6496 | ADD A,$88 | |||
| 6498 | LD D,A | D = the screen high byte | ||
| 6499 | SUB $18 | !!MUT-ARG!! clamp the row to a multiple of $18 | ||
| 649B | ADD A,$18 | undo the clamp test, round up if it underflowed | ||
| 649D | JR NC,$64A1 | |||
| 649F | LD A,D | |||
| 64A0 | INC A | |||
| 64A1 | LD ($64CE),A | store the computed screen row byte | ||
| 64A4 | LD A,C | A = the grid column, aligned and doubled | ||
| 64A5 | AND $F8 | |||
| 64A7 | RLA | |||
| 64A8 | NEG | negated | ||
| 64AA | ADD A,E | added to the screen low byte | ||
| 64AB | LD E,A | |||
| 64AC | LD L,(HL) | HL = grid content value * 2 | ||
| 64AD | LD H,$00 | |||
| 64AF | ADD HL,HL | |||
| 64B0 | LD BC,$7556 | HL = this value's slot in the 7556 shape table | ||
| 64B3 | ADD HL,BC | |||
| 64B4 | LD C,(HL) | read the shape record's address from it | ||
| 64B5 | INC HL | |||
| 64B6 | LD H,(HL) | |||
| 64B7 | LD L,C | |||
| 64B8 | LD B,(HL) | B = its piece count | ||
| 64B9 | JR $64E8 | fall into 64BB's draw loop | ||
|
|
||||
|
For a grid cell whose terrain value (A) resolves via 9AAB/$750B to a sprite/column entry, computes a screen sub-position threshold against $D0 to pick between adjacent sprite variants, then draws it via 8128 with colour 0, adjusting the returned D (screen row-delta) via a small per-entry table before looping across the row, count B, called by 6470 for each terrain cell.
|
||||
| 64BB | PUSH BC | save BC/HL, A = grid value | ||
| 64BC | PUSH HL | |||
| 64BD | LD A,(HL) | |||
| 64BE | CALL $9AAB | Search the (key,data) pair table at $74CE for key A | ||
| 64C1 | LD C,(HL) | BC = the lookup result | ||
| 64C2 | LD B,$00 | |||
| 64C4 | LD HL,$750B | HL = the 750B table | ||
| 64C7 | ADD HL,BC | plus BC * 3, its entry size | ||
| 64C8 | ADD HL,BC | |||
| 64C9 | ADD HL,BC | |||
| 64CA | LD C,A | C = column index, A = the screen row minus the shape-table byte | ||
| 64CB | LD A,D | |||
| 64CC | SUB (HL) | |||
| 64CD | CP $D0 | !!MUT-ARG!! compare against a $D0 threshold | ||
| 64CF | JR NC,$64E5 | branch on the threshold result | ||
| 64D1 | LD A,C | |||
| 64D2 | AND A | |||
| 64D3 | LD A,D | |||
| 64D4 | JR Z,$64E4 | |||
| 64D6 | INC HL | D -= next table byte | ||
| 64D7 | LD A,D | |||
| 64D8 | SUB (HL) | |||
| 64D9 | LD D,A | |||
| 64DA | LD A,$00 | A = 0 (colour parameter) | ||
| 64DC | CALL $8128 | Draw sprite C with its mask at screen position DE | ||
| 64DF | JR C,$64ED | branch on the draw result | ||
| 64E1 | LD A,D | adjust D via the mask table | ||
| 64E2 | ADD A,(HL) | |||
| 64E3 | DEC HL | |||
| 64E4 | SUB (HL) | |||
| 64E5 | LD D,A | restore D, HL, BC | ||
| 64E6 | POP HL | |||
| 64E7 | POP BC | |||
|
This entry point is used by the routine at 6470.
|
||||
| 64E8 | INC HL | advance, loop 64BB count (B) times | ||
| 64E9 | DJNZ $64BB | |||
|
This entry point is used by the routine at 6470.
|
||||
| 64EB | POP AF | restore AF, return | ||
| 64EC | RET | |||
| 64ED | JR Z,$64E1 | alternate branch: adjust and rejoin the exit path | ||
| 64EF | POP HL | |||
| 64F0 | POP HL | |||
| 64F1 | JR $64EB | |||
|
Used by the routine at 676D.
|
||||
|
Loops A from 0 up to $3F, all 64 grid cells, with B fixed at $17, calling 6470 once per cell to redraw it.
|
||||
| 64F3 | XOR A | |||
| 64F4 | LD B,$17 | |||
| 64F6 | CALL $6470 | Redraw one terrain grid cell (index in BC), used to restore terrain hidden behind an object's sprite | ||
| 64F9 | INC A | |||
| 64FA | CP $40 | |||
| 64FC | JR C,$64F4 | |||
| 64FE | RET | |||
|
|
||||
| 64FF | DEFB $32 | |||
| 6500 | DEFB $01 | Oil level?? | ||
| 6501 | DEFB $00 | Rust/oil timer -- reset to 0 (full oil) by 6622 on using an oil can; per the game instructions, rust accumulates on contact with water and is reversed by oil | ||
| 6502 | DEFB $00 | Oil level?? | ||
|
Used by the routine at 6B71.
|
||||
|
Does nothing if a game-over flag ($617A) is set, or in rooms 1/2 (ending/menu). If the oil-used flag ($6199) is set, just calls 6580 to tick the gauge display. Otherwise decrements a countdown at $6501, and every time it wraps, decrements a cycle counter at $6500; when that hits zero, reloads it from $64FF and increments the rust level at $6502. Once rust reaches $52, the player is killed: switches the player's per-frame handler to $8C48 and sets the game-over flag.
|
||||
| 6503 | LD A,($617A) | |||
| 6506 | AND A | |||
| 6507 | RET NZ | POKE 201 (RET) here for infinite Oil | ||
| 6508 | LD A,($6126) | get room number | ||
| 650B | CP $01 | |||
| 650D | RET Z | |||
| 650E | CP $02 | |||
| 6510 | RET Z | |||
| 6511 | LD A,($6199) | |||
| 6514 | AND A | |||
| 6515 | JP NZ,$6580 | => Tick the rust/oil gauge | ||
| 6518 | LD HL,$6501 | |||
| 651B | DEC (HL) | |||
| 651C | JP P,$6529 | |||
| 651F | INC (HL) | |||
| 6520 | LD HL,$6500 | |||
| 6523 | DEC (HL) | |||
| 6524 | RET NZ | |||
| 6525 | LD A,($64FF) | |||
| 6528 | LD (HL),A | |||
| 6529 | LD HL,$6502 | |||
| 652C | INC (HL) | |||
| 652D | LD A,(HL) | |||
| 652E | CP $52 | |||
| 6530 | JR C,$6543 | => Draw one rust-gauge segment | ||
| 6532 | DEC (HL) | |||
| 6533 | LD HL,$8C48 | |||
| 6536 | LD ($8DB9),HL | set player behaviour-handler pointer | ||
| 6539 | LD A,$01 | |||
| 653B | LD ($617A),A | |||
| 653E | RET | |||
|
|
||||
| 653F | DEFB $B5,$B6,$B7,$B8 | |||
|
Screen column comes from A rotated into a fixed base ($AD, masked to 4-pixel steps); the sprite number is looked up in a 4-entry table at $653F, indexed by (A+1) AND $03, so the segment's appearance cycles through 4 sprite variants as the gauge fills. Draws via 8128 with a fixed row/mask setup (B=C=the looked-up sprite, colour 5).
|
||||
| 6543 | LD B,A | B = the gauge position parameter A | ||
| 6544 | ADD A,$AD | Compute the screen column: add $AD and mask to a 4-pixel boundary | ||
| 6546 | AND $FC | |||
| 6548 | LD E,A | DE = the column address, high byte fixed at $FC | ||
| 6549 | LD D,$FC | |||
| 654B | LD A,B | A = the saved position, compute (A+1) AND 3, the 4-way sprite-variant index | ||
| 654C | ADD A,$01 | |||
| 654E | AND $03 | |||
| 6550 | LD C,A | |||
| 6551 | LD B,$00 | BC = the index, HL = the sprite-variant table $653F | ||
| 6553 | LD HL,$653F | |||
| 6556 | ADD HL,BC | Look up the sprite number, C = B = that value | ||
| 6557 | LD C,(HL) | |||
| 6558 | LD B,C | |||
| 6559 | LD A,$05 | A = 5, the colour parameter | ||
| 655B | JP $8128 | => Draw sprite C with its mask at screen position DE | ||
|
Draws a fixed base icon, sprite $C5 colour 3, at $FCD4, then repeated rust-gauge segments via 6543 at increasing positions, A stepping by 3, up to the rust timer $6502, finishing with one more segment at the timer's exact value unless it's already zero.
|
||||
| 655E | LD DE,$FCD4 | |||
| 6561 | LD B,$C5 | |||
| 6563 | LD C,B | |||
| 6564 | LD A,$03 | |||
| 6566 | CALL $8128 | Draw sprite C with its mask at screen position DE | ||
| 6569 | LD A,$01 | |||
| 656B | LD HL,$6502 | |||
| 656E | CP (HL) | |||
| 656F | JR NC,$657A | |||
| 6571 | PUSH AF | |||
| 6572 | CALL $6543 | Draw one rust-gauge segment | ||
| 6575 | POP AF | |||
| 6576 | ADD A,$03 | |||
| 6578 | JR $656B | |||
| 657A | LD A,(HL) | |||
| 657B | AND A | |||
| 657C | RET Z | |||
| 657D | JP $6543 | => Draw one rust-gauge segment | ||
|
Used by the routine at 6503.
|
||||
|
Decrements timer $6502 by up to 2 and redraws via 655E, or when already zero, clears the oil-used flag $6199.
|
||||
| 6580 | LD HL,$6502 | |||
| 6583 | LD A,(HL) | |||
| 6584 | AND A | |||
| 6585 | JR Z,$658F | |||
| 6587 | DEC (HL) | |||
| 6588 | JP Z,$655E | => Draw the rust/oil gauge | ||
| 658B | DEC (HL) | |||
| 658C | JP $655E | => Draw the rust/oil gauge | ||
| 658F | LD ($6199),A | |||
| 6592 | RET | |||
|
Used by the routine at 676D.
|
||||
|
Draws the window's top-left corner icon at $EC2C, then two 8-wide edge strips: the top edge starting at $C408 stepping +8,+16 per tile, and the bottom edge starting at $C4F8 stepping +8,-16 per tile, all via 8128.
|
||||
| 6593 | LD DE,$EC2C | DE = the corner icon's screen position $EC2C, B = C = its sprite $C8 | ||
| 6596 | LD B,$C8 | |||
| 6598 | LD C,B | |||
| 6599 | LD A,$02 | A = 2, the colour parameter | ||
| 659B | CALL $8128 | Draw sprite C with its mask at screen position DE | ||
| 659E | LD DE,$C408 | DE = the top-edge start position $C408, B = C = sprite $C3, H = 8, the tile count | ||
| 65A1 | LD B,$C3 | |||
| 65A3 | LD C,B | |||
| 65A4 | LD H,$08 | |||
| 65A6 | LD A,$02 | A = 2, the colour parameter | ||
| 65A8 | CALL $8128 | Draw sprite C with its mask at screen position DE | ||
| 65AB | LD A,D | advance the screen row by 8 | ||
| 65AC | ADD A,$08 | |||
| 65AE | LD D,A | |||
| 65AF | LD A,E | advance the screen column by 16 | ||
| 65B0 | ADD A,$10 | |||
| 65B2 | LD E,A | |||
| 65B3 | DEC H | Decrement the tile count, loop for the top edge | ||
| 65B4 | JR NZ,$65A6 | |||
| 65B6 | LD DE,$C4F8 | DE = the bottom-edge start position $C4F8, B = C = sprite $C4, H = 8 | ||
| 65B9 | LD B,$C4 | |||
| 65BB | LD C,B | |||
| 65BC | LD H,$08 | |||
| 65BE | LD A,$02 | A = 2, the colour parameter | ||
| 65C0 | CALL $8128 | Draw sprite C with its mask at screen position DE | ||
| 65C3 | LD A,D | advance the screen row by 8 | ||
| 65C4 | ADD A,$08 | |||
| 65C6 | LD D,A | |||
| 65C7 | LD A,E | step the screen column back by 16 | ||
| 65C8 | SUB $10 | |||
| 65CA | LD E,A | |||
| 65CB | DEC H | Decrement the tile count, loop for the bottom edge | ||
| 65CC | JR NZ,$65BE | |||
| 65CE | RET | |||
|
|
||||
| 65CF | DEFB $16,$01,$A4,$5E | |||
| 65D3 | DEFB $16,$01,$B4,$5E | |||
| 65D7 | DEFW $7441 | |||
| 65D9 | DEFW $0000 | |||
|
Used by the routine at 676D.
|
||||
|
Prints the fixed "DEATHBOWL" banner via 65CF's prefix, then computes and prints this room's title string, looked up in a table at $73B5 indexed by the room description's byte3 low 6 bits (title index) times 8. Follows with a second, rotating clue/joke message line from a pointer at $65D7 (wrapping to $7441 at the $FF terminator), advancing that pointer by $14, one entry, each call so successive room visits cycle through the message list.
|
||||
| 65DB | LD HL,$65CF | |||
| 65DE | CALL $7D68 | Print string routine | ||
| 65E1 | LD HL,($6127) | |||
| 65E4 | LD DE,$0003 | |||
| 65E7 | ADD HL,DE | |||
| 65E8 | LD A,(HL) | |||
| 65E9 | AND $3F | |||
| 65EB | LD L,A | |||
| 65EC | LD H,$00 | |||
| 65EE | ADD HL,HL | |||
| 65EF | LD C,L | |||
| 65F0 | LD B,H | |||
| 65F1 | ADD HL,HL | |||
| 65F2 | ADD HL,HL | |||
| 65F3 | ADD HL,BC | |||
| 65F4 | ADD HL,BC | |||
| 65F5 | ADD HL,BC | |||
| 65F6 | LD DE,$73B5 | " DEATHBOWL " | ||
| 65F9 | ADD HL,DE | |||
| 65FA | LD ($65D9),HL | |||
| 65FD | CALL $7D68 | Print string routine | ||
| 6600 | LD HL,$65D3 | |||
| 6603 | CALL $7D68 | Print string routine | ||
| 6606 | LD HL,($65D7) | |||
| 6609 | LD A,$FF | |||
| 660B | CP (HL) | |||
| 660C | JR NZ,$6614 | |||
| 660E | LD HL,$7441 | |||
| 6611 | LD ($65D7),HL | |||
| 6614 | CALL $7D68 | Print string routine | ||
| 6617 | LD HL,($65D7) | |||
| 661A | LD DE,$0014 | |||
| 661D | ADD HL,DE | |||
| 661E | LD ($65D7),HL | |||
| 6621 | RET | |||
|
Used by the routine at 8AFB.
|
||||
|
Sets $6199=1, resets the rust/oil timer $6501 to 0 (full), decrements oil-can count $6198 (BCD), calls $6646 (unidentified), plays sound effect $09.
|
||||
| 6622 | LD A,$01 | Set the oil-used flag $6199 | ||
| 6624 | LD ($6199),A | |||
| 6627 | XOR A | Clear the rust timer $6501 | ||
| 6628 | LD ($6501),A | |||
| 662B | LD HL,$6198 | HL = the oil-can count $6198, decrement it in BCD | ||
| 662E | LD A,(HL) | |||
| 662F | SUB $01 | |||
| 6631 | DAA | |||
| 6632 | LD (HL),A | |||
| 6633 | CALL $6646 | |||
| 6636 | LD A,$09 | A = sound effect $09 | ||
| 6638 | JP $848E | => Request sound effect A | ||
|
Used by the routine at 676D.
|
||||
| 663B | LD DE,$D408 | |||
| 663E | LD B,$6E | |||
| 6640 | LD C,B | |||
| 6641 | LD A,$05 | |||
| 6643 | CALL $8128 | Draw sprite C with its mask at screen position DE | ||
|
This entry point is used by the routine at 6622.
|
||||
| 6646 | CALL $850E | Print an inline string embedded right after the caller's CALL instruction | ||
| 6649 | DEFM $16,$13,$03,$5E | cursor position only, no visible text | ||
| 664D | LD A,($6198) | |||
| 6650 | JP $854F | => Print BCD byte A as two digits, high digit blanked to a space if zero | ||
|
Used by the routine at 676D.
|
||||
|
Sets colour to 0 and jumps into 69AC to draw the room's background.
|
||||
| 6653 | XOR A | |||
| 6654 | JP $69AC | => Draw the room's background | ||
|
Used by the routine at 676D.
|
||||
|
Reads byte3 of the current room description ($6127+3), masks to the low nibble, colour, ignoring the size bits, and stores it to $6175.
|
||||
| 6657 | LD HL,($6127) | get room description address | ||
| 665A | INC HL | |||
| 665B | INC HL | |||
| 665C | LD A,(HL) | get Byte 3: Room colour and Room Size | ||
| 665D | AND $0F | color only | ||
| 665F | LD ($6175),A | Store room color | ||
| 6662 | RET | |||
| 6663 | PUSH BC | |||
| 6664 | PUSH HL | |||
| 6665 | LD IX,$8DEF | |||
| 6669 | CALL $84AE | Dynamic object allocator | ||
| 666C | DEFW $9341 | Dynamic object handler address (9341) | ||
| 666E | POP HL | |||
| 666F | PUSH HL | |||
| 6670 | LD (IX+$0E),L | |||
| 6673 | LD (IX+$0F),H | |||
| 6676 | INC HL | |||
| 6677 | LD A,(HL) | |||
| 6678 | INC HL | |||
| 6679 | CALL $6254 | Set object position (IX+5/+6) from grid index A | ||
| 667C | LD A,(HL) | |||
| 667D | INC HL | |||
| 667E | LD (IX+$07),A | |||
| 6681 | LD A,(HL) | |||
| 6682 | LD (IX+$08),A | |||
| 6685 | CALL $9AAB | Search the (key,data) pair table at $74CE for key A | ||
| 6688 | LD A,(HL) | |||
| 6689 | LD (IX+$0A),A | |||
| 668C | CALL $9A60 | Dynamic object finalizer | ||
| 668F | POP HL | |||
| 6690 | POP BC | |||
| 6691 | RET | |||
|
Used by the routine at 6728.
|
||||
|
Insertion-sorts DE into the queue, keeping it ordered by each record's offset+2 byte (normally the "owning room" field elsewhere -- its role as a sort key here isn't confirmed). Shifts later entries down to make room; consumed by 9900.
|
||||
| 6692 | PUSH BC | save BC/HL, DE = the new record pointer, IX = queue base $60EC, A = queue count | ||
| 6693 | PUSH HL | |||
| 6694 | EX DE,HL | |||
| 6695 | LD IX,$60EC | |||
| 6699 | LD A,($60EB) | |||
| 669C | AND A | |||
| 669D | JR Z,$66C1 | branch to the append path if the queue is empty | ||
| 669F | PUSH AF | *loop: save the count | ||
| 66A0 | LD L,(IX+$00) | HL = this queue entry's record pointer | ||
| 66A3 | LD H,(IX+$01) | |||
| 66A6 | INC HL | advance both pointers to the records' offset+2 | ||
| 66A7 | INC HL | |||
| 66A8 | INC DE | |||
| 66A9 | INC DE | compare the two records' sort fields | ||
| 66AA | LD A,(DE) | |||
| 66AB | CP (HL) | |||
| 66AC | DEC DE | restore both pointers to their record bases | ||
| 66AD | DEC DE | |||
| 66AE | DEC HL | |||
| 66AF | DEC HL | |||
| 66B0 | JR NC,$66B9 | skip the shift if not before this entry, else shift this entry's pointer up one slot | ||
| 66B2 | EX DE,HL | |||
| 66B3 | LD (IX+$00),L | |||
| 66B6 | LD (IX+$01),H | |||
| 66B9 | INC IX | advance to the next queue slot | ||
| 66BB | INC IX | |||
| 66BD | POP AF | restore the count, loop | ||
| 66BE | DEC A | |||
| 66BF | JR NZ,$669F | |||
| 66C1 | LD (IX+$00),E | store the new record pointer into the current queue slot | ||
| 66C4 | LD (IX+$01),D | |||
| 66C7 | LD HL,$60EB | increment the queue count | ||
| 66CA | INC (HL) | |||
| 66CB | POP HL | restore HL/BC, return | ||
| 66CC | POP BC | |||
| 66CD | RET | |||
|
Used by the routine at 6728.
|
||||
|
Saves and clears a global "building" flag byte at $8DB8 for the duration. For each active object (count $60EB, records at $60EC), calls 6663 to spawn/refresh it, then settles its height field (+0x07) toward the ground: decrements by 4 with a 9BF0 collision test each step while above $18, or increments by 4 while blocked below $18, clamping to whichever bound clears the test. Clears bit 7 of the flags byte (+0x0D) and writes the settled height into the record's linked height-shadow field (offset+2 via +0x0E/+0x0F), then restores $8DB8 on completion. Called after 6728 queues the room's items.
|
||||
| 66CE | LD HL,$8DB8 | HL = the "building" flag byte $8DB8 | ||
| 66D1 | LD A,(HL) | Save its value, clear it to 0 | ||
| 66D2 | PUSH AF | |||
| 66D3 | LD (HL),$00 | |||
| 66D5 | LD A,($60EB) | B = the active-object count from $60EB | ||
| 66D8 | AND A | |||
| 66D9 | JR Z,$6723 | If zero, nothing to build, skip to the end | ||
| 66DB | LD B,A | B = count, IX = the active-object record-pointer list at $60EC | ||
| 66DC | LD IX,$60EC | |||
| 66E0 | PUSH BC | Save BC, the outer loop counter | ||
| 66E1 | PUSH IX | Save IX, load the record pointer into HL | ||
| 66E3 | LD L,(IX+$00) | |||
| 66E6 | LD H,(IX+$01) | HL = the record pointer | ||
| 66E9 | CALL $6663 | Spawn the room's creature | ||
| 66EC | LD A,(IX+$07) | Decrement the height field (+0x07) by 4 | ||
| 66EF | SUB $04 | |||
| 66F1 | LD (IX+$07),A | |||
| 66F4 | CP $18 | Compare against the rest height $18, skip the extra push below if still above it | ||
| 66F6 | JR C,$66FD | |||
| 66F8 | CALL $9BF0 | Collision test | ||
| 66FB | JR NC,$66EC | Loop back while still settling | ||
| 66FD | LD A,(IX+$07) | Blocked: increment the height field (+0x07) by 4 instead | ||
| 6700 | ADD A,$04 | |||
| 6702 | LD (IX+$07),A | |||
| 6705 | CALL $9BF0 | Collision test | ||
| 6708 | JR C,$66FD | Loop back while still blocked | ||
| 670A | LD (IX+$0D),$00 | Clear bit 7 of the flags byte (+0x0D) | ||
| 670E | LD L,(IX+$0E) | HL = the record's linked height-shadow field (offset+2 via +0x0E/+0x0F) | ||
| 6711 | LD H,(IX+$0F) | |||
| 6714 | INC HL | |||
| 6715 | INC HL | |||
| 6716 | LD A,(IX+$07) | Write the settled height into it | ||
| 6719 | LD (HL),A | |||
| 671A | POP IX | Restore IX, advance it past this record | ||
| 671C | INC IX | |||
| 671E | INC IX | |||
| 6720 | POP BC | Restore BC, loop for the next object | ||
| 6721 | DJNZ $66E0 | |||
| 6723 | POP AF | Restore the saved flag byte, write it back to $8DB8 | ||
| 6724 | LD ($8DB8),A | |||
| 6727 | RET | |||
|
Used by the routine at 676D.
|
||||
|
Scans the item table at $788A for entries in the current room, inserting each via 6692, then builds the room.
|
||||
| 6728 | XOR A | |||
| 6729 | LD ($60EB),A | |||
| 672C | LD HL,$788A | |||
| 672F | LD BC,($7C81) | |||
| 6733 | LD A,($6126) | get room number | ||
| 6736 | CP (HL) | |||
| 6737 | CALL Z,$6692 | Insert a record pointer (DE) into the draw queue (60EC), sorted by the record's offset+2 byte | ||
| 673A | LD DE,$0008 | |||
| 673D | ADD HL,DE | |||
| 673E | DJNZ $6733 | |||
| 6740 | JP $66CE | => Room build | ||
|
Used by the routine at 676D.
|
||||
|
Tests bit 7 of the room description's byte3 (a "room already visited" flag, distinct from bit 6's shape selector and bits 0-5's title index -- see Room-Format.md section 4). If not yet set: marks it, draws the title via 88D7, and adds 5 (BCD) to a counter at $6120/$6121. If already visited, just draws the title via 88DD (no bonus).
|
||||
| 6743 | LD HL,($6127) | HL = room description byte3 (address + 3) | ||
| 6746 | INC HL | |||
| 6747 | INC HL | |||
| 6748 | INC HL | |||
| 6749 | BIT 7,(HL) | test the "room visited" flag (bit 7), skip the bonus if already set | ||
| 674B | JR NZ,$6765 | |||
| 674D | SET 7,(HL) | mark the room as visited (set bit 7) | ||
| 674F | LD IY,$7C9A | draw the room title (first-visit variant) via 88D7 | ||
| 6753 | CALL $88D7 | |||
| 6756 | LD HL,$6120 | HL = the BCD bonus counter $6120 | ||
| 6759 | LD A,(HL) | |||
| 675A | ADD A,$05 | add 5, store | ||
| 675C | DAA | |||
| 675D | LD (HL),A | |||
| 675E | INC HL | A = the counter's high byte | ||
| 675F | LD A,(HL) | |||
| 6760 | ADC A,$00 | add the carry in, BCD-adjust | ||
| 6762 | DAA | |||
| 6763 | LD (HL),A | store it back | ||
| 6764 | RET | |||
| 6765 | LD IY,$7C9A | already-visited path: IY = title data $7C9A | ||
| 6769 | CALL $88DD | Subtract a BCD value from the score, value from a circular queue via 88B9 | ||
| 676C | RET | |||
|
Draw the full room (walls, doors, message window, creatures/objects) -- or the reduced special-room variant for rooms $01/$02
Rooms $01 and $02 are the only two type $E rooms, and are special "no walls" rooms (see 6CCF -- room $01 is the ending/winning room). At 67AB, this routine checks if the current room ($6126) is 1 or 2 and, if so, skips straight to 67E0, bypassing: the wall/layout draw (642F), door-graphic draw (6377), the message window (65DB), and several creature/object placement calls (6593/$655E/$663B/$6743/$8F82/$6895/$885A). The room's grid contents (rocks/seaweed etc, from its type $E template) still get drawn via a separate, non-skipped path -- consistent with the "just floating rocks and seaweed, no walls" appearance of room $01. Room $01 additionally gets one extra call, 86CC (CALL Z at 67E8, gated on room==1 specifically, not room==2) -- draws the "DEATHBOWL DIVINED" end-game stats overlay (see 86CC).
|
||||
| 676D | LD ($8DB8),A | |||
| 6770 | LD ($8E11),A | |||
| 6773 | LD ($8E29),A | |||
| 6776 | LD A,($6126) | get room number | ||
| 6779 | LD ($619A),A | |||
| 677C | LD A,($8DC1) | |||
| 677F | LD ($619D),A | |||
| 6782 | XOR A | |||
| 6783 | LD ($6193),A | |||
| 6786 | LD ($618A),A | |||
| 6789 | LD IX,$8DB6 | |||
| 678D | CALL $9A49 | Snap the object's position (IX+5/+6) to its grid-cell centre, then finalize via 9A60 | ||
| 6790 | LD HL,($8DBB) | |||
| 6793 | LD ($619B),HL | |||
| 6796 | CALL $61C1 | Reset object system | ||
| 6799 | LD A,($8DB8) | |||
| 679C | CALL $6269 | Set current room to A | ||
| 679F | CALL $630D | Plug Room grid setup | ||
| 67A2 | CALL $7FC0 | Reset the sprite-draw clip window ($610A-$610D) to the full play-field | ||
| 67A5 | CALL $7F8E | Reset the redraw bounding-box trackers ($6194-$6197) to empty | ||
| 67A8 | CALL $63D0 | Clear shadow screen | ||
| 67AB | LD A,($6126) | get Room number | ||
| 67AE | CP $01 | if room $6126 is 1 or 2, skip to 67E0 (special "no walls" room -- see 676D) | ||
| 67B0 | JR Z,$67E0 | |||
| 67B2 | CP $02 | |||
| 67B4 | JR Z,$67E0 | |||
| 67B6 | CALL $642F | Draw the fixed wall/decoration layout selected by $6129 | ||
| 67B9 | CALL $64F3 | Redraw the whole room's terrain grid | ||
| 67BC | CALL $6593 | Draw the message window's border/frame | ||
| 67BF | CALL $6377 | Draw three-piece doors, for $612B bits 1 and 2 | ||
| 67C2 | CALL $655E | Draw the rust/oil gauge | ||
| 67C5 | CALL $65DB | Draw message window | ||
| 67C8 | CALL $663B | Draw the oil-can icon and its remaining count on HUD | ||
| 67CB | CALL $6743 | Draw the room title, awarding a first-visit bonus the first time this room is entered | ||
| 67CE | CALL $6653 | Prepare room with color 0 | ||
| 67D1 | CALL $6657 | Get room color from room description and store to 6175 | ||
| 67D4 | CALL $8F82 | Spawn room-membership-gated decoration pairs | ||
| 67D7 | CALL $6895 | Draw the currently-held item's icon, and its ammo count if it's a weapon, on HUD | ||
| 67DA | CALL $885A | Redraw the score display on HUD | ||
| 67DD | JP $6728 | => Queue this room's dropped items for drawing | ||
|
Special-room path for rooms $01/$02: skips walls/doors/message-window/most creature calls; room $01 additionally calls 86CC (likely the end-game stats overlay)
|
||||
| 67E0 | CALL $64F3 | Redraw the whole room's terrain grid | ||
| 67E3 | LD A,($6126) | get Room number | ||
| 67E6 | CP $01 | |||
| 67E8 | CALL Z,$86CC | Draw the end-game stats screen | ||
| 67EB | CALL $6653 | Prepare room with color 0 | ||
| 67EE | JP $6657 | => Get room color from room description and store to 6175 | ||
|
Used by the routine at 8AD9.
|
||||
|
Reads a direction code from ($8DC1) -- 1, 2, 4, or else (fallback case) -- and for each, tests one bit of the door bitfield at 612B via HL (set to $612B just before this dispatch) before allowing the move: bit 0 (direction code 1) gates "room number - 6" (row-1, NORTH); bit 1 (direction code 4) gates "room number + 1" (col+1, EAST); bit 2 (direction code 2) gates "room number + 6" (row+1, SOUTH); bit 3 (the fallback case) gates "room number - 1" (col-1, WEST). Also does on-screen player-position bounds checks (against D/E, likely screen row/col) before allowing the move, presumably to require the player to be near the room edge on that side. 97FC is called with the new room number to actually perform the transition.
|
||||
| 67F1 | LD A,($8DBD) | |||
| 67F4 | CP $29 | |||
| 67F6 | JP NC,$687E | |||
| 67F9 | LD HL,$612B | |||
| 67FC | LD DE,($8DBB) | |||
| 6800 | LD A,($8DC1) | |||
| 6803 | CP $01 | |||
| 6805 | JR NZ,$6827 | |||
| 6807 | BIT 0,(HL) | |||
| 6809 | JR Z,$687E | |||
| 680B | LD A,E | |||
| 680C | CP $03 | |||
| 680E | JR NC,$687E | |||
| 6810 | LD A,D | |||
| 6811 | CP $18 | |||
| 6813 | JR C,$687E | |||
| 6815 | CP $20 | |||
| 6817 | JR NC,$687E | |||
| 6819 | LD A,($6126) | get room number | ||
| 681C | SUB $06 | change room number: -6 (row-1, move NORTH) | ||
| 681E | LD E,$3C | |||
| 6820 | LD ($8DBB),DE | |||
| 6824 | JP $97FC | => Change current room to A = new room number | ||
| 6827 | CP $04 | |||
| 6829 | JR NZ,$6845 | |||
| 682B | BIT 1,(HL) | |||
| 682D | JR Z,$687E | |||
| 682F | LD A,D | |||
| 6830 | CP $3D | |||
| 6832 | JR C,$687E | |||
| 6834 | LD A,E | |||
| 6835 | CP $18 | |||
| 6837 | JR C,$687E | |||
| 6839 | CP $20 | |||
| 683B | JR NC,$687E | |||
| 683D | LD A,($6126) | get room number | ||
| 6840 | INC A | change room number: +1 (col+1, move EAST) | ||
| 6841 | LD D,$04 | |||
| 6843 | JR $6820 | |||
| 6845 | CP $02 | |||
| 6847 | JR NZ,$6864 | |||
| 6849 | BIT 2,(HL) | |||
| 684B | JR Z,$687E | |||
| 684D | LD A,E | |||
| 684E | CP $3D | |||
| 6850 | JR C,$687E | |||
| 6852 | LD A,D | |||
| 6853 | CP $18 | |||
| 6855 | JR C,$687E | |||
| 6857 | CP $20 | |||
| 6859 | JR NC,$687E | |||
| 685B | LD A,($6126) | get room number | ||
| 685E | ADD A,$06 | change room number: +6 (row+1, move SOUTH) | ||
| 6860 | LD E,$04 | |||
| 6862 | JR $6820 | |||
| 6864 | BIT 3,(HL) | |||
| 6866 | JR Z,$687E | |||
| 6868 | LD A,D | |||
| 6869 | CP $03 | |||
| 686B | JR NC,$687E | |||
| 686D | LD A,E | |||
| 686E | CP $18 | |||
| 6870 | JR C,$687E | |||
| 6872 | CP $20 | |||
| 6874 | JR NC,$687E | |||
| 6876 | LD A,($6126) | get room number | ||
| 6879 | DEC A | change room number: -1 (col-1, move WEST) | ||
| 687A | LD D,$3C | |||
| 687C | JR $6820 | |||
| 687E | AND A | |||
| 687F | RET | |||
|
Used by the routine at 8AFB.
|
||||
|
Walks the item table at $788A (count from $7C81, entry stride 8), counting entries whose room byte equals A, returning the count in A. Used to check how many of a room's dropped items remain.
|
||||
| 6880 | LD HL,$788A | HL = the item table $788A | ||
| 6883 | LD DE,$0008 | DE = the entry stride, 8 bytes | ||
| 6886 | LD BC,($7C81) | BC = the table's entry count | ||
| 688A | LD C,$00 | C = 0, the match counter | ||
| 688C | CP (HL) | Compare A against this entry's room byte | ||
| 688D | JR NZ,$6890 | If different, skip the increment below | ||
| 688F | INC C | Match: C += 1 | ||
| 6890 | ADD HL,DE | Advance to the next entry, loop | ||
| 6891 | DJNZ $688C | |||
| 6893 | LD A,C | A = the match count, return | ||
| 6894 | RET | |||
| 6895 | LD HL,($6110) | |||
| 6898 | LD DE,$D4F8 | |||
| 689B | LD BC,$0003 | |||
| 689E | ADD HL,BC | |||
| 689F | LD C,(HL) | |||
| 68A0 | LD B,C | |||
| 68A1 | LD A,B | |||
| 68A2 | LD A,$05 | |||
| 68A4 | CALL $8128 | Draw sprite C with its mask at screen position DE | ||
| 68A7 | LD A,(HL) | |||
| 68A8 | CALL $88E3 | Search the buffer at $7C83 for byte A | ||
| 68AB | RET NZ | |||
| 68AC | JP $68AF | |||
|
This entry point is used by the routine at 68C1.
|
||||
| 68AF | PUSH HL | |||
| 68B0 | PUSH BC | |||
| 68B1 | CALL $850E | Print an inline string embedded right after the caller's CALL instruction | ||
| 68B4 | DEFM $16,$13,$1C,$5E | cursor position only, no visible text | ||
| 68B8 | LD A,($619E) | get Weapon-held flag | ||
| 68BB | CALL $854F | Print BCD byte A as two digits, high digit blanked to a space if zero | ||
| 68BE | POP BC | |||
| 68BF | POP HL | |||
| 68C0 | RET | |||
|
Used by the routine at 8D8D.
|
||||
| 68C1 | LD HL,$619E | |||
| 68C4 | LD A,(HL) | |||
| 68C5 | SUB $01 | |||
| 68C7 | DAA | |||
| 68C8 | LD (HL),A | |||
| 68C9 | JP NZ,$68AF | |||
| 68CC | CALL $850E | Print an inline string embedded right after the caller's CALL instruction | ||
| 68CF | DEFM $16,$13,$1C," ",$5E | two spaces at cursor position | ||
| 68D5 | LD HL,$788A | |||
| 68D8 | LD ($6110),HL | |||
| 68DB | JP $6895 | => Draw the currently-held item's icon, and its ammo count if it's a weapon, on HUD | ||
|
|
||||
| 68DE | DEFB $04,$58,$06,$1C,$01,$C0,$58,$0E | |||
| 68E6 | DEFB $20,$01,$80,$5A,$04,$18,$01,$98 | |||
| 68EE | DEFB $5A,$04,$08,$02,$00,$58,$06,$04 | |||
| 68F6 | DEFB $01,$18,$58,$04,$08,$01,$20,$5A | |||
| 68FE | DEFB $07,$02,$04,$42,$5A,$06,$02,$04 | |||
| 6906 | DEFB $64,$5A,$05,$02,$04,$86,$5A,$04 | |||
| 690E | DEFB $02,$04,$A8,$5A,$03,$02,$04,$CA | |||
| 6916 | DEFB $5A,$02,$02,$04,$EC,$5A,$01,$02 | |||
| 691E | DEFB $04,$3E,$5A,$07,$02,$04,$5C,$5A | |||
| 6926 | DEFB $06,$02,$04,$7A,$5A,$05,$02,$04 | |||
| 692E | DEFB $98,$5A,$04,$02,$04,$B6,$5A,$03 | |||
| 6936 | DEFB $02,$04,$D4,$5A,$02,$02,$04,$F2 | |||
| 693E | DEFB $5A,$01,$02,$04,$E0,$59,$02,$02 | |||
| 6946 | DEFB $02,$02,$5A,$02,$02,$02,$24,$5A | |||
| 694E | DEFB $02,$02,$02,$46,$5A,$02,$02,$02 | |||
| 6956 | DEFB $68,$5A,$02,$02,$02,$8A,$5A,$02 | |||
| 695E | DEFB $02,$02,$AC,$5A,$02,$02,$02,$CE | |||
| 6966 | DEFB $5A,$02,$02,$02,$D0,$5A,$02,$02 | |||
| 696E | DEFB $02,$B2,$5A,$02,$02,$02,$94,$5A | |||
| 6976 | DEFB $02,$02,$02,$76,$5A,$02,$02,$02 | |||
| 697E | DEFB $58,$5A,$02,$02,$02,$3A,$5A,$02 | |||
| 6986 | DEFB $02,$02,$1C,$5A,$02,$02,$02,$FE | |||
| 698E | DEFB $59,$02,$02,$02,$00,$00,$00,$00 | |||
| 6996 | DEFB $00 | |||
|
|
||||
| 6997 | DEFM "EGCFDFEABGBBAGCBDDBCF" | |||
|
||||||||
|
Fills the diamond floor/border with the room colour, special-cased for room 1 (ending screen) and room 2 (menu screen).
|
||||||||
| 69AC | AND $07 | build the border attribute byte (room colour OR $40), store to $6175, enable interrupts | ||||||
| 69AE | OR $40 | |||||||
| 69B0 | LD ($6175),A | |||||||
| 69B3 | EI | |||||||
| 69B4 | LD HL,$5C78 | HL = frame counter $5C78 (system variable) | ||||||
| 69B7 | LD A,(HL) | wait for the next frame interrupt | ||||||
| 69B8 | CP (HL) | |||||||
| 69B9 | JR Z,$69B8 | |||||||
| 69BB | PUSH IX | save IX, A = room colour | ||||||
| 69BD | LD A,($6175) | |||||||
| 69C0 | AND $07 | A = room colour | ||||||
| 69C2 | LD C,A | |||||||
| 69C3 | ADD A,A | multiply it by 3, the per-colour table's entry size | ||||||
| 69C4 | ADD A,C | |||||||
| 69C5 | LD C,A | |||||||
| 69C6 | LD B,$00 | BC = the offset, HL = the per-colour table $6994 | ||||||
| 69C8 | LD HL,$6994 | |||||||
| 69CB | ADD HL,BC | test the table entry | ||||||
| 69CC | AND A | |||||||
| 69CD | JR Z,$69DF | branch to $69DF if empty | ||||||
| 69CF | LD A,($6126) | get room number | ||||||
| 69D2 | CP $01 | room 1: ending-screen attribute prep | ||||||
| 69D4 | JP Z,$6A32 | |||||||
| 69D7 | CP $02 | room 2: menu-screen attribute prep | ||||||
| 69D9 | JP Z,$6A7E | |||||||
| 69DC | JP $69E2 | |||||||
| 69DF | LD HL,$6175 | HL = $6175 (fallback path, no per-colour table entry) | ||||||
| 69E2 | LD DE,$6176 | DE = $6176 | ||||||
| 69E5 | LDI | copy the 3-byte room-colour record | ||||||
| 69E7 | LDI | |||||||
| 69E9 | LDI | |||||||
| 69EB | LD IX,$68DE | IX = wall-piece table $68DE | ||||||
| 69EF | LD L,(IX+$00) | read this entry's screen address (IX+0/1) | ||||||
| 69F2 | LD H,(IX+$01) | |||||||
| 69F5 | LD A,H | stop the loop at the table terminator | ||||||
| 69F6 | OR L | |||||||
| 69F7 | JR Z,$6A2F | |||||||
| 69F9 | LD B,(IX+$04) | B = row count (IX+4) | ||||||
| 69FC | LD DE,$6174 | DE = $6174 | ||||||
| 69FF | INC DE | advance DE by B, read a colour byte from the table row | ||||||
| 6A00 | DJNZ $69FF | |||||||
| 6A02 | LD A,(DE) | read and store the row colour for the fill below | ||||||
| 6A03 | LD ($6A1A),A | |||||||
| 6A06 | LD A,(IX+$03) | A = column count (IX+3) minus 1 | ||||||
| 6A09 | DEC A | |||||||
| 6A0A | LD ($6A1F),A | store it as the LDIR count below | ||||||
| 6A0D | NEG | negate and add $20: the row stride | ||||||
| 6A0F | ADD A,$20 | |||||||
| 6A11 | LD ($6A23),A | |||||||
| 6A14 | LD A,(IX+$02) | A = paint count (IX+2), B = 0 | ||||||
| 6A17 | LD B,$00 | |||||||
| 6A19 | LD (HL),$40 | !!MUT-ARG!! *loop: poke attribute pattern $40 into the current cell | ||||||
| 6A1B | LD E,L | DE = HL+1 | ||||||
| 6A1C | LD D,H | |||||||
| 6A1D | INC DE | |||||||
| 6A1E | LD C,$01 | !!MUT-ARG!! C = 1 | ||||||
| 6A20 | LDIR | copy the row's pattern via LDIR | ||||||
| 6A22 | LD C,$1F | !!MUT-ARG!! advance HL by the row stride ($1F), loop A times | ||||||
| 6A24 | ADD HL,BC | |||||||
| 6A25 | DEC A | |||||||
| 6A26 | JR NZ,$6A19 | |||||||
| 6A28 | LD BC,$0005 | advance IX to the next table entry (5 bytes), loop back | ||||||
| 6A2B | ADD IX,BC | |||||||
| 6A2D | JR $69EF | |||||||
| 6A2F | POP IX | restore IX, return | ||||||
| 6A31 | RET | |||||||
| 6A32 | LD HL,$5800 | Screen attribute area start address | ||||||
| 6A35 | LD DE,$5801 | |||||||
| 6A38 | LD (HL),$03 | fill an 8-byte striped block | ||||||
| 6A3A | LD BC,$0008 | |||||||
| 6A3D | LDIR | spread it via LDIR | ||||||
| 6A3F | LD A,($6175) | A = room colour, seed the next cell with it | ||||||
| 6A42 | LD (HL),A | |||||||
| 6A43 | LD BC,$0004 | BC = 4 | ||||||
| 6A46 | LDIR | spread it | ||||||
| 6A48 | LD (HL),$03 | fill a further $13-cell striped block | ||||||
| 6A4A | LD BC,$0013 | |||||||
| 6A4D | LDIR | spread it | ||||||
| 6A4F | LD HL,$5800 | copy that pattern across the whole screen attribute area | ||||||
| 6A52 | LD BC,$0100 | |||||||
| 6A55 | LDIR | |||||||
| 6A57 | LD HL,$5920 | |||||||
| 6A5A | LD DE,$5921 | |||||||
| 6A5D | LD (HL),A | fill the message-window block with room colour | ||||||
| 6A5E | LD BC,$000E | |||||||
| 6A61 | LDIR | spread it | ||||||
| 6A63 | LD (HL),$03 | fill the following block with the striped pattern | ||||||
| 6A65 | LD BC,$0011 | |||||||
| 6A68 | LDIR | spread it | ||||||
| 6A6A | LD HL,$5920 | copy the whole $40-byte pattern block forward | ||||||
| 6A6D | LD BC,$0040 | |||||||
| 6A70 | LDIR | spread it | ||||||
| 6A72 | LD L,E | HL = DE, advance DE past it | ||||||
| 6A73 | LD H,D | |||||||
| 6A74 | INC DE | |||||||
| 6A75 | LD (HL),A | |||||||
| 6A76 | LD BC,$017F | |||||||
| 6A79 | LDIR | |||||||
| 6A7B | JP $6A2F | |||||||
| 6A7E | LD HL,$5800 | room 2: HL/DE = the screen attribute area $5800 | ||||||
| 6A81 | LD DE,$5801 | |||||||
| 6A84 | LD BC,$02FF | BC = the whole area | ||||||
| 6A87 | LD A,($6175) | A = room colour, seed the first cell | ||||||
| 6A8A | LD (HL),A | |||||||
| 6A8B | LDIR | |||||||
| 6A8D | LD HL,$5800 | HL/DE = $5800 again | ||||||
| 6A90 | LD DE,$5801 | |||||||
| 6A93 | LD BC,$011F | fill $11F cells with the fixed pattern $45 | ||||||
| 6A96 | LD (HL),$45 | |||||||
| 6A98 | LDIR | spread it | ||||||
| 6A9A | LD HL,$5954 | HL = the second block $5954 | ||||||
| 6A9D | LD DE,$5955 | |||||||
| 6AA0 | LD BC,$000B | |||||||
| 6AA3 | LD (HL),$45 | |||||||
| 6AA5 | LDIR | |||||||
| 6AA7 | JP $6A2F | |||||||
|
|
||||
|
Increments the ROM frame counter $5C78, and unless sound is disabled ($61A0), drives the 128K AY sound chip via port $7FFD and the ROM's PLAY_SOUND routines ($F424/$F427) to advance the music. Calls 6AFB for the actual per-frame game update, then restores everything and re-enables interrupts.
|
||||
| 6AAA | PUSH IY | save all registers | ||
| 6AAC | PUSH IX | |||
| 6AAE | PUSH HL | |||
| 6AAF | PUSH DE | |||
| 6AB0 | PUSH BC | |||
| 6AB1 | PUSH AF | |||
| 6AB2 | LD HL,($5C78) | increment the frame counter $5C78 | ||
| 6AB5 | INC HL | |||
| 6AB6 | LD ($5C78),HL | |||
| 6AB9 | LD A,($61A0) | test the sound-enable flag $61A0, skip the music update if set | ||
| 6ABC | AND A | |||
| 6ABD | JR NZ,$6ADA | |||
| 6ABF | LD BC,$7FFD | select AY register 17 via port $7FFD | ||
| 6AC2 | LD A,$11 | |||
| 6AC4 | OUT (C),A | |||
| 6AC6 | LD HL,$61A2 | compare the current/previous melody-period byte at $61A2/$61A3, update it | ||
| 6AC9 | LD A,(HL) | |||
| 6ACA | INC HL | |||
| 6ACB | CP (HL) | |||
| 6ACC | LD (HL),A | |||
| 6ACD | CALL NZ,$F424 | if it changed, call the ROM sound routine $F424 | ||
| 6AD0 | CALL $F427 | call the ROM routine $F427 to advance the sound driver | ||
| 6AD3 | LD BC,$7FFD | restore the AY register select to $10 | ||
| 6AD6 | LD A,$10 | |||
| 6AD8 | OUT (C),A | |||
| 6ADA | CALL $6AFB | Self-modified per-frame hook, called by the ISR 6AAA | ||
| 6ADD | POP AF | restore all registers | ||
| 6ADE | POP BC | |||
| 6ADF | POP DE | |||
| 6AE0 | POP HL | |||
| 6AE1 | POP IX | |||
| 6AE3 | POP IY | |||
| 6AE5 | EI | enable interrupts, return | ||
| 6AE6 | RET | |||
|
Used by the routine at 6B71.
|
||||
|
Pops the return address off the stack and stores it to the self-modified jump target at $6AF9, clears the frame-ready flag byte at $6AFB, then re-enables interrupts and returns.
|
||||
| 6AE7 | POP HL | |||
| 6AE8 | LD ($6AF9),HL | |||
| 6AEB | XOR A | |||
| 6AEC | LD ($6AFB),A | |||
| 6AEF | EI | |||
| 6AF0 | RET | |||
|
|
||||
|
Loops forever: enables interrupts, calls 8445 to step the currently-playing sound effect, then repeats.
|
||||
| 6AF1 | EI | Enable interrupts | ||
| 6AF2 | CALL $8445 | Per-frame sound-effect player | ||
| 6AF5 | JP $6AF1 | => Idle loop | ||
|
Used by the routine at 6AFC.
|
||||
|
Trampoline: jumps to 6B05 to start a new game.
|
||||
| 6AF8 | JP $6B05 | !!MUT-ARG!! => New-game initialization | ||
|
Used by the routine at 6AAA.
|
||||
| 6AFB | RET | !!MUT-CMD!! Do nothing, until self-modified | ||
|
|
||||
| 6AFC | LD A,$C9 | A = $C9, the RET opcode | ||
| 6AFE | LD ($6AFB),A | Patch it into 6AFB, disabling further triggers | ||
| 6B01 | EI | Enable interrupts | ||
| 6B02 | JP $6AF8 | => Jump to new-game initialization | ||
|
Sets up the player object, global state, and 128K sound, draws the starting room, then enters the main loop.
|
||||
| 6B05 | CALL $61E3 | New-game initialization | ||
| 6B08 | LD HL,$8968 | |||
| 6B0B | LD ($8DB9),HL | set player behaviour-handler pointer | ||
| 6B0E | LD HL,$788A | |||
| 6B11 | LD ($6110),HL | |||
| 6B14 | LD A,$04 | |||
| 6B16 | LD ($8DC1),A | |||
| 6B19 | LD IX,$8DB6 | |||
| 6B1D | LD A,$34 | |||
| 6B1F | CALL $6254 | Set object position (IX+5/+6) from grid index A | ||
| 6B22 | LD (IX+$07),$28 | |||
| 6B26 | XOR A | |||
| 6B27 | LD ($619E),A | set Weapon-held flag | ||
| 6B2A | LD ($8DC5),A | |||
| 6B2D | LD ($8DC0),A | |||
| 6B30 | LD ($8DC3),A | |||
| 6B33 | LD ($8DCE),A | |||
| 6B36 | LD ($617A),A | |||
| 6B39 | LD ($6125),A | set Entry-point room number choosen selecting A/B/C/D in menu | ||
| 6B3C | LD ($6501),A | |||
| 6B3F | LD HL,$9489 | |||
| 6B42 | LD ($9493),HL | |||
| 6B45 | LD A,($61A0) | |||
| 6B48 | AND A | |||
| 6B49 | JR NZ,$6B5E | |||
| 6B4B | DI | |||
| 6B4C | LD BC,$7FFD | |||
| 6B4F | LD A,$11 | |||
| 6B51 | OUT (C),A | |||
| 6B53 | CALL $F42A | |||
| 6B56 | LD BC,$7FFD | |||
| 6B59 | LD A,$10 | |||
| 6B5B | OUT (C),A | |||
| 6B5D | EI | |||
| 6B5E | LD A,$7F | |||
| 6B60 | LD ($61A2),A | |||
| 6B63 | LD ($61A3),A | |||
| 6B66 | LD A,$02 | |||
| 6B68 | CALL $676D | Draw current room | ||
| 6B6B | CALL $9808 | Per-frame main loop entry | ||
| 6B6E | CALL $8596 | System/interrupt setup before the main menu | ||
|
|
||||
|
Frame-rate pacing, per-frame updates (redraw flush, oil timer, screen flip), game-over restart check, and pause/menu key handling.
|
||||
| 6B71 | LD HL,$0000 | Reset the frame counter $5C78 to 0 | ||
| 6B74 | LD ($5C78),HL | |||
| 6B77 | LD A,($5C78) | Save a copy to $6179 as the pacing baseline | ||
| 6B7A | LD ($6179),A | |||
| 6B7D | CALL $6AE7 | ISR continuation setup | ||
| 6B80 | LD A,($5C78) | Compare the live frame counter against the saved baseline, test if at least 3 frames have passed | ||
| 6B83 | LD HL,$6179 | |||
| 6B86 | SUB (HL) | |||
| 6B87 | CP $03 | |||
| 6B89 | JR C,$6B7D | If not yet, loop back and wait | ||
| 6B8B | LD A,($5C78) | Save the new frame count as the baseline for next time | ||
| 6B8E | LD (HL),A | |||
| 6B8F | CALL $6503 | Per-frame rust/oil tick | ||
| 6B92 | CALL $9C35 | End-of-frame screen flip | ||
| 6B95 | LD A,($6126) | A = the room number, compare against room 2, the menu | ||
| 6B98 | CP $02 | |||
| 6B9A | JR Z,$6BA5 | |||
| 6B9C | LD A,($61A1) | Otherwise test flag $61A1, skip resetting $61A2 if set | ||
| 6B9F | AND A | |||
| 6BA0 | JR NZ,$6BA5 | |||
| 6BA2 | LD ($61A2),A | Clear $61A2 | ||
| 6BA5 | CALL $835E | Flush the queued redraw requests at $9D3C | ||
| 6BA8 | CALL $9808 | Per-frame main loop entry | ||
| 6BAB | LD A,($617A) | A = the game-over flag $617A, compare against $FF | ||
| 6BAE | CP $FF | |||
| 6BB0 | JP Z,$6B05 | => New-game initialization | ||
| 6BB3 | LD BC,$7FFE | Read the CAPS-SHIFT/Z/X/C/V row ($7FFE), loop back to the top if Z, pause, is pressed | ||
| 6BB6 | IN A,(C) | |||
| 6BB8 | BIT 1,A | |||
| 6BBA | JR NZ,$6B7D | |||
| 6BBC | LD BC,$F7FE | Read the SPACE/SYM row ($F7FE), test bit 0, SPACE | ||
| 6BBF | IN A,(C) | |||
| 6BC1 | BIT 0,A | |||
| 6BC3 | JP Z,$6B05 | => New-game initialization | ||
| 6BC6 | LD BC,$EFFE | Read another row ($EFFE) | ||
| 6BC9 | IN A,(C) | |||
| 6BCB | RRCA | test bit 0 via RRCA | ||
| 6BCC | JR C,$6C03 | BREAK pressed: handle it below | ||
| 6BCE | DI | Disable interrupts | ||
| 6BCF | IN A,(C) | Wait for the key to release | ||
| 6BD1 | RRCA | |||
| 6BD2 | JR NC,$6BCF | |||
| 6BD4 | LD A,($61A0) | A = flag $61A0, skip forcing the border colour below if set | ||
| 6BD7 | AND A | |||
| 6BD8 | JR NZ,$6BF5 | |||
| 6BDA | LD HL,$61A2 | HL = $61A2, test its value, skip forcing white if nonzero | ||
| 6BDD | LD A,(HL) | |||
| 6BDE | AND A | |||
| 6BDF | JR NZ,$6BE4 | |||
| 6BE1 | INC HL | Force $61A3 = $7F, white border | ||
| 6BE2 | LD (HL),$7F | |||
| 6BE4 | LD BC,$7FFD | Select AY register $11 via port $7FFD | ||
| 6BE7 | LD A,$11 | |||
| 6BE9 | OUT (C),A | |||
| 6BEB | CALL $F42A | Call a 128K sound ROM helper | ||
| 6BEE | LD BC,$7FFD | Restore AY register select to $10 via port $7FFD | ||
| 6BF1 | LD A,$10 | |||
| 6BF3 | OUT (C),A | |||
| 6BF5 | LD BC,$EFFE | Read the row again, test bit 0 | ||
| 6BF8 | IN A,(C) | |||
| 6BFA | RRCA | |||
| 6BFB | JR C,$6BF5 | Loop while still pressed, debounce | ||
| 6BFD | IN A,(C) | Read once more, loop until released, second debounce | ||
| 6BFF | RRCA | |||
| 6C00 | JR NC,$6BFD | |||
| 6C02 | EI | Re-enable interrupts | ||
| 6C03 | JP $6B7D | |||
|
|
||||
| 6C06 | DEFB $82,$83,$84,$85,$86,$87,$88,$89 | |||
| 6C0E | DEFB $8A,$8B,$8C,$0B,$0C,$0D,$0E,$91 | |||
| 6C16 | DEFB $92,$93,$94,$95,$96,$97,$98,$99 | |||
| 6C1E | DEFB $9A,$9B,$9C,$9D,$9E,$9F,$A0,$A1 | |||
| 6C26 | DEFB $A2,$A3,$A4,$A5,$A6,$A7,$A8,$A9 | |||
| 6C2E | DEFB $AA,$AB,$AC,$AD,$AE,$AF,$B0,$B1 | |||
| 6C36 | DEFB $B2,$B3,$33,$34,$35,$36,$37,$38 | |||
| 6C3E | DEFB $39,$3A,$3B,$3C,$3D,$3E,$3F,$40 | |||
| 6C46 | DEFB $41,$42,$43,$44,$45,$46,$47,$48 | |||
| 6C4E | DEFB $49,$4A,$4B,$00,$4C,$4D,$4F,$50 | |||
| 6C56 | DEFB $51,$52,$53,$54,$55,$56,$57,$58 | |||
| 6C5E | DEFB $59,$00,$B1,$B2,$B3,$B4,$5E,$5F | |||
| 6C66 | DEFB $60,$61,$62,$63,$64,$65,$66,$67 | |||
| 6C6E | DEFB $68,$69,$6B,$00,$55,$C2,$6F,$70 | |||
| 6C76 | DEFB $71,$72,$73,$74,$75,$76,$77,$78 | |||
| 6C7E | DEFB $79,$7A,$7B,$00,$7C,$7D,$7E,$7F | |||
| 6C86 | DEFB $00,$00,$00,$00,$00,$00,$00,$A5 | |||
| 6C8E | DEFB $00,$00,$00,$A9,$00,$00,$00,$00 | |||
| 6C96 | DEFB $00,$00,$00,$00,$B2,$95,$96,$97 | |||
| 6C9E | DEFB $98,$99,$9A,$9B,$9C,$9D,$9E,$9F | |||
| 6CA6 | DEFB $A0,$A1,$A2,$A3,$A4,$A5,$A6,$A7 | |||
| 6CAE | DEFB $A8,$A9,$AA,$AB,$AC,$AD,$AE,$AF | |||
| 6CB6 | DEFB $B0,$B1,$B2,$B3,$B4,$B9,$B9,$B9 | |||
| 6CBE | DEFB $B9,$B9,$BA,$BB,$BC,$BD,$BE,$BF | |||
| 6CC6 | DEFB $C0,$C1,$C2,$C3,$C4,$C5,$C6,$C7 | |||
| 6CCE | DEFB $C8 | |||
|
|
||||
|
The world is a 6x6x6 cube of room slots (6 levels, each a 6x6 grid), per an external game map. The highest room number in this table is $D7=215=6*6*6-1, and the table has 216 records total ($00-$D7) -- one per cube slot, including ~15 unused/vacant ones (no room actually there). Horizontal (same-level) neighbours connect via doors (612B); vertical neighbours connect via whirlpools (down, 8A87) and bubbles (up, also 8A87).
The room number decodes to its cube position via n=room_number-1, then level=n/36, row=(n%36)/6, col=n%6 (0-based). Cross-checked against the 4 menu entry points (A/B/C/D) and an external game map (see x-docs/Room-Format.md).
byte 0: record length (offset to the next room's description);
byte 1: door/exit bitfield, stored to $612B (bit0=North, bit1=East, bit2=South, bit3=West -- see 6329/67F1);
byte 2 bits 4-7: room type index (0-15), stored to $612A -- selects the grid template from the 72B1 pointer table AND the room's creature/inhabitant (via the same value used again below);
byte 3 bit 6: wall/decoration layout selector, stored to $6129 (selects one of 2 fixed layouts drawn by 642F);
byte 3 bits 0-5: a 6-bit index (byte3 AND $3F) into the 73B5 room/creature title table -- selects the message-window title text (DEATHBOWL/PIRANHA/SEAHORSE/etc), printed by 65FD. NOT door/exit flags -- exits are encoded in byte1 (see 6329).
bytes 4+ (if record length > 4): extra (index,value) pairs specific to this room, laid out and consumed identically to a room-type template (see 72D1) -- appended on top of the shared room-type template when the room grid is built. The loop counter B starts at (length-4), but a special-value pair (value in $66/$67/$68/$69/$6A/$6B) makes its spawn routine (e.g. 8EA7) decrement B as a side effect, ending the loop early. Example: room $52 (6ECF) has 3 trailing bytes $37/$6A/$20 -- its single special pair ($37,$6A) consumes 2, and the double-decrement ends the loop before the last byte ($20) is read. Odd leftover-byte counts are therefore normal whenever a special-value entry is present.
The "Room $XX" labels below match the in-game room number as read from $6126 (i.e. 1-based: the first record is room $01).
Level 1 of 6 (room numbers $01-$24, cube rows/cols 0-5 -- see x-docs/Room-Format.md) -- entry point 'C' lands in this level (room $1A)
|
||||
| 6CCF | DEFB $07,$00,$E6,$00 | Room $01 description, type $E -- the special ENDING/WINNING room | ||
| 6CD3 | DEFB $34,$6A,$28 | |||
| 6CD6 | DEFB $06,$00,$E3,$00 | Room $02 description, type $E -- the special MENU room | ||
| 6CDA | DEFB $37,$69 | |||
| 6CDC | DEFB $04,$04,$05,$00 | Room $03 description, type $0 | ||
| 6CE0 | DEFB $04,$02,$51,$47 | Room $04 description, type $5 | ||
| 6CE4 | DEFB $0A,$0E,$05,$07 | Room $05 description, type $0 | ||
| 6CE8 | DEFB $1D,$0D,$1D,$66,$14,$40 | |||
| 6CEE | DEFB $08,$0C,$12,$47 | Room $06 description, type $1 | ||
| 6CF2 | DEFB $1B,$03,$1F,$0D | |||
| 6CF6 | DEFB $08,$06,$46,$00 | Room $07 description, type $4 | ||
| 6CFA | DEFB $14,$66,$28,$40 | |||
| 6CFE | DEFB $06,$0A,$64,$00 | Room $08 description, type $6 | ||
| 6D02 | DEFB $2D,$03 | |||
| 6D04 | DEFB $04,$0A,$33,$44 | Room $09 description, type $3 | ||
| 6D08 | DEFB $04,$0A,$77,$40 | Room $0A description, type $7 | ||
| 6D0C | DEFB $04,$0D,$11,$07 | Room $0B description, type $1 | ||
| 6D10 | DEFB $06,$05,$05,$47 | Room $0C description, type $0 | ||
| 6D14 | DEFB $23,$0D | |||
| 6D16 | DEFB $04,$03,$12,$09 | Room $0D description, type $1 | ||
| 6D1A | DEFB $04,$0C,$06,$49 | Room $0E description, type $0 | ||
| 6D1E | DEFB $0E,$02,$04,$40 | Room $0F description, type $0 | ||
| 6D22 | DEFB $21,$11,$2E,$66,$2D,$60,$22,$68 | |||
| 6D2A | DEFB $02,$53 | |||
| 6D2C | DEFB $04,$0E,$03,$42 | Room $10 description, type $0 | ||
| 6D30 | DEFB $0A,$09,$57,$00 | Room $11 description, type $5 | ||
| 6D34 | DEFB $2D,$69,$0A,$68,$00,$14 | |||
| 6D3A | DEFB $0A,$05,$41,$00 | Room $12 description, type $4 | ||
| 6D3E | DEFB $14,$66,$28,$40,$2E,$69 | |||
| 6D44 | DEFB $0C,$06,$75,$40 | Room $13 description, type $7 | ||
| 6D48 | DEFB $2C,$66,$32,$68,$21,$11,$27,$09 | |||
| 6D50 | DEFB $06,$0F,$12,$49 | Room $14 description, type $1 | ||
| 6D54 | DEFB $1C,$69 | |||
| 6D56 | DEFB $04,$0C,$36,$06 | Room $15 description, type $3 | ||
| 6D5A | DEFB $06,$05,$24,$45 | Room $16 description, type $2 | ||
| 6D5E | DEFB $2C,$0D | |||
| 6D60 | DEFB $08,$06,$03,$00 | Room $17 description, type $0 | ||
| 6D64 | DEFB $13,$66,$19,$2C | |||
| 6D68 | DEFB $04,$09,$77,$40 | Room $18 description, type $7 | ||
| 6D6C | DEFB $04,$14,$01,$02 | Room $19 description, type $0 | ||
| 6D70 | DEFB $04,$05,$05,$49 | Room $1A description, type $0 | ||
| 6D74 | DEFB $04,$03,$22,$45 | Room $1B description, type $2 | ||
| 6D78 | DEFB $06,$09,$36,$04 | Room $1C description, type $3 | ||
| 6D7C | DEFB $1B,$69 | |||
| 6D7E | DEFB $06,$07,$04,$49 | Room $1D description, type $0 | ||
| 6D82 | DEFB $2C,$0D | |||
| 6D84 | DEFB $06,$0C,$13,$09 | Room $1E description, type $1 | ||
| 6D88 | DEFB $1B,$03 | |||
| 6D8A | DEFB $0A,$03,$27,$45 | Room $1F description, type $2 | ||
| 6D8E | DEFB $1E,$02,$22,$68,$00,$2E | |||
| 6D94 | DEFB $06,$0B,$61,$00 | Room $20 description, type $6 | ||
| 6D98 | DEFB $15,$0D | |||
| 6D9A | DEFB $04,$08,$25,$45 | Room $21 description, type $2 | ||
| 6D9E | DEFB $0A,$02,$12,$06 | Room $22 description, type $1 | ||
| 6DA2 | DEFB $2C,$03,$24,$66,$35,$60 | |||
| 6DA8 | DEFB $08,$0B,$16,$09 | Room $23 description, type $1 | ||
| 6DAC | DEFB $12,$09,$1A,$09 | |||
| 6DB0 | DEFB $04,$09,$54,$49 | Room $24 description, type $5 | ||
|
Level 2 of 6 (room numbers $25-$48)
|
||||
| 6DB4 | DEFB $04,$0C,$05,$00 | Room $25 description, type $0 | ||
| 6DB8 | DEFB $04,$08,$05,$40 | Room $26 description, type $0 | ||
| 6DBC | DEFB $04,$05,$06,$00 | Room $27 description, type $0 | ||
| 6DC0 | DEFB $04,$06,$77,$40 | Room $28 description, type $7 | ||
| 6DC4 | DEFB $0A,$0A,$03,$40 | Room $29 description, type $0 | ||
| 6DC8 | DEFB $1D,$02,$1D,$68,$02,$10 | |||
| 6DCE | DEFB $08,$08,$11,$06 | Room $2A description, type $1 | ||
| 6DD2 | DEFB $1B,$12,$0A,$12 | |||
| 6DD6 | DEFB $09,$06,$65,$49 | Room $2B description, type $6 | ||
| 6DDA | DEFB $33,$0D,$2A,$6A,$28 | |||
| 6DDF | DEFB $04,$0A,$82,$09 | Room $2C description, type $8 | ||
| 6DE3 | DEFB $06,$0C,$36,$44 | Room $2D description, type $3 | ||
| 6DE7 | DEFB $1A,$69 | |||
| 6DE9 | DEFB $04,$07,$24,$45 | Room $2E description, type $2 | ||
| 6DED | DEFB $04,$0A,$53,$09 | Room $2F description, type $5 | ||
| 6DF1 | DEFB $06,$0C,$07,$49 | Room $30 description, type $0 | ||
| 6DF5 | DEFB $2C,$69 | |||
| 6DF7 | DEFB $04,$05,$71,$40 | Room $31 description, type $7 | ||
| 6DFB | DEFB $10,$04,$F5,$08 | Room $32 description, type $F -- one of 4 PLUG ROOMs (see 73B3), cube position level 2, row 2, col 1 | ||
| 6DFF | DEFB $13,$0F,$17,$0E,$33,$0E,$37,$0F | 4 decor cubes at grid corners (2,2)/(2,6)/(6,2)/(6,6), values $0F/$0E/$0E/$0F; then Plug+Whirlpool co-located at grid cell $25 -- see 8F4C/8F1E | ||
| 6E07 | DEFB $25,$6B,$25,$69 | |||
| 6E0B | DEFB $0A,$07,$12,$46 | Room $33 description, type $1 | ||
| 6E0F | DEFB $1B,$03,$24,$68,$00,$61 | |||
| 6E15 | DEFB $06,$0D,$06,$00 | Room $34 description, type $0 | ||
| 6E19 | DEFB $0F,$0D | |||
| 6E1B | DEFB $0A,$04,$34,$40 | Room $35 description, type $3 | ||
| 6E1F | DEFB $21,$11,$1D,$66,$28,$48 | |||
| 6E25 | DEFB $06,$01,$03,$49 | Room $36 description, type $0 | ||
| 6E29 | DEFB $36,$69 | |||
| 6E2B | DEFB $04,$07,$27,$05 | Room $37 description, type $2 | ||
| 6E2F | DEFB $06,$18,$01,$07 | Room $38 description, type $0 | ||
| 6E33 | DEFB $0A,$09 | |||
| 6E35 | DEFB $04,$14,$25,$05 | Room $39 description, type $2 | ||
| 6E39 | DEFB $04,$05,$32,$44 | Room $3A description, type $3 | ||
| 6E3D | DEFB $04,$03,$16,$06 | Room $3B description, type $1 | ||
| 6E41 | DEFB $04,$0C,$34,$44 | Room $3C description, type $3 | ||
| 6E45 | DEFB $04,$07,$73,$40 | Room $3D description, type $7 | ||
| 6E49 | DEFB $0A,$0E,$57,$03 | Room $3E description, type $5 | ||
| 6E4D | DEFB $37,$0D,$0A,$68,$00,$23 | |||
| 6E53 | DEFB $04,$09,$31,$43 | Room $3F description, type $3 | ||
| 6E57 | DEFB $04,$05,$05,$00 | Room $40 description, type $0 | ||
| 6E5B | DEFB $0A,$04,$12,$46 | Room $41 description, type $1 | ||
| 6E5F | DEFB $2F,$12,$36,$12,$1E,$12 | |||
| 6E65 | DEFB $06,$05,$06,$00 | Room $42 description, type $0 | ||
| 6E69 | DEFB $14,$0D | |||
| 6E6B | DEFB $08,$03,$04,$40 | Room $43 description, type $0 | ||
| 6E6F | DEFB $0C,$69,$34,$0D | |||
| 6E73 | DEFB $04,$0B,$83,$03 | Room $44 description, type $8 | ||
| 6E77 | DEFB $08,$0A,$77,$40 | Room $45 description, type $7 | ||
| 6E7B | DEFB $1A,$68,$00,$11 | |||
| 6E7F | DEFB $04,$0B,$31,$04 | Room $46 description, type $3 | ||
| 6E83 | DEFB $06,$0B,$55,$00 | Room $47 description, type $5 | ||
| 6E87 | DEFB $05,$02 | |||
| 6E89 | DEFB $12,$09,$42,$00 | Room $48 description, type $4 | ||
| 6E8D | DEFB $1D,$00,$16,$00,$16,$68,$00,$44 | |||
| 6E95 | DEFB $1D,$69,$2E,$68,$00,$48 | |||
|
Level 3 of 6 (room numbers $49-$6C) -- entry point 'A' lands in this level (room $52)
|
||||
| 6E9B | DEFB $06,$04,$37,$06 | Room $49 description, type $3 | ||
| 6E9F | DEFB $34,$69 | |||
| 6EA1 | DEFB $0E,$06,$63,$00 | Room $4A description, type $6 | ||
| 6EA5 | DEFB $21,$11,$2E,$66,$30,$68,$2E,$68 | |||
| 6EAD | DEFB $00,$5D | |||
| 6EAF | DEFB $04,$84,$04,$02 | Room $4B description, type $0 | ||
| 6EB3 | DEFB $08,$06,$16,$46 | Room $4C description, type $1 | ||
| 6EB7 | DEFB $1B,$03,$2F,$03 | |||
| 6EBB | DEFB $04,$0A,$33,$04 | Room $4D description, type $3 | ||
| 6EBF | DEFB $04,$0C,$05,$43 | Room $4E description, type $0 | ||
| 6EC3 | DEFB $04,$07,$06,$43 | Room $4F description, type $0 | ||
| 6EC7 | DEFB $04,$0D,$24,$45 | Room $50 description, type $2 | ||
| 6ECB | DEFB $04,$07,$11,$46 | Room $51 description, type $1 | ||
| 6ECF | DEFB $07,$0B,$02,$00 | Room $52 description, type $0 | ||
| 6ED3 | DEFB $37,$6A,$20 | |||
| 6ED6 | DEFB $04,$0C,$61,$00 | Room $53 description, type $6 | ||
| 6EDA | DEFB $0A,$01,$52,$40 | Room $54 description, type $5 | ||
| 6EDE | DEFB $21,$11,$2D,$66,$2D,$68 | |||
| 6EE4 | DEFB $04,$05,$15,$06 | Room $55 description, type $1 | ||
| 6EE8 | DEFB $04,$01,$52,$00 | Room $56 description, type $5 | ||
| 6EEC | DEFB $04,$03,$24,$05 | Room $57 description, type $2 | ||
| 6EF0 | DEFB $04,$0C,$35,$04 | Room $58 description, type $3 | ||
| 6EF4 | DEFB $08,$07,$41,$40 | Room $59 description, type $4 | ||
| 6EF8 | DEFB $2E,$66,$28,$58 | |||
| 6EFC | DEFB $08,$0C,$05,$40 | Room $5A description, type $0 | ||
| 6F00 | DEFB $25,$68,$00,$5D | |||
| 6F04 | DEFB $0C,$03,$44,$00 | Room $5B description, type $4 | ||
| 6F08 | DEFB $13,$02,$13,$68,$02,$1C,$2A,$03 | |||
| 6F10 | DEFB $04,$0A,$65,$00 | Room $5C description, type $6 | ||
| 6F14 | DEFB $08,$0E,$12,$03 | Room $5D description, type $1 | ||
| 6F18 | DEFB $0D,$68,$02,$2F | |||
| 6F1C | DEFB $08,$09,$07,$43 | Room $5E description, type $0 | ||
| 6F20 | DEFB $2D,$68,$02,$4B | |||
| 6F24 | DEFB $08,$05,$04,$00 | Room $5F description, type $0 | ||
| 6F28 | DEFB $37,$66,$28,$58 | |||
| 6F2C | DEFB $0D,$05,$56,$00 | Room $60 description, type $5 | ||
| 6F30 | DEFB $1A,$6A,$28,$33,$69,$3A,$09,$3D | |||
| 6F38 | DEFB $09 | |||
| 6F39 | DEFB $04,$07,$04,$00 | Room $61 description, type $0 | ||
| 6F3D | DEFB $0A,$06,$04,$03 | Room $62 description, type $0 | ||
| 6F41 | DEFB $2D,$68,$02,$5D,$37,$0D | |||
| 6F47 | DEFB $04,$0F,$43,$03 | Room $63 description, type $4 | ||
| 6F4B | DEFB $04,$0A,$21,$05 | Room $64 description, type $2 | ||
| 6F4F | DEFB $10,$09,$F3,$08 | Room $65 description, type $F -- one of 4 PLUG ROOMs (see 73B3), cube position level 3, row 4, col 4 | ||
| 6F53 | DEFB $13,$0B,$17,$0C,$33,$0A,$37,$0B | 4 decor cubes at grid corners (2,2)/(2,6)/(6,2)/(6,6), values $0B/$0C/$0A/$0B; then Plug+Whirlpool co-located at grid cell $25 -- see 8F4C/8F1E | ||
| 6F5B | DEFB $25,$6B,$25,$69 | |||
| 6F5F | DEFB $06,$05,$45,$00 | Room $66 description, type $4 | ||
| 6F63 | DEFB $12,$69 | |||
| 6F65 | DEFB $04,$02,$82,$00 | Room $67 description, type $8 | ||
| 6F69 | DEFB $04,$0B,$14,$03 | Room $68 description, type $1 | ||
| 6F6D | DEFB $04,$0B,$07,$43 | Room $69 description, type $0 | ||
| 6F71 | DEFB $08,$0A,$13,$03 | Room $6A description, type $1 | ||
| 6F75 | DEFB $33,$68,$00,$40 | |||
| 6F79 | DEFB $06,$0A,$32,$04 | Room $6B description, type $3 | ||
| 6F7D | DEFB $0A,$0D | |||
| 6F7F | DEFB $04,$18,$05,$40 | Room $6C description, type $0 | ||
|
Level 4 of 6 (room numbers $6D-$90) -- entry point 'D' lands in this level (room $84)
|
||||
| 6F83 | DEFB $04,$02,$85,$01 | Room $6D description, type $8 | ||
| 6F87 | DEFB $04,$0E,$12,$09 | Room $6E description, type $1 | ||
| 6F8B | DEFB $0D,$08,$36,$46 | Room $6F description, type $3 | ||
| 6F8F | DEFB $1B,$6A,$2D,$16,$02,$16,$68,$02 | |||
| 6F97 | DEFB $38 | |||
| 6F98 | DEFB $04,$06,$24,$45 | Room $70 description, type $2 | ||
| 6F9C | DEFB $04,$0A,$73,$40 | Room $71 description, type $7 | ||
| 6FA0 | DEFB $06,$0C,$27,$05 | Room $72 description, type $2 | ||
| 6FA4 | DEFB $24,$07 | |||
| 6FA6 | DEFB $04,$02,$06,$00 | Room $73 description, type $0 | ||
| 6FAA | DEFB $06,$03,$65,$40 | Room $74 description, type $6 | ||
| 6FAE | DEFB $0C,$69 | |||
| 6FB0 | DEFB $04,$0E,$02,$02 | Room $75 description, type $0 | ||
| 6FB4 | DEFB $0E,$09,$46,$02 | Room $76 description, type $4 | ||
| 6FB8 | DEFB $2E,$69,$0C,$66,$3C,$60,$37,$02 | |||
| 6FC0 | DEFB $16,$00 | |||
| 6FC2 | DEFB $07,$02,$54,$40 | Room $77 description, type $5 | ||
| 6FC6 | DEFB $23,$6A,$32 | |||
| 6FC9 | DEFB $04,$0D,$63,$00 | Room $78 description, type $6 | ||
| 6FCD | DEFB $04,$02,$07,$40 | Room $79 description, type $0 | ||
| 6FD1 | DEFB $04,$02,$01,$40 | Room $7A description, type $0 | ||
| 6FD5 | DEFB $04,$05,$55,$42 | Room $7B description, type $5 | ||
| 6FD9 | DEFB $14,$02,$02,$00 | Room $7C description, type $0 | ||
| 6FDD | DEFB $0B,$09,$12,$09,$14,$09,$1B,$09 | |||
| 6FE5 | DEFB $13,$66,$37,$50,$36,$66,$2B,$60 | |||
| 6FED | DEFB $08,$0C,$86,$00 | Room $7D description, type $8 | ||
| 6FF1 | DEFB $0E,$68,$02,$41 | |||
| 6FF5 | DEFB $04,$05,$34,$04 | Room $7E description, type $3 | ||
| 6FF9 | DEFB $16,$06,$73,$40 | Room $7F description, type $7 | ||
| 6FFD | DEFB $27,$68,$00,$11,$2E,$68,$00,$24 | |||
| 7005 | DEFB $2F,$68,$00,$3B,$38,$0D,$0D,$0D | |||
| 700D | DEFB $22,$0D | |||
| 700F | DEFB $07,$0E,$37,$44 | Room $80 description, type $3 | ||
| 7013 | DEFB $2E,$6A,$40 | |||
| 7016 | DEFB $04,$0B,$81,$00 | Room $81 description, type $8 | ||
| 701A | DEFB $06,$0C,$45,$00 | Room $82 description, type $4 | ||
| 701E | DEFB $1D,$00 | |||
| 7020 | DEFB $04,$16,$02,$47 | Room $83 description, type $0 | ||
| 7024 | DEFB $04,$0D,$76,$40 | Room $84 description, type $7 | ||
| 7028 | DEFB $04,$05,$14,$43 | Room $85 description, type $1 | ||
| 702C | DEFB $04,$07,$03,$01 | Room $86 description, type $0 | ||
| 7030 | DEFB $04,$86,$67,$09 | Room $87 description, type $6 | ||
| 7034 | DEFB $06,$0F,$31,$49 | Room $88 description, type $3 | ||
| 7038 | DEFB $2D,$69 | |||
| 703A | DEFB $04,$0F,$65,$00 | Room $89 description, type $6 | ||
| 703E | DEFB $04,$0D,$32,$04 | Room $8A description, type $3 | ||
| 7042 | DEFB $06,$03,$46,$03 | Room $8B description, type $4 | ||
| 7046 | DEFB $1A,$0D | |||
| 7048 | DEFB $04,$09,$84,$03 | Room $8C description, type $8 | ||
| 704C | DEFB $08,$03,$13,$49 | Room $8D description, type $1 | ||
| 7050 | DEFB $1B,$03,$2F,$03 | |||
| 7054 | DEFB $08,$09,$07,$09 | Room $8E description, type $0 | ||
| 7058 | DEFB $14,$68,$00,$50 | |||
| 705C | DEFB $09,$01,$01,$02 | Room $8F description, type $0 | ||
| 7060 | DEFB $21,$11,$1E,$6A,$32 | |||
| 7065 | DEFB $06,$01,$25,$45 | Room $90 description, type $2 | ||
| 7069 | DEFB $25,$69 | |||
|
Level 5 of 6 (room numbers $91-$B4)
|
||||
| 706B | DEFB $0E,$02,$83,$05 | Room $91 description, type $8 | ||
| 706F | DEFB $1A,$02,$1A,$68,$00,$28,$1D,$68 | |||
| 7077 | DEFB $00,$21 | |||
| 7079 | DEFB $06,$84,$05,$47 | Room $92 description, type $0 | ||
| 707D | DEFB $23,$09 | |||
| 707F | DEFB $0C,$06,$14,$01 | Room $93 description, type $1 | ||
| 7083 | DEFB $21,$11,$14,$66,$39,$5E,$1F,$03 | |||
| 708B | DEFB $04,$0E,$06,$43 | Room $94 description, type $0 | ||
| 708F | DEFB $06,$0A,$17,$03 | Room $95 description, type $1 | ||
| 7093 | DEFB $12,$03 | |||
| 7095 | DEFB $04,$0C,$31,$43 | Room $96 description, type $3 | ||
| 7099 | DEFB $04,$0D,$02,$00 | Room $97 description, type $0 | ||
| 709D | DEFB $04,$07,$73,$40 | Room $98 description, type $7 | ||
| 70A1 | DEFB $0C,$0D,$84,$05 | Room $99 description, type $8 | ||
| 70A5 | DEFB $0C,$68,$00,$1A,$2C,$68,$00,$27 | |||
| 70AD | DEFB $0B,$03,$55,$03 | Room $9A description, type $5 | ||
| 70B1 | DEFB $0A,$03,$21,$11,$25,$6A,$38 | |||
| 70B8 | DEFB $10,$0A,$F3,$08 | Room $9B description, type $F -- one of 4 PLUG ROOMs (see 73B3), cube position level 5, row 1, col 4 | ||
| 70BC | DEFB $13,$10,$17,$10,$33,$10,$37,$10 | 4 decor cubes at grid corners (2,2)/(2,6)/(6,2)/(6,6), all value $10; then Plug+Whirlpool co-located at grid cell $25 -- see 8F4C/8F1E | ||
| 70C4 | DEFB $25,$6B,$25,$69 | |||
| 70C8 | DEFB $06,$0D,$66,$00 | Room $9C description, type $6 | ||
| 70CC | DEFB $13,$67 | |||
| 70CE | DEFB $0A,$06,$17,$41 | Room $9D description, type $1 | ||
| 70D2 | DEFB $21,$11,$23,$66,$35,$58 | |||
| 70D8 | DEFB $08,$0B,$21,$45 | Room $9E description, type $2 | ||
| 70DC | DEFB $2F,$68,$00,$30 | |||
| 70E0 | DEFB $0B,$0F,$42,$09 | Room $9F description, type $4 | ||
| 70E4 | DEFB $0C,$66,$35,$68,$1A,$6A,$30 | |||
| 70EB | DEFB $0E,$0C,$73,$09 | Room $A0 description, type $7 | ||
| 70EF | DEFB $0A,$68,$00,$10,$0B,$09,$13,$68 | |||
| 70F7 | DEFB $00,$4F | |||
| 70F9 | DEFB $0A,$04,$04,$01 | Room $A1 description, type $0 | ||
| 70FD | DEFB $12,$0D,$13,$0D,$0D,$0D | |||
| 7103 | DEFB $0A,$05,$15,$06 | Room $A2 description, type $1 | ||
| 7107 | DEFB $0B,$12,$12,$12,$27,$12 | |||
| 710D | DEFB $06,$03,$56,$40 | Room $A3 description, type $5 | ||
| 7111 | DEFB $1E,$67 | |||
| 7113 | DEFB $18,$0A,$47,$40 | Room $A4 description, type $4 | ||
| 7117 | DEFB $16,$00,$2B,$00,$16,$68,$00,$0A | |||
| 711F | DEFB $0D,$68,$00,$2B,$2B,$68,$00,$11 | |||
| 7127 | DEFB $34,$68,$00,$2B | |||
| 712B | DEFB $06,$0D,$11,$49 | Room $A5 description, type $1 | ||
| 712F | DEFB $1C,$69 | |||
| 7131 | DEFB $0A,$07,$32,$04 | Room $A6 description, type $3 | ||
| 7135 | DEFB $12,$68,$00,$39,$26,$69 | |||
| 713B | DEFB $04,$1E,$63,$00 | Room $A7 description, type $6 | ||
| 713F | DEFB $08,$85,$82,$09 | Room $A8 description, type $8 | ||
| 7143 | DEFB $2E,$68,$00,$1B | |||
| 7147 | DEFB $04,$06,$53,$02 | Room $A9 description, type $5 | ||
| 714B | DEFB $04,$0E,$04,$47 | Room $AA description, type $0 | ||
| 714F | DEFB $04,$0F,$15,$07 | Room $AB description, type $1 | ||
| 7153 | DEFB $04,$0A,$87,$07 | Room $AC description, type $8 | ||
| 7157 | DEFB $12,$0D,$41,$45 | Room $AD description, type $4 | ||
| 715B | DEFB $1D,$00,$1D,$68,$00,$13,$14,$68 | |||
| 7163 | DEFB $00,$0E,$26,$68,$00,$19 | |||
| 7169 | DEFB $07,$05,$32,$09 | Room $AE description, type $3 | ||
| 716D | DEFB $12,$6A,$3C | |||
| 7170 | DEFB $04,$03,$03,$47 | Room $AF description, type $0 | ||
| 7174 | DEFB $04,$0B,$24,$07 | Room $B0 description, type $2 | ||
| 7178 | DEFB $04,$09,$25,$05 | Room $B1 description, type $2 | ||
| 717C | DEFB $04,$08,$06,$00 | Room $B2 description, type $0 | ||
| 7180 | DEFB $06,$03,$37,$44 | Room $B3 description, type $3 | ||
| 7184 | DEFB $2C,$69 | |||
| 7186 | DEFB $06,$09,$15,$46 | Room $B4 description, type $1 | ||
| 718A | DEFB $28,$09 | |||
|
Level 6 of 6 (room numbers $B5-$D8) -- entry point 'B' lands in this level (room $C0)
|
||||
| 718C | DEFB $10,$06,$12,$45 | Room $B5 description, type $1 | ||
| 7190 | DEFB $1F,$12,$27,$12,$1A,$12,$15,$12 | |||
| 7198 | DEFB $19,$04,$1E,$04 | |||
| 719C | DEFB $0C,$0C,$43,$09 | Room $B6 description, type $4 | ||
| 71A0 | DEFB $0F,$00,$16,$00,$16,$68,$00,$65 | |||
| 71A8 | DEFB $0A,$02,$04,$47 | Room $B7 description, type $0 | ||
| 71AC | DEFB $36,$66,$2D,$68,$21,$11 | |||
| 71B2 | DEFB $07,$0E,$85,$07 | Room $B8 description, type $8 | ||
| 71B6 | DEFB $2E,$6A,$3C | |||
| 71B9 | DEFB $04,$0E,$16,$07 | Room $B9 description, type $1 | ||
| 71BD | DEFB $04,$08,$87,$02 | Room $BA description, type $8 | ||
| 71C1 | DEFB $04,$07,$71,$40 | Room $BB description, type $7 | ||
| 71C5 | DEFB $04,$0B,$82,$09 | Room $BC description, type $8 | ||
| 71C9 | DEFB $04,$0C,$33,$44 | Room $BD description, type $3 | ||
| 71CD | DEFB $04,$03,$04,$47 | Room $BE description, type $0 | ||
| 71D1 | DEFB $04,$0B,$05,$47 | Room $BF description, type $0 | ||
| 71D5 | DEFB $12,$0C,$06,$00 | Room $C0 description, type $0 | ||
| 71D9 | DEFB $37,$66,$A0,$36,$2F,$09,$36,$09 | |||
| 71E1 | DEFB $38,$09,$3F,$09,$0F,$0D | |||
| 71E7 | DEFB $0D,$01,$67,$07 | Room $C1 description, type $6 | ||
| 71EB | DEFB $21,$11,$21,$68,$11,$5D,$2E,$6A | |||
| 71F3 | DEFB $35 | |||
| 71F4 | DEFB $04,$06,$51,$43 | Room $C2 description, type $5 | ||
| 71F8 | DEFB $08,$0F,$12,$03 | Room $C3 description, type $1 | ||
| 71FC | DEFB $1C,$68,$00,$11 | |||
| 7200 | DEFB $04,$08,$63,$03 | Room $C4 description, type $6 | ||
| 7204 | DEFB $08,$06,$14,$01 | Room $C5 description, type $1 | ||
| 7208 | DEFB $13,$12,$0C,$0D | |||
| 720C | DEFB $0E,$0D,$45,$01 | Room $C6 description, type $4 | ||
| 7210 | DEFB $16,$00,$24,$00,$2B,$00,$2B,$68 | |||
| 7218 | DEFB $00,$4E | |||
| 721A | DEFB $04,$06,$56,$47 | Room $C7 description, type $5 | ||
| 721E | DEFB $06,$1A,$17,$01 | Room $C8 description, type $1 | ||
| 7222 | DEFB $34,$03 | |||
| 7224 | DEFB $04,$96,$81,$02 | Room $C9 description, type $8 | ||
| 7228 | DEFB $04,$0E,$12,$49 | Room $CA description, type $1 | ||
| 722C | DEFB $07,$0B,$53,$41 | Room $CB description, type $5 | ||
| 7230 | DEFB $2E,$6A,$3C | |||
| 7233 | DEFB $07,$09,$04,$01 | Room $CC description, type $0 | ||
| 7237 | DEFB $37,$6A,$46 | |||
| 723A | DEFB $0D,$03,$45,$07 | Room $CD description, type $4 | ||
| 723E | DEFB $1A,$6A,$2D,$27,$66,$38,$58,$1D | |||
| 7246 | DEFB $00 | |||
| 7247 | DEFB $04,$0C,$36,$47 | Room $CE description, type $3 | ||
| 724B | DEFB $08,$03,$07,$45 | Room $CF description, type $0 | ||
| 724F | DEFB $2D,$68,$02,$46 | |||
| 7253 | DEFB $04,$09,$81,$09 | Room $D0 description, type $8 | ||
| 7257 | DEFB $04,$0C,$04,$40 | Room $D1 description, type $0 | ||
| 725B | DEFB $04,$0C,$04,$40 | Room $D2 description, type $0 | ||
| 725F | DEFB $04,$02,$84,$01 | Room $D3 description, type $8 | ||
| 7263 | DEFB $04,$09,$25,$05 | Room $D4 description, type $2 | ||
| 7267 | DEFB $04,$0A,$04,$00 | Room $D5 description, type $0 | ||
| 726B | DEFB $04,$0B,$04,$00 | Room $D6 description, type $0 | ||
| 726F | DEFB $07,$02,$81,$00 | Room $D7 description, type $8 | ||
| 7273 | DEFB $37,$6A,$28 | |||
| 7276 | DEFB $10,$08,$F2,$08 | Room $D8 description, type $F -- one of 4 PLUG ROOMs (see 73B3), cube position level 6, row 5, col 5 | ||
| 727A | DEFB $13,$0F,$17,$0E,$33,$0E,$37,$0F | 4 decor cubes at grid corners (2,2)/(2,6)/(6,2)/(6,6), values $0F/$0E/$0E/$0F; then Plug+Whirlpool co-located at grid cell $25 -- see 8F4C/8F1E | ||
| 7282 | DEFB $25,$6B,$25,$69 | |||
|
|
||||
| 7286 | DEFB $01 | |||
|
Per-level Plug Room table: 6 entries (levels 1-6), 6 bytes each. byte0 = the level's Plug Room number ($00 = none; $32/$65/$9B/$D8 for levels 2/3/5/6), byte1 = state byte (low nibble checked against $0F by 8F4C/94F4 to suppress the plug spawn -- plug already pulled?), bytes 2-5 = purpose not yet known. Looked up by 62F9.
|
||||
| 7287 | DEFB $00,$00,$00,$00,$00,$00 | |||
| 728D | DEFB $32,$00,$7A,$76,$76,$7A | |||
| 7293 | DEFB $65,$00,$42,$38,$3A,$42 | |||
| 7299 | DEFB $00,$00,$00,$00,$00,$00 | |||
| 729F | DEFB $9B,$00,$70,$70,$70,$70 | |||
| 72A5 | DEFB $D8,$00,$7A,$76,$76,$7A | |||
|
|
||||
| 72AB | DEFB $06,$13,$17,$33,$37,$25 | |||
|
|
||||
|
16 words, indexed by $612A (room type 0-15, from room description byte2 bits 4-7); each points to a template block below. Types 9-14 all share the same template ($73A0).
|
||||
| 72B1 | DEFW $72D1,$72E4,$72F3,$731A | |||
| 72B9 | DEFW $7329,$733E,$734F,$7362 | |||
| 72C1 | DEFW $7389,$73A0,$73A0,$73A0 | |||
| 72C9 | DEFW $73A0,$73A0,$73A0,$73B3 | |||
|
|
||||
| 72D1 | DEFB $13 | byte count for this template (19) | ||
| 72D2 | DEFB $16,$01,$20,$01,$22,$02,$26,$01 | |||
| 72DA | DEFB $2D,$02,$32,$04,$33,$04,$1C,$66 | |||
| 72E2 | DEFB $37,$40 | |||
|
Room type $1 (15 bytes)
|
||||
| 72E4 | DEFB $0F | byte count for this template (15) | ||
| 72E5 | DEFB $0D,$02,$0E,$04,$2B,$03,$25,$03 | |||
| 72ED | DEFB $32,$01,$35,$66,$37,$40 | |||
|
Room type $2 (39 bytes)
|
||||
| 72F3 | DEFB $27 | byte count for this template (39) | ||
| 72F4 | DEFB $0C,$68,$00,$11,$17,$68,$00,$18 | |||
| 72FC | DEFB $1A,$68,$00,$27,$1C,$68,$00,$0A | |||
| 7304 | DEFB $1F,$68,$00,$5C,$2E,$68,$00,$35 | |||
| 730C | DEFB $33,$68,$00,$1F,$36,$68,$00,$49 | |||
| 7314 | DEFB $06,$09,$24,$09,$3A,$09 | |||
|
Room type $3 (15 bytes)
|
||||
| 731A | DEFB $0F | byte count for this template (15) | ||
| 731B | DEFB $0F,$07,$14,$07,$22,$08,$2F,$08 | |||
| 7323 | DEFB $33,$07,$1C,$67,$36,$0D | |||
|
Room type $4 (21 bytes)
|
||||
| 7329 | DEFB $15 | byte count for this template (21) | ||
| 732A | DEFB $08,$09,$0F,$09,$16,$09,$1D,$09 | |||
| 7332 | DEFB $24,$09,$2B,$09,$32,$09,$39,$09 | |||
| 733A | DEFB $2C,$02,$1F,$04 | |||
|
Room type $5 (17 bytes)
|
||||
| 733E | DEFB $11 | byte count for this template (17) | ||
| 733F | DEFB $0E,$09,$1C,$09,$2B,$09,$26,$09 | |||
| 7347 | DEFB $28,$09,$2B,$09,$35,$09,$0E,$0D | |||
|
Room type $6 (19 bytes)
|
||||
| 734F | DEFB $13 | byte count for this template (19) | ||
| 7350 | DEFB $0D,$0D,$10,$01,$17,$0D,$1C,$0D | |||
| 7358 | DEFB $23,$01,$27,$01,$32,$0D,$36,$0D | |||
| 7360 | DEFB $3D,$0D | |||
|
Room type $7 (39 bytes)
|
||||
| 7362 | DEFB $27 | byte count for this template (39) | ||
| 7363 | DEFB $0D,$68,$00,$0F,$10,$0D,$17,$0D | |||
| 736B | DEFB $1C,$09,$1E,$09,$1F,$68,$00,$28 | |||
| 7373 | DEFB $22,$68,$00,$3F,$25,$68,$00,$39 | |||
| 737B | DEFB $26,$0D,$28,$09,$2B,$03,$2D,$09 | |||
| 7383 | DEFB $34,$68,$00,$21,$37,$09 | |||
|
Room type $8 (23 bytes)
|
||||
| 7389 | DEFB $17 | byte count for this template (23) | ||
| 738A | DEFB $0B,$0D,$0E,$02,$0F,$01,$13,$03 | |||
| 7392 | DEFB $1E,$03,$24,$0D,$2A,$03,$2F,$0D | |||
| 739A | DEFB $34,$01,$25,$66,$3C,$54 | |||
|
Room type $9..$E (19 bytes)
|
||||
| 73A0 | DEFB $13 | byte count for this template (19) | ||
| 73A1 | DEFB $16,$01,$20,$01,$22,$02,$26,$01 | |||
| 73A9 | DEFB $2D,$02,$32,$04,$33,$04,$13,$66 | |||
| 73B1 | DEFB $23,$58 | |||
|
Room type $F (2 bytes) -- used by exactly 4 rooms in the whole table -- $32, $65, $9B, $D8 (cube positions level2/row2/col1, level3/row4/col4, level5/row1/col4, level6/row5/col5 respectively) -- all four "PLUG ROOM" (title index 8). Per the game's own instructions text (x-docs/Instructions.txt): "the gigantic planetary aquarium... is now so polluted that the only remedy is to completely empty it of water by pulling each of the four main plugs" -- these 4 rooms are the win-condition rooms: pulling all four plugs completes the game. The template itself (2 bytes: length + 1 more) is too short to hold any real (index,value) pair, consistent with Plug Rooms being a distinct, mostly-static-content-free category built around the plug-placement mechanic rather than normal terrain.
|
||||
| 73B3 | DEFB $01 | byte count for this template (2) | ||
| 73B4 | DEFB $01 | |||
|
|
||||
| 73B5 | DEFM " DEATHBOWL ",$5E | " DEATHBOWL " | ||
| 73C3 | DEFM " PIRANHA ",$5E | " PIRANHA " | ||
| 73D1 | DEFM " SEAHORSE ",$5E | " SEAHORSE " | ||
| 73DF | DEFM " WOLF FISH ",$5E | " WOLF FISH " | ||
| 73ED | DEFM " ANEMONE ",$5E | " ANEMONE " | ||
| 73FB | DEFM " SEA SLUG ",$5E | " SEA SLUG " | ||
| 7409 | DEFM " OYSTER ",$5E | " OYSTER " | ||
| 7417 | DEFM " JELLYFISH ",$5E | " JELLYFISH " | ||
| 7425 | DEFM " PLUG ROOM ",$5E | " PLUG ROOM " | ||
| 7433 | DEFM " BABY WHALE ",$5E | " BABY WHALE " | ||
|
|
||||
|
7 entries, 20 bytes each, terminated by $FF; alias into the tail of the 73B5 table.
|
||||
| 7441 | DEFM "FEEDING PROHIBITED ",$5E | "FEEDING PROHIBITED " | ||
| 7455 | DEFM "BATHING NOT ALLOWED",$5E | "BATHING NOT ALLOWED" | ||
| 7469 | DEFM "DONT TAP THE GLASS ",$5E | "DONT TAP THE GLASS " | ||
| 747D | DEFM "NOW WASH YOUR HANDS",$5E | "NOW WASH YOUR HANDS" | ||
| 7491 | DEFM "NOT DRINKING WATER ",$5E | "NOT DRINKING WATER " | ||
| 74A5 | DEFM "DONT BITE THE FISH ",$5E | "DONT BITE THE FISH " | ||
| 74B9 | DEFM " PLEASE GO QUIETLY ",$5E,$FF | " PLEASE GO QUIETLY " | ||
|
|
||||
| 74CE | DEFB $00,$0C,$6A,$0E,$38,$0D,$3A,$0D | |||
| 74D6 | DEFB $3C,$0D,$3E,$0D,$40,$0D,$42,$0D | |||
| 74DE | DEFB $6D,$0D,$6E,$0D,$70,$0D,$76,$0D | |||
| 74E6 | DEFB $72,$0D,$74,$0D,$76,$0D,$78,$0D | |||
| 74EE | DEFB $7A,$0D,$44,$0B,$50,$19,$52,$05 | |||
| 74F6 | DEFB $54,$18,$56,$0F,$48,$08,$4E,$19 | |||
| 74FE | DEFB $46,$13,$4A,$05,$58,$05,$6C,$18 | |||
| 7506 | DEFB $BA,$0A,$04,$1D,$02 | |||
| 750B | DEFB $0D,$14,$01,$18,$18,$02,$14,$15 | |||
| 7513 | DEFB $02,$09,$10,$03,$0C,$18,$03,$0C | |||
| 751B | DEFB $10,$03,$00,$08,$04,$1C,$1E,$04 | |||
| 7523 | DEFB $0C,$12,$02,$1C,$1E,$04,$00,$0A | |||
| 752B | DEFB $04,$14,$18,$02,$10,$0C,$02,$0C | |||
| 7533 | DEFB $14,$04,$1C,$20,$02,$20,$26,$04 | |||
| 753B | DEFB $14,$16,$02,$24,$35,$03,$18,$20 | |||
| 7543 | DEFB $04,$1C,$1E,$03,$08,$0E,$03,$08 | |||
| 754B | DEFB $0C,$03,$10,$14,$03,$08,$10,$04 | |||
| 7553 | DEFB $18,$18,$03 | |||
|
|
||||
|
Per-terrain-code shape/behaviour pointer table, indexed by grid content code * 2 (code $00, unused since a $00 grid cell means "empty" and is never looked up, has a dummy entry). Read by 9ABC (player/object collision -- looks up the pointer, then reads further bytes for shape data) and 8E6E (creature/object setup, same table). 21 entries (codes $00-$14) pointing into the shape-record area starting at $7580; codes above $14 are never used as static grid content and have no entry.
|
||||
| 7556 | DEFW $1A1A | |||
| 7558 | DEFW $7580 | |||
| 755A | DEFW $7582 | |||
| 755C | DEFW $7584 | |||
| 755E | DEFW $7586 | |||
| 7560 | DEFW $7588 | |||
| 7562 | DEFW $758A | |||
| 7564 | DEFW $758C | |||
| 7566 | DEFW $758E | |||
| 7568 | DEFW $7590 | |||
| 756A | DEFW $7592 | |||
| 756C | DEFW $7595 | |||
| 756E | DEFW $7598 | |||
| 7570 | DEFW $759B | |||
| 7572 | DEFW $759D | |||
| 7574 | DEFW $75A0 | |||
| 7576 | DEFW $75A3 | |||
| 7578 | DEFW $75A6 | |||
| 757A | DEFW $75A9 | |||
| 757C | DEFW $75AB | |||
| 757E | DEFW $75AE | |||
| 7580 | DEFB $02,$4A | Shape record for terrain code $01 (7556) | ||
| 7582 | DEFB $02,$52 | Shape record for terrain code $02 (7556) | ||
| 7584 | DEFB $02,$54 | Shape record for terrain code $03 (7556) | ||
| 7586 | DEFB $02,$58 | Shape record for terrain code $04 (7556) | ||
| 7588 | DEFB $02,$BA | Shape record for terrain code $05 (7556) | ||
| 758A | DEFB $02,$48 | Shape record for terrain code $06 (7556) | ||
| 758C | DEFB $02,$4E | Shape record for terrain code $07 (7556) | ||
| 758E | DEFB $02,$50 | Shape record for terrain code $08 (7556) | ||
| 7590 | DEFB $02,$46 | Shape record for terrain code $09 (7556) | ||
| 7592 | DEFB $03,$3A,$BA | Shape record for terrain code $0A (7556) | ||
| 7595 | DEFB $03,$42,$BA | Shape record for terrain code $0B (7556) | ||
| 7598 | DEFB $03,$38,$BA | Shape record for terrain code $0C (7556) | ||
| 759B | DEFB $02,$56 | Shape record for terrain code $0D (7556) | ||
| 759D | DEFB $03,$76,$BA | Shape record for terrain code $0E (7556) | ||
| 75A0 | DEFB $03,$7A,$BA | Shape record for terrain code $0F (7556) | ||
| 75A3 | DEFB $03,$70,$BA | Shape record for terrain code $10 (7556) | ||
| 75A6 | DEFB $03,$00,$6A | Shape record for terrain code $11 (7556) | ||
| 75A9 | DEFB $02,$6C | Shape record for terrain code $12 (7556) | ||
| 75AB | DEFB $03,$6D,$BA | Shape record for terrain code $13 (7556) | ||
|
|
||||
| 75AE | DEFB $46,$4E,$50,$52,$54,$56,$6C | |||
|
|
||||
|
The real table starts at $75B6 (byte $75B5 itself precedes it and its role is unclear); consumed by 8F82 (spawns pairs) and likely other unidentified routines. Each record: offset 0 = total record length (8 + room-list length, a value under 8 marks the end of the table); offset 1 = active flag, tested nonzero, overwritten with the current room number once spawned; offset 2/3 = a handler word for other consumer routines (8F82 ignores it, always uses 9021); offset 4 = X, offset 5 = Y; offset 6 = kind (object +0x0A); offset 7 = waypoint tag (object +0x1A, see 925C); offset 8+ = the room-list, searched via CPIR against the current room.
|
||||
| 75B5 | DEFB $07 | unknown, precedes the table | ||
| 75B6 | DEFB $0D,$01,$32,$92,$34,$34,$07,$00 | header | ||
| 75BE | DEFB $04,$05,$06,$0B,$0C | room-list | ||
| 75C3 | DEFB $09,$01,$1E,$92,$1C,$14,$07,$40 | header | ||
| 75CB | DEFB $08 | room-list | ||
| 75CC | DEFB $09,$01,$1E,$92,$1C,$24,$07,$40 | header | ||
| 75D4 | DEFB $08 | room-list | ||
| 75D5 | DEFB $0C,$01,$85,$90,$34,$34,$07,$00 | header | ||
| 75DD | DEFB $0D,$0E,$14,$1A | room-list | ||
| 75E1 | DEFB $09,$01,$08,$92,$14,$3C,$09,$00 | header | ||
| 75E9 | DEFB $10 | room-list | ||
| 75EA | DEFB $09,$01,$08,$92,$34,$0C,$09,$00 | header | ||
| 75F2 | DEFB $10 | room-list | ||
| 75F3 | DEFB $09,$01,$08,$92,$2C,$0C,$09,$00 | header | ||
| 75FB | DEFB $12 | room-list | ||
| 75FC | DEFB $09,$01,$08,$92,$14,$3C,$09,$00 | header | ||
| 7604 | DEFB $19 | room-list | ||
| 7605 | DEFB $09,$01,$08,$92,$34,$0C,$09,$00 | header | ||
| 760D | DEFB $19 | room-list | ||
| 760E | DEFB $0C,$01,$85,$90,$34,$34,$07,$00 | header | ||
| 7616 | DEFB $1D,$1E,$23,$24 | room-list | ||
| 761A | DEFB $09,$01,$A8,$90,$24,$3C,$07,$00 | header | ||
| 7622 | DEFB $22 | room-list | ||
| 7623 | DEFB $0A,$01,$85,$90,$1C,$24,$07,$00 | header | ||
| 762B | DEFB $2B,$2C | room-list | ||
| 762D | DEFB $0B,$01,$85,$90,$34,$34,$07,$00 | header | ||
| 7635 | DEFB $2F,$30,$36 | room-list | ||
| 7638 | DEFB $0C,$01,$32,$92,$24,$1C,$07,$00 | header | ||
| 7640 | DEFB $34,$3A,$40,$46 | room-list | ||
| 7644 | DEFB $09,$01,$32,$92,$34,$34,$07,$00 | header | ||
| 764C | DEFB $38 | room-list | ||
| 764D | DEFB $09,$01,$1E,$92,$1C,$2C,$07,$40 | header | ||
| 7655 | DEFB $3B | room-list | ||
| 7656 | DEFB $09,$01,$1E,$92,$24,$1C,$07,$40 | header | ||
| 765E | DEFB $3B | room-list | ||
| 765F | DEFB $0B,$01,$A8,$90,$24,$34,$07,$00 | header | ||
| 7667 | DEFB $3E,$3F,$44 | room-list | ||
| 766A | DEFB $09,$01,$08,$92,$14,$24,$09,$00 | header | ||
| 7672 | DEFB $48 | room-list | ||
| 7673 | DEFB $09,$01,$08,$92,$2C,$1C,$09,$00 | header | ||
| 767B | DEFB $48 | room-list | ||
| 767C | DEFB $09,$01,$08,$92,$04,$3C,$09,$00 | header | ||
| 7684 | DEFB $4B | room-list | ||
| 7685 | DEFB $09,$01,$08,$92,$3C,$04,$09,$00 | header | ||
| 768D | DEFB $4B | room-list | ||
| 768E | DEFB $0A,$01,$A8,$90,$1C,$24,$07,$00 | header | ||
| 7696 | DEFB $4E,$54 | room-list | ||
| 7698 | DEFB $0A,$01,$A8,$90,$1C,$0C,$07,$00 | header | ||
| 76A0 | DEFB $55,$5B | room-list | ||
| 76A2 | DEFB $0C,$01,$A8,$90,$34,$34,$07,$00 | header | ||
| 76AA | DEFB $5C,$5D,$5E,$63 | room-list | ||
| 76AE | DEFB $0C,$01,$A8,$90,$34,$34,$07,$00 | header | ||
| 76B6 | DEFB $67,$68,$69,$6A | room-list | ||
| 76BA | DEFB $09,$01,$32,$92,$34,$34,$07,$00 | header | ||
| 76C2 | DEFB $6C | room-list | ||
| 76C3 | DEFB $09,$01,$85,$90,$1C,$1C,$07,$00 | header | ||
| 76CB | DEFB $6E | room-list | ||
| 76CC | DEFB $0B,$01,$08,$92,$0C,$24,$09,$00 | header | ||
| 76D4 | DEFB $75,$76,$7B | room-list | ||
| 76D7 | DEFB $0B,$01,$08,$92,$2C,$0C,$09,$00 | header | ||
| 76DF | DEFB $75,$76,$7B | room-list | ||
| 76E2 | DEFB $09,$01,$1E,$92,$2C,$0C,$07,$40 | header | ||
| 76EA | DEFB $78 | room-list | ||
| 76EB | DEFB $09,$01,$1E,$92,$04,$2C,$07,$40 | header | ||
| 76F3 | DEFB $78 | room-list | ||
| 76F4 | DEFB $0D,$01,$85,$90,$24,$14,$07,$00 | header | ||
| 76FC | DEFB $82,$87,$88,$8D,$8E | room-list | ||
| 7701 | DEFB $09,$01,$32,$92,$34,$34,$07,$00 | header | ||
| 7709 | DEFB $83 | room-list | ||
| 770A | DEFB $0B,$01,$A8,$90,$24,$14,$07,$00 | header | ||
| 7712 | DEFB $85,$8B,$8C | room-list | ||
| 7715 | DEFB $09,$01,$1E,$92,$2C,$04,$07,$40 | header | ||
| 771D | DEFB $86 | room-list | ||
| 771E | DEFB $09,$01,$1E,$92,$0C,$34,$07,$40 | header | ||
| 7726 | DEFB $86 | room-list | ||
| 7727 | DEFB $09,$01,$08,$92,$0C,$2C,$09,$00 | header | ||
| 772F | DEFB $8F | room-list | ||
| 7730 | DEFB $09,$01,$08,$92,$2C,$0C,$09,$00 | header | ||
| 7738 | DEFB $8F | room-list | ||
| 7739 | DEFB $09,$01,$32,$92,$24,$1C,$07,$00 | header | ||
| 7741 | DEFB $92 | room-list | ||
| 7742 | DEFB $09,$01,$1E,$92,$1C,$2C,$07,$40 | header | ||
| 774A | DEFB $93 | room-list | ||
| 774B | DEFB $09,$01,$1E,$92,$2C,$1C,$07,$40 | header | ||
| 7753 | DEFB $93 | room-list | ||
| 7754 | DEFB $0C,$01,$A8,$90,$1C,$24,$07,$00 | header | ||
| 775C | DEFB $94,$95,$96,$9A | room-list | ||
| 7760 | DEFB $09,$01,$1E,$92,$1C,$2C,$07,$40 | header | ||
| 7768 | DEFB $9D | room-list | ||
| 7769 | DEFB $09,$01,$1E,$92,$2C,$1C,$07,$40 | header | ||
| 7771 | DEFB $9D | room-list | ||
| 7772 | DEFB $0B,$01,$85,$90,$24,$14,$07,$00 | header | ||
| 777A | DEFB $9F,$A5,$A0 | room-list | ||
| 777D | DEFB $09,$01,$1E,$92,$1C,$2C,$07,$40 | header | ||
| 7785 | DEFB $A1 | room-list | ||
| 7786 | DEFB $09,$01,$1E,$92,$2C,$1C,$07,$40 | header | ||
| 778E | DEFB $A1 | room-list | ||
| 778F | DEFB $09,$01,$08,$92,$14,$2C,$09,$00 | header | ||
| 7797 | DEFB $A7 | room-list | ||
| 7798 | DEFB $09,$01,$08,$92,$2C,$0C,$09,$00 | header | ||
| 77A0 | DEFB $A7 | room-list | ||
| 77A1 | DEFB $0B,$01,$85,$90,$0C,$34,$07,$00 | header | ||
| 77A9 | DEFB $A8,$AE,$B4 | room-list | ||
| 77AC | DEFB $09,$01,$08,$92,$14,$2C,$09,$00 | header | ||
| 77B4 | DEFB $A9 | room-list | ||
| 77B5 | DEFB $09,$01,$08,$92,$24,$24,$09,$00 | header | ||
| 77BD | DEFB $A9 | room-list | ||
| 77BE | DEFB $0B,$01,$32,$92,$1C,$24,$07,$00 | header | ||
| 77C6 | DEFB $AA,$AF,$B0 | room-list | ||
| 77C9 | DEFB $0A,$01,$32,$92,$1C,$24,$07,$00 | header | ||
| 77D1 | DEFB $AB,$AC | room-list | ||
| 77D3 | DEFB $09,$01,$08,$92,$24,$24,$09,$00 | header | ||
| 77DB | DEFB $B1 | room-list | ||
| 77DC | DEFB $09,$01,$08,$92,$24,$14,$09,$00 | header | ||
| 77E4 | DEFB $B5 | room-list | ||
| 77E5 | DEFB $09,$01,$08,$92,$2C,$34,$09,$00 | header | ||
| 77ED | DEFB $B5 | room-list | ||
| 77EE | DEFB $0A,$01,$85,$90,$14,$34,$07,$00 | header | ||
| 77F6 | DEFB $B6,$BC | room-list | ||
| 77F8 | DEFB $0D,$01,$32,$92,$34,$34,$07,$00 | header | ||
| 7800 | DEFB $B7,$B8,$B9,$BE,$BF | room-list | ||
| 7805 | DEFB $09,$01,$08,$92,$24,$24,$09,$00 | header | ||
| 780D | DEFB $BA | room-list | ||
| 780E | DEFB $09,$01,$32,$92,$24,$24,$07,$00 | header | ||
| 7816 | DEFB $C1 | room-list | ||
| 7817 | DEFB $0B,$01,$A8,$90,$1C,$24,$07,$00 | header | ||
| 781F | DEFB $C2,$C3,$C4 | room-list | ||
| 7822 | DEFB $09,$01,$1E,$92,$1C,$2C,$07,$40 | header | ||
| 782A | DEFB $C5 | room-list | ||
| 782B | DEFB $09,$01,$1E,$92,$2C,$1C,$07,$40 | header | ||
| 7833 | DEFB $C5 | room-list | ||
| 7834 | DEFB $09,$01,$1E,$92,$1C,$2C,$07,$40 | header | ||
| 783C | DEFB $CC | room-list | ||
| 783D | DEFB $09,$01,$1E,$92,$1C,$14,$07,$40 | header | ||
| 7845 | DEFB $CC | room-list | ||
| 7846 | DEFB $0B,$01,$32,$92,$2C,$24,$07,$00 | header | ||
| 784E | DEFB $C7,$CD,$CE | room-list | ||
| 7851 | DEFB $09,$01,$08,$92,$14,$24,$09,$00 | header | ||
| 7859 | DEFB $C9 | room-list | ||
| 785A | DEFB $09,$01,$08,$92,$1C,$1C,$09,$00 | header | ||
| 7862 | DEFB $C9 | room-list | ||
| 7863 | DEFB $0A,$01,$85,$90,$24,$14,$07,$00 | header | ||
| 786B | DEFB $CA,$D0 | room-list | ||
| 786D | DEFB $09,$01,$1E,$92,$1C,$24,$07,$40 | header | ||
| 7875 | DEFB $D3 | room-list | ||
| 7876 | DEFB $09,$01,$1E,$92,$2C,$1C,$07,$40 | header | ||
| 787E | DEFB $D3 | room-list | ||
| 787F | DEFB $09,$01,$85,$90,$24,$14,$07,$00 | header | ||
| 7887 | DEFB $1C | room-list | ||
| 7888 | DEFB $01,$5A | unused | ||
|
|
||||
| 788A | DEFB $00,$01,$18,$6D | "Empty hands" sentinel item record (room,Y,X,sprite) -- 6110 (currently-held item) points here when nothing is held; 8AFB compares against this fixed address to decide pick-up vs. drop | ||
| 788E | DEFB $00,$01,$18,$6D,$0F,$21,$54,$36 | |||
| 7896 | DEFB $0F,$21,$54,$36,$1F,$22,$18,$36 | |||
| 789E | DEFB $1F,$22,$18,$36,$35,$21,$54,$36 | |||
| 78A6 | DEFB $35,$21,$54,$36,$45,$05,$30,$36 | |||
| 78AE | DEFB $45,$05,$30,$36,$47,$2E,$18,$36 | |||
| 78B6 | DEFB $47,$2E,$18,$36,$54,$21,$54,$36 | |||
| 78BE | DEFB $54,$21,$54,$36,$5B,$12,$18,$36 | |||
| 78C6 | DEFB $5B,$12,$18,$36,$6A,$33,$18,$36 | |||
| 78CE | DEFB $6A,$33,$18,$36,$76,$37,$30,$36 | |||
| 78D6 | DEFB $76,$37,$30,$36,$8D,$1A,$18,$36 | |||
| 78DE | DEFB $8D,$1A,$18,$36,$9A,$21,$54,$36 | |||
| 78E6 | DEFB $9A,$21,$54,$36,$9D,$21,$54,$36 | |||
| 78EE | DEFB $9D,$21,$54,$36,$B7,$21,$54,$36 | |||
| 78F6 | DEFB $B7,$21,$54,$36,$C1,$21,$54,$36 | |||
| 78FE | DEFB $C1,$21,$54,$36,$CF,$2D,$30,$36 | |||
| 7906 | DEFB $CF,$2D,$30,$36,$4A,$21,$54,$42 | |||
| 790E | DEFB $4A,$21,$54,$42,$66,$2F,$18,$42 | |||
| 7916 | DEFB $66,$2F,$18,$42,$8B,$22,$18,$38 | |||
| 791E | DEFB $8B,$22,$18,$38,$72,$05,$18,$3A | |||
| 7926 | DEFB $72,$05,$18,$3A,$21,$17,$18,$72 | |||
| 792E | DEFB $21,$17,$18,$72,$18,$24,$18,$72 | |||
| 7936 | DEFB $18,$24,$18,$72,$34,$0A,$18,$72 | |||
| 793E | DEFB $34,$0A,$18,$72,$71,$0C,$18,$72 | |||
| 7946 | DEFB $71,$0C,$18,$72,$84,$1D,$18,$72 | |||
| 794E | DEFB $84,$1D,$18,$72,$A6,$12,$18,$72 | |||
| 7956 | DEFB $A6,$12,$18,$72,$C3,$1C,$18,$72 | |||
| 795E | DEFB $C3,$1C,$18,$72,$2F,$04,$18,$3E | |||
| 7966 | DEFB $2F,$04,$18,$3E,$0E,$0E,$18,$3E | |||
| 796E | DEFB $0E,$0E,$18,$3E,$0C,$1B,$18,$3E | |||
| 7976 | DEFB $0C,$1B,$18,$3E,$53,$0F,$18,$3E | |||
| 797E | DEFB $53,$0F,$18,$3E,$6E,$04,$18,$3E | |||
| 7986 | DEFB $6E,$04,$18,$3E,$81,$02,$18,$3E | |||
| 798E | DEFB $81,$02,$18,$3E,$83,$2C,$18,$3E | |||
| 7996 | DEFB $83,$2C,$18,$3E,$96,$0E,$18,$3E | |||
| 799E | DEFB $96,$0E,$18,$3E,$A0,$25,$18,$3E | |||
| 79A6 | DEFB $A0,$25,$18,$3E,$AC,$23,$18,$3E | |||
| 79AE | DEFB $AC,$23,$18,$3E,$C2,$25,$18,$3E | |||
| 79B6 | DEFB $C2,$25,$18,$3E,$CC,$25,$18,$3E | |||
| 79BE | DEFB $CC,$25,$18,$3E,$41,$1D,$18,$76 | |||
| 79C6 | DEFB $41,$1D,$18,$76,$2A,$01,$18,$76 | |||
| 79CE | DEFB $2A,$01,$18,$76,$B5,$0D,$18,$76 | |||
| 79D6 | DEFB $B5,$0D,$18,$76,$C5,$0B,$18,$76 | |||
| 79DE | DEFB $C5,$0B,$18,$76,$67,$12,$18,$74 | |||
| 79E6 | DEFB $67,$12,$18,$74,$15,$23,$18,$74 | |||
| 79EE | DEFB $15,$23,$18,$74,$43,$2B,$18,$74 | |||
| 79F6 | DEFB $43,$2B,$18,$74,$78,$0F,$18,$74 | |||
| 79FE | DEFB $78,$0F,$18,$74,$87,$0E,$18,$74 | |||
| 7A06 | DEFB $87,$0E,$18,$74,$93,$21,$54,$74 | |||
| 7A0E | DEFB $93,$21,$54,$74,$A9,$1B,$18,$74 | |||
| 7A16 | DEFB $A9,$1B,$18,$74,$AD,$23,$18,$74 | |||
| 7A1E | DEFB $AD,$23,$18,$74,$BC,$27,$18,$74 | |||
| 7A26 | DEFB $BC,$27,$18,$74,$BF,$0E,$18,$74 | |||
| 7A2E | DEFB $BF,$0E,$18,$74,$CB,$34,$18,$74 | |||
| 7A36 | DEFB $CB,$34,$18,$74,$91,$12,$18,$70 | |||
| 7A3E | DEFB $91,$12,$18,$70,$7C,$13,$18,$70 | |||
| 7A46 | DEFB $7C,$13,$18,$70,$A2,$0A,$18,$70 | |||
| 7A4E | DEFB $A2,$0A,$18,$70,$BE,$2B,$18,$70 | |||
| 7A56 | DEFB $BE,$2B,$18,$70,$5C,$35,$18,$78 | |||
| 7A5E | DEFB $5C,$35,$18,$78,$1D,$1B,$18,$78 | |||
| 7A66 | DEFB $1D,$1B,$18,$78,$3D,$2A,$18,$78 | |||
| 7A6E | DEFB $3D,$2A,$18,$78,$4C,$2A,$18,$78 | |||
| 7A76 | DEFB $4C,$2A,$18,$78,$7F,$21,$18,$78 | |||
| 7A7E | DEFB $7F,$21,$18,$78,$9C,$35,$18,$78 | |||
| 7A86 | DEFB $9C,$35,$18,$78,$62,$2F,$18,$78 | |||
| 7A8E | DEFB $62,$2F,$18,$78,$8A,$0B,$18,$40 | |||
| 7A96 | DEFB $8A,$0B,$18,$40,$04,$1B,$18,$40 | |||
| 7A9E | DEFB $04,$1B,$18,$40,$48,$36,$18,$40 | |||
| 7AA6 | DEFB $48,$36,$18,$40,$7B,$33,$18,$40 | |||
| 7AAE | DEFB $7B,$33,$18,$40,$5D,$0C,$18,$40 | |||
| 7AB6 | DEFB $5D,$0C,$18,$40,$9E,$37,$18,$40 | |||
| 7ABE | DEFB $9E,$37,$18,$40,$A5,$26,$18,$40 | |||
| 7AC6 | DEFB $A5,$26,$18,$40,$B4,$1D,$18,$40 | |||
| 7ACE | DEFB $B4,$1D,$18,$40,$BA,$2E,$18,$40 | |||
| 7AD6 | DEFB $BA,$2E,$18,$40,$CC,$25,$38,$40 | |||
| 7ADE | DEFB $CC,$25,$38,$40,$07,$12,$18,$44 | |||
| 7AE6 | DEFB $07,$12,$18,$44,$22,$0A,$18,$44 | |||
| 7AEE | DEFB $22,$0A,$18,$44,$82,$1D,$18,$44 | |||
| 7AF6 | DEFB $82,$1D,$18,$44,$A1,$0A,$18,$44 | |||
| 7AFE | DEFB $A1,$0A,$18,$44,$D3,$12,$18,$44 | |||
| 7B06 | DEFB $D3,$12,$18,$44,$24,$2D,$18,$3C | |||
| 7B0E | DEFB $24,$2D,$18,$3C,$13,$21,$54,$3C | |||
| 7B16 | DEFB $13,$21,$54,$3C,$8F,$21,$54,$3C | |||
| 7B1E | DEFB $8F,$21,$54,$3C,$AE,$27,$18,$3C | |||
| 7B26 | DEFB $AE,$27,$18,$3C,$CD,$23,$18,$3C | |||
| 7B2E | DEFB $CD,$23,$18,$3C,$06,$24,$18,$6E | |||
| 7B36 | DEFB $06,$24,$18,$6E,$08,$24,$18,$6E | |||
| 7B3E | DEFB $08,$24,$18,$6E,$0D,$24,$18,$6E | |||
| 7B46 | DEFB $0D,$24,$18,$6E,$16,$2E,$18,$6E | |||
| 7B4E | DEFB $16,$2E,$18,$6E,$17,$2D,$18,$6E | |||
| 7B56 | DEFB $17,$2D,$18,$6E,$1E,$0F,$18,$6E | |||
| 7B5E | DEFB $1E,$0F,$18,$6E,$20,$14,$18,$6E | |||
| 7B66 | DEFB $20,$14,$18,$6E,$28,$14,$18,$6E | |||
| 7B6E | DEFB $28,$14,$18,$6E,$31,$1B,$18,$6E | |||
| 7B76 | DEFB $31,$1B,$18,$6E,$33,$24,$18,$6E | |||
| 7B7E | DEFB $33,$24,$18,$6E,$39,$12,$18,$6E | |||
| 7B86 | DEFB $39,$12,$18,$6E,$3E,$0A,$18,$6E | |||
| 7B8E | DEFB $3E,$0A,$18,$6E,$42,$0B,$18,$6E | |||
| 7B96 | DEFB $42,$0B,$18,$6E,$46,$2D,$18,$6E | |||
| 7B9E | DEFB $46,$2D,$18,$6E,$51,$2A,$18,$6E | |||
| 7BA6 | DEFB $51,$2A,$18,$6E,$52,$0E,$18,$6E | |||
| 7BAE | DEFB $52,$0E,$18,$6E,$56,$37,$18,$6E | |||
| 7BB6 | DEFB $56,$37,$18,$6E,$5A,$2D,$30,$6E | |||
| 7BBE | DEFB $5A,$2D,$30,$6E,$5B,$37,$18,$6E | |||
| 7BC6 | DEFB $5B,$37,$18,$6E,$5F,$2D,$18,$6E | |||
| 7BCE | DEFB $5F,$2D,$18,$6E,$69,$37,$18,$6E | |||
| 7BD6 | DEFB $69,$37,$18,$6E,$6D,$12,$18,$6E | |||
| 7BDE | DEFB $6D,$12,$18,$6E,$6F,$0E,$18,$6E | |||
| 7BE6 | DEFB $6F,$0E,$18,$6E,$70,$19,$18,$6E | |||
| 7BEE | DEFB $70,$19,$18,$6E,$77,$24,$18,$6E | |||
| 7BF6 | DEFB $77,$24,$18,$6E,$80,$1B,$18,$6E | |||
| 7BFE | DEFB $80,$1B,$18,$6E,$89,$1B,$18,$6E | |||
| 7C06 | DEFB $89,$1B,$18,$6E,$8B,$1E,$18,$6E | |||
| 7C0E | DEFB $8B,$1E,$18,$6E,$95,$2D,$18,$6E | |||
| 7C16 | DEFB $95,$2D,$18,$6E,$98,$2C,$18,$6E | |||
| 7C1E | DEFB $98,$2C,$18,$6E,$A3,$1B,$18,$6E | |||
| 7C26 | DEFB $A3,$1B,$18,$6E,$A8,$2E,$18,$6E | |||
| 7C2E | DEFB $A8,$2E,$18,$6E,$AB,$23,$18,$6E | |||
| 7C36 | DEFB $AB,$23,$18,$6E,$AF,$22,$18,$6E | |||
| 7C3E | DEFB $AF,$22,$18,$6E,$B3,$1B,$18,$6E | |||
| 7C46 | DEFB $B3,$1B,$18,$6E,$B9,$2A,$18,$6E | |||
| 7C4E | DEFB $B9,$2A,$18,$6E,$BB,$34,$18,$6E | |||
| 7C56 | DEFB $BB,$34,$18,$6E,$BD,$0E,$18,$6E | |||
| 7C5E | DEFB $BD,$0E,$18,$6E,$C6,$24,$18,$6E | |||
| 7C66 | DEFB $C6,$24,$18,$6E,$C7,$14,$18,$6E | |||
| 7C6E | DEFB $C7,$14,$18,$6E,$D0,$2E,$18,$6E | |||
| 7C76 | DEFB $D0,$2E,$18,$6E,$D4,$1B,$18,$6E | |||
| 7C7E | DEFB $D4,$1B,$18 | |||
| 7C81 | DEFW $7F6E | |||
| 7C83 | DEFB $3E,$78,$72,$74,$3C | |||
| 7C88 | DEFB $05 | |||
|
|
||||
|
5 fixed (room,position,reward-sprite) triples, one per level. Position is $3C in every entry, the shared corner-cube grid cell; reward is $7A except level 3's $36.
|
||||
| 7C89 | DEFB $07,$3C,$7A | |||
| 7C8C | DEFB $22,$3C,$7A | |||
| 7C8F | DEFB $82,$3C,$36 | |||
| 7C92 | DEFB $A1,$3C,$7A | |||
| 7C95 | DEFB $D3,$3C,$7A | |||
| 7C98 | DEFB $05 | entry count (B in LD BC,($7C97) at 940E; the paired low byte at $7C97 coincides with the table's last byte, unused) | ||
| 7C99 | DEFB $00 | |||
|
|
||||
| 7C9A | DEFW $7C9E,$7CA0 | |||
| 7C9E | DEFB $53,$01 | |||
| 7CA0 | DEFB $39,$00,$35,$02,$00,$01,$07,$01 | |||
| 7CA8 | DEFB $52,$00,$00,$00 | |||
| 7CAC | DEFW $7CB0,$7CB2 | |||
| 7CB0 | DEFB $50,$00 | |||
| 7CB2 | DEFB $64,$00,$45,$06,$15,$02,$35,$00 | |||
| 7CBA | DEFB $00,$00 | |||
| 7CBC | DEFW $7CC0,$7CC2 | |||
| 7CC0 | DEFB $48,$00 | |||
| 7CC2 | DEFB $84,$00,$12,$00,$25,$01,$00,$00 | |||
| 7CCA | DEFW $7CCE,$7CD0 | |||
| 7CCE | DEFB $00,$10 | |||
| 7CD0 | DEFB $04,$15,$50,$01,$53,$26,$00,$00 | |||
| 7CD8 | DEFW $7CDC,$7CDE | |||
| 7CDC | DEFB $70,$05 | |||
| 7CDE | DEFB $88,$06,$32,$23,$33,$02,$23,$00 | |||
| 7CE6 | DEFB $00,$00 | |||
| 7CE8 | DEFW $7CF9 | Print char routine vector (current print-engine mode; self-modified by 7D2D) | ||
| 7CEA | DEFW $EBAC | Print cursor: current shadow screen print address | ||
|
||||||||
|
Prints the char/control code in A by jumping through the vector at (7CE8).
|
||||||||
| 7CEC | PUSH HL | save registers | ||||||
| 7CED | PUSH DE | |||||||
| 7CEE | PUSH BC | |||||||
| 7CEF | PUSH AF | |||||||
| 7CF0 | LD HL,$61A6 | disable interrupt-driven redraw flag at 61A6 while printing | ||||||
| 7CF3 | LD (HL),$01 | |||||||
| 7CF5 | LD HL,($7CE8) | get Print char routine address | ||||||
| 7CF8 | JP (HL) | jump to current print-engine mode handler | ||||||
|
||||||||
|
Prints char A as a font glyph at (7CEA), or switches mode for control codes $14/$16.
|
||||||||
| 7CF9 | CP $20 | skip control codes (<$20), fall through for printable chars | ||||||
| 7CFB | JR C,$7D26 | |||||||
| 7CFD | LD L,A | convert char code to font glyph offset (glyph = (A-$20)*8, using codes starting at font base -$20*8) | ||||||
| 7CFE | LD H,$00 | |||||||
| 7D00 | ADD HL,HL | |||||||
| 7D01 | ADD HL,HL | |||||||
| 7D02 | ADD HL,HL | |||||||
| 7D03 | LD DE,$A300 | Font base address | ||||||
| 7D06 | ADD HL,DE | |||||||
| 7D07 | EX DE,HL | |||||||
| 7D08 | LD HL,($7CEA) | copy 8 rows of the glyph to the shadow screen at (7CEA), stepping by 32 bytes/row | ||||||
| 7D0B | LD BC,$0020 | |||||||
| 7D0E | LD A,$08 | |||||||
| 7D10 | PUSH AF | |||||||
| 7D11 | LD A,(DE) | |||||||
| 7D12 | NOP | !!MUT-CMD!! patched by 7D37 | ||||||
| 7D13 | LD (HL),A | |||||||
| 7D14 | INC DE | |||||||
| 7D15 | ADD HL,BC | next line | ||||||
| 7D16 | POP AF | |||||||
| 7D17 | DEC A | |||||||
| 7D18 | JR NZ,$7D10 | |||||||
| 7D1A | LD HL,($7CEA) | advance print cursor (7CEA) to the next character column | ||||||
| 7D1D | INC HL | |||||||
| 7D1E | LD ($7CEA),HL | |||||||
|
This entry point is used by the routine at 7D3F.
|
||||||||
| 7D21 | POP AF | |||||||
| 7D22 | POP BC | |||||||
| 7D23 | POP DE | |||||||
| 7D24 | POP HL | |||||||
| 7D25 | RET | |||||||
| 7D26 | CP $14 | control code $14: switch mode to 7D32 (set inverse/highlight flag) | ||||||
| 7D28 | JR NZ,$7D3F | |||||||
| 7D2A | LD HL,$7D32 | |||||||
| 7D2D | LD ($7CE8),HL | |||||||
| 7D30 | JR $7D21 | |||||||
|
||||||||
|
Self-modifies the LD A at 7D12 to CPL/NOP for subsequent chars.
|
||||||||
| 7D32 | AND A | |||||||
| 7D33 | JR Z,$7D37 | |||||||
| 7D35 | LD A,$2F | |||||||
| 7D37 | LD ($7D12),A | |||||||
|
This entry point is used by the routine at 7D57.
|
||||||||
| 7D3A | LD HL,$7CF9 | |||||||
| 7D3D | JR $7D2D | |||||||
|
Used by the routine at 7CF9.
|
||||||||
|
Control code $16 switches mode to 7D48 (set cursor row); else return.
|
||||||||
| 7D3F | CP $16 | |||||||
| 7D41 | JR NZ,$7D21 | |||||||
| 7D43 | LD HL,$7D48 | |||||||
| 7D46 | JR $7D2D | |||||||
|
||||||||
|
Sets print cursor row from A (row*256 + shadow screen base).
|
||||||||
| 7D48 | LD H,A | |||||||
| 7D49 | LD L,$00 | |||||||
| 7D4B | LD DE,$E390 | Shadow screen address | ||||||
| 7D4E | ADD HL,DE | |||||||
| 7D4F | LD ($7CEA),HL | |||||||
| 7D52 | LD HL,$7D57 | |||||||
| 7D55 | JR $7D2D | |||||||
|
||||||||
|
Sets print cursor column from A, then switches back to default char-printing mode.
|
||||||||
| 7D57 | LD HL,($7CEA) | |||||||
| 7D5A | LD E,A | |||||||
| 7D5B | LD D,$00 | |||||||
| 7D5D | ADD HL,DE | |||||||
| 7D5E | LD ($7CEA),HL | |||||||
| 7D61 | JR $7D3A | |||||||
|
|
||||
| 7D63 | DEFW $0000 | Print string cursor: current shadow screen address for 7D68 string printer | ||
| 7D65 | DEFB $00 | |||
| 7D66 | DEFB $00,$00 | |||
|
||||||||
|
Prints the string at (HL) to the shadow screen until terminator $5E; handles control codes $16 (set row+col) and $2B (newline, +8 rows).
|
||||||||
| 7D68 | LD A,$01 | A = 1, set the "row advance" scratch $61A6 | ||||||
| 7D6A | LD ($61A6),A | |||||||
| 7D6D | LD A,(HL) | A = the next string byte, advance HL, test for control code $16 | ||||||
| 7D6E | INC HL | |||||||
| 7D6F | CP $16 | |||||||
| 7D71 | JP NZ,$7D9F | Not $16: jump to the terminator/newline tests below | ||||||
| 7D74 | LD DE,$7D66 | $16: copy the next 2 bytes (row,col) into scratch $7D66, advancing HL | ||||||
| 7D77 | LDI | |||||||
| 7D79 | LDI | |||||||
| 7D7B | LD A,($7D66) | A = the row byte, C = it, isolate the low bit into $7D65, halve C | ||||||
| 7D7E | LD C,A | |||||||
| 7D7F | AND $01 | |||||||
| 7D81 | LD ($7D65),A | |||||||
| 7D84 | SRL C | A = the column byte + 1, B = it, the loop count | ||||||
| 7D86 | LD A,($7D67) | |||||||
| 7D89 | INC A | |||||||
| 7D8A | LD B,A | |||||||
| 7D8B | PUSH HL | Save HL, the string pointer | ||||||
| 7D8C | LD HL,$E390 | Shadow screen address | ||||||
| 7D8F | LD DE,$0020 | DE = $20, the screen row stride | ||||||
| 7D92 | JR $7D95 | |||||||
| 7D94 | ADD HL,DE | Add the stride, advancing to the next row | ||||||
| 7D95 | DJNZ $7D94 | Loop B times to reach the target row | ||||||
| 7D97 | ADD HL,BC | Add the column offset (C), save the resulting screen address to $7D63 | ||||||
| 7D98 | LD ($7D63),HL | |||||||
| 7D9B | POP HL | Restore HL, the string pointer, loop back for the next character | ||||||
| 7D9C | JP $7D6D | |||||||
| 7D9F | CP $5E | Test for the string terminator $5E | ||||||
| 7DA1 | RET Z | Terminator: return | ||||||
| 7DA2 | CP $2B | Test for the newline control code $2B | ||||||
| 7DA4 | JR NZ,$7DB1 | |||||||
| 7DA6 | LD A,($7D67) | Newline: advance the row scratch $7D67 by 8, loop back to reposition | ||||||
| 7DA9 | ADD A,$08 | |||||||
| 7DAB | LD ($7D67),A | |||||||
| 7DAE | JP $7D7B | |||||||
| 7DB1 | CALL $7DC7 | Print engine | ||||||
| 7DB4 | JP $7D6D | Loop back for the next character | ||||||
|
|
||||
| 7DB7 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 7DBF | DEFB $20,$5B,$2D,$5C,$21,$5D,$2E,$5E | |||
|
Used by the routine at 7D68.
|
||||
|
Looks up the character (searched in a small table at $7DBF) as an index into a font/glyph table at $A7DC (8 bytes/char), unpacks it into a working buffer at $7DB7 (nibble-swapped if the destination column is odd -- BIT 0,C), then merges it into the shadow screen at ($7D63): if the column-parity flag $7D65 is 0, ORs the low nibble in (right half of a byte pair); if 1, uses RLD to swap in the high nibble instead (left half) -- this is how two 4px-wide half-character columns share one screen byte. Advances $7D63 by one column/row afterward. Underlies the digit/score printing (854F/8523) and the general text print engine (7CEC).
|
||||
| 7DC7 | PUSH HL | |||
| 7DC8 | LD HL,$7DBF | HL = the character table $7DBF, BC = 8 | ||
| 7DCB | LD BC,$0008 | |||
| 7DCE | CPIR | search it for the character in A | ||
| 7DD0 | JR NZ,$7DD3 | |||
| 7DD2 | LD A,(HL) | found: A = the table's paired value | ||
| 7DD3 | SUB $30 | normalize to a glyph index (subtract $30) | ||
| 7DD5 | CP $0A | letters sit $07 further down the table | ||
| 7DD7 | JR C,$7DDB | |||
| 7DD9 | SUB $07 | |||
| 7DDB | LD C,A | C = the index, halved for the row-pair lookup | ||
| 7DDC | SRL A | |||
| 7DDE | LD L,A | widen it to a word | ||
| 7DDF | LD H,$00 | |||
| 7DE1 | ADD HL,HL | multiply by 8, one glyph is 8 rows | ||
| 7DE2 | ADD HL,HL | |||
| 7DE3 | ADD HL,HL | |||
| 7DE4 | LD DE,($A7DC) | add the font base ($A7DC) | ||
| 7DE8 | ADD HL,DE | |||
| 7DE9 | LD B,$08 | B = 8 rows, DE = the work buffer $7DB7 | ||
| 7DEB | LD DE,$7DB7 | |||
| 7DEE | LD A,(HL) | *loop: read a glyph row, test the destination column parity (bit 0 of C) | ||
| 7DEF | BIT 0,C | |||
| 7DF1 | JR Z,$7DF7 | |||
| 7DF3 | RLCA | odd column: rotate the nibble into the high half | ||
| 7DF4 | RLCA | |||
| 7DF5 | RLCA | |||
| 7DF6 | RLCA | |||
| 7DF7 | CPL | mask to the high nibble | ||
| 7DF8 | AND $F0 | |||
| 7DFA | LD (DE),A | write it to the work buffer, advance both pointers | ||
| 7DFB | INC HL | |||
| 7DFC | INC DE | |||
| 7DFD | DJNZ $7DEE | loop 8 times (one glyph row per iteration) | ||
| 7DFF | LD A,($7D65) | test the column-parity flag $7D65 | ||
| 7E02 | BIT 0,A | |||
| 7E04 | JP NZ,$7E27 | already half-filled: take the RLD merge path instead | ||
| 7E07 | LD B,$08 | B = 8 rows | ||
| 7E09 | LD DE,($7D63) | DE = the screen row pointer $7D63, HL = the work buffer | ||
| 7E0D | LD HL,$7DB7 | |||
| 7E10 | PUSH BC | *loop: save the row counter | ||
| 7E11 | LD A,(DE) | A = the screen byte, keep its low nibble | ||
| 7E12 | AND $0F | |||
| 7E14 | OR (HL) | OR in the glyph's half-character | ||
| 7E15 | LD (DE),A | |||
| 7E16 | INC HL | advance the work-buffer pointer | ||
| 7E17 | LD BC,$0020 | advance the screen pointer by one row ($20 bytes) | ||
| 7E1A | EX DE,HL | |||
| 7E1B | ADD HL,BC | |||
| 7E1C | EX DE,HL | |||
| 7E1D | POP BC | loop 8 times | ||
| 7E1E | DJNZ $7E10 | |||
| 7E20 | LD A,$01 | mark the parity flag as half-filled | ||
| 7E22 | LD ($7D65),A | |||
| 7E25 | POP HL | restore HL and return | ||
| 7E26 | RET | |||
| 7E27 | LD B,$08 | alternate path (parity flag set): B = 8 rows | ||
| 7E29 | LD DE,($7D63) | DE = the screen row pointer, HL = the work buffer | ||
| 7E2D | LD HL,$7DB7 | |||
| 7E30 | PUSH BC | |||
| 7E31 | LD A,(DE) | A = the screen byte, RLD the glyph nibble into it | ||
| 7E32 | RLD | |||
| 7E34 | LD (DE),A | store it back, advance the work buffer | ||
| 7E35 | INC HL | |||
| 7E36 | LD BC,$0020 | advance the screen pointer by one row ($20 bytes) | ||
| 7E39 | EX DE,HL | |||
| 7E3A | ADD HL,BC | |||
| 7E3B | EX DE,HL | |||
| 7E3C | POP BC | loop 8 times | ||
| 7E3D | DJNZ $7E30 | |||
| 7E3F | XOR A | clear the parity flag | ||
| 7E40 | LD ($7D65),A | |||
| 7E43 | LD HL,($7D63) | advance $7D63 to the next character cell | ||
| 7E46 | INC HL | |||
| 7E47 | LD ($7D63),HL | store it back | ||
| 7E4A | POP HL | restore HL and return | ||
| 7E4B | RET | |||
|
|
||||
| 7E4C | DEFW $0000 | |||
| 7E4E | DEFB $00 | |||
|
Used by the routine at 8128.
|
||||||||
|
Looks up the A5DC record for sprite L (L*4 -- see A5DC), takes its data address (record[0..1]) and masked height (record[2]&$7F, in 8px rows) and width (record[3]&$7F, in 8px columns, toggling record[3] bit 7 in place each call so alternating calls flip between drawing the normal and mirrored image). For each of height*8 pixel rows, copies ceil(width/2) bytes from the front of the row to the back (and vice versa via HL/DE working inward from both ends), bit-reversing each byte with the RLA/RR chain at 7E83 -- the standard trick for mirroring a monochrome bitmap left-to-right. Used to derive a sprite's mirror-image facing from a single stored copy.
|
||||||||
| 7E4F | LD H,$00 | |||||||
| 7E51 | ADD HL,HL | |||||||
| 7E52 | ADD HL,HL | |||||||
| 7E53 | LD DE,$A5DC | Table of sprites address | ||||||
| 7E56 | ADD HL,DE | |||||||
| 7E57 | LD E,(HL) | |||||||
| 7E58 | INC HL | |||||||
| 7E59 | LD D,(HL) | |||||||
| 7E5A | INC HL | |||||||
| 7E5B | LD A,(HL) | record[2]: height (mask off bit 7) | ||||||
| 7E5C | AND $7F | |||||||
| 7E5E | LD C,A | |||||||
| 7E5F | INC HL | |||||||
| 7E60 | LD A,(HL) | record[3]: width -- toggle bit 7 in place (flip-flop flag, self-modifying), then mask it off | ||||||
| 7E61 | XOR $80 | |||||||
| 7E63 | LD (HL),A | |||||||
| 7E64 | AND $7F | |||||||
| 7E66 | LD L,A | |||||||
| 7E67 | LD H,$00 | |||||||
| 7E69 | LD ($7E4C),HL | |||||||
| 7E6C | SRL A | halve the width, rounding up | ||||||
| 7E6E | ADC A,$00 | |||||||
| 7E70 | LD ($7E4E),A | |||||||
| 7E73 | LD B,$08 | outer loop: once per 8px-row group (height) | ||||||
| 7E75 | PUSH BC | inner loop: 8 pixel rows per group | ||||||
| 7E76 | LD HL,($7E4C) | |||||||
| 7E79 | ADD HL,DE | |||||||
| 7E7A | PUSH HL | |||||||
| 7E7B | LD A,($7E4E) | |||||||
| 7E7E | LD B,A | |||||||
| 7E7F | AND A | |||||||
| 7E80 | DEC HL | innermost loop: ceil(width/2) byte pairs per row | ||||||
| 7E81 | LD A,(DE) | |||||||
| 7E82 | LD C,(HL) | |||||||
| 7E83 | RLA | rotate all 8 bits out of A and back into C in reverse order (unrolled x8) | ||||||
| 7E84 | RR C | |||||||
| 7E86 | RLA | |||||||
| 7E87 | RR C | |||||||
| 7E89 | RLA | |||||||
| 7E8A | RR C | |||||||
| 7E8C | RLA | |||||||
| 7E8D | RR C | |||||||
| 7E8F | RLA | |||||||
| 7E90 | RR C | |||||||
| 7E92 | RLA | |||||||
| 7E93 | RR C | |||||||
| 7E95 | RLA | |||||||
| 7E96 | RR C | |||||||
| 7E98 | RLA | |||||||
| 7E99 | RR C | |||||||
| 7E9B | RLA | the final shifted-out bit | ||||||
| 7E9C | LD (DE),A | |||||||
| 7E9D | LD (HL),C | |||||||
| 7E9E | INC DE | |||||||
| 7E9F | DJNZ $7E80 | |||||||
| 7EA1 | POP DE | |||||||
| 7EA2 | POP BC | |||||||
| 7EA3 | DJNZ $7E75 | |||||||
| 7EA5 | DEC C | |||||||
| 7EA6 | JR NZ,$7E73 | |||||||
| 7EA8 | RET | |||||||
|
Used by the routine at 7EBE.
|
||||
|
Reads 6 keyboard half-row ports in sequence, starting $7FFE, port high byte advanced by E each iteration, storing each row's byte into the buffer starting at $6184 and decrementing down through $617F. E starts at $80 and is rotated right each iteration, both selecting the next port's high-byte increment and terminating the scan, Z, once it has rotated out.
|
||||
| 7EA9 | LD HL,$6184 | HL = the row buffer $6184, E = $80, the rotation seed, BC = the first port $7FFE | ||
| 7EAC | LD E,$80 | |||
| 7EAE | LD BC,$7FFE | |||
| 7EB1 | IN D,(C) | Read the row, store it, test/rotate E | ||
| 7EB3 | LD (HL),D | |||
| 7EB4 | AND A | |||
| 7EB5 | RR E | |||
| 7EB7 | RET Z | All rows done: return | ||
| 7EB8 | DEC HL | Otherwise advance HL, add E into B, the next port's high byte, loop | ||
| 7EB9 | LD A,B | |||
| 7EBA | ADD A,E | |||
| 7EBB | LD B,A | |||
| 7EBC | JR $7EB1 | |||
|
Used by the routine at 8968.
|
||||
|
Dispatches on the device selector $617B: keyboard (scans 6 half-rows into $6186's bits, some duplicated -- e.g. both $617D and $6184 set bit 4/fire), Kempston (port $001F, used as the mask directly), Sinclair (port $EFFE, bit-rotated into the mask), or Cursor keys (ports $EFFE/$F7FE). Result is masked against the previous frame's value at $6188 and stored to $6186; also accumulates a held-key counter at $617C. See 6186 for the bit layout.
|
||||
| 7EBE | LD A,($617B) | A = the device selector $617B | ||
| 7EC1 | AND A | |||
| 7EC2 | JP NZ,$7F8A | not keyboard: branch to the joystick/cursor paths | ||
| 7EC5 | LD A,($6185) | $6185 selects the alternate device path | ||
| 7EC8 | AND A | |||
| 7EC9 | JR NZ,$7F28 | |||
| 7ECB | CALL $7EA9 | Scan all 6 keyboard half-rows into the row-snapshot buffer at $6184 down to $617F, used by 7EBE's input reader | ||
| 7ECE | LD B,$00 | B = 0, the mask accumulator | ||
| 7ED0 | LD A,($6182) | row $6182 -> Up (bit 3) | ||
| 7ED3 | AND $1F | |||
| 7ED5 | XOR $1F | |||
| 7ED7 | JR Z,$7EDB | |||
| 7ED9 | SET 3,B | |||
| 7EDB | LD A,($617E) | row $617E -> Down (bit 2) | ||
| 7EDE | AND $1F | |||
| 7EE0 | XOR $1F | |||
| 7EE2 | JR Z,$7EE6 | |||
| 7EE4 | SET 2,B | |||
| 7EE6 | LD A,($6183) | row $6183 -> Right (bit 0) | ||
| 7EE9 | AND $1F | |||
| 7EEB | XOR $1F | |||
| 7EED | JR Z,$7EF1 | |||
| 7EEF | SET 0,B | |||
| 7EF1 | LD A,($617F) | row $617F -> Left (bit 1) | ||
| 7EF4 | AND $1F | |||
| 7EF6 | XOR $1F | |||
| 7EF8 | JR Z,$7EFC | |||
| 7EFA | SET 1,B | |||
| 7EFC | LD A,($617D) | row $617D -> Fire (bit 4) | ||
| 7EFF | AND $1F | |||
| 7F01 | XOR $1F | |||
| 7F03 | JR Z,$7F07 | |||
| 7F05 | SET 4,B | |||
| 7F07 | LD A,($6184) | row $6184 -> Fire (bit 4, second key group) | ||
| 7F0A | AND $1F | |||
| 7F0C | XOR $1F | |||
| 7F0E | JR Z,$7F12 | |||
| 7F10 | SET 4,B | |||
| 7F12 | LD A,B | *shared exit: A = the resolved mask | ||
| 7F13 | LD B,A | |||
| 7F14 | LD HL,$6188 | mask against the previous frame's value ($6188) | ||
| 7F17 | AND (HL) | |||
| 7F18 | LD ($6186),A | set Resolved input mask | ||
| 7F1B | LD A,B | |||
| 7F1C | CPL | complement and force the unused bits, store as next frame's baseline | ||
| 7F1D | OR $CF | |||
| 7F1F | LD (HL),A | |||
| 7F20 | LD A,($617C) | add the mask into the held-key counter $617C | ||
| 7F23 | ADD A,B | |||
| 7F24 | LD ($617C),A | |||
| 7F27 | RET | |||
| 7F28 | CP $01 | device 1: Kempston | ||
| 7F2A | JR NZ,$7F33 | |||
| 7F2C | LD BC,$001F | read port $001F, used as the mask verbatim | ||
| 7F2F | IN A,(C) | |||
| 7F31 | JR $7F13 | |||
| 7F33 | CP $02 | device 2: Sinclair | ||
| 7F35 | JR NZ,$7F5A | |||
| 7F37 | LD BC,$EFFE | read port $EFFE | ||
| 7F3A | IN A,(C) | |||
| 7F3C | CPL | complement: a pressed key reads as 1 | ||
| 7F3D | LD B,$00 | |||
| 7F3F | RRCA | bit 0 -> Fire (bit 4) | ||
| 7F40 | JR NC,$7F44 | |||
| 7F42 | SET 4,B | |||
| 7F44 | RRCA | bit 1 -> Up (bit 3) | ||
| 7F45 | JR NC,$7F49 | |||
| 7F47 | SET 3,B | |||
| 7F49 | RRCA | bit 2 -> Down (bit 2) | ||
| 7F4A | JR NC,$7F4E | |||
| 7F4C | SET 2,B | |||
| 7F4E | RRCA | bit 3 -> Right (bit 0) | ||
| 7F4F | JR NC,$7F53 | |||
| 7F51 | SET 0,B | |||
| 7F53 | RRCA | bit 4 -> Left (bit 1) | ||
| 7F54 | JR NC,$7F12 | |||
| 7F56 | SET 1,B | |||
| 7F58 | JR $7F12 | |||
| 7F5A | LD BC,$EFFE | Cursor keys: read port $EFFE | ||
| 7F5D | IN A,(C) | |||
| 7F5F | CPL | |||
| 7F60 | LD BC,$F7FE | also read port $F7FE into C | ||
| 7F63 | IN C,(C) | |||
| 7F65 | BIT 4,C | test the fire key (bit 4 of the $F7FE row) | ||
| 7F67 | JR NZ,$7F6B | |||
| 7F69 | SET 1,A | |||
| 7F6B | LD B,$00 | B = 0, the mask accumulator | ||
| 7F6D | RRCA | bit 0 -> Fire (bit 4) | ||
| 7F6E | JR NC,$7F72 | |||
| 7F70 | SET 4,B | |||
| 7F72 | RRCA | bit 1 -> Left (bit 1) | ||
| 7F73 | JR NC,$7F77 | |||
| 7F75 | SET 1,B | |||
| 7F77 | RRCA | bit 2 -> Right (bit 0) | ||
| 7F78 | JR NC,$7F7C | |||
| 7F7A | SET 0,B | |||
| 7F7C | RRCA | bit 3 -> Up (bit 3) | ||
| 7F7D | JR NC,$7F81 | |||
| 7F7F | SET 3,B | |||
| 7F81 | RRCA | bit 4 -> Down (bit 2) | ||
| 7F82 | JP NC,$7F12 | |||
| 7F85 | SET 2,B | |||
| 7F87 | JP $7F12 | |||
| 7F8A | LD ($6186),A | set Resolved input mask | ||
| 7F8D | RET | |||
|
Sets the min tracker ($6194/$6195) to $0000 and the max tracker ($6196/$6197) to $FFB9, sentinel values that any real screen rectangle will widen via 7F9B.
|
||||
| 7F8E | LD HL,$0000 | |||
| 7F91 | LD ($6194),HL | |||
| 7F94 | LD HL,$FFB9 | |||
| 7F97 | LD ($6196),HL | |||
| 7F9A | RET | |||
| 7F9B | LD HL,$6194 | HL = $6194 (min tracker) | ||
| 7F9E | LD BC,$024C | BC = $024C | ||
| 7FA1 | LD A,(DE) | *loop: compare DE-C against (HL), skip the store if not smaller | ||
| 7FA2 | SUB C | |||
| 7FA3 | CP (HL) | |||
| 7FA4 | JR NC,$7FA7 | |||
| 7FA6 | LD (HL),A | |||
| 7FA7 | INC DE | advance DE/HL, reset C, loop (high byte then low byte) | ||
| 7FA8 | INC HL | |||
| 7FA9 | LD C,$00 | |||
| 7FAB | DJNZ $7FA1 | |||
| 7FAD | LD BC,$024C | BC = $024C (second pass, HL continues into $6196, the max tracker) | ||
| 7FB0 | LD A,(DE) | *loop: compare DE-C against (HL), skip the store if not greater | ||
| 7FB1 | SUB C | |||
| 7FB2 | CP (HL) | |||
| 7FB3 | JR C,$7FB6 | |||
| 7FB5 | LD (HL),A | |||
| 7FB6 | INC DE | advance DE/HL, reset C, loop | ||
| 7FB7 | INC HL | |||
| 7FB8 | LD C,$00 | |||
| 7FBA | DJNZ $7FB0 | |||
| 7FBC | RET | return | ||
|
|
||||
| 7FBD | DEFB $01,$70,$E0 | |||
|
Sets the clip window wide open: top/left to $4C/$00 and bottom/right to $FF/$FF, effectively disabling clipping until 8315 narrows it for the next piece.
|
||||
| 7FC0 | LD HL,$004C | top/left = $004C/$00 (word write: $610A=$4C, $610B=$00) | ||
| 7FC3 | LD ($610A),HL | |||
| 7FC6 | LD HL,$FFFF | bottom/right = $FFFF (word write: $610C/$610D wide open) | ||
| 7FC9 | LD ($610C),HL | |||
| 7FCC | RET | |||
|
Used by the routine at 8128.
|
||||
|
Gated on bit 0 of the flag byte $7FBD (skipped for sprites that shouldn't mark the screen dirty, e.g. HUD icons). Derives top/bottom from $7FBF/height and left/right from $7FBE/width (rounded to a 16px boundary), clamping every edge to the $4C play-field limit, then calls 7F9B to merge the box into $6194-$6197.
|
||||
| 7FCD | LD A,($7FBD) | test the redraw-tracking flag (bit 0 of $7FBD), return if clear | ||
| 7FD0 | AND $01 | |||
| 7FD2 | RET Z | |||
| 7FD3 | LD A,($7FBF) | A = sprite top ($7FBF), clamp to at least $4C (the play-field top) | ||
| 7FD6 | CP $4C | |||
| 7FD8 | JR NC,$7FDC | |||
| 7FDA | LD A,$4C | |||
| 7FDC | LD ($610A),A | store the clamped top into $610A | ||
| 7FDF | LD A,($7FBF) | A = sprite bottom = top + height, clamp to 0 on overflow | ||
| 7FE2 | LD HL,$618F | |||
| 7FE5 | ADD A,(HL) | |||
| 7FE6 | JR NC,$7FE9 | |||
| 7FE8 | XOR A | |||
| 7FE9 | DEC A | decrement, clamp to at least $4C | ||
| 7FEA | CP $4C | |||
| 7FEC | JR NC,$7FF0 | |||
| 7FEE | LD A,$4C | |||
| 7FF0 | LD ($610C),A | store the clamped bottom into $610C | ||
| 7FF3 | INC HL | HL = sprite width field, B = width * 4 | ||
| 7FF4 | LD A,(HL) | |||
| 7FF5 | ADD A,A | |||
| 7FF6 | ADD A,A | |||
| 7FF7 | LD B,A | |||
| 7FF8 | LD A,($7FBE) | A = sprite left ($7FBE) - B, round down to a 16px boundary | ||
| 7FFB | SUB B | |||
| 7FFC | AND $F0 | |||
| 7FFE | LD ($610B),A | |||
| 8001 | LD A,($7FBE) | A = sprite left + B - 1, round up to a 16px boundary, store as the right edge | ||
| 8004 | ADD A,B | |||
| 8005 | DEC A | |||
| 8006 | OR $0F | |||
| 8008 | LD ($610D),A | |||
| 800B | LD DE,$610A | DE = $610A | ||
| 800E | JP $7F9B | => Fold a screen rectangle (DE = top/left, HL = bottom/right pair) into the running redraw bounding box $6194-$6197 | ||
|
Used by the routine at 8128.
|
||||
|
Compares the sprite's screen position/size (via $7FBE/$7FBF, 618F/6190) against the clip rectangle $610A(top)/$610B(left)/$610C(bottom)/$610D(right): shrinks the effective height/width and advances the sprite data pointers (618D, A5D8) when the top/left edges are off-window, and just shrinks the count when the bottom/right edges are off-window. Returns with Carry set if the sprite is fully off-window (nothing to draw), NC and A=0 otherwise. Called by 8128 before blitting.
|
||||
| 8011 | LD HL,$610A | HL = clip top ($610A), A = sprite top ($7FBF) | ||
| 8014 | LD A,($7FBF) | |||
| 8017 | LD C,A | |||
| 8018 | CP (HL) | not clipped at the top: skip ahead | ||
| 8019 | JR NC,$8046 | |||
| 801B | LD A,(HL) | top-clipped: clamp the sprite top to the clip edge | ||
| 801C | LD ($7FBF),A | |||
| 801F | SUB C | B = the clipped-away row count | ||
| 8020 | LD B,A | |||
| 8021 | LD A,($618F) | subtract it from the height ($618F) | ||
| 8024 | SUB B | |||
| 8025 | JR C,$8096 | underflowed or exactly zero: fully off-window | ||
| 8027 | JR Z,$8096 | |||
| 8029 | LD ($618F),A | store the shrunk height | ||
| 802C | LD DE,($6190) | DE = sprite width * rows-clipped (row byte count to skip) | ||
| 8030 | LD HL,$0000 | |||
| 8033 | LD D,H | |||
| 8034 | ADD HL,DE | *loop: HL += DE, DJNZ (multiply row-count by width) | ||
| 8035 | DJNZ $8034 | |||
| 8037 | EX DE,HL | DE = the byte count to skip, HL = the sprite data pointer | ||
| 8038 | LD HL,($618D) | |||
| 803B | ADD HL,DE | advance it past the clipped rows | ||
| 803C | LD ($618D),HL | |||
| 803F | LD HL,($A5D8) | same for the mask pointer ($A5D8) | ||
| 8042 | ADD HL,DE | |||
| 8043 | LD ($A5D8),HL | store it back | ||
| 8046 | LD A,($7FBF) | A = sprite top, HL = the height field $618F | ||
| 8049 | LD HL,$618F | |||
| 804C | ADD A,(HL) | A = the sprite's bottom edge | ||
| 804D | DEC A | |||
| 804E | LD HL,$610C | subtract the clip bottom ($610C) | ||
| 8051 | SUB (HL) | |||
| 8052 | JR C,$8060 | no overhang: skip ahead | ||
| 8054 | LD B,A | B = the overhang, A = the height | ||
| 8055 | LD A,($618F) | |||
| 8058 | SUB B | shrink it | ||
| 8059 | JR C,$809A | underflowed or exactly zero: fully off-window | ||
| 805B | JR Z,$809A | |||
| 805D | LD ($618F),A | store the shrunk height | ||
| 8060 | LD A,($6190) | A = the sprite width in bytes (*4) | ||
| 8063 | ADD A,A | |||
| 8064 | ADD A,A | |||
| 8065 | LD B,A | B = it, A = the sprite's screen X ($7FBE) | ||
| 8066 | LD A,($7FBE) | |||
| 8069 | SUB B | A = the left edge, aligned down | ||
| 806A | AND $F8 | |||
| 806C | LD HL,$610B | compare against the clip left ($610B) | ||
| 806F | CP (HL) | |||
| 8070 | JR NC,$807D | not clipped: skip ahead | ||
| 8072 | LD C,A | C = the sprite left, A = the clip left | ||
| 8073 | LD A,(HL) | |||
| 8074 | SUB C | |||
| 8075 | RRCA | the difference divided by 8: the left-clip column shift | ||
| 8076 | RRCA | |||
| 8077 | RRCA | |||
| 8078 | AND $1F | |||
| 807A | LD ($8124),A | store it at $8124 | ||
| 807D | LD A,($7FBE) | A = the sprite's screen X plus its width | ||
| 8080 | ADD A,B | |||
| 8081 | ADD A,$07 | round up to a byte boundary | ||
| 8083 | AND $F8 | |||
| 8085 | LD HL,$610D | compare against the clip right ($610D) | ||
| 8088 | CP (HL) | |||
| 8089 | JR C,$8094 | not clipped: skip ahead | ||
| 808B | SUB (HL) | A = the overhang past the clip right | ||
| 808C | RRCA | divided by 8: the right-clip column shift | ||
| 808D | RRCA | |||
| 808E | RRCA | |||
| 808F | AND $1F | |||
| 8091 | LD ($8125),A | store it at $8125 | ||
| 8094 | XOR A | fully visible: return NC | ||
| 8095 | RET | |||
| 8096 | OR $01 | top/left clip underflowed: return Carry (fully off-window) | ||
| 8098 | SCF | |||
| 8099 | RET | |||
| 809A | XOR A | bottom/right clip underflowed: return Carry (fully off-window) | ||
| 809B | SCF | |||
| 809C | RET | |||
|
Used by the routine at 8128.
|
||||
|
Only proceeds for kind $01 (masked via $7FBD AND $7F -- the other kind uses a different path in 8128). Computes the shadow-screen row addresses (via a *8 multiply into a $DA10-based table, i.e. the standard row-address lookup) and column byte offset, then walks two loops (left part / right part of the queue, split at the sprite's row boundary) writing (dest_row_address, count) queue entries into the HUD/shadow blit-queue area at $5E24, one entry every 32 bytes -- consumed by 8107.
|
||||
| 809D | LD A,($7FBD) | A = the draw-kind flags ($7FBD), masked | ||
| 80A0 | AND $7F | |||
| 80A2 | CP $01 | only proceed for kind $01 (masked blit) | ||
| 80A4 | RET NZ | |||
| 80A5 | LD HL,($610A) | HL = the clip window's top/left, A = the left column | ||
| 80A8 | LD A,H | |||
| 80A9 | LD H,$00 | keep just the row | ||
| 80AB | ADD HL,HL | multiply it by 32, the screen row stride | ||
| 80AC | ADD HL,HL | |||
| 80AD | ADD HL,HL | |||
| 80AE | ADD HL,HL | |||
| 80AF | ADD HL,HL | |||
| 80B0 | LD DE,$DA10 | add the shadow-screen row-address base $DA10 | ||
| 80B3 | ADD HL,DE | |||
| 80B4 | AND A | A = the left column divided by 8 | ||
| 80B5 | RRCA | |||
| 80B6 | RRCA | |||
| 80B7 | RRCA | |||
| 80B8 | LD E,A | widen it to a word | ||
| 80B9 | LD D,$00 | |||
| 80BB | ADD HL,DE | add it to the destination address | ||
| 80BC | PUSH HL | save the destination address | ||
| 80BD | LD A,($610C) | A = clip bottom ($610C) minus clip left | ||
| 80C0 | LD BC,($610A) | |||
| 80C4 | SUB C | |||
| 80C5 | INC A | +1: the visible width in bytes | ||
| 80C6 | AND A | |||
| 80C7 | LD DE,$5E24 | DE = the blit queue $5E24 | ||
| 80CA | DEC HL | back the destination up two bytes, swap into HL | ||
| 80CB | DEC HL | |||
| 80CC | EX DE,HL | |||
| 80CD | LD (HL),E | write the destination address into the queue entry | ||
| 80CE | INC HL | |||
| 80CF | LD (HL),D | |||
| 80D0 | INC HL | |||
| 80D1 | LD (HL),A | write the row count after it | ||
| 80D2 | INC HL | |||
| 80D3 | EX DE,HL | |||
| 80D4 | PUSH AF | save the count | ||
| 80D5 | LD BC,$0020 | *loop: BC = 32, one screen row | ||
| 80D8 | LDI | copy 2 bytes of this row's data | ||
| 80DA | LDI | |||
| 80DC | ADD HL,BC | advance the destination by a row | ||
| 80DD | DEC A | loop count times | ||
| 80DE | JR NZ,$80D5 | |||
| 80E0 | LD A,($610D) | A = clip right ($610D) minus clip top | ||
| 80E3 | LD BC,($610B) | |||
| 80E7 | SUB C | +1: the second entry's span | ||
| 80E8 | INC A | |||
| 80E9 | AND A | |||
| 80EA | RRCA | divide by 8 -> its row count | ||
| 80EB | RRCA | |||
| 80EC | RRCA | |||
| 80ED | LD C,A | BC = it | ||
| 80EE | LD B,$00 | |||
| 80F0 | POP AF | restore the saved count and destination | ||
| 80F1 | POP HL | |||
| 80F2 | ADD HL,BC | advance the destination past the first entry's rows | ||
| 80F3 | EX DE,HL | |||
| 80F4 | LD (HL),E | write the second entry's destination address | ||
| 80F5 | INC HL | |||
| 80F6 | LD (HL),D | |||
| 80F7 | INC HL | |||
| 80F8 | LD (HL),A | write its row count after it | ||
| 80F9 | INC HL | |||
| 80FA | EX DE,HL | |||
| 80FB | LD BC,$0020 | *loop: BC = 32, one screen row | ||
| 80FE | LDI | copy 2 bytes of this row's data | ||
| 8100 | LDI | |||
| 8102 | ADD HL,BC | advance the destination by a row | ||
| 8103 | DEC A | loop count times | ||
| 8104 | JR NZ,$80FB | |||
| 8106 | RET | |||
|
Used by the routine at 97BA.
|
||||
|
Reads (address,count) entries from the queue at $5E24 (32 bytes apart), and for each does `count` LDI pairs from the current source into that row's destination -- the actual pixel-data copy into the shadow screen for the row-clipped sprite draw path.
|
||||
| 8107 | LD HL,$5E24 | HL = pointer into the blit queue built by 809D | ||
| 810A | LD B,$02 | B = 2, the loop count matching the two planes named in the title | ||
| 810C | PUSH BC | Save BC, the outer loop counter | ||
| 810D | LD E,(HL) | Read the destination address (E,D) and row count (A) from the queue entry, advancing HL past the 3-byte header | ||
| 810E | INC HL | |||
| 810F | LD D,(HL) | |||
| 8110 | INC HL | |||
| 8111 | LD A,(HL) | |||
| 8112 | INC HL | |||
| 8113 | LD BC,$0020 | BC = $0020, the 32-byte screen row stride | ||
| 8116 | LDI | Copy 2 bytes from (HL) to (DE), advancing both pointers | ||
| 8118 | LDI | |||
| 811A | EX DE,HL | Swap HL/DE, add the stride to advance the source pointer, swap back | ||
| 811B | ADD HL,BC | |||
| 811C | EX DE,HL | |||
| 811D | DEC A | Decrement the row counter | ||
| 811E | JR NZ,$8113 | Loop back to $8113 while rows remain | ||
| 8120 | POP BC | Restore BC | ||
| 8121 | DJNZ $810C | Loop back to $810C for the second plane | ||
| 8123 | RET | |||
|
|
||||
| 8124 | DEFB $01,$00 | |||
| 8126 | DEFB $4C | Current sprite number (set by 8128) | ||
| 8127 | DEFB $4C | Current mask sprite number (set by 8128) | ||
|
||||||||||
|
Draws a sprite together with its paired mask sprite at a given screen position, optionally flipping either horizontally (via 7E4F) when the caller's flag byte disagrees with the sprite's own stored flip bit. Selects one of several blit paths depending on the caller's path selector (A bits, tested against $05/$03/$02/$01): a direct clipped draw via 8011/809D, or one of the row-queue builders (82F0 and friends) feeding the free-slot pool at $9D3C, later flushed by 8107.
|
||||||||||
| 8128 | PUSH IX | Save IX, HL, DE, BC | ||||||||
| 812A | PUSH HL | |||||||||
| 812B | PUSH DE | |||||||||
| 812C | PUSH BC | |||||||||
| 812D | LD ($7FBD),A | Save the flags/kind byte A into $7FBD | ||||||||
| 8130 | LD ($7FBE),DE | Save the draw position DE into $7FBE | ||||||||
| 8134 | LD HL,$6C06 | HL = the mask-sprite lookup table $6C06, BC = sprite number | ||||||||
| 8137 | LD B,$00 | |||||||||
| 8139 | ADD HL,BC | Look up the mask sprite number for sprite C, save both to $8126/$8127 | ||||||||
| 813A | LD B,(HL) | |||||||||
| 813B | LD ($8126),BC | |||||||||
| 813F | LD L,B | L = mask sprite number | ||||||||
| 8140 | CALL $84ED | Load a sprite's A5DC record into the "current sprite" scratch variables at 618D, ready for 8128 to draw it | ||||||||
| 8143 | LD A,($7FBD) | A = saved flags, test against the mask record's own flip bit | ||||||||
| 8146 | XOR (HL) | |||||||||
| 8147 | JP P,$8150 | If sign matches (P), skip flipping | ||||||||
| 814A | LD HL,($8127) | HL = mask sprite data address | ||||||||
| 814D | CALL $7E4F | Flip sprite horizontally | ||||||||
| 8150 | LD HL,($618D) | Save the mask sprite's data address into $A5D8, then load the main sprite's number | ||||||||
| 8153 | LD ($A5D8),HL | |||||||||
| 8156 | LD HL,($8126) | HL = main sprite number | ||||||||
| 8159 | CALL $84ED | Load a sprite's A5DC record into the "current sprite" scratch variables at 618D, ready for 8128 to draw it | ||||||||
| 815C | LD A,($7FBD) | A = saved flags, test against the main sprite record's own flip bit | ||||||||
| 815F | XOR (HL) | |||||||||
| 8160 | JP P,$8169 | If sign matches (P), skip flipping | ||||||||
| 8163 | LD HL,($8126) | HL = main sprite data address | ||||||||
| 8166 | CALL $7E4F | Flip sprite horizontally | ||||||||
| 8169 | LD HL,$7FBD | Clear the saved-flags mirror bit | ||||||||
| 816C | RES 7,(HL) | |||||||||
| 816E | LD HL,$6190 | HL = the sprite width byte, clear its top bit too | ||||||||
| 8171 | RES 7,(HL) | |||||||||
| 8173 | DEC HL | Multiply the width by 8, three left shifts, via the byte before it | ||||||||
| 8174 | SLA (HL) | |||||||||
| 8176 | SLA (HL) | |||||||||
| 8178 | SLA (HL) | |||||||||
| 817A | LD A,($7FBD) | A = saved flags, branch on which draw path | ||||||||
| 817D | CP $02 | |||||||||
| 817F | JR Z,$818D | If path 2, skip straight to the offset calculation | ||||||||
| 8181 | CALL $7FCD | Compute the current sprite's own screen bounding box, clamped to the play-field, and fold it into the redraw tracker | ||||||||
| 8184 | CALL $8011 | Sprite draw | ||||||||
| 8187 | JP C,$830F | If the draw reported off-screen (Carry), abort | ||||||||
| 818A | CALL $809D | Sprite draw | ||||||||
| 818D | LD HL,($7FBF) | HL = the record's data offset, widened to a word | ||||||||
| 8190 | LD H,$00 | |||||||||
| 8192 | ADD HL,HL | Multiply by 32, five left shifts, the byte offset within the sprite data | ||||||||
| 8193 | ADD HL,HL | |||||||||
| 8194 | ADD HL,HL | |||||||||
| 8195 | ADD HL,HL | |||||||||
| 8196 | ADD HL,HL | |||||||||
| 8197 | LD A,($6190) | A = the sprite's width in pixels, doubled twice to get its byte width, save it | ||||||||
| 819A | ADD A,A | |||||||||
| 819B | ADD A,A | |||||||||
| 819C | LD B,A | |||||||||
| 819D | LD A,($7FBE) | Subtract the byte width from the saved draw position's X, re-save it, keep a copy in B | ||||||||
| 81A0 | SUB B | |||||||||
| 81A1 | LD ($7FBE),A | |||||||||
| 81A4 | LD B,A | Isolate the row bits of the adjusted X, rotate them into a row index | ||||||||
| 81A5 | AND $F8 | |||||||||
| 81A7 | RRCA | |||||||||
| 81A8 | RRCA | |||||||||
| 81A9 | RRCA | |||||||||
| 81AA | LD E,A | DE = the row index, add it to the byte-offset HL from before | ||||||||
| 81AB | LD D,$00 | |||||||||
| 81AD | ADD HL,DE | |||||||||
| 81AE | LD DE,$DA10 | Add a fixed base address $DA10, the sprite data area's start | ||||||||
| 81B1 | ADD HL,DE | |||||||||
| 81B2 | LD A,($7FBD) | A = saved flags again, dispatch on path to the matching blit-queue builder | ||||||||
| 81B5 | CP $05 | |||||||||
| 81B7 | JP Z,$8246 | Path 5 goes to $8246 | ||||||||
| 81BA | CP $03 | Path 3 goes to $82F0 | ||||||||
| 81BC | JP Z,$82F0 | |||||||||
| 81BF | CP $02 | Path 2 also goes to $82F0 | ||||||||
| 81C1 | JP Z,$82F0 | |||||||||
| 81C4 | CP $01 | Path 1 continues below, anything else goes to $8246 | ||||||||
| 81C6 | JR NZ,$8246 | |||||||||
| 81C8 | PUSH HL | Save the sprite data pointer HL | ||||||||
| 81C9 | LD A,($6190) | C = sprite height in rows, A = the byte-width remainder test value | ||||||||
| 81CC | LD C,A | |||||||||
| 81CD | LD A,B | |||||||||
| 81CE | AND $07 | If the byte-width remainder is zero skip the extra row, else fall through | ||||||||
| 81D0 | JR Z,$81D3 | |||||||||
| 81D2 | INC C | C += 1, a partial row needs one more row of queue entries | ||||||||
| 81D3 | LD IX,$9D3C | IX = the free-slot scan pointer into table $9D3C | ||||||||
| 81D7 | LD A,(IX+$00) | Test whether this slot is free, its word field is zero | ||||||||
| 81DA | OR (IX+$01) | |||||||||
| 81DD | JR Z,$81F2 | If free, use this slot | ||||||||
| 81DF | LD E,(IX+$03) | Otherwise skip past this slot's row entries to the next slot header | ||||||||
| 81E2 | LD D,$00 | |||||||||
| 81E4 | LD B,(IX+$02) | |||||||||
| 81E7 | ADD IX,DE | Advance IX by the row stride, once per row | ||||||||
| 81E9 | DJNZ $81E7 | Loop for each row | ||||||||
| 81EB | LD DE,$0004 | Skip the 4-byte slot header, then re-test the next slot | ||||||||
| 81EE | ADD IX,DE | |||||||||
| 81F0 | JR $81D7 | Loop back to re-scan | ||||||||
| 81F2 | LD (IX+$00),L | Found a free slot: write the sprite data pointer and row-byte-count into its header | ||||||||
| 81F5 | LD (IX+$01),H | |||||||||
| 81F8 | LD (IX+$02),C | |||||||||
| 81FB | LD A,($618F) | Write the sprite's height, row count, into the header's 4th byte | ||||||||
| 81FE | LD (IX+$03),A | |||||||||
| 8201 | LD DE,$0004 | Advance IX past the header to the row-entry area | ||||||||
| 8204 | ADD IX,DE | |||||||||
| 8206 | PUSH IX | DE = the row-entry area's address, save HL, the sprite data pointer | ||||||||
| 8208 | POP DE | |||||||||
| 8209 | PUSH HL | |||||||||
| 820A | LD B,$00 | B = 0, clear carry for a 16-bit subtraction | ||||||||
| 820C | AND A | |||||||||
| 820D | LD HL,$0020 | HL = $0020, one screen row's stride, minus the byte width | ||||||||
| 8210 | SBC HL,BC | |||||||||
| 8212 | LD ($823B),HL | Store the per-row stride into the blit-queue template at $823B | ||||||||
| 8215 | SLA C | C = byte width doubled, mask+sprite pair take 2 bytes per LDI | ||||||||
| 8217 | LD HL,$823A | HL = $823A minus the doubled width, another per-row stride variant | ||||||||
| 821A | SBC HL,BC | |||||||||
| 821C | LD ($8224),HL | Store into the queue template at $8224 | ||||||||
| 821F | LD ($8240),HL | Store the same value into the queue template at $8240 | ||||||||
| 8222 | POP HL | Restore HL, the sprite data pointer | ||||||||
| 8223 | JP $8232 | !!MUT-ARG!! Jump into the blit-queue-building code at $8232 | ||||||||
|
|
||||
| 8226 | DEFB $ED,$A0,$ED,$A0,$ED,$A0,$ED,$A0 | |||
| 822E | DEFB $ED,$A0 | |||
|
|
||||
|
$8230/$8232: unmasked/opaque row copy, 5 LDI's per iteration, advancing by the $1C (28) byte screen-row stride -- used when the sprite is a plain full-byte-width blit. $8246 onward: masked blit -- if the sprite's screen X is byte-aligned ($7FBE AND $07 == 0), does a straightforward per-byte `(dest AND NOT mask) OR sprite` merge loop at $8260. Otherwise ($8278-$82B7) handles a non-byte-aligned (shifted) mask/sprite pair: computes a jump offset from the sprite width into a self-modified entry point at $829C (a classic unrolled-loop/"duff's device" trick, jump target poked at $829D/$82CE) so the leftover partial column is merged with the right number of LDI's, then 82A6 does the AND/OR merge for the remaining full columns.
|
||||
| 8230 | LDI | unrolled 5-LDI copy of one row, opaque blit | ||
|
This entry point is used by the routine at 8128.
|
||||
| 8232 | LDI | |||
| 8234 | LDI | |||
| 8236 | LDI | |||
| 8238 | LDI | } | ||
| 823A | LD BC,$001C | !!MUT-ARG!! row stride ($1C) | ||
| 823D | ADD HL,BC | advance by it, decrement the row count | ||
| 823E | DEC A | |||
| 823F | JP NZ,$8232 | !!MUT-ARG!! loop while rows remain | ||
| 8242 | LD (DE),A | terminate the row with two zero bytes | ||
| 8243 | INC DE | |||
| 8244 | LD (DE),A | |||
| 8245 | POP HL | restore HL | ||
|
This entry point is used by the routine at 8128.
|
||||
| 8246 | LD A,($7FBE) | test the sprite's screen-X alignment (bits 0-2 of $7FBE), branch | ||
| 8249 | AND $07 | |||
| 824B | JP NZ,$8278 | |||
|
This entry point is used by the routine at 82DB.
|
||||
| 824E | LD BC,($618F) | byte-aligned masked path: BC = the sprite height/width | ||
| 8252 | LD DE,($A5D8) | DE = the mask data pointer | ||
| 8256 | LD IX,($618D) | IX = the sprite data pointer | ||
| 825A | LD A,$20 | A = $20 minus the byte width | ||
| 825C | SUB B | |||
| 825D | LD ($826F),A | store it as the row stride at $826F | ||
| 8260 | PUSH BC | *outer row loop: push BC | ||
| 8261 | LD A,(DE) | *inner loop: A = the mask byte, complemented | ||
| 8262 | CPL | |||
| 8263 | AND (HL) | AND it with the screen byte | ||
| 8264 | OR (IX+$00) | OR in the sprite byte | ||
| 8267 | LD (HL),A | store the merged byte | ||
| 8268 | INC DE | advance all three pointers | ||
| 8269 | INC HL | |||
| 826A | INC IX | |||
| 826C | DJNZ $8261 | loop the row width | ||
| 826E | LD C,$1C | !!MUT-ARG!! advance HL by the row stride, loop the outer count (C) times | ||
| 8270 | ADD HL,BC | |||
| 8271 | POP BC | |||
| 8272 | DEC C | |||
| 8273 | JR NZ,$8260 | |||
| 8275 | JP $830E | jump to the shared exit $830E | ||
| 8278 | PUSH HL | non-aligned path: save HL | ||
| 8279 | LD A,($6190) | A = the sprite width ($6190) | ||
| 827C | NEG | 8 minus it: the unrolled-loop skip count | ||
| 827E | ADD A,$08 | |||
| 8280 | LD B,A | B = it, doubled into A | ||
| 8281 | ADD A,A | |||
| 8282 | LD ($829D),A | store it as the jump offset at $829D | ||
| 8285 | ADD A,B | x3 for the other loop, stored at $82CE | ||
| 8286 | LD ($82CE),A | |||
| 8289 | LD A,$02 | A = 2, DE = the nibble-merge buffer $5EAC | ||
| 828B | LD DE,$5EAC | |||
| 828E | LD HL,($618D) | HL = the sprite data pointer | ||
| 8291 | LD ($618D),DE | point the sprite data at the merge buffer instead | ||
|
This entry point is used by the routine at 82A6.
|
||||
| 8295 | PUSH AF | *shared entry (also used by 82A6): save AF | ||
| 8296 | LD A,($618F) | B = height, C = $FF | ||
| 8299 | LD B,A | |||
| 829A | LD C,$FF | |||
|
This entry point is used by the routine at 82A6.
|
||||
| 829C | JR $829C | !!MUT-ARG!! self-modified jump target for the duff's-device partial-column merge | ||
|
|
||||
| 829E | DEFB $ED,$A0,$ED,$A0,$ED,$A0,$ED,$A0 | |||
|
|
||||
|
Copies the nibble-merged row buffer, built by 82DB via a 4-LDI unrolled copy, to the destination, terminating each row with a zero byte, looping row-width (C) times per row and row-count (A, from height) times overall, advancing the mask-data pointer $A5D8 between rows. On the last row, falls into the setup for the next sprite's nibble-merge pass at 82DB.
|
||||
| 82A6 | LDI | unrolled 4-LDI copy from the merge buffer to the destination | ||
| 82A8 | LDI | |||
| 82AA | LDI | |||
| 82AC | LDI | |||
| 82AE | XOR A | terminate the row (write a zero byte), advance DE | ||
| 82AF | LD (DE),A | |||
| 82B0 | INC DE | |||
| 82B1 | DJNZ $829C | loop C times (row width), then restore AF, decrement the row count | ||
| 82B3 | POP AF | |||
| 82B4 | DEC A | test for the last row | ||
| 82B5 | JR Z,$82C0 | |||
| 82B7 | LD HL,($A5D8) | advance the mask-data pointer $A5D8 by DE, loop back to 8295 | ||
| 82BA | LD ($A5D8),DE | |||
| 82BE | JR $8295 | |||
| 82C0 | LD HL,$6190 | last row done: advance the sprite width field, HL = sprite data pointer | ||
| 82C3 | INC (HL) | |||
| 82C4 | LD HL,($618D) | |||
| 82C7 | LD A,($618F) | B = height*2, A = 0 (setup for the nibble-merge pass at 82DB) | ||
| 82CA | ADD A,A | |||
| 82CB | LD B,A | |||
| 82CC | XOR A | |||
|
This entry point is used by the routine at 82DB.
|
||||
| 82CD | JR $82CD | !!MUT-ARG!! self-modified jump target (part of the duff's-device trick) | ||
|
|
||||
| 82CF | DEFB $ED,$67,$23,$ED,$67,$23,$ED,$67 | |||
| 82D7 | DEFB $23,$ED,$67,$23 | |||
|
|
||||
| 82DB | RRD | RRD-shift 5 bytes to merge sprite/mask nibbles, advancing HL between each (unrolled x5) | ||
| 82DD | INC HL | |||
| 82DE | RRD | |||
| 82E0 | INC HL | |||
| 82E1 | RRD | |||
| 82E3 | INC HL | |||
| 82E4 | RRD | |||
| 82E6 | INC HL | |||
| 82E7 | RRD | |||
| 82E9 | INC HL | |||
| 82EA | DJNZ $82CD | Loop for the next row | ||
| 82EC | POP HL | Restore HL, return to the shared dispatch | ||
| 82ED | JP $824E | |||
|
Used by the routine at 8128.
|
||||
|
Copies BC rows, from $618F's height/width, of C bytes via LDIR from the sprite data ($618D) to the shadow screen, advancing the destination by the fixed $20 row stride between rows. Shares its exit path with 8230's masked blit.
|
||||
| 82F0 | LD BC,($618F) | BC = sprite height/width, DE = sprite data address | ||
| 82F4 | LD DE,($618D) | |||
| 82F8 | LD A,C | A = row count, swap B/C, B = 0 | ||
| 82F9 | LD C,B | |||
| 82FA | LD B,$00 | |||
| 82FC | PUSH BC | *loop: save BC/HL | ||
| 82FD | PUSH HL | |||
| 82FE | EX DE,HL | swap HL/DE (source vs dest), copy the row via LDIR, swap back | ||
| 82FF | LDIR | |||
| 8301 | EX DE,HL | |||
| 8302 | POP HL | restore HL, advance by the row stride ($20), restore BC | ||
| 8303 | LD BC,$0020 | |||
| 8306 | ADD HL,BC | |||
| 8307 | POP BC | loop A times | ||
| 8308 | DEC A | |||
| 8309 | JR NZ,$82FC | |||
| 830B | JP $830E | jump to the shared exit | ||
|
This entry point is used by the routine at 8230.
|
||||
| 830E | XOR A | shared exit: A = 0 | ||
|
This entry point is used by the routine at 8128.
|
||||
| 830F | POP BC | restore all registers, return | ||
| 8310 | POP DE | |||
| 8311 | POP HL | |||
| 8312 | POP IX | |||
| 8314 | RET | |||
|
Used by the routine at 835E.
|
||||
|
Sets up the sprite-draw clip window ($610A-$610D) for the piece, then draws it and updates the redraw bounding box.
Reads a (index,height/width) record from (HL), converts the index to a screen row/column via a *8 lookup into $1C70 to get the clip window's top/left ($610A/$610B), derives bottom/right ($610D/$610C) from the record's height/width fields, then draws the piece with a self-modified LDIR row-copy and finishes by calling 7F9B to fold the drawn area into a running screen-bounding-box (min/max) used for redraw invalidation.
|
||||
| 8315 | LD E,(HL) | DE = record word from (HL), advance HL past it, save HL | ||
| 8316 | INC HL | |||
| 8317 | LD D,(HL) | |||
| 8318 | INC HL | |||
| 8319 | PUSH HL | HL = $1C70 + DE, *8 (screen row-address lookup) | ||
| 831A | LD HL,$1C70 | |||
| 831D | ADD HL,DE | |||
| 831E | ADD HL,HL | |||
| 831F | ADD HL,HL | |||
| 8320 | ADD HL,HL | |||
| 8321 | LD A,H | A = the row plus the $4C play-field origin | ||
| 8322 | ADD A,$4C | |||
| 8324 | LD ($610A),A | store as the clip top ($610A), keep a copy in C | ||
| 8327 | LD C,A | |||
| 8328 | LD A,L | store the column as the clip left ($610B) | ||
| 8329 | LD ($610B),A | |||
| 832C | LD B,A | keep a copy in B | ||
| 832D | POP HL | restore HL, A = the piece's height | ||
| 832E | LD A,(HL) | |||
| 832F | ADD A,A | multiply it by 8 | ||
| 8330 | ADD A,A | |||
| 8331 | ADD A,A | |||
| 8332 | ADD A,B | plus the clip top, minus 1 | ||
| 8333 | DEC A | |||
| 8334 | LD ($610D),A | store as the clip bottom ($610D) | ||
| 8337 | LD A,$20 | compute the self-modified LDIR row width, save the source byte and count | ||
| 8339 | SUB (HL) | |||
| 833A | LD ($8351),A | |||
| 833D | LD A,(HL) | |||
| 833E | LD ($834D),A | |||
| 8341 | INC HL | compute the clip right ($610C) from the width field | ||
| 8342 | LD A,C | |||
| 8343 | ADD A,(HL) | |||
| 8344 | DEC A | |||
| 8345 | LD ($610C),A | |||
| 8348 | LD A,(HL) | B = 0, read the source count/pointer | ||
| 8349 | INC HL | |||
| 834A | LD B,$00 | |||
| 834C | LD C,$00 | !!MUT-ARG!! *loop: row byte count (self-modified) | ||
| 834E | LDIR | LDIR one row | ||
| 8350 | LD C,$00 | !!MUT-ARG!! row byte count again (self-modified) | ||
| 8352 | EX DE,HL | advance dest by the row stride | ||
| 8353 | ADD HL,BC | |||
| 8354 | EX DE,HL | |||
| 8355 | DEC A | loop A times | ||
| 8356 | JR NZ,$834C | |||
| 8358 | LD DE,$610A | DE = $610A, fold the drawn area into the redraw bounding box via 7F9B | ||
| 835B | JP $7F9B | => Fold a screen rectangle (DE = top/left, HL = bottom/right pair) into the running redraw bounding box $6194-$6197 | ||
|
Used by the routine at 6B71.
|
||||
|
Resets the bounding-box trackers $6194/$6196 (see 7F8E/7F9B), then walks the request list at $9D3C: each entry is a (marker-word, count, stride) triple; a zero marker word ends the list. For each entry, advances a pointer by the stride, count times (computing where the next entry starts), and counts entries in C. Once the list is exhausted, replays each counted piece by walking back through it and calling 8315 to draw it, then clears the queue head.
|
||||
| 835E | LD HL,$FFB9 | reset the bounding-box min tracker $6194 | ||
| 8361 | LD ($6194),HL | |||
| 8364 | LD HL,$0000 | reset the bounding-box max tracker $6196 | ||
| 8367 | LD ($6196),HL | |||
| 836A | LD HL,$9D3C | HL = redraw-request list $9D3C, C = 0 (entry count) | ||
| 836D | LD C,$00 | |||
| 836F | LD A,(HL) | *loop: test the node's marker word, exit if zero (list end) | ||
| 8370 | INC HL | |||
| 8371 | OR (HL) | |||
| 8372 | JR Z,$8382 | |||
| 8374 | PUSH HL | save the node pointer, advance past its header | ||
| 8375 | INC HL | |||
| 8376 | LD B,(HL) | B = its piece count | ||
| 8377 | INC HL | |||
| 8378 | LD E,(HL) | DE = its stride, widened | ||
| 8379 | INC HL | |||
| 837A | LD D,$00 | |||
| 837C | ADD HL,DE | *inner loop: advance HL by the stride, B times | ||
| 837D | DJNZ $837C | |||
| 837F | INC C | count this entry, loop to the next node | ||
| 8380 | JR $836F | |||
| 8382 | LD A,C | A = entry count, test for zero | ||
| 8383 | AND A | |||
| 8384 | JR Z,$8390 | |||
| 8386 | POP HL | restore the node pointer (adjusted back by one), save the count | ||
| 8387 | DEC HL | |||
| 8388 | PUSH AF | |||
| 8389 | CALL $8315 | Draw a wall/decoration piece | ||
| 838C | POP AF | loop count times | ||
| 838D | DEC A | |||
| 838E | JR $8383 | |||
| 8390 | LD HL,$0000 | clear the queue head, return | ||
| 8393 | LD ($9D3C),HL | |||
| 8396 | RET | |||
|
|
||||
| 8397 | DEFB $A1,$0F,$00,$00,$00,$00,$CB,$00 | |||
| 839F | DEFB $CB,$00,$43,$01,$43,$01,$6B,$01 | |||
| 83A7 | DEFB $6B,$01,$93,$01,$93,$01,$E3,$01 | |||
| 83AF | DEFB $E3,$01,$33,$02,$33,$02,$83,$02 | |||
| 83B7 | DEFB $83,$02,$23,$03,$23,$03,$B3,$04 | |||
| 83BF | DEFB $B3,$04,$7B,$05,$7B,$05,$00,$00 | |||
| 83C7 | DEFB $93,$01,$23,$03,$00,$00,$B2,$04 | |||
| 83CF | DEFB $93,$01,$00,$00,$EB,$03,$91,$01 | |||
| 83D7 | DEFB $00,$00,$D0,$07,$D0,$07,$40,$06 | |||
| 83DF | DEFB $40,$06,$B0,$04,$B0,$04,$20,$03 | |||
| 83E7 | DEFB $20,$03,$90,$01,$90,$01,$90,$01 | |||
| 83EF | DEFB $90,$01,$20,$03,$20,$03,$B0,$04 | |||
| 83F7 | DEFB $B0,$04,$40,$06,$40,$06,$D0,$07 | |||
| 83FF | DEFB $D0,$07,$60,$09,$60,$09,$F0,$0A | |||
| 8407 | DEFB $F0,$0A,$80,$0C,$80,$0C,$10,$0E | |||
| 840F | DEFB $10,$0E,$A0,$0F,$A0,$0F,$A0,$0F | |||
| 8417 | DEFB $A0,$0F,$10,$0E,$10,$0E,$80,$0C | |||
| 841F | DEFB $80,$0C,$F0,$0A,$F0,$0A,$60,$09 | |||
| 8427 | DEFB $60,$09,$D0,$07,$D0,$07,$00,$00 | |||
| 842F | DEFB $9D,$83,$9D,$83,$97,$83,$D3,$83 | |||
| 8437 | DEFB $C7,$83,$D9,$83,$CD,$83,$D9,$83 | |||
| 843F | DEFB $D9,$83,$D9,$83,$9D,$83 | |||
|
Used by the routine at 6AF1.
|
||||
|
Reads the current effect ID from $61A3 (1-based; 0 = none playing), indexes a pointer table at $842F, then walks a list of command words via IX, extracting a 2-bit pitch/octave selector from each and calling the ROM tone routine at $03B6. On reaching a zero terminator word, clears $61A3 and immediately checks for a newly-queued effect (loops back to re-test).
|
||||
| 8445 | LD A,($61A0) | check the sound-enable flag $61A0, return if off | ||
| 8448 | AND A | |||
| 8449 | RET Z | |||
| 844A | LD A,($61A3) | check the currently-playing effect ID $61A3, return if none | ||
| 844D | AND A | |||
| 844E | RET Z | |||
| 844F | DEC A | A = (effect id - 1) * 2 | ||
| 8450 | ADD A,A | |||
| 8451 | LD L,A | widen it into HL | ||
| 8452 | LD H,$00 | |||
| 8454 | LD DE,$842F | add the sound-effect pointer table $842F | ||
| 8457 | ADD HL,DE | |||
| 8458 | LD ($845D),HL | store the entry address at $845D | ||
| 845B | LD IX,($842F) | !!MUT-ARG!! IX = the effect's command-word data | ||
| 845F | LD L,(IX+$00) | *loop: read the next command word, done if zero (table end) | ||
| 8462 | LD H,(IX+$01) | |||
| 8465 | LD A,L | |||
| 8466 | OR H | |||
| 8467 | JR Z,$8487 | |||
| 8469 | SRL H | shift the command word right, low bit into A | ||
| 846B | RR L | |||
| 846D | RRA | |||
| 846E | SRL H | shift it again, second bit into A | ||
| 8470 | RR L | |||
| 8472 | RLA | rotate the two collected bits into place | ||
| 8473 | RLCA | |||
| 8474 | AND $03 | mask to 0-3, add 1, E = result | ||
| 8476 | INC A | |||
| 8477 | LD E,A | |||
| 8478 | LD D,$00 | call the ROM tone routine ($03B6) with the pitch/duration | ||
| 847A | PUSH IX | |||
| 847C | CALL $03B6 | |||
| 847F | POP IX | advance IX to the next command word, loop back | ||
| 8481 | INC IX | |||
| 8483 | INC IX | |||
| 8485 | JR $845F | |||
| 8487 | XOR A | table exhausted: clear the current-effect ID, check for a newly-queued effect | ||
| 8488 | LD ($61A3),A | |||
| 848B | JP $844A | |||
|
$61A0 nonzero forces an immediate switch (overwrites $61A3 directly, interrupting whatever's playing); otherwise, if $61A1 is set, the effect is queued at $61A2/$61A3=$FF (consumer not in this routine); if $61A1 is clear, the request is dropped. Exact meaning of $61A0/$61A1 not confirmed.
|
||||
| 848E | PUSH BC | save BC/HL, B = requested effect ID | ||
| 848F | PUSH HL | |||
| 8490 | LD B,A | |||
| 8491 | LD A,($61A0) | test $61A0, branch away (force-switch) if busy | ||
| 8494 | AND A | |||
| 8495 | JR NZ,$84A7 | |||
| 8497 | LD A,($61A1) | test $61A1 (queue-enable), return without queuing if clear | ||
| 849A | AND A | |||
| 849B | JR Z,$84A4 | |||
| 849D | LD HL,$61A2 | write the effect ID to $61A2 and a pending marker ($FF) to $61A3 | ||
| 84A0 | LD (HL),B | |||
| 84A1 | INC HL | |||
| 84A2 | LD (HL),$FF | |||
| 84A4 | POP HL | restore HL/BC, return | ||
| 84A5 | POP BC | |||
| 84A6 | RET | |||
| 84A7 | LD A,B | force-switch path: write the effect ID directly to $61A3 | ||
| 84A8 | LD ($61A3),A | |||
| 84AB | POP HL | |||
| 84AC | POP BC | |||
| 84AD | RET | |||
|
Allocates one entry from a free-list of object records (creatures, bubble sources, snakes, whirlpools, plugs -- anything not baked into the static room grid; see 612C). Every caller has 2 embedded bytes immediately after its CALL instruction, holding the little-endian address of that call site's per-object behaviour handler (marked with a W-line at each site, e.g. 666C). On the early-exit path ($618C is 0): pops the return address and skips exactly those 2 bytes (INC HL twice, then JP (HL)) -- no object is allocated, and the handler address is discarded unread. On the success path: pops the SAME return address into HL, then LDIs those same 2 bytes as literal data into the new record's offset $03/$04 (the handler-pointer field), pushes the now-advanced HL (pointing just past the 2 bytes) back onto the stack, copies a fixed 19-byte block from $5C92 (ZX system-variable area, reused as a default object state template) into the rest of the record, then RETs -- popping that pushed address, so execution resumes 2 bytes past the CALL either way. The 2 bytes are never executed as code on either path. Allocation + list insertion: pops the next free record off the free-list head at $618B (each free record's first 2 bytes point to the next free record; the free list can extend outside the A900 pool, e.g. into scratch at $5B00). Then head-inserts the new record into the active object list at the insertion point given by IX: copies the old head word from (IX+0/1) into the new record's +0/+1 link field, then writes the new record's address back to (IX+0/1). IX is usually 610E (the global list head), but can be any record's own link field (e.g. $8DEF for creatures -- see 6663), which splices the object into the middle of the list instead. Switches IX to the new record's address, stores the current room number ($6126) at record offset $02. Sets a flag bit (A=1) and returns with IX = the new record's address. Object pool starts at A900.
|
||||
| 84AE | LD A,($618C) | test $618C, branch to the success path if allocation is enabled | ||
| 84B1 | AND A | |||
| 84B2 | JR NZ,$84B8 | |||
| 84B4 | POP HL | early-exit: pop the return address, skip the 2 embedded bytes, resume there | ||
| 84B5 | INC HL | |||
| 84B6 | INC HL | |||
| 84B7 | JP (HL) | |||
| 84B8 | LD HL,($618B) | pop the next free record off the free list | ||
| 84BB | LD E,(HL) | |||
| 84BC | INC HL | |||
| 84BD | LD D,(HL) | |||
| 84BE | LD ($618B),DE | update the free-list head | ||
| 84C2 | LD A,(IX+$01) | copy 2 bytes from the caller's template pointer (IX) into the freed slot, to keep the free list intact | ||
| 84C5 | LD (HL),A | |||
| 84C6 | DEC HL | |||
| 84C7 | LD A,(IX+$00) | |||
| 84CA | LD (HL),A | |||
| 84CB | LD (IX+$00),L | switch IX to the new record's address | ||
| 84CE | LD (IX+$01),H | |||
| 84D1 | PUSH HL | HL = the new record's address | ||
| 84D2 | POP IX | |||
| 84D4 | EX DE,HL | DE = HL + 2 (destination for the room-number field) | ||
| 84D5 | INC DE | |||
| 84D6 | INC DE | |||
| 84D7 | LD A,($6126) | get room number | ||
| 84DA | LD (DE),A | |||
| 84DB | INC DE | |||
| 84DC | POP HL | pop the return address, LDI the 2 embedded handler-address bytes into the record | ||
| 84DD | LDI | |||
| 84DF | LDI | |||
| 84E1 | PUSH HL | push the advanced return address back | ||
| 84E2 | LD HL,$5C92 | copy the fixed 19-byte default state block from $5C92 | ||
| 84E5 | LD BC,$0013 | |||
| 84E8 | LDIR | |||
| 84EA | OR $01 | set the flag bit, return | ||
| 84EC | RET | |||
|
Used by the routine at 8128.
|
||||||||
| 84ED | LD H,$00 | |||||||
| 84EF | ADD HL,HL | |||||||
| 84F0 | ADD HL,HL | |||||||
| 84F1 | LD DE,$A5DC | sprite table base (A5DC) | ||||||
| 84F4 | ADD HL,DE | |||||||
| 84F5 | LD DE,$618D | destination: current-sprite scratch variables (618D) | ||||||
| 84F8 | LDI | copy data address (2 bytes) and height (1 byte) | ||||||
| 84FA | LDI | |||||||
| 84FC | LDI | |||||||
| 84FE | LD A,(HL) | copy width byte as-is (unmasked, includes the flip-flop flag bit) | ||||||
| 84FF | LD (DE),A | |||||||
| 8500 | RET | |||||||
|
||||||||
|
Loops over bytes at HL, printing each one via 7CEC (the print engine, which also interprets embedded control codes like $14/$16 seen at 8623/861A), until it reads a terminator byte ($5E or $2B) -- returns with HL pointing just past the terminator. Called directly with HL already pointing at a string (e.g. from 8513), and via 850E for inline strings embedded right after a CALL.
|
||||||||
| 8501 | LD A,(HL) | |||||||
| 8502 | INC HL | |||||||
| 8503 | CP $5E | terminator check: $5E | ||||||
| 8505 | RET Z | |||||||
| 8506 | CP $2B | terminator check: $2B | ||||||
| 8508 | RET Z | |||||||
| 8509 | CALL $7CEC | Print engine entry point | ||||||
| 850C | JR $8501 | => Print string at HL until terminator byte $5E or $2B | ||||||
|
Pops the return address off the stack into HL -- since the caller used CALL $850E, this is the address of the string bytes immediately following that CALL. Calls 8501 to print the string (advancing HL past it), then JP (HL) to resume execution right after the embedded string, i.e. normal code flow continues past the inline text.
|
||||
| 850E | POP HL | |||
| 850F | CALL $8501 | Print string at HL until terminator byte $5E or $2B | ||
| 8512 | JP (HL) | resume execution after the inline string | ||
|
Fixed prefix from $65CF, then an inline colour/control byte stored to $618A, then the caller's own inline string.
|
||||
| 8513 | LD HL,$65CF | |||
| 8516 | CALL $7D68 | Print string routine | ||
| 8519 | POP HL | |||
| 851A | LD A,(HL) | |||
| 851B | LD ($618A),A | |||
| 851E | INC HL | |||
| 851F | CALL $7D68 | Print string routine | ||
| 8522 | JP (HL) | |||
|
B bytes from (HL), two digits per byte, leading zeros as spaces; DE = per-digit print routine (self-modifies 854C's JP).
|
||||
| 8523 | LD ($854D),DE | Set the per-digit print routine, self-modify 854C's JP target | ||
| 8527 | LD C,$20 | C = $20, the "space" blank-digit code | ||
| 8529 | XOR A | A = 0, E = the next BCD byte, RLD-rotate its high nibble into A | ||
| 852A | LD E,(HL) | |||
| 852B | RLD | |||
| 852D | AND A | |||
| 852E | JR Z,$8532 | If the high nibble is 0, keep the space code, else C = $30, the digit code base | ||
| 8530 | LD C,$30 | |||
| 8532 | ADD A,C | A = the printable digit code | ||
| 8533 | CALL $854C | Print one digit | ||
| 8536 | LD (HL),E | Write the rotated byte back, decrement the digit-pair counter B | ||
| 8537 | DEC B | |||
| 8538 | JR NZ,$853C | If not the last pair, force C back to the digit code base $30 | ||
| 853A | LD C,$30 | |||
| 853C | INC B | A = the low nibble, test it | ||
| 853D | LD A,E | |||
| 853E | AND $0F | |||
| 8540 | JR Z,$8544 | If nonzero, force C to the digit code base $30 | ||
| 8542 | LD C,$30 | |||
| 8544 | ADD A,C | A = the printable digit code | ||
| 8545 | CALL $854C | Print one digit | ||
| 8548 | INC HL | Advance HL, loop for the next byte pair | ||
| 8549 | DJNZ $8529 | |||
| 854B | RET | |||
|
Used by the routine at 8523.
|
||||
| 854C | JP $7CEC | !!MUT-ARG!! => Print engine entry point | ||
|
Rotates A's high nibble down, prints it via 7CEC as a digit, or a space ($F0 sentinel) if it's zero, then prints the low nibble as a digit unconditionally.
|
||||
| 854F | PUSH AF | |||
| 8550 | RRCA | |||
| 8551 | RRCA | |||
| 8552 | RRCA | |||
| 8553 | RRCA | |||
| 8554 | AND $0F | |||
| 8556 | JR NZ,$855A | |||
| 8558 | LD A,$F0 | |||
| 855A | ADD A,$30 | |||
| 855C | CALL $7CEC | Print engine entry point | ||
| 855F | POP AF | |||
| 8560 | AND $0F | |||
| 8562 | ADD A,$30 | |||
| 8564 | JP $7CEC | => Print engine entry point | ||
|
|
||||
|
4 bytes, one per starting location, in order A/B/C/D: $52 (level 3, row 1, col 4), $C0 (level 6, row 2, col 0), $1A (level 1, row 4, col 2), $84 (level 4, row 4, col 0). See x-docs/Room-Format.md for the full cube-position table and cross-check against an external game map.
|
||||
| 8567 | DEFB $52,$C0,$1A,$84 | |||
|
|
||||
| 856B | DEFM "1 KEYBOARD+2 KEMPSTON+3 SINCLAIR+4 CURSOR+",$5E | |||
|
Used by the routine at 6B05.
|
||||
|
Sets IY from $61A4, a fixed system variables area, enables IM 1 interrupts, and clears a flag byte at $FBAA before falling into 85A1's main menu loop.
|
||||
| 8596 | LD IY,($61A4) | |||
| 859A | IM 1 | |||
| 859C | EI | |||
| 859D | XOR A | |||
| 859E | LD ($FBAA),A | |||
|
|
||||
|
Prints the title, the CONTROLS heading, and the 4 level entries (A-D, Elvis song titles). Each frame, redraws the Controls sub-list with the currently-selected control method (from $6185) shown inverse, and the music/SFX toggle labels reflecting $61A0/$61A1. Waits, via FB90, for a key selecting a level or toggling an option, looping until a level is chosen.
|
||||
| 85A1 | CALL $850E | Print an inline string embedded right after the caller's CALL instruction | ||
| 85A4 | DEFM $14,$00,$16,$00,$00,"DEATHBOWL." | main menu title | ||
| 85B3 | DEFM $16,$00,$14,"CONTROLS." | sub-heading | ||
| 85BF | DEFM $16,$02,$00,"A RETURN TO SENDER" | key A entry name | ||
| 85D4 | DEFM $16,$04,$00,"B JAIL HOUSE ROCK" | key B entry name | ||
| 85E8 | DEFM $16,$06,$00,"C O SOLE O MIO" | key C entry name | ||
| 85F9 | DEFM $16,$08,$00,"D HEARTBREAK HOTEL",$5E | key D entry name (Elvis song titles) | ||
| 860F | LD A,($6185) | |||
| 8612 | ADD A,$01 | |||
| 8614 | LD C,A | |||
| 8615 | LD B,$02 | |||
| 8617 | LD HL,$856B | load pointer to Controls menu text at 856B | ||
| 861A | LD A,$16 | control code $16: set print cursor row (selects the menu row to print into) | ||
| 861C | CALL $7CEC | |||
| 861F | LD A,B | |||
| 8620 | CALL $7CEC | Print engine entry point | ||
| 8623 | LD A,$14 | control code $14 + flag: set/clear inverse video for the currently selected control method | ||
| 8625 | CALL $7CEC | |||
| 8628 | INC B | |||
| 8629 | INC B | |||
| 862A | DEC C | |||
| 862B | JR NZ,$8637 | |||
| 862D | LD A,$14 | |||
| 862F | CALL $7CEC | Print engine entry point | ||
| 8632 | LD A,$01 | |||
| 8634 | CALL $7CEC | Print engine entry point | ||
| 8637 | CALL $8501 | Print string at HL until terminator byte $5E or $2B | ||
| 863A | LD A,$14 | control code $14 + $01: restore inverse video flag to normal | ||
| 863C | CALL $7CEC | |||
| 863F | XOR A | |||
| 8640 | CALL $7CEC | Print engine entry point | ||
| 8643 | LD A,(HL) | |||
| 8644 | CP $5E | |||
| 8646 | JR NZ,$861A | |||
| 8648 | LD A,($61A0) | |||
| 864B | AND A | |||
| 864C | JR NZ,$8681 | |||
| 864E | CALL $850E | Print an inline string embedded right after the caller's CALL instruction | ||
| 8651 | DEFM $16,$0A,$14,"5 ",$5E | stray "5" (control-code list index? unclear) | ||
| 8657 | LD A,($61A1) | |||
| 865A | AND A | |||
| 865B | JR NZ,$8670 | |||
| 865D | CALL $850E | Print an inline string embedded right after the caller's CALL instruction | ||
| 8660 | DEFM $14,$01,"MUSIC",$14,$00,"/SFX",$5E | "MUSIC" label, shown selected/inverse | ||
| 866E | JR $8681 | |||
| 8670 | CALL $850E | Print an inline string embedded right after the caller's CALL instruction | ||
| 8673 | DEFM "MUSIC/",$14,$01,"SFX",$14,$00,$5E | "SFX" label, shown selected/inverse | ||
| 8681 | CALL $9C35 | End-of-frame screen flip | ||
| 8684 | LD (IY-$32),$00 | |||
| 8688 | LD B,$32 | |||
| 868A | HALT | |||
| 868B | DJNZ $868A | |||
| 868D | CALL $FB90 | Menu tune + key-wait driver | ||
| 8690 | RST $38 | |||
| 8691 | LD A,(IY-$32) | |||
| 8694 | AND A | |||
| 8695 | JR Z,$8688 | |||
| 8697 | CP $31 | |||
| 8699 | JR C,$8684 | |||
| 869B | CP $35 | |||
| 869D | JR NZ,$86AA | |||
| 869F | LD A,($61A1) | |||
| 86A2 | XOR $01 | |||
| 86A4 | LD ($61A1),A | |||
| 86A7 | JP $85A1 | => Main menu screen | ||
| 86AA | JR NC,$86B4 | |||
| 86AC | SUB $31 | |||
| 86AE | LD ($6185),A | |||
| 86B1 | JP $85A1 | => Main menu screen | ||
| 86B4 | OR $20 | |||
| 86B6 | SUB $61 | |||
| 86B8 | JR C,$8684 | |||
| 86BA | CP $04 | |||
| 86BC | JR NC,$8684 | |||
| 86BE | LD L,A | |||
| 86BF | LD H,$00 | |||
| 86C1 | LD BC,$8567 | load pointer to entry-point room number table (8567) -- used to look up the starting room for the pressed menu key A/B/C/D | ||
| 86C4 | ADD HL,BC | |||
| 86C5 | LD A,(HL) | |||
| 86C6 | LD ($6125),A | set entry-point room number | ||
| 86C9 | IM 2 | |||
| 86CB | RET | |||
|
Used by the routine at 676D.
|
||||
| 86CC | CALL $850E | Print an inline string embedded right after the caller's CALL instruction | ||
|
End-game stats overlay labels (see 676D: called only when room==1)
|
||||
| 86CF | DEFM $14,$00,$16,$00,$0D,"DEATHBOWL DIVINED" | title | ||
| 86E5 | DEFM $16,$02,$0D,"SCORE SCRAPED" | stat label | ||
| 86F5 | DEFM $16,$04,$0D,"PLUGS PULLED" | stat label | ||
| 8704 | DEFM $16,$06,$0D,"GOODIES GATHERED" | stat label | ||
| 8717 | DEFM $16,$08,$0D,"GNOMES GNABBED" | stat label | ||
| 8728 | DEFM $16,$00,$01,$5E | cursor position only, no visible text | ||
| 872C | LD HL,$6121 | |||
| 872F | LD C,$20 | |||
| 8731 | LD A,(HL) | |||
| 8732 | RRCA | |||
| 8733 | RRCA | |||
| 8734 | RRCA | |||
| 8735 | RRCA | |||
| 8736 | AND $0F | |||
| 8738 | JR Z,$873C | |||
| 873A | LD C,$30 | |||
| 873C | ADD A,C | |||
| 873D | CALL $7CEC | Print engine entry point | ||
| 8740 | LD A,(HL) | |||
| 8741 | AND $0F | |||
| 8743 | JR Z,$8747 | |||
| 8745 | LD C,$30 | |||
| 8747 | ADD A,C | |||
| 8748 | CALL $7CEC | Print engine entry point | ||
| 874B | DEC HL | |||
| 874C | LD A,(HL) | |||
| 874D | RRCA | |||
| 874E | RRCA | |||
| 874F | RRCA | |||
| 8750 | RRCA | |||
| 8751 | AND $0F | |||
| 8753 | ADD A,$30 | |||
| 8755 | CALL $7CEC | Print engine entry point | ||
| 8758 | LD A,$2E | |||
| 875A | CALL $7CEC | Print engine entry point | ||
| 875D | LD A,(HL) | |||
| 875E | AND $0F | |||
| 8760 | ADD A,$30 | |||
| 8762 | CALL $7CEC | Print engine entry point | ||
| 8765 | LD A,$25 | |||
| 8767 | CALL $7CEC | Print engine entry point | ||
| 876A | CALL $850E | Print an inline string embedded right after the caller's CALL instruction | ||
| 876D | DEFM $16,$02,$01,$5E | cursor position only, no visible text (positions for a stat value printed separately) | ||
| 8771 | LD HL,$611D | |||
| 8774 | LD B,$03 | |||
| 8776 | LD DE,$7CEC | |||
| 8779 | CALL $8523 | Print a BCD number | ||
| 877C | CALL $850E | Print an inline string embedded right after the caller's CALL instruction | ||
| 877F | DEFM $16,$04,$05,$5E | cursor position only, no visible text | ||
| 8783 | LD A,($6124) | get "Plugs Pulled" end-game stat counter | ||
| 8786 | CALL $854F | Print BCD byte A as two digits, high digit blanked to a space if zero | ||
| 8789 | CALL $850E | Print an inline string embedded right after the caller's CALL instruction | ||
| 878C | DEFM $16,$06,$05,$5E | cursor position only, no visible text | ||
| 8790 | LD A,($6123) | get "Goodies Gathered" end-game stat counter | ||
| 8793 | CALL $854F | Print BCD byte A as two digits, high digit blanked to a space if zero | ||
| 8796 | CALL $850E | Print an inline string embedded right after the caller's CALL instruction | ||
| 8799 | DEFM $16,$08,$05,$5E | cursor position only, no visible text | ||
| 879D | LD A,($6122) | get "Gnomes Gnabbed" end-game stat counter | ||
| 87A0 | CALL $854F | Print BCD byte A as two digits, high digit blanked to a space if zero | ||
| 87A3 | LD A,($617A) | |||
| 87A6 | CP $02 | |||
| 87A8 | RET NZ | |||
| 87A9 | LD A,($6124) | get "Plugs Pulled" end-game stat counter | ||
| 87AC | CP $04 | |||
| 87AE | JR Z,$87FD | |||
| 87B0 | CALL $850E | Print an inline string embedded right after the caller's CALL instruction | ||
|
End-game message, shown on an early/partial completion outcome
|
||||
| 87B3 | DEFM $16,$15,$02,"HYDROFOOL - DONT GO SO FAST" | line 1 | ||
| 87D1 | DEFM $16,$16,$07,"THE WISE MAN PULLS" | line 2 | ||
| 87E6 | DEFM $16,$17,$07,"THE LAST PLUG LAST",$5E | line 3 | ||
| 87FC | RET | |||
| 87FD | CALL $850E | Print an inline string embedded right after the caller's CALL instruction | ||
|
End-game message, shown on full completion (all 4 plugs pulled)
|
||||
| 8800 | DEFM $16,$14,$05,"THE FOURTH PLUG PULLED" | line 1 | ||
| 8819 | DEFM $16,$15,$05,"JUST LIKE YOU PLANNED" | line 2 | ||
| 8831 | DEFM $16,$16,$07,"SO - SEE YOU SOON" | line 3 | ||
| 8845 | DEFM $16,$17,$08,"- IN WUNDERLAND!",$5E | line 4 | ||
| 8859 | RET | |||
| 885A | LD A,$16 | |||
| 885C | CALL $7CEC | Print engine entry point | ||
| 885F | LD A,$14 | |||
| 8861 | CALL $7CEC | Print engine entry point | ||
| 8864 | LD A,$18 | |||
| 8866 | CALL $7CEC | Print engine entry point | ||
| 8869 | LD HL,$611C | |||
| 886C | LD B,$04 | |||
| 886E | LD DE,$7CEC | |||
| 8871 | JP $8523 | => Print a BCD number | ||
|
|
||||
| 8874 | DEFS $05 | |||
|
Used by the routine at 888E.
|
||||
|
Saves the bonus value (HL) to scratch $8874, then adds it byte-by-byte, 5 bytes BCD via DAA, to the score at $611B-$611F, working from the low byte (DE=$611F) upward while HL walks the bonus bytes forward.
|
||||
| 8879 | LD ($8874),HL | Save the bonus value to scratch $8874 | ||
| 887C | LD HL,$8874 | HL = the bonus bytes, DE = the score's low byte, B = 5 | ||
| 887F | LD DE,$611F | |||
| 8882 | LD B,$05 | |||
| 8884 | XOR A | |||
| 8885 | LD A,(DE) | *loop: A = the score byte plus the bonus byte | ||
| 8886 | ADC A,(HL) | |||
| 8887 | DAA | BCD-adjust and store it back | ||
| 8888 | LD (DE),A | |||
| 8889 | INC HL | step both pointers | ||
| 888A | DEC DE | |||
| 888B | DJNZ $8885 | loop over all 5 bytes | ||
| 888D | RET | |||
| 888E | CALL $8879 | Add a 5-digit BCD value at 8874 to the score | ||
| 8891 | JP $885A | => Redraw the score display on HUD | ||
|
Used by the routine at 88DD.
|
||||
|
Subtracts a 5-digit BCD value at 8874 from the score (611B); if the score can't cover it, resets $611B-$611F from a fixed 5-byte block at $5C92 instead.
Whether the $5C92 fallback is a genuine "reset score" or coincidentally reuses the same default-state bytes seen elsewhere (see A900) is unconfirmed.
|
||||
| 8894 | LD ($8874),HL | Save the subtrahend to scratch $8874 | ||
| 8897 | LD HL,$8874 | HL = the subtrahend bytes, DE = the score's low byte, B = 5 | ||
| 889A | LD DE,$611F | |||
| 889D | LD B,$05 | |||
| 889F | XOR A | |||
| 88A0 | LD A,(DE) | *loop: A = the score byte minus the subtrahend byte | ||
| 88A1 | SBC A,(HL) | |||
| 88A2 | DAA | BCD-adjust and store it back | ||
| 88A3 | LD (DE),A | |||
| 88A4 | INC HL | step both pointers | ||
| 88A5 | DEC DE | |||
| 88A6 | DJNZ $88A0 | loop over all 5 bytes | ||
| 88A8 | JP NC,$885A | => Redraw the score display on HUD | ||
| 88AB | LD HL,$5C92 | Score underflowed: HL = the fixed reset block $5C92, DE = the score $611B, BC = 5 | ||
| 88AE | LD DE,$611B | |||
| 88B1 | LD BC,$0005 | |||
| 88B4 | LDIR | Copy the reset block over the score | ||
| 88B6 | JP $885A | => Redraw the score display on HUD | ||
|
HL = the head pointer stored at IY+0/1; if the value there is null (0), wraps to the alternate start pointer at IY+2/3 instead. Advances and stores the new head pointer (HL+2) back to IY+0/1, then returns the read value in DE.
|
||||
| 88B9 | LD L,(IY+$00) | HL = the head pointer (IY+0/1) | ||
| 88BC | LD H,(IY+$01) | |||
| 88BF | LD E,(HL) | Read the entry there (E,D), advancing HL past it | ||
| 88C0 | INC HL | |||
| 88C1 | LD D,(HL) | |||
| 88C2 | INC HL | |||
| 88C3 | LD A,E | If the value is nonzero, use it | ||
| 88C4 | OR D | |||
| 88C5 | JR NZ,$88CF | |||
| 88C7 | LD L,(IY+$02) | Otherwise wrap: HL = the alternate start pointer (IY+2/3) | ||
| 88CA | LD H,(IY+$03) | |||
| 88CD | JR $88BF | Retry the read from there | ||
| 88CF | LD (IY+$00),L | Store the advanced HL back as the new head pointer (IY+0/1) | ||
| 88D2 | LD (IY+$01),H | |||
| 88D5 | EX DE,HL | DE = the value read, return | ||
| 88D6 | RET | |||
| 88D7 | CALL $88B9 | Read the next value from a small circular queue, head pointer at IY+0/1, wrap pointer at IY+2/3, advancing the head | ||
| 88DA | JP $888E | => Add a bonus (HL, 5-digit BCD) to the score, then redraw the score display | ||
| 88DD | CALL $88B9 | Read the next value from a small circular queue, head pointer at IY+0/1, wrap pointer at IY+2/3, advancing the head | ||
| 88E0 | JP $8894 | => Subtract a BCD value from the score | ||
|
Searches the weapon lookup table at $7C83, length from $7C88, for byte A via CPIR; Z indicates found. Used by 8B2B's pickup logic to recognize weapon items.
|
||||
| 88E3 | LD HL,$7C83 | |||
| 88E6 | LD BC,($7C88) | |||
| 88EA | LD B,$00 | |||
| 88EC | CPIR | |||
| 88EE | RET | |||
|
|
||||
| 88EF | DEFB $00 | |||
|
Input-mask -> direction-code priority table, scanned by 8968: (mask,direction) byte pairs, tried in order, first whose mask bits overlap ($6186's mask OR $80) wins. $08,$01 (Up bit -> direction $01); $04,$02 (Down bit -> $02); $02,$06 (Left bit -> $06); $01,$04 (Right bit -> $04); $80,$00 (default/no-input catch-all -- mask bit 7 always matches since 8968 ORs $80 into the scan key -- resolves to direction $00, i.e. no movement).
|
||||
| 88F0 | DEFB $08,$01 | |||
| 88F2 | DEFB $04,$02 | |||
| 88F4 | DEFB $02,$06 | |||
| 88F6 | DEFB $01,$04 | |||
| 88F8 | DEFB $80,$00 | |||
| 88FA | DEFB $16,$16,$17,$17,$16,$16,$18,$18 | |||
| 8902 | DEFB $16,$16,$17,$17,$1E,$1E,$18,$18 | |||
| 890A | DEFB $FF,$02,$02,$03,$03,$02,$02,$04 | |||
| 8912 | DEFB $04,$02,$02,$03,$03,$0A,$0A,$04 | |||
| 891A | DEFB $04,$FF,$FA,$88,$0B,$89,$08,$07 | |||
| 8922 | DEFB $07,$08,$08,$07,$07,$FF,$FE,$01 | |||
| 892A | DEFB $08,$FE,$01,$08,$08,$FE,$FF,$08 | |||
| 8932 | DEFB $FE,$FF,$08,$08,$FF,$FE,$01,$08 | |||
| 893A | DEFB $FE,$01,$08,$FE,$02,$08,$FE,$02 | |||
| 8942 | DEFB $08,$FF,$48,$89,$4F,$89,$FE,$FE | |||
| 894A | DEFB $19,$19,$19,$19,$FF,$FE,$FE,$05 | |||
| 8952 | DEFB $05,$05,$05,$FF,$5A,$89,$61,$89 | |||
| 895A | DEFB $15,$15,$15,$15,$15,$15,$FF,$01 | |||
| 8962 | DEFB $01,$01,$01,$01,$01,$FF | |||
|
|
||||
|
This is the handler address held in the player object record's +3/+4 field ($8DB9 -- see 8DB6), called every frame from 983C's dispatcher like any other object handler. Explains its many special cases: room $01 check (ending room), the vertical room transitions (8A87), etc. The player's handler pointer is swappable for state changes: 955A tests ($8DB9)==$8968 ("normal state?"), 9564 swaps in 8D11.
MOVEMENT: reads the input mask at 6186 (OR $80, a wildcard sentinel), then scans the (mask,direction) pair table at 88F0 for the first entry whose mask overlaps -- this resolves the raw multi-button input into a single prioritized direction code (0/1=Up, 2/3=Down, 4/5=Right, 6/7=Left; the low bit distinguishes sub-states, masked off by 8ABB's AND $0E). If the resolved direction equals the player's current facing ((IX+$0B)), calls 8AD9 immediately to take a step; if it differs and is nonzero, just updates the pending-direction latch at $8DC1 (turning takes one frame before the first step); if it resolves to 0 (no input), no movement happens this frame.
|
||||
| 8968 | LD A,($6126) | |||
| 896B | CP $01 | |||
| 896D | JP Z,$8CAA | |||
| 8970 | BIT 6,(IX+$0D) | |||
| 8974 | JP NZ,$8A6B | |||
| 8977 | CALL $7EBE | Read input | ||
| 897A | LD A,(IX+$0D) | |||
| 897D | BIT 1,A | |||
| 897F | JP NZ,$89D6 | |||
| 8982 | BIT 0,A | |||
| 8984 | JP NZ,$89D6 | |||
| 8987 | LD A,($6126) | get room number | ||
| 898A | CP $02 | |||
| 898C | JR NZ,$899B | |||
| 898E | LD A,($6125) | get Entry-point room number choosen selecting A/B/C/D in menu | ||
| 8991 | AND A | |||
| 8992 | JP Z,$89C9 | |||
| 8995 | LD (IX+$0A),$00 | |||
| 8999 | JR $89C6 | |||
| 899B | CALL $8CDF | Player dive-depth step | ||
| 899E | CALL $8AFB | Fire/pick-up button handler | ||
| 89A1 | LD A,($6186) | get Resolved input mask | ||
| 89A4 | OR $80 | set bit 7 as a wildcard sentinel, for the 88F0 priority-table scan (matches its default/no-input entry) | ||
| 89A6 | LD HL,$88F0 | |||
| 89A9 | LD C,A | |||
| 89AA | LD A,(HL) | |||
| 89AB | INC HL | |||
| 89AC | AND C | |||
| 89AD | JR NZ,$89B2 | |||
| 89AF | INC HL | |||
| 89B0 | JR $89AA | |||
| 89B2 | LD A,(HL) | |||
| 89B3 | LD B,A | |||
| 89B4 | CP (IX+$0B) | |||
| 89B7 | JR NZ,$89BB | |||
| 89B9 | JR $89C6 | |||
| 89BB | LD A,B | |||
| 89BC | AND A | |||
| 89BD | JR NZ,$89C1 | |||
| 89BF | JR $89C9 | |||
| 89C1 | LD ($8DC1),A | |||
| 89C4 | JR $89C9 | |||
| 89C6 | CALL $8AD9 | Take one walk step | ||
|
This entry point is used by the routine at 8D11.
|
||||
| 89C9 | LD IX,$8DB6 | |||
| 89CD | LD HL,$891C | |||
| 89D0 | CALL $99A7 | |||
| 89D3 | JP $9A60 | => Dynamic object finalizer | ||
| 89D6 | LD A,($6501) | |||
| 89D9 | ADD A,$02 | |||
| 89DB | LD ($6501),A | |||
| 89DE | LD A,$01 | |||
| 89E0 | LD ($8DC5),A | |||
| 89E3 | LD HL,$948B | |||
| 89E6 | LD ($9493),HL | |||
| 89E9 | LD A,$05 | |||
| 89EB | CALL $848E | Request sound effect A | ||
| 89EE | LD IY,$7CBC | |||
| 89F2 | CALL $88DD | Subtract a BCD value from the score, value from a circular queue via 88B9 | ||
| 89F5 | CALL $8513 | Print a message-window string | ||
| 89F8 | DEFB $14 | attribute/control byte for 8513's inline string | ||
| 89F9 | DEFM " OO-ER! ",$5E | message text, terminated by $5E | ||
| 8A07 | LD (IX+$0B),$06 | |||
| 8A0B | CALL $923E | Save continuation | ||
| 8A0E | LD HL,$8920 | |||
| 8A11 | CALL $99D5 | Sprite-animation stepper | ||
| 8A14 | RET NC | |||
| 8A15 | LD (IX+$0F),$0F | |||
| 8A19 | BIT 1,(IX+$0D) | |||
| 8A1D | JR NZ,$8A23 | |||
| 8A1F | LD (IX+$0F),$00 | |||
| 8A23 | LD A,$0C | |||
| 8A25 | LD ($88EF),A | |||
| 8A28 | CALL $923E | Save continuation | ||
| 8A2B | LD HL,$8928 | |||
| 8A2E | CALL $99D5 | Sprite-animation stepper | ||
| 8A31 | LD HL,$88EF | |||
| 8A34 | DEC (HL) | |||
| 8A35 | RET NZ | |||
| 8A36 | CALL $923E | Save continuation | ||
| 8A39 | LD HL,$8928 | |||
| 8A3C | CALL $99D5 | Sprite-animation stepper | ||
| 8A3F | CALL $7EBE | Read input | ||
| 8A42 | LD A,($6186) | get Resolved input mask | ||
| 8A45 | AND $1F | test for ANY key pressed (bits 0-4) | ||
| 8A47 | RET Z | |||
| 8A48 | LD HL,$9489 | |||
| 8A4B | LD ($9493),HL | |||
| 8A4E | LD HL,$8968 | |||
| 8A51 | LD ($8DB9),HL | set player behaviour-handler pointer | ||
| 8A54 | LD (IX+$0A),$00 | |||
| 8A58 | LD (IX+$0F),$00 | |||
| 8A5C | RES 1,(IX+$0D) | |||
| 8A60 | RES 0,(IX+$0D) | |||
| 8A64 | LD (IX+$18),$00 | |||
| 8A68 | JP $89C9 | |||
| 8A6B | CALL $9A49 | Snap the object's position (IX+5/+6) to its grid-cell centre, then finalize via 9A60 | ||
| 8A6E | RES 6,(IX+$0D) | |||
| 8A72 | LD (IX+$07),$38 | |||
| 8A76 | LD A,($6126) | get room number | ||
| 8A79 | CP $01 | |||
| 8A7B | JR Z,$8A82 | |||
| 8A7D | SUB $24 | change room number: -36 (one level DOWN, via whirlpool) | ||
| 8A7F | JP $97FC | => Change current room to A = new room number | ||
| 8A82 | LD A,$02 | room==1 special case: force A=2 instead | ||
| 8A84 | JP $97FC | => Change current room to A = new room number | ||
|
Used by the routine at 8D11.
|
||||
|
Computes the room number one level down ($6126 - $24, i.e. -36 -- a whirlpool) or one level up ($6126 + $24, i.e. +36 -- a bubble), the 6x6x6 cube level-stride (see x-docs/Room-Format.md). Has special-case handling when the current room number is exactly 1 (down) or 2 (up) -- overrides the computed value instead of using the generic +-36 arithmetic; not yet understood why. The upward case also bounds-checks the result against $D9 before allowing it (JP C,97FC), falling back to a different path (through $8C83) if out of range. 97FC is called with the new room number to actually perform the transition, same as the horizontal case (67F1).
|
||||
| 8A87 | LD A,$98 | |||
| 8A89 | SUB (IX+$17) | |||
| 8A8C | ADD A,(IX+$05) | |||
| 8A8F | ADD A,(IX+$06) | |||
| 8A92 | SUB $4C | |||
| 8A94 | LD (IX+$07),A | |||
| 8A97 | LD A,($6126) | get room number | ||
| 8A9A | CP $02 | |||
| 8A9C | JR Z,$8AAD | |||
| 8A9E | ADD A,$24 | change room number: +36 (one level UP, via bubble) | ||
| 8AA0 | CP $D9 | bounds check: is the new room number in range? | ||
| 8AA2 | JP C,$97FC | => Change current room to A = new room number | ||
| 8AA5 | LD A,$02 | out of range: fall back instead of changing room | ||
| 8AA7 | LD ($617A),A | |||
| 8AAA | JP $8C83 | |||
| 8AAD | LD A,($6125) | room==2 special case: use $6125 instead | ||
| 8AB0 | JP $97FC | => Change current room to A = new room number | ||
|
|
||||
| 8AB3 | DEFB $FE,$00,$02,$00,$00,$02,$00,$FE | |||
|
Looks up (IX+$0B) AND $0E in the delta table at 8AB3 and adds it to the object's position (+5/+6) in place. Screen deltas are +-2px along one axis per direction (Up/Down move dx, Right/Left move dy) -- the isometric-diamond room layout means each cardinal game direction is a diagonal-looking step on screen along a single axis. Used by 8AD9 (player movement) and 9923.
|
||||
| 8ABB | LD HL,$8AB3 | HL = the facing-delta table $8AB3 (entry 8ABE skips this, letting the caller supply a different table) | ||
|
This entry point is used by the routine at 9923.
|
||||
| 8ABE | LD A,(IX+$0B) | A = the object's facing (IX+$0B) | ||
| 8AC1 | AND $0E | Index = facing AND $0E, widened to a word in DE | ||
| 8AC3 | LD E,A | |||
| 8AC4 | LD D,$00 | |||
| 8AC6 | ADD HL,DE | HL = this direction's delta-table entry | ||
| 8AC7 | LD A,(IX+$05) | A = the object's X (IX+5), save it in B, add the delta's dx | ||
| 8ACA | LD B,A | |||
| 8ACB | ADD A,(HL) | |||
| 8ACC | LD (IX+$05),A | Store the updated X back (IX+5), advance to the delta's dy byte | ||
| 8ACF | INC HL | |||
| 8AD0 | LD A,(IX+$06) | A = the object's Y (IX+6), save it in C, add the delta's dy | ||
| 8AD3 | LD C,A | |||
| 8AD4 | ADD A,(HL) | |||
| 8AD5 | LD (IX+$06),A | Store the updated Y back (IX+6) and return | ||
| 8AD8 | RET | |||
|
Used by the routine at 8968.
|
||||
|
Applies the facing delta, then checks for a room-edge/door transition and a collision, reverting the position if blocked.
CALLs 8ABB to move (IX+5/+6) by the facing delta (old position saved in BC), then 67F1 (door/room-transition check) and 9BF0 (grid + object collision check). If 9BF0 reports no collision (NC), the new position is kept as-is. If it reports a collision (C): if also Z, pokes $FF into offset +9 of the colliding object's record (DE, from 9BF0/9ABC) -- disables it; either way, the position is then reverted to the saved BC (blocked), and the animation countdown (+0x0E) is reset.
|
||||
| 8AD9 | CALL $8ABB | Apply the object's facing direction to its position (IX+5/+6), returning the OLD position in BC | ||
| 8ADC | PUSH BC | |||
| 8ADD | CALL $67F1 | Attempt to move to an adjacent room (horizontal, via a door) in the direction given by | ||
| 8AE0 | CALL $9BF0 | Collision test | ||
| 8AE3 | JR C,$8AE7 | |||
| 8AE5 | POP BC | |||
| 8AE6 | RET | |||
| 8AE7 | JR NZ,$8AEF | |||
| 8AE9 | LD HL,$0009 | |||
| 8AEC | ADD HL,DE | |||
| 8AED | LD (HL),$FF | |||
| 8AEF | POP BC | |||
| 8AF0 | LD (IX+$05),B | |||
| 8AF3 | LD (IX+$06),C | |||
| 8AF6 | LD (IX+$0E),$00 | |||
| 8AFA | RET | |||
|
Used by the routine at 8968.
|
||||
|
Gated on the fire/pick-up key (bit 4 of 6186); if a weapon is currently held ($619E), jumps to 8D8D (attack) instead. Otherwise plays a "reach out" animation, then continues at $8B2B: if the held-item pointer 6110 currently equals the fixed "empty hands" sentinel record at $788A (i.e. nothing held), attempts to PICK UP something nearby; otherwise DROPS the currently-held item.
PICK UP ($8B2B, nothing currently held): walks nearby objects via 9B5D (proximity/collision helper, same one used by movement collision), skipping any whose kind byte (offset +8 from the found record) is $44 (the shared "vulnerable creature" pose -- not pickupable). For the first valid candidate: if its kind is $6E, calls 6622 (unidentified -- likely a special pickup, e.g. a key or weapon-specific item); if its kind is $36, treats it as a GNOME -- calls 888E, increments the "Gnomes Gnabbed" counter at $6122 (BCD), then plays sound effect $04 and finalizes via 9A60 (the gnome object is consumed). For any other kind, searches a weapon lookup buffer at $7C83 (via 88E3) -- if found, sets the Weapon-held flag $619E (and possibly a variant at $619F depending on a $3C check) instead of picking the object straight up; either way, the found record's pointer is stored into 6110 (now "held") and 6895 is called (equip/HUD update?), then sound effect $04 plays.
DROP ($8BC4, something currently held): writes the CURRENT ROOM into the held item's table record (byte0), restoring it to the world -- the same field that item-table entries have their room zeroed on pickup (see Room-Format.md). Re-derives the item's stored Y/X (record bytes 1/2) from the player's own position ($8DBB/$8DBC, grid-aligned) -- i.e. the item is dropped at the player's feet. Exact bit-packing of the combined Y/X byte not fully resolved.
|
||||
| 8AFB | LD A,($6186) | |||
| 8AFE | BIT 4,A | |||
| 8B00 | RET Z | |||
| 8B01 | LD A,($619E) | get Weapon-held flag | ||
| 8B04 | AND A | |||
| 8B05 | JP NZ,$8D8D | => Attack | ||
| 8B08 | LD (IX+$0F),$00 | |||
| 8B0C | CALL $923E | Save continuation | ||
| 8B0F | LD HL,$8944 | |||
| 8B12 | CALL $99A7 | |||
| 8B15 | RET NC | |||
| 8B16 | LD A,($8DBD) | |||
| 8B19 | ADD A,$04 | |||
| 8B1B | LD ($8DBD),A | |||
| 8B1E | LD (IX+$0F),$00 | |||
| 8B22 | LD HL,$8968 | |||
| 8B25 | LD ($8DB9),HL | set player behaviour-handler pointer | ||
| 8B28 | JP $8B2B | |||
| 8B2B | LD HL,($6110) | |||
| 8B2E | LD DE,$788A | |||
| 8B31 | AND A | |||
| 8B32 | SBC HL,DE | |||
| 8B34 | JP NZ,$8BC4 | |||
| 8B37 | LD A,($8DBD) | |||
| 8B3A | SUB $08 | |||
| 8B3C | LD ($8DBD),A | |||
| 8B3F | CALL $9A60 | Dynamic object finalizer | ||
| 8B42 | JR C,$8BB9 | |||
| 8B44 | LD (IX+$16),$04 | |||
| 8B48 | LD HL,$8DEF | |||
| 8B4B | CALL $9B5D | |||
| 8B4E | JR NC,$8BB9 | |||
| 8B50 | LD HL,$0008 | |||
| 8B53 | ADD HL,DE | |||
| 8B54 | LD A,(HL) | |||
| 8B55 | CP $44 | |||
| 8B57 | JR NZ,$8B5C | |||
| 8B59 | EX DE,HL | |||
| 8B5A | JR $8B4B | |||
| 8B5C | PUSH DE | |||
| 8B5D | LD IY,$7CAC | |||
| 8B61 | CALL $88D7 | Add a bonus to the score, value from a circular queue via 88B9 | ||
| 8B64 | POP DE | |||
| 8B65 | LD HL,$0002 | |||
| 8B68 | ADD HL,DE | |||
| 8B69 | LD (HL),$FF | |||
| 8B6B | LD HL,$000E | |||
| 8B6E | ADD HL,DE | |||
| 8B6F | LD A,(HL) | |||
| 8B70 | INC HL | |||
| 8B71 | LD H,(HL) | |||
| 8B72 | LD L,A | |||
| 8B73 | LD (HL),$00 | |||
| 8B75 | EX DE,HL | |||
| 8B76 | LD BC,$0008 | |||
| 8B79 | ADD HL,BC | |||
| 8B7A | LD A,(HL) | |||
| 8B7B | CP $6E | |||
| 8B7D | JR NZ,$8B84 | |||
| 8B7F | CALL $6622 | Use an oil can | ||
| 8B82 | JR $8BB9 | |||
| 8B84 | CP $36 | |||
| 8B86 | JR NZ,$8B9A | |||
| 8B88 | LD HL,$5000 | |||
| 8B8B | CALL $888E | Add a bonus (HL, 5-digit BCD) to the score, then redraw the score display | ||
| 8B8E | LD A,($6122) | get "Gnomes Gnabbed" end-game stat counter | ||
| 8B91 | ADD A,$01 | |||
| 8B93 | DAA | |||
| 8B94 | LD ($6122),A | set "Gnomes Gnabbed" end-game stat counter | ||
| 8B97 | JP $8BB4 | |||
| 8B9A | CALL $88E3 | Search the buffer at $7C83 for byte A | ||
| 8B9D | JR NZ,$8BAD | |||
| 8B9F | LD ($619F),A | |||
| 8BA2 | CP $3C | |||
| 8BA4 | LD A,$03 | |||
| 8BA6 | JR NZ,$8BAA | |||
| 8BA8 | LD A,$02 | |||
| 8BAA | LD ($619E),A | set Weapon-held flag | ||
| 8BAD | LD ($6110),DE | |||
| 8BB1 | CALL $6895 | Draw the currently-held item's icon, and its ammo count if it's a weapon, on HUD | ||
| 8BB4 | LD A,$04 | |||
| 8BB6 | CALL $848E | Request sound effect A | ||
| 8BB9 | LD A,($8DBD) | |||
| 8BBC | ADD A,$08 | |||
| 8BBE | LD ($8DBD),A | |||
| 8BC1 | JP $9A60 | => Dynamic object finalizer | ||
| 8BC4 | LD HL,($6110) | |||
| 8BC7 | LD A,($6126) | get room number | ||
| 8BCA | LD (HL),A | |||
| 8BCB | INC HL | |||
| 8BCC | LD A,($8DBB) | |||
| 8BCF | AND $F8 | |||
| 8BD1 | LD (HL),A | |||
| 8BD2 | LD A,($8DBC) | |||
| 8BD5 | RRCA | |||
| 8BD6 | RRCA | |||
| 8BD7 | RRCA | |||
| 8BD8 | AND $07 | |||
| 8BDA | OR (HL) | |||
| 8BDB | INC A | |||
| 8BDC | LD (HL),A | |||
| 8BDD | INC HL | |||
| 8BDE | LD A,($8DBD) | |||
| 8BE1 | SUB $10 | |||
| 8BE3 | LD (HL),A | |||
| 8BE4 | PUSH IX | |||
| 8BE6 | LD HL,($6110) | |||
| 8BE9 | CALL $6663 | Spawn the room's creature | ||
| 8BEC | CALL $9BF0 | Collision test | ||
| 8BEF | JR C,$8C0F | |||
| 8BF1 | LD A,($6126) | get room number | ||
| 8BF4 | CALL $6880 | Count item-table entries whose room byte matches A | ||
| 8BF7 | CP $04 | |||
| 8BF9 | JP NC,$8C15 | |||
| 8BFC | LD HL,$788A | |||
| 8BFF | LD ($6110),HL | |||
| 8C02 | CALL $6895 | Draw the currently-held item's icon, and its ammo count if it's a weapon, on HUD | ||
| 8C05 | LD A,$04 | |||
| 8C07 | CALL $848E | Request sound effect A | ||
| 8C0A | POP IX | |||
| 8C0C | JP $9A60 | => Dynamic object finalizer | ||
| 8C0F | CALL $8C35 | Weapon hit-response text | ||
| 8C12 | JP $8C27 | |||
| 8C15 | CALL $8513 | Print a message-window string | ||
| 8C18 | DEFB $28 | attribute/control byte for 8513's inline string | ||
| 8C19 | DEFM " FULL! ",$5E | message text, terminated by $5E | ||
| 8C27 | LD HL,($6110) | |||
| 8C2A | LD (HL),$00 | |||
| 8C2C | LD (IX+$02),$FF | |||
| 8C30 | POP IX | |||
| 8C32 | JP $9A60 | => Dynamic object finalizer | ||
|
Prints a fixed "BLOCKED" message via 8513, then returns. $8513 never falls through to the next instruction, it jumps past its own inline string data via a computed address, so the bytes immediately following this CALL are the message's attribute/text/terminator, not code (previously misread as a Z/NZ dispatch into $8C3A/$8C3C/$8C45; those were artifacts of disassembling string bytes as instructions).
|
||||
| 8C35 | CALL $8513 | Print a message-window string | ||
| 8C38 | DEFB $28 | attribute/control byte for 8513's inline string | ||
| 8C39 | DEFM " BLOCKED ",$5E | message text "BLOCKED", terminated by $5E | ||
| 8C47 | RET | |||
|
|
||||
| 8C48 | DEFB $3E,$01,$32,$C5,$8D,$AF,$32,$29 | |||
| 8C50 | DEFB $8E,$3E,$05,$CD,$8E,$84,$DD,$36 | |||
| 8C58 | DEFB $0B,$06,$CD,$3E,$92,$21,$20,$89 | |||
| 8C60 | DEFB $CD,$D5,$99,$D0,$3E,$07,$CD,$8E | |||
| 8C68 | DEFB $84,$DD,$36,$0F,$00,$CD,$3E,$92 | |||
| 8C70 | DEFB $DD,$CB,$0D,$76,$20,$0D,$DD,$CB | |||
| 8C78 | DEFB $0D,$E6,$3A,$BD,$8D,$C6,$02,$32 | |||
| 8C80 | DEFB $BD,$8D,$C9,$DD,$36,$0B,$06,$DD | |||
| 8C88 | DEFB $36,$0D,$01,$DD,$36,$05,$34,$DD | |||
| 8C90 | DEFB $36,$06,$34,$DD,$36,$07,$28,$DD | |||
| 8C98 | DEFB $36,$0A,$00,$DD,$36,$0F,$00,$21 | |||
| 8CA0 | DEFB $68,$89,$22,$B9,$8D,$3E,$01,$C3 | |||
| 8CA8 | DEFB $FC,$97,$DD,$CB,$0D,$B6,$CD,$3E | |||
| 8CB0 | DEFB $92,$CD,$BE,$7E,$3A,$86,$61,$E6 | |||
| 8CB8 | DEFB $1F,$C8,$CD,$3E,$92,$DD,$CB,$0D | |||
| 8CC0 | DEFB $76,$20,$10,$DD,$7E,$06,$D6,$02 | |||
| 8CC8 | DEFB $FE,$1C,$DA,$C9,$89,$CD,$D9,$8A | |||
| 8CD0 | DEFB $C3,$C9,$89,$DD,$CB,$0D,$B6,$3E | |||
| 8CD8 | DEFB $FF | |||
|
|
||||
| 8CD9 | DEFM "2za" | |||
|
|
||||
| 8CDC | DEFB $C3,$C9,$89 | |||
|
Used by the routine at 8968.
|
||||
|
Decrements the global depth counter $8DBD, capped at $28, testing collision each step, clearing the ledge/climb flags (IX+0x0D bits 0/1) on success.
|
||||
| 8CDF | LD HL,$8DBD | HL = the global depth counter $8DBD, A = $28, the cap | ||
| 8CE2 | LD A,$28 | |||
| 8CE4 | CP (HL) | If already at or past the cap, return | ||
| 8CE5 | RET NC | |||
| 8CE6 | DEC (HL) | Decrement the depth counter | ||
| 8CE7 | CALL $9BF0 | Collision test | ||
| 8CEA | RET NC | If successful, no collision, return with the new depth | ||
| 8CEB | RES 0,(IX+$0D) | Blocked: clear the ledge/climb flags (IX+0x0D bits 0/1) | ||
| 8CEF | RES 1,(IX+$0D) | |||
| 8CF3 | LD HL,$8DBD | HL = the depth counter, increment it back, undoing the failed step | ||
| 8CF6 | INC (HL) | |||
| 8CF7 | RET | |||
|
|
||||
| 8CF8 | DEFB $FB,$01,$16,$16,$FE,$FF,$FB,$04 | |||
| 8D00 | DEFB $02,$02,$FE,$FF,$FB,$02,$82,$82 | |||
| 8D08 | DEFB $FE,$FF,$FB,$06,$96,$96,$FE,$FF | |||
| 8D10 | DEFB $FF | |||
|
|
||||
|
Auto-walks the player object toward a fixed target position ($952B,$952C) over multiple frames, continuations via 923E, moving X then Y by up to 5px per call or snapping directly if already within 5px. Once both axes match, runs a settle animation via 8CF8/99D5 and waits for the player's depth ($8DBD) to reach $18 before restoring the normal per-frame handler 8968 and calling 8A87 to complete the room transition. Used for the scripted walk-in after entering a room via a door/lift.
|
||||
| 8D11 | LD (IX+$0F),$00 | |||
| 8D15 | CALL $923E | Save continuation | ||
| 8D18 | LD B,$02 | |||
| 8D1A | LD C,$02 | |||
| 8D1C | LD A,($952B) | |||
| 8D1F | SUB (IX+$05) | |||
| 8D22 | JR NC,$8D2A | |||
| 8D24 | NEG | |||
| 8D26 | LD B,$FE | |||
| 8D28 | LD C,$01 | |||
| 8D2A | CP $05 | |||
| 8D2C | JR NC,$8D36 | |||
| 8D2E | LD A,($952B) | |||
| 8D31 | LD (IX+$05),A | |||
| 8D34 | JR $8D43 | |||
| 8D36 | LD A,(IX+$05) | |||
| 8D39 | ADD A,B | |||
| 8D3A | LD (IX+$05),A | |||
| 8D3D | LD (IX+$0B),C | |||
| 8D40 | JP $89C9 | |||
| 8D43 | CALL $923E | Save continuation | ||
| 8D46 | LD B,$02 | |||
| 8D48 | LD C,$04 | |||
| 8D4A | LD A,($952C) | |||
| 8D4D | SUB (IX+$06) | |||
| 8D50 | JR NC,$8D58 | |||
| 8D52 | NEG | |||
| 8D54 | LD B,$FE | |||
| 8D56 | LD C,$06 | |||
| 8D58 | CP $05 | |||
| 8D5A | JR NC,$8D64 | |||
| 8D5C | LD A,($952C) | |||
| 8D5F | LD (IX+$06),A | |||
| 8D62 | JR $8D71 | |||
| 8D64 | LD A,(IX+$06) | |||
| 8D67 | ADD A,B | |||
| 8D68 | LD (IX+$06),A | |||
| 8D6B | LD (IX+$0B),C | |||
| 8D6E | JP $89C9 | |||
| 8D71 | LD (IX+$0F),$00 | |||
| 8D75 | CALL $923E | Save continuation | ||
| 8D78 | LD HL,$8CF8 | |||
| 8D7B | CALL $99D5 | Sprite-animation stepper | ||
| 8D7E | LD A,($8DBD) | |||
| 8D81 | CP $18 | |||
| 8D83 | RET NC | |||
| 8D84 | LD HL,$8968 | |||
| 8D87 | LD ($8DB9),HL | set player behaviour-handler pointer | ||
| 8D8A | JP $8A87 | => Attempt to move to an adjacent room | ||
|
Used by the routine at 8AFB.
|
||||
|
Calls 9923 (spawns the weapon projectile); if it returns Carry (meaning not fully confirmed -- possibly "could not spawn"), jumps to 8C35 (hit-response/reward text) directly. Otherwise calls 68C1 (consume ammo, auto-drop if empty), plays a firing animation via the $8956 table, then restores the normal player handler 8968. The actual hit detection happens later, asynchronously, in the projectile's own per-frame handler (9963).
|
||||
| 8D8D | PUSH IX | |||
| 8D8F | LD A,($619F) | |||
| 8D92 | CALL $9923 | Spawn the weapon projectile object (thrown from the player's position, facing $8DC1), handler 9963 | ||
| 8D95 | POP IX | |||
| 8D97 | JP C,$8C35 | => Weapon hit-response text | ||
| 8D9A | CALL $68C1 | Consume one shot of ammo | ||
| 8D9D | LD (IX+$0F),$00 | |||
| 8DA1 | CALL $923E | Save continuation | ||
| 8DA4 | LD HL,$8956 | |||
| 8DA7 | CALL $99A7 | |||
| 8DAA | RET NC | |||
| 8DAB | LD (IX+$0F),$00 | |||
| 8DAF | LD HL,$8968 | |||
| 8DB2 | LD ($8DB9),HL | set player behaviour-handler pointer | ||
| 8DB5 | RET | |||
|
|
||||
|
The player is an object record with the same layout as the dynamic pool records (see A900), statically allocated here. Fields: +0/+1 = $8DCF (link to the next record in the active object list); +2 = current room number (mirrors $6126); +3/+4 = $8968 -- the player's per-frame behaviour handler (8968), SWAPPABLE: 955A tests it against $8968 ("is the player in the normal state?") and 9564 swaps it to 8D11 (an alternate player state); +5/+6 = player Y/X position -- these are the $8DBB/$8DBC bytes referenced by proximity checks all over the code; +16..+19 = previous/target position pair (unconfirmed). The active object list runs: ($610E head) -> newest spawned objects ... -> $8DB6 (player) -> $8DCF -> $8DEF -> $0000 end.
|
||||
| 8DB6 | DEFW $8DCF | link to next object record ($8DCF) | ||
| 8DB8 | DEFB $02 | current room number | ||
| 8DB9 | DEFW $8968 | player behaviour-handler pointer (normally 8968; swapped for state changes, e.g. 8D11) | ||
| 8DBB | DEFB $34,$1C | player Y/X position | ||
| 8DBD | DEFB $28,$02,$00,$00,$04,$AA,$00,$00 | |||
| 8DC5 | DEFB $01,$32,$1A,$35,$1D,$00,$02,$0D | |||
| 8DCD | DEFB $14,$00 | |||
|
Second fixed object record (purpose not yet identified). Link points to $8DEF. Its state block (+2 onward, at $8DD1) is re-initialized with 22 bytes from $5C92 by 8F82 during room setup.
|
||||
| 8DCF | DEFW $8DEF | link to next object record ($8DEF) | ||
| 8DD1 | DEFB $00,$00,$00,$00,$00,$17,$00,$00 | |||
| 8DD9 | DEFB $00,$00,$00,$00,$00,$01,$00,$00 | |||
| 8DE1 | DEFB $00,$00,$00,$00,$00,$00 | |||
| 8DE7 | DEFB $00,$00,$00,$64,$32,$00,$00,$00 | |||
|
Third fixed object record -- also the CREATURE insertion point: 6663 passes IX=$8DEF into 84AE, so the room's creature gets spliced into the list right after this record. Link field is $0000 (list end) when the room has no creature. State block (+2 onward, at $8DF1) re-initialized from $5C92 by 8F82.
|
||||
| 8DEF | DEFW $0000 | link to next object record ($0000 = list end, or the room's creature) | ||
| 8DF1 | DEFB $00,$00,$00,$00,$00,$17,$00,$00 | |||
| 8DF9 | DEFB $00,$00,$00,$00,$00,$01,$00,$00 | |||
| 8E01 | DEFB $00,$00,$00,$00,$00,$00 | |||
| 8E07 | DEFB $00,$00,$00,$64,$32,$00,$00,$00 | |||
| 8E0F | DEFB $27,$8E,$02,$71,$94,$34,$1C,$18 | |||
| 8E17 | DEFB $0B,$0C,$00,$04,$5E,$00,$00,$02 | |||
| 8E1F | DEFB $00,$00,$00,$00,$00,$03,$00,$0C | |||
| 8E27 | DEFB $00,$00,$02,$9E,$94,$34,$22,$40 | |||
| 8E2F | DEFB $5A,$00,$01,$00,$B2,$00,$00,$02 | |||
|
|
||||
| 8E37 | DEFM "3!4\"" | |||
|
|
||||
| 8E3B | DEFB $00,$01,$18,$18 | |||
|
Used by the routine at 6269.
|
||||
| 8E3F | INC HL | Advance HL past the grid-value byte, decrement the outer loop count | ||
| 8E40 | DEC B | |||
| 8E41 | PUSH AF | Save AF, BC, HL, DE | ||
| 8E42 | PUSH BC | |||
| 8E43 | PUSH HL | |||
| 8E44 | PUSH DE | |||
| 8E45 | LD A,(HL) | A = the next template byte, the spawn kind, store it into the new record's kind field | ||
| 8E46 | LD (IX+$00),A | |||
| 8E49 | LD IX,$610E | IX = the active-object list head $610E, the insertion point | ||
| 8E4D | CALL $84AE | Dynamic object allocator | ||
| 8E50 | DEFW $9684 | Dynamic object handler address (9684) | ||
| 8E52 | POP DE | Restore the template pointer (DE->A), A = the grid index low byte | ||
| 8E53 | LD A,E | |||
| 8E54 | CALL $6254 | Set object position (IX+5/+6) from grid index A | ||
| 8E57 | POP HL | Restore and re-save the grid-cell pointer | ||
| 8E58 | PUSH HL | |||
| 8E59 | LD C,$18 | C = $18, a fixed row-height parameter, A = this cell's terrain code | ||
| 8E5B | LD A,(HL) | |||
| 8E5C | AND A | |||
| 8E5D | JR Z,$8E86 | If the code is 0, no terrain shape, skip to the finalize path | ||
| 8E5F | LD L,A | HL = the terrain code, widened to a word | ||
| 8E60 | LD H,$00 | |||
| 8E62 | ADD HL,HL | Double it, DE = the shape-table base $7556 | ||
| 8E63 | LD DE,$7556 | |||
| 8E66 | ADD HL,DE | HL = this code's shape-table entry, A = its first byte, advance | ||
| 8E67 | LD A,(HL) | |||
| 8E68 | INC HL | |||
| 8E69 | LD H,(HL) | Read the shape record's address (H,L) and row count (B), rejoin the shared finalize path | ||
| 8E6A | LD L,A | |||
| 8E6B | LD B,(HL) | |||
| 8E6C | JR $8E83 | |||
|
|
||||
|
Computes (+0x07) from the room's terrain shape table ($74CE/$750B, summed over B grid rows), then finalizes the object.
|
||||
| 8E6E | PUSH BC | Save BC, HL, the shape-record pointer and row count | ||
| 8E6F | PUSH HL | |||
| 8E70 | LD A,(HL) | A = the terrain code at this row's cell | ||
| 8E71 | CALL $9AAB | Search the (key,data) pair table at $74CE for key A | ||
| 8E74 | LD A,(HL) | A = the matched data byte, compute A*3, an index into the size table | ||
| 8E75 | ADD A,A | |||
| 8E76 | ADD A,(HL) | |||
| 8E77 | LD C,A | |||
| 8E78 | LD B,$00 | BC = the index, HL = table $750B | ||
| 8E7A | LD HL,$750B | |||
| 8E7D | ADD HL,BC | HL = this entry's byte, A = the height contribution | ||
| 8E7E | LD A,(HL) | |||
| 8E7F | POP HL | Restore HL, BC, accumulate the height sum in C | ||
| 8E80 | POP BC | |||
| 8E81 | ADD A,C | |||
| 8E82 | LD C,A | |||
|
This entry point is used by the routine at 8E3F.
|
||||
| 8E83 | INC HL | Advance to the next row, loop | ||
| 8E84 | DJNZ $8E6E | |||
|
This entry point is used by the routine at 8E3F.
|
||||
| 8E86 | LD (IX+$07),C | Store the summed height (+0x07), set kind (+0x0A=$04) and flags (+0x0D=$88) | ||
| 8E89 | LD (IX+$0A),$04 | |||
| 8E8D | LD (IX+$0D),$88 | |||
| 8E91 | CALL $9A60 | Dynamic object finalizer | ||
| 8E94 | LD (IX+$16),$00 | Clear +0x16, restore HL/BC, advance to the next template field, decrement the outer row-count B | ||
| 8E98 | POP HL | |||
| 8E99 | POP BC | |||
| 8E9A | INC HL | |||
| 8E9B | DEC B | |||
| 8E9C | LD A,(HL) | Read the linked-record index byte, store it to +0x0E | ||
| 8E9D | LD (IX+$0E),A | |||
| 8EA0 | POP AF | Restore AF, set the sprite number (+0x08=$23) | ||
| 8EA1 | LD (IX+$08),$23 | |||
| 8EA5 | XOR A | Clear A, return | ||
| 8EA6 | RET | |||
|
Used by the routine at 6269.
|
||||
|
Called from 62C8 with A=the special value ($66 or $6A) and HL pointing just past it in the template/extras stream. Self-modifies its own 8EC3 operand with A (so the spawned object's initial "kind" byte matches whichever of $66/$6A triggered it). Clears the grid cell to 0 (so the special value never appears in the finished grid -- see 612C). Reads 2 more bytes from the template beyond the normal (index,value) pair -- these are NOT accounted for by the outer 62C8 loop's own HL advancement; instead the routine forces two extra DEC B's (at $8EE8/$8EE9), ending that loop one iteration early to compensate (see 6CCF). Sets up IX=$610E (the active-object list head) as the insertion point, then CALLs 84AE to allocate an object record -- its handler address (8EB9) is 957C. Populates further record fields (offset $07=$18, $0A=$06, $09=triggering value, $0B and $0E=first extra byte, $14=second extra byte), then CALLs 9A60 to finalize. The two extra bytes' exact meaning (screen position? direction?) is not yet confirmed. Offset $09 (the triggering value) reads back as $00 afterward, suggesting it's consumed during finalization.
|
||||
| 8EA7 | LD ($8EC6),A | Self-modify 8EC3's operand with the triggering value ($66 or $6A) | ||
| 8EAA | LD (IX+$00),$00 | Clear the new record's own +0x00 field (defensive init) | ||
| 8EAE | PUSH HL | Save HL, BC | ||
| 8EAF | PUSH BC | |||
| 8EB0 | DEC HL | back up one byte to clear the grid cell | ||
| 8EB1 | PUSH HL | |||
| 8EB2 | LD IX,$610E | IX = the active-object list head $610E, the insertion point | ||
| 8EB6 | CALL $84AE | Dynamic object allocator | ||
| 8EB9 | DEFW $957C | Dynamic object handler address (957C) | ||
| 8EBB | LD (IX+$07),$18 | Set height (+0x07=$18) and kind (+0x0A=$06) | ||
| 8EBF | LD (IX+$0A),$06 | |||
| 8EC3 | LD (IX+$09),$66 | !!MUT-ARG!! patched by 8EA7 with the triggering value ($66 or $6A) | ||
| 8EC7 | POP HL | Restore HL, A = the grid index | ||
| 8EC8 | LD A,(HL) | |||
| 8EC9 | CALL $6254 | Set object position (IX+5/+6) from grid index A | ||
| 8ECC | INC HL | Advance past the index and value bytes to the first extra byte | ||
| 8ECD | INC HL | |||
| 8ECE | LD A,(HL) | |||
| 8ECF | LD (IX+$0E),A | Read it and store into both the linked-record index (+0x0E) and facing (+0x0B) | ||
| 8ED2 | LD (IX+$0B),A | |||
| 8ED5 | INC HL | Advance to the second extra byte | ||
| 8ED6 | LD A,(HL) | Read it and store into +0x14 | ||
| 8ED7 | LD (IX+$14),A | |||
| 8EDA | CALL $9A60 | Dynamic object finalizer | ||
| 8EDD | POP BC | Restore BC, HL | ||
| 8EDE | POP HL | |||
| 8EDF | INC HL | advance HL past the two extra bytes | ||
| 8EE0 | LD A,(IX+$09) | A = the triggering value stored in the record, compare against $6A | ||
| 8EE3 | CP $6A | |||
| 8EE5 | JR Z,$8EEC | If it's the full-strength variant ($6A), take the branch below | ||
| 8EE7 | INC HL | Weak variant: force two extra DEC B's to compensate 62C8's loop count, then clear A and return | ||
| 8EE8 | DEC B | |||
| 8EE9 | DEC B | |||
| 8EEA | XOR A | |||
| 8EEB | RET | |||
| 8EEC | LD (IX+$14),$E0 | Full-strength: set +0x14=$E0 instead | ||
| 8EF0 | JR $8EE9 | Then join the same DEC-B compensation above | ||
|
Used by the routine at 6269.
|
||||
| 8EF2 | LD (IX+$00),$00 | |||
| 8EF6 | PUSH HL | |||
| 8EF7 | PUSH BC | |||
| 8EF8 | DEC HL | |||
| 8EF9 | PUSH HL | |||
| 8EFA | LD IX,$610E | |||
| 8EFE | CALL $84AE | Dynamic object allocator | ||
| 8F01 | DEFW $94EE | Dynamic object handler address (94EE) | ||
| 8F03 | LD (IX+$07),$18 | |||
| 8F07 | LD (IX+$0A),$19 | |||
| 8F0B | LD (IX+$0D),$08 | |||
| 8F0F | POP HL | |||
| 8F10 | LD A,(HL) | |||
| 8F11 | CALL $6254 | Set object position (IX+5/+6) from grid index A | ||
| 8F14 | INC (IX+$05) | |||
| 8F17 | CALL $9A60 | Dynamic object finalizer | ||
|
This entry point is used by the routine at 8F4C.
|
||||
| 8F1A | POP BC | |||
| 8F1B | POP HL | |||
| 8F1C | XOR A | |||
| 8F1D | RET | |||
|
Used by the routine at 6269.
|
||||
| 8F1E | LD (IX+$00),$00 | |||
| 8F22 | PUSH HL | |||
| 8F23 | PUSH BC | |||
| 8F24 | DEC HL | |||
| 8F25 | PUSH HL | |||
| 8F26 | LD IX,$610E | |||
| 8F2A | CALL $84AE | Dynamic object allocator | ||
| 8F2D | DEFW $952D | Dynamic object handler address (952D) | ||
| 8F2F | LD (IX+$07),$18 | |||
| 8F33 | LD (IX+$0A),$06 | |||
| 8F37 | POP HL | |||
| 8F38 | LD A,(HL) | |||
| 8F39 | CALL $6254 | Set object position (IX+5/+6) from grid index A | ||
| 8F3C | CALL $62F9 | Test whether the current room is this level's Plug Room | ||
| 8F3F | JR NZ,$8F17 | |||
| 8F41 | LD (IX+$05),$20 | |||
| 8F45 | LD (IX+$06),$20 | |||
| 8F49 | JP $8F17 | |||
|
Used by the routine at 6269.
|
||||
| 8F4C | LD (IX+$00),$00 | |||
| 8F50 | PUSH HL | |||
| 8F51 | PUSH BC | |||
| 8F52 | CALL $62F9 | Test whether the current room is this level's Plug Room | ||
| 8F55 | LD A,(HL) | |||
| 8F56 | AND $0F | |||
| 8F58 | CP $0F | |||
| 8F5A | JP Z,$8F1A | |||
| 8F5D | LD IX,$610E | |||
| 8F61 | CALL $84AE | Dynamic object allocator | ||
| 8F64 | DEFW $94F4 | Dynamic object handler address (94F4) | ||
| 8F66 | LD (IX+$07),$19 | |||
| 8F6A | LD (IX+$05),$20 | |||
| 8F6E | LD (IX+$06),$20 | |||
| 8F72 | LD A,$48 | |||
| 8F74 | LD (IX+$08),A | |||
| 8F77 | CALL $9AAB | Search the (key,data) pair table at $74CE for key A | ||
| 8F7A | LD A,(HL) | |||
| 8F7B | LD (IX+$0A),A | |||
| 8F7E | JP $8F17 | |||
|
|
||||
| 8F81 | DEFS $01 | |||
|
Used by the routine at 676D.
|
||||
|
Re-initializes the two fixed object records, then spawns pairs from the 75B5 spawner table.
After resetting the $8DCF/$8DEF state blocks, walks the spawner table at $75B6 looking for a record whose embedded room-list contains the current room. On a match, spawns a PAIR of objects (handler 9021), chained to each other via +0x18/+0x19, sharing fields copied from the record (position/type) plus a couple of pseudo-randomized flag bytes derived from the Z80 R register. Table format matches 75B5's (len, marker, handler_word, Y, X, type, flags, room-list...) records.
|
||||
| 8F82 | LD HL,$5C92 | copy the 19-byte default state block into $8DD1 (second fixed record) | ||
| 8F85 | LD DE,$8DD1 | |||
| 8F88 | LD BC,$0016 | |||
| 8F8B | LDIR | |||
| 8F8D | LD HL,$5C92 | HL = the default state block, DE = $8DF1 (third fixed record) | ||
| 8F90 | LD DE,$8DF1 | |||
| 8F93 | LD BC,$0016 | copy it over | ||
| 8F96 | LDIR | |||
| 8F98 | LD A,$02 | set the spawn-pair counter $8F81 = 2 | ||
| 8F9A | LD ($8F81),A | |||
| 8F9D | LD IX,$8DCF | IX = the creature insertion point $8DCF, HL = spawner table $75B6 | ||
| 8FA1 | LD HL,$75B6 | HL = the spawner table $75B6 | ||
| 8FA4 | LD A,(HL) | *loop: A = this record's length minus its 8-byte header | ||
| 8FA5 | SUB $08 | |||
| 8FA7 | RET C | underflowed: end of table | ||
| 8FA8 | LD C,A | C = room-list length, B = 0 | ||
| 8FA9 | LD B,$00 | |||
| 8FAB | EX DE,HL | DE = the record pointer | ||
| 8FAC | INC DE | A = the record's active flag (offset 1) | ||
| 8FAD | LD A,(DE) | |||
| 8FAE | DEC DE | |||
| 8FAF | AND A | inactive: skip this record | ||
| 8FB0 | JR Z,$8FBD | |||
| 8FB2 | LD HL,$0008 | HL = the room-list start (record + 8) | ||
| 8FB5 | ADD HL,DE | |||
| 8FB6 | LD A,($6126) | get room number | ||
| 8FB9 | CPIR | search the room-list for the current room, branch to spawn if found | ||
| 8FBB | JR Z,$8FC4 | |||
| 8FBD | EX DE,HL | not found: E = this record's total length | ||
| 8FBE | LD E,(HL) | |||
| 8FBF | LD D,$00 | |||
| 8FC1 | ADD HL,DE | advance past it, loop back | ||
| 8FC2 | JR $8FA4 | |||
| 8FC4 | EX DE,HL | found: store this object's own pointer into +0x18/+0x19 (pair self-link) | ||
| 8FC5 | LD (IX+$18),L | |||
| 8FC8 | LD (IX+$19),H | |||
| 8FCB | INC HL | advance HL, write A back to this position | ||
| 8FCC | LD (HL),A | |||
| 8FCD | PUSH IX | DE = the new object record | ||
| 8FCF | POP DE | |||
| 8FD0 | INC DE | skip its first two fields | ||
| 8FD1 | INC DE | |||
| 8FD2 | LD BC,$0005 | BC = 5, copy 5 bytes from the record (position/type fields) | ||
| 8FD5 | LDIR | |||
| 8FD7 | LD A,(HL) | store the record's next byte into +0x0A (kind) | ||
| 8FD8 | LD (IX+$0A),A | |||
| 8FDB | INC HL | store the following byte into +0x1A | ||
| 8FDC | LD A,(HL) | |||
| 8FDD | LD (IX+$1A),A | |||
| 8FE0 | LD A,R | derive a pseudo-random flag byte from the R register, store to +0x1C | ||
| 8FE2 | AND $7F | |||
| 8FE4 | OR $01 | |||
| 8FE6 | LD (IX+$1C),A | derive a second flag byte, store to +0x1B | ||
| 8FE9 | XOR $0E | |||
| 8FEB | LD (IX+$1B),A | |||
| 8FEE | LD (IX+$07),$28 | height (+0x07) = $28 (fixed) | ||
| 8FF2 | LD (IX+$0B),$01 | facing (+0x0B) = 1 | ||
| 8FF6 | LD (IX+$0F),$01 | phase (+0x0F) = 1 | ||
| 8FFA | SET 7,(IX+$0D) | set bit 7 of +0x0D | ||
| 8FFE | LD HL,$9021 | HL = handler address $9021 | ||
| 9001 | LD (IX+$03),L | store the handler into +0x03/+0x04 | ||
| 9004 | LD (IX+$04),H | |||
| 9007 | CALL $9A60 | Dynamic object finalizer | ||
| 900A | LD HL,$8F81 | decrement the spawn-pair counter, done if it reaches zero | ||
| 900D | DEC (HL) | |||
| 900E | RET Z | |||
| 900F | LD E,(IX+$18) | DE = the spawner record pointer (+0x18/+0x19) | ||
| 9012 | LD D,(IX+$19) | |||
| 9015 | LD L,(IX+$00) | HL = the paired object's own address | ||
| 9018 | LD H,(IX+$01) | |||
| 901B | PUSH HL | |||
| 901C | POP IX | |||
| 901E | JP $8FBD | loop back to spawn the second paired object | ||
|
|
||||
|
Searches the table pointed by (IX+$18/$19) for a matching entry ($619A), then applies position/facing changes over several frames via 923E continuations.
|
||||
| 9021 | LD L,(IX+$18) | HL = the linked spawner-record pointer (+0x18/+0x19) | ||
| 9024 | LD H,(IX+$19) | |||
| 9027 | LD A,(HL) | A = the record's kind byte minus 8, the waypoint-search length, C = it | ||
| 9028 | SUB $08 | |||
| 902A | LD C,A | |||
| 902B | LD B,$00 | B = 0, DE = 8, HL = the room-list start (record+8) | ||
| 902D | LD DE,$0008 | |||
| 9030 | ADD HL,DE | |||
| 9031 | LD A,($619A) | A = the target sprite $619A, search the room-list for it | ||
| 9034 | CPIR | |||
| 9036 | JR NZ,$9064 | not found: skip to the idle branch | ||
| 9038 | XOR A | Found: clear the search-target $619A, HL = the target position $619B | ||
| 9039 | LD ($619A),A | |||
| 903C | LD HL,($619B) | |||
| 903F | LD (IX+$05),L | Store it as the object's position (+0x05/+0x06) | ||
| 9042 | LD (IX+$06),H | |||
| 9045 | LD A,($619D) | A = the target facing $619D, store it (+0x0B), set the move counter (+0x09=10) | ||
| 9048 | LD (IX+$0B),A | |||
| 904B | LD (IX+$09),$0A | |||
| 904F | CALL $8ABB | Apply the object's facing direction to its position (IX+5/+6), returning the OLD position in BC | ||
| 9052 | CALL $9A60 | Dynamic object finalizer | ||
| 9055 | CALL $923E | Save continuation | ||
| 9058 | DEC (IX+$09) | Decrement the move counter, return unless it just reached 0 | ||
| 905B | RET NZ | |||
| 905C | LD (IX+$09),$0A | Reset the move counter to 10 | ||
| 9060 | CALL $9B5A | Collision/overlap scan | ||
| 9063 | RET C | Collision: abandon the animation without finalizing | ||
| 9064 | RES 7,(IX+$0D) | Clear bit 7 of the flags byte (+0x0D) | ||
| 9068 | LD L,(IX+$18) | HL = the record pointer again, advance past the header to the next-link field | ||
| 906B | LD H,(IX+$19) | |||
| 906E | INC HL | |||
| 906F | INC HL | |||
| 9070 | LD E,(HL) | Read the linked record's own pointer (E,D), swap into HL | ||
| 9071 | INC HL | |||
| 9072 | LD D,(HL) | |||
| 9073 | EX DE,HL | |||
| 9074 | JP $923F | Jump to the continuation there | ||
|
|
||||
| 9077 | DEFM "++,," | |||
|
|
||||
| 907B | DEFB $FF | |||
|
|
||||
| 907C | DEFM "))**" | |||
|
|
||||
| 9080 | DEFB $FF,$77,$90,$7C,$90 | |||
|
|
||||
|
Sets A=$72 and HL to the object's animation-table pointer $9081, then jumps into 90A8's shared creature AI setup body, a per-kind trampoline supplying its own table/param constants.
|
||||
| 9085 | LD A,$72 | A = $72, the initial width/param | ||
| 9087 | LD HL,$9081 | HL = the object's animation-table pointer $9081 | ||
| 908A | JP $90AD | => Jump into 90A8's shared creature AI setup | ||
|
|
||||
| 908D | DEFM "!!\"\"" | |||
|
|
||||
| 9091 | DEFB $FF,$1F,$1F,$20,$20,$FF,$01,$04 | |||
| 9099 | DEFB $02,$06,$01,$8D,$90,$92,$90,$00 | |||
| 90A1 | DEFB $08,$08,$00,$00,$08,$08,$00 | |||
|
|
||||
| 90A8 | LD A,$78 | |||
| 90AA | LD HL,$909C | |||
| 90AD | LD (IX+$1D),L | |||
| 90B0 | LD (IX+$1E),H | |||
| 90B3 | LD (IX+$1F),A | |||
| 90B6 | CALL $91A6 | Creature pause/transform step | ||
| 90B9 | LD HL,$90B6 | |||
| 90BC | LD ($9195),HL | |||
| 90BF | DEC (IX+$1C) | |||
| 90C2 | JP Z,$9140 | |||
| 90C5 | JP P,$90CB | |||
| 90C8 | INC (IX+$1C) | |||
| 90CB | DEC (IX+$1B) | |||
| 90CE | JP Z,$9109 | |||
| 90D1 | LD A,(IX+$1F) | |||
| 90D4 | AND A | |||
| 90D5 | JR Z,$9109 | |||
| 90D7 | LD HL,$5C78 | |||
| 90DA | LD A,($617C) | |||
| 90DD | ADD A,(HL) | |||
| 90DE | AND $FC | |||
| 90E0 | CP $0C | |||
| 90E2 | JR Z,$90F4 | |||
| 90E4 | CALL $8ABB | Apply the object's facing direction to its position (IX+5/+6), returning the OLD position in BC | ||
| 90E7 | PUSH BC | |||
| 90E8 | CALL $9BF0 | Collision test | ||
| 90EB | POP BC | |||
| 90EC | JR NC,$9103 | |||
| 90EE | LD (IX+$05),B | |||
| 90F1 | LD (IX+$06),C | |||
| 90F4 | LD A,(IX+$0B) | |||
| 90F7 | LD HL,$9097 | |||
| 90FA | LD BC,$0004 | |||
| 90FD | CPIR | |||
| 90FF | LD A,(HL) | |||
| 9100 | LD (IX+$0B),A | |||
| 9103 | CALL $99A1 | Direction-indexed sprite-animation stepper | ||
| 9106 | JP $9A60 | => Dynamic object finalizer | ||
| 9109 | LD (IX+$1B),$32 | |||
| 910D | LD HL,$911B | |||
| 9110 | LD ($9195),HL | |||
| 9113 | LD A,$06 | |||
| 9115 | CALL $848E | Request sound effect A | ||
| 9118 | CALL $923E | Save continuation | ||
| 911B | CALL $91A6 | Creature pause/transform step | ||
| 911E | DEC (IX+$1C) | |||
| 9121 | JR Z,$9140 | |||
| 9123 | JP P,$9129 | |||
| 9126 | INC (IX+$1C) | |||
| 9129 | DEC (IX+$1B) | |||
| 912C | JR Z,$9136 | |||
| 912E | BIT 5,(IX+$0D) | |||
| 9132 | JP Z,$925C | => Creature waypoint movement | ||
| 9135 | RET | |||
| 9136 | LD (IX+$1B),$64 | |||
| 913A | LD HL,$90B6 | |||
| 913D | JP $923F | |||
| 9140 | LD (IX+$1C),$05 | |||
| 9144 | PUSH IX | |||
| 9146 | POP IY | |||
| 9148 | LD IX,$610E | |||
| 914C | CALL $84AE | Dynamic object allocator | ||
| 914F | DEFW $94CA | Dynamic object handler address | ||
| 9151 | LD (IX+$0B),$05 | |||
| 9155 | LD A,(IY+$0B) | |||
| 9158 | AND $06 | |||
| 915A | LD L,A | |||
| 915B | LD H,$00 | |||
| 915D | LD DE,$90A0 | |||
| 9160 | ADD HL,DE | |||
| 9161 | LD A,(IY+$05) | |||
| 9164 | ADD A,(HL) | |||
| 9165 | LD (IX+$05),A | |||
| 9168 | INC HL | |||
| 9169 | LD A,(IY+$06) | |||
| 916C | ADD A,(HL) | |||
| 916D | LD (IX+$06),A | |||
| 9170 | LD A,(IY+$07) | |||
| 9173 | ADD A,$20 | |||
| 9175 | LD (IX+$07),A | |||
| 9178 | LD (IX+$0A),$03 | |||
| 917C | CALL $9A60 | Dynamic object finalizer | ||
| 917F | PUSH IY | |||
| 9181 | POP IX | |||
| 9183 | CALL $923E | Save continuation | ||
| 9186 | CALL $91A6 | Creature pause/transform step | ||
| 9189 | CALL $99A1 | Direction-indexed sprite-animation stepper | ||
| 918C | DEC (IX+$1C) | Decrement the pause timer (+0x1C), return unless it just expired | ||
| 918F | RET NZ | |||
| 9190 | LD (IX+$1C),$32 | Reset the pause timer to $32 | ||
| 9194 | LD HL,$0000 | !!MUT-ARG!! patched by 90BC and 9110 with the resume address | ||
| 9197 | JP $923F | Jump to the continuation there | ||
|
|
||||
| 919A | DEFB $1A,$1A,$9A,$9A,$1B,$1B,$9B,$9B | |||
| 91A2 | DEFB $1A,$1A,$FF,$FF | |||
|
Used by the routine at 90A8.
|
||||
| 91A6 | BIT 2,(IX+$0D) | |||
| 91AA | RET Z | |||
| 91AB | RES 2,(IX+$0D) | |||
| 91AF | LD A,(IX+$09) | |||
| 91B2 | CP (IX+$1F) | |||
| 91B5 | RET NZ | |||
| 91B6 | POP HL | |||
| 91B7 | LD L,(IX+$18) | |||
| 91BA | LD H,(IX+$19) | |||
| 91BD | INC HL | |||
| 91BE | LD (HL),$00 | |||
| 91C0 | LD (IX+$0F),$00 | |||
| 91C4 | CALL $6329 | Build the door/exit bitfield at $612B from the room description's byte1 | ||
| 91C7 | LD A,$01 | |||
| 91C9 | CALL $848E | Request sound effect A | ||
| 91CC | LD IY,$7CCA | |||
| 91D0 | CALL $88D7 | Add a bonus to the score, value from a circular queue via 88B9 | ||
| 91D3 | CALL $923E | Save continuation | ||
| 91D6 | LD HL,$919A | |||
| 91D9 | CALL $99D5 | Sprite-animation stepper | ||
| 91DC | RET NC | |||
| 91DD | LD (IX+$02),$00 | |||
| 91E1 | RET | |||
|
|
||||
| 91E2 | DEFB $28,$28,$FE,$FE,$28,$28,$FE,$FE | |||
| 91EA | DEFB $28,$28,$FE,$02,$28,$28,$FE,$02 | |||
| 91F2 | DEFB $FF,$27,$27,$FE,$FE,$27,$27,$FE | |||
| 91FA | DEFB $FE,$27,$27,$FE,$02,$27,$27,$FE | |||
| 9202 | DEFB $02,$FF,$E2,$91,$F3,$91 | |||
|
|
||||
|
Sets A=$3E and HL to the object's animation-table pointer $9204, then jumps into 9232's shared setup body ($9237), a per-kind trampoline supplying its own table/param constants.
|
||||
| 9208 | LD A,$3E | A = $3E, the initial width/param | ||
| 920A | LD HL,$9204 | HL = the object's animation-table pointer $9204 | ||
| 920D | JP $9237 | => Jump into 9232's shared setup | ||
|
|
||||
| 9210 | DEFB $14,$14,$1D,$1D,$FF,$0F,$0F,$10 | |||
| 9218 | DEFB $10,$FF,$10,$92,$15,$92,$3E,$00 | |||
| 9220 | DEFB $21,$1A,$92,$C3,$37,$92,$12,$12 | |||
| 9228 | DEFB $13,$13,$11,$11,$11,$FF,$26,$92 | |||
| 9230 | DEFB $26,$92 | |||
|
|
||||
| 9232 | LD A,$74 | |||
| 9234 | LD HL,$922E | |||
|
This entry point is used by the routine at 9208.
|
||||
| 9237 | LD (IX+$1C),$00 | |||
| 923B | JP $90AD | |||
|
Sets the object's handler (+3/+4) to the address just after the caller's CALL, then jumps there, the object resumes at that point next frame.
|
||||
| 923E | POP HL | Pop the return address off the stack, the caller's CALL site + 3 | ||
| 923F | LD (IX+$03),L | Store its low byte into the object's handler pointer (+0x03) | ||
| 9242 | LD (IX+$04),H | Store its high byte into the object's handler pointer (+0x04) | ||
| 9245 | JP (HL) | Jump to that address now | ||
|
|
||||
| 9246 | DEFB $00,$00,$00,$00,$00,$00,$01,$04 | |||
| 924E | DEFB $06,$02,$04,$02,$01,$06,$02,$06 | |||
| 9256 | DEFB $04,$01,$06,$01,$02,$04 | |||
|
Used by the routine at 90A8.
|
||||
|
Steps toward the next patrol point in the linked list at $8DEF, one facing-direction move per call.
Walks the waypoint list at $8DEF (linked via each entry's own +8 offset) looking for the entry matching this object's target-waypoint tag (IX+$1A), copying its target position into scratch $9246. Picks a movement-delta table entry (at $924C, indexed by facing IX+$0B) into scratch $9248, then a 3-iteration threshold scan decides whether the object should approach the near or far side of the target cell (swapping the scratch delta accordingly). Moves up to 4 steps via 8ABB/9BF0, aborting to 99A1 without finalizing on collision. On reaching the target (both position axes match), plays sound effect $05 and adjusts the rust/oil timer $6501 before finalizing via 9A60.
|
||||
| 925C | LD HL,($8DBB) | HL = the object's own position (IX+5/+6 mirror), save it as the initial target scratch | ||
| 925F | LD ($9246),HL | Save it to scratch $9246 | ||
| 9262 | LD HL,$8DEF | HL = the waypoint-list head at $8DEF | ||
| 9265 | LD E,(HL) | Read this entry's link pointer (E,D) | ||
| 9266 | INC HL | |||
| 9267 | LD D,(HL) | |||
| 9268 | LD A,E | If the link is null, no more waypoints, stop searching | ||
| 9269 | OR D | |||
| 926A | JR Z,$9284 | |||
| 926C | LD HL,$0008 | HL = the entry's own tag field offset (+8) | ||
| 926F | ADD HL,DE | |||
| 9270 | LD A,(IX+$1A) | Compare the object's target-waypoint tag (IX+$1A) against this entry's tag | ||
| 9273 | CP (HL) | |||
| 9274 | JR Z,$9279 | |||
| 9276 | EX DE,HL | Not a match: follow the link to the next entry and retry | ||
| 9277 | JR $9265 | |||
| 9279 | LD HL,$0005 | Found it: HL = the entry's position field offset (+5) | ||
| 927C | ADD HL,DE | ADD HL,DE | ||
| 927D | LD DE,$9246 | DE = scratch $9246, the target-position slot | ||
| 9280 | LDI | Copy the 2-byte target position into scratch | ||
| 9282 | LDI | |||
| 9284 | LD A,(IX+$0B) | A = the object's current facing (IX+$0B) | ||
| 9287 | AND $0E | Isolate the direction bits and double them, an index into the delta table | ||
| 9289 | ADD A,A | |||
| 928A | LD E,A | |||
| 928B | LD D,$00 | DE = the direction index, widened to a word | ||
| 928D | LD HL,$924C | HL = the movement-delta table at $924C | ||
| 9290 | ADD HL,DE | HL = this direction's delta-table entry | ||
| 9291 | LD DE,$9248 | DE = scratch $9248 | ||
| 9294 | LD BC,$0004 | Copy the 4-byte delta entry into scratch | ||
| 9297 | LDIR | |||
| 9299 | LD DE,$9248 | DE = scratch $9248 again | ||
| 929C | LD B,$03 | B = 3, iterate the entry's 3 threshold fields | ||
| 929E | LD HL,($9246) | HL = the target position saved earlier | ||
| 92A1 | LD A,(DE) | Threshold field = 1: compare the target's low byte against the object's left edge (IX+5) | ||
| 92A2 | CP $01 | |||
| 92A4 | JR NZ,$92AE | |||
| 92A6 | LD A,L | If below, take the near-side branch, else fall through | ||
| 92A7 | CP (IX+$05) | |||
| 92AA | JR C,$92D1 | |||
| 92AC | JR $92CC | |||
| 92AE | CP $04 | Threshold field = 4: compare the target's high byte against the object's top edge (IX+6) | ||
| 92B0 | JR NZ,$92BA | |||
| 92B2 | LD A,(IX+$06) | If below, take the near-side branch, else fall through | ||
| 92B5 | CP H | |||
| 92B6 | JR C,$92D1 | |||
| 92B8 | JR $92CC | |||
| 92BA | CP $02 | Threshold field = 2: compare the target's low byte against the object's left edge (IX+5) | ||
| 92BC | JR NZ,$92C6 | |||
| 92BE | LD A,(IX+$05) | |||
| 92C1 | CP L | If below, take the near-side branch | ||
| 92C2 | JR C,$92D1 | |||
| 92C4 | JR $92CC | |||
| 92C6 | LD A,H | Otherwise compare the target's high byte against the object's top edge (IX+6) | ||
| 92C7 | CP (IX+$06) | |||
| 92CA | JR C,$92D1 | |||
| 92CC | INC DE | Advance to the next threshold field and loop | ||
| 92CD | DJNZ $92A1 | |||
| 92CF | JR $92D9 | No threshold matched: keep the scratch delta as-is | ||
| 92D1 | LD HL,$9248 | Threshold matched: swap the scratch delta's byte with the current threshold field, the near-side adjustment | ||
| 92D4 | LD C,(HL) | |||
| 92D5 | LD A,(DE) | |||
| 92D6 | EX DE,HL | |||
| 92D7 | LD (HL),C | |||
| 92D8 | LD (DE),A | |||
| 92D9 | LD HL,$9248 | HL = scratch $9248, the (possibly swapped) delta | ||
| 92DC | LD B,$04 | B = 4, up to 4 movement steps | ||
| 92DE | PUSH BC | Save BC, save HL (the delta pointer) | ||
| 92DF | PUSH HL | |||
| 92E0 | LD A,(HL) | Set the object's facing (IX+$0B) from the next delta byte | ||
| 92E1 | LD (IX+$0B),A | |||
| 92E4 | CALL $8ABB | Apply the object's facing direction to its position (IX+5/+6), returning the OLD position in BC | ||
| 92E7 | PUSH BC | Save the old position | ||
| 92E8 | CALL $9BF0 | Collision test | ||
| 92EB | POP BC | Restore the old position into BC | ||
| 92EC | JR NC,$9338 | On collision, abandon the walk without finalizing | ||
| 92EE | LD (IX+$05),B | Revert the position to the old value (IX+5/+6 = B/C) | ||
| 92F1 | LD (IX+$06),C | |||
| 92F4 | JR NZ,$932D | If the collision wasn't a full stop (NZ), skip the arrival check | ||
| 92F6 | LD HL,$8DB6 | HL = the level's designated arrival marker $8DB6 | ||
| 92F9 | AND A | Compare it against the saved target position DE | ||
| 92FA | SBC HL,DE | |||
| 92FC | JR NZ,$932D | Not the arrival marker: skip the arrival handling | ||
| 92FE | LD IY,$7CBC | IY = a fixed table $7CBC (arrival handler parameters) | ||
| 9302 | CALL $88DD | Subtract a BCD value from the score, value from a circular queue via 88B9 | ||
| 9305 | LD A,$05 | A = sound effect $05 | ||
| 9307 | CALL $848E | Request sound effect A | ||
| 930A | CALL $8513 | Print a message-window string | ||
| 930D | DEFB $14 | attribute/control byte for 8513's inline string | ||
| 930E | DEFM " OO-ER! ",$5E | message text, terminated by $5E | ||
| 931C | LD B,$01 | B = 1, default adjustment | ||
| 931E | LD A,(IX+$1F) | A = a per-object flag (IX+0x1F), test it | ||
| 9321 | AND A | |||
| 9322 | JR Z,$9326 | If clear, keep the default adjustment | ||
| 9324 | LD B,$02 | Otherwise B = 2, a larger adjustment | ||
| 9326 | LD A,($6501) | A = the rust/oil timer $6501 | ||
| 9329 | ADD A,B | Add the arrival-handler's adjustment (B) | ||
| 932A | LD ($6501),A | Store the updated timer back to $6501 | ||
| 932D | POP HL | Restore HL, BC | ||
| 932E | POP BC | |||
| 932F | INC HL | Advance the delta pointer past this step's byte | ||
| 9330 | DJNZ $92DE | Loop for the next movement step | ||
| 9332 | CALL $9A60 | Dynamic object finalizer | ||
| 9335 | JP $99A1 | => Direction-indexed sprite-animation stepper | ||
| 9338 | POP HL | Collision case: just restore HL, BC | ||
| 9339 | POP BC | |||
| 933A | JP $99A1 | => Direction-indexed sprite-animation stepper | ||
|
|
||||
| 933D | DEFS $04 | |||
|
|
||||
|
Installed by the creature spawn at 6663 -- dual purpose: item-delivery detector in Plug Rooms, settle/float physics + hit detection elsewhere.
PLUG ROOM BRANCH (taken when 62F9 confirms the current room is this level's Plug Room): compares this object's own sprite number (+0x08) against each of the 4 required item sprites in the level's 7287 table (bytes 2-5), gated by the corresponding undelivered bit in the level's state nibble (byte1, CPL'd so unset/undelivered bits read as 1). On a match: sets that delivery bit in the state byte, repositions itself at the matching corner-cube grid cell (6254), increments the "Goodies Gathered" counter at $6123 (BCD), plays sound effect $01, runs a short animation via the 919A table, then re-pokes the grid cell to the "delivered" marker $13 and self-destructs ((IX+$02)=$FF). This strongly implies the object's sprite (+0x08) is set elsewhere to track whichever item the player is currently carrying/delivering -- that link is not yet found. If the state nibble is already fully clear (all delivered), falls through to the normal branch below.
NORMAL-ROOM BRANCH (93C1): settle/float physics -- the height/Z field (+0x07) decays by 4 each frame toward a rest value $18 (clamped), tested each step via 9BF0 (collision); if blocked, the height is bounced back up by 4 instead. Also checks bit 2 of (IX+$0D) (a "just hit by a weapon" flag set elsewhere, not yet traced) and calls 9401 if set.
|
||||
| 9341 | CALL $62F9 | Test whether the current room is this level's Plug Room | ||
| 9344 | JR NZ,$93C1 | |||
| 9346 | LD ($933F),HL | |||
| 9349 | LD C,$80 | |||
| 934B | LD A,(HL) | |||
| 934C | CPL | |||
| 934D | LD DE,$72AB | |||
| 9350 | AND $0F | |||
| 9352 | JR Z,$93C1 | |||
| 9354 | INC HL | |||
| 9355 | INC DE | |||
| 9356 | RLC C | |||
| 9358 | RRCA | |||
| 9359 | JR NC,$9350 | |||
| 935B | LD B,A | |||
| 935C | LD A,(HL) | |||
| 935D | CP (IX+$08) | |||
| 9360 | LD A,B | |||
| 9361 | JR NZ,$9350 | |||
| 9363 | EX DE,HL | |||
| 9364 | LD E,(HL) | |||
| 9365 | LD (IX+$09),E | |||
| 9368 | LD D,$00 | |||
| 936A | LD HL,$612B | |||
| 936D | ADD HL,DE | |||
| 936E | LD (HL),$00 | |||
| 9370 | LD HL,($933F) | |||
| 9373 | LD A,(HL) | |||
| 9374 | OR C | |||
| 9375 | LD (HL),A | |||
| 9376 | LD L,(IX+$0E) | |||
| 9379 | LD H,(IX+$0F) | |||
| 937C | LD (HL),$00 | |||
| 937E | LD A,(IX+$09) | |||
| 9381 | CALL $6254 | Set object position (IX+5/+6) from grid index A | ||
| 9384 | LD (IX+$0F),$00 | |||
| 9388 | LD (IX+$07),$18 | |||
| 938C | LD A,($6123) | get "Goodies Gathered" end-game stat counter | ||
| 938F | ADD A,$01 | |||
| 9391 | DAA | |||
| 9392 | LD ($6123),A | set "Goodies Gathered" end-game stat counter | ||
| 9395 | LD A,$01 | |||
| 9397 | CALL $848E | Request sound effect A | ||
| 939A | CALL $923E | Save continuation | ||
| 939D | LD HL,$919A | |||
| 93A0 | CALL $99D5 | Sprite-animation stepper | ||
| 93A3 | RET NC | |||
| 93A4 | CALL $7FC0 | Reset the sprite-draw clip window ($610A-$610D) to the full play-field | ||
| 93A7 | CALL $7F8E | Reset the redraw bounding-box trackers ($6194-$6197) to empty | ||
| 93AA | LD E,(IX+$09) | |||
| 93AD | LD D,$00 | |||
| 93AF | LD HL,$612B | |||
| 93B2 | ADD HL,DE | |||
| 93B3 | LD (HL),$13 | |||
| 93B5 | LD A,E | |||
| 93B6 | DEC A | |||
| 93B7 | LD B,$17 | |||
| 93B9 | CALL $6470 | Redraw one terrain grid cell (index in BC), used to restore terrain hidden behind an object's sprite | ||
| 93BC | LD (IX+$02),$FF | |||
| 93C0 | RET | |||
|
This entry point is used by the routine at 9401.
|
||||
| 93C1 | CALL $923E | Save continuation | ||
| 93C4 | BIT 2,(IX+$0D) | |||
| 93C8 | CALL NZ,$9401 | Creature hit/defeat sequence, called from 9341 when the "just hit" flag (bit 2 of +0x0D) is set | ||
| 93CB | LD A,(IX+$07) | |||
| 93CE | CP $18 | |||
| 93D0 | RET Z | |||
| 93D1 | SUB $04 | |||
| 93D3 | CP $18 | |||
| 93D5 | JR NC,$93D9 | |||
| 93D7 | LD A,$18 | |||
| 93D9 | LD (IX+$07),A | |||
| 93DC | CALL $9BF0 | Collision test | ||
| 93DF | RES 1,(IX+$0D) | |||
| 93E3 | RES 0,(IX+$0D) | |||
| 93E7 | JR NC,$93F4 | |||
| 93E9 | JR NZ,$93EB | |||
| 93EB | LD A,(IX+$07) | |||
| 93EE | ADD A,$04 | |||
| 93F0 | LD (IX+$07),A | |||
| 93F3 | RET | |||
| 93F4 | LD L,(IX+$0E) | |||
| 93F7 | LD H,(IX+$0F) | |||
| 93FA | INC HL | |||
| 93FB | INC HL | |||
| 93FC | LD A,(IX+$07) | |||
| 93FF | LD (HL),A | |||
| 9400 | RET | |||
|
Used by the routine at 9341.
|
||||
|
CONFIRMED structure (trigger not yet traced): clears the hit flag, then only proceeds if the creature's current sprite (+0x08) is $44 (a shared "vulnerable" pose -- creatures presumably must be in this pose to register a hit). Searches a (room, position, reward-sprite) triple table at $7C89 (count from $7C97) for an entry matching the current room and this object's position field (+0x09); on a match, swaps the reward sprite into +0x09 and into offset +3 of a linked record (via +0x0E/+0x0F), plays sound effect $01 (the same "success" sound as item delivery), steps through the 919A animation table to transform the sprite, then finalizes (+0x08 = reward sprite, 9AAB kind lookup into +0x0A, 9A60) and resumes normal behaviour at 93C1. Likely how a creature is "defeated" and turns into a collectible (a Gnome?).
|
||||
| 9401 | RES 2,(IX+$0D) | Clear the "just hit" flag (IX+0x0D bit 2) | ||
| 9405 | LD A,(IX+$08) | A = the creature's current sprite, only proceed if it's $44, the vulnerable pose | ||
| 9408 | CP $44 | |||
| 940A | RET NZ | |||
| 940B | LD A,(IX+$02) | A = the object's position field, HL = the hit table $7C89, BC = its entry count/stride from $7C97 | ||
| 940E | LD HL,$7C89 | |||
| 9411 | LD BC,($7C97) | |||
| 9415 | CP (HL) | Compare against this entry's room byte, advance HL, stop if matched | ||
| 9416 | INC HL | |||
| 9417 | JR Z,$941E | |||
| 9419 | INC HL | Otherwise skip the rest of this entry, loop for the next | ||
| 941A | INC HL | |||
| 941B | DJNZ $9415 | |||
| 941D | RET | |||
| 941E | LD A,(IX+$09) | A = the object's own position field, compare against this entry's position, only proceed on match | ||
| 9421 | CP (HL) | |||
| 9422 | RET NZ | |||
| 9423 | POP DE | Discard the return address, HL = the reward-sprite byte, swap it into the object's own position field (+0x09) | ||
| 9424 | INC HL | |||
| 9425 | LD A,(HL) | |||
| 9426 | LD (IX+$09),A | |||
| 9429 | LD E,(IX+$0E) | |||
| 942C | LD D,(IX+$0F) | DE = a linked record pointer (+0x0E/+0x0F), write the same reward sprite into its offset +3 | ||
| 942F | LD HL,$0003 | |||
| 9432 | ADD HL,DE | |||
| 9433 | LD (HL),A | |||
| 9434 | LD A,$01 | A = sound effect $01 | ||
| 9436 | CALL $848E | Request sound effect A | ||
| 9439 | LD HL,$919A | HL = the transform animation table $919A, save it as the animation-stepper's own resume pointer | ||
| 943C | LD ($933D),HL | |||
| 943F | CALL $923E | Save continuation | ||
| 9442 | LD HL,($933D) | Read the next animation sprite from the saved pointer, store it as the object's sprite (+0x08) | ||
| 9445 | LD A,(HL) | |||
| 9446 | INC HL | |||
| 9447 | LD (IX+$08),A | |||
| 944A | LD ($933D),HL | Save the advanced pointer, stop, mid-animation, unless the table's end marker $FF was reached | ||
| 944D | CP $FF | |||
| 944F | RET NZ | |||
| 9450 | LD A,(IX+$09) | Animation done: A = the reward sprite, set it as the final sprite (+0x08) | ||
| 9453 | LD (IX+$08),A | |||
| 9456 | CALL $9AAB | Search the (key,data) pair table at $74CE for key A | ||
| 9459 | LD A,(HL) | A = the kind byte from the lookup, store it (+0x0A) | ||
| 945A | LD (IX+$0A),A | |||
| 945D | CALL $9A60 | Dynamic object finalizer | ||
| 9460 | JP $93C1 | Resume normal creature behaviour | ||
|
|
||||
| 9463 | DEFB $0D,$0D,$0E,$0E,$FF,$0B,$0B,$0C | |||
| 946B | DEFB $0C,$FF,$63,$94,$68,$94 | |||
|
|
||||
|
Copies the player's grid position ($8DBB/$8DBC) into its own fields $8E14/$8E15, copies the player's facing ($8DC1) into its own facing (IX+0x0B), then runs the sprite-animation table $946D via 99A7. Tracks the player's position/facing every frame rather than moving independently -- possibly a HUD marker or an attached "ghost" object, identity unconfirmed.
|
||||
| 9471 | LD A,($8DBB) | |||
| 9474 | LD ($8E14),A | |||
| 9477 | LD A,($8DBC) | |||
| 947A | LD ($8E15),A | |||
| 947D | LD A,($8DC1) | |||
| 9480 | LD (IX+$0B),A | |||
| 9483 | LD HL,$946D | |||
| 9486 | JP $99A7 | |||
|
|
||||
| 9489 | DEFB $00,$06,$06,$00,$00,$06,$06,$00 | |||
| 9491 | DEFB $00,$06,$89,$94 | |||
|
|
||||
| 9495 | DEFM "ZZ[[" | |||
|
|
||||
| 9499 | DEFB $5C,$5C,$5D,$5D,$FF | |||
|
|
||||
|
Sets height (+0x07) to $8DBD+$18, relative to the player's current depth, and position (+5/+6) to the player's grid position ($8DBB/$8DBC) offset by a per-facing-direction delta from table $9489, indexed by $8DC1 AND $06, then finalizes via 9A60 and starts the sprite-animation table $9495. Likely spawns/positions a bubble or trail effect relative to the player, though the fixed object's own identity ($8E27) isn't confirmed.
|
||||
| 949E | LD A,($8DBD) | A = the global depth counter $8DBD + $18, set the height field (+0x07) | ||
| 94A1 | ADD A,$18 | |||
| 94A3 | LD (IX+$07),A | |||
| 94A6 | LD A,($8DC1) | A = the player's facing $8DC1, isolate the direction bits | ||
| 94A9 | AND $06 | |||
| 94AB | LD L,A | HL = the delta table $9489 plus the direction index | ||
| 94AC | LD H,$00 | |||
| 94AE | LD DE,$9489 | |||
| 94B1 | ADD HL,DE | |||
| 94B2 | LD A,($8DBB) | A = the player's X ($8DBB), add the delta, store as this object's X (+0x05) | ||
| 94B5 | ADD A,(HL) | |||
| 94B6 | LD (IX+$05),A | |||
| 94B9 | INC HL | Advance to the delta's dy byte, A = the player's Y ($8DBC), add it, store as Y (+0x06) | ||
| 94BA | LD A,($8DBC) | |||
| 94BD | ADD A,(HL) | |||
| 94BE | LD (IX+$06),A | |||
| 94C1 | CALL $9A60 | Dynamic object finalizer | ||
| 94C4 | LD HL,$9495 | |||
| 94C7 | JP $99D5 | => Sprite-animation stepper | ||
|
|
||||
|
Decrements lifetime countdown (IX+0x0B), on expiry self-destructs, else advances the sprite (IX+0x08) via an 8-entry per-frame table at $9495.
|
||||
| 94CA | DEC (IX+$0B) | Decrement lifetime countdown (IX+0x0B) | ||
| 94CD | JR NZ,$94D4 | If still counting, jump to the frame-advance below | ||
| 94CF | LD (IX+$02),$FF | Expired: mark for self-destruction (+0x02=$FF) | ||
| 94D3 | RET | |||
| 94D4 | LD A,(IX+$0F) | Advance frame index (IX+0x0F), wrapping at 8 | ||
| 94D7 | INC A | |||
| 94D8 | AND $07 | |||
| 94DA | LD (IX+$0F),A | |||
| 94DD | LD L,A | Widen it to a word offset | ||
| 94DE | LD H,$00 | |||
| 94E0 | LD DE,$9495 | HL = the table $9495 plus that offset | ||
| 94E3 | ADD HL,DE | |||
| 94E4 | LD A,(HL) | Read the sprite number and store it to (IX+0x08) | ||
| 94E5 | LD (IX+$08),A | |||
| 94E8 | RET | |||
|
|
||||
| 94E9 | DEFB $4E,$4E,$50,$50,$FF | |||
|
|
||||
| 94EE | LD HL,$94E9 | |||
| 94F1 | JP $99D5 | => Sprite-animation stepper | ||
|
|
||||
|
Per-frame behaviour handler for value-$6B objects, the plug. Polls every frame for full item delivery, then pops and increments the "Plugs Pulled" counter.
CONFIRMED: re-checks (every frame, via 62F9 + AND $0F/CP $0F) whether this level's Plug Room state nibble has reached $0F (all 4 items delivered -- see 9341). Once it has: increments the "Plugs Pulled" counter at $6124 (BCD), plays sound effect $09, and animates the plug popping out (+0x07 += 8 per frame, gated by bit 4 of +0x0D so this only fires once), then self-destructs on the following frame (bit 6 of +0x0D check). This is the actual win-condition trigger for a single Plug Room.
|
||||
| 94F4 | CALL $62F9 | Test whether the current room is this level's Plug Room | ||
| 94F7 | LD A,(HL) | |||
| 94F8 | AND $0F | |||
| 94FA | CP $0F | |||
| 94FC | RET NZ | |||
| 94FD | LD A,($6124) | get "Plugs Pulled" end-game stat counter | ||
| 9500 | ADD A,$01 | |||
| 9502 | DAA | |||
| 9503 | LD ($6124),A | set "Plugs Pulled" end-game stat counter | ||
| 9506 | LD A,$09 | |||
| 9508 | CALL $848E | Request sound effect A | ||
| 950B | CALL $923E | Save continuation | ||
| 950E | BIT 6,(IX+$0D) | |||
| 9512 | JR NZ,$9521 | |||
| 9514 | SET 4,(IX+$0D) | |||
| 9518 | LD A,(IX+$07) | |||
| 951B | ADD A,$08 | |||
| 951D | LD (IX+$07),A | |||
| 9520 | RET | |||
| 9521 | LD (IX+$02),$FF | |||
| 9525 | RET | |||
|
|
||||
| 9526 | DEFB $4C,$4C,$4D,$4D,$FF,$00,$00 | |||
|
|
||||
| 952D | LD HL,$9526 | |||
| 9530 | CALL $99D5 | Sprite-animation stepper | ||
| 9533 | CALL $62F9 | Test whether the current room is this level's Plug Room | ||
| 9536 | JR NZ,$9540 | |||
| 9538 | LD A,(HL) | |||
| 9539 | AND $0F | |||
| 953B | CP $0F | |||
| 953D | JR Z,$955A | |||
| 953F | RET | |||
| 9540 | LD A,($8DBB) | |||
| 9543 | SUB (IX+$05) | |||
| 9546 | JR NC,$954A | |||
| 9548 | NEG | |||
| 954A | CP $05 | |||
| 954C | RET NC | |||
| 954D | LD A,($8DBC) | |||
| 9550 | SUB (IX+$06) | |||
| 9553 | JR NC,$9557 | |||
| 9555 | NEG | |||
| 9557 | CP $06 | |||
| 9559 | RET NC | |||
| 955A | LD HL,($8DB9) | get player behaviour-handler pointer | ||
| 955D | LD DE,$8968 | |||
| 9560 | AND A | |||
| 9561 | SBC HL,DE | |||
| 9563 | RET NZ | |||
| 9564 | LD HL,$8D11 | |||
| 9567 | LD ($8DB9),HL | set player behaviour-handler pointer | ||
| 956A | LD A,(IX+$05) | |||
| 956D | LD ($952B),A | |||
| 9570 | LD A,(IX+$06) | |||
| 9573 | LD ($952C),A | |||
| 9576 | RET | |||
|
|
||||
| 9577 | DEFB $68,$68,$69,$69,$FF | |||
|
|
||||
| 957C | LD HL,$9577 | |||
| 957F | CALL $99D5 | Sprite-animation stepper | ||
| 9582 | DEC (IX+$0E) | |||
| 9585 | RET NZ | |||
| 9586 | LD A,(IX+$0B) | |||
| 9589 | LD (IX+$0E),A | |||
| 958C | PUSH IX | |||
| 958E | POP IY | |||
| 9590 | LD IX,$610E | |||
| 9594 | CALL $84AE | Dynamic object allocator | ||
| 9597 | DEFW $9602 | Dynamic object handler address (9602) | ||
| 9599 | LD A,(IY+$05) | |||
| 959C | LD (IX+$05),A | |||
| 959F | LD A,(IY+$06) | |||
| 95A2 | LD (IX+$06),A | |||
| 95A5 | LD (IX+$07),$18 | |||
| 95A9 | LD (IX+$0A),$03 | |||
| 95AD | LD A,(IY+$09) | |||
| 95B0 | LD (IX+$0B),A | |||
| 95B3 | LD A,(IY+$14) | |||
| 95B6 | LD (IX+$0E),A | |||
| 95B9 | CALL $9A60 | Dynamic object finalizer | ||
| 95BC | PUSH IY | |||
| 95BE | POP IX | |||
| 95C0 | RET | |||
|
|
||||
| 95C1 | DEFB $62,$62,$63,$63,$64,$64,$5E,$FF | |||
| 95C9 | DEFB $FE,$02,$5F,$FE,$02,$5F,$FE,$02 | |||
| 95D1 | DEFB $5E,$FE,$02,$5E,$FE,$02,$60,$FE | |||
| 95D9 | DEFB $02,$60,$FE,$02,$5E,$FE,$02,$5E | |||
| 95E1 | DEFB $FF,$FE,$04,$5F,$FE,$04,$5F,$FE | |||
| 95E9 | DEFB $04,$5E,$FE,$04,$5E,$FE,$04,$60 | |||
| 95F1 | DEFB $FE,$04,$60,$FE,$04,$5E,$FE,$04 | |||
| 95F9 | DEFB $5E,$FF | |||
| 95FB | DEFB $65,$65,$66,$66,$67,$67,$FF | |||
|
|
||||
|
Plays sound $03, then runs the rise animation via 99D5 (table $95C1, returns NC if off-screen). Resets phase, tests the despawn flag (+0x0D bit 6), jumping to self-destruction if set. If this is the full-strength variant (facing $6A), sets +0x0D bit 4 and switches to the alternate rise table $95E2, then runs the (possibly swapped) table again. If the bubble's height hasn't yet reached its target (+0x0E), or +0x09 is $FF, skips straight to the pop sequence. Otherwise scans for a nearby object via 9B5D; if it's specifically the player ($8DB6), refills the player's height (+0x07) by 2, or 4 for the full-strength variant, sets a player flag (+0x0D bit 4), and returns without popping. If no player nearby, falls through to the pop sequence: sets its own handler to resume past the setup, resets phase, and runs the pop animation via 99D5 (table $95FB).
At $9622-$962D, branches on the inherited trigger value at (IX+$0B) -- only if it's $6A does it SET bit 4 of (IX+$0D) and switch to movement table $95E2 (steps +0x07 by $04/frame) instead of the default 95C9 (steps by $02/frame): the $6A bubble rises at double the rate. That bit 4 flag is later tested at 97E6 (in the sprite-draw wrapper, right after 8128 draws it); only if set does it SET bit 6 of (IX+$0D). Back here at $961B, bit 6 being set causes immediate self-destruct ((IX+$02)=$FF). So only $6A-triggered bubbles can ever reach that clean completion state -- $66 bubbles never do: a full-strength bubble stream that completes its rise ($6A) vs. a weak one that never does ($66), matching gameplay where some bubble sources cannot lift the player all the way. Whether bit 6 specifically means "reached the surface" is unconfirmed.
|
||||
| 9602 | LD A,$03 | A = sound effect $03 | ||
| 9604 | CALL $848E | Request sound effect A | ||
| 9607 | CALL $923E | Save continuation | ||
| 960A | LD HL,$95C1 | HL = the rise animation table $95C1 | ||
| 960D | CALL $99D5 | Sprite-animation stepper | ||
| 9610 | RET NC | Off-screen: return | ||
| 9611 | LD (IX+$0F),$00 | Reset the animation phase counter (+0x0F) | ||
| 9615 | CALL $923E | Save continuation | ||
| 9618 | LD HL,$95C9 | HL = the second rise table $95C9, test the despawn flag (+0x0D bit 6) | ||
| 961B | BIT 6,(IX+$0D) | |||
| 961F | JP NZ,$967F | If set, jump straight to self-destruct | ||
| 9622 | LD A,(IX+$0B) | A = facing, compare against $6A, the full-strength marker | ||
| 9625 | CP $6A | |||
| 9627 | JR NZ,$9630 | |||
| 9629 | SET 4,(IX+$0D) | Full-strength: set +0x0D bit 4, switch HL to the alternate table $95E2 | ||
| 962D | LD HL,$95E2 | |||
| 9630 | CALL $99D5 | Sprite-animation stepper | ||
| 9633 | LD A,(IX+$07) | A = the bubble's height (+0x07), compare against its target (+0x0E) | ||
| 9636 | CP (IX+$0E) | |||
| 9639 | JR NC,$966B | If not yet reached, skip straight to the pop sequence | ||
| 963B | LD A,$FF | A = $FF, compare against +0x09 | ||
| 963D | CP (IX+$09) | |||
| 9640 | JP Z,$966B | If it matches, skip straight to the pop sequence | ||
| 9643 | LD HL,$610E | HL = the active-object list head $610E, scan for a nearby object | ||
| 9646 | CALL $9B5D | |||
| 9649 | RET NC | None found: return | ||
| 964A | LD HL,$8DB6 | Compare the found object's address against the player $8DB6 | ||
| 964D | AND A | |||
| 964E | SBC HL,DE | |||
| 9650 | JR NZ,$966B | Not the player: skip straight to the pop sequence | ||
| 9652 | LD B,$02 | B = 2, the default height refill | ||
| 9654 | LD A,(IX+$0B) | A = facing, compare against $6A | ||
| 9657 | CP $6A | |||
| 9659 | JR NZ,$965D | if matched, B = 4 instead | ||
| 965B | LD B,$04 | |||
| 965D | LD HL,$0007 | HL = the found object's height field (+7), add B to it | ||
| 9660 | ADD HL,DE | |||
| 9661 | LD A,B | |||
| 9662 | ADD A,(HL) | |||
| 9663 | LD (HL),A | |||
| 9664 | LD HL,$000D | HL = the found object's flags field (+0x0D), set bit 4 | ||
| 9667 | ADD HL,DE | |||
| 9668 | SET 4,(HL) | |||
| 966A | RET | |||
| 966B | LD HL,$9678 | Pop sequence: set the object's own handler to resume at $9678, reset the phase counter | ||
| 966E | LD (IX+$03),L | |||
| 9671 | LD (IX+$04),H | |||
| 9674 | LD (IX+$0F),$00 | |||
| 9678 | LD HL,$95FB | HL = the pop animation table $95FB | ||
| 967B | CALL $99D5 | Sprite-animation stepper | ||
| 967E | RET NC | Off-screen: return | ||
| 967F | LD (IX+$02),$FF | Mark for self-destruction (+0x02=$FF) | ||
| 9683 | RET | |||
|
|
||||
|
Handler for 8E3F's objects (its handler-address bytes at 8E50 -- see 84AE), called from 983C's dispatcher.
Sprite starts at $23 (set by 8EA1 on spawn) and cycles through $23,$24,$25,$26 -- the "Snake, rearing phase" sprites at B56E/B57E/B59E/B5CE, with increasing sprite height (16x8 -> 16x16 -> 16x24 -> 16x32) as it rises, i.e. more of the snake's body becomes visible each frame. Full cycle: phase 0 = idle countdown at (IX+$0E) (decrements while nonzero); phase 1 = seed position (IX+$16)/(IX+$17) at $FC/$FE then jump +8; phase 2 = each call, INC sprite number (IX+$08) and jump position +8 again, repeating until sprite reaches $26 (fully reared), then sets a long countdown ($24) and advances to phase 3+; phase 3+ (default case) = each call, if sprite isn't back down to $23 yet, DEC sprite and retract position by -8; once back at $23, reset position to 0, set bit 7 of (IX+$0D) (purpose not traced), set another countdown, and restart the cycle at phase 1. A full rise-pause-retract-pause loop.
|
||||
| 9684 | LD A,(IX+$0E) | test countdown (+0x0E), skip ahead if already zero | ||
| 9687 | AND A | |||
| 9688 | JR Z,$968E | |||
| 968A | DEC (IX+$0E) | decrement countdown and return | ||
| 968D | RET | |||
| 968E | LD A,(IX+$0F) | test phase counter, fall through to the rise seed if nonzero | ||
| 9691 | AND A | |||
| 9692 | JR NZ,$969C | |||
| 9694 | LD (IX+$16),$00 | phase 0: init position to 0, advance to phase 1, return | ||
| 9698 | INC (IX+$0F) | |||
| 969B | RET | |||
| 969C | CP $01 | phase 1: seed rise start position ($FE/$FC), advance phase | ||
| 969E | JR NZ,$96E0 | |||
| 96A0 | LD (IX+$17),$FE | |||
| 96A4 | LD (IX+$16),$FC | |||
| 96A8 | INC (IX+$0F) | |||
| 96AB | LD A,(IX+$17) | shared step: bump the Z offset (+0x17) by 8 | ||
| 96AE | ADD A,$08 | |||
| 96B0 | LD (IX+$17),A | |||
| 96B3 | LD A,(IX+$16) | bump the position offset (+0x16) by 8 | ||
| 96B6 | ADD A,$08 | |||
| 96B8 | LD (IX+$16),A | |||
| 96BB | RES 7,(IX+$0D) | clear bit 7 of the flags (+0x0D) | ||
| 96BF | LD HL,$610E | HL = the active-object list head $610E | ||
| 96C2 | CALL $9B5D | |||
| 96C5 | RET NC | nothing nearby: return | ||
| 96C6 | LD A,(IX+$07) | A = this object's height plus its position offset | ||
| 96C9 | ADD A,(IX+$16) | |||
| 96CC | PUSH IX | switch IX to the object that was found | ||
| 96CE | PUSH DE | |||
| 96CF | POP IX | |||
| 96D1 | LD (IX+$07),A | write the combined height into it (+0x07) | ||
| 96D4 | SET 1,(IX+$0D) | flag it as touched (+0x0D bit 1) | ||
| 96D8 | CALL $96BF | |||
| 96DB | EX (SP),IX | restore IX, drop the saved pointer | ||
| 96DD | POP HL | |||
| 96DE | JR $96C2 | keep scanning for more nearby objects | ||
| 96E0 | CP $02 | phase 2? | ||
| 96E2 | JR NZ,$96F7 | |||
| 96E4 | INC (IX+$08) | step the sprite (+0x08) one frame further up | ||
| 96E7 | LD A,(IX+$08) | not yet fully reared ($26): keep rising | ||
| 96EA | CP $26 | |||
| 96EC | JR NZ,$96AB | |||
| 96EE | LD (IX+$0E),$24 | fully reared: set the long pause countdown (+0x0E = $24) | ||
| 96F2 | INC (IX+$0F) | advance to the next phase | ||
| 96F5 | JR $96AB | |||
| 96F7 | LD A,(IX+$08) | phase 3+: A = the current sprite (+0x08) | ||
| 96FA | CP $23 | |||
| 96FC | JR Z,$9712 | back at $23: fully retracted | ||
| 96FE | DEC (IX+$08) | otherwise step the sprite back one frame | ||
| 9701 | LD A,(IX+$17) | retract the Z offset (+0x17) by 8 | ||
| 9704 | SUB $08 | |||
| 9706 | LD (IX+$17),A | |||
| 9709 | LD A,(IX+$16) | retract the position offset (+0x16) by 8 | ||
| 970C | SUB $08 | |||
| 970E | LD (IX+$16),A | |||
| 9711 | RET | |||
| 9712 | LD (IX+$16),$00 | fully retracted: reset position, restart the cycle at phase 1 | ||
| 9716 | SET 7,(IX+$0D) | |||
| 971A | LD (IX+$0E),$24 | |||
| 971E | LD (IX+$0F),$01 | |||
| 9722 | RET | |||
|
|
||||
| 9723 | DEFB $39,$01,$39,$01,$31,$02,$29,$03 | |||
| 972B | DEFB $21,$04,$19,$05,$11,$06,$09,$07 | |||
| 9733 | DEFB $01,$08,$02,$07,$03,$06,$04,$05 | |||
| 973B | DEFB $05,$04,$06,$03,$07,$02,$08,$01 | |||
| 9743 | DEFB $08,$01 | |||
|
Used by the routine at 97BA.
|
||||
|
Called by 97BA before drawing an object's sprite. Uses the 9723 table (row-band -> grid-row-start/count) to flag every grid cell (bit 7) within the sprite's vertical extent, skipping empty ($00) and solid-wall ($7F) cells; then does a second pass over the whole 64-cell grid, redrawing (via 6470) any flagged cell that also falls within the sprite's horizontal extent.
|
||||
| 9745 | LD A,(IX+$07) | save the object's Z/height (+0x07) | ||
| 9748 | PUSH AF | |||
| 9749 | LD A,($610B) | A = the clip-window top ($610B) divided by 8 | ||
| 974C | RRCA | |||
| 974D | RRCA | |||
| 974E | RRCA | |||
| 974F | LD E,A | widen it to a word: the row-band index | ||
| 9750 | LD D,$00 | |||
| 9752 | LD HL,$9723 | HL = 9723 + row-band index | ||
| 9755 | ADD HL,DE | |||
| 9756 | LD A,($610D) | A = the clip-window bottom ($610D), rounded up | ||
| 9759 | ADD A,$01 | |||
| 975B | RRA | divided by 8 | ||
| 975C | RRA | |||
| 975D | RRA | |||
| 975E | SUB E | minus the top band index | ||
| 975F | RRCA | halve it, +1: the band count | ||
| 9760 | INC A | |||
| 9761 | PUSH AF | *loop: save the band count | ||
| 9762 | LD E,(HL) | E = this band's grid-row start | ||
| 9763 | LD D,$00 | |||
| 9765 | INC HL | |||
| 9766 | LD B,(HL) | B = its cell count | ||
| 9767 | INC HL | |||
| 9768 | PUSH HL | save the table cursor | ||
| 9769 | LD HL,$612B | HL = grid base 612C + row-start | ||
| 976C | ADD HL,DE | |||
| 976D | LD DE,$0009 | DE = 9 (row stride) | ||
| 9770 | LD A,(HL) | *loop: skip empty cells ($00) | ||
| 9771 | AND A | |||
| 9772 | JR Z,$977A | |||
| 9774 | CP $7F | skip solid wall cells ($7F) | ||
| 9776 | JR Z,$977A | |||
| 9778 | SET 7,(HL) | otherwise mark it (bit 7) | ||
| 977A | ADD HL,DE | advance to next cell, loop count times | ||
| 977B | DJNZ $9770 | |||
| 977D | POP HL | restore the table cursor and band count | ||
| 977E | POP AF | |||
| 977F | DEC A | loop for the next row-band | ||
| 9780 | JR NZ,$9761 | |||
| 9782 | LD A,(IX+$10) | A = the sprite's left edge (+0x10), aligned down | ||
| 9785 | AND $F8 | |||
| 9787 | LD L,A | L = it, A = the top edge (+0x11) | ||
| 9788 | LD A,(IX+$11) | |||
| 978B | AND $F8 | aligned down and divided by 8 | ||
| 978D | RRCA | |||
| 978E | RRCA | |||
| 978F | RRCA | |||
| 9790 | ADD A,L | C = the combined start cell index | ||
| 9791 | LD C,A | |||
| 9792 | ADD A,$07 | B = it plus 7: the end cell index | ||
| 9794 | LD B,A | |||
| 9795 | LD HL,$612C | Room grid address | ||
| 9798 | XOR A | A = cell index (0) | ||
| 9799 | BIT 7,(HL) | *scan: test and clear this cell's mark (bit 7) | ||
| 979B | RES 7,(HL) | |||
| 979D | JR Z,$97AF | unmarked: skip it | ||
| 979F | CP C | before the sprite's column range: skip it | ||
| 97A0 | JR C,$97AF | |||
| 97A2 | CP B | past the end of the range: skip it | ||
| 97A3 | JR Z,$97AF | |||
| 97A5 | PUSH BC | in range: save the range and cursor | ||
| 97A6 | PUSH HL | |||
| 97A7 | LD B,(IX+$07) | B = the object's height (+0x07) | ||
| 97AA | CALL $6470 | Redraw one terrain grid cell (index in BC), used to restore terrain hidden behind an object's sprite | ||
| 97AD | POP HL | restore them | ||
| 97AE | POP BC | |||
| 97AF | INC HL | advance to next cell | ||
| 97B0 | INC A | |||
| 97B1 | CP $40 | loop until all 64 cells checked | ||
| 97B3 | JR C,$9799 | |||
| 97B5 | POP AF | restore Z/height, return | ||
| 97B6 | LD (IX+$07),A | |||
| 97B9 | RET | |||
|
Used by the routine at 9900.
|
||||||||
|
Converts record position (+5/+6) to screen coordinates and draws sprite (+8) with its mask via 8128.
|
||||||||
| 97BA | LD L,(IX+$05) | HL = the object's position (+5/+6) | ||||||
| 97BD | LD H,(IX+$06) | |||||||
| 97C0 | LD A,$98 | A = $98 minus the position's row/height offsets, plus L+H, D = the screen row | ||||||
| 97C2 | SUB (IX+$17) | |||||||
| 97C5 | SUB (IX+$07) | |||||||
| 97C8 | ADD A,L | |||||||
| 97C9 | ADD A,H | |||||||
| 97CA | LD D,A | |||||||
| 97CB | LD A,$80 | A = $80 minus twice the column, plus twice the row, E = the screen column | ||||||
| 97CD | SUB L | |||||||
| 97CE | SUB L | |||||||
| 97CF | ADD A,H | |||||||
| 97D0 | ADD A,H | |||||||
| 97D1 | LD E,A | |||||||
| 97D2 | LD A,(IX+$08) | A = the sprite number, isolate the mirror-flag bit, force bit 0 | ||||||
| 97D5 | AND $80 | |||||||
| 97D7 | OR $01 | |||||||
| 97D9 | LD ($97E2),A | Save that flag byte for 8128's own flip test at $97E2 | ||||||
| 97DC | LD C,(IX+$08) | C = the sprite number with the mirror flag masked off | ||||||
| 97DF | RES 7,C | |||||||
| 97E1 | LD A,$01 | !!MUT-ARG!! A = 1, the colour parameter | ||||||
| 97E3 | CALL $8128 | Draw sprite C with its mask at screen position DE | ||||||
| 97E6 | BIT 4,(IX+$0D) | Test and clear the "just entered water" flag (IX+0x0D bit 4) | ||||||
| 97EA | RES 4,(IX+$0D) | |||||||
| 97EE | JR NC,$97F6 | If clear, skip straight to the redraw-behind step | ||||||
| 97F0 | RET Z | Otherwise, if the sprite draw was off-screen (Z), just return | ||||||
| 97F1 | SET 6,(IX+$0D) | Set the "splash" flag (IX+0x0D bit 6) and return | ||||||
| 97F5 | RET | |||||||
| 97F6 | CALL $9745 | Mark and redraw the static terrain cells behind an object's sprite, so moving objects don't leave trails | ||||||
| 97F9 | JP $8107 | => Sprite draw | ||||||
|
||||||||
| 97FC | CALL $676D | Draw current room | ||||||
| 97FF | LD SP,($60E9) | |||||||
| 9803 | JP $9808 | => Per-frame main loop entry | ||||||
|
|
||||
| 9806 | DEFW $8E0F | |||
|
Saves SP to $60E9 (restored by 97FC on room change); restores the message-window title when the $618A timer expires.
|
||||
| 9808 | LD ($60E9),SP | |||
| 980C | LD A,($618A) | |||
| 980F | AND A | |||
| 9810 | JR Z,$9824 | |||
| 9812 | DEC A | |||
| 9813 | LD ($618A),A | |||
| 9816 | JR NZ,$9824 | |||
| 9818 | LD HL,$65CF | |||
| 981B | CALL $7D68 | Print string routine | ||
| 981E | LD HL,($65D9) | |||
| 9821 | CALL $7D68 | Print string routine | ||
| 9824 | CALL $7FC0 | Reset the sprite-draw clip window ($610A-$610D) to the full play-field | ||
| 9827 | XOR A | |||
| 9828 | LD ($60EB),A | |||
| 982B | LD IX,$610E | |||
| 982F | CALL $983C | Per-frame dynamic object dispatcher | ||
| 9832 | LD IX,$9806 | |||
| 9836 | CALL $983C | Per-frame dynamic object dispatcher | ||
| 9839 | JP $9900 | => Draw all queued objects | ||
|
Used by the routine at 9808.
|
||||||||
|
For each object record (IX) in the list (record +0/+1 links to the next; the list includes the pool records at A900, the PLAYER record at 8DB6, and the room's creature): if offset +2 reads $FF, the record was marked dead mid-frame -- unlinks it back onto the free list ($618B) instead of dispatching it. Otherwise, if its room matches the current room, calls its handler (offset +3/+4) via 61A7, then re-checks the room (the handler may have moved/removed it). If still valid and bit 7 of +0x0D is clear, computes a draw-order sort key ($5E + left edge +0x10 + top edge +0x11) into +0x0C, then inserts the record into the draw queue 60EC: scanning for the first entry whose bounding box (+0x10..+0x13) doesn't overlap this one, or -- if boxes do overlap -- whose sort key/+0x0C value is smaller, shifting later entries down to make room. This is the painter's-algorithm draw-order queue consumed by 9900/97BA.
|
||||||||
| 983C | LD L,(IX+$00) | HL = the list head pointer | ||||||
| 983F | LD H,(IX+$01) | |||||||
| 9842 | LD A,L | test for list end, return if so | ||||||
| 9843 | OR H | |||||||
| 9844 | RET Z | |||||||
| 9845 | PUSH HL | save HL, IX = this record | ||||||
| 9846 | EX (SP),IX | |||||||
| 9848 | LD A,(IX+$02) | check for a "deleted" marker (offset +2 == $FF) | ||||||
| 984B | INC A | |||||||
| 984C | JR NZ,$986C | |||||||
| 984E | LD L,(IX+$00) | deleted: HL = this record's link, DE = the free-list head | ||||||
| 9851 | LD H,(IX+$01) | |||||||
| 9854 | LD DE,($618B) | unlink this record, splice it onto the free list | ||||||
| 9858 | LD (IX+$00),E | |||||||
| 985B | LD (IX+$01),D | |||||||
| 985E | LD ($618B),IX | update the free-list head, restore IX | ||||||
| 9862 | POP IX | |||||||
| 9864 | LD (IX+$00),L | store the saved link back into the list, loop to the next record | ||||||
| 9867 | LD (IX+$01),H | |||||||
| 986A | JR $9842 | |||||||
| 986C | LD A,($6126) | get room number | ||||||
| 986F | CP (IX+$02) | |||||||
| 9872 | JP NZ,$98FC | |||||||
| 9875 | LD L,(IX+$03) | HL = the object's handler pointer (+3/+4) | ||||||
| 9878 | LD H,(IX+$04) | |||||||
| 987B | CALL $61A7 | JP (HL) trampoline | ||||||
| 987E | LD A,($6126) | get room number | ||||||
| 9881 | CP (IX+$02) | |||||||
| 9884 | JR NZ,$98FC | |||||||
| 9886 | BIT 7,(IX+$0D) | skip the sort-key update if bit 7 of +0x0D is set | ||||||
| 988A | JR NZ,$98FC | |||||||
| 988C | LD A,$5E | A = $5E + the left edge (+0x10) | ||||||
| 988E | ADD A,(IX+$10) | |||||||
| 9891 | ADD A,(IX+$11) | plus the top edge (+0x11) | ||||||
| 9894 | LD (IX+$0C),A | store as the draw sort key (+0x0C) | ||||||
| 9897 | LD HL,$60EC | HL = the draw queue $60EC | ||||||
| 989A | LD A,($60EB) | A = the queue count | ||||||
| 989D | AND A | |||||||
| 989E | JR Z,$98F2 | empty queue: append instead | ||||||
| 98A0 | LD B,A | B = queue count, A = this object's sort key | ||||||
| 98A1 | LD A,(IX+$0C) | |||||||
| 98A4 | LD E,(HL) | *loop: DE = this queue entry's record pointer | ||||||
| 98A5 | INC HL | |||||||
| 98A6 | LD D,(HL) | |||||||
| 98A7 | PUSH HL | save the queue cursor | ||||||
| 98A8 | LD HL,$0010 | HL = the queued entry's left edge (+0x10) | ||||||
| 98AB | ADD HL,DE | |||||||
| 98AC | LD A,(IX+$12) | compare this object's right edge (+0x12) against it | ||||||
| 98AF | CP (HL) | |||||||
| 98B0 | JR C,$98D4 | insert-before if less | ||||||
| 98B2 | INC HL | compare bottom (+0x13) against the queued entry's top | ||||||
| 98B3 | LD A,(IX+$13) | |||||||
| 98B6 | CP (HL) | |||||||
| 98B7 | JR C,$98D4 | insert-before if less | ||||||
| 98B9 | INC HL | compare left (+0x10) against the queued entry's right | ||||||
| 98BA | LD A,(HL) | |||||||
| 98BB | CP (IX+$10) | |||||||
| 98BE | JR C,$98D4 | insert-before if less | ||||||
| 98C0 | INC HL | compare top (+0x11) against the queued entry's bottom | ||||||
| 98C1 | LD A,(HL) | |||||||
| 98C2 | CP (IX+$11) | |||||||
| 98C5 | JR C,$98D4 | insert-before if less | ||||||
| 98C7 | LD HL,$0007 | boxes overlap on both axes: HL = the queued entry's depth (+0x07) | ||||||
| 98CA | ADD HL,DE | |||||||
| 98CB | LD A,(HL) | A = it | ||||||
| 98CC | POP HL | restore the cursor, compare against this object's own depth | ||||||
| 98CD | CP (IX+$07) | |||||||
| 98D0 | JR NC,$98E4 | insert-before if this object is nearer | ||||||
| 98D2 | JR $98DF | fall through to keep scanning | ||||||
| 98D4 | LD HL,$000C | boxes don't overlap: HL = the queued entry's sort key (+0x0C) | ||||||
| 98D7 | ADD HL,DE | |||||||
| 98D8 | LD A,(IX+$0C) | compare against this object's sort key | ||||||
| 98DB | CP (HL) | |||||||
| 98DC | POP HL | restore the cursor, insert-before if less | ||||||
| 98DD | JR C,$98E4 | |||||||
| 98DF | INC HL | keep scanning: advance HL, loop | ||||||
| 98E0 | DJNZ $98A4 | |||||||
| 98E2 | JR $98F2 | queue exhausted without a match: append instead | ||||||
| 98E4 | DEC HL | found the insert point | ||||||
| 98E5 | LD A,B | compute the shift distance (queue count * 2) | ||||||
| 98E6 | ADD A,A | |||||||
| 98E7 | LD C,A | |||||||
| 98E8 | LD B,$00 | |||||||
| 98EA | ADD HL,BC | |||||||
| 98EB | LD E,L | DE = HL+1, the shifted-up destination | ||||||
| 98EC | LD D,H | |||||||
| 98ED | INC DE | |||||||
| 98EE | DEC HL | |||||||
| 98EF | LDDR | shift the tail of the queue up one slot | ||||||
| 98F1 | INC HL | advance HL back to the insert slot | ||||||
| 98F2 | PUSH IX | DE = this object's own record address (IX) | ||||||
| 98F4 | POP DE | |||||||
| 98F5 | LD (HL),E | |||||||
| 98F6 | INC HL | |||||||
| 98F7 | LD (HL),D | |||||||
| 98F8 | LD HL,$60EB | increment the queue count | ||||||
| 98FB | INC (HL) | |||||||
| 98FC | POP HL | restore the list-traversal pointer | ||||||
| 98FD | JP $983C | => Per-frame dynamic object dispatcher | ||||||
|
Used by the routine at 9808.
|
||||
| 9900 | LD A,($60EB) | B = queued-object count from $60EB | ||
| 9903 | AND A | If zero, nothing to draw, return | ||
| 9904 | RET Z | |||
| 9905 | LD B,A | B = count, HL = the draw-queue's record-pointer list at $60EC | ||
| 9906 | LD HL,$60EC | |||
| 9909 | PUSH BC | Save BC, the outer loop counter | ||
| 990A | LD E,(HL) | Read the next queued record pointer (E,D) from the list, advancing HL | ||
| 990B | INC HL | |||
| 990C | LD D,(HL) | |||
| 990D | INC HL | |||
| 990E | PUSH HL | Save HL, load the record pointer into IX | ||
| 990F | PUSH DE | |||
| 9910 | POP IX | |||
| 9912 | CALL $97BA | Draw an object's sprite | ||
| 9915 | POP HL | Restore HL, restore BC, loop back to $9909 for the next queued object | ||
| 9916 | POP BC | |||
| 9917 | DJNZ $9909 | |||
| 9919 | RET | |||
|
|
||||
| 991A | DEFB $00,$FA,$00,$06,$00,$00,$06,$00 | |||
| 9922 | DEFB $FA | |||
|
Used by the routine at 8D8D.
|
||||
|
Plays sound effect $08, allocates an object at the active list head, sets its sprite to the weapon's own sprite (A), position from the player, kind $0D, and facing from $8DC1, then calls 9A60 to finalize.
|
||||
| 9923 | PUSH AF | |||
| 9924 | LD A,$08 | |||
| 9926 | CALL $848E | Request sound effect A | ||
| 9929 | LD IX,$610E | |||
| 992D | CALL $84AE | Dynamic object allocator | ||
| 9930 | DEFW $9963 | Dynamic object handler address | ||
| 9932 | POP AF | |||
| 9933 | LD (IX+$08),A | |||
| 9936 | LD A,($8DBD) | |||
| 9939 | LD (IX+$07),A | |||
| 993C | LD HL,($8DBB) | |||
| 993F | LD (IX+$05),L | |||
| 9942 | LD (IX+$06),H | |||
| 9945 | LD (IX+$0A),$0D | |||
| 9949 | LD A,($8DC1) | |||
| 994C | LD (IX+$0B),A | |||
| 994F | LD HL,$991B | |||
| 9952 | CALL $8ABE | |||
| 9955 | CALL $9A60 | Dynamic object finalizer | ||
| 9958 | RET NC | |||
| 9959 | LD (IX+$02),$FF | |||
| 995D | RET | |||
|
|
||||
| 995E | DEFB $1C,$1C,$9C,$9C,$FF | |||
|
|
||||
|
Applies the facing delta twice via 8ABE (see 8ABB), testing collision (9BF0) after each step -- a fast-moving shot. On collision with terrain (no target object, DE unset): just stops. On collision with another object (DE = that object's record): SETS bit 2 of its (+0x0D) -- the "just hit" flag consumed by 9341/9401 -- and writes the projectile's own sprite (masked to 7 bits) into that object's offset +9, presumably so 9401's reward lookup can identify which weapon scored the hit. Animates briefly via the 995E table, then self-destructs.
|
||||
| 9963 | CALL $8ABB | Apply the object's facing direction to its position (IX+5/+6), returning the OLD position in BC | ||
| 9966 | PUSH BC | |||
| 9967 | CALL $9BF0 | Collision test | ||
| 996A | POP BC | |||
| 996B | JR C,$9976 | |||
| 996D | CALL $8ABB | Apply the object's facing direction to its position (IX+5/+6), returning the OLD position in BC | ||
| 9970 | PUSH BC | |||
| 9971 | CALL $9BF0 | Collision test | ||
| 9974 | POP BC | |||
| 9975 | RET NC | |||
| 9976 | LD (IX+$05),B | |||
| 9979 | LD (IX+$06),C | |||
| 997C | JR NZ,$998E | |||
| 997E | LD HL,$000D | |||
| 9981 | ADD HL,DE | |||
| 9982 | SET 2,(HL) | |||
| 9984 | LD HL,$0009 | |||
| 9987 | ADD HL,DE | |||
| 9988 | LD A,(IX+$08) | |||
| 998B | AND $7F | |||
| 998D | LD (HL),A | |||
| 998E | LD (IX+$0F),$00 | |||
| 9992 | CALL $923E | Save continuation | ||
| 9995 | LD HL,$995E | |||
| 9998 | CALL $99D5 | Sprite-animation stepper | ||
| 999B | RET NC | |||
| 999C | LD (IX+$02),$FF | |||
| 99A0 | RET | |||
|
Picks one of 4 per-direction tables via (IX+$0B), then runs 99D5's stepper on it.
HL = (IX+$1D)/(IX+$1E), a pointer to a table of 4 sub-table addresses. Selects one by facing direction ((IX+$0B), mapped 1->0/2->1/... via a small comparison chain, then AND $03), loads that sub-table's address, and falls into 99D5's shared byte-code interpreter ($FD/$FC/$FE/$FB position-delta markers, otherwise a sprite number) -- this is how the player's (and other directional objects') walk-cycle animation is driven per-facing.
|
||||
| 99A1 | LD L,(IX+$1D) | |||
| 99A4 | LD H,(IX+$1E) | |||
| 99A7 | LD A,$C9 | "RET" instruction code | ||
| 99A9 | LD ($99D1),A | set instruction | ||
| 99AC | LD A,(IX+$0B) | |||
| 99AF | CP $06 | |||
| 99B1 | JR NZ,$99B9 | |||
| 99B3 | XOR A | "NOP" instruction code | ||
| 99B4 | LD ($99D1),A | set instruction | ||
| 99B7 | LD A,$01 | |||
| 99B9 | CP $02 | |||
| 99BB | JR NZ,$99C3 | |||
| 99BD | XOR A | "NOP" instruction code | ||
| 99BE | LD ($99D1),A | set instruction | ||
| 99C1 | LD A,$04 | |||
| 99C3 | RRCA | |||
| 99C4 | AND $03 | |||
| 99C6 | LD E,A | |||
| 99C7 | LD D,$00 | |||
| 99C9 | ADD HL,DE | |||
| 99CA | LD E,(HL) | |||
| 99CB | INC HL | |||
| 99CC | LD D,(HL) | |||
| 99CD | EX DE,HL | |||
| 99CE | JP $99DA | |||
|
Used by the routine at 99D5.
|
||||
| 99D1 | RET | !!MUT-CMD!! patched by 99A9, 99B4, 99BE and 99D7 | ||
| 99D2 | NEG | |||
| 99D4 | RET | |||
|
Called with HL = a small table of raw sprite numbers (see 9526/9577/94E9 for examples). Indexes the table by (IX+$0F) (a per-object phase counter), reads the byte there into A, then INCs (IX+$0F) for next time. $FF in the table means "wrap to start" (resets (IX+$0F) to 0 and re-reads from the table's first byte); $FD is a second special marker (purpose not yet traced past 9A01). Otherwise A is the next sprite number to display for this object -- this is how 957C/952D/94EE (and others) drive their objects' animation frames.
|
||||
| 99D5 | LD A,$C9 | "RET" instruction code | ||
| 99D7 | LD ($99D1),A | set instruction | ||
|
This entry point is used by the routine at 99A1.
|
||||
| 99DA | XOR A | Clear the wrap-flag scratch $991A | ||
| 99DB | LD ($991A),A | |||
| 99DE | LD C,L | save the table base (HL) into BC | ||
| 99DF | LD B,H | |||
| 99E0 | LD E,(IX+$0F) | HL = the table base plus the phase counter (IX+0x0F) | ||
| 99E3 | LD D,$00 | |||
| 99E5 | ADD HL,DE | |||
| 99E6 | LD A,(HL) | A = the next table byte, advance the pointer and the phase counter, test for the wrap marker $FF | ||
| 99E7 | INC HL | |||
| 99E8 | INC (IX+$0F) | |||
| 99EB | CP $FF | |||
| 99ED | JR NZ,$99FC | If not the wrap marker, use this byte as-is | ||
| 99EF | LD (IX+$0F),$00 | Wrap marker: reset the phase counter to 0, restart from the table base, set the wrap-flag, loop back for the real first byte | ||
| 99F3 | LD L,C | |||
| 99F4 | LD H,B | |||
| 99F5 | LD A,$FF | |||
| 99F7 | LD ($991A),A | |||
| 99FA | JR $99E6 | |||
| 99FC | CP $FD | Test for the "adjust X" marker $FD | ||
| 99FE | JR NZ,$9A10 | |||
| 9A00 | LD A,(HL) | A = the delta operand byte | ||
| 9A01 | CALL $99D1 | NEG / not NEG | ||
| 9A04 | ADD A,(IX+$05) | Add it, possibly negated, to X (+0x05), store back | ||
| 9A07 | LD (IX+$05),A | |||
| 9A0A | INC HL | Advance past the operand, advance the phase counter, loop for the next byte | ||
| 9A0B | INC (IX+$0F) | |||
| 9A0E | JR $99E6 | |||
| 9A10 | CP $FC | Test for the "adjust Y" marker $FC | ||
| 9A12 | JR NZ,$9A20 | |||
| 9A14 | LD A,(HL) | A = the delta operand byte | ||
| 9A15 | CALL $99D1 | NEG / not NEG | ||
| 9A18 | ADD A,(IX+$06) | Add it, possibly negated, to Y (+0x06), store back, loop back to advance | ||
| 9A1B | LD (IX+$06),A | |||
| 9A1E | JR $9A0A | |||
| 9A20 | CP $FE | Test for the "adjust height" marker $FE | ||
| 9A22 | JR NZ,$9A2D | |||
| 9A24 | LD A,(IX+$07) | Add the table byte to the height field (+0x07), store back, loop back to advance | ||
| 9A27 | ADD A,(HL) | |||
| 9A28 | LD (IX+$07),A | |||
| 9A2B | JR $9A0A | |||
| 9A2D | CP $FB | Test for the "set facing" marker $FB | ||
| 9A2F | JR NZ,$9A37 | |||
| 9A31 | LD A,(HL) | A = the table byte, store it as the object's facing (+0x0B), loop back to advance | ||
| 9A32 | LD (IX+$0B),A | |||
| 9A35 | JR $9A0A | |||
| 9A37 | LD (IX+$08),A | Otherwise: A is a plain sprite number, store it as the object's sprite (+0x08) | ||
| 9A3A | LD A,($99D1) | get instruction code | ||
| 9A3D | AND A | If the last instruction code was RET, no wrap happened, set the mirror flag on the sprite (+0x08 bit 7) | ||
| 9A3E | JR NZ,$9A44 | |||
| 9A40 | SET 7,(IX+$08) | |||
| 9A44 | LD A,($991A) | A = the wrap-flag, 0 or $FF, doubled to a signed byte, return | ||
| 9A47 | ADD A,A | |||
| 9A48 | RET | |||
|
Masks each of X (IX+5) and Y (IX+6) to its 8px-aligned cell (AND $F8) then adds 4 to centre it in the cell, before falling into 9A60 to recompute the bounding box.
|
||||
| 9A49 | LD A,(IX+$05) | |||
| 9A4C | AND $F8 | |||
| 9A4E | OR $04 | |||
| 9A50 | LD (IX+$05),A | |||
| 9A53 | LD A,(IX+$06) | |||
| 9A56 | AND $F8 | |||
| 9A58 | OR $04 | |||
| 9A5A | LD (IX+$06),A | |||
| 9A5D | JP $9A60 | => Dynamic object finalizer | ||
|
Computes the object's bounding box (+0x10..+0x13) from its position and a per-kind size template.
CONFIRMED: copies a 3-byte size template from table $750A (indexed by the object's kind, +0x0A, *3) into its own +0x15/+0x16/+0x17 fields, then uses the template's first byte as a half-extent to derive the bounding box: left/right (+0x10/+0x12) from the X position (+5), top/bottom (+0x11/+0x13) from the Y position (+6). Returns with Carry set (and skips writing the far edge) if either edge underflows or the box would extend past screen column/row 63 -- this is presumably how objects too close to the screen edge get flagged. This is the source of the +0x10..+0x13 fields every collision routine (9BF0/9B5A/9ABC) reads.
|
||||
| 9A60 | PUSH IX | HL = IX + 0x15 (the size-template destination), DE = HL | ||
| 9A62 | POP HL | |||
| 9A63 | LD DE,$0015 | |||
| 9A66 | ADD HL,DE | |||
| 9A67 | EX DE,HL | |||
| 9A68 | LD C,(IX+$0A) | C = object kind (+0x0A), HL = $750A + C*3 (size-template source) | ||
| 9A6B | LD B,$00 | |||
| 9A6D | LD HL,$750A | |||
| 9A70 | ADD HL,BC | |||
| 9A71 | ADD HL,BC | |||
| 9A72 | ADD HL,BC | |||
| 9A73 | LD BC,$0003 | BC = 3, copy the size template into +0x15/+0x16/+0x17 via LDIR | ||
| 9A76 | LDIR | |||
| 9A78 | LD E,(IX+$15) | E = half-extent (template byte 0), A = X position, compute the left edge | ||
| 9A7B | LD A,(IX+$05) | |||
| 9A7E | SUB E | |||
| 9A7F | LD (IX+$10),A | store the left edge (+0x10) | ||
| 9A82 | JR C,$9AA7 | bail out if the left edge underflowed | ||
| 9A84 | JR Z,$9AA7 | |||
| 9A86 | ADD A,E | compute the right edge = left + 2*half-extent - 1 | ||
| 9A87 | ADD A,E | |||
| 9A88 | DEC A | |||
| 9A89 | LD (IX+$12),A | store the right edge (+0x12) | ||
| 9A8C | CP $3F | bail out if the right edge is off the 63-column screen | ||
| 9A8E | JR NC,$9AA7 | |||
| 9A90 | LD A,(IX+$06) | A = Y position, compute the top edge | ||
| 9A93 | SUB E | |||
| 9A94 | LD (IX+$11),A | store the top edge (+0x11) | ||
| 9A97 | JR C,$9AA7 | bail out if the top edge underflowed | ||
| 9A99 | JR Z,$9AA7 | |||
| 9A9B | ADD A,E | compute the bottom edge | ||
| 9A9C | ADD A,E | |||
| 9A9D | DEC A | |||
| 9A9E | LD (IX+$13),A | store the bottom edge (+0x13) | ||
| 9AA1 | CP $3F | bail out if the bottom edge is off the 63-row screen | ||
| 9AA3 | JR NC,$9AA7 | |||
| 9AA5 | AND A | success: clear Carry, return | ||
| 9AA6 | RET | |||
| 9AA7 | OR $01 | failure: set Carry, return | ||
| 9AA9 | SCF | |||
| 9AAA | RET | |||
|
Walks B entries, count = low byte of $7509, starting at $74CE, comparing each entry's key byte against A; on a match (Z) returns with HL pointing at that entry's paired data byte, otherwise returns NZ after scanning the whole table. Used by 8E6E, creature height lookup, and others resolving a code into a data value via this shared 2-byte-record table.
|
||||
| 9AAB | LD HL,$74CE | HL = the key/data pair table $74CE | ||
| 9AAE | LD BC,($7509) | BC = table entry count, low byte of $7509 | ||
| 9AB2 | LD B,C | B = the entry count | ||
| 9AB3 | CP (HL) | Compare A against this entry's key | ||
| 9AB4 | INC HL | Advance past the key byte, stop (Z) if matched, HL now points at the paired data byte | ||
| 9AB5 | RET Z | |||
| 9AB6 | INC HL | Otherwise skip the data byte too | ||
| 9AB7 | DJNZ $9AB3 | Loop for the next entry | ||
| 9AB9 | RET | Not found, return NZ | ||
|
|
||||
| 9ABA | DEFB $00,$FF | |||
|
Used by the routine at 9BF0.
|
||||||||
|
Converts screen coordinates (B=X,C=Y) to a room-grid cell: (Y AND $F8)>>3 * 8 + (X AND $F8)>>3 -- confirms the 612C grid's row*8+col indexing operates on 8px-aligned screen tiles. Reads the grid cell; $00 = passable (no collision). $7F = solid wall, hard block (see 9B56). Any other nonzero code is looked up in a per-terrain-code shape/behaviour table at $7556 (the same table 8E6E reads) -- individual terrain codes may have different collision shapes rather than being uniformly solid.
|
||||||||
| 9ABC | LD A,B | compute the grid row byte from screen Y (B AND $F8) | ||||||
| 9ABD | AND $F8 | |||||||
| 9ABF | LD L,A | |||||||
| 9AC0 | LD A,C | compute the grid column from screen X (C AND $F8, /8), combine into the cell index | ||||||
| 9AC1 | AND $F8 | |||||||
| 9AC3 | RRCA | |||||||
| 9AC4 | RRCA | |||||||
| 9AC5 | RRCA | |||||||
| 9AC6 | ADD A,L | |||||||
| 9AC7 | LD HL,$9ABB | dedupe check: skip re-marking the same cell twice in a row (cache at $9ABB) | ||||||
| 9ACA | CP (HL) | |||||||
| 9ACB | RET Z | |||||||
| 9ACC | INC (HL) | update the cache, handling the increment-overflow edge case | ||||||
| 9ACD | JR Z,$9ACF | |||||||
| 9ACF | LD (HL),A | store the cache, L = cell index, H = 0 | ||||||
| 9AD0 | LD L,A | |||||||
| 9AD1 | LD H,$00 | |||||||
| 9AD3 | LD BC,$612C | Room grid address | ||||||
| 9AD6 | ADD HL,BC | HL = grid cell address, read it, done (NC) if empty | ||||||
| 9AD7 | LD A,(HL) | |||||||
| 9AD8 | AND A | |||||||
| 9AD9 | JR Z,$9B40 | |||||||
| 9ADB | LD ($9ABA),A | cache the value, branch away (blocked) if solid wall ($7F) | ||||||
| 9ADE | CP $7F | |||||||
| 9AE0 | JP Z,$9B56 | |||||||
| 9AE3 | LD L,A | HL = 7556 + value*2 (shape-pointer lookup) | ||||||
| 9AE4 | ADD HL,HL | |||||||
| 9AE5 | LD H,$00 | |||||||
| 9AE7 | LD BC,$7556 | |||||||
| 9AEA | ADD HL,BC | |||||||
| 9AEB | LD E,(HL) | DE = the shape record pointer | ||||||
| 9AEC | INC HL | |||||||
| 9AED | LD D,(HL) | |||||||
| 9AEE | EX DE,HL | |||||||
| 9AEF | LD A,(IX+$07) | D = the object's height field (+0x07) | ||||||
| 9AF2 | LD D,A | |||||||
| 9AF3 | ADD A,(IX+$16) | E = D + the object's +0x16 field, minus 1 (in-cell position) | ||||||
| 9AF6 | DEC A | |||||||
| 9AF7 | LD E,A | |||||||
| 9AF8 | LD C,$18 | C = $18 (loop threshold), B = shape record byte count | ||||||
| 9AFA | LD B,(HL) | |||||||
| 9AFB | JR $9B24 | jump into 9AFD's shape-walk loop | ||||||
|
|
||||
|
Walks a 7556 shape record, deciding a partial collision against the object's position within the cell.
Called from 9ABC's grid collision test for non-wall, non-empty terrain codes. Walks the shape record's bytes as (key,threshold) style entries: each key is looked up in 74CE then 750B to get a threshold delta, accumulated and compared against the object's in-cell position (D). Depending on where the accumulated threshold lands relative to D, and whether the resulting shape value is found in a small buffer at $75AE, either returns "no block" (NC) or "blocked" (Carry set), and may SET bit 0 or bit 1 of the object's (IX+$0D) along the way -- exact in-game meaning of those bits (ledge? climbable edge?) not confirmed.
|
||||
| 9AFD | LD A,E | test loop position against threshold C, skip ahead if before it | ||
| 9AFE | CP C | |||
| 9AFF | JR C,$9B27 | |||
| 9B01 | PUSH HL | save HL/BC, A = this shape-record byte | ||
| 9B02 | PUSH BC | |||
| 9B03 | LD A,(HL) | |||
| 9B04 | CALL $9AAB | Search the (key,data) pair table at $74CE for key A | ||
| 9B07 | LD C,(HL) | |||
| 9B08 | LD B,$00 | |||
| 9B0A | LD HL,$750B | HL = the 750B table | ||
| 9B0D | ADD HL,BC | plus the index * 3, its entry size | ||
| 9B0E | ADD HL,BC | |||
| 9B0F | ADD HL,BC | |||
| 9B10 | LD A,(HL) | A = the entry's first byte | ||
| 9B11 | POP BC | restore BC and HL | ||
| 9B12 | POP HL | |||
| 9B13 | ADD A,C | accumulate the running threshold (A += C), compare against D | ||
| 9B14 | LD C,A | |||
| 9B15 | CP D | |||
| 9B16 | JR C,$9B24 | |||
| 9B18 | JR NZ,$9B20 | branch on the comparison, storing the shape value on an exact match, then advance | ||
| 9B1A | LD A,(HL) | |||
| 9B1B | LD (IX+$14),A | |||
| 9B1E | JR $9B24 | |||
| 9B20 | LD A,(HL) | test for a nonzero shape value, branch further away if set | ||
| 9B21 | AND A | |||
| 9B22 | JR NZ,$9B42 | |||
|
This entry point is used by the routine at 9ABC.
|
||||
| 9B24 | INC HL | *loop-advance: INC HL, DJNZ back to the top | ||
| 9B25 | DJNZ $9AFD | |||
| 9B27 | LD A,(IX+$14) | loop exhausted: test the accumulated shape value, return unblocked if zero | ||
| 9B2A | AND A | |||
| 9B2B | JR Z,$9B40 | |||
| 9B2D | LD HL,$75AE | search the $75AE buffer for this shape value (count from $75B5) | ||
| 9B30 | LD BC,($75B5) | |||
| 9B34 | LD B,$00 | |||
| 9B36 | CPIR | |||
| 9B38 | JR NZ,$9B40 | |||
| 9B3A | SET 1,(IX+$0D) | found: SET bit 1 of (IX+$0D), return unblocked | ||
| 9B3E | JR $9B40 | |||
|
This entry point is used by the routine at 9ABC.
|
||||
| 9B40 | AND A | *shared exit: clear Carry, return (not blocked) | ||
| 9B41 | RET | |||
| 9B42 | LD (IX+$14),A | threshold-exceeded path: store the shape value, search the $75AE buffer | ||
| 9B45 | LD HL,$75AE | |||
| 9B48 | LD BC,($75B5) | |||
| 9B4C | LD B,$00 | CPIR search, SET bit 0 of (IX+$0D) if found | ||
| 9B4E | CPIR | |||
| 9B50 | JR NZ,$9B56 | |||
| 9B52 | SET 0,(IX+$0D) | |||
|
This entry point is used by the routine at 9ABC.
|
||||
| 9B56 | OR $01 | *shared exit: return with Carry set (blocked) | ||
| 9B58 | SCF | |||
| 9B59 | RET | |||
|
Walks the active object list looking for another same-room object whose bounding box (+$10..+$13) overlaps IX's; DE = the object found.
Per candidate (DE): skips self (DE==IX), skips a different room (+2 mismatch), skips a candidate with bit 7 of +0x0D set (an "inactive/ignore" flag), then does an AABB test between the candidate's and caller's +0x10..+0x13 boxes, then a depth/height check via +0x07 and +0x16. On a depth TIE specifically, hands off to 9BD4 instead of finishing here. On success: if the found object is not the player (8DB6) and its bit 3 of +0x0D is set, SETs bit 0 of the CALLER's +0x0D (9BD4's variant sets bit 1 instead) -- these look like "touching an interactive/solid object" markers, exact consumer not traced. Returns with DE = the found object, Carry set; NC if the list is exhausted with no match.
|
||||
| 9B5A | LD HL,$610E | HL = active object list head 610E | ||
| 9B5D | LD E,(HL) | *loop: DE = next record's link | ||
| 9B5E | INC HL | |||
| 9B5F | LD D,(HL) | |||
| 9B60 | LD A,D | return if list end (DE=0) | ||
| 9B61 | OR E | |||
| 9B62 | RET Z | |||
| 9B63 | PUSH IX | skip if candidate == caller (self) | ||
| 9B65 | POP HL | |||
| 9B66 | AND A | |||
| 9B67 | SBC HL,DE | |||
| 9B69 | JP Z,$9BEC | HL = candidate + 2 (room field) | ||
| 9B6C | LD HL,$0002 | |||
| 9B6F | ADD HL,DE | |||
| 9B70 | LD A,(IX+$02) | A = caller's room | ||
| 9B73 | CP (HL) | compare against candidate's room, skip if different | ||
| 9B74 | JP NZ,$9BEC | |||
| 9B77 | LD HL,$000D | skip if candidate's bit 7 of +0x0D is set (inactive) | ||
| 9B7A | ADD HL,DE | |||
| 9B7B | BIT 7,(HL) | |||
| 9B7D | JP NZ,$9BEC | |||
| 9B80 | LD HL,$0013 | HL = the candidate's bottom edge (+0x13) | ||
| 9B83 | ADD HL,DE | |||
| 9B84 | LD A,(HL) | compare against the caller's top (+0x11) | ||
| 9B85 | CP (IX+$11) | |||
| 9B88 | JR C,$9BEC | above it: no overlap | ||
| 9B8A | DEC HL | compare the candidate's right against the caller's left (+0x10) | ||
| 9B8B | LD A,(HL) | |||
| 9B8C | CP (IX+$10) | |||
| 9B8F | JR C,$9BEC | left of it: no overlap | ||
| 9B91 | DEC HL | |||
| 9B92 | LD A,(IX+$13) | compare the caller's bottom (+0x13) against the candidate's top | ||
| 9B95 | CP (HL) | |||
| 9B96 | JR C,$9BEC | above it: no overlap | ||
| 9B98 | DEC HL | compare the caller's right (+0x12) against the candidate's left | ||
| 9B99 | LD A,(IX+$12) | |||
| 9B9C | CP (HL) | |||
| 9B9D | JR C,$9BEC | left of it: no overlap | ||
| 9B9F | LD HL,$0016 | compute candidate depth (+0x16 + terrain byte at the +0x07 offset) | ||
| 9BA2 | ADD HL,DE | |||
| 9BA3 | LD A,(HL) | |||
| 9BA4 | LD HL,$0007 | |||
| 9BA7 | ADD HL,DE | |||
| 9BA8 | ADD A,(HL) | |||
| 9BA9 | CP (IX+$07) | compare against caller's depth (+0x07), hand off to 9BD4 on an exact tie | ||
| 9BAC | JR C,$9BEC | |||
| 9BAE | JR Z,$9BD4 | |||
| 9BB0 | LD A,(IX+$07) | depth check continued: skip if candidate is at or below the caller's height | ||
| 9BB3 | ADD A,(IX+$16) | |||
| 9BB6 | CP (HL) | |||
| 9BB7 | JR C,$9BEC | |||
| 9BB9 | JR Z,$9BEC | |||
| 9BBB | LD HL,$000D | HL = the candidate's flags (+0x0D) | ||
| 9BBE | ADD HL,DE | |||
| 9BBF | BIT 3,(HL) | bit 3 clear: nothing more to flag | ||
| 9BC1 | JR Z,$9BCF | |||
| 9BC3 | LD HL,$8DB6 | compare the candidate against the player ($8DB6) | ||
| 9BC6 | AND A | |||
| 9BC7 | SBC HL,DE | |||
| 9BC9 | JR Z,$9BCF | it is the player: skip the flag | ||
| 9BCB | SET 0,(IX+$0D) | otherwise set bit 0 of the caller's own flags (+0x0D) | ||
| 9BCF | XOR A | match found: return with Carry set | ||
| 9BD0 | SCF | |||
| 9BD1 | RET | |||
|
|
||||
| 9BD2 | DEFB $AF,$C9 | |||
|
Used by the routine at 9B5A.
|
||||
|
On an exact depth tie with a candidate object (DE), tests its blocking-tag flag and updates the mover's own flags before continuing the overlap scan at 9B5D.
|
||||
| 9BD4 | LD (IX+$14),$01 | Set the mover's "touched something" flag (+0x14) = 1 | ||
| 9BD8 | LD HL,$000D | HL = the candidate object's flags field (+0x0D), addressed via DE | ||
| 9BDB | ADD HL,DE | |||
| 9BDC | BIT 3,(HL) | Test bit 3, a blocking-tag flag | ||
| 9BDE | JR Z,$9BEC | If clear, skip the marker check and the flag-set below | ||
| 9BE0 | LD HL,$8DB6 | Compare the candidate object's address against the fixed marker $8DB6 | ||
| 9BE3 | AND A | |||
| 9BE4 | SBC HL,DE | |||
| 9BE6 | JR Z,$9BEC | If it matches, skip the flag-set below | ||
| 9BE8 | SET 1,(IX+$0D) | Otherwise set bit 1 of the mover's own flags (+0x0D) | ||
|
This entry point is used by the routine at 9B5A.
|
||||
| 9BEC | EX DE,HL | Restore DE/HL and continue the object-overlap scan at $9B5D | ||
| 9BED | JP $9B5D | |||
|
||||||||
|
Checks the object's 4 bounding-box corners against the room grid, then checks for overlap with other objects.
Tests all 4 corners of the object's bounding box (screen-coordinate pairs at +0x10/+0x11, +0x10/+0x13, +0x12/+0x13, +0x12/+0x11 -- i.e. (left,top)/(left,bottom)/(right,bottom)/(right,top)) via 9ABC, returning early (C) if any corner hits solid terrain. If all 4 corners are clear, finishes with 9B5A (object-vs-object overlap scan). Also calls 9A60 first and returns early if it reports collision (purpose of that specific pre-check not fully traced).
|
||||||||
| 9BF0 | XOR A | |||||||
| 9BF1 | LD (IX+$14),A | |||||||
| 9BF4 | LD ($9ABA),A | |||||||
| 9BF7 | LD A,$FF | |||||||
| 9BF9 | LD ($9ABB),A | |||||||
| 9BFC | CALL $9A60 | Dynamic object finalizer | ||||||
| 9BFF | RET C | |||||||
| 9C00 | LD B,(IX+$10) | |||||||
| 9C03 | LD C,(IX+$11) | |||||||
| 9C06 | CALL $9ABC | Terrain collision test for one screen point | ||||||
| 9C09 | RET C | |||||||
| 9C0A | LD B,(IX+$10) | |||||||
| 9C0D | LD C,(IX+$13) | |||||||
| 9C10 | CALL $9ABC | Terrain collision test for one screen point | ||||||
| 9C13 | RET C | |||||||
| 9C14 | LD B,(IX+$12) | |||||||
| 9C17 | LD C,(IX+$13) | |||||||
| 9C1A | CALL $9ABC | Terrain collision test for one screen point | ||||||
| 9C1D | RET C | |||||||
| 9C1E | LD B,(IX+$12) | |||||||
| 9C21 | LD C,(IX+$11) | |||||||
| 9C24 | CALL $9ABC | Terrain collision test for one screen point | ||||||
| 9C27 | RET C | |||||||
| 9C28 | XOR A | |||||||
| 9C29 | LD ($9ABA),A | |||||||
| 9C2C | CALL $9B5A | Collision/overlap scan | ||||||
| 9C2F | RET C | |||||||
| 9C30 | AND A | |||||||
| 9C31 | RET | |||||||
|
|
||||
| 9C32 | DEFB $00,$B9,$FF | |||
|
Copies the shadow screen to the real ZX screen over the dirty bounding box ($6194-$6196), then redraws the room background.
|
||||
| 9C35 | LD HL,$61A6 | HL = the saved-clip flag $61A6 | ||
| 9C38 | LD A,(HL) | read it and clear it | ||
| 9C39 | LD (HL),$00 | |||
| 9C3B | AND A | not set: skip the restore | ||
| 9C3C | JR Z,$9C4A | |||
| 9C3E | LD HL,$9C32 | HL = the saved 3-byte clip value $9C32, DE = $6195 | ||
| 9C41 | LD DE,$6195 | |||
| 9C44 | LDI | restore it over the bounding box | ||
| 9C46 | LDI | |||
| 9C48 | LDI | |||
| 9C4A | LD BC,$6194 | BC = the bounding-box min tracker $6194 | ||
| 9C4D | LD A,(BC) | A = the top row, aligned down to a cell boundary | ||
| 9C4E | AND $F8 | |||
| 9C50 | LD D,A | D = it, write the aligned value back | ||
| 9C51 | LD (BC),A | |||
| 9C52 | AND $38 | isolate the row-within-third, *4 into E | ||
| 9C54 | ADD A,A | |||
| 9C55 | ADD A,A | |||
| 9C56 | LD E,A | |||
| 9C57 | LD A,D | A = the aligned row again, keep its low 3 bits | ||
| 9C58 | AND $07 | |||
| 9C5A | LD H,A | |||
| 9C5B | LD A,D | A = the screen-third bits | ||
| 9C5C | AND $C0 | |||
| 9C5E | RRCA | rotate them down into place | ||
| 9C5F | RRCA | |||
| 9C60 | RRCA | |||
| 9C61 | OR H | D = the combined address high byte | ||
| 9C62 | LD D,A | |||
| 9C63 | LD HL,$4000 | HL = shadow screen base $4000 + the computed row offset | ||
| 9C66 | ADD HL,DE | |||
| 9C67 | INC BC | read the bounding-box min column | ||
| 9C68 | LD A,(BC) | |||
| 9C69 | AND $F8 | align it down to a byte boundary, write it back | ||
| 9C6B | LD (BC),A | |||
| 9C6C | RRCA | divide by 8 -> the byte-column offset | ||
| 9C6D | RRCA | |||
| 9C6E | RRCA | |||
| 9C6F | LD E,A | widen it to a word | ||
| 9C70 | LD D,$00 | |||
| 9C72 | ADD HL,DE | add it to the destination address | ||
| 9C73 | LD ($9CBB),HL | save the destination address at $9CBB | ||
| 9C76 | DEC BC | A = the aligned min row again | ||
| 9C77 | LD A,(BC) | |||
| 9C78 | LD L,A | widen it to a word | ||
| 9C79 | LD H,$00 | |||
| 9C7B | ADD HL,HL | multiply by 32, the shadow-screen row stride | ||
| 9C7C | ADD HL,HL | |||
| 9C7D | ADD HL,HL | |||
| 9C7E | ADD HL,HL | |||
| 9C7F | ADD HL,HL | |||
| 9C80 | ADD HL,DE | add the column offset | ||
| 9C81 | LD DE,$E390 | Shadow screen address | ||
| 9C84 | ADD HL,DE | |||
| 9C85 | LD ($9CBE),HL | save the source address at $9CBE | ||
| 9C88 | LD HL,($6194) | HL = the bounding box, BC = the max tracker $6196 | ||
| 9C8B | LD BC,$6196 | |||
| 9C8E | LD A,(BC) | A = the max row, rounded up to a cell boundary | ||
| 9C8F | OR $07 | |||
| 9C91 | INC A | |||
| 9C92 | SUB L | minus the min row: abort if the box is empty | ||
| 9C93 | RET C | |||
| 9C94 | RRCA | divide the height by 8, save the row-group count at $9CC1 | ||
| 9C95 | RRCA | |||
| 9C96 | RRCA | |||
| 9C97 | LD ($9CC1),A | save the row-group count at $9CC1 | ||
| 9C9A | INC BC | A = the bounding-box max column | ||
| 9C9B | LD A,(BC) | |||
| 9C9C | OR $07 | round it up, subtract the min column | ||
| 9C9E | SUB H | |||
| 9C9F | ADD A,$01 | round the difference up | ||
| 9CA1 | RRA | divide by 4 -> the copy width in LDI pairs | ||
| 9CA2 | RRA | |||
| 9CA3 | LD E,A | widen it to a word | ||
| 9CA4 | LD D,$00 | |||
| 9CA6 | LD HL,$9D08 | HL = the unrolled loop's own tail address $9D08 | ||
| 9CA9 | AND A | subtract the width: a self-modified jump into the unrolled copy | ||
| 9CAA | SBC HL,DE | |||
| 9CAC | LD ($9D14),HL | save it at $9D14 | ||
| 9CAF | RRA | halve the width again | ||
| 9CB0 | LD E,A | |||
| 9CB1 | LD HL,$0100 | HL = $0100 | ||
| 9CB4 | AND A | minus it: the per-row source stride | ||
| 9CB5 | SBC HL,DE | |||
| 9CB7 | LD ($9D0A),HL | save it at $9D0A | ||
|
Copy shadow screen to ZX screen
|
||||
| 9CBA | LD DE,$4000 | !!MUT-ARG!! DE = real screen base $4000 | ||
| 9CBD | LD HL,$E390 | !!MUT-ARG!! Shadow screen address | ||
| 9CC0 | LD A,$18 | !!MUT-ARG!! A = the row-group count | ||
| 9CC2 | PUSH AF | *outer loop: save it | ||
| 9CC3 | LD A,$09 | jump into the unrolled copy at its self-modified entry point | ||
| 9CC5 | JP $9D0F | |||
| 9CC8 | LDI | unrolled 32-LDI row copy (self-modified entry point handles partial widths) | ||
| 9CCA | LDI | |||
| 9CCC | LDI | |||
| 9CCE | LDI | |||
| 9CD0 | LDI | |||
| 9CD2 | LDI | |||
| 9CD4 | LDI | |||
| 9CD6 | LDI | |||
| 9CD8 | LDI | |||
| 9CDA | LDI | |||
| 9CDC | LDI | |||
| 9CDE | LDI | |||
| 9CE0 | LDI | |||
| 9CE2 | LDI | |||
| 9CE4 | LDI | |||
| 9CE6 | LDI | |||
| 9CE8 | LDI | |||
| 9CEA | LDI | |||
| 9CEC | LDI | |||
| 9CEE | LDI | |||
| 9CF0 | LDI | |||
| 9CF2 | LDI | |||
| 9CF4 | LDI | |||
| 9CF6 | LDI | |||
| 9CF8 | LDI | |||
| 9CFA | LDI | |||
| 9CFC | LDI | |||
| 9CFE | LDI | |||
| 9D00 | LDI | |||
| 9D02 | LDI | |||
| 9D04 | LDI | |||
| 9D06 | LDI | |||
| 9D08 | ADD HL,BC | advance the destination by the row stride | ||
| 9D09 | LD BC,$00E0 | !!MUT-ARG!! self-modified stride (compensates the copy width) | ||
| 9D0C | EX DE,HL | fold the stride into the destination pointer | ||
| 9D0D | ADD HL,BC | |||
| 9D0E | EX DE,HL | |||
| 9D0F | LD BC,$0020 | BC = 32 (reset the LDI count), decrement the row-group count | ||
| 9D12 | DEC A | |||
| 9D13 | JP NZ,$9CC8 | !!MUT-ARG!! loop the row group | ||
| 9D16 | EX DE,HL | |||
| 9D17 | LD BC,$F820 | advance the shadow-screen source to the next row-group | ||
| 9D1A | ADD HL,BC | |||
| 9D1B | LD A,H | round the high byte up to the next screen-third boundary | ||
| 9D1C | ADD A,$07 | |||
| 9D1E | AND $F8 | mask to the boundary and store it back | ||
| 9D20 | LD H,A | |||
| 9D21 | EX DE,HL | |||
| 9D22 | POP AF | loop the outer row-group count | ||
| 9D23 | DEC A | |||
| 9D24 | JP NZ,$9CC2 | |||
| 9D27 | LD A,($6193) | one-shot: test the already-done flag $6193 | ||
| 9D2A | AND A | |||
| 9D2B | RET NZ | already set: return | ||
| 9D2C | LD A,$FF | flag it | ||
| 9D2E | LD ($6193),A | |||
| 9D31 | LD A,$04 | A = sound effect $04 | ||
| 9D33 | CALL $848E | Request sound effect A | ||
| 9D36 | LD A,($6175) | A = room colour | ||
| 9D39 | JP $69AC | => Draw the room's background | ||
|
|
||||
| 9D3C | DEFB $98,$F2,$04,$10,$BE,$00,$00,$00 | |||
| 9D44 | DEFB $5C,$00,$00,$00,$B8,$00,$00,$00 | |||
| 9D4C | DEFB $E0,$00,$00,$00,$00,$00,$00,$00 | |||
| 9D54 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9D5C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9D64 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9D6C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9D74 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9D7C | DEFB $00,$00,$00,$00,$1F,$EE,$02,$08 | |||
| 9D84 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9D8C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9D94 | DEFB $98,$EF,$04,$18,$19,$5F,$F6,$B8 | |||
| 9D9C | DEFB $06,$B7,$BF,$F0,$03,$7D,$7F,$00 | |||
| 9DA4 | DEFB $00,$2F,$80,$00,$00,$00,$00,$00 | |||
| 9DAC | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9DB4 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9DBC | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9DC4 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9DCC | DEFB $00,$00,$00,$00,$80,$00,$00,$00 | |||
| 9DD4 | DEFB $E0,$00,$00,$00,$B0,$00,$00,$00 | |||
| 9DDC | DEFB $A8,$00,$00,$00,$54,$00,$00,$00 | |||
| 9DE4 | DEFB $AC,$00,$00,$00,$54,$00,$00,$00 | |||
| 9DEC | DEFB $AE,$00,$00,$00,$96,$00,$00,$00 | |||
| 9DF4 | DEFB $6E,$00,$00,$00,$DB,$EC,$01,$18 | |||
| 9DFC | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9E04 | DEFB $00,$00,$00,$00,$00,$C0,$E0,$50 | |||
| 9E0C | DEFB $AC,$56,$AA,$56,$AC,$54,$B8,$F0 | |||
| 9E14 | DEFB $1E,$F6,$04,$10,$00,$00,$00,$00 | |||
| 9E1C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9E24 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9E2C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9E34 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9E3C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9E44 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9E4C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9E54 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9E5C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9E64 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9E6C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9E74 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9E7C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9E84 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9E8C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9E94 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9E9C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9EA4 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9EAC | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9EB4 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9EBC | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9EC4 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9ECC | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9ED4 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9EDC | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9EE4 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9EEC | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9EF4 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9EFC | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9F04 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9F0C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9F14 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9F1C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9F24 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9F2C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9F34 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9F3C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9F44 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9F4C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9F54 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9F5C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9F64 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9F6C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9F74 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9F7C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9F84 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9F8C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9F94 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9F9C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9FA4 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9FAC | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9FB4 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9FBC | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9FC4 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9FCC | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9FD4 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9FDC | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9FE4 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9FEC | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9FF4 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 9FFC | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A004 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A00C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A014 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A01C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A024 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A02C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A034 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A03C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A044 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A04C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A054 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A05C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A064 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A06C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A074 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A07C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A084 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A08C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A094 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A09C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A0A4 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A0AC | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A0B4 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A0BC | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A0C4 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A0CC | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A0D4 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A0DC | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A0E4 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A0EC | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A0F4 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A0FC | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A104 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A10C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A114 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A11C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A124 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A12C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A134 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A13C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A144 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A14C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A154 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A15C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A164 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A16C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A174 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A17C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A184 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A18C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A194 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A19C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A1A4 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A1AC | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A1B4 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A1BC | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A1C4 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A1CC | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A1D4 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A1DC | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A1E4 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A1EC | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A1F4 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A1FC | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A204 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A20C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A214 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A21C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A224 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A22C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A234 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A23C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A244 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A24C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A254 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A25C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A264 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A26C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A274 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A27C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A284 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A28C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A294 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A29C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A2A4 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A2AC | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A2B4 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A2BC | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A2C4 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A2CC | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A2D4 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A2DC | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A2E4 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A2EC | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A2F4 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A2FC | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A304 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A30C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A314 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A31C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A324 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A32C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A334 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A33C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A344 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A34C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A354 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A35C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A364 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A36C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A374 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A37C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A384 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A38C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A394 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A39C | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A3A4 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A3AC | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A3B4 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A3BC | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A3C4 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A3CC | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A3D4 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A3DC | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A3E4 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A3EC | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A3F4 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A3FC | DEFB $00,$00,$00,$00 | |||
|
|
||||
| A400 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| A408 | DEFB $00,$18,$18,$18,$18,$18,$00,$18 | |||
| A410 | DEFB $00,$36,$36,$36,$00,$00,$00,$00 | |||
| A418 | DEFB $00,$6C,$FE,$FE,$6C,$FE,$FE,$6C | |||
| A420 | DEFB $00,$18,$FE,$98,$FE,$1A,$FE,$18 | |||
| A428 | DEFB $00,$C6,$C6,$0C,$18,$30,$66,$C6 | |||
| A430 | DEFB $00,$18,$24,$18,$30,$4A,$46,$3E | |||
| A438 | DEFB $00,$08,$08,$10,$00,$00,$00,$00 | |||
| A440 | DEFB $00,$04,$08,$08,$08,$08,$08,$04 | |||
| A448 | DEFB $00,$20,$10,$10,$10,$10,$10,$20 | |||
| A450 | DEFB $00,$00,$54,$38,$FE,$38,$54,$00 | |||
| A458 | DEFB $00,$00,$08,$08,$3E,$08,$08,$00 | |||
| A460 | DEFB $00,$00,$00,$00,$00,$08,$08,$10 | |||
| A468 | DEFB $00,$00,$00,$00,$3C,$00,$00,$00 | |||
| A470 | DEFB $00,$00,$00,$00,$00,$18,$18,$00 | |||
| A478 | DEFB $00,$02,$04,$08,$10,$20,$40,$80 | |||
| A480 | DEFB $00,$FE,$FE,$CE,$D6,$E6,$FE,$FE | |||
| A488 | DEFB $00,$30,$70,$F0,$30,$30,$FC,$FC | |||
| A490 | DEFB $00,$FE,$FE,$02,$FE,$C0,$FE,$FE | |||
| A498 | DEFB $00,$FE,$FE,$06,$3E,$06,$FE,$FE | |||
| A4A0 | DEFB $00,$C0,$CC,$CC,$FC,$FC,$0C,$0C | |||
| A4A8 | DEFB $00,$FE,$FE,$C0,$FE,$06,$FE,$FE | |||
| A4B0 | DEFB $00,$FE,$FE,$80,$FE,$C6,$FE,$FE | |||
| A4B8 | DEFB $00,$FE,$FE,$06,$06,$06,$06,$06 | |||
| A4C0 | DEFB $00,$FE,$FE,$C6,$FE,$C6,$FE,$FE | |||
| A4C8 | DEFB $00,$FE,$FE,$C6,$FE,$06,$FE,$FE | |||
| A4D0 | DEFB $00,$00,$18,$18,$00,$18,$18,$00 | |||
| A4D8 | DEFB $00,$00,$18,$18,$00,$18,$08,$10 | |||
| A4E0 | DEFB $00,$10,$20,$40,$80,$40,$20,$10 | |||
| A4E8 | DEFB $00,$00,$3C,$00,$3C,$00,$00,$00 | |||
| A4F0 | DEFB $00,$08,$04,$02,$01,$02,$04,$08 | |||
| A4F8 | DEFB $00,$18,$24,$04,$08,$10,$00,$10 | |||
| A500 | DEFB $00,$3C,$82,$9A,$94,$98,$82,$7C | |||
| A508 | DEFB $00,$FE,$FE,$C6,$FE,$FE,$C6,$C6 | |||
| A510 | DEFB $00,$FE,$FE,$C6,$FC,$C6,$FE,$FE | |||
| A518 | DEFB $00,$FE,$FE,$C6,$C0,$C6,$FE,$FE | |||
| A520 | DEFB $00,$F8,$FC,$C6,$C6,$C6,$FC,$F8 | |||
| A528 | DEFB $00,$FE,$FE,$C2,$F8,$C2,$FE,$FE | |||
| A530 | DEFB $00,$FE,$FE,$C2,$F8,$C0,$C0,$C0 | |||
| A538 | DEFB $00,$FE,$FE,$C0,$CE,$C6,$FE,$FE | |||
| A540 | DEFB $00,$C6,$C6,$FE,$FE,$C6,$C6,$C6 | |||
| A548 | DEFB $00,$7E,$7E,$18,$18,$18,$7E,$7E | |||
| A550 | DEFB $00,$FE,$FE,$06,$C6,$C6,$FE,$FE | |||
| A558 | DEFB $00,$CE,$D8,$F0,$F0,$D8,$CC,$C6 | |||
| A560 | DEFB $00,$C0,$C0,$C0,$C0,$C6,$FE,$FE | |||
| A568 | DEFB $00,$C6,$EE,$FE,$D6,$C6,$C6,$C6 | |||
| A570 | DEFB $00,$C6,$E6,$F6,$DE,$CE,$C6,$C6 | |||
| A578 | DEFB $00,$FE,$FE,$C6,$C6,$C6,$FE,$FE | |||
| A580 | DEFB $00,$FE,$FE,$C6,$FE,$FE,$C0,$C0 | |||
| A588 | DEFB $00,$FE,$FE,$C6,$C6,$CE,$FE,$02 | |||
| A590 | DEFB $00,$FE,$FE,$C2,$FE,$FC,$CC,$C6 | |||
| A598 | DEFB $00,$FE,$FE,$C0,$FE,$02,$FE,$FE | |||
| A5A0 | DEFB $00,$FE,$FE,$18,$18,$18,$18,$18 | |||
| A5A8 | DEFB $00,$C6,$C6,$C6,$C6,$C6,$FE,$FE | |||
| A5B0 | DEFB $00,$C6,$C6,$C6,$C6,$6C,$38,$10 | |||
| A5B8 | DEFB $00,$C6,$C6,$C6,$D6,$FE,$EE,$C6 | |||
| A5C0 | DEFB $00,$86,$CC,$78,$38,$6C,$C6,$82 | |||
| A5C8 | DEFB $00,$C6,$C6,$FE,$FE,$18,$18,$18 | |||
| A5D0 | DEFB $00,$FE,$FE,$0C,$18,$30,$FE,$FE | |||
|
|
||||
| A5D8 | DEFW $BDAE | |||
| A5DA | DEFW $0000 | |||
|
|
||||
|
Record format (read by 84ED/7E4F with the sprite number in L): record[0..1] = sprite data address (LE word); record[2] = height in 8px rows, top bit masked off before use ($7F) -- meaning of that bit not yet confirmed, may just be unused/reserved; record[3] = width in 8px columns, but bit 7 here is a live flip-flop flag: 7E4F XORs it in place (self-modifying table entry) on every call, toggling it between the two calls needed to draw a sprite's normal and mirrored/second-buffer image, then masks it off ($7F) to get the actual width.
|
||||
| A5DC | DEFW $A9DE | Sprite $00 | ||
| A5DE | DEFB $00,$00 | |||
| A5E0 | DEFW $A9DE | Sprite $01 | ||
| A5E2 | DEFB $84,$03 | |||
| A5E4 | DEFW $AA3E | Sprite $02 | ||
| A5E6 | DEFB $83,$04 | |||
| A5E8 | DEFW $AA9E | Sprite $03 | ||
| A5EA | DEFB $83,$04 | |||
| A5EC | DEFW $AAFE | Sprite $04 | ||
| A5EE | DEFB $83,$04 | |||
| A5F0 | DEFW $AB5E | Sprite $05 | ||
| A5F2 | DEFB $83,$04 | |||
| A5F4 | DEFW $ABBE | Sprite $06 | ||
| A5F6 | DEFB $00,$00 | |||
| A5F8 | DEFW $ABBE | Sprite $07 | ||
| A5FA | DEFB $83,$04 | |||
| A5FC | DEFW $AC1E | Sprite $08 | ||
| A5FE | DEFB $83,$04 | |||
| A600 | DEFW $AC7E | Sprite $09 | ||
| A602 | DEFB $00,$00 | |||
| A604 | DEFW $AC7E | Sprite $0A | ||
| A606 | DEFB $83,$04 | |||
| A608 | DEFW $ACDE | Sprite $0B | ||
| A60A | DEFB $82,$04 | |||
| A60C | DEFW $AD1E | Sprite $0C | ||
| A60E | DEFB $82,$04 | |||
| A610 | DEFW $AD5E | Sprite $0D | ||
| A612 | DEFB $82,$04 | |||
| A614 | DEFW $AD9E | Sprite $0E | ||
| A616 | DEFB $82,$04 | |||
| A618 | DEFW $ADDE | Sprite $0F | ||
| A61A | DEFB $83,$03 | |||
| A61C | DEFW $AE26 | Sprite $10 | ||
| A61E | DEFB $83,$03 | |||
| A620 | DEFW $AE6E | Sprite $11 | ||
| A622 | DEFB $84,$03 | |||
| A624 | DEFW $AECE | Sprite $12 | ||
| A626 | DEFB $84,$03 | |||
| A628 | DEFW $AF2E | Sprite $13 | ||
| A62A | DEFB $84,$03 | |||
| A62C | DEFW $AF8E | Sprite $14 | ||
| A62E | DEFB $83,$03 | |||
| A630 | DEFW $AFD6 | Sprite $15 | ||
| A632 | DEFB $84,$03 | |||
| A634 | DEFW $B036 | Sprite $16 | ||
| A636 | DEFB $83,$04 | |||
| A638 | DEFW $B096 | Sprite $17 | ||
| A63A | DEFB $83,$04 | |||
| A63C | DEFW $B0F6 | Sprite $18 | ||
| A63E | DEFB $83,$04 | |||
| A640 | DEFW $B156 | Sprite $19 | ||
| A642 | DEFB $83,$04 | |||
| A644 | DEFW $B1B6 | Sprite $1A | ||
| A646 | DEFB $84,$04 | |||
| A648 | DEFW $B236 | Sprite $1B | ||
| A64A | DEFB $83,$04 | |||
| A64C | DEFW $B296 | Sprite $1C | ||
| A64E | DEFB $83,$02 | |||
| A650 | DEFW $B2C6 | Sprite $1D | ||
| A652 | DEFB $83,$03 | |||
| A654 | DEFW $B30E | Sprite $1E | ||
| A656 | DEFB $83,$04 | |||
| A658 | DEFW $B36E | Sprite $1F | ||
| A65A | DEFB $84,$04 | |||
| A65C | DEFW $B3EE | Sprite $20 | ||
| A65E | DEFB $84,$04 | |||
| A660 | DEFW $B46E | Sprite $21 | ||
| A662 | DEFB $84,$04 | |||
| A664 | DEFW $B4EE | Sprite $22 | ||
| A666 | DEFB $84,$04 | |||
| A668 | DEFW $B56E | Sprite $23 | ||
| A66A | DEFB $81,$02 | |||
| A66C | DEFW $B57E | Sprite $24 | ||
| A66E | DEFB $82,$02 | |||
| A670 | DEFW $B59E | Sprite $25 | ||
| A672 | DEFB $83,$02 | |||
| A674 | DEFW $B5CE | Sprite $26 | ||
| A676 | DEFB $84,$02 | |||
| A678 | DEFW $B60E | Sprite $27 | ||
| A67A | DEFB $84,$02 | |||
| A67C | DEFW $B64E | Sprite $28 | ||
| A67E | DEFB $84,$02 | |||
| A680 | DEFW $B68E | Sprite $29 | ||
| A682 | DEFB $84,$04 | |||
| A684 | DEFW $B70E | Sprite $2A | ||
| A686 | DEFB $84,$04 | |||
| A688 | DEFW $B78E | Sprite $2B | ||
| A68A | DEFB $84,$04 | |||
| A68C | DEFW $B80E | Sprite $2C | ||
| A68E | DEFB $84,$04 | |||
| A690 | DEFW $B88E | Sprite $2D | ||
| A692 | DEFB $00,$00 | |||
| A694 | DEFW $B5FE | Sprite $2E | ||
| A696 | DEFB $00,$00 | |||
| A698 | DEFW $B5FE | Sprite $2F | ||
| A69A | DEFB $00,$00 | |||
| A69C | DEFW $B5FE | Sprite $30 | ||
| A69E | DEFB $00,$00 | |||
| A6A0 | DEFW $B5FE | Sprite $31 | ||
| A6A2 | DEFB $00,$00 | |||
| A6A4 | DEFW $B5FE | Sprite $32 | ||
| A6A6 | DEFB $00,$00 | |||
| A6A8 | DEFW $B5CE | Sprite $33 | ||
| A6AA | DEFB $00,$00 | |||
| A6AC | DEFW $B5CE | Sprite $34 | ||
| A6AE | DEFB $00,$00 | |||
| A6B0 | DEFW $B5CE | Sprite $35 | ||
| A6B2 | DEFB $00,$00 | |||
| A6B4 | DEFW $B88E | Sprite $36 | ||
| A6B6 | DEFB $83,$02 | |||
| A6B8 | DEFW $B8BE | Sprite $37 | ||
| A6BA | DEFB $83,$02 | |||
| A6BC | DEFW $B8EE | Sprite $38 | ||
| A6BE | DEFB $83,$02 | |||
| A6C0 | DEFW $B91E | Sprite $39 | ||
| A6C2 | DEFB $83,$02 | |||
| A6C4 | DEFW $B94E | Sprite $3A | ||
| A6C6 | DEFB $83,$02 | |||
| A6C8 | DEFW $B97E | Sprite $3B | ||
| A6CA | DEFB $83,$02 | |||
| A6CC | DEFW $B9AE | Sprite $3C | ||
| A6CE | DEFB $83,$02 | |||
| A6D0 | DEFW $B9DE | Sprite $3D | ||
| A6D2 | DEFB $83,$02 | |||
| A6D4 | DEFW $BA0E | Sprite $3E | ||
| A6D6 | DEFB $83,$02 | |||
| A6D8 | DEFW $BA3E | Sprite $3F | ||
| A6DA | DEFB $83,$02 | |||
| A6DC | DEFW $BA6E | Sprite $40 | ||
| A6DE | DEFB $83,$02 | |||
| A6E0 | DEFW $BA9E | Sprite $41 | ||
| A6E2 | DEFB $83,$02 | |||
| A6E4 | DEFW $BACE | Sprite $42 | ||
| A6E6 | DEFB $83,$02 | |||
| A6E8 | DEFW $BAFE | Sprite $43 | ||
| A6EA | DEFB $83,$02 | |||
| A6EC | DEFW $BB2E | Sprite $44 | ||
| A6EE | DEFB $84,$04 | |||
| A6F0 | DEFW $BBAE | Sprite $45 | ||
| A6F2 | DEFB $84,$04 | |||
| A6F4 | DEFW $BC2E | Sprite $46 | ||
| A6F6 | DEFB $84,$02 | |||
| A6F8 | DEFW $BC6E | Sprite $47 | ||
| A6FA | DEFB $84,$02 | |||
| A6FC | DEFW $BCAE | Sprite $48 | ||
| A6FE | DEFB $83,$04 | |||
| A700 | DEFW $BD0E | Sprite $49 | ||
| A702 | DEFB $83,$04 | |||
| A704 | DEFW $BD6E | Sprite $4A | ||
| A706 | DEFB $82,$02 | |||
| A708 | DEFW $BD8E | Sprite $4B | ||
| A70A | DEFB $82,$02 | |||
| A70C | DEFW $BDAE | Sprite $4C | ||
| A70E | DEFB $82,$04 | |||
| A710 | DEFW $BDEE | Sprite $4D | ||
| A712 | DEFB $82,$04 | |||
| A714 | DEFW $BE2E | Sprite $4E | ||
| A716 | DEFB $84,$03 | |||
| A718 | DEFW $BE8E | Sprite $4F | ||
| A71A | DEFB $84,$03 | |||
| A71C | DEFW $BEEE | Sprite $50 | ||
| A71E | DEFB $84,$03 | |||
| A720 | DEFW $BF4E | Sprite $51 | ||
| A722 | DEFB $84,$03 | |||
| A724 | DEFW $BFAE | Sprite $52 | ||
| A726 | DEFB $82,$04 | |||
| A728 | DEFW $BFEE | Sprite $53 | ||
| A72A | DEFB $82,$04 | |||
| A72C | DEFW $C02E | Sprite $54 | ||
| A72E | DEFB $84,$04 | |||
| A730 | DEFW $C0AE | Sprite $55 | ||
| A732 | DEFB $84,$04 | |||
| A734 | DEFW $C12E | Sprite $56 | ||
| A736 | DEFB $85,$02 | |||
| A738 | DEFW $C17E | Sprite $57 | ||
| A73A | DEFB $85,$02 | |||
| A73C | DEFW $C1CE | Sprite $58 | ||
| A73E | DEFB $82,$02 | |||
| A740 | DEFW $C1EE | Sprite $59 | ||
| A742 | DEFB $82,$02 | |||
| A744 | DEFW $C20E | Sprite $5A | ||
| A746 | DEFB $83,$01 | |||
| A748 | DEFW $C226 | Sprite $5B | ||
| A74A | DEFB $83,$01 | |||
| A74C | DEFW $C23E | Sprite $5C | ||
| A74E | DEFB $83,$01 | |||
| A750 | DEFW $C256 | Sprite $5D | ||
| A752 | DEFB $83,$01 | |||
| A754 | DEFW $C26E | Sprite $5E | ||
| A756 | DEFB $82,$02 | |||
| A758 | DEFW $C28E | Sprite $5F | ||
| A75A | DEFB $82,$02 | |||
| A75C | DEFW $C2AE | Sprite $60 | ||
| A75E | DEFB $82,$02 | |||
| A760 | DEFW $B796 | Sprite $61 | ||
| A762 | DEFB $00,$00 | |||
| A764 | DEFW $C2CE | Sprite $62 | ||
| A766 | DEFB $82,$02 | |||
| A768 | DEFW $C2EE | Sprite $63 | ||
| A76A | DEFB $82,$02 | |||
| A76C | DEFW $C30E | Sprite $64 | ||
| A76E | DEFB $82,$02 | |||
| A770 | DEFW $C32E | Sprite $65 | ||
| A772 | DEFB $82,$02 | |||
| A774 | DEFW $C34E | Sprite $66 | ||
| A776 | DEFB $82,$02 | |||
| A778 | DEFW $C36E | Sprite $67 | ||
| A77A | DEFB $82,$02 | |||
| A77C | DEFW $C38E | Sprite $68 | ||
| A77E | DEFB $81,$02 | |||
| A780 | DEFW $C39E | Sprite $69 | ||
| A782 | DEFB $81,$02 | |||
| A784 | DEFW $C3AE | Sprite $6A | ||
| A786 | DEFB $84,$04 | |||
| A788 | DEFW $C42E | Sprite $6B | ||
| A78A | DEFB $84,$04 | |||
| A78C | DEFW $C4AE | Sprite $6C | ||
| A78E | DEFB $84,$04 | |||
| A790 | DEFW $C52E | Sprite $6D | ||
| A792 | DEFB $83,$02 | |||
| A794 | DEFW $C55E | Sprite $6E | ||
| A796 | DEFB $83,$02 | |||
| A798 | DEFW $C58E | Sprite $6F | ||
| A79A | DEFB $83,$02 | |||
| A79C | DEFW $C5BE | Sprite $70 | ||
| A79E | DEFB $83,$02 | |||
| A7A0 | DEFW $C5EE | Sprite $71 | ||
| A7A2 | DEFB $83,$02 | |||
| A7A4 | DEFW $C61E | Sprite $72 | ||
| A7A6 | DEFB $83,$02 | |||
| A7A8 | DEFW $C64E | Sprite $73 | ||
| A7AA | DEFB $83,$02 | |||
| A7AC | DEFW $C67E | Sprite $74 | ||
| A7AE | DEFB $83,$02 | |||
| A7B0 | DEFW $C6AE | Sprite $75 | ||
| A7B2 | DEFB $83,$02 | |||
| A7B4 | DEFW $C6DE | Sprite $76 | ||
| A7B6 | DEFB $83,$02 | |||
| A7B8 | DEFW $C70E | Sprite $77 | ||
| A7BA | DEFB $83,$02 | |||
| A7BC | DEFW $C73E | Sprite $78 | ||
| A7BE | DEFB $83,$02 | |||
| A7C0 | DEFW $C76E | Sprite $79 | ||
| A7C2 | DEFB $83,$02 | |||
| A7C4 | DEFW $C79E | Sprite $7A | ||
| A7C6 | DEFB $83,$02 | |||
| A7C8 | DEFW $C7CE | Sprite $7B | ||
| A7CA | DEFB $83,$02 | |||
| A7CC | DEFW $C7FE | Sprite $7C | ||
| A7CE | DEFB $83,$05 | |||
| A7D0 | DEFW $C876 | Sprite $7D | ||
| A7D2 | DEFB $8C,$05 | |||
| A7D4 | DEFW $CA56 | Sprite $7E | ||
| A7D6 | DEFB $8C,$06 | |||
| A7D8 | DEFW $CC96 | Sprite $7F | ||
| A7DA | DEFB $8A,$05 | |||
| A7DC | DEFW $CE26 | Sprite $80 | ||
| A7DE | DEFB $94,$01 | |||
| A7E0 | DEFW $BE9E | Sprite $81 | ||
| A7E2 | DEFB $00,$00 | |||
| A7E4 | DEFW $BE9E | Sprite $82 | ||
| A7E6 | DEFB $00,$00 | |||
| A7E8 | DEFW $CEC6 | Sprite $83 | ||
| A7EA | DEFB $84,$03 | |||
| A7EC | DEFW $CF26 | Sprite $84 | ||
| A7EE | DEFB $83,$04 | |||
| A7F0 | DEFW $CF86 | Sprite $85 | ||
| A7F2 | DEFB $83,$04 | |||
| A7F4 | DEFW $CFE6 | Sprite $86 | ||
| A7F6 | DEFB $83,$04 | |||
| A7F8 | DEFW $D046 | Sprite $87 | ||
| A7FA | DEFB $83,$04 | |||
| A7FC | DEFW $CBB6 | Sprite $88 | ||
| A7FE | DEFB $00,$00 | |||
| A800 | DEFW $D0A6 | Sprite $89 | ||
| A802 | DEFB $83,$04 | |||
| A804 | DEFW $D106 | Sprite $8A | ||
| A806 | DEFB $83,$04 | |||
| A808 | DEFW $C4F6 | Sprite $8B | ||
| A80A | DEFB $00,$00 | |||
| A80C | DEFW $D166 | Sprite $8C | ||
| A80E | DEFB $83,$04 | |||
| A810 | DEFW $D1C6 | Sprite $8D | ||
| A812 | DEFB $00,$00 | |||
| A814 | DEFW $CC76 | Sprite $8E | ||
| A816 | DEFB $00,$00 | |||
| A818 | DEFW $CC76 | Sprite $8F | ||
| A81A | DEFB $00,$00 | |||
| A81C | DEFW $CC76 | Sprite $90 | ||
| A81E | DEFB $00,$00 | |||
| A820 | DEFW $D1C6 | Sprite $91 | ||
| A822 | DEFB $83,$03 | |||
| A824 | DEFW $D20E | Sprite $92 | ||
| A826 | DEFB $83,$03 | |||
| A828 | DEFW $D256 | Sprite $93 | ||
| A82A | DEFB $84,$03 | |||
| A82C | DEFW $D2B6 | Sprite $94 | ||
| A82E | DEFB $84,$03 | |||
| A830 | DEFW $D316 | Sprite $95 | ||
| A832 | DEFB $84,$03 | |||
| A834 | DEFW $D376 | Sprite $96 | ||
| A836 | DEFB $83,$03 | |||
| A838 | DEFW $D3BE | Sprite $97 | ||
| A83A | DEFB $84,$03 | |||
| A83C | DEFW $D41E | Sprite $98 | ||
| A83E | DEFB $83,$04 | |||
| A840 | DEFW $D47E | Sprite $99 | ||
| A842 | DEFB $83,$04 | |||
| A844 | DEFW $D4DE | Sprite $9A | ||
| A846 | DEFB $83,$04 | |||
| A848 | DEFW $D53E | Sprite $9B | ||
| A84A | DEFB $83,$04 | |||
| A84C | DEFW $D59E | Sprite $9C | ||
| A84E | DEFB $84,$04 | |||
| A850 | DEFW $D61E | Sprite $9D | ||
| A852 | DEFB $83,$04 | |||
| A854 | DEFW $D67E | Sprite $9E | ||
| A856 | DEFB $83,$02 | |||
| A858 | DEFW $D6AE | Sprite $9F | ||
| A85A | DEFB $83,$03 | |||
| A85C | DEFW $D6F6 | Sprite $A0 | ||
| A85E | DEFB $83,$04 | |||
| A860 | DEFW $D756 | Sprite $A1 | ||
| A862 | DEFB $84,$04 | |||
| A864 | DEFW $D7D6 | Sprite $A2 | ||
| A866 | DEFB $84,$04 | |||
| A868 | DEFW $D856 | Sprite $A3 | ||
| A86A | DEFB $84,$04 | |||
| A86C | DEFW $D8D6 | Sprite $A4 | ||
| A86E | DEFB $84,$04 | |||
| A870 | DEFW $D956 | Sprite $A5 | ||
| A872 | DEFB $81,$02 | |||
| A874 | DEFW $D966 | Sprite $A6 | ||
| A876 | DEFB $82,$02 | |||
| A878 | DEFW $D986 | Sprite $A7 | ||
| A87A | DEFB $83,$02 | |||
| A87C | DEFW $D9B6 | Sprite $A8 | ||
| A87E | DEFB $84,$02 | |||
| A880 | DEFW $D9F6 | Sprite $A9 | ||
| A882 | DEFB $84,$02 | |||
| A884 | DEFW $DA36 | Sprite $AA | ||
| A886 | DEFB $84,$02 | |||
| A888 | DEFW $DA76 | Sprite $AB | ||
| A88A | DEFB $84,$04 | |||
| A88C | DEFW $DAF6 | Sprite $AC | ||
| A88E | DEFB $84,$04 | |||
| A890 | DEFW $DB76 | Sprite $AD | ||
| A892 | DEFB $84,$04 | |||
| A894 | DEFW $DBF6 | Sprite $AE | ||
| A896 | DEFB $84,$04 | |||
| A898 | DEFW $DCB6 | Sprite $AF | ||
| A89A | DEFB $00,$00 | |||
| A89C | DEFW $CD76 | Sprite $B0 | ||
| A89E | DEFB $00,$00 | |||
| A8A0 | DEFW $DC76 | Sprite $B1 | ||
| A8A2 | DEFB $83,$01 | |||
| A8A4 | DEFW $DC8E | Sprite $B2 | ||
| A8A6 | DEFB $83,$01 | |||
| A8A8 | DEFW $DCA6 | Sprite $B3 | ||
| A8AA | DEFB $83,$01 | |||
| A8AC | DEFW $DCBE | Sprite $B4 | ||
| A8AE | DEFB $83,$01 | |||
| A8B0 | DEFW $DCD6 | Sprite $B5 | ||
| A8B2 | DEFB $81,$01 | |||
| A8B4 | DEFW $DCDE | Sprite $B6 | ||
| A8B6 | DEFB $81,$01 | |||
| A8B8 | DEFW $DCE6 | Sprite $B7 | ||
| A8BA | DEFB $81,$01 | |||
| A8BC | DEFW $DCEE | Sprite $B8 | ||
| A8BE | DEFB $81,$01 | |||
| A8C0 | DEFW $DCF6 | Sprite $B9 | ||
| A8C2 | DEFB $81,$01 | |||
| A8C4 | DEFW $DCFE | Sprite $BA | ||
| A8C6 | DEFB $84,$04 | |||
| A8C8 | DEFW $DD7E | Sprite $BB | ||
| A8CA | DEFB $84,$04 | |||
| A8CC | DEFW $DDFE | Sprite $BC | ||
| A8CE | DEFB $82,$02 | |||
| A8D0 | DEFW $DE1E | Sprite $BD | ||
| A8D2 | DEFB $82,$02 | |||
| A8D4 | DEFW $DE3E | Sprite $BE | ||
| A8D6 | DEFB $82,$02 | |||
| A8D8 | DEFW $DE5E | Sprite $BF | ||
| A8DA | DEFB $82,$02 | |||
| A8DC | DEFW $DE7E | Sprite $C0 | ||
| A8DE | DEFB $82,$02 | |||
| A8E0 | DEFW $DE9E | Sprite $C1 | ||
| A8E2 | DEFB $82,$02 | |||
| A8E4 | DEFW $DEBE | Sprite $C2 | ||
| A8E6 | DEFB $83,$02 | |||
| A8E8 | DEFW $DEEE | Sprite $C3 | ||
| A8EA | DEFB $82,$02 | |||
| A8EC | DEFW $DF0E | Sprite $C4 | ||
| A8EE | DEFB $82,$02 | |||
| A8F0 | DEFW $DF2E | Sprite $C5 | ||
| A8F2 | DEFB $82,$0B | |||
| A8F4 | DEFW $DFDE | Sprite $C6 | ||
| A8F6 | DEFB $00,$00 | |||
| A8F8 | DEFW $DFDE | Sprite $C7 | ||
| A8FA | DEFB $84,$04 | |||
| A8FC | DEFW $E05E | Sprite $C8 | ||
| A8FE | DEFB $84,$0B | |||
|
|
||||
|
Records allocated/freed via a linked list managed by 84AE (free-list head at $618B; the free list can extend outside this pool, e.g. into scratch at $5B00). Record layout (24 bytes, offsets from record start): +0/+1 = link to the next object record in the active object list (head at 610E; the list ends via the fixed records at 8DB6 -- the player record uses this same layout); +2 = room number the object belongs to; +3/+4 = per-object behaviour-handler function pointer, copied by 84AE from the 2 bytes embedded after the spawner's CALL; +5/+6 = Y/X position; +8 = current sprite number; +5..+23 initially a fixed 19-byte default state block copied from $5C92; +7=$18 and +0xA=$06 (constants set by 8EA7-style spawn routines); +9 = triggering grid value (e.g. $66), cleared to 0 by 9A60; +0xB and +0xE = a duplicated "extra" byte from the template; +0xF = animation phase counter (used by 99D5); +0x14 = a second "extra" byte. The exact meaning of the two "extra" bytes (position? direction?) is not yet confirmed.
|
||||
| A900 | DEFB $B6,$8D,$02,$7C,$95,$14,$14,$18 | |||
| A908 | DEFB $68,$66,$06,$23,$80,$00,$22,$01 | |||
| A910 | DEFB $11,$11,$16,$16,$58,$03,$00,$08 | |||
| A918 | DEFB $00,$A9,$02,$2D,$95,$34,$34,$18 | |||
| A920 | DEFB $4C,$00,$06,$00,$C0,$00,$00,$01 | |||
| A928 | DEFB $31,$31,$36,$36 | |||
|
|
||||
| A92C | DEFW $0300,$0800,$A948,$0000,$A9DE,$0000,$A9DE,$0000 | |||
| A93C | DEFW $A9DE,$0000,$A9DE,$0000,$A9DE,$0000,$A960,$0000 | |||
| A94C | DEFW $A9DE,$0000,$A9DE,$0000,$A9DE,$0000,$A9DE,$0000 | |||
| A95C | DEFW $A9DE,$0000,$A978,$0000,$A9DE,$0000,$A9DE,$0000 | |||
| A96C | DEFW $A9DE,$0000,$A9DE,$0000,$A9DE,$0000,$A990,$0000 | |||
| A97C | DEFW $A9DE,$0000,$A9DE,$0000,$A9DE,$0000,$A9DE,$0000 | |||
| A98C | DEFW $A9DE,$0000,$A9A8,$0000,$A9DE,$0000,$A9DE,$0000 | |||
| A99C | DEFW $A9DE,$0000,$A9DE,$0000,$A9DE,$0000,$5B00,$0000 | |||
| A9AC | DEFW $A9DE,$0000,$A9DE,$0000,$A9DE,$0000,$D5E6,$0000 | |||
| A9BC | DEFW $D5E6,$0000,$D6FE,$0000,$D6FE,$0000,$D906,$0000 | |||
| A9CC | DEFW $DBD6,$0000,$DDDE,$0000,$E046,$0000,$D9FE,$0000 | |||
| A9DC | DEFW $37E0 | |||
|
|
||||
| A9DE | DEFB $00,$00,$00,$00,$3F,$00,$00,$7F | |||
| A9E6 | DEFB $80,$00,$E0,$C0,$00,$DF,$60,$01 | |||
| A9EE | DEFB $A0,$A0,$01,$CA,$60,$01,$DB,$60 | |||
| A9F6 | DEFB $01,$CA,$60,$00,$E0,$E0,$03,$7F | |||
| A9FE | DEFB $C0,$07,$B1,$80,$0F,$D5,$00,$0F | |||
| AA06 | DEFB $DB,$40,$0D,$C4,$C0,$1F,$EF,$30 | |||
| AA0E | DEFB $1D,$E1,$78,$1E,$DE,$E8,$3E,$FC | |||
| AA16 | DEFB $D8,$3F,$3E,$68,$3F,$81,$30,$3F | |||
| AA1E | DEFB $FB,$00,$3E,$FD,$80,$1E,$39,$86 | |||
| AA26 | DEFB $0C,$F3,$1E,$03,$E7,$FE,$07,$83 | |||
| AA2E | DEFB $E6,$07,$E1,$FE,$03,$F8,$FC,$01 | |||
| AA36 | DEFB $DF,$10,$01,$E7,$00,$00,$FE,$00 | |||
|
|
||||
| AA3E | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| AA46 | DEFB $00,$07,$00,$00,$00,$07,$80,$00 | |||
| AA4E | DEFB $01,$86,$C0,$00,$03,$C7,$60,$00 | |||
| AA56 | DEFB $07,$E4,$F0,$00,$1E,$E3,$EF,$C0 | |||
| AA5E | DEFB $7F,$77,$DF,$E0,$7B,$2F,$B8,$30 | |||
| AA66 | DEFB $76,$0F,$37,$D8,$6E,$1F,$68,$28 | |||
| AA6E | DEFB $3C,$1F,$72,$98,$1C,$07,$76,$D8 | |||
| AA76 | DEFB $08,$1F,$70,$18,$00,$3F,$98,$30 | |||
| AA7E | DEFB $00,$3C,$CF,$E8,$00,$78,$0C,$5C | |||
| AA86 | DEFB $00,$78,$05,$4E,$00,$60,$06,$DA | |||
| AA8E | DEFB $00,$78,$00,$00,$00,$3E,$00,$00 | |||
| AA96 | DEFB $00,$3A,$00,$00,$00,$00,$00,$00 | |||
|
|
||||
| AA9E | DEFB $00,$00,$00,$00,$00,$01,$80,$00 | |||
| AAA6 | DEFB $00,$03,$80,$00,$00,$02,$C0,$00 | |||
| AAAE | DEFB $00,$07,$40,$00,$00,$07,$60,$00 | |||
| AAB6 | DEFB $00,$C4,$F0,$00,$01,$F3,$EF,$C0 | |||
| AABE | DEFB $07,$77,$DF,$E0,$0F,$AF,$B8,$30 | |||
| AAC6 | DEFB $3F,$8F,$37,$D8,$7F,$1F,$68,$28 | |||
| AACE | DEFB $7B,$17,$72,$98,$76,$0F,$76,$D8 | |||
| AAD6 | DEFB $6E,$3F,$70,$18,$3C,$7F,$B8,$30 | |||
| AADE | DEFB $1C,$F7,$CF,$E4,$09,$E0,$EC,$6C | |||
| AAE6 | DEFB $01,$80,$05,$5C,$01,$E0,$06,$CC | |||
| AAEE | DEFB $00,$F8,$00,$0E,$00,$E8,$00,$1E | |||
| AAF6 | DEFB $00,$00,$00,$1A,$00,$00,$00,$00 | |||
|
|
||||
| AAFE | DEFB $00,$00,$00,$00,$01,$80,$00,$00 | |||
| AB06 | DEFB $03,$C0,$00,$00,$07,$C1,$80,$00 | |||
| AB0E | DEFB $7F,$E3,$C0,$00,$7D,$62,$00,$00 | |||
| AB16 | DEFB $7B,$70,$F0,$00,$37,$73,$EF,$C0 | |||
| AB1E | DEFB $1E,$37,$DF,$E0,$0E,$2F,$B8,$30 | |||
| AB26 | DEFB $04,$0F,$B7,$D8,$00,$1F,$68,$28 | |||
| AB2E | DEFB $00,$1F,$70,$18,$00,$0F,$76,$D8 | |||
| AB36 | DEFB $00,$37,$70,$18,$00,$3F,$B8,$38 | |||
| AB3E | DEFB $00,$3F,$DF,$F4,$00,$18,$EC,$6C | |||
| AB46 | DEFB $00,$1E,$05,$40,$00,$0F,$06,$C0 | |||
| AB4E | DEFB $00,$07,$80,$00,$00,$07,$C0,$00 | |||
| AB56 | DEFB $00,$03,$40,$00,$00,$00,$00,$00 | |||
|
|
||||
| AB5E | DEFB $00,$00,$00,$00,$01,$81,$80,$00 | |||
| AB66 | DEFB $03,$C3,$80,$00,$07,$C7,$C0,$00 | |||
| AB6E | DEFB $7F,$E6,$C0,$00,$7D,$6F,$60,$00 | |||
| AB76 | DEFB $7B,$74,$60,$00,$37,$73,$9C,$00 | |||
| AB7E | DEFB $1E,$37,$F0,$00,$0E,$2F,$EF,$C0 | |||
| AB86 | DEFB $04,$0F,$DF,$E0,$00,$1F,$B8,$30 | |||
| AB8E | DEFB $00,$1F,$B7,$D8,$00,$0F,$68,$28 | |||
| AB96 | DEFB $00,$03,$70,$18,$00,$07,$76,$D8 | |||
| AB9E | DEFB $00,$0F,$72,$98,$00,$0F,$B8,$38 | |||
| ABA6 | DEFB $00,$0F,$1F,$F4,$00,$06,$0C,$6C | |||
| ABAE | DEFB $00,$07,$C5,$58,$00,$03,$F6,$DE | |||
| ABB6 | DEFB $00,$00,$D0,$16,$00,$00,$00,$00 | |||
|
|
||||
| ABBE | DEFB $00,$00,$00,$00,$00,$07,$C0,$00 | |||
| ABC6 | DEFB $00,$1F,$F0,$00,$34,$38,$30,$50 | |||
| ABCE | DEFB $3C,$36,$D0,$F0,$1E,$74,$58,$E0 | |||
| ABD6 | DEFB $0E,$72,$99,$C0,$0F,$78,$3B,$80 | |||
| ABDE | DEFB $07,$9F,$F7,$80,$03,$ED,$61,$3C | |||
| ABE6 | DEFB $01,$EC,$4E,$76,$01,$F6,$BB,$76 | |||
| ABEE | DEFB $00,$F9,$3B,$76,$00,$BF,$BB,$76 | |||
| ABF6 | DEFB $00,$7F,$BB,$7E,$00,$7F,$9F,$3E | |||
| ABFE | DEFB $00,$3F,$DF,$3C,$00,$3E,$1E,$BC | |||
| AC06 | DEFB $00,$25,$4E,$DC,$00,$3D,$EE,$D8 | |||
| AC0E | DEFB $00,$1F,$EC,$18,$00,$1F,$EC,$00 | |||
| AC16 | DEFB $00,$07,$C0,$00,$00,$00,$00,$00 | |||
|
|
||||
| AC1E | DEFB $00,$00,$00,$00,$03,$80,$00,$78 | |||
| AC26 | DEFB $0E,$E0,$00,$EC,$1C,$30,$00,$EC | |||
| AC2E | DEFB $3B,$98,$00,$EC,$37,$1B,$80,$EC | |||
| AC36 | DEFB $32,$3D,$E0,$7C,$38,$E3,$B1,$78 | |||
| AC3E | DEFB $3F,$DB,$D7,$78,$11,$C7,$FF,$38 | |||
| AC46 | DEFB $0E,$3F,$8F,$B8,$1F,$FE,$77,$B8 | |||
| AC4E | DEFB $3F,$FD,$DA,$30,$3F,$FD,$D8,$00 | |||
| AC56 | DEFB $7D,$FD,$D8,$00,$70,$ED,$D8,$00 | |||
| AC5E | DEFB $7C,$2E,$F8,$00,$3C,$0E,$F8,$00 | |||
| AC66 | DEFB $1F,$06,$F0,$00,$1F,$02,$70,$00 | |||
| AC6E | DEFB $0D,$01,$70,$00,$00,$00,$70,$00 | |||
| AC76 | DEFB $00,$00,$60,$00,$00,$00,$00,$00 | |||
|
|
||||
| AC7E | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| AC86 | DEFB $00,$07,$00,$00,$00,$07,$80,$00 | |||
| AC8E | DEFB $01,$86,$C0,$00,$03,$C7,$60,$00 | |||
| AC96 | DEFB $07,$E4,$F0,$00,$1E,$E3,$FC,$F0 | |||
| AC9E | DEFB $7F,$77,$FB,$FC,$7B,$2F,$F7,$04 | |||
| ACA6 | DEFB $76,$0F,$EE,$FE,$6E,$1F,$ED,$06 | |||
| ACAE | DEFB $3C,$1F,$EF,$2A,$1C,$07,$EE,$6A | |||
| ACB6 | DEFB $08,$1F,$F6,$02,$00,$3F,$FB,$04 | |||
| ACBE | DEFB $00,$3C,$FB,$FC,$00,$78,$01,$8A | |||
| ACC6 | DEFB $00,$78,$00,$CA,$00,$60,$00,$56 | |||
| ACCE | DEFB $00,$78,$00,$00,$00,$3E,$00,$00 | |||
| ACD6 | DEFB $00,$3A,$00,$00,$00,$00,$00,$00 | |||
|
|
||||
| ACDE | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| ACE6 | DEFB $00,$15,$00,$00,$00,$2A,$80,$00 | |||
| ACEE | DEFB $01,$45,$40,$00,$02,$A2,$80,$00 | |||
| ACF6 | DEFB $05,$55,$50,$00,$02,$AA,$AA,$80 | |||
| ACFE | DEFB $01,$55,$55,$40,$00,$0A,$AA,$A0 | |||
| AD06 | DEFB $00,$00,$55,$40,$00,$00,$AA,$80 | |||
| AD0E | DEFB $00,$00,$54,$00,$00,$00,$00,$00 | |||
| AD16 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
|
|
||||
| AD1E | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| AD26 | DEFB $00,$10,$00,$00,$02,$2A,$80,$00 | |||
| AD2E | DEFB $05,$55,$40,$00,$0A,$8A,$80,$00 | |||
| AD36 | DEFB $05,$41,$50,$00,$02,$AA,$AA,$80 | |||
| AD3E | DEFB $01,$55,$55,$40,$00,$0A,$AA,$80 | |||
| AD46 | DEFB $00,$00,$55,$00,$00,$00,$AA,$80 | |||
| AD4E | DEFB $00,$00,$54,$00,$00,$00,$2A,$00 | |||
| AD56 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
|
|
||||
| AD5E | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| AD66 | DEFB $00,$00,$2A,$00,$00,$00,$55,$40 | |||
| AD6E | DEFB $00,$00,$2A,$A0,$00,$05,$55,$50 | |||
| AD76 | DEFB $00,$AA,$AA,$A0,$01,$55,$55,$40 | |||
| AD7E | DEFB $02,$AA,$A8,$00,$01,$51,$40,$00 | |||
| AD86 | DEFB $00,$A2,$A0,$00,$00,$15,$40,$00 | |||
| AD8E | DEFB $00,$0A,$80,$00,$00,$00,$00,$00 | |||
| AD96 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
|
|
||||
| AD9E | DEFB $00,$00,$00,$00,$00,$00,$15,$00 | |||
| ADA6 | DEFB $00,$00,$2A,$00,$00,$00,$55,$40 | |||
| ADAE | DEFB $00,$00,$2A,$80,$00,$05,$55,$40 | |||
| ADB6 | DEFB $00,$AA,$AA,$A0,$01,$55,$55,$40 | |||
| ADBE | DEFB $02,$A0,$A8,$00,$05,$45,$40,$00 | |||
| ADC6 | DEFB $02,$AA,$A0,$00,$01,$15,$40,$00 | |||
| ADCE | DEFB $00,$08,$00,$00,$00,$00,$00,$00 | |||
| ADD6 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
|
|
||||
| ADDE | DEFB $00,$00,$00,$60,$01,$80,$5C,$01 | |||
| ADE6 | DEFB $B8,$7E,$C1,$FC,$7F,$5C,$FE,$3B | |||
| ADEE | DEFB $7E,$F6,$3F,$7B,$7E,$0C,$7F,$1C | |||
| ADF6 | DEFB $06,$39,$00,$00,$06,$70,$18,$07 | |||
| ADFE | DEFB $F8,$19,$C7,$FC,$1F,$E1,$EC,$0F | |||
| AE06 | DEFB $B1,$FC,$07,$F0,$F0,$43,$20,$00 | |||
| AE0E | DEFB $6E,$DC,$B8,$7F,$7E,$FC,$3F,$BE | |||
| AE16 | DEFB $7E,$3D,$BB,$76,$1F,$3F,$7E,$06 | |||
| AE1E | DEFB $0E,$1C,$03,$00,$00,$00,$00,$00 | |||
|
|
||||
| AE26 | DEFB $00,$00,$00,$30,$00,$C0,$36,$00 | |||
| AE2E | DEFB $B8,$1F,$60,$FC,$1F,$9C,$FE,$1D | |||
| AE36 | DEFB $BE,$F6,$1F,$BB,$7E,$0E,$3F,$18 | |||
| AE3E | DEFB $03,$3C,$0C,$18,$0B,$70,$1B,$C7 | |||
| AE46 | DEFB $F8,$1F,$E3,$FC,$0F,$73,$EC,$07 | |||
| AE4E | DEFB $F1,$FC,$01,$E0,$E0,$60,$00,$38 | |||
| AE56 | DEFB $6E,$EC,$80,$7F,$7E,$B8,$7F,$BE | |||
| AE5E | DEFB $FC,$3D,$BB,$7E,$1F,$3F,$76,$06 | |||
| AE66 | DEFB $0C,$7E,$00,$06,$18,$00,$00,$00 | |||
|
|
||||
| AE6E | DEFB $00,$00,$00,$00,$01,$E0,$00,$0F | |||
| AE76 | DEFB $F8,$00,$1F,$FC,$00,$3F,$5C,$00 | |||
| AE7E | DEFB $7E,$BE,$00,$77,$5E,$00,$EB,$AE | |||
| AE86 | DEFB $00,$D7,$DE,$01,$FE,$FE,$02,$F5 | |||
| AE8E | DEFB $7C,$0E,$EA,$BC,$19,$75,$58,$33 | |||
| AE96 | DEFB $7A,$B8,$26,$B5,$78,$6D,$DA,$B0 | |||
| AE9E | DEFB $5B,$0F,$F0,$5A,$75,$E0,$51,$E6 | |||
| AEA6 | DEFB $00,$37,$1D,$80,$36,$3B,$00,$66 | |||
| AEAE | DEFB $E3,$00,$6D,$C6,$00,$6B,$1C,$00 | |||
| AEB6 | DEFB $66,$38,$00,$6D,$60,$00,$1A,$C0 | |||
| AEBE | DEFB $00,$19,$80,$00,$33,$40,$00,$26 | |||
| AEC6 | DEFB $F0,$00,$06,$30,$00,$00,$00,$00 | |||
|
|
||||
| AECE | DEFB $00,$00,$00,$00,$00,$00,$00,$1F | |||
| AED6 | DEFB $00,$01,$FF,$C0,$03,$F5,$70,$03 | |||
| AEDE | DEFB $FA,$78,$43,$F5,$58,$60,$EA,$AC | |||
| AEE6 | DEFB $73,$36,$5C,$3E,$DF,$BC,$1C,$C6 | |||
| AEEE | DEFB $7E,$01,$BB,$BE,$03,$6D,$5E,$03 | |||
| AEF6 | DEFB $4E,$FE,$06,$3C,$3E,$06,$E3,$BE | |||
| AEFE | DEFB $0C,$C6,$5C,$18,$DC,$40,$79,$B8 | |||
| AF06 | DEFB $C0,$71,$63,$80,$00,$C6,$00,$61 | |||
| AF0E | DEFB $AC,$00,$7B,$58,$00,$3B,$30,$00 | |||
| AF16 | DEFB $06,$E0,$00,$04,$00,$00,$00,$00 | |||
| AF1E | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| AF26 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
|
|
||||
| AF2E | DEFB $00,$00,$00,$07,$F0,$00,$1F,$BE | |||
| AF36 | DEFB $00,$1F,$DF,$C0,$3F,$AB,$E0,$3F | |||
| AF3E | DEFB $55,$F0,$0F,$FA,$B0,$37,$F5,$58 | |||
| AF46 | DEFB $23,$FA,$B8,$4D,$B9,$5C,$69,$FE | |||
| AF4E | DEFB $AC,$60,$FF,$D4,$3F,$7F,$AC,$5E | |||
| AF56 | DEFB $3F,$D4,$60,$CF,$FE,$4F,$C7,$EE | |||
| AF5E | DEFB $1F,$3B,$D6,$39,$F9,$FE,$33,$C0 | |||
| AF66 | DEFB $6E,$36,$1F,$7C,$76,$3E,$38,$66 | |||
| AF6E | DEFB $E0,$40,$41,$C0,$60,$47,$18,$E0 | |||
| AF76 | DEFB $0E,$30,$C0,$38,$33,$C0,$30,$1F | |||
| AF7E | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| AF86 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
|
|
||||
| AF8E | DEFB $00,$00,$00,$00,$0C,$00,$06,$1E | |||
| AF96 | DEFB $1C,$0F,$3F,$3E,$5D,$BA,$B4,$7F | |||
| AF9E | DEFB $BE,$FE,$7F,$3E,$FC,$6C,$DC,$B8 | |||
| AFA6 | DEFB $43,$E0,$00,$17,$B0,$70,$1F,$E4 | |||
| AFAE | DEFB $FC,$1F,$E5,$EC,$0F,$C7,$FC,$03 | |||
| AFB6 | DEFB $07,$F8,$00,$06,$70,$00,$00,$00 | |||
| AFBE | DEFB $0C,$8E,$1C,$1E,$BB,$3E,$5A,$BE | |||
| AFC6 | DEFB $34,$5E,$FD,$BE,$7C,$FD,$FC,$7C | |||
| AFCE | DEFB $71,$F8,$60,$00,$C0,$00,$00,$00 | |||
|
|
||||
| AFD6 | DEFB $00,$00,$00,$00,$0F,$00,$00,$3F | |||
| AFDE | DEFB $C0,$00,$7F,$20,$00,$7E,$20,$00 | |||
| AFE6 | DEFB $FE,$C0,$00,$FE,$20,$00,$7F,$30 | |||
| AFEE | DEFB $07,$0F,$90,$0F,$76,$F0,$1E,$F6 | |||
| AFF6 | DEFB $70,$1D,$F7,$60,$3D,$F7,$18,$3B | |||
| AFFE | DEFB $EF,$30,$3B,$DE,$F8,$13,$B7,$F8 | |||
| B006 | DEFB $0C,$6F,$C0,$1F,$EF,$30,$1F,$EE | |||
| B00E | DEFB $78,$3F,$F1,$F8,$3F,$FF,$B0,$3F | |||
| B016 | DEFB $FF,$70,$3D,$FE,$F0,$1E,$F9,$E0 | |||
| B01E | DEFB $07,$03,$C0,$00,$F3,$80,$03,$E7 | |||
| B026 | DEFB $80,$07,$EF,$C6,$07,$EF,$FE,$03 | |||
| B02E | DEFB $AF,$C6,$00,$E3,$FE,$00,$00,$3C | |||
|
|
||||
| B036 | DEFB $00,$00,$00,$00,$00,$00,$03,$C0 | |||
| B03E | DEFB $00,$00,$0F,$F0,$00,$00,$1F,$F0 | |||
| B046 | DEFB $00,$03,$C3,$F8,$00,$0E,$3D,$F8 | |||
| B04E | DEFB $00,$1D,$FD,$F8,$00,$1D,$FC,$70 | |||
| B056 | DEFB $00,$02,$F3,$B0,$0D,$1F,$0F,$C0 | |||
| B05E | DEFB $1F,$63,$FF,$C0,$1F,$DC,$7F,$E0 | |||
| B066 | DEFB $1D,$DF,$FF,$E0,$3C,$3F,$FE,$E0 | |||
| B06E | DEFB $34,$3C,$F1,$DC,$36,$2C,$00,$FC | |||
| B076 | DEFB $6E,$2C,$00,$FC,$6E,$6E,$00,$70 | |||
| B07E | DEFB $7E,$76,$00,$00,$0E,$7E,$00,$00 | |||
| B086 | DEFB $00,$1E,$00,$00,$00,$00,$00,$00 | |||
| B08E | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
|
|
||||
| B096 | DEFB $00,$00,$00,$00,$00,$00,$03,$C0 | |||
| B09E | DEFB $00,$00,$0F,$F0,$00,$00,$1F,$F0 | |||
| B0A6 | DEFB $00,$03,$C3,$F8,$00,$0E,$3D,$F8 | |||
| B0AE | DEFB $00,$1D,$FD,$F8,$0C,$1D,$FC,$70 | |||
| B0B6 | DEFB $1F,$1D,$F3,$B0,$1F,$C2,$EF,$C0 | |||
| B0BE | DEFB $1D,$FF,$1F,$C0,$3C,$FF,$FF,$E6 | |||
| B0C6 | DEFB $34,$63,$FF,$EE,$36,$1C,$7E,$EE | |||
| B0CE | DEFB $6E,$1F,$FE,$FE,$6E,$3F,$F0,$FC | |||
| B0D6 | DEFB $7E,$3C,$C0,$78,$0E,$2C,$00,$10 | |||
| B0DE | DEFB $00,$2C,$00,$00,$00,$6E,$00,$00 | |||
| B0E6 | DEFB $00,$76,$00,$00,$00,$7E,$00,$00 | |||
| B0EE | DEFB $00,$1E,$00,$00,$00,$00,$00,$00 | |||
|
|
||||
| B0F6 | DEFB $00,$00,$00,$00,$00,$00,$03,$C0 | |||
| B0FE | DEFB $00,$00,$0F,$F0,$00,$00,$1F,$F0 | |||
| B106 | DEFB $00,$03,$C3,$F8,$00,$0E,$3D,$F8 | |||
| B10E | DEFB $00,$0D,$FD,$F8,$00,$31,$FC,$70 | |||
| B116 | DEFB $00,$38,$F3,$B0,$00,$3F,$0F,$C0 | |||
| B11E | DEFB $00,$77,$FF,$C0,$01,$7B,$FF,$C0 | |||
| B126 | DEFB $0F,$5B,$7B,$C0,$1E,$58,$FB,$C0 | |||
| B12E | DEFB $1E,$DC,$03,$C0,$1C,$EC,$01,$C0 | |||
| B136 | DEFB $34,$FC,$01,$E0,$34,$3C,$00,$E0 | |||
| B13E | DEFB $36,$00,$00,$F8,$6E,$00,$00,$F8 | |||
| B146 | DEFB $6E,$00,$00,$78,$7E,$00,$00,$38 | |||
| B14E | DEFB $0E,$00,$00,$00,$00,$00,$00,$00 | |||
|
|
||||
| B156 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| B15E | DEFB $00,$00,$00,$00,$00,$00,$01,$F0 | |||
| B166 | DEFB $0C,$03,$CB,$F8,$1F,$0E,$3D,$E4 | |||
| B16E | DEFB $1F,$9D,$FD,$C4,$1D,$DD,$FD,$DA | |||
| B176 | DEFB $3C,$E2,$F3,$CA,$34,$7F,$0F,$62 | |||
| B17E | DEFB $36,$23,$FF,$B2,$6E,$1C,$7F,$DE | |||
| B186 | DEFB $6E,$1F,$FF,$CC,$7E,$3F,$FE,$EC | |||
| B18E | DEFB $0E,$3C,$F1,$E0,$00,$2C,$05,$E0 | |||
| B196 | DEFB $00,$2C,$1C,$E0,$00,$6E,$1C,$E0 | |||
| B19E | DEFB $00,$76,$1C,$E0,$00,$7E,$1E,$70 | |||
| B1A6 | DEFB $00,$1E,$0A,$7C,$00,$00,$00,$3C | |||
| B1AE | DEFB $00,$00,$00,$34,$00,$00,$00,$00 | |||
|
|
||||
| B1B6 | DEFB $00,$00,$00,$00,$00,$00,$BC,$00 | |||
| B1BE | DEFB $00,$06,$7E,$00,$00,$15,$FF,$00 | |||
| B1C6 | DEFB $01,$DB,$EB,$00,$01,$75,$D5,$00 | |||
| B1CE | DEFB $06,$AB,$AB,$F0,$0D,$55,$D5,$58 | |||
| B1D6 | DEFB $1A,$AF,$AA,$AC,$35,$7F,$D5,$54 | |||
| B1DE | DEFB $7A,$FC,$2C,$AC,$55,$FB,$DF,$54 | |||
| B1E6 | DEFB $7A,$FF,$EF,$A8,$1D,$FF,$F7,$B8 | |||
| B1EE | DEFB $0F,$FF,$F7,$BC,$1D,$FF,$FB,$DC | |||
| B1F6 | DEFB $3E,$FF,$FB,$DE,$3E,$FF,$FB,$DE | |||
| B1FE | DEFB $7E,$FF,$F3,$BE,$7D,$EF,$EF,$BE | |||
| B206 | DEFB $7D,$EF,$F7,$7E,$7B,$F7,$F4,$FE | |||
| B20E | DEFB $1B,$FB,$8D,$3C,$29,$FC,$7A,$8C | |||
| B216 | DEFB $75,$FF,$D5,$50,$6A,$FA,$AB,$B0 | |||
| B21E | DEFB $2A,$FD,$56,$D0,$35,$7B,$B9,$20 | |||
| B226 | DEFB $1A,$7F,$56,$C0,$0F,$3E,$78,$00 | |||
| B22E | DEFB $00,$1D,$80,$00,$00,$00,$00,$00 | |||
|
|
||||
| B236 | DEFB $00,$00,$00,$00,$00,$01,$C0,$00 | |||
| B23E | DEFB $00,$0B,$B7,$00,$00,$1D,$5D,$00 | |||
| B246 | DEFB $06,$3F,$AA,$C0,$0F,$7E,$3D,$60 | |||
| B24E | DEFB $1F,$B9,$FF,$B0,$1F,$7B,$FF,$F0 | |||
| B256 | DEFB $3F,$7B,$FF,$F0,$7F,$7B,$F7,$60 | |||
| B25E | DEFB $7F,$FD,$F7,$80,$7F,$BE,$2F,$C0 | |||
| B266 | DEFB $7F,$DF,$DF,$C0,$7F,$FF,$FF,$D8 | |||
| B26E | DEFB $7D,$5F,$BF,$BC,$3E,$AE,$BF,$2C | |||
| B276 | DEFB $05,$55,$4E,$5C,$06,$EA,$B1,$AC | |||
| B27E | DEFB $05,$B5,$5E,$A8,$02,$4F,$BF,$58 | |||
| B286 | DEFB $01,$B5,$FE,$B0,$00,$1E,$FB,$E0 | |||
| B28E | DEFB $00,$01,$70,$00,$00,$00,$00,$00 | |||
|
|
||||
| B296 | DEFB $00,$00,$03,$B0,$07,$E8,$0F,$FC | |||
| B29E | DEFB $0F,$7C,$02,$48,$32,$A8,$2D,$76 | |||
| B2A6 | DEFB $51,$FA,$6E,$F6,$3F,$EE,$27,$FC | |||
| B2AE | DEFB $6F,$A8,$75,$48,$6E,$A4,$3D,$4C | |||
| B2B6 | DEFB $12,$98,$07,$70,$06,$38,$0F,$BC | |||
| B2BE | DEFB $07,$FC,$07,$78,$00,$F0,$00,$00 | |||
|
|
||||
| B2C6 | DEFB $00,$00,$00,$00,$18,$00,$00,$3C | |||
| B2CE | DEFB $38,$06,$76,$6C,$0F,$7D,$78,$1D | |||
| B2D6 | DEFB $7D,$FC,$7F,$7D,$F8,$7F,$39,$70 | |||
| B2DE | DEFB $6C,$00,$00,$43,$80,$E0,$17,$45 | |||
| B2E6 | DEFB $C8,$17,$87,$F0,$1F,$C7,$F8,$0F | |||
| B2EE | DEFB $87,$70,$03,$04,$60,$0C,$00,$18 | |||
| B2F6 | DEFB $1F,$00,$3E,$1A,$8E,$3A,$5E,$BB | |||
| B2FE | DEFB $7E,$7E,$BE,$7C,$7C,$FE,$7C,$60 | |||
| B306 | DEFB $FC,$60,$00,$70,$00,$00,$00,$00 | |||
|
|
||||
| B30E | DEFB $00,$00,$00,$00,$00,$00,$01,$E0 | |||
| B316 | DEFB $00,$00,$07,$F8,$00,$00,$0F,$E4 | |||
| B31E | DEFB $00,$03,$C3,$C4,$00,$0E,$3D,$D8 | |||
| B326 | DEFB $00,$1D,$FD,$C4,$00,$1D,$FC,$66 | |||
| B32E | DEFB $00,$02,$F3,$B2,$0C,$1F,$0F,$DE | |||
| B336 | DEFB $1F,$63,$FF,$CE,$1F,$DC,$7F,$EC | |||
| B33E | DEFB $1D,$DF,$FF,$E0,$3C,$3F,$FE,$E0 | |||
| B346 | DEFB $34,$3C,$F1,$DC,$36,$2C,$00,$FC | |||
| B34E | DEFB $6E,$2C,$00,$FC,$6E,$6E,$00,$70 | |||
| B356 | DEFB $7E,$76,$00,$00,$0E,$7E,$00,$00 | |||
| B35E | DEFB $00,$1E,$00,$00,$00,$00,$00,$00 | |||
| B366 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
|
|
||||
| B36E | DEFB $00,$00,$00,$00,$30,$03,$F0,$00 | |||
| B376 | DEFB $78,$1E,$9C,$00,$78,$73,$E7,$00 | |||
| B37E | DEFB $3C,$D5,$55,$C0,$3E,$FF,$FF,$60 | |||
| B386 | DEFB $1D,$AA,$EA,$B0,$3D,$FF,$FF,$70 | |||
| B38E | DEFB $1B,$57,$75,$58,$3A,$BD,$DF,$F8 | |||
| B396 | DEFB $3A,$2E,$BA,$BC,$1B,$FA,$1B,$F6 | |||
| B39E | DEFB $3E,$5C,$1D,$52,$3F,$F8,$CD,$FA | |||
| B3A6 | DEFB $1E,$B9,$0E,$FA,$1F,$F9,$05,$B2 | |||
| B3AE | DEFB $1F,$58,$8D,$FA,$0D,$EC,$0F,$0C | |||
| B3B6 | DEFB $1F,$AE,$3C,$70,$1D,$F7,$FB,$FC | |||
| B3BE | DEFB $1E,$57,$D7,$FE,$35,$FE,$EF,$FE | |||
| B3C6 | DEFB $3D,$2B,$AF,$6C,$3D,$FF,$DE,$4C | |||
| B3CE | DEFB $38,$B5,$5C,$00,$30,$7F,$D9,$F0 | |||
| B3D6 | DEFB $30,$FA,$8F,$F8,$11,$FB,$EF,$F8 | |||
| B3DE | DEFB $01,$75,$47,$10,$00,$F7,$F0,$E0 | |||
| B3E6 | DEFB $00,$E0,$7F,$00,$00,$00,$00,$00 | |||
|
|
||||
| B3EE | DEFB $00,$00,$00,$00,$06,$07,$E0,$00 | |||
| B3F6 | DEFB $0E,$3D,$38,$00,$1C,$E7,$CE,$00 | |||
| B3FE | DEFB $19,$AA,$AB,$80,$19,$FF,$FE,$C0 | |||
| B406 | DEFB $3B,$55,$D5,$60,$3B,$FF,$FE,$E0 | |||
| B40E | DEFB $36,$AE,$EA,$B0,$35,$7B,$BF,$F0 | |||
| B416 | DEFB $74,$5D,$75,$78,$7F,$F7,$F7,$FC | |||
| B41E | DEFB $3C,$BC,$3A,$AC,$77,$F9,$9B,$F4 | |||
| B426 | DEFB $7D,$72,$5D,$F4,$3F,$F2,$4B,$64 | |||
| B42E | DEFB $3E,$B1,$1B,$F4,$3B,$D8,$1E,$18 | |||
| B436 | DEFB $7F,$5C,$78,$E0,$6B,$EF,$F7,$F8 | |||
| B43E | DEFB $3C,$AF,$AF,$FC,$33,$FD,$DF,$FC | |||
| B446 | DEFB $12,$57,$5E,$D8,$1B,$FF,$BC,$98 | |||
| B44E | DEFB $1C,$6A,$B8,$00,$09,$FF,$B0,$00 | |||
| B456 | DEFB $07,$F5,$1B,$E0,$05,$E7,$DF,$F0 | |||
| B45E | DEFB $03,$9A,$8E,$20,$00,$0F,$E1,$C0 | |||
| B466 | DEFB $00,$00,$FE,$00,$00,$00,$00,$00 | |||
|
|
||||
| B46E | DEFB $00,$00,$00,$00,$40,$00,$FE,$00 | |||
| B476 | DEFB $60,$03,$37,$E0,$7C,$0C,$EA,$A0 | |||
| B47E | DEFB $3E,$1B,$FF,$F8,$3E,$37,$D5,$58 | |||
| B486 | DEFB $1F,$37,$BE,$D8,$0F,$2F,$3B,$F4 | |||
| B48E | DEFB $1D,$6E,$AD,$FC,$1F,$7E,$77,$0C | |||
| B496 | DEFB $0F,$7D,$FF,$24,$0F,$AC,$AE,$76 | |||
| B49E | DEFB $07,$BD,$EE,$56,$03,$B5,$46,$46 | |||
| B4A6 | DEFB $0F,$BF,$F6,$26,$1F,$BA,$A6,$8C | |||
| B4AE | DEFB $0F,$67,$F3,$1A,$13,$5D,$55,$7E | |||
| B4B6 | DEFB $0F,$EF,$9B,$FE,$0F,$2A,$BA,$84 | |||
| B4BE | DEFB $07,$7D,$BF,$B8,$07,$55,$54,$FC | |||
| B4C6 | DEFB $07,$6F,$DF,$FE,$0F,$BA,$AA,$76 | |||
| B4CE | DEFB $07,$FF,$EF,$BA,$07,$B5,$72,$3C | |||
| B4D6 | DEFB $0F,$9B,$1C,$1C,$1B,$0E,$70,$00 | |||
| B4DE | DEFB $07,$03,$C0,$00,$1E,$00,$00,$00 | |||
| B4E6 | DEFB $30,$00,$00,$00,$00,$00,$00,$00 | |||
|
|
||||
| B4EE | DEFB $00,$00,$00,$00,$03,$83,$F8,$00 | |||
| B4F6 | DEFB $07,$0C,$DF,$80,$06,$33,$AA,$80 | |||
| B4FE | DEFB $0F,$2F,$FF,$E0,$0E,$5F,$55,$70 | |||
| B506 | DEFB $06,$5E,$FB,$70,$07,$7C,$EF,$90 | |||
| B50E | DEFB $0F,$3A,$BF,$F0,$0F,$39,$DF,$78 | |||
| B516 | DEFB $0F,$77,$FE,$38,$1F,$32,$BC,$98 | |||
| B51E | DEFB $1D,$77,$B5,$DC,$1B,$95,$35,$5C | |||
| B526 | DEFB $1F,$BF,$F4,$9C,$1F,$2A,$BA,$38 | |||
| B52E | DEFB $0F,$9F,$DC,$74,$03,$B5,$5D,$7C | |||
| B536 | DEFB $0F,$BE,$6F,$E8,$07,$2A,$EB,$D0 | |||
| B53E | DEFB $07,$76,$FF,$FC,$07,$55,$57,$70 | |||
| B546 | DEFB $03,$3F,$7E,$FC,$03,$6A,$AB,$38 | |||
| B54E | DEFB $07,$BF,$BE,$00,$07,$9D,$C8,$00 | |||
| B556 | DEFB $03,$BC,$70,$00,$03,$8F,$C0,$00 | |||
| B55E | DEFB $07,$00,$00,$00,$03,$80,$00,$00 | |||
| B566 | DEFB $00,$C0,$00,$00,$00,$00,$00,$00 | |||
|
|
||||
| B56E | DEFB $00,$00,$03,$F0,$1F,$FC,$3F,$DC | |||
| B576 | DEFB $5E,$7E,$5C,$3E,$3D,$BC,$0F,$F0 | |||
|
|
||||
| B57E | DEFB $00,$00,$03,$F0,$1F,$FC,$3F,$DC | |||
| B586 | DEFB $5E,$7E,$5C,$3E,$7D,$BA,$5E,$7E | |||
| B58E | DEFB $5F,$E0,$3F,$9C,$3F,$FC,$6F,$F8 | |||
| B596 | DEFB $5D,$C0,$5A,$A0,$3D,$60,$0F,$C0 | |||
|
|
||||
| B59E | DEFB $00,$00,$03,$F0,$1F,$FC,$3F,$DC | |||
| B5A6 | DEFB $5E,$7E,$5C,$3E,$7D,$BA,$5E,$7E | |||
| B5AE | DEFB $5F,$E0,$3F,$9C,$3F,$FC,$6F,$F8 | |||
| B5B6 | DEFB $5D,$C0,$5A,$A0,$5D,$40,$6E,$80 | |||
| B5BE | DEFB $6D,$60,$3E,$F0,$2F,$88,$36,$78 | |||
| B5C6 | DEFB $37,$5C,$0F,$AC,$0F,$58,$07,$F0 | |||
|
|
||||
| B5CE | DEFB $00,$00,$03,$F0,$1F,$FC,$3F,$DC | |||
| B5D6 | DEFB $5E,$7E,$5C,$3E,$7D,$BA,$5E,$7E | |||
| B5DE | DEFB $5F,$E0,$3F,$9C,$3F,$FC,$6F,$F8 | |||
| B5E6 | DEFB $5D,$C0,$5A,$A0,$5D,$40,$6E,$80 | |||
| B5EE | DEFB $6D,$60,$3E,$F0,$2F,$88,$36,$78 | |||
| B5F6 | DEFB $37,$58,$1F,$AC,$17,$54,$13,$AC | |||
| B5FE | DEFB $17,$54,$1F,$AC,$33,$54,$6E,$AC | |||
| B606 | DEFB $7D,$54,$3E,$A8,$1D,$70,$07,$C0 | |||
|
|
||||
| B60E | DEFB $00,$00,$2F,$00,$1F,$C0,$7F,$C0 | |||
| B616 | DEFB $3D,$E0,$7B,$C0,$79,$E0,$3F,$FC | |||
| B61E | DEFB $77,$3E,$78,$36,$36,$3E,$3F,$9C | |||
| B626 | DEFB $7F,$C0,$3F,$E0,$5F,$E0,$19,$F0 | |||
| B62E | DEFB $37,$F0,$16,$E0,$09,$E0,$1F,$C0 | |||
| B636 | DEFB $0F,$80,$1E,$00,$1A,$00,$0C,$00 | |||
| B63E | DEFB $1C,$60,$18,$F0,$1C,$70,$0A,$A0 | |||
| B646 | DEFB $0F,$E0,$07,$C0,$03,$00,$00,$00 | |||
|
|
||||
| B64E | DEFB $00,$00,$13,$8C,$0F,$EE,$2F,$7E | |||
| B656 | DEFB $1E,$34,$7E,$B0,$1F,$F0,$7F,$E0 | |||
| B65E | DEFB $3D,$C0,$3E,$00,$1D,$80,$6F,$E0 | |||
| B666 | DEFB $7F,$F0,$5F,$C8,$3F,$F0,$37,$F8 | |||
| B66E | DEFB $0F,$B8,$1F,$98,$0F,$E0,$1F,$E0 | |||
| B676 | DEFB $07,$C0,$0F,$80,$06,$80,$1F,$10 | |||
| B67E | DEFB $0F,$38,$1F,$28,$0E,$18,$03,$98 | |||
| B686 | DEFB $07,$70,$03,$E0,$01,$80,$00,$00 | |||
|
|
||||
| B68E | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| B696 | DEFB $00,$00,$7C,$00,$00,$03,$FF,$00 | |||
| B69E | DEFB $00,$07,$E7,$C0,$40,$DF,$CD,$E0 | |||
| B6A6 | DEFB $63,$BF,$C3,$F0,$6D,$BF,$FF,$F0 | |||
| B6AE | DEFB $7F,$7F,$FF,$F8,$3E,$7F,$FF,$F8 | |||
| B6B6 | DEFB $0E,$FF,$FF,$FC,$1C,$FF,$FF,$FC | |||
| B6BE | DEFB $0D,$FF,$FF,$FC,$01,$FF,$FF,$FE | |||
| B6C6 | DEFB $01,$FF,$FF,$FE,$01,$FF,$FF,$FE | |||
| B6CE | DEFB $01,$FF,$FF,$FE,$01,$FF,$FF,$FE | |||
| B6D6 | DEFB $01,$FF,$FF,$FE,$01,$FF,$FF,$FC | |||
| B6DE | DEFB $00,$FF,$9F,$FE,$00,$FF,$47,$FC | |||
| B6E6 | DEFB $00,$FF,$6F,$FE,$00,$7F,$9F,$FE | |||
| B6EE | DEFB $00,$23,$FF,$AC,$00,$1D,$FF,$FC | |||
| B6F6 | DEFB $00,$3E,$EF,$F8,$00,$7E,$F1,$E0 | |||
| B6FE | DEFB $00,$7C,$FE,$10,$00,$7D,$FF,$E0 | |||
| B706 | DEFB $00,$38,$7F,$00,$00,$00,$00,$00 | |||
|
|
||||
| B70E | DEFB $00,$00,$00,$00,$00,$00,$7C,$00 | |||
| B716 | DEFB $00,$03,$FF,$00,$00,$07,$F3,$C0 | |||
| B71E | DEFB $00,$1F,$E6,$E0,$00,$3F,$E1,$F0 | |||
| B726 | DEFB $00,$3F,$FF,$F0,$00,$7F,$FF,$F8 | |||
| B72E | DEFB $00,$7F,$FF,$F8,$00,$FF,$FF,$FC | |||
| B736 | DEFB $00,$FF,$FF,$FC,$01,$FF,$FF,$FC | |||
| B73E | DEFB $01,$FF,$FF,$FE,$01,$FF,$FF,$FE | |||
| B746 | DEFB $01,$FF,$FF,$FE,$01,$FF,$FF,$FE | |||
| B74E | DEFB $01,$FF,$FF,$FE,$0D,$FF,$FF,$FE | |||
| B756 | DEFB $1D,$FF,$FF,$FC,$3C,$FF,$9F,$FE | |||
| B75E | DEFB $1E,$FF,$0F,$FC,$7E,$FF,$67,$FE | |||
| B766 | DEFB $7E,$67,$9F,$FE,$68,$3B,$FF,$AC | |||
| B76E | DEFB $70,$FF,$FF,$FC,$21,$FD,$E3,$F8 | |||
| B776 | DEFB $01,$FB,$F0,$40,$00,$F1,$FE,$10 | |||
| B77E | DEFB $00,$00,$FF,$E0,$00,$00,$1F,$00 | |||
| B786 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
|
|
||||
| B78E | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| B796 | DEFB $00,$00,$00,$00,$00,$00,$7C,$00 | |||
| B79E | DEFB $00,$03,$FF,$00,$00,$0F,$FF,$C0 | |||
| B7A6 | DEFB $00,$1F,$FF,$E0,$00,$1F,$FF,$F0 | |||
| B7AE | DEFB $00,$3F,$FF,$F8,$00,$3F,$FF,$F8 | |||
| B7B6 | DEFB $00,$7F,$FF,$F8,$00,$7F,$FF,$FC | |||
| B7BE | DEFB $00,$7F,$FF,$FC,$00,$7F,$FF,$FC | |||
| B7C6 | DEFB $00,$FF,$FF,$EE,$00,$FF,$FF,$96 | |||
| B7CE | DEFB $38,$78,$FF,$8E,$7F,$87,$0F,$BE | |||
| B7D6 | DEFB $7F,$7F,$E7,$F8,$1F,$7F,$CF,$F8 | |||
| B7DE | DEFB $1F,$F9,$9F,$FE,$07,$FC,$3F,$C4 | |||
| B7E6 | DEFB $03,$F9,$E7,$B8,$00,$F3,$BB,$7E | |||
| B7EE | DEFB $00,$07,$DF,$7E,$00,$3F,$DF,$7E | |||
| B7F6 | DEFB $00,$3F,$FF,$BE,$00,$1F,$FF,$9C | |||
| B7FE | DEFB $00,$0F,$FE,$00,$00,$07,$FC,$00 | |||
| B806 | DEFB $00,$01,$C0,$00,$00,$00,$00,$00 | |||
|
|
||||
| B80E | DEFB $00,$00,$00,$00,$00,$00,$7C,$00 | |||
| B816 | DEFB $00,$03,$FF,$00,$00,$0F,$FF,$C0 | |||
| B81E | DEFB $00,$1F,$FF,$E0,$00,$1F,$FF,$F0 | |||
| B826 | DEFB $00,$3F,$FF,$F8,$00,$3F,$FF,$F8 | |||
| B82E | DEFB $00,$7F,$FF,$F8,$00,$7F,$FF,$FC | |||
| B836 | DEFB $00,$7F,$FF,$FC,$00,$7F,$FF,$FC | |||
| B83E | DEFB $00,$FF,$FF,$CE,$00,$FF,$FF,$B6 | |||
| B846 | DEFB $00,$FF,$FF,$8E,$00,$A7,$FF,$9E | |||
| B84E | DEFB $00,$79,$FF,$FA,$00,$FF,$FF,$F8 | |||
| B856 | DEFB $03,$FF,$FF,$FE,$02,$07,$FF,$E4 | |||
| B85E | DEFB $00,$F3,$FF,$D8,$03,$F9,$FF,$F8 | |||
| B866 | DEFB $07,$FC,$3F,$B8,$1F,$F9,$9F,$FC | |||
| B86E | DEFB $1F,$7F,$CF,$7C,$7F,$7F,$E7,$7C | |||
| B876 | DEFB $7F,$87,$0E,$38,$38,$00,$3C,$00 | |||
| B87E | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| B886 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
|
|
||||
| B88E | DEFB $00,$00,$00,$F0,$0E,$CC,$1B,$FA | |||
| B896 | DEFB $59,$E4,$72,$1E,$07,$FE,$01,$18 | |||
| B89E | DEFB $05,$5C,$05,$F8,$03,$64,$18,$DC | |||
| B8A6 | DEFB $4B,$3C,$4C,$DE,$68,$3A,$77,$DA | |||
| B8AE | DEFB $0F,$F6,$60,$0C,$77,$36,$71,$BA | |||
| B8B6 | DEFB $16,$BE,$66,$BE,$33,$98,$00,$00 | |||
|
|
||||
| B8BE | DEFB $00,$F0,$0F,$FC,$1F,$FE,$5F,$FF | |||
| B8C6 | DEFB $FF,$FE,$FF,$FF,$FF,$FF,$0F,$FE | |||
| B8CE | DEFB $0F,$FE,$0F,$FC,$1F,$FE,$5F,$FE | |||
| B8D6 | DEFB $FF,$FE,$FF,$FF,$FF,$FF,$FF,$FF | |||
| B8DE | DEFB $7F,$FF,$FF,$FE,$FF,$FF,$FF,$FF | |||
| B8E6 | DEFB $7F,$FF,$FF,$FF,$7F,$BE,$33,$18 | |||
|
|
||||
| B8EE | DEFB $00,$00,$07,$80,$0F,$C0,$0C,$60 | |||
| B8F6 | DEFB $08,$60,$18,$00,$1B,$E0,$18,$98 | |||
| B8FE | DEFB $19,$44,$5A,$AA,$59,$46,$18,$1C | |||
| B906 | DEFB $5B,$F2,$58,$0E,$67,$FE,$7F,$FE | |||
| B90E | DEFB $3F,$FE,$3F,$FC,$1F,$F8,$27,$E4 | |||
| B916 | DEFB $38,$1C,$1F,$F8,$07,$E0,$00,$00 | |||
|
|
||||
| B91E | DEFB $07,$80,$0F,$C0,$1F,$E0,$1F,$F0 | |||
| B926 | DEFB $3C,$70,$3C,$70,$3F,$F8,$7F,$FC | |||
| B92E | DEFB $7F,$FE,$FF,$FF,$FF,$FF,$FF,$FF | |||
| B936 | DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF | |||
| B93E | DEFB $7F,$FF,$7F,$FE,$7F,$FE,$7F,$FE | |||
| B946 | DEFB $7F,$FE,$3F,$FC,$1F,$F8,$07,$E0 | |||
|
|
||||
| B94E | DEFB $00,$00,$01,$F0,$07,$70,$0D,$A0 | |||
| B956 | DEFB $1B,$60,$16,$D8,$39,$84,$7F,$02 | |||
| B95E | DEFB $5E,$22,$40,$52,$62,$A6,$78,$1E | |||
| B966 | DEFB $4F,$F2,$51,$8A,$5E,$7A,$57,$EA | |||
| B96E | DEFB $59,$4A,$5B,$4A,$5B,$5A,$4F,$F2 | |||
| B976 | DEFB $71,$8E,$3E,$7C,$1F,$F8,$07,$E0 | |||
|
|
||||
| B97E | DEFB $01,$F0,$07,$F8,$0F,$F8,$1F,$F0 | |||
| B986 | DEFB $3F,$F8,$3F,$FC,$7F,$FE,$7F,$FF | |||
| B98E | DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF | |||
| B996 | DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF | |||
| B99E | DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF | |||
| B9A6 | DEFB $FF,$FF,$7F,$FE,$3F,$FC,$1F,$F8 | |||
|
|
||||
| B9AE | DEFB $00,$00,$1C,$38,$3E,$7C,$73,$CE | |||
| B9B6 | DEFB $61,$86,$6D,$B6,$73,$CE,$3E,$7C | |||
| B9BE | DEFB $0D,$B0,$03,$C0,$03,$40,$03,$40 | |||
| B9C6 | DEFB $03,$40,$03,$40,$03,$7C,$03,$5C | |||
| B9CE | DEFB $03,$40,$03,$78,$03,$58,$03,$40 | |||
| B9D6 | DEFB $02,$7C,$03,$DC,$01,$80,$00,$00 | |||
|
|
||||
| B9DE | DEFB $1C,$38,$3E,$7C,$7F,$FE,$FF,$FF | |||
| B9E6 | DEFB $FF,$FF,$FF,$FF,$FF,$FF,$7F,$FE | |||
| B9EE | DEFB $3F,$FC,$0F,$F0,$07,$E0,$07,$E0 | |||
| B9F6 | DEFB $07,$E0,$07,$FC,$07,$FE,$07,$FE | |||
| B9FE | DEFB $07,$FC,$07,$FC,$07,$FC,$07,$FC | |||
| BA06 | DEFB $07,$FE,$07,$FE,$03,$DC,$01,$80 | |||
|
|
||||
| BA0E | DEFB $00,$00,$03,$C0,$0E,$70,$1E,$78 | |||
| BA16 | DEFB $3F,$FC,$3C,$3C,$78,$1E,$48,$12 | |||
| BA1E | DEFB $48,$12,$78,$1E,$78,$1E,$38,$1C | |||
| BA26 | DEFB $38,$1C,$3C,$3C,$24,$24,$24,$24 | |||
| BA2E | DEFB $3C,$3C,$1C,$38,$1C,$38,$1E,$78 | |||
| BA36 | DEFB $32,$4C,$32,$4C,$3E,$7C,$00,$00 | |||
|
|
||||
| BA3E | DEFB $03,$C0,$0F,$F0,$1F,$F8,$3F,$FC | |||
| BA46 | DEFB $7F,$FE,$7F,$FE,$FC,$3F,$FC,$3F | |||
| BA4E | DEFB $FC,$3F,$FC,$3F,$FC,$3F,$7C,$3E | |||
| BA56 | DEFB $7C,$3E,$7E,$7E,$7E,$7E,$7E,$7E | |||
| BA5E | DEFB $7E,$7E,$3E,$7C,$3E,$7C,$3F,$FC | |||
| BA66 | DEFB $7F,$FE,$7F,$FE,$7F,$FE,$3E,$7C | |||
|
|
||||
| BA6E | DEFB $00,$00,$00,$70,$00,$F8,$06,$F8 | |||
| BA76 | DEFB $0F,$78,$1F,$70,$1F,$E0,$1F,$C0 | |||
| BA7E | DEFB $1E,$C0,$0D,$C0,$03,$C0,$03,$C0 | |||
| BA86 | DEFB $03,$C0,$03,$C0,$03,$D8,$03,$DC | |||
| BA8E | DEFB $01,$FC,$0F,$FC,$1F,$B8,$1F,$90 | |||
| BA96 | DEFB $1F,$80,$1F,$80,$0F,$00,$00,$00 | |||
|
|
||||
| BA9E | DEFB $00,$70,$00,$F8,$07,$FC,$0F,$FC | |||
| BAA6 | DEFB $1F,$FC,$3F,$F8,$3F,$F0,$3F,$E0 | |||
| BAAE | DEFB $3F,$E0,$1F,$E0,$0F,$E0,$07,$E0 | |||
| BAB6 | DEFB $07,$E0,$07,$F8,$07,$FC,$07,$FE | |||
| BABE | DEFB $0F,$FE,$1F,$FE,$3F,$FC,$3F,$F8 | |||
| BAC6 | DEFB $3F,$D0,$3F,$C0,$1F,$80,$0F,$00 | |||
|
|
||||
| BACE | DEFB $00,$00,$03,$50,$0E,$AC,$15,$52 | |||
| BAD6 | DEFB $12,$AE,$11,$52,$18,$A6,$0E,$1E | |||
| BADE | DEFB $17,$FE,$0F,$FC,$07,$F8,$09,$E4 | |||
| BAE6 | DEFB $0A,$1C,$07,$EC,$00,$FC,$0F,$3C | |||
| BAEE | DEFB $3F,$DC,$7F,$F8,$7F,$E8,$3F,$E8 | |||
| BAF6 | DEFB $4F,$D0,$70,$70,$1F,$C0,$00,$00 | |||
|
|
||||
| BAFE | DEFB $03,$F0,$0F,$F8,$1F,$FE,$3F,$FF | |||
| BB06 | DEFB $3F,$FF,$3F,$FF,$1F,$FF,$3F,$FF | |||
| BB0E | DEFB $3F,$FF,$1F,$FE,$0F,$FC,$1F,$FE | |||
| BB16 | DEFB $1F,$FE,$0F,$FE,$0F,$FE,$3F,$FE | |||
| BB1E | DEFB $7F,$FE,$FF,$FC,$FF,$FC,$7F,$FC | |||
| BB26 | DEFB $FF,$F8,$FF,$F8,$7F,$F0,$1F,$C0 | |||
|
|
||||
| BB2E | DEFB $00,$00,$00,$00,$03,$E0,$00,$00 | |||
| BB36 | DEFB $0F,$F8,$00,$00,$1F,$FE,$00,$00 | |||
| BB3E | DEFB $3F,$FF,$80,$00,$3F,$FF,$E0,$00 | |||
| BB46 | DEFB $7F,$FF,$F8,$00,$7F,$FF,$FE,$00 | |||
| BB4E | DEFB $3F,$FF,$FF,$80,$5F,$FF,$FF,$E0 | |||
| BB56 | DEFB $67,$C7,$FF,$F8,$79,$B9,$FF,$E4 | |||
| BB5E | DEFB $6E,$7E,$FF,$DE,$63,$4E,$FF,$B8 | |||
| BB66 | DEFB $6B,$76,$FF,$72,$6B,$7D,$FE,$E6 | |||
| BB6E | DEFB $6B,$4C,$7E,$CA,$6B,$45,$9D,$96 | |||
| BB76 | DEFB $6B,$55,$E5,$2A,$63,$45,$B8,$56 | |||
| BB7E | DEFB $7B,$65,$8C,$AA,$1F,$6D,$AD,$56 | |||
| BB86 | DEFB $07,$9D,$AC,$AA,$01,$E5,$AD,$54 | |||
| BB8E | DEFB $00,$79,$AC,$A8,$00,$1F,$AD,$50 | |||
| BB96 | DEFB $00,$07,$AC,$A0,$00,$01,$CD,$40 | |||
| BB9E | DEFB $00,$00,$7C,$80,$00,$00,$1D,$00 | |||
| BBA6 | DEFB $00,$00,$06,$00,$00,$00,$00,$00 | |||
|
|
||||
| BBAE | DEFB $03,$E0,$00,$00,$0F,$F8,$00,$00 | |||
| BBB6 | DEFB $1F,$FE,$00,$00,$3F,$FF,$80,$00 | |||
| BBBE | DEFB $7F,$FF,$E0,$00,$7F,$FF,$F8,$00 | |||
| BBC6 | DEFB $FF,$FF,$FE,$00,$FF,$FF,$FF,$80 | |||
| BBCE | DEFB $FF,$FF,$FF,$E0,$FF,$FF,$FF,$F8 | |||
| BBD6 | DEFB $FF,$FF,$FF,$FC,$FF,$FF,$FF,$FE | |||
| BBDE | DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF | |||
| BBE6 | DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF | |||
| BBEE | DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF | |||
| BBF6 | DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF | |||
| BBFE | DEFB $FF,$FF,$FF,$FF,$7F,$FF,$FF,$FF | |||
| BC06 | DEFB $1F,$FF,$FF,$FF,$07,$FF,$FF,$FF | |||
| BC0E | DEFB $01,$FF,$FF,$FE,$00,$7F,$FF,$FC | |||
| BC16 | DEFB $00,$1F,$FF,$F8,$00,$07,$FF,$F0 | |||
| BC1E | DEFB $00,$01,$FF,$C0,$00,$00,$7F,$80 | |||
| BC26 | DEFB $00,$00,$1F,$00,$00,$00,$06,$00 | |||
|
|
||||
| BC2E | DEFB $00,$00,$00,$00,$00,$60,$00,$E0 | |||
| BC36 | DEFB $00,$E0,$00,$E0,$01,$F0,$03,$B0 | |||
| BC3E | DEFB $03,$B0,$03,$78,$03,$58,$03,$D8 | |||
| BC46 | DEFB $07,$58,$0F,$58,$0F,$5C,$0E,$F4 | |||
| BC4E | DEFB $1E,$F4,$1E,$D4,$1E,$DC,$36,$D4 | |||
| BC56 | DEFB $3A,$CC,$3E,$D6,$3D,$AA,$3F,$86 | |||
| BC5E | DEFB $3D,$AA,$7D,$96,$6D,$2A,$75,$96 | |||
| BC66 | DEFB $3F,$2C,$1F,$58,$0E,$B0,$07,$C0 | |||
|
|
||||
| BC6E | DEFB $00,$00,$00,$60,$00,$F0,$01,$F0 | |||
| BC76 | DEFB $01,$F0,$01,$F0,$03,$F8,$07,$F8 | |||
| BC7E | DEFB $07,$F8,$07,$FC,$07,$FC,$07,$FC | |||
| BC86 | DEFB $0F,$FC,$1F,$FC,$1F,$FE,$1F,$FE | |||
| BC8E | DEFB $3F,$FE,$3F,$FE,$3F,$FE,$7F,$FE | |||
| BC96 | DEFB $7F,$FE,$7F,$FF,$7F,$FF,$7F,$FF | |||
| BC9E | DEFB $FF,$FF,$FF,$FF,$FF,$FF,$7F,$FF | |||
| BCA6 | DEFB $7F,$FF,$3F,$FE,$1F,$F8,$0F,$F0 | |||
|
|
||||
| BCAE | DEFB $00,$00,$00,$00,$00,$03,$C0,$00 | |||
| BCB6 | DEFB $00,$0F,$F0,$00,$00,$1F,$F8,$00 | |||
| BCBE | DEFB $00,$3F,$FC,$00,$00,$39,$FC,$00 | |||
| BCC6 | DEFB $00,$30,$FC,$00,$03,$B2,$FD,$C0 | |||
| BCCE | DEFB $1F,$B2,$FD,$F8,$3F,$B9,$FD,$5C | |||
| BCD6 | DEFB $7F,$DF,$FA,$AE,$7F,$EF,$F5,$5E | |||
| BCDE | DEFB $5F,$F3,$CA,$BA,$63,$FC,$2F,$C6 | |||
| BCE6 | DEFB $7C,$1F,$F8,$3E,$3F,$E0,$07,$D4 | |||
| BCEE | DEFB $3F,$FF,$FA,$AC,$3F,$FF,$D5,$54 | |||
| BCF6 | DEFB $1F,$FF,$AA,$A8,$1F,$FD,$D5,$58 | |||
| BCFE | DEFB $1F,$EA,$AA,$B8,$07,$D5,$55,$E0 | |||
| BD06 | DEFB $00,$FE,$BF,$00,$00,$07,$E0,$00 | |||
|
|
||||
| BD0E | DEFB $00,$03,$C0,$00,$00,$0F,$F0,$00 | |||
| BD16 | DEFB $00,$1F,$F8,$00,$00,$3F,$FC,$00 | |||
| BD1E | DEFB $00,$7F,$FE,$00,$00,$7F,$FE,$00 | |||
| BD26 | DEFB $03,$FF,$FF,$C0,$1F,$FF,$FF,$F8 | |||
| BD2E | DEFB $3F,$FF,$FF,$FC,$7F,$FF,$FF,$FE | |||
| BD36 | DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF | |||
| BD3E | DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF | |||
| BD46 | DEFB $FF,$FF,$FF,$FF,$7F,$FF,$FF,$FE | |||
| BD4E | DEFB $7F,$FF,$FF,$FE,$7F,$FF,$FF,$FE | |||
| BD56 | DEFB $3F,$FF,$FF,$FC,$3F,$FF,$FF,$FC | |||
| BD5E | DEFB $3F,$FF,$FF,$FC,$1F,$FF,$FF,$F8 | |||
| BD66 | DEFB $07,$FF,$FF,$E0,$00,$FF,$FF,$00 | |||
|
|
||||
| BD6E | DEFB $00,$00,$30,$0C,$69,$9E,$6B,$DA | |||
| BD76 | DEFB $33,$CC,$17,$94,$34,$78,$31,$E0 | |||
| BD7E | DEFB $19,$80,$1F,$F0,$06,$6C,$0F,$16 | |||
| BD86 | DEFB $1D,$9E,$0C,$CC,$00,$E0,$00,$70 | |||
|
|
||||
| BD8E | DEFB $30,$0C,$79,$9F,$FF,$FF,$FF,$FF | |||
| BD96 | DEFB $7F,$FE,$3F,$FE,$7F,$FC,$7F,$F0 | |||
| BD9E | DEFB $3F,$F0,$3F,$FC,$0F,$FF,$1F,$FF | |||
| BDA6 | DEFB $1F,$FF,$3F,$FE,$3F,$FC,$0C,$F8 | |||
|
|
||||
| BDAE | DEFB $00,$00,$00,$00,$00,$1E,$00,$E0 | |||
| BDB6 | DEFB $00,$C0,$7C,$18,$03,$1E,$0F,$00 | |||
| BDBE | DEFB $00,$77,$C3,$C2,$11,$CE,$39,$E9 | |||
| BDC6 | DEFB $23,$30,$07,$E5,$06,$E4,$11,$C4 | |||
| BDCE | DEFB $44,$E8,$A9,$90,$41,$F1,$47,$B1 | |||
| BDD6 | DEFB $4B,$FE,$3E,$61,$03,$CF,$F9,$C6 | |||
| BDDE | DEFB $11,$E7,$C7,$08,$08,$F1,$F8,$30 | |||
| BDE6 | DEFB $06,$3C,$00,$40,$01,$87,$1E,$00 | |||
|
|
||||
| BDEE | DEFB $00,$00,$70,$00,$00,$00,$07,$00 | |||
| BDF6 | DEFB $00,$03,$E0,$20,$06,$5E,$3C,$08 | |||
| BDFE | DEFB $31,$81,$C6,$12,$4C,$7E,$39,$49 | |||
| BE06 | DEFB $93,$B0,$07,$60,$17,$E0,$43,$B0 | |||
| BE0E | DEFB $06,$E0,$13,$B4,$16,$F0,$87,$F4 | |||
| BE16 | DEFB $93,$7E,$3E,$E8,$89,$4F,$FF,$08 | |||
| BE1E | DEFB $41,$B1,$F8,$71,$22,$1E,$00,$86 | |||
| BE26 | DEFB $08,$83,$E0,$28,$00,$00,$00,$00 | |||
|
|
||||
| BE2E | DEFB $00,$00,$00,$38,$3C,$00,$7C,$7E | |||
| BE36 | DEFB $00,$5C,$7E,$00,$60,$6F,$38,$7C | |||
| BE3E | DEFB $37,$7C,$3E,$06,$66,$1F,$80,$DE | |||
| BE46 | DEFB $0F,$E1,$DE,$01,$F3,$CC,$1E,$F7 | |||
| BE4E | DEFB $B0,$3F,$6F,$78,$37,$6F,$18,$73 | |||
| BE56 | DEFB $5E,$78,$67,$5E,$F0,$6E,$DE,$E8 | |||
| BE5E | DEFB $0E,$BF,$78,$0E,$B9,$F8,$0F,$FA | |||
| BE66 | DEFB $F0,$37,$FF,$C8,$7B,$FE,$3C,$7E | |||
| BE6E | DEFB $D1,$AC,$3F,$2D,$58,$0F,$FA,$C6 | |||
| BE76 | DEFB $73,$D6,$3E,$7C,$71,$FA,$7F,$8F | |||
| BE7E | DEFB $D6,$3F,$FE,$AC,$1F,$D5,$58,$0F | |||
| BE86 | DEFB $AA,$F0,$03,$D7,$C0,$00,$7E,$00 | |||
|
|
||||
| BE8E | DEFB $38,$3C,$00,$7C,$7E,$00,$FE,$FF | |||
| BE96 | DEFB $00,$FE,$FF,$38,$FC,$FF,$FC,$FE | |||
| BE9E | DEFB $7F,$FE,$7F,$BF,$FF,$3F,$CF,$FF | |||
| BEA6 | DEFB $1F,$F7,$FF,$1F,$FF,$FE,$3F,$FF | |||
| BEAE | DEFB $FC,$7F,$FF,$FC,$77,$FF,$FC,$F3 | |||
| BEB6 | DEFB $FF,$FC,$E7,$FF,$F8,$EF,$FF,$FC | |||
| BEBE | DEFB $7F,$FF,$FC,$1F,$FF,$FC,$3F,$FF | |||
| BEC6 | DEFB $F8,$7F,$FF,$FC,$FF,$FF,$FE,$FF | |||
| BECE | DEFB $FF,$FE,$7F,$FF,$FC,$7F,$FF,$FF | |||
| BED6 | DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF | |||
| BEDE | DEFB $FE,$7F,$FF,$FE,$3F,$FF,$FC,$1F | |||
| BEE6 | DEFB $FF,$F8,$0F,$FF,$F0,$03,$FF,$C0 | |||
|
|
||||
| BEEE | DEFB $00,$00,$00,$1C,$00,$3C,$3E,$38 | |||
| BEF6 | DEFB $7E,$36,$7C,$7E,$32,$FC,$DE,$3C | |||
| BEFE | DEFB $F6,$DC,$1E,$6E,$E0,$0F,$85,$C0 | |||
| BF06 | DEFB $01,$E3,$C0,$3E,$F7,$A0,$7E,$EF | |||
| BF0E | DEFB $70,$77,$6F,$30,$77,$5F,$70,$73 | |||
| BF16 | DEFB $5E,$E0,$27,$5E,$D0,$0E,$DE,$F8 | |||
| BF1E | DEFB $1E,$DF,$78,$1F,$DD,$F8,$0F,$BA | |||
| BF26 | DEFB $F0,$37,$FF,$C8,$7B,$FE,$3C,$7E | |||
| BF2E | DEFB $D1,$AC,$3F,$2D,$58,$0F,$FA,$C6 | |||
| BF36 | DEFB $73,$D6,$3E,$7C,$71,$FA,$7F,$8F | |||
| BF3E | DEFB $D6,$3F,$FE,$AC,$1F,$D5,$58,$0F | |||
| BF46 | DEFB $AA,$F0,$03,$D7,$C0,$00,$7E,$00 | |||
|
|
||||
| BF4E | DEFB $1C,$00,$3C,$3E,$38,$7E,$7F,$7C | |||
| BF56 | DEFB $7F,$7F,$FE,$FF,$7F,$FF,$FF,$7F | |||
| BF5E | DEFB $FF,$FE,$3F,$FF,$FC,$1F,$FF,$E0 | |||
| BF66 | DEFB $3F,$FF,$E0,$7F,$FF,$F0,$FF,$FF | |||
| BF6E | DEFB $F8,$FF,$FF,$F8,$FF,$FF,$F8,$FF | |||
| BF76 | DEFB $FF,$F0,$7F,$FF,$F8,$3F,$FF,$FC | |||
| BF7E | DEFB $3F,$FF,$FC,$1F,$FF,$FC,$3F,$FF | |||
| BF86 | DEFB $F8,$7F,$FF,$FC,$FF,$FF,$FE,$FF | |||
| BF8E | DEFB $FF,$FE,$7F,$FF,$FC,$7F,$FF,$FF | |||
| BF96 | DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF | |||
| BF9E | DEFB $FF,$7F,$FF,$FE,$3F,$FF,$FC,$1F | |||
| BFA6 | DEFB $FF,$F8,$0F,$FF,$F0,$03,$FF,$C0 | |||
|
|
||||
| BFAE | DEFB $00,$00,$00,$00,$00,$07,$3C,$00 | |||
| BFB6 | DEFB $00,$3F,$E2,$00,$00,$FF,$C1,$C0 | |||
| BFBE | DEFB $01,$FF,$A8,$E0,$03,$DF,$95,$50 | |||
| BFC6 | DEFB $0F,$7F,$AA,$AC,$1E,$77,$55,$56 | |||
| BFCE | DEFB $3F,$FC,$2A,$AA,$7D,$BE,$55,$56 | |||
| BFD6 | DEFB $73,$5F,$2A,$AC,$32,$BF,$8D,$54 | |||
| BFDE | DEFB $19,$5F,$F6,$B8,$06,$B7,$BF,$F0 | |||
| BFE6 | DEFB $03,$7D,$7F,$00,$00,$2F,$80,$00 | |||
|
|
||||
| BFEE | DEFB $00,$07,$3C,$00,$00,$3F,$FE,$00 | |||
| BFF6 | DEFB $00,$FF,$FF,$C0,$01,$FF,$FF,$E0 | |||
| BFFE | DEFB $03,$FF,$FF,$F0,$0F,$FF,$FF,$FC | |||
| C006 | DEFB $1F,$FF,$FF,$FE,$3F,$FF,$FF,$FF | |||
| C00E | DEFB $7F,$FF,$FF,$FF,$FF,$FF,$FF,$FF | |||
| C016 | DEFB $FF,$FF,$FF,$FE,$7F,$FF,$FF,$FC | |||
| C01E | DEFB $3F,$FF,$FF,$FC,$0F,$FF,$FF,$F8 | |||
| C026 | DEFB $07,$FF,$FF,$F0,$03,$FF,$FF,$00 | |||
|
|
||||
| C02E | DEFB $00,$7C,$00,$00,$01,$FF,$9E,$00 | |||
| C036 | DEFB $03,$E7,$FF,$00,$1F,$98,$23,$80 | |||
| C03E | DEFB $3C,$7D,$51,$80,$71,$7F,$AE,$F0 | |||
| C046 | DEFB $6A,$B7,$D5,$18,$65,$6B,$FE,$A8 | |||
| C04E | DEFB $6A,$B5,$FF,$5C,$35,$6A,$FF,$AC | |||
| C056 | DEFB $32,$F5,$5F,$58,$19,$7A,$AF,$A8 | |||
| C05E | DEFB $0C,$B5,$55,$58,$0D,$5A,$AA,$B0 | |||
| C066 | DEFB $1E,$BD,$55,$60,$1D,$5A,$BF,$C0 | |||
| C06E | DEFB $1E,$A5,$F3,$80,$07,$E0,$F6,$00 | |||
| C076 | DEFB $00,$DF,$8F,$E0,$07,$30,$73,$B0 | |||
| C07E | DEFB $0F,$EF,$F9,$58,$35,$B8,$CE,$AC | |||
| C086 | DEFB $4B,$7A,$B3,$56,$55,$77,$39,$26 | |||
| C08E | DEFB $63,$76,$09,$9A,$39,$70,$E3,$A6 | |||
| C096 | DEFB $3D,$BB,$FF,$4E,$1F,$3E,$3C,$3C | |||
| C09E | DEFB $0F,$E1,$C3,$F8,$03,$FD,$FF,$C0 | |||
| C0A6 | DEFB $00,$3F,$7C,$00,$00,$00,$00,$00 | |||
|
|
||||
| C0AE | DEFB $00,$FF,$9C,$00,$03,$FF,$FE,$00 | |||
| C0B6 | DEFB $1F,$FF,$FF,$00,$3F,$FF,$FF,$80 | |||
| C0BE | DEFB $7F,$FF,$FF,$C0,$FF,$FF,$FF,$F0 | |||
| C0C6 | DEFB $FF,$FF,$FF,$F8,$FF,$FF,$FF,$FC | |||
| C0CE | DEFB $FF,$FF,$FF,$FC,$FF,$FF,$FF,$FE | |||
| C0D6 | DEFB $7F,$FF,$FF,$FE,$7F,$FF,$FF,$FC | |||
| C0DE | DEFB $3F,$FF,$FF,$FC,$1F,$FF,$FF,$FC | |||
| C0E6 | DEFB $1F,$FF,$FF,$F8,$3F,$FF,$FF,$F0 | |||
| C0EE | DEFB $3F,$FF,$FF,$E0,$3F,$FF,$FF,$C0 | |||
| C0F6 | DEFB $1F,$FF,$FF,$E0,$07,$FF,$FF,$F0 | |||
| C0FE | DEFB $0F,$FF,$FF,$F8,$3F,$FF,$FF,$FC | |||
| C106 | DEFB $7F,$FF,$FF,$FE,$FF,$FF,$FF,$FF | |||
| C10E | DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF | |||
| C116 | DEFB $7F,$FF,$FF,$FF,$3F,$FF,$FF,$FF | |||
| C11E | DEFB $3F,$FF,$FF,$FE,$1F,$FF,$FF,$FC | |||
| C126 | DEFB $0F,$FF,$FF,$F8,$03,$FF,$FF,$C0 | |||
|
|
||||
| C12E | DEFB $00,$00,$04,$00,$0C,$00,$0C,$00 | |||
| C136 | DEFB $3C,$50,$58,$78,$38,$32,$30,$34 | |||
| C13E | DEFB $30,$3C,$38,$F4,$30,$70,$18,$32 | |||
| C146 | DEFB $0C,$62,$0E,$6A,$06,$6E,$13,$64 | |||
| C14E | DEFB $0F,$DC,$01,$F0,$00,$E0,$0D,$F0 | |||
| C156 | DEFB $0C,$30,$06,$70,$06,$60,$24,$48 | |||
| C15E | DEFB $7C,$DE,$58,$B2,$50,$60,$21,$C0 | |||
| C166 | DEFB $19,$10,$1B,$70,$35,$34,$36,$3C | |||
| C16E | DEFB $76,$70,$6E,$60,$78,$60,$70,$E0 | |||
| C176 | DEFB $30,$E0,$38,$C0,$18,$00,$00,$00 | |||
|
|
||||
| C17E | DEFB $04,$00,$0E,$00,$1E,$00,$1E,$50 | |||
| C186 | DEFB $7E,$F8,$7C,$FC,$78,$7A,$78,$7E | |||
| C18E | DEFB $78,$FE,$7D,$FE,$78,$F4,$3C,$72 | |||
| C196 | DEFB $1E,$F3,$1F,$EF,$3F,$FF,$3F,$FE | |||
| C19E | DEFB $1F,$FE,$0F,$FC,$0D,$F0,$1F,$F8 | |||
| C1A6 | DEFB $1E,$F8,$0F,$78,$27,$78,$7E,$7E | |||
| C1AE | DEFB $FC,$FF,$FC,$FF,$F9,$FA,$7B,$F8 | |||
| C1B6 | DEFB $3F,$F8,$3F,$F8,$77,$F8,$77,$F8 | |||
| C1BE | DEFB $F7,$F8,$EF,$F0,$FE,$F6,$F9,$FE | |||
| C1C6 | DEFB $79,$F8,$7D,$E0,$3C,$00,$18,$00 | |||
|
|
||||
| C1CE | DEFB $00,$00,$00,$00,$01,$80,$07,$E0 | |||
| C1D6 | DEFB $0F,$B0,$0F,$A8,$1F,$54,$3F,$AC | |||
| C1DE | DEFB $37,$54,$0F,$AE,$33,$96,$7E,$6E | |||
| C1E6 | DEFB $7C,$BE,$79,$5C,$1A,$B8,$07,$E0 | |||
|
|
||||
| C1EE | DEFB $00,$00,$01,$80,$07,$E0,$0F,$F0 | |||
| C1F6 | DEFB $1F,$F8,$1F,$FC,$3F,$FE,$7F,$FE | |||
| C1FE | DEFB $7F,$FE,$3F,$FF,$7F,$FF,$FF,$FF | |||
| C206 | DEFB $FF,$FF,$FF,$FE,$7F,$FC,$1F,$F8 | |||
|
|
||||
| C20E | DEFB $02,$45,$E2,$40,$08,$14,$08,$22 | |||
| C216 | DEFB $57,$22,$00,$00,$00,$00,$00,$00 | |||
| C21E | DEFB $00,$00,$00,$00,$0C,$16,$1E,$0C | |||
|
|
||||
| C226 | DEFB $00,$11,$82,$00,$28,$00,$08,$20 | |||
| C22E | DEFB $02,$00,$00,$00,$00,$00,$00,$00 | |||
| C236 | DEFB $38,$7C,$5C,$7C,$38,$00,$00,$00 | |||
|
|
||||
| C23E | DEFB $00,$02,$00,$10,$00,$00,$00,$08 | |||
| C246 | DEFB $00,$00,$00,$1C,$3E,$77,$6F,$6F | |||
| C24E | DEFB $3E,$1C,$00,$00,$00,$00,$00,$00 | |||
|
|
||||
| C256 | DEFB $00,$00,$00,$00,$00,$00,$00,$3C | |||
| C25E | DEFB $7E,$E7,$CF,$DF,$DF,$FF,$7E,$3C | |||
| C266 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
|
|
||||
| C26E | DEFB $00,$00,$07,$E0,$0E,$B8,$15,$54 | |||
| C276 | DEFB $2A,$AA,$35,$56,$6A,$AB,$55,$55 | |||
| C27E | DEFB $6A,$AB,$55,$55,$6A,$AB,$35,$56 | |||
| C286 | DEFB $2A,$AA,$15,$54,$0E,$B8,$07,$E0 | |||
|
|
||||
| C28E | DEFB $00,$00,$07,$E0,$1E,$B8,$35,$54 | |||
| C296 | DEFB $6A,$AA,$55,$57,$AA,$AB,$D5,$55 | |||
| C29E | DEFB $AA,$AB,$D5,$55,$6A,$AA,$55,$56 | |||
| C2A6 | DEFB $2A,$AC,$1D,$58,$07,$E0,$00,$00 | |||
|
|
||||
| C2AE | DEFB $03,$C0,$0E,$F0,$15,$58,$2A,$AC | |||
| C2B6 | DEFB $35,$54,$6A,$AE,$55,$56,$6A,$AA | |||
| C2BE | DEFB $55,$56,$6A,$AA,$55,$56,$2A,$AC | |||
| C2C6 | DEFB $35,$54,$1A,$A8,$0D,$70,$03,$C0 | |||
|
|
||||
| C2CE | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| C2D6 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| C2DE | DEFB $00,$00,$03,$E0,$0E,$B8,$15,$54 | |||
| C2E6 | DEFB $2A,$AA,$1D,$5C,$0E,$B8,$01,$C0 | |||
|
|
||||
| C2EE | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| C2F6 | DEFB $00,$00,$00,$00,$03,$E0,$0E,$B8 | |||
| C2FE | DEFB $15,$54,$2A,$AA,$35,$56,$6A,$AB | |||
| C306 | DEFB $55,$55,$3A,$AE,$0F,$78,$01,$C0 | |||
|
|
||||
| C30E | DEFB $00,$00,$00,$00,$07,$E0,$0E,$B8 | |||
| C316 | DEFB $15,$54,$2A,$AA,$35,$56,$6A,$AB | |||
| C31E | DEFB $55,$55,$6A,$AB,$55,$55,$6A,$AB | |||
| C326 | DEFB $35,$5E,$1A,$AC,$0F,$78,$03,$E0 | |||
|
|
||||
| C32E | DEFB $00,$00,$00,$08,$00,$1C,$02,$08 | |||
| C336 | DEFB $17,$00,$2A,$40,$10,$A4,$00,$4E | |||
| C33E | DEFB $08,$04,$1C,$10,$08,$38,$01,$10 | |||
| C346 | DEFB $02,$80,$01,$00,$00,$00,$00,$00 | |||
|
|
||||
| C34E | DEFB $00,$80,$11,$C0,$38,$80,$10,$40 | |||
| C356 | DEFB $00,$E8,$02,$54,$25,$08,$72,$00 | |||
| C35E | DEFB $20,$10,$08,$38,$1C,$10,$08,$00 | |||
| C366 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
|
|
||||
| C36E | DEFB $00,$00,$00,$00,$04,$20,$00,$00 | |||
| C376 | DEFB $00,$00,$11,$00,$00,$10,$00,$40 | |||
| C37E | DEFB $08,$00,$00,$08,$04,$80,$00,$10 | |||
| C386 | DEFB $00,$80,$00,$00,$00,$00,$00,$00 | |||
|
|
||||
| C38E | DEFB $01,$10,$40,$38,$E0,$7C,$44,$3A | |||
| C396 | DEFB $1A,$15,$11,$22,$4A,$70,$04,$20 | |||
|
|
||||
| C39E | DEFB $04,$20,$0E,$50,$44,$88,$A8,$50 | |||
| C3A6 | DEFB $5C,$20,$3E,$02,$1C,$07,$08,$82 | |||
|
|
||||
| C3AE | DEFB $00,$00,$00,$00,$00,$1E,$00,$00 | |||
| C3B6 | DEFB $05,$FF,$FC,$00,$1F,$FF,$FF,$E0 | |||
| C3BE | DEFB $3F,$FF,$FF,$F0,$3F,$FF,$FF,$FC | |||
| C3C6 | DEFB $7F,$FF,$FF,$FC,$7F,$FF,$FF,$F8 | |||
| C3CE | DEFB $3F,$FF,$FF,$FC,$01,$FF,$FF,$FC | |||
| C3D6 | DEFB $10,$0F,$E0,$F0,$15,$C0,$1D,$04 | |||
| C3DE | DEFB $18,$AD,$1C,$A8,$0D,$5C,$1B,$30 | |||
| C3E6 | DEFB $09,$38,$B5,$68,$05,$58,$2D,$58 | |||
| C3EE | DEFB $02,$BA,$36,$68,$07,$D8,$4E,$58 | |||
| C3F6 | DEFB $0D,$A8,$94,$30,$0E,$88,$A8,$50 | |||
| C3FE | DEFB $0D,$50,$D0,$B0,$0A,$51,$A4,$60 | |||
| C406 | DEFB $0D,$45,$44,$C0,$06,$41,$03,$E0 | |||
| C40E | DEFB $03,$61,$23,$90,$03,$20,$4E,$50 | |||
| C416 | DEFB $01,$24,$0C,$B0,$01,$21,$18,$60 | |||
| C41E | DEFB $00,$20,$19,$20,$00,$40,$70,$C0 | |||
| C426 | DEFB $00,$41,$E1,$40,$00,$41,$00,$00 | |||
|
|
||||
| C42E | DEFB $00,$1E,$00,$00,$05,$FF,$FC,$00 | |||
| C436 | DEFB $1F,$FF,$FF,$E0,$3F,$FF,$FF,$F0 | |||
| C43E | DEFB $7F,$FF,$FF,$FC,$7F,$FF,$FF,$FE | |||
| C446 | DEFB $FF,$FF,$FF,$FE,$FF,$FF,$FF,$FC | |||
| C44E | DEFB $7F,$FF,$FF,$FE,$7F,$FF,$FF,$FE | |||
| C456 | DEFB $3F,$FF,$FF,$FE,$3F,$FF,$FF,$FE | |||
| C45E | DEFB $3F,$FF,$FF,$FC,$1F,$FF,$FF,$FC | |||
| C466 | DEFB $1F,$FF,$FF,$FC,$0F,$FF,$FF,$FC | |||
| C46E | DEFB $07,$FF,$FF,$FC,$0F,$FF,$FF,$FC | |||
| C476 | DEFB $1F,$FF,$FF,$F8,$1F,$FF,$FF,$F8 | |||
| C47E | DEFB $1F,$FF,$FF,$F8,$1F,$FF,$FF,$F0 | |||
| C486 | DEFB $1F,$FF,$FF,$E0,$0F,$FF,$FF,$F0 | |||
| C48E | DEFB $07,$FF,$FF,$F8,$03,$FF,$FF,$F8 | |||
| C496 | DEFB $03,$FF,$FF,$F8,$03,$FF,$FF,$F0 | |||
| C49E | DEFB $01,$FF,$FF,$E0,$01,$FF,$FF,$E0 | |||
| C4A6 | DEFB $01,$FF,$FF,$E0,$01,$FF,$FF,$80 | |||
|
|
||||
| C4AE | DEFB $00,$00,$00,$00,$00,$7C,$00,$00 | |||
| C4B6 | DEFB $01,$FF,$9E,$00,$03,$E7,$FF,$00 | |||
| C4BE | DEFB $1F,$98,$23,$80,$3C,$7D,$51,$80 | |||
| C4C6 | DEFB $71,$7F,$AE,$F0,$6A,$B7,$D5,$18 | |||
| C4CE | DEFB $65,$6B,$FE,$A8,$6A,$B5,$FF,$5C | |||
| C4D6 | DEFB $35,$6A,$FF,$AC,$32,$F5,$7F,$58 | |||
| C4DE | DEFB $19,$78,$1C,$A8,$0C,$E3,$E6,$D8 | |||
| C4E6 | DEFB $0D,$CF,$F9,$B0,$1E,$9F,$FC,$E0 | |||
| C4EE | DEFB $1D,$BC,$7E,$C0,$1F,$BC,$FE,$C0 | |||
| C4F6 | DEFB $07,$78,$FF,$40,$01,$79,$FF,$60 | |||
| C4FE | DEFB $07,$79,$FF,$30,$0F,$7F,$FF,$58 | |||
| C506 | DEFB $35,$7F,$FF,$2C,$4A,$BF,$FE,$56 | |||
| C50E | DEFB $55,$BF,$FE,$A6,$62,$9F,$FD,$DA | |||
| C516 | DEFB $39,$4F,$FA,$A6,$3D,$F1,$C7,$4E | |||
| C51E | DEFB $1E,$1E,$3C,$BC,$0F,$E1,$C3,$F8 | |||
| C526 | DEFB $03,$FD,$FF,$C0,$00,$3F,$7C,$00 | |||
|
|
||||
| C52E | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| C536 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| C53E | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| C546 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| C54E | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| C556 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
|
|
||||
| C55E | DEFB $00,$00,$0F,$80,$2F,$40,$60,$C0 | |||
| C566 | DEFB $60,$C0,$00,$C0,$1E,$D0,$2E,$D8 | |||
| C56E | DEFB $37,$3C,$3B,$FC,$28,$02,$2B,$FE | |||
| C576 | DEFB $2A,$8A,$2A,$AA,$2A,$8A,$2A,$FA | |||
| C57E | DEFB $2A,$DA,$2A,$DA,$2A,$FA,$2A,$BA | |||
| C586 | DEFB $1A,$BA,$0A,$8A,$07,$FE,$00,$00 | |||
|
|
||||
| C58E | DEFB $0F,$80,$1F,$C0,$7F,$E0,$FF,$E0 | |||
| C596 | DEFB $F1,$E0,$FF,$F0,$3F,$F8,$7F,$FC | |||
| C59E | DEFB $7F,$FE,$7F,$FE,$7F,$FF,$7F,$FF | |||
| C5A6 | DEFB $7F,$FF,$7F,$FF,$7F,$FF,$7F,$FF | |||
| C5AE | DEFB $7F,$FF,$7F,$FF,$7F,$FF,$7F,$FF | |||
| C5B6 | DEFB $3F,$FF,$1F,$FF,$0F,$FF,$07,$FE | |||
|
|
||||
| C5BE | DEFB $00,$00,$00,$00,$00,$C0,$00,$E0 | |||
| C5C6 | DEFB $01,$50,$03,$B0,$03,$40,$01,$F0 | |||
| C5CE | DEFB $06,$D8,$0F,$78,$0D,$80,$07,$F0 | |||
| C5D6 | DEFB $0B,$98,$1C,$F8,$17,$00,$0D,$F0 | |||
| C5DE | DEFB $07,$98,$19,$F8,$3E,$F0,$37,$0C | |||
| C5E6 | DEFB $3D,$FC,$1F,$98,$07,$F0,$00,$00 | |||
|
|
||||
| C5EE | DEFB $00,$00,$00,$C0,$01,$E0,$01,$F0 | |||
| C5F6 | DEFB $03,$F8,$07,$F8,$03,$E0,$07,$F8 | |||
| C5FE | DEFB $0F,$FC,$1F,$FC,$1F,$F8,$0F,$F8 | |||
| C606 | DEFB $1F,$FC,$3F,$FC,$3F,$F8,$1F,$F8 | |||
| C60E | DEFB $1F,$FC,$3F,$FC,$7F,$F8,$7F,$FC | |||
| C616 | DEFB $7F,$FC,$3F,$FC,$1F,$F8,$0F,$F0 | |||
|
|
||||
| C61E | DEFB $00,$00,$03,$00,$07,$80,$06,$C0 | |||
| C626 | DEFB $0C,$60,$0D,$F0,$1F,$F8,$1E,$7C | |||
| C62E | DEFB $3D,$BC,$3B,$C0,$7A,$40,$77,$C0 | |||
| C636 | DEFB $67,$40,$07,$E0,$0F,$F0,$0E,$78 | |||
| C63E | DEFB $1D,$BC,$1D,$5C,$3B,$C0,$3B,$40 | |||
| C646 | DEFB $7B,$C0,$73,$C0,$03,$00,$00,$00 | |||
|
|
||||
| C64E | DEFB $07,$00,$07,$80,$0F,$C0,$0F,$E0 | |||
| C656 | DEFB $1F,$F0,$1F,$F8,$3F,$FC,$3F,$FE | |||
| C65E | DEFB $7F,$FE,$7F,$FC,$FF,$E0,$FF,$E0 | |||
| C666 | DEFB $FF,$E0,$6F,$F0,$1F,$F8,$1F,$FC | |||
| C66E | DEFB $3F,$FE,$3F,$FE,$7F,$FC,$7F,$E0 | |||
| C676 | DEFB $FF,$E0,$FF,$E0,$77,$C0,$03,$00 | |||
|
|
||||
| C67E | DEFB $00,$00,$01,$C0,$03,$E0,$05,$70 | |||
| C686 | DEFB $06,$F0,$0D,$78,$0A,$F8,$0D,$78 | |||
| C68E | DEFB $0E,$F8,$05,$70,$06,$B0,$03,$60 | |||
| C696 | DEFB $00,$A0,$00,$E0,$00,$60,$00,$E0 | |||
| C69E | DEFB $00,$C0,$01,$C0,$03,$C0,$07,$80 | |||
| C6A6 | DEFB $0D,$80,$0F,$00,$0F,$00,$06,$00 | |||
|
|
||||
| C6AE | DEFB $01,$C0,$03,$E0,$07,$F0,$0F,$F8 | |||
| C6B6 | DEFB $0F,$F8,$1F,$FC,$1F,$FC,$1F,$FC | |||
| C6BE | DEFB $1F,$FC,$0F,$F8,$0F,$F8,$07,$F0 | |||
| C6C6 | DEFB $03,$F0,$00,$F0,$00,$F0,$01,$F0 | |||
| C6CE | DEFB $03,$E0,$07,$E0,$0F,$C0,$1F,$C0 | |||
| C6D6 | DEFB $1F,$80,$1F,$80,$0F,$00,$06,$00 | |||
|
|
||||
| C6DE | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| C6E6 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| C6EE | DEFB $03,$E0,$0F,$F8,$1F,$FC,$3C,$7E | |||
| C6F6 | DEFB $3C,$FE,$78,$FF,$79,$FF,$79,$FF | |||
| C6FE | DEFB $7F,$FF,$7F,$FF,$3F,$FE,$3F,$FE | |||
| C706 | DEFB $1F,$FC,$0F,$F8,$03,$E0,$00,$00 | |||
|
|
||||
| C70E | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| C716 | DEFB $00,$00,$00,$00,$00,$00,$03,$E0 | |||
| C71E | DEFB $0F,$F8,$1F,$FC,$3F,$FE,$7F,$FF | |||
| C726 | DEFB $7F,$FF,$FF,$FF,$FF,$FF,$FF,$FF | |||
| C72E | DEFB $FF,$FF,$FF,$FF,$7F,$FF,$7F,$FF | |||
| C736 | DEFB $3F,$FE,$1F,$FC,$0F,$F8,$07,$F0 | |||
|
|
||||
| C73E | DEFB $00,$00,$00,$08,$00,$0C,$00,$1E | |||
| C746 | DEFB $00,$1F,$10,$1F,$18,$3C,$3C,$32 | |||
| C74E | DEFB $3E,$2E,$3F,$0E,$78,$0E,$64,$0E | |||
| C756 | DEFB $5C,$0E,$1C,$1E,$1C,$1C,$1E,$3C | |||
| C75E | DEFB $0F,$B8,$0F,$D8,$07,$D0,$01,$F0 | |||
| C766 | DEFB $00,$70,$00,$F0,$00,$F0,$00,$60 | |||
|
|
||||
| C76E | DEFB $00,$08,$00,$1C,$00,$1E,$00,$3F | |||
| C776 | DEFB $10,$3F,$38,$3F,$3C,$7F,$7E,$7F | |||
| C77E | DEFB $7F,$7F,$7F,$BF,$FF,$1F,$FE,$1F | |||
| C786 | DEFB $FE,$1F,$7E,$3F,$3E,$3E,$3F,$BE | |||
| C78E | DEFB $1F,$FC,$1F,$F8,$0F,$F8,$07,$F8 | |||
| C796 | DEFB $01,$F8,$01,$F8,$01,$F8,$00,$F0 | |||
|
|
||||
| C79E | DEFB $00,$00,$03,$80,$0F,$E0,$19,$30 | |||
| C7A6 | DEFB $10,$10,$10,$10,$10,$10,$11,$10 | |||
| C7AE | DEFB $13,$90,$1B,$B0,$0B,$A0,$03,$80 | |||
| C7B6 | DEFB $01,$00,$07,$C0,$0D,$60,$16,$D0 | |||
| C7BE | DEFB $3B,$B8,$6D,$6C,$56,$D4,$2D,$68 | |||
| C7C6 | DEFB $3B,$B8,$16,$D0,$07,$C0,$00,$00 | |||
|
|
||||
| C7CE | DEFB $03,$80,$0F,$E0,$1F,$F0,$3F,$F8 | |||
| C7D6 | DEFB $39,$38,$38,$38,$39,$38,$3B,$B8 | |||
| C7DE | DEFB $3B,$B8,$3F,$F8,$1F,$F0,$0F,$E0 | |||
| C7E6 | DEFB $03,$80,$0F,$E0,$1F,$F0,$3F,$F8 | |||
| C7EE | DEFB $7F,$FC,$FF,$FE,$FF,$FE,$7F,$FC | |||
| C7F6 | DEFB $7F,$FC,$3F,$F8,$3F,$F8,$0F,$E0 | |||
|
|
||||
| C7FE | DEFB $88,$50,$00,$00,$0C,$02,$B8,$00 | |||
| C806 | DEFB $00,$06,$10,$58,$00,$01,$13,$02 | |||
| C80E | DEFB $B0,$00,$80,$4A,$05,$60,$00,$09 | |||
| C816 | DEFB $35,$92,$C0,$00,$00,$46,$00,$60 | |||
| C81E | DEFB $00,$00,$29,$04,$A0,$00,$24,$8A | |||
| C826 | DEFB $00,$70,$00,$00,$45,$01,$38,$00 | |||
| C82E | DEFB $01,$92,$04,$5C,$00,$10,$49,$01 | |||
| C836 | DEFB $2C,$00,$01,$42,$01,$56,$00,$00 | |||
| C83E | DEFB $B9,$00,$8A,$00,$11,$2A,$00,$26 | |||
| C846 | DEFB $00,$02,$90,$20,$0A,$00,$04,$95 | |||
| C84E | DEFB $00,$27,$00,$02,$48,$00,$89,$00 | |||
| C856 | DEFB $45,$55,$01,$07,$80,$00,$A8,$00 | |||
| C85E | DEFB $0B,$80,$02,$0B,$00,$25,$00,$01 | |||
| C866 | DEFB $92,$00,$09,$00,$02,$92,$00,$07 | |||
| C86E | DEFB $00,$01,$0E,$00,$0A,$00,$20,$54 | |||
|
|
||||
| C876 | DEFB $00,$36,$00,$00,$4C,$81,$0B,$80 | |||
| C87E | DEFB $01,$14,$00,$04,$C0,$12,$8C,$00 | |||
| C886 | DEFB $33,$70,$00,$16,$80,$04,$B0,$00 | |||
| C88E | DEFB $4A,$00,$12,$5C,$00,$06,$02,$05 | |||
| C896 | DEFB $34,$22,$2A,$00,$20,$CE,$00,$06 | |||
| C89E | DEFB $20,$06,$2A,$01,$2E,$00,$11,$4F | |||
| C8A6 | DEFB $00,$4C,$00,$08,$33,$00,$2C,$00 | |||
| C8AE | DEFB $01,$0D,$00,$48,$10,$10,$93,$82 | |||
| C8B6 | DEFB $18,$80,$02,$24,$80,$08,$10,$04 | |||
| C8BE | DEFB $8A,$81,$5C,$00,$01,$15,$80,$14 | |||
| C8C6 | DEFB $00,$0A,$2B,$00,$4C,$00,$04,$56 | |||
| C8CE | DEFB $00,$17,$80,$8A,$3E,$08,$53,$00 | |||
| C8D6 | DEFB $01,$48,$01,$29,$00,$00,$28,$00 | |||
| C8DE | DEFB $02,$00,$05,$58,$40,$15,$00,$00 | |||
| C8E6 | DEFB $30,$11,$24,$00,$00,$50,$00,$05 | |||
| C8EE | DEFB $10,$08,$B0,$04,$88,$00,$00,$60 | |||
| C8F6 | DEFB $82,$23,$00,$00,$A0,$00,$88,$00 | |||
| C8FE | DEFB $04,$60,$09,$22,$00,$20,$C0,$20 | |||
| C906 | DEFB $10,$00,$00,$40,$02,$A5,$00,$04 | |||
| C90E | DEFB $E0,$20,$11,$00,$00,$60,$02,$45 | |||
| C916 | DEFB $30,$04,$A0,$00,$51,$30,$00,$60 | |||
| C91E | DEFB $09,$15,$18,$01,$30,$22,$44,$08 | |||
| C926 | DEFB $00,$50,$09,$11,$18,$04,$38,$02 | |||
| C92E | DEFB $48,$0C,$21,$18,$00,$95,$14,$00 | |||
| C936 | DEFB $2C,$04,$08,$0C,$01,$14,$01,$45 | |||
| C93E | DEFB $0B,$C4,$0C,$00,$92,$00,$C0,$56 | |||
| C946 | DEFB $02,$44,$05,$79,$0B,$01,$10,$00 | |||
| C94E | DEFB $A8,$05,$82,$42,$09,$5C,$52,$80 | |||
| C956 | DEFB $84,$00,$AC,$01,$A0,$0A,$02,$14 | |||
| C95E | DEFB $06,$80,$95,$00,$AE,$21,$C2,$0A | |||
| C966 | DEFB $00,$16,$02,$40,$10,$00,$AA,$01 | |||
| C96E | DEFB $40,$85,$02,$8E,$14,$C0,$08,$00 | |||
| C976 | DEFB $92,$01,$60,$02,$00,$46,$12,$B0 | |||
| C97E | DEFB $8D,$00,$13,$80,$50,$12,$00,$82 | |||
| C986 | DEFB $80,$B0,$00,$00,$09,$C2,$58,$02 | |||
| C98E | DEFB $00,$21,$48,$28,$24,$04,$14,$C2 | |||
| C996 | DEFB $9C,$00,$00,$23,$41,$24,$02,$00 | |||
| C99E | DEFB $88,$C2,$9C,$10,$00,$01,$91,$28 | |||
| C9A6 | DEFB $00,$00,$12,$80,$99,$08,$00,$89 | |||
| C9AE | DEFB $82,$2C,$00,$00,$11,$10,$94,$02 | |||
| C9B6 | DEFB $00,$07,$02,$24,$14,$00,$04,$00 | |||
| C9BE | DEFB $F4,$01,$00,$5C,$00,$BC,$0A,$00 | |||
| C9C6 | DEFB $08,$17,$D7,$14,$00,$9C,$06,$2B | |||
| C9CE | DEFB $E7,$00,$64,$0C,$85,$7D,$00,$97 | |||
| C9D6 | DEFB $88,$00,$AA,$00,$12,$E8,$08,$55 | |||
| C9DE | DEFB $04,$25,$38,$00,$2A,$00,$12,$8C | |||
| C9E6 | DEFB $00,$85,$00,$A9,$2B,$00,$28,$00 | |||
| C9EE | DEFB $05,$55,$81,$03,$00,$10,$27,$80 | |||
| C9F6 | DEFB $27,$00,$84,$8A,$F0,$1C,$00,$24 | |||
| C9FE | DEFB $55,$40,$70,$04,$02,$2A,$B3,$80 | |||
| CA06 | DEFB $00,$10,$89,$58,$00,$00,$4A,$52 | |||
| CA0E | DEFB $98,$00,$00,$05,$35,$78,$00,$00 | |||
| CA16 | DEFB $11,$52,$F0,$00,$00,$04,$AF,$80 | |||
| CA1E | DEFB $00,$00,$41,$78,$00,$00,$00,$09 | |||
| CA26 | DEFB $C0,$00,$00,$00,$03,$00,$00,$00 | |||
| CA2E | DEFB $02,$06,$00,$00,$00,$00,$1C,$00 | |||
| CA36 | DEFB $00,$00,$0F,$70,$00,$00,$00,$3B | |||
| CA3E | DEFB $C0,$00,$00,$00,$E0,$00,$00,$00 | |||
| CA46 | DEFB $00,$80,$00,$00,$00,$00,$00,$00 | |||
| CA4E | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
|
|
||||
| CA56 | DEFB $00,$00,$04,$00,$01,$4C,$01,$04 | |||
| CA5E | DEFB $16,$02,$04,$CA,$80,$00,$83,$00 | |||
| CA66 | DEFB $21,$4C,$80,$00,$15,$00,$14,$E7 | |||
| CA6E | DEFB $C0,$00,$23,$00,$03,$21,$C0,$04 | |||
| CA76 | DEFB $11,$C0,$28,$A3,$60,$00,$82,$E2 | |||
| CA7E | DEFB $01,$62,$A0,$00,$11,$70,$0C,$C3 | |||
| CA86 | DEFB $60,$00,$84,$B1,$23,$C1,$C0,$04 | |||
| CA8E | DEFB $25,$60,$0E,$C1,$80,$01,$08,$E0 | |||
| CA96 | DEFB $1D,$40,$80,$00,$85,$82,$76,$C0 | |||
| CA9E | DEFB $80,$24,$4A,$80,$03,$80,$C0,$01 | |||
| CAA6 | DEFB $11,$80,$0A,$80,$C0,$00,$8A,$C0 | |||
| CAAE | DEFB $25,$C0,$40,$20,$51,$41,$0A,$C0 | |||
| CAB6 | DEFB $C0,$04,$0A,$C0,$25,$40,$C0,$01 | |||
| CABE | DEFB $15,$40,$80,$C0,$82,$02,$43,$C0 | |||
| CAC6 | DEFB $09,$60,$80,$29,$15,$01,$00,$A0 | |||
| CACE | DEFB $00,$00,$4B,$02,$25,$60,$00,$02 | |||
| CAD6 | DEFB $15,$00,$11,$20,$00,$08,$47,$10 | |||
| CADE | DEFB $80,$60,$40,$01,$2A,$00,$0A,$A0 | |||
| CAE6 | DEFB $00,$02,$8E,$00,$80,$50,$00,$08 | |||
| CAEE | DEFB $56,$00,$02,$B0,$01,$02,$14,$00 | |||
| CAF6 | DEFB $20,$50,$00,$00,$AC,$10,$09,$30 | |||
| CAFE | DEFB $00,$04,$14,$00,$24,$D0,$00,$02 | |||
| CB06 | DEFB $AC,$02,$01,$30,$00,$08,$98,$00 | |||
| CB0E | DEFB $88,$70,$00,$01,$28,$00,$25,$20 | |||
| CB16 | DEFB $00,$20,$18,$02,$50,$A0,$00,$0A | |||
| CB1E | DEFB $B8,$00,$25,$60,$00,$00,$10,$80 | |||
| CB26 | DEFB $80,$B0,$02,$01,$30,$00,$01,$30 | |||
| CB2E | DEFB $00,$00,$9C,$02,$0A,$D0,$00,$0A | |||
| CB36 | DEFB $2C,$20,$02,$B0,$00,$00,$96,$00 | |||
| CB3E | DEFB $89,$50,$00,$21,$2A,$00,$02,$F0 | |||
| CB46 | DEFB $00,$00,$17,$02,$29,$C0,$00,$04 | |||
| CB4E | DEFB $8B,$00,$02,$80,$00,$01,$55,$00 | |||
| CB56 | DEFB $05,$80,$80,$08,$2B,$82,$0B,$80 | |||
| CB5E | DEFB $81,$00,$85,$80,$06,$00,$80,$04 | |||
| CB66 | DEFB $2A,$80,$2A,$00,$C0,$02,$95,$90 | |||
| CB6E | DEFB $17,$80,$40,$00,$2B,$00,$09,$F0 | |||
| CB76 | DEFB $C1,$09,$05,$00,$26,$B8,$40,$02 | |||
| CB7E | DEFB $AB,$02,$09,$5C,$C0,$00,$17,$00 | |||
| CB86 | DEFB $16,$AE,$80,$20,$AA,$00,$09,$D2 | |||
| CB8E | DEFB $80,$08,$56,$00,$42,$57,$80,$02 | |||
| CB96 | DEFB $AA,$00,$02,$AB,$00,$20,$16,$01 | |||
| CB9E | DEFB $08,$55,$00,$00,$AA,$00,$02,$AB | |||
| CBA6 | DEFB $01,$02,$56,$10,$49,$45,$C0,$04 | |||
| CBAE | DEFB $BC,$00,$02,$2A,$C0,$00,$50,$00 | |||
| CBB6 | DEFB $15,$43,$40,$20,$B0,$04,$81,$1F | |||
| CBBE | DEFB $E0,$01,$20,$00,$14,$EA,$61,$04 | |||
| CBC6 | DEFB $98,$12,$41,$25,$B0,$00,$3C,$00 | |||
| CBCE | DEFB $93,$00,$58,$00,$97,$82,$04,$C1 | |||
| CBD6 | DEFB $2C,$01,$2E,$F0,$3A,$70,$D7,$80 | |||
| CBDE | DEFB $11,$DC,$75,$58,$2A,$84,$2A,$97 | |||
| CBE6 | DEFB $EA,$AC,$55,$C0,$A5,$A2,$51,$54 | |||
| CBEE | DEFB $AA,$C0,$12,$85,$04,$AC,$51,$70 | |||
| CBF6 | DEFB $05,$C0,$24,$96,$4A,$B1,$2A,$C0 | |||
| CBFE | DEFB $09,$4A,$15,$50,$05,$40,$00,$16 | |||
| CC06 | DEFB $52,$B0,$A2,$E1,$02,$2B,$05,$50 | |||
| CC0E | DEFB $05,$60,$00,$01,$4A,$B4,$14,$B0 | |||
| CC16 | DEFB $01,$23,$05,$58,$22,$70,$40,$05 | |||
| CC1E | DEFB $24,$A8,$05,$20,$04,$87,$51,$5C | |||
| CC26 | DEFB $92,$E0,$00,$0C,$A9,$A4,$21,$40 | |||
| CC2E | DEFB $00,$48,$24,$4C,$02,$C1,$04,$30 | |||
| CC36 | DEFB $45,$0C,$09,$F0,$03,$E0,$50,$48 | |||
| CC3E | DEFB $22,$9F,$06,$00,$22,$18,$09,$81 | |||
| CC46 | DEFB $D8,$00,$08,$BE,$00,$80,$00,$00 | |||
| CC4E | DEFB $A2,$F5,$4A,$80,$00,$00,$0A,$DA | |||
| CC56 | DEFB $F0,$80,$00,$00,$28,$85,$75,$00 | |||
| CC5E | DEFB $00,$00,$12,$AA,$B9,$00,$00,$00 | |||
| CC66 | DEFB $29,$80,$5D,$00,$00,$00,$01,$04 | |||
| CC6E | DEFB $AF,$00,$00,$00,$53,$09,$1B,$00 | |||
| CC76 | DEFB $00,$00,$0A,$40,$0E,$00,$00,$00 | |||
| CC7E | DEFB $96,$00,$96,$00,$00,$00,$BA,$00 | |||
| CC86 | DEFB $0C,$00,$00,$00,$E1,$80,$70,$00 | |||
| CC8E | DEFB $00,$00,$40,$7F,$00,$00,$00,$00 | |||
|
|
||||
| CC96 | DEFB $80,$00,$0A,$40,$00,$00,$00,$0D | |||
| CC9E | DEFB $28,$00,$A0,$00,$0A,$80,$40,$00 | |||
| CCA6 | DEFB $00,$1D,$48,$00,$40,$00,$14,$80 | |||
| CCAE | DEFB $00,$28,$00,$11,$22,$00,$41,$00 | |||
| CCB6 | DEFB $1E,$80,$00,$A4,$00,$09,$48,$20 | |||
| CCBE | DEFB $50,$10,$0A,$21,$00,$AA,$80,$0C | |||
| CCC6 | DEFB $80,$00,$92,$00,$05,$28,$00,$E9 | |||
| CCCE | DEFB $10,$04,$82,$20,$24,$40,$03,$48 | |||
| CCD6 | DEFB $00,$32,$00,$01,$20,$00,$24,$84 | |||
| CCDE | DEFB $01,$D2,$40,$3A,$90,$00,$A0,$00 | |||
| CCE6 | DEFB $0A,$00,$01,$AA,$00,$0D,$41,$01 | |||
| CCEE | DEFB $C8,$00,$05,$08,$00,$A4,$80,$02 | |||
| CCF6 | DEFB $28,$00,$C8,$00,$03,$95,$00,$6A | |||
| CCFE | DEFB $10,$01,$5C,$00,$44,$00,$01,$C0 | |||
| CD06 | DEFB $80,$50,$80,$00,$94,$00,$C4,$00 | |||
| CD0E | DEFB $00,$E9,$41,$A9,$10,$80,$74,$83 | |||
| CD16 | DEFB $54,$00,$00,$56,$A3,$A8,$40,$20 | |||
| CD1E | DEFB $E1,$51,$D5,$08,$00,$D2,$A8,$AC | |||
| CD26 | DEFB $00,$00,$AA,$50,$F2,$40,$01,$D2 | |||
| CD2E | DEFB $68,$15,$08,$11,$A5,$24,$1A,$00 | |||
| CD36 | DEFB $01,$54,$98,$0C,$80,$01,$AA,$B4 | |||
| CD3E | DEFB $0A,$20,$01,$53,$88,$0D,$00,$01 | |||
| CD46 | DEFB $A5,$24,$0A,$82,$01,$52,$C8,$89 | |||
| CD4E | DEFB $00,$11,$A4,$B2,$06,$A0,$01,$D3 | |||
| CD56 | DEFB $68,$03,$80,$10,$E8,$54,$03,$40 | |||
| CD5E | DEFB $00,$32,$20,$11,$80,$04,$29,$C2 | |||
| CD66 | DEFB $81,$48,$00,$32,$A8,$01,$80,$00 | |||
| CD6E | DEFB $14,$C4,$01,$40,$00,$19,$20,$01 | |||
| CD76 | DEFB $88,$04,$2C,$C8,$83,$80,$00,$06 | |||
| CD7E | DEFB $A0,$03,$22,$00,$4A,$D4,$02,$80 | |||
| CD86 | DEFB $01,$13,$A0,$03,$A0,$00,$28,$D1 | |||
| CD8E | DEFB $01,$42,$00,$14,$68,$01,$E8,$01 | |||
| CD96 | DEFB $28,$70,$02,$A0,$00,$00,$2A,$03 | |||
| CD9E | DEFB $70,$00,$00,$30,$06,$B1,$00,$04 | |||
| CDA6 | DEFB $18,$85,$58,$00,$00,$12,$06,$A9 | |||
| CDAE | DEFB $80,$00,$18,$05,$56,$80,$00,$18 | |||
| CDB6 | DEFB $0A,$AF,$E3,$C0,$12,$0D,$58,$73 | |||
| CDBE | DEFB $E0,$30,$0B,$F0,$BE,$BF,$F0,$0E | |||
| CDC6 | DEFB $00,$2A,$5A,$BC,$7C,$00,$25,$87 | |||
| CDCE | DEFB $57,$C0,$00,$11,$46,$41,$80,$00 | |||
| CDD6 | DEFB $06,$97,$0F,$00,$00,$09,$2B,$D8 | |||
| CDDE | DEFB $00,$00,$00,$94,$F0,$00,$00,$02 | |||
| CDE6 | DEFB $A9,$00,$00,$00,$00,$96,$00,$00 | |||
| CDEE | DEFB $00,$02,$8C,$00,$00,$00,$00,$38 | |||
| CDF6 | DEFB $00,$00,$00,$00,$20,$00,$00,$00 | |||
| CDFE | DEFB $07,$E0,$00,$00,$00,$FC,$00,$00 | |||
| CE06 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| CE0E | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| CE16 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| CE1E | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
|
|
||||
| CE26 | DEFB $00,$72,$56,$52,$52,$52,$52,$77 | |||
| CE2E | DEFB $00,$77,$11,$11,$73,$41,$41,$77 | |||
| CE36 | DEFB $00,$47,$44,$44,$57,$71,$11,$17 | |||
| CE3E | DEFB $00,$47,$41,$41,$71,$51,$51,$71 | |||
| CE46 | DEFB $00,$77,$55,$55,$77,$51,$51,$71 | |||
| CE4E | DEFB $00,$76,$55,$55,$76,$55,$55,$56 | |||
| CE56 | DEFB $00,$76,$45,$45,$45,$45,$45,$76 | |||
| CE5E | DEFB $00,$77,$44,$44,$66,$44,$44,$74 | |||
| CE66 | DEFB $00,$75,$45,$45,$57,$55,$55,$75 | |||
| CE6E | DEFB $00,$77,$21,$21,$21,$25,$25,$77 | |||
| CE76 | DEFB $00,$54,$54,$54,$64,$54,$54,$57 | |||
| CE7E | DEFB $00,$55,$75,$77,$77,$57,$55,$55 | |||
| CE86 | DEFB $00,$77,$55,$55,$57,$54,$54,$74 | |||
| CE8E | DEFB $00,$77,$55,$55,$56,$55,$75,$25 | |||
| CE96 | DEFB $00,$77,$42,$42,$72,$12,$12,$72 | |||
| CE9E | DEFB $00,$55,$55,$55,$55,$55,$55,$72 | |||
| CEA6 | DEFB $00,$55,$55,$55,$52,$75,$75,$55 | |||
| CEAE | DEFB $00,$57,$51,$51,$72,$24,$24,$27 | |||
| CEB6 | DEFB $00,$00,$00,$00,$07,$00,$00,$00 | |||
| CEBE | DEFB $00,$20,$20,$20,$20,$20,$00,$22 | |||
|
|
||||
| CEC6 | DEFB $00,$3F,$00,$00,$7F,$80,$00,$FF | |||
| CECE | DEFB $C0,$01,$FF,$E0,$01,$FF,$F0,$03 | |||
| CED6 | DEFB $FF,$F0,$03,$FF,$F0,$03,$FF,$F0 | |||
| CEDE | DEFB $01,$FF,$F0,$03,$FF,$F0,$07,$FF | |||
| CEE6 | DEFB $E0,$0F,$FF,$C0,$1F,$FF,$C0,$1F | |||
| CEEE | DEFB $FF,$E0,$1F,$FF,$F0,$3F,$FF,$F8 | |||
| CEF6 | DEFB $3F,$FF,$FC,$3F,$FF,$FC,$7F,$FF | |||
| CEFE | DEFB $FC,$7F,$FF,$FC,$7F,$FF,$78,$7F | |||
| CF06 | DEFB $FF,$B0,$7F,$FF,$C6,$3F,$FF,$DF | |||
| CF0E | DEFB $1F,$FF,$FF,$07,$FF,$FF,$0F,$FF | |||
| CF16 | DEFB $FF,$0F,$FF,$FF,$07,$FF,$FE,$03 | |||
| CF1E | DEFB $FF,$FC,$03,$FF,$10,$01,$FF,$00 | |||
|
|
||||
| CF26 | DEFB $00,$00,$00,$00,$00,$07,$00,$00 | |||
| CF2E | DEFB $00,$0F,$80,$00,$01,$8F,$C0,$00 | |||
| CF36 | DEFB $03,$CF,$E0,$00,$07,$EF,$F0,$00 | |||
| CF3E | DEFB $1F,$FF,$FF,$C0,$7F,$FF,$FF,$E0 | |||
| CF46 | DEFB $FF,$FF,$FF,$F0,$FF,$FF,$FF,$F8 | |||
| CF4E | DEFB $FF,$1F,$FF,$FC,$FF,$3F,$FF,$FC | |||
| CF56 | DEFB $7E,$3F,$FF,$FC,$3E,$1F,$FF,$FC | |||
| CF5E | DEFB $1C,$3F,$FF,$FC,$08,$7F,$FF,$F8 | |||
| CF66 | DEFB $00,$7F,$FF,$FC,$00,$FC,$DF,$FE | |||
| CF6E | DEFB $00,$F8,$0F,$FF,$00,$F0,$0F,$FF | |||
| CF76 | DEFB $00,$FE,$06,$DA,$00,$7F,$00,$00 | |||
| CF7E | DEFB $00,$7F,$00,$00,$00,$3A,$00,$00 | |||
|
|
||||
| CF86 | DEFB $00,$03,$80,$00,$00,$03,$C0,$00 | |||
| CF8E | DEFB $00,$07,$C0,$00,$00,$07,$E0,$00 | |||
| CF96 | DEFB $00,$0F,$E0,$00,$00,$CF,$F0,$00 | |||
| CF9E | DEFB $01,$EF,$FF,$C0,$07,$FF,$FF,$E0 | |||
| CFA6 | DEFB $0F,$FF,$FF,$F0,$3F,$FF,$FF,$F8 | |||
| CFAE | DEFB $7F,$FF,$FF,$FC,$FF,$BF,$FF,$FC | |||
| CFB6 | DEFB $FF,$BF,$FF,$FC,$FF,$3F,$FF,$FC | |||
| CFBE | DEFB $FE,$7F,$FF,$FC,$7E,$FF,$FF,$F8 | |||
| CFC6 | DEFB $3D,$FF,$FF,$FE,$1F,$F7,$FF,$FE | |||
| CFCE | DEFB $0B,$E0,$EF,$FE,$03,$F8,$0F,$FE | |||
| CFD6 | DEFB $01,$FC,$06,$DF,$01,$FC,$00,$3F | |||
| CFDE | DEFB $00,$E8,$00,$3F,$00,$00,$00,$1A | |||
|
|
||||
| CFE6 | DEFB $01,$80,$00,$00,$03,$C0,$00,$00 | |||
| CFEE | DEFB $07,$E1,$80,$00,$7F,$E3,$C0,$00 | |||
| CFF6 | DEFB $FF,$F7,$E0,$00,$FF,$F7,$F0,$00 | |||
| CFFE | DEFB $FF,$FF,$FF,$C0,$7F,$FF,$FF,$E0 | |||
| D006 | DEFB $3F,$7F,$FF,$F0,$1E,$7F,$FF,$F8 | |||
| D00E | DEFB $0E,$3F,$FF,$FC,$04,$3F,$FF,$FC | |||
| D016 | DEFB $00,$3F,$FF,$FC,$00,$3F,$FF,$FC | |||
| D01E | DEFB $00,$7F,$FF,$FC,$00,$7F,$FF,$FC | |||
| D026 | DEFB $00,$7F,$FF,$FE,$00,$3F,$FF,$FE | |||
| D02E | DEFB $00,$3F,$EF,$EC,$00,$1F,$8F,$E0 | |||
| D036 | DEFB $00,$0F,$C6,$C0,$00,$0F,$E0,$00 | |||
| D03E | DEFB $00,$07,$E0,$00,$00,$03,$40,$00 | |||
|
|
||||
| D046 | DEFB $01,$81,$80,$00,$03,$C3,$C0,$00 | |||
| D04E | DEFB $07,$E7,$C0,$00,$7F,$EF,$E0,$00 | |||
| D056 | DEFB $FF,$FF,$E0,$00,$FF,$FF,$F0,$00 | |||
| D05E | DEFB $FF,$FF,$FC,$00,$7F,$FF,$FE,$00 | |||
| D066 | DEFB $3F,$7F,$FF,$C0,$1F,$7F,$FF,$E0 | |||
| D06E | DEFB $0E,$1F,$FF,$F0,$04,$3F,$FF,$F8 | |||
| D076 | DEFB $00,$3F,$FF,$FC,$00,$1F,$FF,$FC | |||
| D07E | DEFB $00,$07,$FF,$FC,$00,$0F,$FF,$FC | |||
| D086 | DEFB $00,$1F,$FF,$FC,$00,$1F,$FF,$F8 | |||
| D08E | DEFB $00,$1F,$BF,$FE,$00,$0F,$1F,$FE | |||
| D096 | DEFB $00,$0F,$EF,$FC,$00,$07,$FF,$FF | |||
| D09E | DEFB $00,$03,$F6,$FF,$00,$00,$D0,$16 | |||
|
|
||||
| D0A6 | DEFB $00,$07,$C0,$00,$00,$1F,$F0,$00 | |||
| D0AE | DEFB $34,$3F,$F8,$50,$7E,$7F,$F8,$F8 | |||
| D0B6 | DEFB $7E,$7F,$F9,$F8,$3E,$FF,$FD,$F0 | |||
| D0BE | DEFB $1F,$FF,$FF,$E0,$0F,$FF,$FF,$C0 | |||
| D0C6 | DEFB $0F,$FF,$FF,$FC,$07,$FF,$FF,$FE | |||
| D0CE | DEFB $03,$FF,$FF,$FF,$03,$FF,$FF,$FF | |||
| D0D6 | DEFB $01,$FF,$FF,$FF,$01,$FF,$FF,$FF | |||
| D0DE | DEFB $00,$7F,$FF,$FF,$00,$FF,$FF,$FF | |||
| D0E6 | DEFB $00,$7F,$FF,$FE,$00,$7F,$FF,$FE | |||
| D0EE | DEFB $00,$7F,$FF,$FE,$00,$7F,$FF,$FC | |||
| D0F6 | DEFB $00,$3F,$FE,$FC,$00,$3F,$FE,$18 | |||
| D0FE | DEFB $00,$1F,$EC,$00,$00,$07,$C0,$00 | |||
|
|
||||
| D106 | DEFB $03,$80,$00,$78,$0F,$E0,$00,$FC | |||
| D10E | DEFB $1F,$F0,$01,$FE,$3F,$F8,$01,$FE | |||
| D116 | DEFB $7F,$FF,$81,$FE,$7F,$FF,$E1,$FE | |||
| D11E | DEFB $7F,$FF,$F1,$FE,$7F,$FF,$FF,$FC | |||
| D126 | DEFB $7F,$FF,$FF,$FC,$3F,$FF,$FF,$FC | |||
| D12E | DEFB $1F,$FF,$FF,$FC,$3F,$FF,$FF,$FC | |||
| D136 | DEFB $7F,$FF,$FF,$F8,$7F,$FF,$FE,$30 | |||
| D13E | DEFB $FF,$FF,$FC,$00,$F9,$FF,$FC,$00 | |||
| D146 | DEFB $FE,$FF,$FC,$00,$7E,$0F,$FC,$00 | |||
| D14E | DEFB $3F,$8F,$F8,$00,$3F,$87,$F8,$00 | |||
| D156 | DEFB $1F,$83,$F8,$00,$0D,$01,$F8,$00 | |||
| D15E | DEFB $00,$00,$F0,$00,$00,$00,$60,$00 | |||
|
|
||||
| D166 | DEFB $00,$00,$00,$00,$00,$07,$00,$00 | |||
| D16E | DEFB $00,$0F,$80,$00,$01,$8F,$C0,$00 | |||
| D176 | DEFB $03,$CF,$E0,$00,$07,$EF,$F0,$00 | |||
| D17E | DEFB $1F,$FF,$FC,$F0,$7F,$FF,$FF,$FC | |||
| D186 | DEFB $FF,$FF,$FF,$FE,$FF,$7F,$FF,$FE | |||
| D18E | DEFB $FF,$3F,$FF,$FF,$FE,$3F,$FF,$FF | |||
| D196 | DEFB $7E,$3F,$FF,$FF,$3E,$1F,$FF,$FF | |||
| D19E | DEFB $1C,$3F,$FF,$FF,$00,$7F,$FF,$FE | |||
| D1A6 | DEFB $00,$7F,$FF,$FF,$00,$FC,$FB,$FF | |||
| D1AE | DEFB $00,$FC,$01,$FF,$00,$F8,$00,$FF | |||
| D1B6 | DEFB $00,$FE,$00,$46,$00,$7F,$00,$00 | |||
| D1BE | DEFB $00,$7F,$00,$00,$00,$3A,$00,$00 | |||
|
|
||||
| D1C6 | DEFB $60,$01,$80,$FC,$03,$F8,$FE,$C3 | |||
| D1CE | DEFB $FC,$FF,$FF,$FE,$FF,$FF,$FF,$7F | |||
| D1D6 | DEFB $FF,$FF,$7F,$FF,$FF,$3E,$FF,$FE | |||
| D1DE | DEFB $0F,$7F,$FC,$1E,$3F,$F8,$3D,$CF | |||
| D1E6 | DEFB $FC,$3F,$EF,$FE,$3F,$F7,$FE,$1F | |||
| D1EE | DEFB $FB,$FE,$4F,$F9,$FC,$EF,$FC,$F8 | |||
| D1F6 | DEFB $FF,$FF,$FC,$FF,$FF,$FE,$7F,$FF | |||
| D1FE | DEFB $FF,$7F,$FF,$FF,$3F,$FF,$FF,$1F | |||
| D206 | DEFB $3F,$7E,$07,$8E,$1C,$03,$00,$00 | |||
|
|
||||
| D20E | DEFB $30,$00,$C0,$7E,$01,$F8,$7F,$61 | |||
| D216 | DEFB $FC,$3F,$FD,$FE,$3F,$FF,$FF,$3F | |||
| D21E | DEFB $FF,$FF,$3F,$FF,$FF,$1F,$FF,$FE | |||
| D226 | DEFB $1F,$3F,$FC,$3F,$CF,$FC,$3F,$EF | |||
| D22E | DEFB $FC,$3F,$F7,$FE,$1F,$FB,$FE,$0F | |||
| D236 | DEFB $FB,$FE,$67,$F1,$F8,$FF,$EC,$FC | |||
| D23E | DEFB $FF,$FF,$FC,$FF,$FF,$FC,$FF,$FF | |||
| D246 | DEFB $FE,$7F,$FF,$FF,$3F,$FF,$FF,$1F | |||
| D24E | DEFB $3E,$FF,$06,$0F,$7E,$00,$06,$18 | |||
|
|
||||
| D256 | DEFB $00,$01,$E0,$00,$0F,$F8,$00,$1F | |||
| D25E | DEFB $FC,$00,$3F,$FE,$00,$7F,$FE,$00 | |||
| D266 | DEFB $FF,$FF,$00,$FF,$FF,$01,$FF,$FF | |||
| D26E | DEFB $01,$FF,$FF,$01,$FF,$FF,$0F,$FF | |||
| D276 | DEFB $FE,$1F,$FF,$FE,$39,$FF,$FC,$7F | |||
| D27E | DEFB $FF,$FC,$7E,$FF,$FC,$FD,$FF,$F8 | |||
| D286 | DEFB $DF,$FF,$F8,$DF,$FD,$F0,$DB,$EE | |||
| D28E | DEFB $60,$7F,$DD,$C0,$7F,$FF,$80,$EF | |||
| D296 | DEFB $E7,$80,$FF,$FF,$00,$EF,$FE,$00 | |||
| D29E | DEFB $EF,$FC,$00,$EF,$F8,$00,$7F,$E0 | |||
| D2A6 | DEFB $00,$3F,$E0,$00,$73,$70,$00,$7F | |||
| D2AE | DEFB $F8,$00,$2E,$F8,$00,$06,$30,$00 | |||
|
|
||||
| D2B6 | DEFB $00,$00,$00,$00,$1F,$00,$01,$FF | |||
| D2BE | DEFB $C0,$03,$FF,$F0,$07,$FF,$F8,$47 | |||
| D2C6 | DEFB $FF,$FC,$E7,$FF,$FC,$F3,$FF,$FE | |||
| D2CE | DEFB $FF,$FF,$FE,$7F,$FF,$FE,$3F,$FF | |||
| D2D6 | DEFB $FF,$1F,$FF,$FF,$07,$FF,$FF,$07 | |||
| D2DE | DEFB $7F,$FF,$06,$FF,$FF,$0F,$FF,$FF | |||
| D2E6 | DEFB $1D,$FF,$7E,$7D,$FE,$7C,$FF,$FC | |||
| D2EE | DEFB $E0,$FB,$F3,$C0,$71,$E7,$80,$EB | |||
| D2F6 | DEFB $EE,$00,$FF,$DC,$00,$7F,$B8,$00 | |||
| D2FE | DEFB $3F,$F0,$00,$0E,$E0,$00,$04,$00 | |||
| D306 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| D30E | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
|
|
||||
| D316 | DEFB $07,$F0,$00,$1F,$FE,$00,$3F,$FF | |||
| D31E | DEFB $C0,$3F,$FF,$E0,$7F,$FF,$F0,$7F | |||
| D326 | DEFB $FF,$F8,$3F,$FF,$F8,$7F,$FF,$FC | |||
| D32E | DEFB $7F,$FF,$FC,$DF,$FF,$FE,$FF,$FF | |||
| D336 | DEFB $FE,$EF,$FF,$FE,$7F,$FF,$FE,$DF | |||
| D33E | DEFB $FF,$FE,$E5,$FF,$FF,$CF,$FF,$FF | |||
| D346 | DEFB $7F,$FF,$FF,$79,$FF,$FF,$73,$DF | |||
| D34E | DEFB $FF,$76,$3F,$FE,$FE,$FF,$FC,$F7 | |||
| D356 | DEFB $E4,$F8,$E7,$DD,$F0,$CF,$BD,$F0 | |||
| D35E | DEFB $3F,$7B,$E0,$7E,$7F,$E0,$78,$3F | |||
| D366 | DEFB $C0,$30,$1F,$00,$00,$00,$00,$00 | |||
| D36E | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
|
|
||||
| D376 | DEFB $00,$0C,$00,$06,$1E,$1C,$0F,$3F | |||
| D37E | DEFB $3E,$5F,$FF,$FF,$FF,$FF,$FE,$FF | |||
| D386 | DEFB $FF,$FF,$FF,$FF,$FE,$FF,$FF,$FC | |||
| D38E | DEFB $EF,$FF,$F0,$57,$BF,$FC,$3F,$FF | |||
| D396 | DEFB $FE,$3F,$FF,$FE,$1F,$EF,$FE,$0F | |||
| D39E | DEFB $CF,$FC,$03,$0F,$F8,$0C,$8F,$FC | |||
| D3A6 | DEFB $1D,$BF,$3E,$5F,$FF,$7F,$FF,$FF | |||
| D3AE | DEFB $FE,$FF,$FF,$FF,$FF,$FF,$FF,$FC | |||
| D3B6 | DEFB $FF,$FE,$FC,$73,$FC,$60,$01,$F8 | |||
|
|
||||
| D3BE | DEFB $00,$0F,$00,$00,$3F,$C0,$00,$7F | |||
| D3C6 | DEFB $E0,$00,$FF,$F0,$00,$FF,$F0,$01 | |||
| D3CE | DEFB $FF,$E0,$01,$FF,$F0,$07,$FF,$F8 | |||
| D3D6 | DEFB $0F,$FF,$F8,$1F,$FF,$F8,$3F,$FF | |||
| D3DE | DEFB $F8,$3F,$FF,$F0,$7F,$FF,$FC,$7F | |||
| D3E6 | DEFB $FF,$F8,$7F,$FF,$FC,$7F,$FF,$FC | |||
| D3EE | DEFB $1F,$FF,$F8,$3F,$FF,$F8,$3F,$FF | |||
| D3F6 | DEFB $FC,$7F,$FF,$FC,$7F,$FF,$F8,$7F | |||
| D3FE | DEFB $FF,$F8,$7F,$FF,$F8,$3F,$FF,$F0 | |||
| D406 | DEFB $1F,$FF,$E0,$01,$FF,$C0,$07,$FF | |||
| D40E | DEFB $E7,$0F,$FF,$FF,$0F,$FF,$FF,$0F | |||
| D416 | DEFB $FF,$FF,$03,$EF,$FF,$00,$E3,$FE | |||
|
|
||||
| D41E | DEFB $00,$00,$03,$C0,$00,$00,$0F,$F0 | |||
| D426 | DEFB $00,$00,$1F,$F8,$00,$03,$FF,$F8 | |||
| D42E | DEFB $00,$0F,$FF,$FC,$00,$1F,$FF,$FC | |||
| D436 | DEFB $00,$3F,$FF,$FC,$00,$3F,$FF,$F8 | |||
| D43E | DEFB $0C,$1F,$FF,$F8,$1F,$7F,$FF,$F0 | |||
| D446 | DEFB $3F,$FF,$FF,$E0,$3F,$FF,$FF,$F0 | |||
| D44E | DEFB $3F,$FF,$FF,$F0,$7F,$FF,$FF,$FC | |||
| D456 | DEFB $7F,$FF,$FF,$FE,$7F,$FE,$F1,$FE | |||
| D45E | DEFB $FF,$FE,$01,$FE,$FF,$FF,$00,$FC | |||
| D466 | DEFB $FF,$FF,$00,$70,$7F,$FF,$00,$00 | |||
| D46E | DEFB $0E,$7F,$00,$00,$00,$1E,$00,$00 | |||
| D476 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
|
|
||||
| D47E | DEFB $00,$00,$03,$C0,$00,$00,$0F,$F0 | |||
| D486 | DEFB $00,$00,$1F,$F8,$00,$03,$FF,$F8 | |||
| D48E | DEFB $00,$0F,$FF,$FC,$00,$1F,$FF,$FC | |||
| D496 | DEFB $0C,$3F,$FF,$FC,$1F,$3F,$FF,$F8 | |||
| D49E | DEFB $3F,$FF,$FF,$F8,$3F,$FF,$FF,$F0 | |||
| D4A6 | DEFB $3F,$FF,$FF,$E6,$7F,$FF,$FF,$FF | |||
| D4AE | DEFB $7F,$FF,$FF,$FF,$7F,$3F,$FF,$FF | |||
| D4B6 | DEFB $FF,$3F,$FF,$FF,$FF,$7F,$FE,$FE | |||
| D4BE | DEFB $FF,$7F,$F0,$FC,$7F,$7E,$C0,$78 | |||
| D4C6 | DEFB $0E,$7E,$00,$10,$00,$FF,$00,$00 | |||
| D4CE | DEFB $00,$FF,$00,$00,$00,$FF,$00,$00 | |||
| D4D6 | DEFB $00,$7F,$00,$00,$00,$1E,$00,$00 | |||
|
|
||||
| D4DE | DEFB $00,$00,$03,$C0,$00,$00,$0F,$F0 | |||
| D4E6 | DEFB $00,$00,$1F,$F8,$00,$03,$DF,$FC | |||
| D4EE | DEFB $00,$0F,$FF,$FC,$00,$1F,$FF,$FC | |||
| D4F6 | DEFB $00,$3F,$FF,$FC,$00,$7F,$FF,$F8 | |||
| D4FE | DEFB $00,$7F,$FF,$F8,$00,$7F,$FF,$F0 | |||
| D506 | DEFB $00,$FF,$FF,$E0,$0F,$FF,$FF,$E0 | |||
| D50E | DEFB $1F,$FF,$FF,$E0,$3F,$FF,$FF,$E0 | |||
| D516 | DEFB $3F,$FE,$FF,$E0,$3F,$FE,$03,$E0 | |||
| D51E | DEFB $7F,$FE,$03,$F0,$7E,$FE,$01,$F8 | |||
| D526 | DEFB $7F,$3C,$01,$FC,$FF,$00,$01,$FC | |||
| D52E | DEFB $FF,$00,$00,$FC,$FF,$00,$00,$7C | |||
| D536 | DEFB $7F,$00,$00,$38,$0E,$00,$00,$00 | |||
|
|
||||
| D53E | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| D546 | DEFB $00,$00,$01,$F0,$0C,$03,$CB,$F8 | |||
| D54E | DEFB $1F,$0F,$FF,$FC,$3F,$9F,$FF,$FE | |||
| D556 | DEFB $3F,$FF,$FF,$FF,$3F,$FF,$FF,$FF | |||
| D55E | DEFB $7F,$FF,$FF,$FF,$7E,$FF,$FF,$FF | |||
| D566 | DEFB $7F,$7F,$FF,$FF,$FF,$3F,$FF,$FF | |||
| D56E | DEFB $FF,$3F,$FF,$FE,$FF,$7F,$FF,$FC | |||
| D576 | DEFB $7F,$7F,$FF,$EC,$0E,$7E,$FF,$F0 | |||
| D57E | DEFB $00,$7E,$3F,$F0,$00,$FF,$3F,$F0 | |||
| D586 | DEFB $00,$FF,$3F,$F0,$00,$FF,$3E,$FE | |||
| D58E | DEFB $00,$7F,$1E,$FE,$00,$1E,$0A,$7E | |||
| D596 | DEFB $00,$00,$00,$7E,$00,$00,$00,$34 | |||
|
|
||||
| D59E | DEFB $00,$00,$BC,$00,$00,$07,$FE,$00 | |||
| D5A6 | DEFB $00,$17,$FF,$00,$01,$DF,$FF,$80 | |||
| D5AE | DEFB $03,$FF,$FF,$80,$07,$FF,$FF,$F0 | |||
| D5B6 | DEFB $0F,$FF,$FF,$F8,$1F,$FF,$FF,$FC | |||
| D5BE | DEFB $3F,$FF,$FF,$FE,$7F,$FF,$FF,$FE | |||
| D5C6 | DEFB $FF,$FF,$FF,$FE,$FF,$FF,$FF,$FE | |||
| D5CE | DEFB $FF,$FF,$FF,$FC,$7F,$FF,$FF,$FC | |||
| D5D6 | DEFB $1F,$FF,$FF,$FE,$3F,$FF,$FF,$FE | |||
| D5DE | DEFB $7F,$FF,$FF,$FF,$7F,$FF,$FF,$FF | |||
| D5E6 | DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF | |||
| D5EE | DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF | |||
| D5F6 | DEFB $3F,$FF,$FF,$FE,$7F,$FF,$FF,$FE | |||
| D5FE | DEFB $FF,$FF,$FF,$FC,$FF,$FF,$FF,$F8 | |||
| D606 | DEFB $7F,$FF,$FF,$F8,$7F,$FF,$FF,$F0 | |||
| D60E | DEFB $3F,$FF,$FF,$E0,$1F,$7F,$FD,$C0 | |||
| D616 | DEFB $0F,$3F,$F8,$00,$00,$1B,$80,$00 | |||
|
|
||||
| D61E | DEFB $00,$01,$C0,$00,$00,$0B,$F7,$00 | |||
| D626 | DEFB $00,$1F,$FF,$80,$06,$3F,$FF,$C0 | |||
| D62E | DEFB $0F,$7F,$FF,$E0,$1F,$FF,$FF,$F0 | |||
| D636 | DEFB $3F,$FF,$FF,$F8,$3F,$FF,$FF,$F8 | |||
| D63E | DEFB $7F,$FF,$FF,$F8,$FF,$FF,$FF,$F0 | |||
| D646 | DEFB $FF,$FF,$FF,$E0,$FF,$FF,$FF,$E0 | |||
| D64E | DEFB $FF,$FF,$FF,$F8,$FF,$FF,$FF,$FC | |||
| D656 | DEFB $FF,$FF,$FF,$FE,$7F,$FF,$FF,$FE | |||
| D65E | DEFB $3F,$FF,$FF,$FE,$0F,$FF,$FF,$FE | |||
| D666 | DEFB $0F,$FF,$FF,$FC,$07,$FF,$FF,$FC | |||
| D66E | DEFB $03,$FF,$FF,$F8,$01,$BF,$FF,$F0 | |||
| D676 | DEFB $00,$1F,$FB,$E0,$00,$00,$70,$00 | |||
|
|
||||
| D67E | DEFB $03,$B0,$0F,$F8,$0F,$FC,$1F,$FE | |||
| D686 | DEFB $0F,$FE,$3F,$FC,$7F,$FC,$7F,$FF | |||
| D68E | DEFB $FF,$FF,$FF,$FF,$7F,$FF,$7F,$FE | |||
| D696 | DEFB $FF,$FC,$FF,$FC,$FF,$FE,$7F,$FE | |||
| D69E | DEFB $3F,$FC,$1F,$F8,$0F,$FC,$1F,$FE | |||
| D6A6 | DEFB $0F,$FE,$0F,$FC,$07,$F8,$00,$F0 | |||
|
|
||||
| D6AE | DEFB $00,$18,$00,$00,$3C,$38,$06,$7E | |||
| D6B6 | DEFB $7C,$0F,$FF,$FE,$1F,$FF,$FC,$7F | |||
| D6BE | DEFB $FF,$FE,$FF,$FF,$FC,$FF,$7D,$F8 | |||
| D6C6 | DEFB $FF,$B9,$F0,$FF,$C5,$F8,$7F,$EF | |||
| D6CE | DEFB $FC,$3F,$CF,$F8,$3F,$EF,$FC,$1F | |||
| D6D6 | DEFB $CF,$F8,$0B,$8E,$78,$1D,$04,$7E | |||
| D6DE | DEFB $3F,$8E,$7F,$7F,$DF,$7F,$FF,$FF | |||
| D6E6 | DEFB $FF,$FF,$FF,$FE,$FF,$FF,$FE,$FD | |||
| D6EE | DEFB $FE,$FC,$60,$FC,$60,$00,$70,$00 | |||
|
|
||||
| D6F6 | DEFB $00,$00,$01,$E0,$00,$00,$07,$F8 | |||
| D6FE | DEFB $00,$00,$0F,$FC,$00,$03,$DF,$FE | |||
| D706 | DEFB $00,$0F,$FF,$FE,$00,$1F,$FF,$FC | |||
| D70E | DEFB $00,$3F,$FF,$FE,$00,$3F,$FF,$FF | |||
| D716 | DEFB $0C,$1F,$FF,$FF,$1F,$7F,$FF,$FF | |||
| D71E | DEFB $3F,$FF,$FF,$FF,$3F,$FF,$FF,$FE | |||
| D726 | DEFB $3F,$FF,$FF,$FC,$7F,$FF,$FF,$FC | |||
| D72E | DEFB $7F,$FF,$FF,$FE,$7F,$FE,$F1,$FE | |||
| D736 | DEFB $FF,$FE,$01,$FE,$FF,$FF,$00,$FC | |||
| D73E | DEFB $FF,$FF,$00,$70,$7F,$FF,$00,$00 | |||
| D746 | DEFB $0E,$7F,$00,$00,$00,$1E,$00,$00 | |||
| D74E | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
|
|
||||
| D756 | DEFB $30,$03,$F0,$00,$78,$1F,$FC,$00 | |||
| D75E | DEFB $FC,$7F,$FF,$00,$FC,$FF,$FF,$C0 | |||
| D766 | DEFB $7E,$FF,$FF,$E0,$7F,$FF,$FF,$F0 | |||
| D76E | DEFB $3F,$FF,$FF,$F8,$7F,$FF,$FF,$F8 | |||
| D776 | DEFB $3F,$FF,$FF,$FC,$7F,$FF,$FF,$FC | |||
| D77E | DEFB $7F,$FF,$FF,$FE,$3F,$FF,$FF,$FF | |||
| D786 | DEFB $7F,$FF,$FF,$FF,$7F,$FF,$FF,$FF | |||
| D78E | DEFB $3F,$FF,$FF,$FF,$3F,$FF,$FF,$FF | |||
| D796 | DEFB $3F,$FF,$FF,$FF,$1F,$FF,$FF,$FE | |||
| D79E | DEFB $3F,$FF,$FF,$FC,$3F,$FF,$FF,$FE | |||
| D7A6 | DEFB $3F,$FF,$FF,$FF,$7F,$FF,$FF,$FF | |||
| D7AE | DEFB $7F,$FF,$FF,$FE,$7F,$FF,$FF,$FE | |||
| D7B6 | DEFB $7D,$FF,$FF,$FC,$78,$FF,$FF,$F8 | |||
| D7BE | DEFB $79,$FF,$FF,$FC,$3B,$FF,$FF,$FC | |||
| D7C6 | DEFB $13,$FF,$FF,$F8,$03,$FF,$FF,$F0 | |||
| D7CE | DEFB $01,$F7,$FF,$E0,$00,$E0,$7F,$00 | |||
|
|
||||
| D7D6 | DEFB $06,$07,$E0,$00,$0F,$3F,$F8,$00 | |||
| D7DE | DEFB $1F,$FF,$FF,$00,$3F,$FF,$FF,$80 | |||
| D7E6 | DEFB $3F,$FF,$FF,$C0,$3F,$FF,$FF,$E0 | |||
| D7EE | DEFB $7F,$FF,$FF,$F0,$7F,$FF,$FF,$F0 | |||
| D7F6 | DEFB $7F,$FF,$FF,$F8,$7F,$FF,$FF,$F8 | |||
| D7FE | DEFB $FF,$FF,$FF,$FC,$FF,$FF,$FF,$FE | |||
| D806 | DEFB $7F,$FF,$FF,$FE,$FF,$FF,$FF,$FE | |||
| D80E | DEFB $FF,$FF,$FF,$FE,$7F,$FF,$FF,$FE | |||
| D816 | DEFB $7F,$FF,$FF,$FE,$7F,$FF,$FF,$FC | |||
| D81E | DEFB $FF,$FF,$FF,$F8,$FF,$FF,$FF,$FC | |||
| D826 | DEFB $7F,$FF,$FF,$FE,$7F,$FF,$FF,$FE | |||
| D82E | DEFB $3F,$FF,$FF,$FC,$3F,$FF,$FF,$FC | |||
| D836 | DEFB $3F,$FF,$FC,$98,$1F,$FF,$FB,$E0 | |||
| D83E | DEFB $0F,$FF,$FF,$F0,$0F,$FF,$FF,$F8 | |||
| D846 | DEFB $07,$FF,$FF,$F0,$03,$9F,$FF,$E0 | |||
| D84E | DEFB $00,$0F,$FF,$C0,$00,$00,$FE,$00 | |||
|
|
||||
| D856 | DEFB $40,$00,$FE,$00,$E0,$03,$FF,$E0 | |||
| D85E | DEFB $FC,$0F,$FF,$F0,$7E,$1F,$FF,$F8 | |||
| D866 | DEFB $3F,$3F,$FF,$FC,$7F,$7F,$FF,$FC | |||
| D86E | DEFB $3F,$FF,$FF,$FC,$1F,$FF,$FF,$FE | |||
| D876 | DEFB $3F,$FF,$FF,$FE,$3F,$FF,$FF,$FE | |||
| D87E | DEFB $1F,$FF,$FF,$FE,$1F,$FF,$FF,$FF | |||
| D886 | DEFB $07,$FF,$FF,$FF,$0F,$FF,$FF,$FF | |||
| D88E | DEFB $1F,$FF,$FF,$FF,$3F,$FF,$FF,$FE | |||
| D896 | DEFB $1F,$FF,$FF,$FF,$3F,$FF,$FF,$FF | |||
| D89E | DEFB $1F,$FF,$FF,$FF,$1F,$FF,$FF,$FE | |||
| D8A6 | DEFB $0F,$FF,$FF,$FC,$0F,$FF,$FF,$FE | |||
| D8AE | DEFB $0F,$FF,$FF,$FF,$1F,$FF,$FF,$FF | |||
| D8B6 | DEFB $0F,$FF,$FF,$FF,$0F,$FF,$FF,$FE | |||
| D8BE | DEFB $1F,$FF,$FE,$3C,$3F,$9F,$FC,$18 | |||
| D8C6 | DEFB $1F,$8F,$F0,$00,$3F,$03,$C0,$00 | |||
| D8CE | DEFB $7E,$00,$00,$00,$30,$00,$00,$00 | |||
|
|
||||
| D8D6 | DEFB $03,$83,$F8,$00,$07,$CF,$FF,$80 | |||
| D8DE | DEFB $0F,$BF,$FF,$C0,$0F,$7F,$FF,$E0 | |||
| D8E6 | DEFB $1F,$FF,$FF,$F0,$1F,$FF,$FF,$F8 | |||
| D8EE | DEFB $0F,$FF,$FF,$F8,$0F,$FF,$FF,$F8 | |||
| D8F6 | DEFB $1F,$FF,$FF,$F8,$1F,$FF,$FF,$FC | |||
| D8FE | DEFB $1F,$FF,$FF,$FC,$3F,$FF,$FF,$FC | |||
| D906 | DEFB $3F,$FF,$FF,$FE,$3F,$FF,$FF,$FE | |||
| D90E | DEFB $3F,$FF,$FF,$FE,$3F,$FF,$FF,$FC | |||
| D916 | DEFB $1F,$FF,$FF,$FE,$0F,$FF,$FF,$FE | |||
| D91E | DEFB $1F,$FF,$FF,$FC,$0F,$FF,$FF,$FE | |||
| D926 | DEFB $0F,$FF,$FF,$FE,$0F,$FF,$FF,$FC | |||
| D92E | DEFB $07,$FF,$FF,$FE,$07,$FF,$FF,$FC | |||
| D936 | DEFB $0F,$FF,$FF,$38,$0F,$FF,$FE,$00 | |||
| D93E | DEFB $07,$FF,$F8,$00,$07,$BF,$F0,$00 | |||
| D946 | DEFB $0F,$8F,$C0,$00,$07,$C0,$00,$00 | |||
| D94E | DEFB $03,$E0,$00,$00,$00,$C0,$00,$00 | |||
|
|
||||
| D956 | DEFB $03,$F0,$1F,$FC,$3F,$FE,$7F,$FE | |||
| D95E | DEFB $FF,$FF,$FF,$FF,$7F,$FE,$1F,$F8 | |||
|
|
||||
| D966 | DEFB $03,$F0,$1F,$FC,$3F,$FE,$7F,$FE | |||
| D96E | DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FE | |||
| D976 | DEFB $FF,$FC,$7F,$FE,$7F,$FE,$FF,$FC | |||
| D97E | DEFB $FF,$F8,$FF,$F8,$7F,$E0,$3F,$C0 | |||
|
|
||||
| D986 | DEFB $03,$F0,$1F,$FC,$3F,$FE,$7F,$FE | |||
| D98E | DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FE | |||
| D996 | DEFB $FF,$FC,$7F,$FE,$7F,$FE,$FF,$FC | |||
| D99E | DEFB $FF,$F8,$FF,$F0,$FF,$E0,$FF,$E0 | |||
| D9A6 | DEFB $FF,$F0,$7F,$F8,$7F,$FC,$7F,$FC | |||
| D9AE | DEFB $3F,$FC,$3F,$FE,$3F,$FE,$1F,$FC | |||
|
|
||||
| D9B6 | DEFB $03,$F0,$1F,$FC,$3F,$FE,$7F,$FE | |||
| D9BE | DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FE | |||
| D9C6 | DEFB $FF,$FC,$7F,$FE,$7F,$FE,$FF,$FC | |||
| D9CE | DEFB $FF,$F8,$FF,$F0,$FF,$E0,$FF,$E0 | |||
| D9D6 | DEFB $FF,$F0,$7F,$F8,$7F,$FC,$7F,$FC | |||
| D9DE | DEFB $3F,$FC,$3F,$FE,$3F,$FE,$3F,$FE | |||
| D9E6 | DEFB $3F,$FE,$3F,$FE,$7F,$FE,$FF,$FE | |||
| D9EE | DEFB $FF,$FE,$7F,$FC,$1F,$F0,$07,$C0 | |||
|
|
||||
| D9F6 | DEFB $0F,$00,$7F,$C0,$7F,$E0,$FF,$E0 | |||
| D9FE | DEFB $7F,$F0,$FF,$E0,$FF,$FC,$7F,$FE | |||
| DA06 | DEFB $FF,$FF,$FF,$FF,$7F,$FF,$7F,$FE | |||
| DA0E | DEFB $FF,$FC,$7F,$F0,$FF,$F0,$3F,$F8 | |||
| DA16 | DEFB $7F,$F8,$3F,$F0,$1F,$F0,$3F,$E0 | |||
| DA1E | DEFB $1F,$C0,$3F,$00,$3F,$00,$1E,$60 | |||
| DA26 | DEFB $3E,$F0,$3C,$F8,$3E,$F8,$1F,$F0 | |||
| DA2E | DEFB $1F,$F0,$0F,$E0,$07,$C0,$03,$00 | |||
|
|
||||
| DA36 | DEFB $03,$8C,$1F,$EE,$1F,$FF,$7F,$FF | |||
| DA3E | DEFB $7F,$FE,$FF,$FC,$7F,$F8,$FF,$F0 | |||
| DA46 | DEFB $7F,$E0,$3F,$80,$7F,$E0,$FF,$F0 | |||
| DA4E | DEFB $FF,$F8,$DF,$FC,$3F,$FC,$7F,$FC | |||
| DA56 | DEFB $1F,$FC,$3F,$FC,$1F,$F8,$3F,$F0 | |||
| DA5E | DEFB $0F,$E0,$1F,$C0,$1F,$D0,$3F,$B8 | |||
| DA66 | DEFB $1F,$FC,$3F,$FC,$1F,$FC,$07,$FC | |||
| DA6E | DEFB $0F,$F8,$07,$F0,$03,$E0,$01,$80 | |||
|
|
||||
| DA76 | DEFB $00,$00,$00,$00,$00,$00,$7C,$00 | |||
| DA7E | DEFB $00,$03,$FF,$00,$00,$07,$FF,$C0 | |||
| DA86 | DEFB $40,$FF,$FF,$E0,$E3,$FF,$FF,$F0 | |||
| DA8E | DEFB $F7,$FF,$FF,$F8,$FF,$FF,$FF,$F8 | |||
| DA96 | DEFB $FF,$FF,$FF,$FC,$7F,$FF,$FF,$FC | |||
| DA9E | DEFB $1F,$FF,$FF,$FE,$3F,$FF,$FF,$FE | |||
| DAA6 | DEFB $1F,$FF,$FF,$FE,$0F,$FF,$FF,$FF | |||
| DAAE | DEFB $03,$FF,$FF,$FF,$03,$FF,$FF,$FF | |||
| DAB6 | DEFB $03,$FF,$FF,$FF,$03,$FF,$FF,$FF | |||
| DABE | DEFB $03,$FF,$FF,$FF,$03,$FF,$FF,$FE | |||
| DAC6 | DEFB $01,$FF,$FF,$FF,$01,$FF,$FF,$FE | |||
| DACE | DEFB $01,$FF,$FF,$FF,$00,$FF,$FF,$FF | |||
| DAD6 | DEFB $00,$7F,$FF,$FE,$00,$3F,$FF,$FE | |||
| DADE | DEFB $00,$7F,$FF,$FC,$00,$FF,$FF,$F8 | |||
| DAE6 | DEFB $00,$FF,$FF,$F8,$00,$FF,$FF,$F0 | |||
| DAEE | DEFB $00,$7D,$FF,$E0,$00,$38,$7F,$00 | |||
|
|
||||
| DAF6 | DEFB $00,$00,$7C,$00,$00,$01,$FF,$00 | |||
| DAFE | DEFB $00,$07,$FF,$C0,$00,$1F,$FF,$E0 | |||
| DB06 | DEFB $00,$3F,$FF,$F0,$00,$7F,$FF,$F8 | |||
| DB0E | DEFB $00,$7F,$FF,$F8,$00,$FF,$FF,$FC | |||
| DB16 | DEFB $00,$FF,$FF,$FC,$01,$FF,$FF,$FE | |||
| DB1E | DEFB $01,$FF,$FF,$FE,$03,$FF,$FF,$FE | |||
| DB26 | DEFB $03,$FF,$FF,$FF,$03,$FF,$FF,$FF | |||
| DB2E | DEFB $03,$FF,$FF,$FF,$03,$FF,$FF,$FF | |||
| DB36 | DEFB $0F,$FF,$FF,$FF,$1F,$FF,$FF,$FF | |||
| DB3E | DEFB $3F,$FF,$FF,$FE,$3F,$FF,$FF,$FF | |||
| DB46 | DEFB $7F,$FF,$FF,$FE,$FF,$FF,$FF,$FF | |||
| DB4E | DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FE | |||
| DB56 | DEFB $FF,$FF,$FF,$FE,$7B,$FF,$FF,$FC | |||
| DB5E | DEFB $23,$FF,$FF,$F8,$01,$FB,$FF,$F8 | |||
| DB66 | DEFB $00,$F1,$FF,$F0,$00,$00,$FF,$E0 | |||
| DB6E | DEFB $00,$00,$1F,$00,$00,$00,$00,$00 | |||
|
|
||||
| DB76 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| DB7E | DEFB $00,$00,$7C,$00,$00,$03,$FF,$00 | |||
| DB86 | DEFB $00,$0F,$FF,$C0,$00,$1F,$FF,$E0 | |||
| DB8E | DEFB $00,$3F,$FF,$F0,$00,$3F,$FF,$F8 | |||
| DB96 | DEFB $00,$7F,$FF,$FC,$00,$7F,$FF,$FC | |||
| DB9E | DEFB $00,$FF,$FF,$FC,$00,$FF,$FF,$FE | |||
| DBA6 | DEFB $00,$FF,$FF,$FE,$00,$FF,$FF,$FE | |||
| DBAE | DEFB $01,$FF,$FF,$FF,$39,$FF,$FF,$FF | |||
| DBB6 | DEFB $7F,$FF,$FF,$FF,$FF,$FF,$FF,$FF | |||
| DBBE | DEFB $FF,$FF,$FF,$FE,$FF,$FF,$FF,$FF | |||
| DBC6 | DEFB $3F,$FF,$FF,$FF,$1F,$FF,$FF,$FE | |||
| DBCE | DEFB $07,$FF,$FF,$FE,$03,$FF,$FF,$FF | |||
| DBD6 | DEFB $00,$FF,$FF,$FF,$00,$7F,$FF,$FF | |||
| DBDE | DEFB $00,$7F,$FF,$FF,$00,$3F,$FF,$FE | |||
| DBE6 | DEFB $00,$1F,$FF,$9C,$00,$0F,$FE,$00 | |||
| DBEE | DEFB $00,$07,$FC,$00,$00,$01,$C0,$00 | |||
|
|
||||
| DBF6 | DEFB $00,$00,$7C,$00,$00,$03,$FF,$00 | |||
| DBFE | DEFB $00,$0F,$FF,$C0,$00,$1F,$FF,$E0 | |||
| DC06 | DEFB $00,$3F,$FF,$F0,$00,$3F,$FF,$F8 | |||
| DC0E | DEFB $00,$7F,$FF,$FC,$00,$7F,$FF,$FC | |||
| DC16 | DEFB $00,$FF,$FF,$FC,$00,$FF,$FF,$FE | |||
| DC1E | DEFB $00,$FF,$FF,$FE,$00,$FF,$FF,$FE | |||
| DC26 | DEFB $01,$FF,$FF,$FF,$01,$FF,$FF,$FF | |||
| DC2E | DEFB $01,$FF,$FF,$FF,$01,$FF,$FF,$FF | |||
| DC36 | DEFB $01,$FF,$FF,$FF,$03,$FF,$FF,$FE | |||
| DC3E | DEFB $07,$FF,$FF,$FF,$07,$FF,$FF,$FE | |||
| DC46 | DEFB $03,$FF,$FF,$FC,$0F,$FF,$FF,$FC | |||
| DC4E | DEFB $1F,$FF,$FF,$FC,$3F,$FF,$FF,$FE | |||
| DC56 | DEFB $7F,$FF,$FF,$FE,$FF,$FF,$FF,$FE | |||
| DC5E | DEFB $FF,$FF,$FF,$7C,$7F,$87,$7E,$38 | |||
| DC66 | DEFB $38,$00,$3C,$00,$00,$00,$00,$00 | |||
| DC6E | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
|
|
||||
| DC76 | DEFB $47,$EF,$F7,$EA,$5C,$3E,$3E,$7F | |||
| DC7E | DEFB $FF,$77,$22,$00,$00,$00,$00,$00 | |||
| DC86 | DEFB $00,$00,$0C,$1E,$3F,$3F,$1E,$0C | |||
|
|
||||
| DC8E | DEFB $12,$BB,$D7,$AA,$7C,$28,$3C,$7A | |||
| DC96 | DEFB $27,$02,$00,$00,$00,$00,$00,$38 | |||
| DC9E | DEFB $7C,$FE,$FE,$FE,$7C,$38,$00,$00 | |||
|
|
||||
| DCA6 | DEFB $02,$07,$12,$38,$10,$00,$08,$1C | |||
| DCAE | DEFB $08,$00,$1C,$3E,$7F,$FF,$FF,$FF | |||
| DCB6 | DEFB $7F,$3E,$1C,$00,$00,$00,$00,$00 | |||
|
|
||||
| DCBE | DEFB $00,$00,$00,$00,$00,$3C,$7E,$FF | |||
| DCC6 | DEFB $FF,$FF,$FF,$FF,$FF,$FF,$7E,$3C | |||
| DCCE | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
|
|
||||
| DCD6 | DEFB $07,$08,$03,$07,$10,$07,$08,$00 | |||
|
|
||||
| DCDE | DEFB $03,$04,$0B,$07,$04,$0B,$00,$00 | |||
|
|
||||
| DCE6 | DEFB $01,$02,$03,$0B,$04,$01,$02,$00 | |||
|
|
||||
| DCEE | DEFB $00,$01,$04,$03,$01,$00,$01,$00 | |||
|
|
||||
| DCF6 | DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF | |||
|
|
||||
| DCFE | DEFB $00,$00,$00,$00,$00,$00,$80,$00 | |||
| DD06 | DEFB $00,$03,$60,$00,$00,$0E,$B8,$00 | |||
| DD0E | DEFB $00,$3D,$56,$00,$00,$EA,$AB,$80 | |||
| DD16 | DEFB $03,$D5,$55,$60,$0E,$AA,$AA,$B8 | |||
| DD1E | DEFB $39,$55,$55,$4E,$2C,$AA,$AA,$BA | |||
| DD26 | DEFB $33,$55,$54,$E2,$28,$CA,$AB,$96 | |||
| DD2E | DEFB $35,$39,$5E,$2A,$2A,$8E,$31,$56 | |||
| DD36 | DEFB $35,$51,$CA,$AA,$2A,$AA,$55,$56 | |||
| DD3E | DEFB $35,$55,$6A,$AA,$2A,$AB,$55,$56 | |||
| DD46 | DEFB $35,$55,$6A,$AA,$2A,$AB,$55,$56 | |||
| DD4E | DEFB $35,$55,$6A,$AA,$2A,$AB,$55,$56 | |||
| DD56 | DEFB $35,$55,$6A,$AA,$2A,$AB,$55,$56 | |||
| DD5E | DEFB $39,$55,$6A,$AE,$0E,$AB,$55,$78 | |||
| DD66 | DEFB $03,$D5,$6A,$E0,$00,$EB,$57,$80 | |||
| DD6E | DEFB $00,$3D,$6E,$00,$00,$0F,$78,$00 | |||
| DD76 | DEFB $00,$03,$E0,$00,$00,$00,$80,$00 | |||
|
|
||||
| DD7E | DEFB $58,$3F,$8F,$10,$19,$E0,$7E,$E0 | |||
| DD86 | DEFB $9F,$9F,$87,$60,$5E,$3F,$F3,$B0 | |||
| DD8E | DEFB $18,$FF,$FC,$F0,$33,$FF,$FE,$F0 | |||
| DD96 | DEFB $B7,$F0,$7E,$70,$37,$C0,$1F,$78 | |||
| DD9E | DEFB $37,$28,$0F,$38,$6E,$55,$07,$B8 | |||
| DDA6 | DEFB $EE,$AA,$87,$B8,$EC,$55,$43,$9C | |||
| DDAE | DEFB $DC,$AA,$A3,$DC,$D9,$55,$43,$D4 | |||
| DDB6 | DEFB $D8,$AA,$A1,$DC,$D9,$55,$51,$DC | |||
| DDBE | DEFB $D8,$AA,$A1,$D8,$DD,$55,$41,$DC | |||
| DDC6 | DEFB $D8,$AA,$A3,$DC,$DD,$55,$43,$9C | |||
| DDCE | DEFB $EE,$AA,$87,$BC,$6E,$55,$07,$2C | |||
| DDD6 | DEFB $6F,$2A,$0F,$78,$6F,$90,$3E,$78 | |||
| DDDE | DEFB $77,$E0,$FE,$D8,$37,$FF,$FC,$D0 | |||
| DDE6 | DEFB $1B,$FF,$F9,$B0,$1C,$FF,$E7,$50 | |||
| DDEE | DEFB $2F,$7F,$BE,$B0,$17,$1E,$75,$70 | |||
| DDF6 | DEFB $0B,$61,$EA,$A0,$15,$1E,$85,$60 | |||
|
|
||||
| DDFE | DEFB $00,$E0,$03,$F0,$0F,$A8,$7D,$54 | |||
| DE06 | DEFB $7A,$AA,$F5,$57,$FA,$AB,$FF,$55 | |||
| DE0E | DEFB $7B,$AA,$67,$55,$1F,$AA,$03,$D5 | |||
| DE16 | DEFB $00,$6A,$00,$77,$00,$1E,$00,$07 | |||
|
|
||||
| DE1E | DEFB $C0,$00,$70,$00,$AC,$00,$5F,$7E | |||
| DE26 | DEFB $BB,$EB,$75,$57,$EA,$AB,$D5,$57 | |||
| DE2E | DEFB $FF,$AF,$67,$FF,$1F,$5E,$03,$AE | |||
| DE36 | DEFB $00,$FE,$00,$7C,$00,$10,$00,$00 | |||
|
|
||||
| DE3E | DEFB $00,$03,$00,$0F,$00,$3F,$7E,$BF | |||
| DE46 | DEFB $FF,$DF,$BF,$EF,$DF,$F7,$DF,$FB | |||
| DE4E | DEFB $AE,$1F,$D1,$66,$66,$B8,$55,$40 | |||
| DE56 | DEFB $6B,$00,$36,$00,$08,$00,$00,$00 | |||
|
|
||||
| DE5E | DEFB $07,$00,$0F,$C0,$1F,$F0,$3F,$FE | |||
| DE66 | DEFB $7F,$F2,$7F,$EB,$FF,$95,$FF,$AB | |||
| DE6E | DEFB $FF,$56,$FE,$AA,$FE,$58,$FD,$C0 | |||
| DE76 | DEFB $7A,$00,$96,$00,$E8,$00,$E0,$00 | |||
|
|
||||
| DE7E | DEFB $A0,$00,$50,$00,$BC,$00,$77,$00 | |||
| DE86 | DEFB $EA,$C0,$55,$70,$AA,$AC,$55,$57 | |||
| DE8E | DEFB $AA,$AA,$55,$55,$3A,$AA,$0D,$55 | |||
| DE96 | DEFB $03,$AA,$00,$D5,$00,$3A,$00,$07 | |||
|
|
||||
| DE9E | DEFB $00,$01,$00,$0F,$00,$37,$00,$F9 | |||
| DEA6 | DEFB $03,$FE,$0F,$FF,$3F,$FF,$FF,$FF | |||
| DEAE | DEFB $FF,$FF,$FF,$FE,$FF,$FC,$FF,$F0 | |||
| DEB6 | DEFB $FF,$C0,$FF,$00,$FC,$00,$E0,$00 | |||
|
|
||||
| DEBE | DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF | |||
| DEC6 | DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF | |||
| DECE | DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF | |||
| DED6 | DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF | |||
| DEDE | DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF | |||
| DEE6 | DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF | |||
|
|
||||
| DEEE | DEFB $1C,$00,$37,$80,$6B,$E0,$75,$E0 | |||
| DEF6 | DEFB $7F,$F8,$FF,$FC,$FF,$FC,$FF,$8E | |||
| DEFE | DEFB $7B,$56,$66,$2A,$1F,$56,$03,$AE | |||
| DF06 | DEFB $00,$7E,$00,$7C,$00,$10,$00,$00 | |||
|
|
||||
| DF0E | DEFB $00,$E0,$01,$B8,$07,$54,$0A,$AA | |||
| DF16 | DEFB $1B,$55,$14,$D3,$7A,$AD,$55,$53 | |||
| DF1E | DEFB $2A,$07,$74,$3E,$6A,$B8,$55,$E0 | |||
| DF26 | DEFB $6A,$00,$3E,$00,$08,$00,$00,$00 | |||
|
|
||||
| DF2E | DEFB $03,$FF,$FF,$FF,$FF,$FF,$FF,$FF | |||
| DF36 | DEFB $FF,$FF,$FF,$03,$80,$00,$00,$00 | |||
| DF3E | DEFB $00,$00,$00,$00,$00,$07,$03,$7F | |||
| DF46 | DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF | |||
| DF4E | DEFB $FB,$03,$7F,$FF,$FF,$FF,$FF,$FF | |||
| DF56 | DEFB $FF,$FF,$FF,$FB,$03,$80,$00,$00 | |||
| DF5E | DEFB $00,$00,$00,$00,$00,$00,$07,$03 | |||
| DF66 | DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF | |||
| DF6E | DEFB $FF,$FF,$00,$00,$00,$00,$00,$00 | |||
| DF76 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| DF7E | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| DF86 | DEFB $03,$FF,$FF,$FF,$FF,$FF,$FF,$FF | |||
| DF8E | DEFB $FF,$FF,$FF,$03,$7F,$FF,$F3,$51 | |||
| DF96 | DEFB $11,$51,$11,$3F,$FF,$FB,$02,$B8 | |||
| DF9E | DEFB $00,$75,$57,$B5,$17,$B7,$5C,$00 | |||
| DFA6 | DEFB $75,$03,$70,$00,$35,$51,$B5,$11 | |||
| DFAE | DEFB $B1,$58,$00,$3B,$03,$71,$FE,$33 | |||
| DFB6 | DEFB $5D,$B5,$57,$B7,$38,$FE,$3B,$02 | |||
| DFBE | DEFB $B8,$00,$75,$5D,$B5,$57,$B7,$5C | |||
| DFC6 | DEFB $00,$75,$03,$7F,$FF,$F5,$11,$B1 | |||
| DFCE | DEFB $51,$B1,$5F,$FF,$FB,$03,$FF,$FF | |||
| DFD6 | DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF | |||
|
|
||||
| DFDE | DEFB $58,$3F,$8F,$10,$19,$F0,$7E,$E0 | |||
| DFE6 | DEFB $9F,$9C,$27,$60,$50,$03,$11,$B0 | |||
| DFEE | DEFB $10,$F8,$CC,$F0,$37,$1C,$22,$70 | |||
| DFF6 | DEFB $B8,$FE,$12,$70,$37,$FF,$89,$78 | |||
| DFFE | DEFB $37,$FF,$C9,$38,$6F,$FF,$E4,$B8 | |||
| E006 | DEFB $EF,$FF,$E4,$B8,$EF,$FF,$E4,$9C | |||
| E00E | DEFB $DF,$FF,$E2,$9C,$DF,$FF,$F2,$9C | |||
| E016 | DEFB $DF,$FF,$F2,$5C,$DF,$FF,$F2,$5C | |||
| E01E | DEFB $DF,$FF,$F4,$58,$DF,$FF,$E4,$9C | |||
| E026 | DEFB $DF,$FF,$E4,$9C,$DF,$FF,$E5,$1C | |||
| E02E | DEFB $EF,$FF,$E5,$3C,$6F,$FF,$E9,$7C | |||
| E036 | DEFB $6F,$FF,$49,$78,$6F,$FF,$92,$78 | |||
| E03E | DEFB $77,$F2,$22,$58,$3D,$6C,$C4,$D0 | |||
| E046 | DEFB $1C,$F1,$19,$B0,$1E,$06,$67,$50 | |||
| E04E | DEFB $2F,$F9,$BE,$B0,$17,$1E,$75,$70 | |||
| E056 | DEFB $0B,$61,$EA,$A0,$15,$1E,$85,$60 | |||
|
|
||||
| E05E | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| E066 | DEFB $00,$00,$00,$FF,$FF,$FF,$FF,$FF | |||
| E06E | DEFB $FF,$FF,$FE,$00,$00,$00,$80,$00 | |||
| E076 | DEFB $00,$00,$00,$00,$00,$02,$00,$00 | |||
| E07E | DEFB $00,$FF,$FF,$FF,$FF,$FF,$FF,$FF | |||
| E086 | DEFB $FE,$00,$00,$00,$DF,$FF,$FF,$FF | |||
| E08E | DEFB $FF,$FF,$FF,$F6,$00,$00,$00,$AF | |||
| E096 | DEFB $FF,$F1,$11,$15,$51,$FF,$EA,$00 | |||
| E09E | DEFB $00,$00,$DF,$FF,$F5,$B5,$51,$55 | |||
| E0A6 | DEFB $FF,$F6,$00,$00,$00,$FF,$FF,$F5 | |||
| E0AE | DEFB $B5,$51,$55,$FF,$FE,$00,$00,$00 | |||
| E0B6 | DEFB $FF,$FF,$F1,$B3,$11,$11,$FF,$FE | |||
| E0BE | DEFB $00,$00,$00,$FF,$FF,$F7,$B5,$51 | |||
| E0C6 | DEFB $55,$FF,$FE,$00,$00,$00,$DF,$FF | |||
| E0CE | DEFB $F7,$B5,$55,$55,$FF,$F6,$00,$00 | |||
| E0D6 | DEFB $00,$AF,$FF,$F7,$15,$55,$55,$FF | |||
| E0DE | DEFB $EA,$00,$00,$00,$DF,$FF,$FF,$FF | |||
| E0E6 | DEFB $FF,$FF,$FF,$F6,$00,$00,$00,$FF | |||
| E0EE | DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FE,$00 | |||
| E0F6 | DEFB $00,$00,$80,$00,$00,$00,$00,$00 | |||
| E0FE | DEFB $00,$02,$00,$00,$00,$FF,$FF,$FF | |||
| E106 | DEFB $FF,$FF,$FF,$FF,$FE,$00,$00,$00 | |||
| E10E | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| E116 | DEFB $00,$00,$00,$FF,$FF,$FF,$FF,$FF | |||
| E11E | DEFB $FF,$FF,$FF,$FF,$FF,$FC,$80,$00 | |||
| E126 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| E12E | DEFB $04,$FF,$FF,$FF,$FF,$FF,$FF,$FF | |||
| E136 | DEFB $FF,$FF,$FF,$FC,$DF,$FF,$FF,$FF | |||
| E13E | DEFB $FF,$FF,$FF,$FF,$FF,$FF,$EC,$AF | |||
| E146 | DEFB $CC,$7E,$A2,$3E,$22,$3E,$2E,$22 | |||
| E14E | DEFB $3F,$D4,$DF,$D5,$7E,$2B,$7F,$6A | |||
| E156 | DEFB $BE,$AE,$AE,$FF,$EC,$FF,$D5,$7E | |||
| E15E | DEFB $2B,$7F,$6A,$BE,$EE,$AE,$FF,$FC | |||
| E166 | DEFB $FF,$D5,$7E,$2B,$7F,$62,$3E,$2E | |||
| E16E | DEFB $22,$3F,$FC,$FF,$D5,$7E,$2B,$7F | |||
| E176 | DEFB $6A,$FE,$AE,$BB,$BF,$FC,$DF,$D5 | |||
| E17E | DEFB $7E,$AB,$7F,$6A,$FE,$AE,$BB,$BF | |||
| E186 | DEFB $EC,$AF,$CC,$7E,$A3,$7F,$6A,$FE | |||
| E18E | DEFB $22,$A2,$3F,$D4,$DF,$FF,$FF,$FF | |||
| E196 | DEFB $FF,$FF,$FF,$FF,$FF,$FF,$EC,$FF | |||
| E19E | DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF | |||
| E1A6 | DEFB $FF,$FC,$80,$00,$00,$00,$00,$00 | |||
| E1AE | DEFB $00,$00,$00,$00,$04,$FF,$FF,$FF | |||
| E1B6 | DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FC | |||
|
|
||||
| E1BE | DEFB $31,$D4,$00,$00,$00,$00,$00,$00 | |||
| E1C6 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| E1CE | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| E1D6 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| E1DE | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| E1E6 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| E1EE | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| E1F6 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| E1FE | DEFB $00,$00,$5D,$5D,$5D,$5D,$5D,$5D | |||
| E206 | DEFB $5D,$5D,$5D,$5D,$5D,$5D,$5D,$5D | |||
| E20E | DEFB $5D,$5D,$5D,$5D,$5D,$5D,$5D,$5D | |||
| E216 | DEFB $5D,$5D,$5D,$5D,$5D,$5D,$5D,$5D | |||
| E21E | DEFB $5D,$5D,$5D,$5D,$5D,$5D,$5D,$5D | |||
| E226 | DEFB $5D,$5D,$5D,$5D,$5D,$5D,$5D,$5D | |||
| E22E | DEFB $5D,$5D,$5D,$5D,$5D,$5D,$5D,$5D | |||
| E236 | DEFB $5D,$5D,$5D,$5D,$5D,$5D,$5D,$5D | |||
| E23E | DEFB $5D,$5D,$5D,$5D,$5D,$5D,$5D,$5D | |||
| E246 | DEFB $5D,$5D,$5D,$5D,$5D,$5D,$5D,$5D | |||
| E24E | DEFB $5D,$5D,$5D,$5D,$5D,$5D,$5D,$5D | |||
| E256 | DEFB $5D,$5D,$5D,$5D,$5D,$5D,$5D,$5D | |||
| E25E | DEFB $5D,$5D,$5D,$5D,$5D,$5D,$5D,$5D | |||
| E266 | DEFB $5D,$5D,$5D,$5D,$5D,$5D,$5D,$5D | |||
| E26E | DEFB $5D,$5D,$5D,$5D,$5D,$5D,$5D,$5D | |||
| E276 | DEFB $5D,$5D,$5D,$5D,$5D,$5D,$5D,$5D | |||
| E27E | DEFB $5D,$5D,$5D,$5D,$5D,$5D,$5D,$5D | |||
| E286 | DEFB $5D,$5D,$5D,$5D,$5D,$5D,$5D,$5D | |||
| E28E | DEFB $5D,$5D,$5D,$5D,$5D,$5D,$5D,$5D | |||
| E296 | DEFB $5D,$5D,$5D,$5D,$5D,$5D,$5D,$5D | |||
| E29E | DEFB $5D,$5D,$5D,$5D,$5D,$5D,$5D,$5D | |||
| E2A6 | DEFB $5D,$5D,$5D,$5D,$5D,$5D,$5D,$5D | |||
| E2AE | DEFB $5D,$5D,$5D,$5D,$5D,$5D,$5D,$5D | |||
| E2B6 | DEFB $5D,$5D,$5D,$5D,$5D,$5D,$5D,$5D | |||
| E2BE | DEFB $5D,$5D,$5D,$5D,$5D,$5D,$5D,$5D | |||
| E2C6 | DEFB $5D,$5D,$5D,$5D,$5D,$5D,$5D,$5D | |||
| E2CE | DEFB $5D,$5D,$5D,$5D,$5D,$5D,$5D,$5D | |||
| E2D6 | DEFB $5D,$5D,$5D,$5D,$5D,$5D,$5D,$5D | |||
| E2DE | DEFB $5D,$5D,$5D,$5D,$5D,$5D,$5D,$5D | |||
| E2E6 | DEFB $5D,$5D,$5D,$5D,$5D,$5D,$5D,$5D | |||
| E2EE | DEFB $5D,$5D,$5D,$5D,$5D,$5D,$5D,$5D | |||
| E2F6 | DEFB $5D,$5D,$5D,$5D,$5D,$5D,$5D,$5D | |||
| E2FE | DEFB $5D,$5D,$5D,$00,$00,$00,$00,$00 | |||
| E306 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| E30E | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| E316 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| E31E | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| E326 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| E32E | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| E336 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| E33E | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| E346 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| E34E | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| E356 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| E35E | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| E366 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| E36E | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| E376 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| E37E | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| E386 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| E38E | DEFB $00,$00 | |||
|
|
||||
|
||||
| E390 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| E3B0 | DEFB $F8,$FE,$FE,$FE,$C6,$FE,$FE,$C6,$C0,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$FE,$FE,$C6,$FE,$FE,$FE,$C0,$FE,$00,$00,$00,$00 | |||
| E3D0 | DEFB $FC,$FE,$FE,$FE,$C6,$FE,$FE,$C6,$C0,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$FE,$FE,$E6,$FE,$FE,$FE,$C0,$FE,$00,$00,$00,$00 | |||
| E3F0 | DEFB $C6,$C2,$C6,$18,$FE,$C6,$C6,$C6,$C0,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$C6,$C6,$F6,$18,$C2,$C6,$C0,$C0,$00,$00,$00,$00 | |||
| E410 | DEFB $C6,$F8,$FE,$18,$FE,$FC,$C6,$D6,$C0,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$C0,$C6,$DE,$18,$FE,$C6,$C0,$FE,$00,$00,$00,$00 | |||
| E430 | DEFB $C6,$C2,$FE,$18,$C6,$C6,$C6,$FE,$C6,$18,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$C6,$C6,$CE,$18,$FC,$C6,$C6,$02,$18,$00,$00,$00 | |||
| E450 | DEFB $FC,$FE,$C6,$18,$C6,$FE,$FE,$EE,$FE,$18,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$FE,$FE,$C6,$18,$CC,$FE,$FE,$FE,$18,$00,$00,$00 | |||
| E470 | DEFB $F8,$FE,$C6,$18,$C6,$FE,$FE,$C6,$FE,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$FE,$FE,$C6,$18,$C6,$FE,$FE,$FE,$00,$00,$00,$00 | |||
| E490 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| E4B0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| E4D0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| E4F0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| E510 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| E530 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| E550 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| E570 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| E590 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$00,$00 | |||
| E5B0 | DEFB $FE,$00,$FE,$FE,$FE,$C6,$FE,$C6,$00,$FE,$FE,$00,$FE,$FE,$C6,$F8,$FE,$FE,$00,$00,$CF,$FF,$31,$01,$39,$01,$01,$01,$01,$07,$00,$00 | |||
| E5D0 | DEFB $FE,$00,$FE,$FE,$FE,$C6,$FE,$E6,$00,$FE,$FE,$00,$FE,$FE,$E6,$FC,$FE,$FE,$00,$00,$8F,$FF,$27,$01,$39,$01,$01,$01,$01,$03,$00,$00 | |||
| E5F0 | DEFB $C6,$00,$C2,$C2,$18,$C6,$C2,$F6,$00,$18,$C6,$00,$C0,$C2,$F6,$C6,$C2,$C2,$00,$00,$0F,$FF,$0F,$3D,$01,$39,$39,$39,$3D,$39,$00,$00 | |||
| E610 | DEFB $FE,$00,$FE,$F8,$18,$C6,$FE,$DE,$00,$18,$C6,$00,$FE,$F8,$DE,$C6,$F8,$FE,$00,$00,$CF,$FF,$0F,$07,$01,$03,$39,$01,$01,$39,$00,$00 | |||
| E630 | DEFB $FE,$00,$FC,$C2,$18,$C6,$FC,$CE,$00,$18,$C6,$00,$02,$C2,$CE,$C6,$C2,$FC,$00,$00,$CF,$FF,$27,$3D,$E7,$39,$39,$01,$03,$39,$00,$00 | |||
| E650 | DEFB $C6,$00,$CC,$FE,$18,$FE,$CC,$C6,$00,$18,$FE,$00,$FE,$FE,$C6,$FC,$FE,$CC,$00,$00,$03,$FF,$33,$01,$E7,$01,$01,$39,$33,$03,$00,$00 | |||
| E670 | DEFB $C6,$00,$C6,$FE,$18,$FE,$C6,$C6,$00,$18,$FE,$00,$FE,$FE,$C6,$F8,$FE,$C6,$00,$00,$03,$FF,$39,$01,$E7,$01,$01,$39,$39,$07,$00,$00 | |||
| E690 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| E6B0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| E6D0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| E6F0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| E710 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| E730 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| E750 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| E770 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| E790 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| E7B0 | DEFB $FE,$00,$FE,$FE,$7E,$C0,$00,$C6,$FE,$C6,$FE,$FE,$00,$FE,$FE,$FE,$CE,$00,$00,$00,$FE,$00,$CE,$FE,$C6,$FE,$FE,$FE,$FE,$C6,$00,$00 | |||
| E7D0 | DEFB $FE,$00,$FE,$FE,$7E,$C0,$00,$C6,$FE,$C6,$FE,$FE,$00,$FE,$FE,$FE,$D8,$00,$00,$00,$FE,$00,$D8,$FE,$EE,$FE,$FE,$FE,$FE,$E6,$00,$00 | |||
| E7F0 | DEFB $C6,$00,$06,$C6,$18,$C0,$00,$FE,$C6,$C6,$C0,$C2,$00,$C2,$C6,$C6,$F0,$00,$00,$00,$02,$00,$F0,$C2,$FE,$C6,$C0,$18,$C6,$F6,$00,$00 | |||
| E810 | DEFB $FC,$00,$C6,$FE,$18,$C0,$00,$FE,$C6,$C6,$FE,$F8,$00,$FE,$C6,$C0,$F0,$00,$00,$00,$FE,$00,$F0,$F8,$D6,$FE,$FE,$18,$C6,$DE,$00,$00 | |||
| E830 | DEFB $C6,$00,$C6,$FE,$18,$C6,$00,$C6,$C6,$C6,$02,$C2,$00,$FC,$C6,$C6,$D8,$00,$00,$00,$C0,$00,$D8,$C2,$C6,$FE,$02,$18,$C6,$CE,$00,$00 | |||
| E850 | DEFB $FE,$00,$FE,$C6,$7E,$FE,$00,$C6,$FE,$FE,$FE,$FE,$00,$CC,$FE,$FE,$CC,$00,$00,$00,$FE,$00,$CC,$FE,$C6,$C0,$FE,$18,$FE,$C6,$00,$00 | |||
| E870 | DEFB $FE,$00,$FE,$C6,$7E,$FE,$00,$C6,$FE,$FE,$FE,$FE,$00,$C6,$FE,$FE,$C6,$00,$00,$00,$FE,$00,$C6,$FE,$C6,$C0,$FE,$18,$FE,$C6,$00,$00 | |||
| E890 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| E8B0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| E8D0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| E8F0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| E910 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| E930 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| E950 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| E970 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| E990 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| E9B0 | DEFB $FE,$00,$FE,$00,$FE,$FE,$C0,$FE,$00,$FE,$00,$C6,$7E,$FE,$00,$00,$00,$00,$00,$00,$FE,$00,$FE,$7E,$C6,$FE,$C0,$FE,$7E,$FE,$00,$00 | |||
| E9D0 | DEFB $FE,$00,$FE,$00,$FE,$FE,$C0,$FE,$00,$FE,$00,$EE,$7E,$FE,$00,$00,$00,$00,$00,$00,$FE,$00,$FE,$7E,$E6,$FE,$C0,$FE,$7E,$FE,$00,$00 | |||
| E9F0 | DEFB $C6,$00,$C6,$00,$C0,$C6,$C0,$C2,$00,$C6,$00,$FE,$18,$C6,$00,$00,$00,$00,$00,$00,$06,$00,$C0,$18,$F6,$C6,$C0,$C6,$18,$C2,$00,$00 | |||
| EA10 | DEFB $C0,$00,$C6,$00,$FE,$C6,$C0,$F8,$00,$C6,$00,$D6,$18,$C6,$00,$00,$00,$00,$00,$00,$3E,$00,$FE,$18,$DE,$C0,$C0,$FE,$18,$FE,$00,$00 | |||
| EA30 | DEFB $C6,$00,$C6,$00,$02,$C6,$C6,$C2,$00,$C6,$00,$C6,$18,$C6,$00,$00,$00,$00,$00,$00,$06,$00,$02,$18,$CE,$C6,$C6,$FE,$18,$FC,$00,$00 | |||
| EA50 | DEFB $FE,$00,$FE,$00,$FE,$FE,$FE,$FE,$00,$FE,$00,$C6,$7E,$FE,$00,$00,$00,$00,$00,$00,$FE,$00,$FE,$7E,$C6,$FE,$FE,$C6,$7E,$CC,$00,$00 | |||
| EA70 | DEFB $FE,$00,$FE,$00,$FE,$FE,$FE,$FE,$00,$FE,$00,$C6,$7E,$FE,$00,$00,$00,$00,$00,$00,$FE,$00,$FE,$7E,$C6,$FE,$FE,$C6,$7E,$C6,$00,$00 | |||
| EA90 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| EAB0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| EAD0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| EAF0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| EB10 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| EB30 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| EB50 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| EB70 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| EB90 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| EBB0 | DEFB $F8,$00,$C6,$FE,$FE,$FE,$FE,$FE,$FE,$FE,$FE,$CE,$00,$C6,$FE,$FE,$FE,$C0,$00,$00,$C0,$00,$FE,$C6,$FE,$FE,$FE,$FE,$00,$00,$00,$00 | |||
| EBD0 | DEFB $FC,$00,$C6,$FE,$FE,$FE,$FE,$FE,$FE,$FE,$FE,$D8,$00,$C6,$FE,$FE,$FE,$C0,$00,$00,$CC,$00,$FE,$C6,$FE,$FE,$FE,$FE,$00,$00,$00,$00 | |||
| EBF0 | DEFB $C6,$00,$FE,$C2,$C6,$C2,$18,$C6,$C2,$C2,$C6,$F0,$00,$FE,$C6,$18,$C2,$C0,$00,$00,$CC,$00,$C6,$C6,$C2,$C0,$C6,$C2,$00,$00,$00,$00 | |||
| EC10 | DEFB $C6,$00,$FE,$F8,$FE,$FE,$18,$FC,$FE,$F8,$FE,$F0,$00,$FE,$C6,$18,$F8,$C0,$00,$00,$FC,$00,$C0,$C6,$FE,$FE,$C6,$FE,$00,$00,$00,$00 | |||
| EC30 | DEFB $C6,$00,$C6,$C2,$FE,$FC,$18,$C6,$FC,$C2,$FE,$D8,$00,$C6,$C6,$18,$C2,$C6,$00,$00,$FC,$00,$C6,$C6,$FC,$02,$C6,$FC,$00,$00,$00,$00 | |||
| EC50 | DEFB $FC,$00,$C6,$FE,$C6,$CC,$18,$FE,$CC,$FE,$C6,$CC,$00,$C6,$FE,$18,$FE,$FE,$00,$00,$0C,$00,$FE,$FE,$CC,$FE,$FE,$CC,$00,$00,$00,$00 | |||
| EC70 | DEFB $F8,$00,$C6,$FE,$C6,$C6,$18,$FE,$C6,$FE,$C6,$C6,$00,$C6,$FE,$18,$FE,$FE,$00,$00,$0C,$00,$FE,$FE,$C6,$FE,$FE,$C6,$00,$00,$00,$00 | |||
| EC90 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| ECB0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| ECD0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| ECF0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$45,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| ED10 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$E2,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| ED30 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$40,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| ED50 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$08,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| ED70 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$14,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| ED90 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$08,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| EDB0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$22,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| EDD0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$57,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| EDF0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$22,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| EE10 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$01,$10,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| EE30 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$07,$3C,$00,$00,$00,$00,$40,$38,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| EE50 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$3F,$E2,$00,$00,$00,$00,$E0,$7C,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| EE70 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$FF,$C1,$C0,$00,$00,$00,$44,$3A,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| EE90 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$01,$FF,$A8,$E0,$00,$00,$00,$1A,$15,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| EEB0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$03,$DF,$95,$50,$00,$00,$00,$11,$22,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| EED0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$0F,$7F,$AA,$AC,$00,$00,$00,$4A,$70,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| EEF0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$1E,$77,$55,$56,$00,$00,$00,$04,$20,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| EF10 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$3F,$FC,$2A,$A2,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| EF30 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$7D,$BE,$55,$40,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| EF50 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$73,$5F,$2A,$8C,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| EF70 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$32,$BF,$8D,$56,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| EF90 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$19,$5F,$F6,$BE,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| EFB0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$06,$B0,$BF,$FC,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| EFD0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$03,$77,$7F,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| EFF0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$27,$80,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F010 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$01,$86,$C0,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F030 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$03,$C7,$60,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$30,$0C,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F050 | DEFB $00,$00,$00,$00,$00,$01,$80,$00,$07,$E4,$F0,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$69,$9E,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F070 | DEFB $00,$00,$00,$00,$00,$07,$E0,$00,$1E,$E3,$EF,$C0,$00,$00,$00,$00,$00,$00,$00,$00,$00,$6B,$DA,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F090 | DEFB $00,$00,$00,$00,$00,$0F,$B0,$00,$7F,$77,$DF,$E0,$00,$00,$00,$00,$00,$00,$00,$00,$00,$33,$CC,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F0B0 | DEFB $00,$00,$00,$00,$00,$0F,$A8,$00,$7B,$2F,$B8,$30,$00,$00,$00,$00,$00,$00,$00,$00,$00,$17,$94,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F0D0 | DEFB $00,$00,$00,$00,$00,$1F,$54,$00,$76,$0F,$37,$D8,$00,$00,$00,$00,$00,$00,$00,$00,$00,$34,$78,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F0F0 | DEFB $00,$00,$00,$00,$00,$3F,$AC,$00,$6E,$1F,$68,$28,$00,$00,$00,$00,$00,$00,$00,$00,$00,$31,$E0,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F110 | DEFB $00,$00,$00,$00,$00,$37,$54,$00,$3C,$1F,$72,$98,$00,$00,$00,$00,$00,$00,$00,$00,$00,$19,$80,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F130 | DEFB $00,$00,$00,$00,$00,$0F,$AE,$00,$1C,$07,$76,$D8,$00,$00,$00,$00,$00,$00,$00,$00,$00,$1F,$F0,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F150 | DEFB $00,$00,$00,$00,$00,$33,$96,$01,$88,$1F,$70,$18,$00,$00,$00,$00,$00,$00,$00,$00,$00,$06,$6C,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F170 | DEFB $00,$00,$00,$00,$00,$7E,$6E,$07,$E0,$3F,$98,$30,$00,$00,$00,$00,$00,$00,$00,$00,$00,$0F,$16,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F190 | DEFB $00,$00,$00,$00,$00,$7C,$BE,$0F,$B0,$3C,$CF,$E8,$00,$00,$00,$00,$00,$00,$00,$00,$00,$1D,$9E,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F1B0 | DEFB $00,$00,$00,$00,$00,$79,$5C,$0F,$A8,$78,$0C,$5C,$00,$00,$00,$00,$00,$00,$00,$00,$00,$0C,$CC,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F1D0 | DEFB $00,$00,$00,$00,$00,$1A,$B8,$1F,$54,$78,$05,$4E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$E0,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F1F0 | DEFB $00,$00,$00,$00,$00,$07,$E0,$3F,$AC,$60,$06,$DA,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$70,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F210 | DEFB $00,$00,$00,$00,$00,$00,$00,$37,$54,$78,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F230 | DEFB $00,$00,$00,$00,$00,$00,$00,$0F,$AE,$3E,$00,$00,$00,$07,$3C,$00,$00,$30,$0C,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F250 | DEFB $00,$00,$00,$00,$00,$00,$00,$33,$96,$3A,$00,$00,$00,$3F,$E2,$00,$00,$69,$9E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F270 | DEFB $00,$00,$00,$00,$00,$00,$00,$7E,$6E,$00,$00,$00,$00,$FF,$C1,$C0,$00,$6B,$DA,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F290 | DEFB $00,$00,$00,$00,$00,$00,$00,$7C,$BE,$00,$00,$00,$01,$FF,$A8,$E0,$00,$33,$CC,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F2B0 | DEFB $00,$00,$00,$00,$00,$00,$00,$79,$5C,$00,$00,$00,$03,$DF,$95,$50,$00,$17,$94,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F2D0 | DEFB $00,$00,$00,$00,$00,$00,$00,$1A,$B8,$15,$00,$00,$0F,$7F,$AA,$AC,$00,$34,$78,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F2F0 | DEFB $00,$00,$00,$00,$00,$00,$00,$07,$E0,$2A,$80,$00,$1E,$77,$55,$56,$00,$31,$E0,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F310 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$01,$45,$40,$00,$3F,$FC,$2A,$AA,$00,$19,$80,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F330 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$02,$A2,$80,$00,$7D,$BE,$55,$56,$00,$1F,$F0,$00,$00,$00,$00,$30,$0C,$00,$00,$00,$00,$00,$00,$00 | |||
| F350 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$05,$55,$50,$00,$73,$5F,$2A,$AC,$00,$06,$6C,$00,$00,$00,$00,$69,$9E,$00,$00,$00,$00,$00,$00,$00 | |||
| F370 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$02,$AA,$AA,$80,$32,$BF,$8D,$54,$00,$0F,$16,$00,$00,$00,$00,$6B,$DA,$00,$00,$00,$00,$00,$00,$00 | |||
| F390 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$01,$55,$55,$40,$19,$5F,$F6,$B8,$00,$1D,$9E,$00,$00,$00,$00,$33,$CC,$00,$00,$00,$00,$00,$00,$00 | |||
| F3B0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$0A,$AA,$A0,$06,$B7,$BF,$F0,$00,$0C,$CC,$00,$00,$00,$00,$17,$94,$00,$00,$00,$00,$00,$00,$00 | |||
| F3D0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$55,$40,$03,$7D,$7F,$00,$00,$00,$E0,$00,$00,$00,$00,$34,$78,$00,$00,$00,$00,$00,$00,$00 | |||
| F3F0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$AA,$80,$00,$2F,$80,$00,$00,$00,$70,$00,$00,$00,$00,$31,$E0,$00,$00,$00,$00,$00,$00,$00 | |||
| F410 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$54,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$19,$80,$00,$00,$00,$00,$00,$00,$00 | |||
| F430 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$1F,$F0,$00,$00,$00,$00,$00,$00,$00 | |||
| F450 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$06,$6C,$00,$00,$00,$00,$00,$00,$00 | |||
| F470 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$0F,$16,$00,$00,$00,$00,$00,$00,$00 | |||
| F490 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$1D,$9E,$00,$00,$00,$00,$00,$00,$00 | |||
| F4B0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$0C,$CC,$00,$00,$00,$00,$00,$00,$00 | |||
| F4D0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$E0,$00,$00,$00,$00,$00,$00,$00 | |||
| F4F0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$70,$00,$00,$00,$00,$00,$00,$00 | |||
| F510 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F530 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F550 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F570 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F590 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F5B0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F5D0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F5F0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F610 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F630 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$1E,$00,$E0,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F650 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$C0,$7C,$18,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F670 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$03,$1E,$0F,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F690 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$77,$C3,$C2,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F6B0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$11,$CE,$39,$E9,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F6D0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$23,$30,$07,$E5,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F6F0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$06,$E4,$11,$C4,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F710 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$44,$E8,$A9,$90,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F730 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$41,$F1,$47,$B1,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F750 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$4B,$FE,$3E,$61,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F770 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$03,$CF,$F9,$C6,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F790 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$11,$E7,$C7,$08,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F7B0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$08,$F1,$F8,$30,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F7D0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$06,$3C,$00,$40,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F7F0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$01,$87,$1E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F810 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F830 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F850 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F870 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F890 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F8B0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F8D0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F8F0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F910 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F930 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F950 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F970 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F990 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F9B0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F9D0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| F9F0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| FA10 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| FA30 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| FA50 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| FA70 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| FA90 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| FAB0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| FAD0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| FAF0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| FB10 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| FB30 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| FB50 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| FB70 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
|
Used by the routine at 85A1.
|
||||
|
Sets up the melody-table pointers ($FBAB=$FC99, $FBAF=$FE33), then loops: disable interrupts, play one note via FBD7 (which reads/advances through the melody-index table and produces the tone), scan the keyboard via the ROM KEY-SCAN routine at $028E, and repeat until a key is pressed; then re-enable interrupts and return.
|
||||
| FB90 | LD HL,$FC99 | point $FBAB at the start of the melody-index table (FC9A, aliased as code for a rare branch -- see its note) | ||
| FB93 | LD ($FBAB),HL | |||
| FB96 | LD HL,$FE33 | point $FBAF at $FE33 (a second/loop-restart table pointer, not yet explored) | ||
| FB99 | LD ($FBAF),HL | |||
| FB9C | DI | disable interrupts while bit-banging the tone (precise timing) | ||
| FB9D | CALL $FBD7 | Play one note / check key selection | ||
| FBA0 | CALL $028E | ROM KEY-SCAN: scans the keyboard, returns no-key-found as E=$FF | ||
| FBA3 | INC E | if no key was found (E wraps to 0), loop back and play the next note | ||
| FBA4 | JR Z,$FB9D | |||
| FBA6 | EI | re-enable interrupts and return (a key was pressed) | ||
| FBA7 | RET | |||
|
|
||||
| FBA8 | DEFB $00,$00,$00 | |||
| FBAB | DEFW $EA60 | |||
| FBAD | DEFW $FC9A | |||
| FBAF | DEFW $EE48 | |||
| FBB1 | DEFW $FE34 | |||
| FBB3 | DEFB $EE | |||
|
Used by the routine at FBD7.
|
||||
|
Reads the next byte of the melody-index table (via the pointer at (HL)), advances the pointer, and returns it in A. If the byte is $40 (end-of-tune marker), jumps to FBCF to reload the pointer from a loop-restart address instead.
|
||||
| FBB4 | LD E,(HL) | DE = the melody-index pointer read from (HL), advanced past the current index | ||
| FBB5 | INC HL | |||
| FBB6 | LD D,(HL) | |||
| FBB7 | INC DE | |||
|
This entry point is used by the routine at FBCF.
|
||||
| FBB8 | LD A,(DE) | Read the next index, branch to FBCF on the $40 terminator | ||
| FBB9 | CP $40 | |||
| FBBB | JR Z,$FBCF | |||
| FBBD | LD (HL),D | Store the advanced pointer back to (HL) and return | ||
| FBBE | DEC HL | |||
| FBBF | LD (HL),E | |||
| FBC0 | RET | |||
|
Used by the routine at FBD7.
|
||||
| FBC1 | LD A,(HL) | A = the melody index at (HL), add $0C | ||
| FBC2 | ADD A,$0C | |||
| FBC4 | LD E,A | DE = that value, widened | ||
| FBC5 | LD D,$00 | |||
| FBC7 | LD HL,$FC64 | HL = the period table $FC64 plus the index | ||
| FBCA | ADD HL,DE | |||
| FBCB | LD H,(HL) | H = the looked-up period byte, L = $01 fixed, return | ||
| FBCC | LD L,$01 | |||
| FBCE | RET | |||
|
Used by the routine at FBB4.
|
||||
|
Reloads the melody-index pointer from a fixed loop-restart address when FBB4 hits the $40 end-of-tune marker, then resumes reading indices from there.
|
||||
| FBCF | INC HL | |||
| FBD0 | LD E,(HL) | |||
| FBD1 | INC HL | |||
| FBD2 | LD D,(HL) | |||
| FBD3 | DEC HL | |||
| FBD4 | DEC HL | |||
| FBD5 | JR $FBB8 | |||
|
Used by the routine at FB90.
|
||||
|
Calls FBB4 twice (storing results at $FBA8/$FBA9), then FBC1 twice to check them; if neither matches, falls into the tone-generator loop at $FC04, continuing through $FC15/$FC17/$FC25 into FC34, which toggles the speaker/border via OUT ($FE),A (bit 4 = speaker) in a tight DJNZ-timed square-wave loop -- this is the music heard while the menu waits for input. If both checks match, jumps to the plain delay loop at FC46 instead.
|
||||
| FBD7 | LD HL,$FBAB | |||
| FBDA | CALL $FBB4 | Melody-index table reader/advancer, used by FBD7 | ||
| FBDD | LD ($FBA8),A | |||
| FBE0 | LD HL,$FBAF | |||
| FBE3 | CALL $FBB4 | Melody-index table reader/advancer, used by FBD7 | ||
| FBE6 | LD ($FBA9),A | |||
| FBE9 | LD HL,$FBA8 | |||
| FBEC | CALL $FBC1 | Melody-index to period lookup, used by FBD7 | ||
| FBEF | RL E | |||
| FBF1 | JP C,$FC9A | |||
| FBF4 | PUSH HL | |||
| FBF5 | LD HL,$FBA9 | |||
| FBF8 | CALL $FBC1 | Melody-index to period lookup, used by FBD7 | ||
| FBFB | POP DE | |||
| FBFC | LD A,H | |||
| FBFD | DEC A | |||
| FBFE | JR NZ,$FC04 | |||
| FC00 | LD A,D | |||
| FC01 | DEC A | |||
| FC02 | JR Z,$FC46 | => Plain delay loop | ||
| FC04 | LD A,($FBB3) | C = the note duration count ($FBB3) | ||
| FC07 | LD C,A | |||
| FC08 | LD B,$00 | B = 0 | ||
| FC0A | LD A,($FBAA) | load the key state into AF | ||
| FC0D | EX AF,AF' | and into the shadow AF bank | ||
| FC0E | LD A,($FBAA) | |||
| FC11 | LD IXh,D | IXh = the previous half-period | ||
| FC13 | LD D,$10 | D = $10, the initial half-period | ||
|
This entry point is used by the routine at FC34.
|
||||
| FC15 | NOP | |||
| FC16 | NOP | |||
|
This entry point is used by the routine at FC34.
|
||||
| FC17 | EX AF,AF' | |||
| FC18 | DEC E | |||
| FC19 | OUT ($FE),A | toggle speaker/border bit 4 -- produces the audible tone | ||
| FC1B | JR NZ,$FC34 | => Tone generator loop | ||
| FC1D | LD E,IXh | |||
| FC1F | XOR D | |||
| FC20 | EX AF,AF' | |||
| FC21 | DEC L | |||
| FC22 | JP NZ,$FC3B | |||
|
This entry point is used by the routine at FC34.
|
||||
| FC25 | OUT ($FE),A | toggle speaker/border bit 4 -- produces the audible tone | ||
| FC27 | LD L,H | |||
| FC28 | XOR D | |||
| FC29 | DJNZ $FC15 | |||
| FC2B | INC C | |||
| FC2C | JP NZ,$FC17 | |||
| FC2F | RET | |||
|
|
||||
|
Literal ASCII "adam" embedded as data/padding between code paths; possibly a programmer's signature.
|
||||
| FC30 | DEFM "adam" | |||
|
Used by the routine at FBD7.
|
||||
|
Toggles the speaker bit via OUT ($FE),A, timed by DJNZ.
|
||||
| FC34 | JR Z,$FC34 | Self-modified: JR Z to itself, replaced with NOPs when idle | ||
| FC36 | EX AF,AF' | Swap in the shadow AF, decrement L, the pitch/period counter | ||
| FC37 | DEC L | |||
| FC38 | JP Z,$FC25 | If it reaches zero, jump back to reload the next note | ||
|
This entry point is used by the routine at FBD7.
|
||||
| FC3B | OUT ($FE),A | toggle speaker/border bit 4 -- produces the audible tone | ||
| FC3D | NOP | Padding NOPs for timing, then loop B times | ||
| FC3E | NOP | |||
| FC3F | DJNZ $FC15 | |||
| FC41 | INC C | Increment C, the outer note-duration counter, loop while nonzero | ||
| FC42 | JP NZ,$FC17 | |||
| FC45 | RET | |||
|
Used by the routine at FBD7.
|
||||
|
Decrements a counter via $FBB3, with no OUT ($FE) calls.
|
||||
| FC46 | LD A,($FBB3) | A = delay parameter from $FBB3 | ||
| FC49 | CPL | Complement it, the delay length is inversely encoded | ||
| FC4A | LD C,A | C = complemented value, save BC and AF | ||
| FC4B | PUSH BC | |||
| FC4C | PUSH AF | |||
| FC4D | LD B,$00 | B = 0, 256 inner iterations per outer pass | ||
| FC4F | PUSH HL | Save HL, inner loop entry point | ||
| FC50 | LD HL,$0000 | HL = self-modified dummy pointer, target patched elsewhere, unused here as data | ||
| FC53 | SRA (HL) | shift a (self-modified) pointer's byte right 3 times (divide by 8) -- pure delay, no sound | ||
| FC55 | SRA (HL) | |||
| FC57 | SRA (HL) | |||
| FC59 | NOP | NOP, padding to equalize timing | ||
| FC5A | POP HL | Restore HL, loop back to $FC4F for the next inner iteration | ||
| FC5B | DJNZ $FC4F | |||
| FC5D | DEC C | Decrement outer counter C | ||
| FC5E | JP NZ,$FC4F | Loop back to $FC4F while C is nonzero, outer pass | ||
| FC61 | POP AF | Restore AF, BC and return | ||
| FC62 | POP BC | |||
| FC63 | RET | |||
|
|
||||
| FC64 | DEFB $FF,$F0,$E3,$D7,$CB,$C0,$B4,$AB,$A1,$97,$90,$88,$80,$79,$72,$6C,$66,$60 | |||
| FC76 | DEFB $5B,$56,$51,$4C,$48,$44,$40,$3D,$39,$36,$33,$30,$2D,$2B,$28,$26,$24,$22 | |||
| FC88 | DEFB $20,$1E,$1C,$1B,$19,$18,$17,$15,$14,$13,$12,$11,$10,$0F,$0E,$0D,$0C,$01 | |||
|
Used by the routine at FBD7.
|
||||
|
Each byte, +$0C then indexed into FC64, gives the tone period for one note. Terminated by $40. FBB4 stores the pointer as $FC99 but always increments before reading, so the first byte actually consumed is here at $FC9A ($29); +$0C=$35, and FC64+$35=$FC99=$01. This table also happens to be reachable as code via FBF1 (JP C,$FC9A -- 12x ADD HL,HL, a rarely/never-taken branch that reuses these bytes as opcodes; not its primary purpose).
|
||||
| FC9A | DEFB $29,$29,$29,$29,$29,$29,$29,$29 | |||
| FCA2 | DEFB $29,$29,$29,$29,$18,$29,$18,$1A | |||
| FCAA | DEFB $29,$1B,$1C,$1C,$1C,$0C,$29,$29 | |||
| FCB2 | DEFB $F9,$0B,$0E,$F9,$0A,$29,$F9,$07 | |||
| FCBA | DEFB $0A,$F9,$07,$05,$F4,$04,$03,$F4 | |||
| FCC2 | DEFB $04,$03,$F4,$F4,$F6,$F8,$F8,$F6 | |||
| FCCA | DEFB $0E,$0D,$10,$F4,$0C,$0A,$F4,$09 | |||
| FCD2 | DEFB $0C,$F4,$07,$04,$F9,$05,$04,$F9 | |||
| FCDA | DEFB $05,$04,$F9,$F9,$FB,$FD,$FD,$FB | |||
| FCE2 | DEFB $F9,$29,$29,$F9,$29,$29,$F9,$29 | |||
| FCEA | DEFB $29,$F9,$29,$29,$F4,$29,$29,$F4 | |||
| FCF2 | DEFB $29,$29,$F4,$F4,$F6,$F8,$F8,$F6 | |||
| FCFA | DEFB $FB,$29,$29,$FB,$29,$29,$FB,$29 | |||
| FD02 | DEFB $29,$FB,$29,$29,$FB,$29,$29,$F8 | |||
| FD0A | DEFB $29,$29,$F4,$29,$29,$F4,$29,$29 | |||
| FD12 | DEFB $F4,$29,$29,$F4,$29,$29,$F4,$29 | |||
| FD1A | DEFB $29,$F4,$29,$29,$F9,$0E,$0E,$F9 | |||
| FD22 | DEFB $29,$29,$F9,$29,$29,$F9,$29,$29 | |||
| FD2A | DEFB $FB,$29,$29,$F4,$29,$29,$FB,$29 | |||
| FD32 | DEFB $29,$F4,$29,$29,$F9,$29,$29,$F9 | |||
| FD3A | DEFB $29,$29,$F9,$29,$29,$F9,$29,$29 | |||
| FD42 | DEFB $F4,$29,$29,$F4,$29,$29,$F4,$29 | |||
| FD4A | DEFB $29,$F4,$29,$29,$F9,$29,$29,$F9 | |||
| FD52 | DEFB $29,$29,$F9,$29,$29,$F9,$29,$29 | |||
| FD5A | DEFB $F9,$29,$05,$29,$29,$29,$FE,$29 | |||
| FD62 | DEFB $29,$29,$29,$29,$FD,$29,$29,$FB | |||
| FD6A | DEFB $29,$29,$F9,$29,$0C,$0C,$0B,$0C | |||
| FD72 | DEFB $FB,$29,$29,$FB,$29,$29,$F4,$29 | |||
| FD7A | DEFB $29,$F4,$29,$29,$F9,$29,$29,$F9 | |||
| FD82 | DEFB $29,$29,$F9,$29,$29,$F9,$29,$29 | |||
| FD8A | DEFB $F4,$29,$29,$F4,$29,$29,$F4,$29 | |||
| FD92 | DEFB $29,$F4,$29,$29,$F9,$29,$29,$F9 | |||
| FD9A | DEFB $29,$29,$F9,$29,$29,$F9,$29,$29 | |||
| FDA2 | DEFB $FB,$29,$29,$FB,$29,$29,$F4,$29 | |||
| FDAA | DEFB $29,$F4,$29,$29,$F9,$29,$29,$F9 | |||
| FDB2 | DEFB $29,$29,$F9,$29,$29,$F9,$29,$29 | |||
| FDBA | DEFB $1C,$29,$29,$29,$29,$29,$07,$29 | |||
| FDC2 | DEFB $29,$29,$29,$29,$00,$29,$29,$00 | |||
| FDCA | DEFB $29,$29,$00,$29,$29,$00,$29,$29 | |||
| FDD2 | DEFB $00,$29,$29,$00,$29,$29,$00,$29 | |||
| FDDA | DEFB $29,$00,$29,$29,$05,$29,$29,$05 | |||
| FDE2 | DEFB $29,$29,$05,$29,$29,$05,$29,$29 | |||
| FDEA | DEFB $07,$29,$29,$07,$29,$29,$00,$29 | |||
| FDF2 | DEFB $29,$00,$29,$29,$05,$29,$29,$05 | |||
| FDFA | DEFB $29,$29,$00,$29,$29,$00,$29,$29 | |||
| FE02 | DEFB $F4,$29,$29,$F4,$29,$29,$F4,$29 | |||
| FE0A | DEFB $29,$F4,$29,$29,$F9,$29,$29,$F9 | |||
| FE12 | DEFB $29,$29,$F9,$29,$29,$F9,$29,$29 | |||
| FE1A | DEFB $F9,$29,$1D,$1D,$1F,$21,$22,$29 | |||
| FE22 | DEFB $16,$16,$1A,$18,$FD,$29,$29,$FB | |||
| FE2A | DEFB $29,$29,$F9,$29,$29,$29,$29,$29 | |||
| FE32 | DEFB $40,$00 | |||
|
|
||||
| FE34 | DEFB $18,$17,$1A,$18,$29,$29,$0C,$0B | |||
| FE3C | DEFB $0E,$0C,$29,$29,$18,$29,$18,$1A | |||
| FE44 | DEFB $1A,$1B,$1C,$1C,$1C,$00,$29,$29 | |||
| FE4C | DEFB $0C,$0B,$0E,$0C,$0A,$09,$09,$07 | |||
| FE54 | DEFB $0A,$09,$07,$05,$04,$04,$03,$04 | |||
| FE5C | DEFB $04,$03,$04,$F4,$F6,$F8,$F8,$F6 | |||
| FE64 | DEFB $F4,$0D,$10,$0E,$0C,$0A,$16,$15 | |||
| FE6C | DEFB $18,$16,$13,$10,$05,$05,$04,$05 | |||
| FE74 | DEFB $05,$0E,$0C,$0C,$0C,$F6,$F6,$F4 | |||
| FE7C | DEFB $0C,$0B,$0E,$0C,$0A,$09,$09,$07 | |||
| FE84 | DEFB $0A,$09,$07,$05,$04,$04,$03,$04 | |||
| FE8C | DEFB $04,$03,$04,$F4,$F6,$F8,$F8,$F6 | |||
| FE94 | DEFB $07,$07,$09,$0B,$0B,$09,$07,$07 | |||
| FE9C | DEFB $09,$0B,$0B,$09,$07,$07,$11,$10 | |||
| FEA4 | DEFB $10,$0E,$0C,$29,$29,$0C,$29,$29 | |||
| FEAC | DEFB $00,$00,$00,$04,$04,$07,$0E,$0E | |||
| FEB4 | DEFB $29,$0E,$0E,$29,$0E,$0E,$0E,$0E | |||
| FEBC | DEFB $0E,$0E,$0E,$0C,$0C,$0C,$09,$0C | |||
| FEC4 | DEFB $0E,$0E,$0E,$0E,$0E,$0E,$0E,$0C | |||
| FECC | DEFB $0C,$0C,$09,$0C,$0E,$0E,$0E,$0E | |||
| FED4 | DEFB $0E,$0E,$0E,$0E,$0C,$09,$09,$05 | |||
| FEDC | DEFB $00,$00,$00,$04,$04,$07,$0E,$0E | |||
| FEE4 | DEFB $29,$0E,$0E,$29,$0E,$0E,$0E,$0E | |||
| FEEC | DEFB $0E,$0E,$0E,$0E,$0C,$0C,$09,$0C | |||
| FEF4 | DEFB $11,$29,$05,$05,$07,$09,$0A,$29 | |||
| FEFC | DEFB $0A,$0A,$0E,$0C,$09,$09,$09,$07 | |||
| FF04 | DEFB $07,$07,$05,$29,$0C,$0C,$0B,$0C | |||
| FF0C | DEFB $0E,$29,$29,$0E,$0E,$0E,$10,$29 | |||
| FF14 | DEFB $29,$10,$10,$10,$13,$29,$29,$11 | |||
| FF1C | DEFB $11,$11,$11,$29,$11,$11,$10,$0E | |||
| FF24 | DEFB $0C,$0C,$0D,$0E,$0E,$0D,$0C,$29 | |||
| FF2C | DEFB $11,$11,$10,$0E,$0C,$0C,$0D,$0E | |||
| FF34 | DEFB $0E,$0D,$0C,$29,$0C,$0C,$0B,$0C | |||
| FF3C | DEFB $0E,$29,$29,$0E,$0E,$0E,$10,$29 | |||
| FF44 | DEFB $29,$10,$10,$10,$13,$29,$29,$11 | |||
| FF4C | DEFB $11,$11,$11,$29,$11,$11,$10,$11 | |||
| FF54 | DEFB $10,$29,$10,$10,$11,$12,$13,$29 | |||
| FF5C | DEFB $13,$13,$15,$17,$18,$1C,$1A,$18 | |||
| FF64 | DEFB $1C,$1A,$18,$29,$29,$18,$29,$29 | |||
| FF6C | DEFB $0C,$0C,$0C,$10,$10,$13,$1A,$1A | |||
| FF74 | DEFB $29,$1A,$1A,$29,$1A,$1A,$1A,$1A | |||
| FF7C | DEFB $1A,$1A,$1A,$18,$18,$18,$15,$18 | |||
| FF84 | DEFB $1A,$1A,$1A,$1A,$1A,$1A,$1A,$1A | |||
| FF8C | DEFB $18,$18,$15,$18,$1A,$1A,$1A,$1A | |||
| FF94 | DEFB $1A,$1A,$1A,$1A,$18,$15,$15,$11 | |||
| FF9C | DEFB $0C,$0C,$0C,$10,$10,$13,$1A,$1A | |||
| FFA4 | DEFB $29,$1A,$1A,$29,$1A,$1A,$1A,$1A | |||
| FFAC | DEFB $1A,$1A,$1A,$1A,$18,$18,$15,$18 | |||
| FFB4 | DEFB $1D,$29,$11,$11,$13,$15,$16,$29 | |||
| FFBC | DEFB $16,$16,$1A,$18,$15,$15,$15,$13 | |||
| FFC4 | DEFB $13,$13,$11,$29,$29,$29,$29,$29 | |||
| FFCC | DEFB $40,$00 | |||
|
|
||||
| FFCE | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| FFD6 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| FFDE | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| FFE6 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| FFEE | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| FFF6 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| FFFE | DEFB $00,$03 | |||