| Commando | Disassembly |
|
|
||||
| 5B00 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5B08 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5B10 | DEFB $00 | |||
|
|
||||
|
Enemy/object slots. +$00/$01 X/Y (current), +$02/$03 sprite frame/page (current), +$04/$05 X/Y (target), +$06/$07 sprite frame/page (next), +$08/$09/$0A clip bounds, +$0B flags (bit 2 flip, bit 4 wall-solid, bit 5 draw-active), +$11 AI delay timer, +$12 AI state. See 5BDA for the player's own instance and docs/Object-Record.md for the full field writeup.
|
||||
| 5B11 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5B1B | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5B25 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5B2F | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5B39 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5B43 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5B4D | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5B57 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5B61 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5B6B | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5B75 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5B7F | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5B89 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5B93 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5B9D | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5BA7 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5BB1 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5BBB | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5BC5 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5BCF | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
|
|
||||
| 5BD9 | DEFB $00 | ?? = $90 | ||
|
Player's object record
|
||||
| 5BDA | DEFB $00 | Starting column = $10 | ||
| 5BDB | DEFB $00 | Pixels down screen start point = $40 | ||
| 5BDC | DEFB $00 | Sprite frame index (+$02) = $02 | ||
| 5BDD | DEFB $00 | |||
| 5BDE | DEFB $00 | Target/new column (+$04) | ||
| 5BDF | DEFB $00 | Target/new row (+$05) | ||
| 5BE0 | DEFB $00,$00,$00,$00 | |||
| 5BE4 | DEFB $00 | Y-axis clip bound (+$0A) = $0A | ||
| 5BE5 | DEFB $00 | Flags (+$0B): bit 2 sprite flip, bit 5 draw-active, see 9922 = $30 | ||
| 5BE6 | DEFB $00 | Sub-state/type byte (+$0C), context-dependent, see 806B and 82C1 | ||
| 5BE7 | DEFB $00,$00,$00,$00 | |||
| 5BEB | DEFB $00 | Action delay timer (+$11), see EB13 | ||
| 5BEC | DEFB $00,$00 | |||
| 5BEE | DEFB $00 | ?? = $90 | ||
| 5BEF | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5BF7 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5BFF | DEFB $00,$FF,$E0,$00,$00,$3C,$E1,$1C | |||
| 5C07 | DEFB $0D,$0D,$23,$05,$00,$00,$00,$00 | |||
| 5C0F | DEFB $00,$01,$00,$06,$00,$0B,$00,$01 | |||
| 5C17 | DEFB $00,$01,$00,$06,$00,$10,$00,$00 | |||
| 5C1F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5C27 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5C2F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5C37 | DEFB $3C,$40,$00,$FF,$CD,$00,$A5,$61 | |||
| 5C3F | DEFB $00,$00,$00,$00,$00,$FF,$FE,$FF | |||
| 5C47 | DEFB $07,$38,$00,$00,$CB,$5C,$00,$00 | |||
| 5C4F | DEFB $B6,$5C,$BB,$5C,$CB,$5C,$15,$5D | |||
| 5C57 | DEFB $CA,$5C,$CC,$5C,$0E,$5D,$14,$5D | |||
| 5C5F | DEFB $00,$00,$16,$5D,$16,$5D,$16,$5D | |||
| 5C67 | DEFB $2D,$92,$5C,$00,$02,$00,$00,$00 | |||
| 5C6F | DEFB $00,$00,$00,$00,$00,$B6,$1A,$00 | |||
| 5C77 | DEFB $00,$A8,$25,$00,$58,$FF,$00,$00 | |||
| 5C7F | DEFB $21,$00,$5B,$21,$17,$C0,$40,$E0 | |||
| 5C87 | DEFB $50,$21,$12,$21,$17,$03,$38,$00 | |||
| 5C8F | DEFB $38,$00,$00,$00,$00,$00,$00,$00 | |||
| 5C97 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5C9F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5CA7 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5CAF | DEFB $00,$00,$00,$A8,$61,$FF,$FF,$F4 | |||
| 5CB7 | DEFB $09,$A8,$10,$4B,$F4,$09,$C4,$15 | |||
| 5CBF | DEFB $53,$81,$0F,$C4,$15,$52,$F4,$09 | |||
| 5CC7 | DEFB $C4,$15,$50,$80,$80,$FD,$32,$35 | |||
| 5CCF | DEFB $30,$30,$30,$0E,$00,$00,$A8,$61 | |||
| 5CD7 | DEFB $00,$3A,$EF,$22,$22,$AF,$3A,$EF | |||
| 5CDF | DEFB $22,$22,$AF,$3A,$EF,$22,$22,$AA | |||
| 5CE7 | DEFB $3A,$F4,$33,$30,$30,$35,$32,$0E | |||
| 5CEF | DEFB $00,$00,$64,$75,$00,$2C,$33,$31 | |||
| 5CF7 | DEFB $0E,$00,$00,$1F,$00,$00,$3A,$F2 | |||
| 5CFF | DEFB $30,$0E,$00,$00,$00,$00,$00,$3A | |||
| 5D07 | DEFB $F9,$C0,$32,$35,$33,$34,$34,$0E | |||
| 5D0F | DEFB $00,$00,$00,$63,$00,$0D,$80,$00 | |||
| 5D17 | DEFB $00,$00,$63,$00,$00,$00,$1F,$00 | |||
| 5D1F | DEFB $00,$20,$00,$1B,$00,$40,$00,$00 | |||
| 5D27 | DEFB $03,$AA,$20,$20,$20,$20,$20,$20 | |||
| 5D2F | DEFB $20,$20,$20,$00,$1B,$40,$9C,$00 | |||
| 5D37 | DEFB $80,$AA,$E5,$5C,$00,$00,$20,$00 | |||
| 5D3F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5D47 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5D4F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5D57 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5D5F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5D67 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5D6F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5D77 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5D7F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5D87 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5D8F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5D97 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5D9F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5DA7 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5DAF | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5DB7 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5DBF | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5DC7 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5DCF | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5DD7 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5DDF | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5DE7 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5DEF | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5DF7 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5DFF | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5E07 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5E0F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5E17 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5E1F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5E27 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5E2F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5E37 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5E3F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5E47 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5E4F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5E57 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5E5F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5E67 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5E6F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5E77 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5E7F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5E87 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5E8F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5E97 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5E9F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5EA7 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5EAF | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5EB7 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5EBF | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5EC7 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5ECF | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5ED7 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5EDF | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5EE7 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5EEF | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5EF7 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5EFF | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5F07 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5F0F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5F17 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5F1F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5F27 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5F2F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5F37 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5F3F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5F47 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5F4F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5F57 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5F5F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5F67 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5F6F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5F77 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5F7F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5F87 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5F8F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5F97 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5F9F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5FA7 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5FAF | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5FB7 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5FBF | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5FC7 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5FCF | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5FD7 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5FDF | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5FE7 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5FEF | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5FF7 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 5FFF | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 6007 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 600F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 6017 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 601F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 6027 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 602F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 6037 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 603F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 6047 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 604F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 6057 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 605F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 6067 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 606F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 6077 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 607F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 6087 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 608F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 6097 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 609F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 60A7 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 60AF | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 60B7 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 60BF | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 60C7 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 60CF | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 60D7 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 60DF | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 60E7 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 60EF | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 60F7 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 60FF | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 6107 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 610F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 6117 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 611F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 6127 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 612F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 6137 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 613F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 6147 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 614F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 6157 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 615F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 6167 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 616F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 6177 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 617F | DEFB $00,$00,$00,$00,$4E,$E2,$83,$E1 | |||
| 6187 | DEFB $E8,$8B,$DB,$E1,$BF,$3B,$1A,$39 | |||
| 618F | DEFB $5C,$5F,$2B,$2D,$65,$33,$58,$FF | |||
| 6197 | DEFB $ED,$10,$0D,$00,$09,$00,$85,$1C | |||
| 619F | DEFB $10,$1C,$52,$1B,$76,$1B,$03,$13 | |||
| 61A7 | DEFB $00,$3E,$00,$00,$00,$00,$00,$00 | |||
| 61AF | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 61B7 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 61BF | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 61C7 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 61CF | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 61D7 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 61DF | DEFB $00,$00,$00,$00,$00,$00,$00,$FC | |||
| 61E7 | DEFB $FC,$5D,$7A,$B5,$76,$30,$13,$E0 | |||
| 61EF | DEFB $20,$00,$00,$1A,$42,$C7,$71,$6D | |||
| 61F7 | DEFB $72,$C7,$71,$05,$6A,$3A,$5C,$58 | |||
| 61FF | DEFB $27,$00,$00,$00,$00,$00,$00,$00 | |||
| 6207 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 620F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 6217 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 621F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 6227 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 622F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 6237 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 623F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 6247 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 624F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 6257 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 625F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 6267 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 626F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 6277 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 627F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 6287 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 628F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 6297 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 629F | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 62A7 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 62AF | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 62B7 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 62BF | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 62C7 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 62CF | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 62D7 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 62DF | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 62E7 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 62EF | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 62F7 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 62FF | DEFB $00,$3A,$14,$69,$3C,$3C,$42,$46 | |||
| 6307 | DEFB $69,$D6,$8B,$0B,$D2,$8C,$0B,$ED | |||
| 630F | DEFB $82,$42,$BA,$67,$3C,$3C,$3C,$3C | |||
| 6317 | DEFB $3C,$D6,$8B,$0B,$FC,$43,$7B,$E1 | |||
| 631F | DEFB $C9,$43,$F7,$E1,$33,$99,$4B,$51 | |||
| 6327 | DEFB $E1,$01,$69,$E1,$9C,$DC,$3C,$42 | |||
| 632F | DEFB $C2,$DF,$E1,$E1,$E1,$E1,$E1,$E1 | |||
| 6337 | DEFB $E1,$E1,$E1,$E1,$E1,$E1,$E1,$E1 | |||
| 633F | DEFB $E1,$E1,$E1,$E1,$E1,$E1,$E1,$E1 | |||
| 6347 | DEFB $E1,$E1,$E1,$E1,$E1,$E1,$E1,$E1 | |||
| 634F | DEFB $E1,$E1,$E1,$E1,$E1,$E1,$E1,$E1 | |||
| 6357 | DEFB $E1,$E1,$E1,$E1,$E1,$E1,$E1,$E1 | |||
| 635F | DEFB $E1,$E1,$E1,$E1,$E1,$E1,$E1,$E1 | |||
| 6367 | DEFB $E1,$E1,$E1,$E1,$E1,$E1,$E1,$E1 | |||
| 636F | DEFB $E1,$E1,$E1,$E1,$E1,$E1,$E1,$E1 | |||
| 6377 | DEFB $E1,$E1,$E1,$E1,$E1,$E1,$E1,$E1 | |||
| 637F | DEFB $E1,$E1,$E1,$E1,$E1,$E1,$E1,$E1 | |||
| 6387 | DEFB $E1,$E1,$E1,$E1,$E1,$E1,$E1,$E1 | |||
| 638F | DEFB $E1,$E1,$E1,$E1,$E1,$E1,$E1,$E1 | |||
| 6397 | DEFB $E1,$E1,$E1,$E1,$E1,$E1,$E1,$E1 | |||
| 639F | DEFB $E1,$E1,$E1,$E1,$E1,$E1,$E1,$E1 | |||
| 63A7 | DEFB $E1,$E1,$E1,$E1,$E1,$E1,$E1,$E1 | |||
| 63AF | DEFB $E1,$E1,$E1,$E1,$E1,$E1,$E1,$E1 | |||
| 63B7 | DEFB $E1,$E1,$E1,$E1,$E1,$E1,$E1,$E1 | |||
| 63BF | DEFB $E1,$E1,$E1,$E1,$E1,$E1,$E1,$E1 | |||
| 63C7 | DEFB $E1,$E1,$E1,$E1,$E1,$E1,$E1,$E1 | |||
| 63CF | DEFB $E1,$E1,$E1,$E1,$E1,$E1,$E1,$E1 | |||
| 63D7 | DEFB $E1,$E1,$E1,$E1,$E1,$E1,$E1,$E1 | |||
| 63DF | DEFB $E1,$E1,$E1,$E1,$E1,$E1,$E1,$E1 | |||
| 63E7 | DEFB $E1,$E1,$E1,$E1,$E1,$E1,$E1,$E1 | |||
| 63EF | DEFB $E1,$E1,$E1,$E1,$E1,$E1,$E1,$E1 | |||
| 63F7 | DEFB $E1,$E1,$E1,$E1,$E1,$E1,$E1,$E1 | |||
| 63FF | DEFB $E1 | |||
|
Jump table at the head of the code. Every entry is a jump to the real routine, so callers reach the common services through fixed addresses even when the targets move.
|
||||
| 6400 | JP $7A10 | => Abort | ||
| 6403 | JP $7A5C | => Delay by BC HALTs | ||
| 6406 | JP $79CA | => System init | ||
| 6409 | JP $0000 | |||
| 640C | JP $7621 | => Print HL as 4-digit hex/BCD | ||
| 640F | JP $7626 | |||
| 6412 | JP $75BE | => Fill screen rectangle with byte | ||
| 6415 | JP $6825 | => Update Score | ||
| 6418 | JP $796A | => Prepare New Game | ||
| 641B | JP $792C | => Prepare at new Area | ||
|
This entry point is used by the routine at EF37.
|
||||
| 641E | JP $69D2 | => Set up attract/menu mode, then fall into the main menu | ||
| 6421 | JP $7357 | => Game main loop / frame handler | ||
|
This entry point is used by the routine at ED52.
|
||||
| 6424 | JP $7511 | => XOR AF and AF' with every byte in $F900-F9FF | ||
|
This entry point is used by the routine at DEEF.
|
||||
| 6427 | JP $6593 | => Scan $6648 table, call $65A5 for active entries | ||
| 642A | JP $6600 | => Find free slot in $6648 table | ||
| 642D | JP $6456 | => Trigger sound effect A | ||
| 6430 | JP $6C7A | => We've got A more grenades | ||
|
|
||||
| 6433 | DEFB $00,$00,$00,$00,$00,$00,$01 | |||
| 643A | DEFB $94,$14,$2C,$0A,$14,$10,$02,$04 | |||
| 6442 | DEFB $01,$02,$02,$02,$02,$01 | |||
| 6448 | DEFW $64F9 | |||
| 644A | DEFW $64E9 | |||
| 644C | DEFW $64C7 | |||
| 644E | DEFW $6505 | |||
| 6450 | DEFW $650F | |||
| 6452 | DEFW $64AB | |||
| 6454 | DEFW $6533 | |||
|
||||||||
|
Copies the byte at $643A+A into the active slot $6433+A to start sound A, or clears all seven slots when A=7.
|
||||||||
| 6456 | CP $07 | |||||||
| 6458 | JR Z,$6469 | => Clear 7 bytes at $6433 | ||||||
| 645A | LD E,A | |||||||
| 645B | LD HL,$6433 | Destination = $6433 + A | ||||||
| 645E | ADD A,L | |||||||
| 645F | LD L,A | |||||||
| 6460 | LD A,E | |||||||
| 6461 | LD DE,$643A | Source = $643A + A | ||||||
| 6464 | ADD A,E | |||||||
| 6465 | LD E,A | |||||||
| 6466 | LD A,(DE) | Copy byte into active slot | ||||||
| 6467 | LD (HL),A | |||||||
| 6468 | RET | |||||||
|
Silences all seven sound channels by clearing their counters.
|
||||
| 6469 | LD B,$07 | |||
| 646B | LD HL,$6433 | |||
| 646E | LD (HL),$00 | |||
| 6470 | INC HL | |||
| 6471 | DJNZ $646E | |||
| 6473 | RET | |||
|
Used by the routine at 7357.
|
||||
|
Scans the seven sound slots at $6433 for an active channel and dispatches to its handler through the address table at $6446, with the decay routine 6495 queued as the return.
|
||||
| 6474 | LD HL,$6433 | Scan $6433 slots for active sound | ||
| 6477 | LD B,$07 | |||
| 6479 | LD A,(HL) | |||
| 647A | AND A | |||
| 647B | JP NZ,$6482 | Active slot? dispatch it | ||
| 647E | INC HL | |||
| 647F | DJNZ $6479 | |||
| 6481 | RET | |||
| 6482 | LD HL,$6446 | Point at the jump table | ||
| 6485 | LD A,B | Slot number times two, add in | ||
| 6486 | ADD A,A | |||
| 6487 | ADD A,L | |||
| 6488 | LD L,A | |||
| 6489 | JR NC,$648C | |||
| 648B | INC H | |||
| 648C | LD A,(HL) | Load the handler address | ||
| 648D | INC HL | |||
| 648E | LD H,(HL) | Take the high byte, restore the low | ||
| 648F | LD L,A | |||
| 6490 | LD DE,$6495 | Queue $6495 decay as return | ||
| 6493 | PUSH DE | |||
| 6494 | JP (HL) | |||
|
|
||||
|
Fades the active sound effects, stepping each channel's counter toward silence at its own rate and freeing the slot once it lands there.
|
||||
| 6495 | LD DE,$6433 | Point at the 7 counters and rates | ||
| 6498 | LD HL,$6441 | |||
| 649B | LD B,$07 | |||
| 649D | LD A,(DE) | |||
| 649E | AND A | Skip channels already silent | ||
| 649F | JR Z,$64A6 | |||
| 64A1 | SBC A,(HL) | Subtract this channel's decay | ||
| 64A2 | JR NC,$64A5 | |||
| 64A4 | XOR A | Clamp to zero | ||
| 64A5 | LD (DE),A | |||
| 64A6 | INC HL | |||
| 64A7 | INC DE | |||
| 64A8 | DJNZ $649D | |||
| 64AA | RET | |||
|
|
||||
|
Plays a two-stage sound stepped by the counter at $6434: a higher pitch while it is under $0A and a lower one above, reloading the counter to $14 when it expires.
|
||||
| 64AB | LD A,($6434) | |||
| 64AE | DEC A | Expired? reload and stop | ||
| 64AF | JR Z,$64C1 | |||
| 64B1 | INC A | |||
| 64B2 | CP $0A | Pitch varies by counter phase | ||
| 64B4 | JR C,$64BA | |||
| 64B6 | LD A,$14 | |||
| 64B8 | JR $64BC | |||
| 64BA | LD A,$0F | |||
| 64BC | LD L,$0C | Play for $0C cycles | ||
| 64BE | JP $6575 | => Sound a square-wave beep | ||
| 64C1 | LD A,$14 | Reload counter to $14 | ||
| 64C3 | LD ($6434),A | |||
| 64C6 | RET | |||
|
|
||||
|
Plays a rasping tone by toggling the speaker while flickering the border, the pitch taken from its sound parameter and each cycle padded with a short delay.
|
||||
| 64C7 | LD A,($6437) | |||
| 64CA | NEG | |||
| 64CC | AND $1F | |||
| 64CE | XOR $1F | |||
| 64D0 | OR $01 | |||
| 64D2 | PUSH AF | |||
| 64D3 | LD A,R | |||
| 64D5 | XOR $88 | |||
| 64D7 | AND $F8 | |||
| 64D9 | LD B,A | |||
| 64DA | LD A,($FDF7) | get Border color | ||
| 64DD | OR B | |||
| 64DE | OUT ($FE),A | Set border color, toggle speaker bit | ||
| 64E0 | LD B,$0A | |||
| 64E2 | DJNZ $64E2 | |||
| 64E4 | POP AF | |||
| 64E5 | DEC A | |||
| 64E6 | JR NZ,$64D2 | |||
| 64E8 | RET | |||
|
|
||||
|
Turns its sound parameter into a pitch and plays a short beep.
|
||||
| 64E9 | LD A,($6438) | |||
| 64EC | CP $0C | |||
| 64EE | JR NC,$64F4 | |||
| 64F0 | LD B,A | |||
| 64F1 | LD A,$0C | |||
| 64F3 | SUB B | |||
| 64F4 | LD L,$14 | |||
| 64F6 | JP $6575 | => Sound a square-wave beep | ||
|
|
||||
|
Turns its sound parameter into a pitch and plays a short beep.
|
||||
| 64F9 | LD A,($6439) | |||
| 64FC | NEG | |||
| 64FE | AND $0F | |||
| 6500 | LD L,$09 | |||
| 6502 | JP $6575 | => Sound a square-wave beep | ||
|
|
||||
|
Turns its sound parameter into a pitch and plays a short beep.
|
||||
| 6505 | LD A,($6436) | |||
| 6508 | ADD A,$0A | |||
| 650A | LD L,$09 | |||
| 650C | JP $6575 | => Sound a square-wave beep | ||
|
|
||||
|
Plays a sound whose pitch band steps with the counter at $6435 (raw below $0A, then based at $12 or $1C for higher values) for a fixed 10-cycle duration via 6575.
|
||||
| 650F | LD A,($6435) | |||
| 6512 | LD B,A | |||
| 6513 | CP $0A | Pitch band by counter value | ||
| 6515 | JR C,$652C | |||
| 6517 | LD A,B | |||
| 6518 | CP $1B | |||
| 651A | JR NC,$6525 | |||
| 651C | LD A,$12 | Mid band: base $12 + low bits | ||
| 651E | LD E,A | |||
| 651F | LD A,B | |||
| 6520 | AND $07 | |||
| 6522 | OR E | |||
| 6523 | JR $652C | |||
| 6525 | LD A,$1C | High band: base $1C + low bits | ||
| 6527 | LD E,A | |||
| 6528 | LD A,B | |||
| 6529 | AND $07 | |||
| 652B | OR E | |||
| 652C | OR $01 | |||
| 652E | LD L,$0A | Play for $0A cycles | ||
| 6530 | JP $6575 | => Sound a square-wave beep | ||
|
|
||||
|
Turns the active sound parameter at $6433 into a pitch (base $88, or higher parameters mapped to a shorter period) and plays an 8-cycle beep via 6575.
|
||||
| 6533 | LD A,($6433) | Read the sound parameter ($6433) | ||
| 6536 | CP $14 | |||
| 6538 | JR C,$6549 | Below $14? use the base pitch | ||
| 653A | SUB $14 | Higher: derive a pitch from it | ||
| 653C | LD B,A | |||
| 653D | LD A,$88 | |||
| 653F | SUB B | |||
| 6540 | AND $F8 | |||
| 6542 | OR $01 | |||
| 6544 | LD L,$08 | Play for 8 cycles | ||
| 6546 | JP $6575 | => Sound a square-wave beep | ||
| 6549 | LD A,$88 | |||
| 654B | LD L,$08 | |||
| 654D | JP $6575 | => Sound a square-wave beep | ||
|
|
||||
|
An unreferenced copy of the beeper loop -- byte-for-byte the same code as 6575, left in the binary but never called.
|
||||
| 6550 | LD E,A | |||
| 6551 | LD A,($FDF7) | |||
| 6554 | AND $07 | |||
| 6556 | OUT ($FE),A | |||
| 6558 | LD A,E | |||
| 6559 | DEC A | |||
| 655A | JR NZ,$6559 | |||
| 655C | LD A,R | |||
| 655E | BIT 0,A | |||
| 6560 | JR Z,$656C | |||
| 6562 | LD B,A | |||
| 6563 | LD A,($FDF7) | |||
| 6566 | AND $07 | |||
| 6568 | OR $10 | |||
| 656A | OUT ($FE),A | |||
| 656C | LD A,E | |||
| 656D | DEC A | |||
| 656E | JR NZ,$656D | |||
| 6570 | DEC L | |||
| 6571 | JP NZ,$6576 | |||
| 6574 | RET | |||
|
||||||||||
|
Sounds a square-wave beep by toggling the speaker for L half-cycle pairs, each half delayed by the pitch value in A so a smaller value gives a higher tone.
|
||||||||||
| 6575 | LD E,A | |||||||||
|
This entry point is used by the routine at 6550.
|
||||||||||
| 6576 | LD A,($FDF7) | Toggle speaker bit (tone half-cycle) | ||||||||
| 6579 | AND $07 | |||||||||
| 657B | OUT ($FE),A | |||||||||
| 657D | LD A,E | |||||||||
| 657E | DEC A | Pitch delay loop | ||||||||
| 657F | JR NZ,$657E | |||||||||
| 6581 | LD A,($FDF7) | Read the flag byte, mask to a border colour | ||||||||
| 6584 | AND $07 | |||||||||
| 6586 | OR $10 | Set toggle bit, out to the port | ||||||||
| 6588 | OUT ($FE),A | |||||||||
| 658A | LD A,E | |||||||||
| 658B | DEC A | |||||||||
| 658C | JR NZ,$658B | |||||||||
| 658E | DEC L | Count down the duration | ||||||||
| 658F | JP NZ,$6576 | |||||||||
| 6592 | RET | |||||||||
|
Used by the routine at 6400.
|
||||
|
Walks the effect slots, ticking each active one and leaving the free slots alone.
|
||||
| 6593 | LD HL,$6648 | |||
| 6596 | LD DE,$0005 | |||
| 6599 | LD B,$05 | |||
| 659B | LD A,(HL) | |||
| 659C | CP $80 | |||
| 659E | CALL NZ,$65A5 | Tick an object's timer | ||
| 65A1 | ADD HL,DE | |||
| 65A2 | DJNZ $659B | |||
| 65A4 | RET | |||
|
Used by the routine at 6593.
|
||||
|
Ticks one object's countdown. Most calls just decrement it; when it reaches zero the object's work record is rebuilt -- position copied, sprite frames picked with a small wobble, the object stamped onto the map -- so it only redraws every few frames.
|
||||
| 65A5 | PUSH HL | |||
| 65A6 | ADD HL,DE | |||
| 65A7 | DEC HL | |||
| 65A8 | DEC (HL) | Tick the countdown | ||
| 65A9 | JR Z,$65AD | |||
| 65AB | POP HL | |||
| 65AC | RET | |||
| 65AD | LD (HL),$03 | Expired: reload timer to 3 | ||
| 65AF | POP HL | |||
| 65B0 | PUSH HL | |||
| 65B1 | PUSH DE | |||
| 65B2 | PUSH BC | |||
| 65B3 | LD IX,$6661 | Point IX at the work record | ||
| 65B7 | LD A,(HL) | |||
| 65B8 | LD (IX+$00),A | Copy X coordinate into record | ||
| 65BB | LD (IX+$04),A | |||
| 65BE | INC HL | |||
| 65BF | LD B,(HL) | |||
| 65C0 | LD (IX+$01),B | Copy Y coordinate into record | ||
| 65C3 | LD A,R | Test the draw-mode flag (R bit 7) | ||
| 65C5 | JP P,$65CA | |||
| 65C8 | INC (HL) | |||
| 65C9 | INC B | |||
| 65CA | LD (IX+$05),B | |||
| 65CD | INC HL | |||
| 65CE | LD A,(HL) | |||
| 65CF | INC HL | |||
| 65D0 | LD B,(HL) | |||
| 65D1 | CALL $65F6 | Menu key check, set carry/B=$12 | ||
| 65D4 | LD (IX+$02),A | |||
| 65D7 | LD (IX+$03),B | |||
| 65DA | LD B,(HL) | |||
| 65DB | DEC HL | |||
| 65DC | INC (HL) | |||
| 65DD | LD A,(HL) | |||
| 65DE | CALL $65F6 | Menu key check, set carry/B=$12 | ||
| 65E1 | LD (IX+$06),A | |||
| 65E4 | LD (IX+$07),B | |||
| 65E7 | JR NC,$65ED | |||
| 65E9 | DEC HL | |||
| 65EA | DEC HL | |||
| 65EB | LD (HL),$80 | Flag record slot as spare | ||
| 65ED | LD C,$07 | |||
| 65EF | CALL $800F | Mark map cells for object IX, direction-aware | ||
| 65F2 | POP BC | |||
| 65F3 | POP DE | |||
| 65F4 | POP HL | |||
| 65F5 | RET | |||
|
Used by the routine at 65A5.
|
||||
|
Reports whether a value is a multiple of four, handing back a default of $12 either way.
|
||||
| 65F6 | OR A | |||
| 65F7 | JR Z,$65FD | |||
| 65F9 | AND $03 | |||
| 65FB | RET NZ | |||
| 65FC | SCF | |||
| 65FD | LD B,$12 | |||
| 65FF | RET | |||
|
Used by the routine at 6400.
|
||||||||||
|
Walks the five fixed-size slots looking for one marked free, and if it finds one fills in the caller's address and a starting attribute so the slot becomes active.
|
||||||||||
| 6600 | EX AF,AF' | Scan for slot marked $80 (free) | ||||||||
| 6601 | PUSH HL | |||||||||
| 6602 | LD HL,$6648 | |||||||||
| 6605 | LD DE,$0005 | |||||||||
| 6608 | LD B,$05 | |||||||||
| 660A | LD A,$80 | |||||||||
| 660C | CP (HL) | |||||||||
| 660D | JR Z,$6614 | |||||||||
| 660F | ADD HL,DE | |||||||||
| 6610 | DJNZ $660C | |||||||||
| 6612 | POP HL | |||||||||
| 6613 | RET | |||||||||
| 6614 | POP DE | Take the caller address off the stack | ||||||||
| 6615 | LD (HL),E | Store its low byte | ||||||||
| 6616 | INC HL | |||||||||
| 6617 | LD (HL),D | ...and its high byte | ||||||||
| 6618 | INC HL | |||||||||
| 6619 | LD (HL),$00 | Clear the field after it | ||||||||
| 661B | INC HL | |||||||||
| 661C | EX AF,AF' | Store derived attribute value | ||||||||
| 661D | SRL A | |||||||||
| 661F | ADD A,$13 | |||||||||
| 6621 | LD (HL),A | |||||||||
| 6622 | INC HL | |||||||||
| 6623 | LD (HL),$01 | |||||||||
| 6625 | RET | |||||||||
|
Used by the routine at 792C.
|
||||
|
Initialises the object work-record at $6661 with its clip bounds and marks all five slots in the $6648 table as free ($80).
|
||||
| 6626 | LD IX,$6661 | |||
| 662A | LD (IX+$08),$04 | Set record clip bounds | ||
| 662E | LD (IX+$09),$5F | |||
| 6632 | LD (IX+$0A),$0A | |||
| 6636 | LD (IX+$0B),$00 | |||
| 663A | LD HL,$6648 | Point at the 5 slots | ||
| 663D | LD DE,$0005 | |||
| 6640 | LD B,$05 | |||
| 6642 | LD (HL),$80 | Mark each slot free ($80) | ||
| 6644 | ADD HL,DE | |||
| 6645 | DJNZ $6642 | |||
| 6647 | RET | |||
|
|
||||
| 6648 | DEFB $00,$00,$00,$00,$00 | ?? | ||
| 664D | DEFB $00,$00,$00,$00,$00 | |||
| 6652 | DEFB $00,$00,$00,$00,$00 | |||
| 6657 | DEFB $00,$00,$00,$00,$00 | |||
| 665C | DEFB $00,$00,$00,$00,$00 | |||
| 6661 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 6669 | DEFB $00,$00,$00,$00,$73,$18,$C9,$0C | |||
| 6671 | DEFB $63,$1D,$28,$E1,$8C,$51,$92,$FB | |||
| 6679 | DEFB $B8,$C1,$25,$24,$11,$04,$C6,$70 | |||
| 6681 | DEFB $14,$A5,$2D,$12,$94,$A1,$28,$82 | |||
| 6689 | DEFB $52,$AA,$52,$22,$25,$02,$25,$42 | |||
| 6691 | DEFB $2E,$85,$29,$40,$17,$B9,$EB,$10 | |||
| 6699 | DEFB $F7,$19,$28,$C2,$12,$8B,$92,$23 | |||
| 66A1 | DEFB $38,$C2,$25,$82,$28,$84,$E6,$30 | |||
| 66A9 | DEFB $94,$A1,$29,$12,$94,$05,$28,$82 | |||
| 66B1 | DEFB $52,$8A,$12,$22,$24,$22,$25,$42 | |||
| 66B9 | DEFB $2E,$84,$29,$48,$64,$A1,$29,$0C | |||
| 66C1 | DEFB $94,$38,$CE,$E1,$8C,$8A,$0C,$23 | |||
| 66C9 | DEFB $A4,$C1,$19,$24,$11,$04,$26,$30 | |||
|
|
||||
| 66D1 | DEFB $00,$FE,$00,$00,$03,$11,$80,$00 | ?? | ||
| 66D9 | DEFB $04,$10,$40,$00,$08,$00,$20,$00 | |||
| 66E1 | DEFB $08,$00,$20,$00,$10,$00,$10,$00 | |||
| 66E9 | DEFB $10,$00,$10,$00,$1E,$00,$F0,$00 | |||
| 66F1 | DEFB $10,$00,$10,$00,$10,$00,$10,$00 | |||
| 66F9 | DEFB $08,$00,$20,$00,$08,$00,$20,$00 | |||
| 6701 | DEFB $04,$10,$40,$00,$03,$11,$80,$00 | |||
| 6709 | DEFB $00,$FE,$00,$00,$00,$00,$00,$00 | |||
| 6711 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | ?? 4 * 16 bytes | ||
| 6719 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 6721 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 6729 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 6731 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 6739 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 6741 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 6749 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
|
Starts the scrolling title text: points the reader at the message, colours the strip it runs along, and arms the interrupt handler that steps it.
|
||||
| 6751 | LD HL,$67CE | |||
| 6754 | LD ($681B),HL | Set addr of scrolling string | ||
| 6757 | LD HL,$5AE0 | |||
| 675A | LD B,$20 | |||
| 675C | LD (HL),$04 | |||
| 675E | INC L | |||
| 675F | DJNZ $675C | |||
| 6761 | LD A,$01 | |||
| 6763 | LD ($681D),A | |||
| 6766 | SET 3,(IY+$07) | Set bit 3 of byte ($FD87) | ||
| 676A | RET | |||
|
Used by the routine at 7357.
|
||||
|
Shifts the whole banner left by rotating each screen byte and pulling in the next pixel column from a small font-row buffer. A timer paces it so a fresh character is fed in only every few frames.
|
||||
| 676B | LD A,($681D) | Count down the scroll timer | ||
| 676E | DEC A | |||
| 676F | LD ($681D),A | |||
| 6772 | CALL Z,$679D | Advance scroll-message pointer, copy next char's font row to $681E | ||
| 6775 | LD E,$02 | Two-pass pixel scroll | ||
| 6777 | LD BC,$2007 | Set up column/row counts | ||
| 677A | LD HL,$56FF | |||
| 677D | PUSH DE | |||
| 677E | LD DE,$681E | Point at the font-row buffer | ||
| 6781 | DEC E | |||
| 6782 | LD A,E | |||
| 6783 | ADD A,C | |||
| 6784 | LD E,A | |||
| 6785 | EX DE,HL | |||
| 6786 | RL (HL) | Feed one font bit into the scroll | ||
| 6788 | EX DE,HL | |||
| 6789 | POP DE | |||
| 678A | RL (HL) | Rotate it along the screen row | ||
| 678C | DEC L | |||
| 678D | DJNZ $678A | |||
| 678F | LD A,$20 | Drop to the next screen line | ||
| 6791 | ADD A,L | |||
| 6792 | LD L,A | |||
| 6793 | LD B,$20 | |||
| 6795 | DEC H | Step to the next screen third | ||
| 6796 | DEC C | |||
| 6797 | JR NZ,$677D | |||
| 6799 | DEC E | |||
| 679A | JR NZ,$6777 | |||
| 679C | RET | |||
|
Used by the routine at 676B.
|
||||
|
Feeds the next character of the scrolling title message into the display buffer $681E: reads it via the pointer at $681B, wrapping at the $1F end marker, and copies its 7-row font glyph from $7D28.
|
||||
| 679D | LD A,$04 | Reset scroll counter, load message pointer | ||
| 679F | LD ($681D),A | |||
| 67A2 | LD HL,($681B) | |||
| 67A5 | LD A,(HL) | Read char, check for end-of-message marker | ||
| 67A6 | CP $1F | |||
| 67A8 | JR Z,$67C7 | |||
| 67AA | INC HL | |||
| 67AB | LD ($681B),HL | |||
| 67AE | CP $20 | Map space to glyph $2F | ||
| 67B0 | JR NZ,$67B4 | |||
| 67B2 | LD A,$2F | |||
| 67B4 | LD L,A | Char code into L | ||
| 67B5 | LD H,$00 | |||
| 67B7 | ADD HL,HL | Tripled: eight bytes per font row | ||
| 67B8 | ADD HL,HL | |||
| 67B9 | ADD HL,HL | |||
| 67BA | LD DE,$7D28 | |||
| 67BD | ADD HL,DE | |||
| 67BE | LD DE,$681E | |||
| 67C1 | LD BC,$0007 | |||
| 67C4 | LDIR | Copy 7 font rows to buffer | ||
| 67C6 | RET | |||
| 67C7 | LD HL,$67CE | End of message: rewind to start | ||
| 67CA | LD ($681B),HL | |||
| 67CD | RET | |||
|
|
||||
| 67CE | DEFM "PRESS S TO START GAME PRESS J TO CHOOSE JOYSTICK PRESS K TO RED" | |||
| 680F | DEFM "EFINE KEYS " | |||
| 681A | DEFB $1F | |||
|
|
||||
| 681B | DEFW $67D4 | Address of current char in scrolling string | ||
| 681D | DEFB $02,$00,$00,$00,$00,$00,$00,$00 | |||
|
||||||||||
|
Adds to the score and redraws it, rippling the carry through the digits and printing each one from the font. Crossing a threshold awards an extra life with a sound.
|
||||||||||
| 6825 | LD A,($FDE9) | Get Score 2nd char | ||||||||
| 6828 | PUSH AF | |||||||||
| 6829 | LD A,$07 | |||||||||
| 682B | SUB C | |||||||||
| 682C | LD E,A | |||||||||
| 682D | ADD A,$E8 | |||||||||
| 682F | LD L,A | |||||||||
| 6830 | LD H,$FD | |||||||||
| 6832 | LD C,$00 | |||||||||
| 6834 | DEC L | |||||||||
| 6835 | LD D,$01 | |||||||||
| 6837 | LD A,(HL) | Add increment to digit | ||||||||
| 6838 | ADD A,B | |||||||||
| 6839 | CP $3A | Decimal carry: subtract 10 | ||||||||
| 683B | JR C,$6842 | |||||||||
| 683D | SUB $0A | |||||||||
| 683F | INC D | |||||||||
| 6840 | JR $6839 | |||||||||
| 6842 | LD (HL),A | Store adjusted digit | ||||||||
| 6843 | INC C | |||||||||
| 6844 | DEC E | |||||||||
| 6845 | JR Z,$684A | |||||||||
| 6847 | LD B,D | |||||||||
| 6848 | DJNZ $6834 | |||||||||
| 684A | LD D,$40 | |||||||||
| 684C | LD A,(HL) | |||||||||
| 684D | INC L | |||||||||
| 684E | SUB $30 | |||||||||
| 6850 | PUSH HL | |||||||||
| 6851 | ADD A,A | |||||||||
| 6852 | ADD A,A | |||||||||
| 6853 | ADD A,A | |||||||||
| 6854 | ADD A,$A8 | Font 2nd char address, lo byte | ||||||||
| 6856 | LD L,A | |||||||||
| 6857 | LD H,$7E | Font address, hi byte | ||||||||
| 6859 | ADC A,H | |||||||||
| 685A | SUB L | |||||||||
| 685B | LD H,A | |||||||||
| 685C | LD B,$07 | |||||||||
| 685E | LD A,(HL) | One font row across | ||||||||
| 685F | INC L | |||||||||
| 6860 | LD (DE),A | Store it, step both pointers | ||||||||
| 6861 | INC D | |||||||||
| 6862 | DJNZ $685E | |||||||||
| 6864 | POP HL | |||||||||
| 6865 | LD A,D | |||||||||
| 6866 | SUB $07 | |||||||||
| 6868 | LD D,A | |||||||||
| 6869 | INC E | |||||||||
| 686A | DEC C | |||||||||
| 686B | JR NZ,$684C | |||||||||
| 686D | POP AF | |||||||||
| 686E | CP (IY+$69) | Extra life if score digit advanced | ||||||||
| 6871 | RET Z | |||||||||
| 6872 | LD A,$02 | |||||||||
| 6874 | CALL $6456 | Trigger sound effect A | ||||||||
| 6877 | LD HL,$FDE6 | Address of variable - Lives player have | ||||||||
| 687A | INC (HL) | plus one live | ||||||||
| 687B | LD A,(HL) | Get Lives player have | ||||||||
| 687C | CP $0A | |||||||||
| 687E | RET NC | |||||||||
| 687F | PUSH AF | |||||||||
| 6880 | CALL $7615 | Print immediate string | ||||||||
| 6883 | DEFB $16,$00,$15 | char $16: set position (col=$00, row=$15) | ||||||||
| 6886 | DEFB $19,$00 | char $19: set flag bit 0 ($FDAF) = $00 | ||||||||
| 6888 | DEFB $18,$00 | char $18: set width counter ($FDB0) = $00 | ||||||||
| 688A | DEFB $10,$07 | char $10: set $FDA0 bits 0-2 = $07 | ||||||||
| 688C | DEFB $11,$02 | char $11: set $FDA0 bits 3-5 = $02 | ||||||||
| 688E | DEFB $1F | char $1F: end of string | ||||||||
| 688F | POP AF | |||||||||
| 6890 | ADD A,$30 | number 0..9 -> char '0'..'9' | ||||||||
| 6892 | CALL $7637 | Print Char | ||||||||
| 6895 | RET | |||||||||
|
Used by the routine at 69B4.
|
||||||||||||||
|
Converts a packed row/column in HL to a screen address, halving the row to a character line via 98D9 and nudging down one pixel line when the row's low bit is set.
|
||||||||||||||
| 6896 | LD A,H | |||||||||||||
| 6897 | PUSH AF | |||||||||||||
| 6898 | SRL H | Row / 2 to character line | ||||||||||||
| 689A | SLA L | Column * 4 | ||||||||||||
| 689C | SLA L | |||||||||||||
| 689E | CALL $98D9 | Convert row number to screen line address | ||||||||||||
| 68A1 | POP AF | |||||||||||||
| 68A2 | RRCA | Odd row: nudge down a pixel line | ||||||||||||
| 68A3 | RET NC | |||||||||||||
| 68A4 | INC H | |||||||||||||
| 68A5 | RET | |||||||||||||
|
Used by the routine at 68CA.
|
||||||||||||
|
Clears B screen pixel-rows starting at HL by pushing zero words through SP, advancing one pixel line (with third-boundary wrap) each iteration and restoring the real SP on exit.
|
||||||||||||
| 68A6 | LD ($FD82),SP | Switch SP to HL, clear DE=0 | ||||||||||
| 68AA | LD DE,$0000 | |||||||||||
| 68AD | LD SP,HL | |||||||||||
| 68AE | PUSH DE | #0-4 five pushes blank ten bytes of the row | ||||||||||
| 68AF | PUSH DE | |||||||||||
| 68B0 | PUSH DE | |||||||||||
| 68B1 | PUSH DE | |||||||||||
| 68B2 | PUSH DE | |||||||||||
| 68B3 | INC H | Check third boundary, wrap if needed | ||||||||||
| 68B4 | LD A,H | |||||||||||
| 68B5 | AND $07 | |||||||||||
| 68B7 | JR NZ,$68C3 | |||||||||||
| 68B9 | LD A,L | |||||||||||
| 68BA | ADD A,$20 | |||||||||||
| 68BC | LD L,A | |||||||||||
| 68BD | JR C,$68C3 | |||||||||||
| 68BF | LD A,H | |||||||||||
| 68C0 | SUB $08 | |||||||||||
| 68C2 | LD H,A | |||||||||||
| 68C3 | DJNZ $68AD | Loop next row | ||||||||||
| 68C5 | LD SP,($FD82) | Restore SP | ||||||||||
| 68C9 | RET | |||||||||||
|
|
||||
|
Runs one frame of the screen wipe. It blanks a band of rows either side of a moving boundary and repaints the colour behind it, finishing and clearing the busy flag once the counter reaches the end.
|
||||
| 68CA | LD A,($FDBC) | Read the wipe counter ($FDBC) | ||
| 68CD | CP $A1 | Finished at $A1? | ||
| 68CF | JR NZ,$68D6 | |||
| 68D1 | RES 2,(IY+$07) | |||
| 68D5 | RET | |||
| 68D6 | BIT 5,A | Pick the wipe phase | ||
| 68D8 | JR Z,$6906 | |||
| 68DA | PUSH AF | |||
| 68DB | LD HL,$482D | Address on the screen | ||
| 68DE | AND $1F | Rows to clear from the low bits | ||
| 68E0 | SRL A | |||
| 68E2 | INC A | |||
| 68E3 | LD B,A | |||
| 68E4 | CALL $68A6 | Zero screen rows using SP as pointer | ||
| 68E7 | POP AF | |||
| 68E8 | PUSH AF | |||
| 68E9 | AND $1F | |||
| 68EB | SRL A | |||
| 68ED | XOR $0F | |||
| 68EF | JR Z,$68F7 | |||
| 68F1 | LD B,A | |||
| 68F2 | CALL $98DC | DOWN HL | ||
| 68F5 | DJNZ $68F2 | |||
| 68F7 | POP AF | |||
| 68F8 | PUSH AF | |||
| 68F9 | AND $1F | |||
| 68FB | SRL A | |||
| 68FD | SUB $10 | |||
| 68FF | NEG | |||
| 6901 | LD B,A | |||
| 6902 | CALL $68A6 | Zero screen rows using SP as pointer | ||
| 6905 | POP AF | |||
| 6906 | INC A | |||
| 6907 | LD ($FDBC),A | Advance the wipe counter | ||
| 690A | DEC A | |||
| 690B | LD H,A | |||
| 690C | BIT 6,A | Fill attributes by direction | ||
| 690E | JR NZ,$6930 | |||
| 6910 | BIT 5,A | |||
| 6912 | LD A,H | |||
| 6913 | JR Z,$6919 | |||
| 6915 | AND $1F | |||
| 6917 | XOR $1F | |||
| 6919 | AND $1F | |||
| 691B | LD H,A | |||
| 691C | LD A,$1F | |||
| 691E | LD B,$20 | |||
| 6920 | LD DE,$0000 | |||
| 6923 | SUB H | Fill one attribute row | ||
| 6924 | JR NC,$692C | |||
| 6926 | ADD A,$20 | |||
| 6928 | CALL $6950 | Compute row attribute address, call $69B4 | ||
| 692B | INC D | |||
| 692C | INC E | Loop the remaining columns | ||
| 692D | DJNZ $6923 | |||
| 692F | RET | |||
| 6930 | BIT 5,A | Which way is the wipe running? | ||
| 6932 | LD A,H | Mirror the column for the reverse pass | ||
| 6933 | JR Z,$6939 | |||
| 6935 | AND $1F | |||
| 6937 | XOR $1F | |||
| 6939 | AND $1F | Keep it inside the row | ||
| 693B | LD H,A | |||
| 693C | LD A,$1F | Set up the column walk | ||
| 693E | LD B,$20 | |||
| 6940 | LD DE,$001F | |||
| 6943 | SUB H | Step across, wrapping at the edge | ||
| 6944 | JR NC,$694C | |||
| 6946 | ADD A,$20 | |||
| 6948 | CALL $6950 | Compute row attribute address, call $69B4 | ||
| 694B | INC D | |||
| 694C | DEC E | |||
| 694D | DJNZ $6943 | |||
| 694F | RET | |||
|
Used by the routine at 68CA.
|
||||
|
Draws the control-type indicator tile: derives the graphic page from the joystick type in $FDBC (bit 5 selecting a mirrored index) and paints it via 69B4 with count $0A.
|
||||
| 6950 | PUSH AF | Save the caller's registers | ||
| 6951 | PUSH DE | |||
| 6952 | PUSH HL | |||
| 6953 | PUSH BC | Swap in, point at the joystick font | ||
| 6954 | EXX | |||
| 6955 | LD DE,$7AA0 | |||
| 6958 | EXX | |||
| 6959 | LD L,$03 | |||
| 695B | LD A,($FDBC) | Read control type ($FDBC) | ||
| 695E | DEC A | |||
| 695F | BIT 5,A | Bit 5 selects mirrored variant | ||
| 6961 | JR Z,$6965 | |||
| 6963 | XOR $1F | Mirror the index | ||
| 6965 | AND $1F | |||
| 6967 | ADD A,$91 | Graphic page = index + $91 | ||
| 6969 | LD H,A | |||
| 696A | LD BC,$000A | |||
| 696D | CALL $69B4 | Compute attribute address for tile | ||
| 6970 | POP BC | |||
| 6971 | POP HL | |||
| 6972 | POP DE | |||
| 6973 | POP AF | |||
| 6974 | RET | |||
|
Used by the routine at 7357.
|
||||
|
Repaints the status bar a column at a time, walking across it and colouring each column in turn.
|
||||
| 6975 | LD A,($FDBB) | Check idle flag ($FDBB), clear on match | ||
| 6978 | LD H,A | |||
| 6979 | CP $20 | |||
| 697B | JR NZ,$6982 | |||
| 697D | RES 2,(IY+$07) | |||
| 6981 | RET | |||
| 6982 | INC A | Store the fill byte | ||
| 6983 | LD ($FDBB),A | |||
| 6986 | LD A,$1F | Fill value and column count | ||
| 6988 | LD B,$20 | |||
| 698A | LD DE,$0000 | |||
| 698D | SUB H | Subtract the row height | ||
| 698E | JR NC,$6996 | |||
| 6990 | ADD A,$20 | Wrapped: add a screen third, call per column | ||
| 6992 | CALL $699A | |||
| 6995 | INC D | |||
| 6996 | INC E | |||
| 6997 | DJNZ $698D | |||
| 6999 | RET | |||
|
Used by the routine at 6975.
|
||||
|
Works out where one column of the status bar sits in the attribute area and paints it.
|
||||
| 699A | PUSH AF | Save the caller's registers | ||
| 699B | PUSH DE | |||
| 699C | PUSH HL | |||
| 699D | PUSH BC | |||
| 699E | EXX | Swap in, point at the tile font | ||
| 699F | LD DE,$7BE0 | |||
| 69A2 | EXX | |||
| 69A3 | LD L,$05 | |||
| 69A5 | LD A,($FDBB) | Load row ($FDBB), set size BC=$0016 | ||
| 69A8 | LD H,A | |||
| 69A9 | LD BC,$0016 | |||
| 69AC | CALL $69B4 | Compute attribute address for tile | ||
| 69AF | POP BC | |||
| 69B0 | POP HL | |||
| 69B1 | POP DE | |||
| 69B2 | POP AF | |||
| 69B3 | RET | |||
|
||||||||||
|
Works out where a tile sits in the attribute area from its row and column, then copies the tile's colour bytes into place.
|
||||||||||
| 69B4 | LD A,$1F | |||||||||
| 69B6 | SUB D | |||||||||
| 69B7 | SRL H | |||||||||
| 69B9 | ADD A,H | |||||||||
| 69BA | SUB $10 | |||||||||
| 69BC | LD H,A | |||||||||
| 69BD | CALL $6896 | Convert (H,L) screen coords to screen address | ||||||||
| 69C0 | PUSH HL | |||||||||
| 69C1 | LD A,$1F | |||||||||
| 69C3 | SUB E | |||||||||
| 69C4 | LD E,A | |||||||||
| 69C5 | LD H,C | |||||||||
| 69C6 | CALL $800C | Multiply HL by 10, add DE | ||||||||
| 69C9 | EXX | |||||||||
| 69CA | PUSH DE | |||||||||
| 69CB | EXX | |||||||||
| 69CC | POP DE | |||||||||
| 69CD | ADD HL,DE | |||||||||
| 69CE | POP DE | |||||||||
| 69CF | LDIR | |||||||||
| 69D1 | RET | |||||||||
|
Used by the routine at 6400.
|
||||
|
Sets up attract mode: saves the caller's stack, initialises the system, clears the last key and control type, then drops into the main menu.
|
||||
| 69D2 | EXX | Save the registers | ||
| 69D3 | PUSH HL | |||
| 69D4 | PUSH IY | |||
| 69D6 | EXX | |||
| 69D7 | LD ($FD80),SP | Remember the stack pointer | ||
| 69DB | CALL $79CA | System init | ||
| 69DE | SET 1,(IY+$07) | Set the menu-mode flag | ||
| 69E2 | LD HL,$FDAB | Reset the print pointer | ||
| 69E5 | LD ($FDA9),HL | |||
| 69E8 | XOR A | |||
| 69E9 | LD ($FDA7),A | |||
| 69EC | LD ($FD98),A | Clear the last key | ||
| 69EF | LD ($FD84),A | Clear the joystick type | ||
| 69F2 | EI | |||
|
Used by the routine at 6CAE.
|
||||
|
Main menu: shows the score table, clears the screen and starts the scrolling credits, then waits for a menu key and branches to start the game, pick a joystick or redefine the keys.
|
||||
| 69F3 | CALL $7274 | Print Score Table | ||
| 69F6 | CALL $6AE1 | Prepare status bar screen | ||
| 69F9 | CALL $6469 | Clear 7 bytes at $6433 | ||
| 69FC | CALL $6B21 | Clear playfield and status screen/attribute areas | ||
| 69FF | CALL $6751 | Set up scrolling string | ||
| 6A02 | CALL $71B6 | Print credits screen, scroll text into $5923 area | ||
| 6A05 | CALL $7251 | Check menu keys | ||
| 6A08 | JR Z,$6A0F | |||
| 6A0A | CALL $7251 | Check menu keys | ||
| 6A0D | JR NZ,$6A0A | |||
| 6A0F | PUSH AF | |||
| 6A10 | CALL $6B21 | Clear playfield and status screen/attribute areas | ||
| 6A13 | POP AF | |||
| 6A14 | CP $53 | 'S' - Start game | ||
| 6A16 | JP Z,$6BBB | => Start Game | ||
| 6A19 | CP $4A | 'J' - Joystick | ||
| 6A1B | JP Z,$7143 | => Select joystick type | ||
|
|
||||
|
Redefine Keys screen. It clears the existing assignments, then works down the prompt list asking for one key at a time and refusing any already taken, finishing by switching the control type to keyboard.
|
||||
| 6A1E | CALL $7615 | Print immediate string | ||
| 6A21 | DEFB $15,$00 | char $15: set/clear flag bit 1 ($FDAF) = $00 | ||
| 6A23 | DEFB $11,$02 | char $11: set $FDA0 bits 3-5 = $02 | ||
| 6A25 | DEFB $10,$07 | char $10: set $FDA0 bits 0-2 = $07 | ||
| 6A27 | DEFB $18,$02 | char $18: set width counter ($FDB0) = $02 | ||
| 6A29 | DEFB $16,$0C,$00 | char $16: set position (col=$0C, row=$00) | ||
| 6A2C | DEFB $19,$01 | char $19: set flag bit 0 ($FDAF) = $01 | ||
| 6A2E | DEFM "REDEFINE",$09,"KEYS" | |||
| 6A3B | DEFB $16,$16,$00 | char $16: set position (col=$16, row=$00) | ||
| 6A3E | DEFB $19,$00 | char $19: set flag bit 0 ($FDAF) = $00 | ||
| 6A40 | DEFB $18,$00 | char $18: set width counter ($FDB0) = $00 | ||
| 6A42 | DEFB $11,$00 | char $11: set $FDA0 bits 3-5 = $00 | ||
| 6A44 | DEFB $1F | char $1F: end of string | ||
| 6A45 | LD HL,$759C | Where to store redefined keys | ||
| 6A48 | LD B,$0C | |||
| 6A4A | LD (HL),$00 | |||
| 6A4C | INC HL | |||
| 6A4D | DJNZ $6A4A | |||
| 6A4F | LD B,$06 | 6 keys to redefine | ||
| 6A51 | LD HL,$6AA3 | Start address for messages to use in Redefine Keys | ||
| 6A54 | PUSH BC | |||
| 6A55 | CALL $71A8 | Print string HL | ||
| 6A58 | PUSH HL | |||
| 6A59 | CALL $98D6 | (HL) -> HL | ||
| 6A5C | HALT | |||
| 6A5D | CALL $6B14 | Wait key unpress, wait key press | ||
| 6A60 | LD C,A | |||
| 6A61 | PUSH HL | |||
| 6A62 | CALL $6A8C | Check if a key code is already assigned | ||
| 6A65 | POP HL | |||
| 6A66 | JR C,$6A5C | |||
| 6A68 | LD A,($FD99) | |||
| 6A6B | LD (HL),A | |||
| 6A6C | INC HL | |||
| 6A6D | LD A,($FD9A) | |||
| 6A70 | LD (HL),A | |||
| 6A71 | LD A,C | |||
| 6A72 | CALL $75D2 | Print key entered on Redefine Keys | ||
| 6A75 | CALL $7615 | Print immediate string | ||
| 6A78 | DEFB $03,$04,$0D | char $03: repeat character $04, $0D times | ||
| 6A7B | DEFB $1F | char $1F: end of string | ||
| 6A7C | POP HL | |||
| 6A7D | INC HL | |||
| 6A7E | INC HL | |||
| 6A7F | POP BC | |||
| 6A80 | DJNZ $6A54 | |||
| 6A82 | LD (IY+$04),$00 | Set joystick type ($FD84) = Keyboard | ||
| 6A86 | CALL $6751 | Set up scrolling string | ||
| 6A89 | JP $6A0A | |||
|
Used by the routine at 6A1E.
|
||||||||
|
Checks a key against the six already assigned on the Redefine Keys screen, reporting a clash so the same key cannot be used twice.
|
||||||||
| 6A8C | LD HL,$759C | Point at the six assigned keys | ||||||
| 6A8F | LD B,$06 | |||||||
| 6A91 | LD A,($FD99) | Match the first code byte | ||||||
| 6A94 | CP (HL) | |||||||
| 6A95 | INC HL | |||||||
| 6A96 | JR NZ,$6A9E | |||||||
| 6A98 | LD A,($FD9A) | Second byte too? already used | ||||||
| 6A9B | CP (HL) | |||||||
| 6A9C | SCF | Flag the clash | ||||||
| 6A9D | RET Z | |||||||
| 6A9E | INC HL | |||||||
| 6A9F | DJNZ $6A91 | |||||||
| 6AA1 | OR A | |||||||
| 6AA2 | RET | |||||||
|
|
||||
| 6AA3 | DEFM "UP" | |||
| 6AA5 | DEFB $03,$0D,$2E,$1F | |||
| 6AA9 | DEFB $A0,$75 | |||
| 6AAB | DEFM "DOWN" | |||
| 6AAF | DEFB $03,$0B,$2E,$1F | |||
| 6AB3 | DEFB $A2,$75 | |||
| 6AB5 | DEFM "LEFT" | |||
| 6AB9 | DEFB $03,$0B,$2E,$1F | |||
| 6ABD | DEFB $A4,$75 | |||
| 6ABF | DEFM "RIGHT" | |||
| 6AC4 | DEFB $03,$0A,$2E,$1F | |||
| 6AC8 | DEFB $A6,$75 | |||
| 6ACA | DEFM "FIRE" | |||
| 6ACE | DEFB $03,$0B,$2E,$1F | |||
| 6AD2 | DEFB $9E,$75 | |||
| 6AD4 | DEFM "GRENADE" | |||
| 6ADB | DEFB $03,$08,$2E,$1F | |||
| 6ADF | DEFB $9C,$75 | |||
|
Prepares the status bar: fills its area, points the interrupt's scroll handler at the status-bar updater, then copies the panel graphic in row by row.
|
||||
| 6AE1 | LD HL,$5805 | |||
| 6AE4 | LD B,$16 | |||
| 6AE6 | LD C,$05 | |||
| 6AE8 | LD A,$46 | |||
| 6AEA | CALL $75BE | Fill screen rectangle with byte | ||
| 6AED | XOR A | |||
| 6AEE | LD ($FDBB),A | Reset the scroll counter | ||
| 6AF1 | LD HL,$6975 | |||
| 6AF4 | LD ($7392),HL | Point the $7391 call at the status-bar fill | ||
| 6AF7 | SET 2,(IY+$07) | |||
| 6AFB | LD HL,$4686 | Set up the graphic copy (5 rows) | ||
| 6AFE | LD C,$05 | |||
| 6B00 | LD DE,$666D | |||
| 6B03 | PUSH HL | |||
| 6B04 | LD B,$14 | |||
| 6B06 | LD A,(DE) | One byte across | ||
| 6B07 | INC DE | |||
| 6B08 | LD (HL),A | Store it, step the column | ||
| 6B09 | INC L | |||
| 6B0A | DJNZ $6B06 | |||
| 6B0C | POP HL | |||
| 6B0D | CALL $98DC | DOWN HL | ||
| 6B10 | DEC C | |||
| 6B11 | JR NZ,$6B03 | |||
| 6B13 | RET | |||
|
Waits for the currently held key to be released and then for the next press, so one keystroke cannot be read twice.
|
||||
| 6B14 | LD A,($FD98) | Get last key read from keyboard | ||
| 6B17 | OR A | |||
| 6B18 | JR NZ,$6B14 | => Wait key unpress, wait key press | ||
| 6B1A | LD A,($FD98) | Get last key read from keyboard | ||
| 6B1D | OR A | |||
| 6B1E | JR Z,$6B1A | |||
| 6B20 | RET | |||
|
Clears the playfield and the status area, blanking both their attributes and their bitmaps.
|
||||
| 6B21 | RES 3,(IY+$07) | |||
| 6B25 | LD HL,$58C0 | |||
| 6B28 | LD BC,$1110 | |||
| 6B2B | XOR A | |||
| 6B2C | CALL $75BE | Fill screen rectangle with byte | ||
| 6B2F | LD HL,$0600 | |||
| 6B32 | LD BC,$1110 | |||
| 6B35 | CALL $6B4C | Zero rectangle at HL | ||
| 6B38 | LD HL,$5AC0 | |||
| 6B3B | LD BC,$2002 | |||
| 6B3E | XOR A | |||
| 6B3F | CALL $75BE | Fill screen rectangle with byte | ||
| 6B42 | LD HL,$1600 | |||
| 6B45 | LD BC,$2002 | |||
| 6B48 | CALL $6B4C | Zero rectangle at HL | ||
| 6B4B | RET | |||
|
||||||||||||
|
Blanks a rectangle of the screen bitmap, working down row by row and clearing the given number of bytes across.
|
||||||||||||
| 6B4C | SLA C | |||||||||||
| 6B4E | SLA C | |||||||||||
| 6B50 | SLA C | |||||||||||
| 6B52 | ADD HL,HL | |||||||||||
| 6B53 | ADD HL,HL | |||||||||||
| 6B54 | CALL $98D9 | Convert row number to screen line address | ||||||||||
| 6B57 | LD D,B | |||||||||||
| 6B58 | PUSH HL | |||||||||||
| 6B59 | LD B,D | |||||||||||
| 6B5A | LD (HL),$00 | |||||||||||
| 6B5C | INC L | |||||||||||
| 6B5D | DJNZ $6B5A | |||||||||||
| 6B5F | POP HL | |||||||||||
| 6B60 | CALL $98DC | DOWN HL | ||||||||||
| 6B63 | DEC C | |||||||||||
| 6B64 | JR NZ,$6B58 | |||||||||||
| 6B66 | RET | |||||||||||
|
|
||||
| 6B67 | DEFM "ABCDEFGH" | |||
| 6B6F | DEFM "IJKLMNOP" | |||
| 6B77 | DEFM "QRSTUVWX" | |||
| 6B7F | DEFM "YZ:;<=>?" | |||
|
||||||||
|
Draws the menu box: paints the border in the requested colour with the ink matched to the paper, blanks the interior, then repaints the border over the cleared area.
|
||||||||
| 6B87 | PUSH AF | |||||||
| 6B88 | AND $38 | Isolate the PAPER bits | ||||||
| 6B8A | LD C,A | |||||||
| 6B8B | RRCA | Rotate INK to PAPER position | ||||||
| 6B8C | RRCA | |||||||
| 6B8D | RRCA | |||||||
| 6B8E | OR C | OR it into the attribute | ||||||
| 6B8F | LD HL,$5820 | |||||||
| 6B92 | LD BC,$2017 | |||||||
| 6B95 | CALL $75BE | Fill screen rectangle with byte | ||||||
| 6B98 | LD HL,$0100 | Clear the box interior | ||||||
| 6B9B | LD BC,$2017 | |||||||
| 6B9E | CALL $6B4C | Zero rectangle at HL | ||||||
| 6BA1 | POP AF | |||||||
| 6BA2 | LD HL,$5820 | |||||||
| 6BA5 | LD BC,$2017 | |||||||
| 6BA8 | CALL $75BE | Fill screen rectangle with byte | ||||||
| 6BAB | RET | |||||||
|
Used by the routine at 792C.
|
||||
|
Scrolls the level in at the start of an Area, running the scroll for a fixed run of frames or until the Area flag says it has arrived.
|
||||
| 6BAC | LD B,$5C | |||
| 6BAE | PUSH BC | |||
| 6BAF | CALL $8003 | Advance level scroll | ||
| 6BB2 | POP BC | |||
| 6BB3 | BIT 4,(IY+$15) | |||
| 6BB7 | RET NZ | |||
| 6BB8 | DJNZ $6BAE | |||
| 6BBA | RET | |||
|
Used by the routine at 69F3.
|
||||
|
Outer game loop. It prepares each Area and runs the main loop; when the player dies it restores their grenades, takes a life and replays the Area from its last spawn point, ending the game once the lives run out. A surviving player gets the Area-complete sequence and moves on.
|
||||
| 6BBB | CALL $796A | Prepare New Game | ||
| 6BBE | CALL $792C | Prepare at new Area | ||
| 6BC1 | HALT | |||
| 6BC2 | RES 1,(IY+$07) | |||
| 6BC6 | HALT | |||
| 6BC7 | CALL $8006 | Clear the draw-mode flag (R bit 7), enter $9193 | ||
| 6BCA | HALT | |||
| 6BCB | CALL $6469 | Clear 7 bytes at $6433 | ||
| 6BCE | CALL $DC89 | Initialization and go to game main loop | ||
| 6BD1 | CALL $6469 | Clear 7 bytes at $6433 | ||
| 6BD4 | HALT | |||
| 6BD5 | SET 1,(IY+$07) | |||
| 6BD9 | HALT | |||
| 6BDA | LD A,($FD85) | Get last joystick/keyboard bits | ||
| 6BDD | OR $E0 | |||
| 6BDF | INC A | |||
| 6BE0 | BIT 0,(IY+$62) | Is Player alive? | ||
| 6BE4 | JR Z,$6C1D | => Successful end of the Area | ||
|
Player is dead
|
||||
| 6BE6 | LD HL,$FDE7 | |||
| 6BE9 | LD A,(HL) | Get player's grenades number | ||
| 6BEA | CP $07 | |||
| 6BEC | JR NC,$6BF0 | |||
| 6BEE | LD (HL),$06 | Set player's grenades number to max allowed | ||
| 6BF0 | CALL $6C80 | Update grenades number on the screen | ||
| 6BF3 | CALL $7615 | Print immediate string | ||
| 6BF6 | DEFB $16,$00,$15 | char $16: set position (col=$00, row=$15) | ||
| 6BF9 | DEFB $1F | char $1F: end of string | ||
| 6BFA | LD A,($FDE6) | Get lives player have | ||
| 6BFD | ADD A,$2F | |||
| 6BFF | CP $3A | |||
| 6C01 | CALL C,$7637 | Print Char | ||
| 6C04 | DEC (IY+$66) | Minus one live | ||
| 6C07 | JP Z,$6CAE | => Game Over | ||
| 6C0A | LD HL,($FD8A) | |||
| 6C0D | DEC HL | |||
| 6C0E | DEC HL | |||
| 6C0F | DEC HL | |||
| 6C10 | DEC HL | |||
| 6C11 | LD A,(HL) | |||
| 6C12 | CP $22 | |||
| 6C14 | JR NZ,$6C0F | |||
| 6C16 | INC HL | |||
| 6C17 | INC HL | |||
| 6C18 | LD ($FD8A),HL | |||
| 6C1B | JR $6BBE | |||
|
Black screen at the end of an Area
|
||||
| 6C1D | LD A,$47 | |||
| 6C1F | CALL $6B87 | Draw menu box border/frame | ||
| 6C22 | CALL $7615 | Print immediate string | ||
| 6C25 | DEFB $15,$01 | char $15: set/clear flag bit 1 ($FDAF) = $01 | ||
| 6C27 | DEFB $19,$01 | char $19: set flag bit 0 ($FDAF) = $01 | ||
| 6C29 | DEFB $16,$14,$09 | char $16: set position (col=$14, row=$09) | ||
| 6C2C | DEFM "BROKE AREA " | |||
| 6C38 | DEFB $1F | char $1F: end of string | ||
| 6C39 | CALL $6C96 | Print Area number | ||
| 6C3C | INC (IY+$65) | increase Area number | ||
| 6C3F | CALL $7615 | Print immediate string | ||
| 6C42 | DEFB $16,$19,$06 | char $16: set position (col=$19, row=$06) | ||
| 6C45 | DEFM "NOW RUSH TO AREA " | |||
| 6C57 | DEFB $1F | char $1F: end of string | ||
| 6C58 | CALL $6C96 | Print Area number | ||
| 6C5B | LD BC,$0204 | +2000 | ||
| 6C5E | CALL $6825 | Update Score | ||
| 6C61 | LD BC,$0096 | |||
| 6C64 | CALL $7A5C | Delay by BC HALTs | ||
| 6C67 | CALL $7615 | Print immediate string | ||
| 6C6A | DEFB $16,$00,$0D | char $16: set position (col=$00, row=$0D) | ||
| 6C6D | DEFB $1F | char $1F: end of string | ||
| 6C6E | CALL $6C96 | Print Area number | ||
| 6C71 | CALL $7615 | Print immediate string | ||
| 6C74 | DEFB $19,$00 | char $19: set flag bit 0 ($FDAF) = $00 | ||
| 6C76 | DEFB $1F | char $1F: end of string | ||
| 6C77 | JP $6BBE | |||
|
Used by the routine at 6400.
|
||||
|
Adds an amount to the grenade count and stores the new total.
|
||||
| 6C7A | ADD A,(IY+$67) | |||
| 6C7D | LD ($FDE7),A | Update player's grenades number | ||
|
Used by the routine at 6BBB.
|
||||
|
Redraws the grenade count in the status bar.
|
||||
| 6C80 | CALL $7615 | Print immediate string | ||
| 6C83 | DEFB $10,$07 | char $10: set $FDA0 bits 0-2 = $07 | ||
| 6C85 | DEFB $11,$02 | char $11: set $FDA0 bits 3-5 = $02 | ||
| 6C87 | DEFB $19,$00 | char $19: set flag bit 0 ($FDAF) = $00 | ||
| 6C89 | DEFB $18,$00 | char $18: set width counter ($FDB0) = $00 | ||
| 6C8B | DEFB $16,$00,$1E | char $16: set position (col=$00, row=$1E) | ||
| 6C8E | DEFB $15,$00 | char $15: set/clear flag bit 1 ($FDAF) = $00 | ||
| 6C90 | DEFB $1F | char $1F: end of string | ||
| 6C91 | LD A,($FDE7) | Get player's grenades number | ||
| 6C94 | JR $6C99 | => Print 2-digit number A | ||
|
Used by the routine at 6BBB.
|
||||
| 6C96 | LD A,($FDE5) | Get Area number | ||
|
Used by the routine at 6C80.
|
||||||||
|
Prints a two-digit number, counting out the tens and then the units as characters.
|
||||||||
| 6C99 | PUSH BC | |||||||
| 6C9A | LD B,$2F | |||||||
| 6C9C | INC B | |||||||
| 6C9D | SUB $0A | minus 10 | ||||||
| 6C9F | JR NC,$6C9C | |||||||
| 6CA1 | PUSH AF | |||||||
| 6CA2 | LD A,B | |||||||
| 6CA3 | CALL $7637 | Print Char | ||||||
| 6CA6 | POP AF | |||||||
| 6CA7 | ADD A,$3A | |||||||
| 6CA9 | CALL $7637 | Print Char | ||||||
| 6CAC | POP BC | |||||||
| 6CAD | RET | |||||||
|
Used by the routine at 6BBB.
|
||||
|
Game Over. A score that does not make the table drops straight back to the menu; otherwise it draws the letter grid and lets the player steer around it with the joystick, picking out a name one letter at a time before the entry is written into the table.
|
||||
| 6CAE | CALL $70F8 | Find a place in Top Score table | ||
| 6CB1 | OR A | |||
| 6CB2 | JP Z,$69F3 | => Main menu | ||
|
Enter name for the new Top Score record
|
||||
| 6CB5 | SUB $0B | |||
| 6CB7 | NEG | |||
| 6CB9 | LD ($FDB9),A | |||
| 6CBC | XOR A | |||
| 6CBD | LD ($FDBA),A | |||
| 6CC0 | CALL $7274 | Print Score Table | ||
| 6CC3 | CALL $6AE1 | Prepare status bar screen | ||
| 6CC6 | CALL $7615 | Print immediate string | ||
| 6CC9 | DEFB $16,$0C,$01 | char $16: set position (col=$0C, row=$01) | ||
| 6CCC | DEFB $13,$01 | char $13: set fill char ($FD9F) = $01 | ||
| 6CCE | DEFB $1F | char $1F: end of string | ||
| 6CCF | LD HL,$6B67 | Letters to select from entering Top Score | ||
| 6CD2 | LD C,$04 | 4 rows | ||
| 6CD4 | LD B,$08 | 8 columns | ||
| 6CD6 | LD A,(HL) | |||
| 6CD7 | INC HL | |||
| 6CD8 | CALL $7637 | Print Char | ||
| 6CDB | LD A,$09 | |||
| 6CDD | CALL $7637 | Print Char | ||
| 6CE0 | DJNZ $6CD6 | |||
| 6CE2 | CALL $7615 | Print immediate string | ||
| 6CE5 | DEFB $03,$04,$0D | char $03: repeat character $04, $0D times | ||
| 6CE8 | DEFB $1F | char $1F: end of string | ||
| 6CE9 | DEC C | |||
| 6CEA | JR NZ,$6CD4 | |||
| 6CEC | CALL $7615 | Print immediate string | ||
| 6CEF | DEFB $16,$20,$01 | char $16: set position (col=$20, row=$01) | ||
| 6CF2 | DEFB $18,$02 | char $18: set width counter ($FDB0) = $02 | ||
| 6CF4 | DEFB $19,$01 | char $19: set flag bit 0 ($FDAF) = $01 | ||
| 6CF6 | DEFB $11,$01 | char $11: set $FDA0 bits 3-5 = $01 | ||
| 6CF8 | DEFM "ENTER YOUR NAME" | |||
| 6D07 | DEFB $19,$00 | char $19: set flag bit 0 ($FDAF) = $00 | ||
| 6D09 | DEFB $11,$00 | char $11: set $FDA0 bits 3-5 = $00 | ||
| 6D0B | DEFB $13,$00 | char $13: set fill char ($FD9F) = $00 | ||
| 6D0D | DEFB $1F | char $1F: end of string | ||
| 6D0E | LD HL,$70A1 | Copy the marker sprite record into place | ||
| 6D11 | LD DE,$70AF | |||
| 6D14 | LD BC,$000E | Fourteen bytes of it | ||
| 6D17 | LDIR | |||
| 6D19 | LD IX,$70AF | Point at the working copy | ||
| 6D1D | LD B,$11 | |||
| 6D1F | PUSH BC | Animate for seventeen frames | ||
| 6D20 | HALT | |||
| 6D21 | INC (IX+$05) | Step the sprite down a row | ||
| 6D24 | BIT 0,B | Flash the colour on alternate frames | ||
| 6D26 | JR Z,$6D30 | |||
| 6D28 | LD A,($70B6) | Invert the ink | ||
| 6D2B | XOR $0F | |||
| 6D2D | LD ($70B6),A | |||
| 6D30 | CALL $98D0 | Update object IX position, clip to screen, dispatch sprite draw | ||
| 6D33 | HALT | |||
| 6D34 | POP BC | |||
| 6D35 | DJNZ $6D1F | |||
| 6D37 | XOR A | |||
| 6D38 | LD ($70B6),A | |||
| 6D3B | CALL $98D0 | Update object IX position, clip to screen, dispatch sprite draw | ||
| 6D3E | CALL $70EC | Copy 64 bytes $66D1 to $6711 | ||
| 6D41 | LD A,$14 | |||
| 6D43 | LD ($FDB2),A | |||
| 6D46 | XOR A | |||
| 6D47 | LD ($FDB6),A | |||
| 6D4A | CALL $70BD | XOR attribute pattern onto screen, explosion effect | ||
| 6D4D | LD A,($FD98) | Get last key read from keyboard | ||
| 6D50 | OR A | |||
| 6D51 | JR NZ,$6D5A | |||
| 6D53 | LD A,($FD85) | Get last joystick/keyboard bits | ||
| 6D56 | AND $1F | |||
| 6D58 | JR Z,$6D4D | |||
| 6D5A | CALL $7615 | Print immediate string | ||
| 6D5D | DEFB $16,$20,$01 | char $16: set position (col=$20, row=$01) | ||
| 6D60 | DEFB $03,$0F,$20 | char $03: repeat character $20, $0F times | ||
| 6D63 | DEFB $18,$03 | char $18: set width counter ($FDB0) = $03 | ||
| 6D65 | DEFB $1F | char $1F: end of string | ||
| 6D66 | CALL $6FC7 | Prepare records at $6FD9 | ||
| 6D69 | CALL $6F46 | Prepare records at $6FE5 | ||
| 6D6C | LD (IY+$38),$01 | |||
| 6D70 | HALT | |||
| 6D71 | BIT 4,(IY+$05) | Check bit 4 (Fire) of Last joystick/keyboard bits ($FD85) | ||
| 6D75 | JR NZ,$6D7D | |||
| 6D77 | LD (IY+$37),$00 | |||
| 6D7B | JR $6D84 | |||
| 6D7D | LD A,($FDB7) | |||
| 6D80 | OR A | |||
| 6D81 | CALL Z,$6F79 | Find free record in table at $6FD9 | ||
| 6D84 | CALL $6E7B | Update the Top Score name-entry selectors | ||
| 6D87 | DEC (IY+$38) | |||
| 6D8A | JR NZ,$6D93 | |||
| 6D8C | LD (IY+$38),$02 | |||
| 6D90 | CALL $6E11 | Print table row using $6E34 | ||
| 6D93 | HALT | |||
| 6D94 | LD IX,$70AF | |||
| 6D98 | CALL $98D0 | Update object IX position, clip to screen, dispatch sprite draw | ||
| 6D9B | CALL $70BD | XOR attribute pattern onto screen, explosion effect | ||
| 6D9E | LD A,($FD85) | Get last joystick/keyboard bits | ||
| 6DA1 | AND $0C | Left or right pressed, but not both? | ||
| 6DA3 | JP PE,$6DB1 | |||
| 6DA6 | CP $04 | Pick the step direction | ||
| 6DA8 | LD A,$01 | |||
| 6DAA | JR Z,$6DAE | |||
| 6DAC | LD A,$FF | |||
| 6DAE | LD ($FDB6),A | Store the horizontal step | ||
| 6DB1 | LD A,($FDB2) | Advance the cursor position by its step | ||
| 6DB4 | ADD A,(IY+$36) | |||
| 6DB7 | CP $13 | Stop at either end of the grid | ||
| 6DB9 | JR Z,$6DCC | |||
| 6DBB | CP $2D | |||
| 6DBD | JR Z,$6DCC | |||
| 6DBF | LD ($FDB2),A | Store the new position | ||
| 6DC2 | AND $07 | On a cell boundary? | ||
| 6DC4 | CP $04 | |||
| 6DC6 | JR NZ,$6DCC | |||
| 6DC8 | XOR A | Clear the step so it settles | ||
| 6DC9 | LD ($FDB6),A | |||
| 6DCC | LD A,($FD85) | Get last joystick/keyboard bits | ||
| 6DCF | AND $03 | |||
| 6DD1 | JP PE,$6DDD | |||
| 6DD4 | CP $01 | |||
| 6DD6 | JR Z,$6DDA | |||
| 6DD8 | LD A,$FF | |||
| 6DDA | LD ($70BB),A | |||
| 6DDD | LD C,(IX+$0C) | |||
| 6DE0 | CALL $6FF5 | Advance strip position, scroll the $6711 tile buffer | ||
| 6DE3 | LD A,($70B5) | |||
| 6DE6 | OR A | |||
| 6DE7 | JR NZ,$6E02 | |||
| 6DE9 | BIT 0,(IX+$04) | |||
| 6DED | JR NZ,$6E02 | |||
| 6DEF | LD (IX+$0C),$00 | |||
| 6DF3 | LD A,($70BC) | |||
| 6DF6 | CP $03 | |||
| 6DF8 | JR Z,$6E02 | |||
| 6DFA | INC A | |||
| 6DFB | JR C,$6DFF | |||
| 6DFD | SUB $02 | |||
| 6DFF | LD ($70BC),A | |||
| 6E02 | CALL $70BD | XOR attribute pattern onto screen, explosion effect | ||
| 6E05 | JP $6D70 | |||
|
|
||||
|
Name entry is finished: waits for the key to lift, clears the screen and drops back to the menu.
|
||||
| 6E08 | CALL $6B14 | Wait key unpress, wait key press | ||
| 6E0B | CALL $6B21 | Clear playfield and status screen/attribute areas | ||
| 6E0E | JP $69F9 | |||
|
Prints one row of the high-score table, walking the eight entries and skipping any slot that is empty.
|
||||
| 6E11 | LD HL,$6FE5 | Point at the 8 records | ||
| 6E14 | LD B,$08 | |||
| 6E16 | PUSH BC | |||
| 6E17 | LD A,(HL) | |||
| 6E18 | INC HL | |||
| 6E19 | LD C,A | |||
| 6E1A | INC A | Skip inactive entries ($FF) | ||
| 6E1B | JR Z,$6E2F | |||
| 6E1D | LD A,(HL) | |||
| 6E1E | CALL $6E34 | Print char with derived attribute | ||
| 6E21 | INC (HL) | |||
| 6E22 | LD A,(HL) | |||
| 6E23 | CALL $6E34 | Print char with derived attribute | ||
| 6E26 | LD A,(HL) | |||
| 6E27 | CP $20 | Finished at $20? mark it done | ||
| 6E29 | JR NZ,$6E2F | |||
| 6E2B | DEC HL | |||
| 6E2C | LD (HL),$FF | |||
| 6E2E | INC HL | |||
| 6E2F | POP BC | |||
| 6E30 | INC HL | |||
| 6E31 | DJNZ $6E16 | |||
| 6E33 | RET | |||
|
Used by the routine at 6E11.
|
||||||||||
|
Prints one letter of a top-score name in the right place, turning the letter into a screen row and column and feeding that position to the printer as formatting codes before the letter itself.
|
||||||||||
| 6E34 | LD E,C | Set the print position (opcode $16) | ||||||||
| 6E35 | LD D,A | |||||||||
| 6E36 | LD A,$16 | |||||||||
| 6E38 | CALL $7637 | Print Char | ||||||||
| 6E3B | LD A,C | Column from the letter | ||||||||
| 6E3C | SUB $41 | |||||||||
| 6E3E | JR NC,$6E42 | |||||||||
| 6E40 | ADD A,$21 | |||||||||
| 6E42 | AND $F8 | Scale to a screen column | ||||||||
| 6E44 | SRL A | |||||||||
| 6E46 | ADD A,$0C | |||||||||
| 6E48 | CALL $7637 | Print Char | ||||||||
| 6E4B | LD A,C | Row from the letter | ||||||||
| 6E4C | CP $41 | |||||||||
| 6E4E | ADC A,$00 | |||||||||
| 6E50 | DEC A | |||||||||
| 6E51 | AND $07 | |||||||||
| 6E53 | ADD A,A | |||||||||
| 6E54 | INC A | |||||||||
| 6E55 | CALL $7637 | Print Char | ||||||||
| 6E58 | LD A,D | |||||||||
| 6E59 | AND $03 | |||||||||
| 6E5B | RRCA | |||||||||
| 6E5C | JR NC,$6E64 | |||||||||
| 6E5E | LD A,$03 | |||||||||
| 6E60 | LD C,$40 | |||||||||
| 6E62 | JR $6E6B | |||||||||
| 6E64 | OR A | |||||||||
| 6E65 | LD A,$03 | |||||||||
| 6E67 | JR Z,$6E6B | |||||||||
| 6E69 | LD A,$01 | |||||||||
| 6E6B | LD B,A | |||||||||
| 6E6C | LD A,$18 | |||||||||
| 6E6E | CALL $7637 | Print Char | ||||||||
| 6E71 | LD A,B | |||||||||
| 6E72 | CALL $7637 | Print Char | ||||||||
| 6E75 | LD A,C | |||||||||
| 6E76 | CALL $7637 | Print Char | ||||||||
| 6E79 | LD C,E | |||||||||
| 6E7A | RET | |||||||||
|
Used by the routine at 6CAE.
|
||||
|
Steps the four name-entry selectors, each on its own timer. When one expires it works out which letter of the grid it landed on, and either commits that letter or finishes the name on the end marker.
|
||||
| 6E7B | LD IX,$6FD9 | Walk the 4 selectors | ||
| 6E7F | LD B,$04 | |||
| 6E81 | LD A,(IX+$00) | Skip inactive selectors | ||
| 6E84 | INC A | |||
| 6E85 | JR Z,$6E9A | |||
| 6E87 | CALL $6FB0 | |||
| 6E8A | DEC (IX+$02) | Count down its timer, select on zero | ||
| 6E8D | JR Z,$6EA2 | |||
| 6E8F | LD A,(IX+$01) | Move the selector | ||
| 6E92 | SUB $04 | |||
| 6E94 | LD (IX+$01),A | |||
| 6E97 | CALL $6FB0 | |||
| 6E9A | LD DE,$0003 | |||
| 6E9D | ADD IX,DE | |||
| 6E9F | DJNZ $6E81 | |||
| 6EA1 | RET | |||
| 6EA2 | LD L,(IX+$00) | |||
| 6EA5 | LD H,(IX+$01) | |||
| 6EA8 | LD (IX+$00),$FF | |||
| 6EAC | LD A,H | Convert the cursor to a grid cell | ||
| 6EAD | SUB $16 | |||
| 6EAF | AND $F8 | |||
| 6EB1 | SRL L | |||
| 6EB3 | ADD A,L | |||
| 6EB4 | LD HL,$6B67 | Letters to select from entering Top Score | ||
| 6EB7 | CALL $98D3 | HL = HL + A | ||
| 6EBA | LD A,(HL) | |||
| 6EBB | CP $3F | End marker? finish the name | ||
| 6EBD | JR Z,$6F1D | |||
| 6EBF | PUSH BC | |||
| 6EC0 | PUSH AF | |||
| 6EC1 | CALL $6ECD | Draw/move the Top Score name-entry cursor | ||
| 6EC4 | POP AF | |||
| 6EC5 | CP $3E | |||
| 6EC7 | CALL NZ,$6F52 | Look up record in $6FE5 table, mask low bits | ||
| 6ECA | POP BC | |||
| 6ECB | JR $6E9A | |||
|
Used by the routine at 6E7B.
|
||||||||
|
Redraws the name-entry cursor at its current row and column. One special code steps the cursor back instead of forward, and the column wraps round at the end of the row.
|
||||||||
| 6ECD | LD C,A | |||||||
| 6ECE | CALL $7615 | Print immediate string | ||||||
| 6ED1 | DEFB $18,$00 | char $18: set width counter ($FDB0) = $00 | ||||||
| 6ED3 | DEFB $16 | char $16: opens (2 args) but string ends here -- dangling, never dispatched | ||||||
| 6ED4 | DEFB $1F | char $1F: end of string | ||||||
| 6ED5 | LD A,($FDB9) | Cursor row into a print char | ||||||
| 6ED8 | LD H,A | |||||||
| 6ED9 | ADD A,A | Scale to the cursor glyph | ||||||
| 6EDA | ADD A,H | |||||||
| 6EDB | ADD A,$0C | |||||||
| 6EDD | CALL $7637 | Print Char | ||||||
| 6EE0 | LD A,($FDBA) | Cursor column into a print char | ||||||
| 6EE3 | LD E,A | |||||||
| 6EE4 | ADD A,$11 | |||||||
| 6EE6 | CALL $7637 | Print Char | ||||||
| 6EE9 | LD HL,$FDBA | |||||||
| 6EEC | LD A,C | |||||||
| 6EED | CP $3E | Special key ($3E)? | ||||||
| 6EEF | JR NZ,$6EF8 | |||||||
| 6EF1 | INC E | |||||||
| 6EF2 | DEC E | |||||||
| 6EF3 | RET Z | |||||||
| 6EF4 | DEC (HL) | |||||||
| 6EF5 | DEC (HL) | |||||||
| 6EF6 | LD C,$0C | |||||||
| 6EF8 | LD A,(HL) | |||||||
| 6EF9 | INC A | Wrap the column at 9 | ||||||
| 6EFA | CP $09 | |||||||
| 6EFC | RET Z | |||||||
| 6EFD | LD (HL),A | |||||||
| 6EFE | DEC HL | |||||||
| 6EFF | LD A,(HL) | |||||||
| 6F00 | ADD A,A | |||||||
| 6F01 | ADD A,A | |||||||
| 6F02 | ADD A,A | |||||||
| 6F03 | ADD A,A | |||||||
| 6F04 | SUB (HL) | |||||||
| 6F05 | INC HL | |||||||
| 6F06 | ADD A,(HL) | |||||||
| 6F07 | LD HL,$72B2 | Score table address | ||||||
| 6F0A | DEC A | |||||||
| 6F0B | CP $FF | |||||||
| 6F0D | RET Z | |||||||
| 6F0E | CALL $98D3 | HL = HL + A | ||||||
| 6F11 | LD A,C | |||||||
| 6F12 | CP $0C | |||||||
| 6F14 | JR NZ,$6F19 | |||||||
| 6F16 | INC HL | |||||||
| 6F17 | LD C,$20 | |||||||
| 6F19 | LD (HL),C | |||||||
| 6F1A | JP $7637 | => Print Char | ||||||
|
Used by the routine at 6E7B.
|
||||
|
Name-entry outro: draws whatever selectors are still active, animates the table row for a few seconds, then clears the screen and returns to the menu.
|
||||
| 6F1D | LD IX,$6FD9 | Walk the 4 selectors | ||
| 6F21 | LD B,$04 | |||
| 6F23 | LD DE,$0003 | |||
| 6F26 | LD A,(IX+$00) | Draw each active one | ||
| 6F29 | INC A | |||
| 6F2A | CALL NZ,$6FB0 | |||
| 6F2D | ADD IX,DE | |||
| 6F2F | DJNZ $6F26 | |||
| 6F31 | LD B,$14 | Animate for 20 frames | ||
| 6F33 | PUSH BC | |||
| 6F34 | LD B,$04 | |||
| 6F36 | HALT | Wait 4 frames | ||
| 6F37 | DJNZ $6F36 | |||
| 6F39 | CALL $6E11 | Print table row using $6E34 | ||
| 6F3C | POP BC | |||
| 6F3D | DJNZ $6F33 | |||
| 6F3F | POP BC | |||
| 6F40 | CALL $6B21 | Clear playfield and status screen/attribute areas | ||
| 6F43 | JP $69F9 | |||
|
Used by the routine at 6CAE.
|
||||
|
Marks all eight name-entry record slots free.
|
||||
| 6F46 | LD HL,$6FE5 | |||
| 6F49 | LD B,$08 | |||
| 6F4B | LD (HL),$FF | |||
| 6F4D | INC HL | |||
| 6F4E | INC HL | |||
| 6F4F | DJNZ $6F4B | |||
| 6F51 | RET | |||
|
Used by the routine at 6E7B.
|
||||||||||||
|
Looks a value up in the eight-entry record table, trimming the entry it finds; if the value is not there it claims a free slot for it instead.
|
||||||||||||
| 6F52 | LD C,A | Scan table for matching value C | ||||||||||
| 6F53 | LD HL,$6FE5 | |||||||||||
| 6F56 | LD B,$08 | |||||||||||
| 6F58 | LD A,(HL) | |||||||||||
| 6F59 | CP C | |||||||||||
| 6F5A | JR Z,$6F6E | |||||||||||
| 6F5C | INC HL | |||||||||||
| 6F5D | INC HL | |||||||||||
| 6F5E | DJNZ $6F58 | |||||||||||
| 6F60 | LD HL,$6FE5 | Scan for a free ($FF) slot | ||||||||||
| 6F63 | LD B,$08 | |||||||||||
| 6F65 | LD A,(HL) | Free slot? | ||||||||||
| 6F66 | INC A | |||||||||||
| 6F67 | JR Z,$6F74 | |||||||||||
| 6F69 | INC HL | |||||||||||
| 6F6A | INC HL | |||||||||||
| 6F6B | DJNZ $6F65 | |||||||||||
| 6F6D | RET | |||||||||||
| 6F6E | INC HL | Mask found entry to 2 bits | ||||||||||
| 6F6F | LD A,(HL) | |||||||||||
| 6F70 | AND $03 | |||||||||||
| 6F72 | LD (HL),A | |||||||||||
| 6F73 | RET | |||||||||||
| 6F74 | LD (HL),C | Claim it with the value | ||||||||||
| 6F75 | INC HL | |||||||||||
| 6F76 | LD (HL),$00 | |||||||||||
| 6F78 | RET | |||||||||||
|
Used by the routine at 6CAE.
|
||||
|
Claims a free name-entry selector and sets it going, working out its starting animation frame from the current scroll position.
|
||||
| 6F79 | LD A,$FF | |||
| 6F7B | LD ($FDB7),A | |||
| 6F7E | LD IX,$6FD9 | |||
| 6F82 | LD B,$04 | |||
| 6F84 | LD DE,$0003 | |||
| 6F87 | LD A,(IX+$00) | Check record slot free (byte = $FF) | ||
| 6F8A | INC A | |||
| 6F8B | JR Z,$6F92 | |||
| 6F8D | ADD IX,DE | |||
| 6F8F | DJNZ $6F87 | |||
| 6F91 | RET | |||
| 6F92 | LD A,($70B3) | Mark record active, set flag byte | ||
| 6F95 | INC A | |||
| 6F96 | OR $01 | |||
| 6F98 | LD (IX+$00),A | |||
| 6F9B | LD A,$4E | |||
| 6F9D | LD (IX+$01),A | |||
| 6FA0 | SUB (IY+$32) | Compute animation frame index into (IX+$02) | ||
| 6FA3 | SUB $06 | |||
| 6FA5 | AND $F8 | |||
| 6FA7 | SRL A | |||
| 6FA9 | SRL A | |||
| 6FAB | ADD A,$02 | |||
| 6FAD | LD (IX+$02),A | |||
| 6FB0 | LD L,(IX+$00) | |||
| 6FB3 | SLA L | |||
| 6FB5 | SLA L | |||
| 6FB7 | LD H,(IX+$01) | |||
| 6FBA | CALL $98D9 | Convert row number to screen line address | ||
| 6FBD | LD A,(HL) | |||
| 6FBE | XOR $30 | |||
| 6FC0 | LD (HL),A | |||
| 6FC1 | INC H | |||
| 6FC2 | LD A,(HL) | |||
| 6FC3 | XOR $30 | |||
| 6FC5 | LD (HL),A | |||
| 6FC6 | RET | |||
|
Used by the routine at 6CAE.
|
||||
|
Marks all four name-entry selector slots free.
|
||||
| 6FC7 | LD IX,$6FD9 | |||
| 6FCB | LD DE,$0003 | |||
| 6FCE | LD B,$04 | |||
| 6FD0 | LD (IX+$00),$FF | |||
| 6FD4 | ADD IX,DE | |||
| 6FD6 | DJNZ $6FD0 | |||
| 6FD8 | RET | |||
|
|
||||
| 6FD9 | DEFB $00,$00,$00 | |||
| 6FDC | DEFB $00,$00,$00 | |||
| 6FDF | DEFB $00,$00,$00 | |||
| 6FE2 | DEFB $00,$00,$00 | |||
|
|
||||
| 6FE5 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 6FED | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
|
Used by the routine at 6CAE.
|
||||||||||
|
Steps to the next entry in the strip, noting any feature found there, then scrolls the tile buffer a couple of pixels to follow it. Only the top-score name-entry loop calls this, and what the buffer depicts has not been traced.
|
||||||||||
| 6FF5 | LD A,($70B3) | Row index * 4 into A | ||||||||
| 6FF8 | ADD A,A | |||||||||
| 6FF9 | ADD A,A | |||||||||
| 6FFA | ADD A,(IX+$06) | |||||||||
| 6FFD | ADD A,C | |||||||||
| 6FFE | LD B,A | |||||||||
| 6FFF | CP $FF | Stop at the strip end | ||||||||
| 7001 | RET Z | |||||||||
| 7002 | CP $39 | |||||||||
| 7004 | RET Z | |||||||||
| 7005 | AND $03 | Sub-column position | ||||||||
| 7007 | LD ($70B5),A | |||||||||
| 700A | LD A,B | Extract high bits of B into new row | ||||||||
| 700B | SRL A | |||||||||
| 700D | SRL A | |||||||||
| 700F | LD ($70B3),A | |||||||||
| 7012 | LD A,($70BC) | Advance the column pointer | ||||||||
| 7015 | ADD A,C | |||||||||
| 7016 | LD B,A | |||||||||
| 7017 | LD HL,$709A | Look up entry offset in $709A table | ||||||||
| 701A | CALL $98D3 | HL = HL + A | ||||||||
| 701D | LD A,(HL) | |||||||||
| 701E | CP $FF | Nothing here? skip | ||||||||
| 7020 | JR Z,$7029 | |||||||||
| 7022 | LD ($70B6),A | Record the feature | ||||||||
| 7025 | LD A,B | |||||||||
| 7026 | LD ($70BC),A | |||||||||
| 7029 | LD A,($70B5) | Which way to scroll? | ||||||||
| 702C | LD B,C | |||||||||
| 702D | LD C,$02 | |||||||||
| 702F | DJNZ $7037 | |||||||||
| 7031 | OR A | |||||||||
| 7032 | JP Z,$70EC | => Copy 64 bytes $66D1 to $6711 | ||||||||
| 7035 | JR $7057 | |||||||||
| 7037 | INC B | |||||||||
| 7038 | RET Z | |||||||||
| 7039 | CP $03 | |||||||||
| 703B | JR Z,$706E | => Unpack $66D1 record, scale coordinate x4 | ||||||||
| 703D | LD DE,$0007 | Scroll the tile buffer left | ||||||||
| 7040 | LD HL,$6714 | |||||||||
| 7043 | LD B,$10 | |||||||||
| 7045 | SLA (HL) | Rotate one column's bits left | ||||||||
| 7047 | DEC HL | |||||||||
| 7048 | RL (HL) | |||||||||
| 704A | DEC HL | |||||||||
| 704B | RL (HL) | |||||||||
| 704D | DEC HL | |||||||||
| 704E | RL (HL) | |||||||||
| 7050 | ADD HL,DE | |||||||||
| 7051 | DJNZ $7045 | |||||||||
| 7053 | DEC C | |||||||||
| 7054 | JR NZ,$703D | |||||||||
| 7056 | RET | |||||||||
| 7057 | LD HL,$6711 | Scroll the tile buffer right | ||||||||
| 705A | LD B,$10 | |||||||||
| 705C | SRL (HL) | |||||||||
| 705E | INC HL | #1 second buffer byte | ||||||||
| 705F | RR (HL) | |||||||||
| 7061 | INC HL | #2 third byte | ||||||||
| 7062 | RR (HL) | |||||||||
| 7064 | INC HL | #3 fourth byte | ||||||||
| 7065 | RR (HL) | |||||||||
| 7067 | INC HL | |||||||||
| 7068 | DJNZ $705C | |||||||||
| 706A | DEC C | |||||||||
| 706B | JR NZ,$7057 | |||||||||
| 706D | RET | |||||||||
|
Used by the routine at 6FF5.
|
||||
|
Unpacks a run of packed records into the tile buffer, scaling each value up by four as it goes.
|
||||
| 706E | LD HL,$66D1 | Source records ($66D1) | ||
| 7071 | LD DE,$6711 | Destination buffer ($6711) | ||
| 7074 | EXX | |||
| 7075 | LD B,$10 | |||
| 7077 | EXX | |||
| 7078 | LD C,(HL) | Read the 3 packed bytes | ||
| 7079 | INC HL | |||
| 707A | LD B,(HL) | |||
| 707B | INC HL | |||
| 707C | LD A,(HL) | |||
| 707D | INC HL | |||
| 707E | INC HL | |||
| 707F | SLA A | Scale the value left x4 | ||
| 7081 | RL B | |||
| 7083 | RL C | |||
| 7085 | SLA A | |||
| 7087 | RL B | |||
| 7089 | RL C | |||
| 708B | EX DE,HL | |||
| 708C | LD (HL),$00 | Write the 4-byte record | ||
| 708E | INC HL | |||
| 708F | LD (HL),C | |||
| 7090 | INC HL | |||
| 7091 | LD (HL),B | |||
| 7092 | INC HL | |||
| 7093 | LD (HL),A | |||
| 7094 | INC HL | |||
| 7095 | EX DE,HL | |||
| 7096 | EXX | |||
| 7097 | DJNZ $7077 | |||
| 7099 | RET | |||
|
|
||||
| 709A | DEFB $FF,$0B,$0D,$00,$02,$04,$FF,$08 | |||
| 70A2 | DEFB $3D,$00,$07,$08,$3D,$00,$07,$48 | |||
| 70AA | DEFB $5F,$0A,$00,$00,$03,$00,$00,$00 | |||
| 70B2 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 70BA | DEFB $00,$00,$00 | |||
|
Used by the routine at 6CAE.
|
||||
|
XORs a small pattern over sixteen screen rows, flipping the pixels beneath it -- the flashing effect used on the Game Over screen.
|
||||
| 70BD | LD A,($70B3) | Column * 4 | ||
| 70C0 | ADD A,A | |||
| 70C1 | ADD A,A | |||
| 70C2 | LD L,A | |||
| 70C3 | LD A,($FDB2) | Row from ($FDB2) | ||
| 70C6 | ADD A,$02 | |||
| 70C8 | LD H,A | |||
| 70C9 | CALL $98D9 | Convert row number to screen line address | ||
| 70CC | LD B,$10 | |||
| 70CE | LD DE,$6711 | Pattern source ($6711) | ||
| 70D1 | LD C,L | XOR the pattern bytes onto the row | ||
| 70D2 | LD A,(DE) | #0 first pattern byte | ||
| 70D3 | INC DE | |||
| 70D4 | XOR (HL) | |||
| 70D5 | LD (HL),A | |||
| 70D6 | INC L | |||
| 70D7 | LD A,(DE) | #1 second pattern byte | ||
| 70D8 | INC DE | |||
| 70D9 | XOR (HL) | |||
| 70DA | LD (HL),A | |||
| 70DB | INC L | |||
| 70DC | LD A,(DE) | #2 third pattern byte | ||
| 70DD | INC DE | |||
| 70DE | XOR (HL) | |||
| 70DF | LD (HL),A | |||
| 70E0 | INC L | |||
| 70E1 | LD A,(DE) | |||
| 70E2 | INC DE | |||
| 70E3 | XOR (HL) | |||
| 70E4 | LD (HL),A | |||
| 70E5 | LD L,C | |||
| 70E6 | CALL $98DC | DOWN HL | ||
| 70E9 | DJNZ $70D1 | |||
| 70EB | RET | |||
|
Copies the packed record block into the tile buffer.
|
||||
| 70EC | LD HL,$66D1 | |||
| 70EF | LD DE,$6711 | |||
| 70F2 | LD BC,$0040 | |||
| 70F5 | LDIR | |||
| 70F7 | RET | |||
|
Used by the routine at 6CAE.
|
||||||||
|
Ranks a finished score against the high-score table, working down the entries until it finds one the score beats. It reports the position, or zero when the score does not place.
|
||||||||
| 70F8 | LD HL,$FDE8 | Score address | ||||||
| 70FB | LD DE,$72AC | Point at the table entries | ||||||
| 70FE | LD C,$0B | |||||||
| 7100 | LD B,$0F | |||||||
| 7102 | INC DE | Skip to the next entry start | ||||||
| 7103 | DJNZ $7102 | |||||||
| 7105 | PUSH HL | |||||||
| 7106 | PUSH DE | |||||||
| 7107 | EXX | |||||||
| 7108 | POP DE | |||||||
| 7109 | POP HL | |||||||
| 710A | LD B,$06 | |||||||
| 710C | LD A,(DE) | Beat this entry? | ||||||
| 710D | CP (HL) | |||||||
| 710E | JR C,$711C | |||||||
| 7110 | JR NZ,$7116 | |||||||
| 7112 | INC HL | |||||||
| 7113 | INC DE | |||||||
| 7114 | DJNZ $710C | |||||||
| 7116 | EXX | |||||||
| 7117 | DEC C | |||||||
| 7118 | JR NZ,$7100 | |||||||
| 711A | XOR A | No place: return zero | ||||||
| 711B | RET | |||||||
| 711C | EXX | |||||||
| 711D | LD A,C | Remember the rank | ||||||
| 711E | PUSH AF | |||||||
| 711F | DEC A | |||||||
| 7120 | JR Z,$7132 | |||||||
| 7122 | EXX | |||||||
| 7123 | LD HL,$7347 | Top score #10 last char address | ||||||
| 7126 | LD DE,$7356 | Top score #11 last char address | ||||||
| 7129 | LD BC,$000F | Top score line width = 15 | ||||||
| 712C | LDDR | Shift lower entries down | ||||||
| 712E | DEC A | |||||||
| 712F | JR NZ,$7129 | |||||||
| 7131 | EXX | |||||||
| 7132 | LD A,$20 | Blank the freed slot | ||||||
| 7134 | PUSH DE | |||||||
| 7135 | LD B,$09 | |||||||
| 7137 | DEC DE | |||||||
| 7138 | LD (DE),A | |||||||
| 7139 | DJNZ $7137 | |||||||
| 713B | POP DE | |||||||
| 713C | LD BC,$0006 | |||||||
| 713F | LDIR | Copy the score in | ||||||
| 7141 | POP AF | |||||||
| 7142 | RET | |||||||
|
Used by the routine at 69F3.
|
||||
|
Joystick selection screen: lists the four supported types and waits for a matching number key, then returns to the menu.
|
||||
| 7143 | CALL $7615 | Print immediate string | ||
| 7146 | DEFB $11,$02 | char $11: set $FDA0 bits 3-5 = $02 | ||
| 7148 | DEFB $10,$07 | char $10: set $FDA0 bits 0-2 = $07 | ||
| 714A | DEFB $18,$02 | char $18: set width counter ($FDB0) = $02 | ||
| 714C | DEFB $16,$0C,$00 | char $16: set position (col=$0C, row=$00) | ||
| 714F | DEFB $15,$00 | char $15: set/clear flag bit 1 ($FDAF) = $00 | ||
| 7151 | DEFB $19,$01 | char $19: set flag bit 0 ($FDAF) = $01 | ||
| 7153 | DEFM "SELECT" | |||
| 7159 | DEFB $16,$13,$00 | char $16: set position (col=$13, row=$00) | ||
| 715C | DEFB $19,$00 | char $19: set flag bit 0 ($FDAF) = $00 | ||
| 715E | DEFB $11,$00 | char $11: set $FDA0 bits 3-5 = $00 | ||
| 7160 | DEFM "1.KEMPSTON" | |||
| 716A | DEFB $03,$07,$0D | char $03: repeat character $07, $0D times | ||
| 716D | DEFM "2.INTERFACE II" | |||
| 717B | DEFB $03,$07,$0D | char $03: repeat character $07, $0D times | ||
| 717E | DEFM "3.FULLER" | |||
| 7186 | DEFB $03,$07,$0D | char $03: repeat character $07, $0D times | ||
| 7189 | DEFM "4.CURSOR" | |||
| 7191 | DEFB $1F | char $1F: end of string | ||
| 7192 | CALL $6B14 | Wait key unpress, wait key press | ||
| 7195 | CP $31 | < '1' ? | ||
| 7197 | JR C,$7192 | |||
| 7199 | CP $35 | >= '5' ? | ||
| 719B | JR NC,$7192 | |||
| 719D | SUB $30 | char '1'..'4' -> number 1..4 | ||
| 719F | LD ($FD84),A | |||
| 71A2 | CALL $6751 | Set up scrolling string | ||
| 71A5 | JP $6A0A | |||
|
Used by the routine at 6A1E.
|
||||||||
|
Prints a string pointed at by HL, stopping at its end marker.
|
||||||||
| 71A8 | LD A,(HL) | |||||||
| 71A9 | INC HL | |||||||
| 71AA | CP $1F | |||||||
| 71AC | RET Z | |||||||
| 71AD | CALL $7637 | Print Char | ||||||
| 71B0 | JR $71A8 | => Print string HL | ||||||
|
|
||||
| 71B2 | DEFB $07,$05,$46,$06 | |||
|
Used by the routine at 69F3.
|
||||
|
Prints the credits screen, copying the publisher text directly into screen memory a line at a time, then arms the screen wipe so the display dissolves away afterwards.
|
||||
| 71B6 | CALL $725D | Print immediate string checking menu keys | ||
| 71B9 | DEFB $13,$00,$16,$0C,$02,$18,$02,$19 | |||
| 71C1 | DEFB $01,$15,$00 | |||
| 71C4 | DEFM "PUBLISHED BY" | |||
| 71D0 | DEFB $1F | |||
| 71D1 | LD DE,$71B2 | Source text ($71B2) | ||
| 71D4 | LD HL,$5923 | Screen destination ($5923) | ||
| 71D7 | LD C,$04 | |||
| 71D9 | LD B,$0A | Copy 10 chars per line into screen | ||
| 71DB | LD A,(DE) | |||
| 71DC | INC DE | |||
| 71DD | LD (HL),A | |||
| 71DE | INC L | |||
| 71DF | DJNZ $71DD | |||
| 71E1 | LD B,$16 | Gap to the next line | ||
| 71E3 | INC HL | |||
| 71E4 | DJNZ $71E3 | |||
| 71E6 | DEC C | |||
| 71E7 | JR NZ,$71D9 | |||
| 71E9 | LD A,$40 | |||
| 71EB | LD ($FDBC),A | Arm the screen-wipe counter | ||
| 71EE | LD HL,$68CA | Set the wipe handler | ||
| 71F1 | LD ($7392),HL | Point the $7391 call at the screen wipe instead | ||
| 71F4 | SET 2,(IY+$07) | |||
| 71F8 | CALL $725D | Print immediate string checking menu keys | ||
| 71FB | DEFB $16,$1D,$02,$18,$00 | |||
| 7200 | DEFM "CONVERTED BY",$04,$14,$01 | |||
| 720F | DEFM "KEITH BURKHILL",$04 | |||
| 721E | DEFM "& NIGEL ALDERTON",$04,$0D,$14,$01 | |||
| 7232 | DEFM "GRAPHIC DESIGN",$04,$14,$02 | |||
| 7243 | DEFM "RORY & KAREN" | |||
| 724F | DEFB $1F | |||
| 7250 | RET | |||
|
Reads the last key pressed and reports whether it is one of the three menu choices.
|
||||
| 7251 | LD A,($FD98) | Get last key read from keyboard | ||
| 7254 | CP $53 | 'S' - Start game | ||
| 7256 | RET Z | |||
| 7257 | CP $4A | 'J' - Joystick | ||
| 7259 | RET Z | |||
| 725A | CP $4B | 'K' - Redefine keys | ||
| 725C | RET | |||
|
Used by the routine at 71B6.
|
||||
|
Prints a string a character at a time while watching for a menu key, abandoning the string as soon as one is pressed -- so the title screens stay responsive.
|
||||
| 725D | HALT | Wait a frame | ||
| 725E | CALL $7251 | Check menu keys | ||
| 7261 | POP HL | Key pressed? stop | ||
| 7262 | JR Z,$726F | |||
| 7264 | LD A,(HL) | Fetch the next char | ||
| 7265 | INC HL | |||
| 7266 | PUSH HL | |||
| 7267 | CP $1F | End of string? | ||
| 7269 | RET Z | |||
| 726A | CALL $7637 | Print Char | ||
| 726D | JR $725D | => Print immediate string checking menu keys | ||
| 726F | RES 2,(IY+$07) | |||
| 7273 | RET | |||
|
Prints the high-score table: blanks the screen, paints the panel behind it, then feeds the stored table text row by row through the character printer.
|
||||
| 7274 | XOR A | |||
| 7275 | OUT ($FE),A | Set border black | ||
| 7277 | CALL $7615 | Print immediate string | ||
| 727A | DEFB $01 | char $01: reset print format state | ||
| 727B | DEFB $00,$07 | char $00: clear screen, attribute = $07 | ||
| 727D | DEFB $15,$01 | char $15: set/clear flag bit 1 ($FDAF) = $01 | ||
| 727F | DEFB $1F | char $1F: end of string | ||
| 7280 | HALT | |||
| 7281 | LD HL,$58D1 | |||
| 7284 | LD B,$0F | |||
| 7286 | LD C,$10 | |||
| 7288 | LD A,$17 | |||
| 728A | CALL $75BE | Fill screen rectangle with byte | ||
| 728D | CALL $7615 | Print immediate string | ||
| 7290 | DEFB $13,$11 | char $13: set fill char ($FD9F) = $11 | ||
| 7292 | DEFB $16,$0C,$11 | char $16: set position (col=$0C, row=$11) | ||
| 7295 | DEFB $19,$00 | char $19: set flag bit 0 ($FDAF) = $00 | ||
| 7297 | DEFB $1F | char $1F: end of string | ||
| 7298 | LD HL,$72B2 | Score table address | ||
| 729B | LD C,$0B | 11 = score table lines count | ||
| 729D | LD B,$0F | |||
| 729F | LD A,(HL) | |||
| 72A0 | CALL $7637 | Print Char | ||
| 72A3 | INC HL | |||
| 72A4 | DJNZ $729F | |||
| 72A6 | LD A,$0D | |||
| 72A8 | CALL $7637 | Print Char | ||
| 72AB | CALL $7637 | Print Char | ||
| 72AE | DEC C | |||
| 72AF | JR NZ,$729D | |||
| 72B1 | RET | |||
|
Used by the routine at EF37.
|
||||
| 72B2 | DEFM "KEITH... 060000" | |||
| 72C1 | DEFM "NIGUL... 050000" | |||
| 72D0 | DEFM "RORY.... 040000" | |||
| 72DF | DEFM "KAREN... 030000" | |||
| 72EE | DEFM "STUART.. 020000" | |||
| 72FD | DEFM "RAY..... 010000" | |||
| 730C | DEFM "CLARE... 009000" | |||
| 731B | DEFM "CHRIS... 008000" | |||
| 732A | DEFM "DAWN.... 007000" | |||
| 7339 | DEFM "PAT.LYNN 006000" | |||
| 7348 | DEFM "TA.MYK.. 005000" | |||
|
The interrupt handler, and the spine of the frame. It switches to its own stack, verifies the code checksum, reads the controls, ticks the sound and updates the status bar, then restores everything and returns through the delay routine.
|
||||
| 7357 | LD ($FD8F),HL | |||
| 735A | LD HL,$0000 | |||
| 735D | EX (SP),HL | |||
| 735E | LD ($FD92),HL | Patch the $FD91 trampoline to return to the interrupted code | ||
| 7361 | LD ($FD8D),SP | |||
| 7365 | LD SP,$FD80 | |||
| 7368 | PUSH AF | |||
| 7369 | PUSH BC | |||
| 736A | PUSH DE | |||
| 736B | BIT 1,(IY+$07) | |||
| 736F | JR NZ,$73A4 | |||
| 7371 | CALL $7405 | Compute code checksum | ||
| 7374 | CALL $7547 | Read input | ||
| 7377 | LD ($FD85),A | Save the input | ||
| 737A | AND $C0 | |||
| 737C | CP $C0 | |||
| 737E | LD HL,$FDC2 | |||
| 7381 | DEC (HL) | |||
| 7382 | JR NZ,$738D | |||
| 7384 | LD (HL),$02 | |||
| 7386 | SET 0,(IY+$07) | |||
| 738A | CALL $6474 | Sound-effect dispatcher, 7 channels | ||
| 738D | BIT 2,(IY+$07) | |||
| 7391 | CALL NZ,$6975 | Fill status-bar columns down, calling $699A per column | ||
| 7394 | POP DE | |||
| 7395 | POP BC | |||
| 7396 | POP AF | |||
| 7397 | LD HL,($FD8F) | |||
| 739A | LD SP,($FD8D) | |||
| 739E | INC SP | |||
| 739F | INC SP | |||
| 73A0 | EI | |||
| 73A1 | JP $FD91 | => Interrupt return trampoline, built in RAM | ||
| 73A4 | CALL $73B7 | Read Keyboard | ||
| 73A7 | LD ($FD98),A | Save last key read from keyboard | ||
| 73AA | LD ($FD99),BC | |||
| 73AE | BIT 3,(IY+$07) | |||
| 73B2 | CALL NZ,$676B | Scroll the message banner one pixel left | ||
| 73B5 | JR $7374 | |||
|
Used by the routine at 7357.
|
||||
|
Reads the keyboard, scanning the half-rows in turn until it finds one with a key down, then working out which column it was and looking the character up in the key map.
|
||||
| 73B7 | LD BC,$FEFE | |||
| 73BA | LD HL,$73DC | |||
| 73BD | LD DE,$0005 | |||
| 73C0 | IN A,(C) | Read the half-row | ||
| 73C2 | OR $E0 | Keep the five key bits, active high | ||
| 73C4 | CPL | |||
| 73C5 | OR A | |||
| 73C6 | JR NZ,$73D1 | Any key down? go and identify it | ||
| 73C8 | ADD HL,DE | Otherwise step to the next row | ||
| 73C9 | RLC B | |||
| 73CB | JR C,$73C0 | |||
| 73CD | XOR A | |||
| 73CE | LD B,A | |||
| 73CF | LD C,A | |||
| 73D0 | RET | |||
| 73D1 | LD C,B | Key found: set carry marker, clear column counter | ||
| 73D2 | LD B,$00 | |||
| 73D4 | SCF | |||
| 73D5 | INC HL | Advance the map pointer | ||
| 73D6 | RL B | |||
| 73D8 | RRCA | Rotate the next bit into carry | ||
| 73D9 | JR NC,$73D5 | |||
| 73DB | LD A,(HL) | Look up char for (row,column) from keyboard map | ||
| 73DC | RET | |||
|
Keyboard map
|
||||
| 73DD | DEFM $01,"ZXCV" | |||
| 73E2 | DEFM "ASDFG" | |||
| 73E7 | DEFM "QWERT" | |||
| 73EC | DEFM "12345" | |||
| 73F1 | DEFM "09876" | |||
| 73F6 | DEFM "POIUY" | |||
| 73FB | DEFM $0D,"LKJH" | |||
| 7400 | DEFM " ",$02,"MNB" | |||
|
Used by the routine at 7357.
|
||||
|
Anti-tamper check. Each call folds one byte from every code page into a single value and stores it, sweeping a column of memory at a time; once the sweep completes it mixes in a second checksum and saves both halves.
|
||||
| 7405 | LD DE,($FD8D) | Below $8000? no check needed | ||
| 7409 | LD A,D | Above $EFFF? no check needed either | ||
| 740A | CP $80 | |||
| 740C | RET C | |||
| 740D | CP $F0 | |||
| 740F | JP NC,$74FF | |||
| 7412 | CALL $7416 | Fold in the adjacent byte too, then advance | ||
| 7415 | INC DE | |||
| 7416 | LD L,E | Aim at page $80, clear the accumulator | ||
| 7417 | LD H,$80 | |||
| 7419 | XOR A | |||
| 741A | XOR (HL) | XOR page $80 | ||
| 741B | INC H | |||
| 741C | XOR (HL) | |||
| 741D | INC H | |||
| 741E | XOR (HL) | |||
| 741F | INC H | |||
| 7420 | XOR (HL) | |||
| 7421 | INC H | |||
| 7422 | XOR (HL) | |||
| 7423 | INC H | |||
| 7424 | XOR (HL) | |||
| 7425 | INC H | |||
| 7426 | XOR (HL) | |||
| 7427 | INC H | |||
| 7428 | XOR (HL) | |||
| 7429 | INC H | |||
| 742A | XOR (HL) | XOR page $88 | ||
| 742B | INC H | |||
| 742C | XOR (HL) | |||
| 742D | INC H | |||
| 742E | XOR (HL) | |||
| 742F | INC H | |||
| 7430 | XOR (HL) | |||
| 7431 | INC H | |||
| 7432 | XOR (HL) | |||
| 7433 | INC H | |||
| 7434 | XOR (HL) | |||
| 7435 | INC H | |||
| 7436 | XOR (HL) | |||
| 7437 | INC H | |||
| 7438 | XOR (HL) | |||
| 7439 | INC H | |||
| 743A | XOR (HL) | XOR page $90 | ||
| 743B | INC H | |||
| 743C | XOR (HL) | |||
| 743D | INC H | |||
| 743E | XOR (HL) | |||
| 743F | INC H | |||
| 7440 | XOR (HL) | |||
| 7441 | INC H | |||
| 7442 | XOR (HL) | |||
| 7443 | INC H | |||
| 7444 | XOR (HL) | |||
| 7445 | INC H | |||
| 7446 | XOR (HL) | |||
| 7447 | INC H | |||
| 7448 | XOR (HL) | |||
| 7449 | INC H | |||
| 744A | XOR (HL) | XOR page $98 | ||
| 744B | INC H | |||
| 744C | XOR (HL) | |||
| 744D | INC H | |||
| 744E | XOR (HL) | |||
| 744F | INC H | |||
| 7450 | XOR (HL) | |||
| 7451 | INC H | |||
| 7452 | XOR (HL) | |||
| 7453 | INC H | |||
| 7454 | XOR (HL) | |||
| 7455 | INC H | |||
| 7456 | XOR (HL) | |||
| 7457 | INC H | |||
| 7458 | XOR (HL) | |||
| 7459 | INC H | |||
| 745A | XOR (HL) | XOR page $A0 | ||
| 745B | INC H | |||
| 745C | XOR (HL) | |||
| 745D | INC H | |||
| 745E | XOR (HL) | |||
| 745F | INC H | |||
| 7460 | XOR (HL) | |||
| 7461 | INC H | |||
| 7462 | XOR (HL) | |||
| 7463 | INC H | |||
| 7464 | XOR (HL) | |||
| 7465 | INC H | |||
| 7466 | XOR (HL) | |||
| 7467 | INC H | |||
| 7468 | XOR (HL) | |||
| 7469 | INC H | |||
| 746A | XOR (HL) | XOR page $A8 | ||
| 746B | INC H | |||
| 746C | XOR (HL) | |||
| 746D | INC H | |||
| 746E | XOR (HL) | |||
| 746F | INC H | |||
| 7470 | XOR (HL) | |||
| 7471 | INC H | |||
| 7472 | XOR (HL) | |||
| 7473 | INC H | |||
| 7474 | XOR (HL) | |||
| 7475 | INC H | |||
| 7476 | XOR (HL) | |||
| 7477 | INC H | |||
| 7478 | XOR (HL) | |||
| 7479 | INC H | |||
| 747A | XOR (HL) | XOR page $B0 | ||
| 747B | INC H | |||
| 747C | XOR (HL) | |||
| 747D | INC H | |||
| 747E | XOR (HL) | |||
| 747F | INC H | |||
| 7480 | XOR (HL) | |||
| 7481 | INC H | |||
| 7482 | XOR (HL) | |||
| 7483 | INC H | |||
| 7484 | XOR (HL) | |||
| 7485 | INC H | |||
| 7486 | XOR (HL) | |||
| 7487 | INC H | |||
| 7488 | XOR (HL) | |||
| 7489 | INC H | |||
| 748A | XOR (HL) | XOR page $B8 | ||
| 748B | INC H | |||
| 748C | XOR (HL) | |||
| 748D | INC H | |||
| 748E | XOR (HL) | |||
| 748F | INC H | |||
| 7490 | XOR (HL) | |||
| 7491 | INC H | |||
| 7492 | XOR (HL) | |||
| 7493 | INC H | |||
| 7494 | XOR (HL) | |||
| 7495 | INC H | |||
| 7496 | XOR (HL) | |||
| 7497 | INC H | |||
| 7498 | XOR (HL) | |||
| 7499 | INC H | |||
| 749A | XOR (HL) | XOR page $C0 | ||
| 749B | INC H | |||
| 749C | XOR (HL) | |||
| 749D | INC H | |||
| 749E | XOR (HL) | |||
| 749F | INC H | |||
| 74A0 | XOR (HL) | |||
| 74A1 | INC H | |||
| 74A2 | XOR (HL) | |||
| 74A3 | INC H | |||
| 74A4 | XOR (HL) | |||
| 74A5 | INC H | |||
| 74A6 | XOR (HL) | |||
| 74A7 | INC H | |||
| 74A8 | XOR (HL) | |||
| 74A9 | INC H | |||
| 74AA | XOR (HL) | XOR page $C8 | ||
| 74AB | INC H | |||
| 74AC | XOR (HL) | |||
| 74AD | INC H | |||
| 74AE | XOR (HL) | |||
| 74AF | INC H | |||
| 74B0 | XOR (HL) | |||
| 74B1 | INC H | |||
| 74B2 | XOR (HL) | |||
| 74B3 | INC H | |||
| 74B4 | XOR (HL) | |||
| 74B5 | INC H | |||
| 74B6 | XOR (HL) | |||
| 74B7 | INC H | |||
| 74B8 | XOR (HL) | |||
| 74B9 | INC H | |||
| 74BA | XOR (HL) | XOR page $D0 | ||
| 74BB | INC H | |||
| 74BC | XOR (HL) | |||
| 74BD | INC H | |||
| 74BE | XOR (HL) | |||
| 74BF | INC H | |||
| 74C0 | XOR (HL) | |||
| 74C1 | INC H | |||
| 74C2 | XOR (HL) | |||
| 74C3 | INC H | |||
| 74C4 | XOR (HL) | |||
| 74C5 | INC H | |||
| 74C6 | XOR (HL) | |||
| 74C7 | INC H | |||
| 74C8 | XOR (HL) | |||
| 74C9 | INC H | |||
| 74CA | XOR (HL) | XOR page $D8 | ||
| 74CB | INC H | |||
| 74CC | XOR (HL) | |||
| 74CD | INC H | |||
| 74CE | XOR (HL) | |||
| 74CF | INC H | |||
| 74D0 | XOR (HL) | |||
| 74D1 | INC H | |||
| 74D2 | XOR (HL) | |||
| 74D3 | INC H | |||
| 74D4 | XOR (HL) | |||
| 74D5 | INC H | |||
| 74D6 | XOR (HL) | |||
| 74D7 | INC H | |||
| 74D8 | XOR (HL) | |||
| 74D9 | INC H | |||
| 74DA | XOR (HL) | XOR page $E0 | ||
| 74DB | INC H | |||
| 74DC | XOR (HL) | |||
| 74DD | INC H | |||
| 74DE | XOR (HL) | |||
| 74DF | INC H | |||
| 74E0 | XOR (HL) | |||
| 74E1 | INC H | |||
| 74E2 | XOR (HL) | |||
| 74E3 | INC H | |||
| 74E4 | XOR (HL) | |||
| 74E5 | INC H | |||
| 74E6 | XOR (HL) | |||
| 74E7 | INC H | |||
| 74E8 | XOR (HL) | |||
| 74E9 | INC H | |||
| 74EA | XOR (HL) | XOR page $E8 | ||
| 74EB | INC H | |||
| 74EC | XOR (HL) | |||
| 74ED | INC H | |||
| 74EE | XOR (HL) | |||
| 74EF | INC H | |||
| 74F0 | XOR (HL) | |||
| 74F1 | INC H | |||
| 74F2 | XOR (HL) | |||
| 74F3 | INC H | |||
| 74F4 | XOR (HL) | |||
| 74F5 | INC H | |||
| 74F6 | XOR (HL) | |||
| 74F7 | INC H | |||
| 74F8 | XOR (HL) | XOR page $EF, last of the sweep | ||
| 74F9 | INC H | |||
| 74FA | LD H,$FA | Then skip to page $FA | ||
| 74FC | XOR (HL) | XOR page $FA into the sum | ||
| 74FD | LD (DE),A | |||
| 74FE | RET | |||
| 74FF | LD A,($FDF5) | Fold in checksum from $7511, store to ($FD8D) | ||
| 7502 | EX AF,AF' | |||
| 7503 | LD A,($FDF4) | |||
| 7506 | CALL $7511 | XOR AF and AF' with every byte in $F900-F9FF | ||
| 7509 | LD HL,($FD8D) | Point at the stored checksum | ||
| 750C | LD (HL),A | |||
| 750D | EX AF,AF' | Take the other half | ||
| 750E | INC L | |||
| 750F | LD (HL),A | Store it alongside | ||
| 7510 | RET | |||
|
Folds a whole page of memory into a pair of checksum bytes, XORing alternate bytes into each half through the two accumulators.
|
||||
| 7511 | LD HL,$F900 | Set up loop pointer to $F900 | ||
| 7514 | XOR (HL) | #0 | ||
| 7515 | EX AF,AF' | |||
| 7516 | INC L | |||
| 7517 | XOR (HL) | #1 | ||
| 7518 | EX AF,AF' | |||
| 7519 | INC L | |||
| 751A | XOR (HL) | #2 | ||
| 751B | EX AF,AF' | |||
| 751C | INC L | |||
| 751D | XOR (HL) | #3 | ||
| 751E | EX AF,AF' | |||
| 751F | INC L | |||
| 7520 | XOR (HL) | #4 | ||
| 7521 | EX AF,AF' | |||
| 7522 | INC L | |||
| 7523 | XOR (HL) | #5 | ||
| 7524 | EX AF,AF' | |||
| 7525 | INC L | |||
| 7526 | XOR (HL) | #6 | ||
| 7527 | EX AF,AF' | |||
| 7528 | INC L | |||
| 7529 | XOR (HL) | #7 | ||
| 752A | EX AF,AF' | |||
| 752B | INC L | |||
| 752C | XOR (HL) | #8 | ||
| 752D | EX AF,AF' | |||
| 752E | INC L | |||
| 752F | XOR (HL) | #9 | ||
| 7530 | EX AF,AF' | |||
| 7531 | INC L | |||
| 7532 | XOR (HL) | #10 | ||
| 7533 | EX AF,AF' | |||
| 7534 | INC L | |||
| 7535 | XOR (HL) | #11 | ||
| 7536 | EX AF,AF' | |||
| 7537 | INC L | |||
| 7538 | XOR (HL) | #12 | ||
| 7539 | EX AF,AF' | |||
| 753A | INC L | |||
| 753B | XOR (HL) | #13 | ||
| 753C | EX AF,AF' | |||
| 753D | INC L | |||
| 753E | XOR (HL) | #14 | ||
| 753F | EX AF,AF' | |||
| 7540 | INC L | |||
| 7541 | XOR (HL) | #15 | ||
| 7542 | EX AF,AF' | |||
| 7543 | INC L | |||
| 7544 | JR NZ,$7514 | |||
| 7546 | RET | |||
|
Used by the routine at 7357.
|
||||
|
Reads the controls, dispatching to whichever joystick handler the player picked or to the keyboard reader when none is set. Kempston and Fuller read their ports directly; Interface II and Cursor scan the keyboard instead.
|
||||
| 7547 | LD C,$00 | |||
| 7549 | LD A,($FD84) | Get joystick type 0..4 | ||
| 754C | DEC A | |||
| 754D | JP M,$75A8 | => Read keyboard in game mode | ||
| 7550 | ADD A,A | |||
| 7551 | LD HL,$755B | |||
| 7554 | CALL $98D3 | HL = HL + A | ||
| 7557 | CALL $98D6 | (HL) -> HL | ||
| 755A | JP (HL) | Go to joystick read procedure | ||
| 755B | DEFW $7563 | Joystick read procedure addresses | ||
| 755D | DEFW $7569 | |||
| 755F | DEFW $757A | |||
| 7561 | DEFW $7587 | |||
|
|
||||
|
Read Kempston
|
||||
| 7563 | IN A,($1F) | Kempston: read its port directly | ||
| 7565 | AND $1F | |||
| 7567 | LD C,A | Return the direction bits | ||
| 7568 | RET | |||
|
|
||||
|
Read Interface II
|
||||
| 7569 | LD HL,$7570 | Interface II: scan through its port and mask list | ||
| 756C | LD B,$08 | |||
| 756E | JR $75AD | |||
| 7570 | DEFB $EF,$01,$EF,$02,$EF,$04,$EF,$10 | Keyboard ports + bit masks for cursor keys | ||
| 7578 | DEFB $EF,$08 | |||
|
|
||||
|
Read Fuller
|
||||
| 757A | LD B,$10 | Fuller: read its port and count the bit position | ||
| 757C | IN A,($7F) | |||
| 757E | RLCA | |||
| 757F | RRCA | Rotate until the pressed bit falls out | ||
| 7580 | RL B | |||
| 7582 | JR NC,$757F | |||
| 7584 | CPL | Invert, since the port reads active low | ||
| 7585 | LD C,A | |||
| 7586 | RET | |||
|
|
||||
|
Read Cursor
|
||||
| 7587 | LD HL,$758E | Cursor keys: scan through their port and mask list | ||
| 758A | LD B,$08 | |||
| 758C | JR $75AD | |||
| 758E | DEFB $EF,$01,$EF,$08,$EF,$10,$F7,$10 | Keyboard ports + bit masks for cursor keys | ||
| 7596 | DEFB $EF,$04 | |||
|
|
||||
| 7598 | DEFB $FE,$01,$7F,$01,$7F,$04,$FE,$02 | |||
| 75A0 | DEFB $F7,$02,$FB,$02,$EF,$02,$EF,$01 | |||
|
Used by the routine at 7547.
|
||||
|
Reads the movement keys during play, testing each one against its keyboard port and building the direction bits.
|
||||
| 75A8 | LD B,$01 | Set up bit mask, port table pointer | ||
| 75AA | LD HL,$7598 | |||
| 75AD | LD A,(HL) | Read the port | ||
| 75AE | INC HL | |||
| 75AF | IN A,($FE) | Test the key bit against it | ||
| 75B1 | AND (HL) | |||
| 75B2 | INC HL | |||
| 75B3 | JR NZ,$75B6 | |||
| 75B5 | SCF | |||
| 75B6 | RL B | |||
| 75B8 | JR NC,$75AD | |||
| 75BA | LD A,B | |||
| 75BB | OR C | |||
| 75BC | LD C,A | |||
| 75BD | RET | |||
|
||||||||||||||
|
Fills a rectangle of screen or attribute memory with a single byte, row by row.
|
||||||||||||||
| 75BE | LD D,B | Fill row bytes, count in B | ||||||||||||
| 75BF | LD E,L | |||||||||||||
| 75C0 | LD (HL),A | |||||||||||||
| 75C1 | INC L | |||||||||||||
| 75C2 | DJNZ $75C0 | |||||||||||||
| 75C4 | LD B,D | |||||||||||||
| 75C5 | EX AF,AF' | Advance column, wrap to next third | ||||||||||||
| 75C6 | LD A,E | |||||||||||||
| 75C7 | ADD A,$20 | |||||||||||||
| 75C9 | LD L,A | |||||||||||||
| 75CA | JR NC,$75CD | |||||||||||||
| 75CC | INC H | |||||||||||||
| 75CD | EX AF,AF' | |||||||||||||
| 75CE | DEC C | |||||||||||||
| 75CF | JR NZ,$75BF | |||||||||||||
| 75D1 | RET | |||||||||||||
|
Used by the routine at 6A1E.
|
||||||||
|
Prints the label for the key just pressed on the Redefine Keys screen, naming the special keys -- Enter, Space, Caps and Symbol -- and printing anything else as itself, erasing the previous label first.
|
||||||||
| 75D2 | CP $0D | |||||||
| 75D4 | JR Z,$75FB | |||||||
| 75D6 | CP $20 | |||||||
| 75D8 | JR Z,$7608 | |||||||
| 75DA | CP $02 | |||||||
| 75DC | JR C,$75EF | |||||||
| 75DE | JP NZ,$7637 | => Print Char | ||||||
| 75E1 | CALL $7615 | Print immediate string | ||||||
| 75E4 | DEFB $03,$05,$08 | char $03: repeat character $08, 5 times (erase old label) | ||||||
| 75E7 | DEFM "SYMBOL" | |||||||
| 75ED | DEFB $1F | char $1F: end of string | ||||||
| 75EE | RET | |||||||
| 75EF | CALL $7615 | Print immediate string | ||||||
| 75F2 | DEFB $03,$03,$08 | char $03: repeat character $08, 3 times (erase old label) | ||||||
| 75F5 | DEFM "CAPS" | |||||||
| 75F9 | DEFB $1F | char $1F: end of string | ||||||
| 75FA | RET | |||||||
| 75FB | CALL $7615 | Print immediate string | ||||||
| 75FE | DEFB $03,$04,$08 | char $03: repeat character $08, 4 times (erase old label) | ||||||
| 7601 | DEFM "ENTER" | |||||||
| 7606 | DEFB $1F | char $1F: end of string | ||||||
| 7607 | RET | |||||||
| 7608 | CALL $7615 | Print immediate string | ||||||
| 760B | DEFB $03,$04,$08 | char $03: repeat character $08, 4 times (erase old label) | ||||||
| 760E | DEFM "SPACE" | |||||||
| 7613 | DEFB $1F | char $1F: end of string | ||||||
| 7614 | RET | |||||||
|
Prints a string that follows the call inline in the code, reading it from the return address and resuming after its end marker.
|
||||
| 7615 | EX (SP),HL | |||
| 7616 | LD A,(HL) | |||
| 7617 | INC HL | |||
| 7618 | EX (SP),HL | |||
| 7619 | CP $1F | |||
| 761B | RET Z | |||
| 761C | CALL $7637 | Print Char | ||
| 761F | JR $7615 | => Print immediate string | ||
|
Used by the routine at 6400.
|
||||
|
Prints a value as hexadecimal digits, converting each nibble to a character through the decimal-adjust trick.
|
||||
| 7621 | LD A,H | Print high byte via $7626 | ||
| 7622 | CALL $7626 | |||
| 7625 | LD A,L | |||
|
This entry point is used by the routine at 6400.
|
||||
| 7626 | PUSH AF | Save the value | ||
| 7627 | RRCA | Rotate the nibble down | ||
| 7628 | RRCA | |||
| 7629 | RRCA | Twice more, into position | ||
| 762A | RRCA | |||
| 762B | CALL $762F | |||
| 762E | POP AF | |||
| 762F | AND $0F | |||
| 7631 | ADD A,$90 | |||
| 7633 | DAA | |||
| 7634 | ADC A,$40 | |||
| 7636 | DAA | |||
|
||||||||
|
The character printer. Codes from $20 up print directly, while codes below that are opcodes that each declare how many argument bytes follow. Those arguments are collected across successive calls before the routine dispatches to the handler for that opcode, so a whole formatting sequence can be fed in one byte at a time.
|
||||||||
| 7637 | PUSH HL | |||||||
| 7638 | PUSH AF | |||||||
| 7639 | LD A,($FDA7) | get Special-char argument counter | ||||||
| 763C | AND A | |||||||
| 763D | JR Z,$7655 | |||||||
| 763F | POP AF | |||||||
| 7640 | PUSH AF | |||||||
| 7641 | LD HL,($FDA9) | get Special-char argument write pointer | ||||||
| 7644 | LD (HL),A | |||||||
| 7645 | INC HL | |||||||
| 7646 | LD ($FDA9),HL | set Special-char argument write pointer | ||||||
| 7649 | LD A,($FDA7) | get Special-char argument counter | ||||||
| 764C | DEC A | |||||||
| 764D | LD ($FDA7),A | set Special-char argument counter | ||||||
| 7650 | JR Z,$7675 | |||||||
| 7652 | POP AF | |||||||
| 7653 | POP HL | |||||||
| 7654 | RET | |||||||
| 7655 | POP AF | |||||||
| 7656 | PUSH AF | |||||||
| 7657 | CP $20 | $00..$1F ? | ||||||
| 7659 | JP NC,$7687 | no => jump | ||||||
|
Process a special char $00..$1F
|
||||||||
| 765C | LD ($FDA8),A | |||||||
| 765F | LD HL,$78CC | |||||||
| 7662 | CALL $98D3 | HL = HL + A | ||||||
| 7665 | LD A,(HL) | A = $00..$02 | ||||||
| 7666 | LD ($FDA7),A | set Special-char argument counter | ||||||
| 7669 | AND A | |||||||
| 766A | JR Z,$7675 | |||||||
| 766C | LD HL,$FDAB | |||||||
| 766F | LD ($FDA9),HL | set Special-char argument write pointer | ||||||
| 7672 | POP AF | |||||||
| 7673 | POP HL | |||||||
| 7674 | RET | |||||||
| 7675 | LD A,($FDA8) | |||||||
| 7678 | ADD A,A | |||||||
| 7679 | LD HL,$78EC | |||||||
| 767C | CALL $98D3 | HL = HL + A | ||||||
| 767F | CALL $98D6 | (HL) -> HL | ||||||
| 7682 | PUSH HL | Fetch the pending argument bytes | ||||||
| 7683 | LD HL,$FDA5 | |||||||
| 7686 | RET | |||||||
|
Print usual char >= $20
|
||||||||
| 7687 | PUSH BC | Save the registers | ||||||
| 7688 | PUSH DE | |||||||
| 7689 | CP $2E | Map full stop to its glyph | ||||||
| 768B | JR NZ,$768F | |||||||
| 768D | LD A,$3A | |||||||
| 768F | CP $21 | Map exclamation mark to its glyph | ||||||
| 7691 | JR NZ,$7695 | |||||||
| 7693 | LD A,$3C | |||||||
| 7695 | CP $26 | Map ampersand to its glyph | ||||||
| 7697 | JR NZ,$769B | |||||||
| 7699 | LD A,$3D | |||||||
| 769B | SUB $20 | Fold the character down to a glyph index | ||||||
| 769D | JR Z,$76A1 | |||||||
| 769F | SUB $0F | Letters follow the digits in the font | ||||||
| 76A1 | LD HL,$FDAF | Double-width mode set? | ||||||
| 76A4 | BIT 0,(HL) | |||||||
| 76A6 | JR Z,$76B6 | |||||||
| 76A8 | PUSH AF | |||||||
| 76A9 | OR A | |||||||
| 76AA | LD A,$06 | |||||||
| 76AC | CALL NZ,$6456 | Trigger sound effect A | ||||||
| 76AF | LD BC,$0004 | |||||||
| 76B2 | CALL $7A5C | Delay by BC HALTs | ||||||
| 76B5 | POP AF | |||||||
| 76B6 | LD L,A | |||||||
| 76B7 | LD H,$00 | |||||||
| 76B9 | ADD HL,HL | |||||||
| 76BA | ADD HL,HL | |||||||
| 76BB | ADD HL,HL | HL = HL * 8 | ||||||
| 76BC | LD DE,($FDA3) | Get Font address | ||||||
| 76C0 | ADD HL,DE | |||||||
| 76C1 | EX DE,HL | |||||||
| 76C2 | LD HL,($FDA5) | |||||||
| 76C5 | ADD HL,HL | |||||||
| 76C6 | SLA L | |||||||
| 76C8 | CALL $98D9 | Convert row number to screen line address | ||||||
| 76CB | PUSH HL | |||||||
| 76CC | LD B,$07 | |||||||
| 76CE | LD A,($FDB0) | |||||||
| 76D1 | CP $01 | |||||||
| 76D3 | JR C,$7716 | |||||||
| 76D5 | JR Z,$76E6 | |||||||
| 76D7 | CP $02 | |||||||
| 76D9 | JR Z,$770A | |||||||
| 76DB | LD A,(DE) | |||||||
| 76DC | INC DE | |||||||
| 76DD | XOR (HL) | |||||||
| 76DE | LD (HL),A | |||||||
| 76DF | CALL $98DC | DOWN HL | ||||||
| 76E2 | DJNZ $76DB | |||||||
| 76E4 | JR $771E | |||||||
| 76E6 | LD A,(DE) | Take the next font row and shift it out bit by bit | ||||||
| 76E7 | INC DE | |||||||
| 76E8 | ADD A,A | #0 top pixel of the font row | ||||||
| 76E9 | RR C | |||||||
| 76EB | ADD A,A | #1 | ||||||
| 76EC | RR C | |||||||
| 76EE | ADD A,A | #2 | ||||||
| 76EF | RR C | |||||||
| 76F1 | ADD A,A | #3 | ||||||
| 76F2 | RR C | |||||||
| 76F4 | ADD A,A | #4 | ||||||
| 76F5 | RR C | |||||||
| 76F7 | ADD A,A | #5 | ||||||
| 76F8 | RR C | |||||||
| 76FA | ADD A,A | #6 | ||||||
| 76FB | RR C | |||||||
| 76FD | ADD A,A | #7 bottom pixel | ||||||
| 76FE | RR C | |||||||
| 7700 | LD A,(HL) | Merge the row into the screen | ||||||
| 7701 | XOR C | |||||||
| 7702 | LD (HL),A | |||||||
| 7703 | CALL $98DC | DOWN HL | ||||||
| 7706 | DJNZ $76E6 | |||||||
| 7708 | JR $771E | |||||||
| 770A | LD A,(DE) | |||||||
| 770B | INC DE | |||||||
| 770C | LD (HL),A | |||||||
| 770D | INC H | |||||||
| 770E | LD (HL),A | |||||||
| 770F | CALL $98DC | DOWN HL | ||||||
| 7712 | DJNZ $770A | |||||||
| 7714 | JR $771E | |||||||
| 7716 | LD A,(DE) | |||||||
| 7717 | INC DE | |||||||
| 7718 | LD (HL),A | |||||||
| 7719 | CALL $98DC | DOWN HL | ||||||
| 771C | DJNZ $7716 | |||||||
| 771E | LD HL,$FDAF | Second format flag set? take the short exit | ||||||
| 7721 | BIT 1,(HL) | |||||||
| 7723 | POP HL | |||||||
| 7724 | JR NZ,$774B | |||||||
| 7726 | LD A,H | Keep the pixel row within the character | ||||||
| 7727 | AND $07 | |||||||
| 7729 | LD C,A | |||||||
| 772A | LD A,H | Row shifted right three | ||||||
| 772B | RRA | |||||||
| 772C | RRA | |||||||
| 772D | RRA | Masked to a third index | ||||||
| 772E | AND $03 | |||||||
| 7730 | ADD A,(IY+$22) | Add the attribute page base | ||||||
| 7733 | LD H,A | |||||||
| 7734 | LD A,($FDA0) | get Print attribute | ||||||
| 7737 | LD (HL),A | Store the glyph row and the row stride | ||||||
| 7738 | LD DE,$0020 | |||||||
| 773B | LD B,A | Save the byte, count down the repeat | ||||||
| 773C | INC C | |||||||
| 773D | DEC C | |||||||
| 773E | JR Z,$7742 | None left? skip the repeat | ||||||
| 7740 | ADD HL,DE | Step down a line, store it again | ||||||
| 7741 | LD (HL),B | |||||||
| 7742 | LD A,($FDB0) | Double-height mode repeats it once more | ||||||
| 7745 | CP $02 | |||||||
| 7747 | JR NZ,$774B | |||||||
| 7749 | ADD HL,DE | |||||||
| 774A | LD (HL),B | |||||||
| 774B | POP DE | Restore the caller's registers | ||||||
| 774C | POP BC | |||||||
| 774D | LD A,($FDB1) | Index the spacing-mode table | ||||||
| 7750 | ADD A,A | |||||||
| 7751 | LD HL,$775F | |||||||
| 7754 | CALL $98D3 | HL = HL + A | ||||||
| 7757 | CALL $98D6 | (HL) -> HL | ||||||
| 775A | PUSH HL | |||||||
| 775B | LD HL,$FDA5 | |||||||
| 775E | RET | |||||||
|
|
||||
| 775F | DEFW $77C2 | |||
| 7761 | DEFW $77CB | |||
| 7763 | DEFW $77AC | |||
| 7765 | DEFW $77B8 | |||
|
|
||||
|
Print opcode that selects the character spacing mode for what follows.
|
||||
| 7767 | LD A,($FDAB) | |||
| 776A | SUB $08 | |||
| 776C | JP C,$78BF | => -> $7A10 | ||
| 776F | CP $04 | |||
| 7771 | JP NC,$78BF | => -> $7A10 | ||
| 7774 | LD ($FDB1),A | |||
| 7777 | JP $78C4 | => Print opcode exit | ||
|
|
||||
|
Clears the screen: fills the bitmap with zeroes and the attribute area with the colour supplied as the opcode's argument.
|
||||
| 777A | PUSH BC | |||
| 777B | PUSH DE | |||
| 777C | LD A,($FDAB) | Get attribute byte | ||
| 777F | LD E,A | |||
| 7780 | LD D,$00 | |||
| 7782 | CALL $7795 | Fill all screen attributes with D | ||
| 7785 | LD HL,$4000 | |||
| 7788 | LD BC,$0018 | |||
| 778B | CALL $779B | Clear all the screen bits | ||
| 778E | LD D,E | |||
| 778F | CALL $7795 | Fill all screen attributes with D | ||
| 7792 | JP $78C7 | => Print opcode exit | ||
|
Used by the routine at 777A.
|
||||||||
|
Floods the whole attribute area with one colour, walking all three screen thirds.
|
||||||||
| 7795 | LD HL,$5800 | |||||||
| 7798 | LD BC,$0003 | |||||||
|
This entry point is used by the routine at 777A.
|
||||||||
| 779B | LD (HL),D | |||||||
| 779C | INC L | |||||||
| 779D | DJNZ $779B | |||||||
| 779F | INC H | |||||||
| 77A0 | DEC C | |||||||
| 77A1 | JR NZ,$779B | |||||||
| 77A3 | RET | |||||||
|
|
||||
|
Print opcode that steps the format counter on by two and records the character to pad with.
|
||||
| 77A4 | INC HL | |||
| 77A5 | INC (HL) | |||
| 77A6 | INC (HL) | |||
| 77A7 | DEC HL | |||
|
Used by the routine at 77CB.
|
||||
|
Writes the fill character configured at $FD9F to the print cursor position, used for the carriage-return special code.
|
||||
| 77A8 | LD A,($FD9F) | get Fill char for special-char codes $0C/$13/$0D/$09 = $00 | ||
| 77AB | LD (HL),A | |||
|
|
||||
|
Print opcode that advances the format counter, abandoning the string if it runs past the end of the line.
|
||||
| 77AC | INC HL | |||
| 77AD | LD A,(HL) | |||
| 77AE | INC A | |||
| 77AF | LD (HL),A | |||
| 77B0 | CP $31 | |||
| 77B2 | JP NC,$78BF | => -> $7A10 | ||
| 77B5 | JP $78C4 | => Print opcode exit | ||
|
|
||||
|
Print opcode that steps the format counter back, abandoning the string if it would go past the start.
|
||||
| 77B8 | INC HL | |||
| 77B9 | LD A,(HL) | |||
| 77BA | DEC A | |||
| 77BB | LD (HL),A | |||
| 77BC | JP C,$78BF | => -> $7A10 | ||
| 77BF | JP $78C4 | => Print opcode exit | ||
|
|
||||
|
Print opcode that steps the format counter back, abandoning the string if it goes negative.
|
||||
| 77C2 | LD A,(HL) | |||
| 77C3 | DEC A | |||
| 77C4 | LD (HL),A | |||
| 77C5 | JP M,$78BF | => -> $7A10 | ||
| 77C8 | JP $78C4 | => Print opcode exit | ||
|
|
||||
|
Print opcode that advances the format counter and, at the end of the run, records the character to pad with.
|
||||
| 77CB | LD A,(HL) | |||
| 77CC | INC A | |||
| 77CD | LD (HL),A | |||
| 77CE | CP $20 | |||
| 77D0 | JP C,$78C4 | => Print opcode exit | ||
| 77D3 | JR $77A8 | => Char $0D | ||
|
|
||||
|
Print opcode that turns the bright attribute on or off for what follows.
|
||||
| 77D5 | LD HL,$FDA0 | |||
| 77D8 | LD A,(HL) | Clear the old bit 6 | ||
| 77D9 | AND $BF | |||
| 77DB | LD (HL),A | |||
| 77DC | LD A,($FDAB) | |||
| 77DF | CP $02 | Reject args >= 2 | ||
| 77E1 | JP NC,$78BF | => -> $7A10 | ||
| 77E4 | RRCA | Arg to bit 6, merge in | ||
| 77E5 | RRCA | |||
| 77E6 | OR (HL) | |||
| 77E7 | LD (HL),A | |||
| 77E8 | JP $78C4 | => Print opcode exit | ||
|
|
||||
|
Print opcode that sets or clears one of the printer's format flags from its argument.
|
||||
| 77EB | LD HL,$FDAF | |||
| 77EE | LD A,($FDAB) | |||
| 77F1 | CP $02 | |||
| 77F3 | JP NC,$78BF | => -> $7A10 | ||
| 77F6 | RES 0,(HL) | |||
| 77F8 | OR (HL) | |||
| 77F9 | LD (HL),A | |||
| 77FA | JP $78C4 | => Print opcode exit | ||
|
|
||||
|
Print opcode that sets the ink colour used for what follows.
|
||||
| 77FD | LD HL,$FDA0 | |||
| 7800 | LD A,(HL) | |||
| 7801 | AND $F8 | |||
| 7803 | LD (HL),A | |||
| 7804 | LD A,($FDAB) | |||
| 7807 | CP $08 | |||
| 7809 | JP NC,$78BF | => -> $7A10 | ||
| 780C | OR (HL) | |||
| 780D | LD (HL),A | |||
| 780E | JP $78C4 | => Print opcode exit | ||
|
|
||||
|
Sets the paper colour used by the printer, rejecting any value outside the eight colours.
|
||||
| 7811 | LD HL,$FDA0 | |||
| 7814 | LD A,(HL) | Clear the old PAPER bits | ||
| 7815 | AND $C7 | |||
| 7817 | LD (HL),A | |||
| 7818 | LD A,($FDAB) | |||
| 781B | CP $08 | Reject values >= 8 | ||
| 781D | JP NC,$78BF | => -> $7A10 | ||
| 7820 | ADD A,A | Shift the arg into bits 3-5 | ||
| 7821 | ADD A,A | |||
| 7822 | ADD A,A | |||
| 7823 | OR (HL) | |||
| 7824 | LD (HL),A | |||
| 7825 | JP $78C4 | => Print opcode exit | ||
|
|
||||
|
Print opcode that moves the print position, taking a column and a row as its two arguments and abandoning the string if either is out of range.
|
||||
| 7828 | LD A,($FDAC) | |||
| 782B | CP $20 | |||
| 782D | JP NC,$78BF | => -> $7A10 | ||
| 7830 | LD (HL),A | |||
| 7831 | INC HL | |||
| 7832 | LD A,($FDAB) | |||
| 7835 | CP $2F | |||
| 7837 | JP NC,$78BF | => -> $7A10 | ||
| 783A | LD (HL),A | |||
| 783B | JP $78C4 | => Print opcode exit | ||
|
|
||||
|
Print opcode that repeats a character a given number of times -- used to draw the rules and blank runs on the menu screens.
|
||||
| 783E | LD HL,($FDAB) | |||
| 7841 | LD A,H | |||
| 7842 | CALL $7637 | Print Char | ||
| 7845 | DEC L | |||
| 7846 | JR NZ,$7841 | |||
| 7848 | JR $78C4 | => Print opcode exit | ||
|
|
||||
|
Print opcode that sets the character used to pad and fill.
|
||||
| 784A | LD A,($FDAB) | |||
| 784D | LD ($FD9F),A | set Fill char for special-char codes $0C/$13/$0D/$09 = $00 | ||
| 7850 | JR $78C4 | => Print opcode exit | ||
|
|
||||
|
Print opcode that sets a tab stop: the column is taken up if it is ahead of the current one, otherwise the format counter is nudged along instead.
|
||||
| 7852 | LD A,($FDAB) | |||
| 7855 | CP $20 | |||
| 7857 | JP NC,$78BF | => -> $7A10 | ||
| 785A | CP (HL) | |||
| 785B | LD (HL),A | |||
| 785C | JP NC,$78C4 | => Print opcode exit | ||
| 785F | INC HL | |||
| 7860 | LD A,(HL) | |||
| 7861 | ADD A,$02 | |||
| 7863 | LD (HL),A | |||
| 7864 | JR $78C4 | => Print opcode exit | ||
|
|
||||
|
Print opcode that switches the printer to a different font.
|
||||
| 7866 | LD HL,($FDAB) | |||
| 7869 | LD ($FDA3),HL | set Font address = $7EA0 | ||
| 786C | JR $78C4 | => Print opcode exit | ||
|
|
||||
|
Print opcode that pads the current field out with spaces to the width the format state holds, restoring the width afterwards.
|
||||
| 786E | PUSH BC | |||
| 786F | LD HL,$FDB0 | |||
| 7872 | LD B,(HL) | |||
| 7873 | LD (HL),$00 | |||
| 7875 | CALL $7615 | Print immediate string | ||
| 7878 | DEFB $08 | char $08: decrement format counter, abort if negative | ||
| 7879 | DEFB $20 | literal space char | ||
| 787A | DEFB $08 | char $08: decrement format counter, abort if negative | ||
| 787B | DEFB $1F | char $1F: end of string | ||
| 787C | LD (HL),B | |||
| 787D | JR $78C8 | |||
|
|
||||
|
Print opcode that sets the field width used for padding.
|
||||
| 787F | LD A,($FDAB) | |||
| 7882 | LD ($FDB0),A | |||
| 7885 | JR $78C4 | => Print opcode exit | ||
|
|
||||
|
Print opcode that sets or clears the second of the printer's format flags from its argument.
|
||||
| 7887 | LD HL,$FDAF | |||
| 788A | RES 1,(HL) | |||
| 788C | LD A,($FDAB) | |||
| 788F | OR A | |||
| 7890 | JR Z,$78C4 | => Print opcode exit | ||
| 7892 | SET 1,(HL) | |||
| 7894 | JR $78C4 | => Print opcode exit | ||
|
|
||||
|
Print opcode that resets the printer's format state -- colours, width, flags and position -- back to its defaults.
|
||||
| 7896 | LD A,$07 | |||
| 7898 | LD ($FDA0),A | set Print attribute | ||
| 789B | LD A,$01 | |||
| 789D | LD ($FDB1),A | |||
| 78A0 | XOR A | |||
| 78A1 | LD ($FD9F),A | set Fill char for special-char codes $0C/$13/$0D/$09 = $00 | ||
| 78A4 | LD ($FDAF),A | |||
| 78A7 | LD ($FDB0),A | |||
| 78AA | LD HL,$0000 | |||
| 78AD | LD ($FDA5),HL | |||
| 78B0 | LD HL,$7EA0 | Font address | ||
| 78B3 | LD ($FDA3),HL | Set Font address | ||
| 78B6 | LD HL,$5800 | |||
| 78B9 | LD ($FDA1),HL | |||
| 78BC | JP $78C4 | => Print opcode exit | ||
| 78BF | JP $7A10 | => Abort | ||
|
|
||||
|
Extra exit used by handlers that stashed two register pairs, dropping both before falling into the shared exit at 78C4.
|
||||
| 78C2 | POP BC | |||
| 78C3 | POP DE | |||
|
Short exit from the print opcodes, restoring the two registers those handlers save.
|
||||
| 78C4 | POP AF | |||
| 78C5 | POP HL | |||
| 78C6 | RET | |||
|
Used by the routine at 777A.
|
||||
|
Common exit from the print opcodes: restores the saved registers and returns.
|
||||
| 78C7 | POP DE | |||
|
This entry point is used by the routine at 786E.
|
||||
| 78C8 | POP BC | |||
| 78C9 | POP AF | |||
| 78CA | POP HL | |||
| 78CB | RET | |||
|
|
||||
| 78CC | DEFB $01,$00,$01,$02,$00,$00,$00,$00 | |||
| 78D4 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 78DC | DEFB $01,$01,$01,$01,$01,$01,$02,$00 | |||
| 78E4 | DEFB $01,$01,$02,$00,$00,$00,$00,$00 | |||
|
|
||||
| 78EC | DEFW $777A | char $00, 1 arg: clear screen (attributes + bitmap) | ||
| 78EE | DEFW $7896 | char $01, 0 args: reset print format state | ||
| 78F0 | DEFW $7767 | char $02, 1 arg: set spacing/mode ($FDB1), range 0-3 | ||
| 78F2 | DEFW $783E | char $03, 2 args: repeat character H, L times | ||
| 78F4 | DEFW $77A4 | char $04, 0 args: advance format counter by 2, store fill char (unconfirmed) | ||
| 78F6 | DEFW $78BF | char $05, unused (no-op) | ||
| 78F8 | DEFW $78BF | char $06, unused (no-op) | ||
| 78FA | DEFW $78BF | char $07, unused (no-op) | ||
| 78FC | DEFW $77C2 | char $08, 0 args: decrement format counter, abort if negative | ||
| 78FE | DEFW $77CB | char $09, 0 args: increment format counter, store fill char once $20 reached | ||
| 7900 | DEFW $77AC | char $0A, 0 args: increment format counter, abort if it reaches $31 | ||
| 7902 | DEFW $77B8 | char $0B, 0 args: decrement format counter, abort on underflow | ||
| 7904 | DEFW $786E | char $0C, 0 args: print padded field using $FDB0 width | ||
| 7906 | DEFW $77A8 | char $0D, 0 args: store fill char at HL | ||
| 7908 | DEFW $78BF | char $0E, unused (no-op) | ||
| 790A | DEFW $78BF | char $0F, unused (no-op) | ||
| 790C | DEFW $77FD | char $10, 1 arg: set field bits 0-2 of $FDA0 | ||
| 790E | DEFW $7811 | char $11, 1 arg: set field bits 3-5 of $FDA0 | ||
| 7910 | DEFW $77D5 | char $12, 1 arg: set/clear bit 6 of $FDA0 | ||
| 7912 | DEFW $784A | char $13, 1 arg: set fill char ($FD9F) | ||
| 7914 | DEFW $7852 | char $14, 1 arg: set tab stop, advance format counter | ||
| 7916 | DEFW $7887 | char $15, 1 arg: set/clear flag bit 1 ($FDAF) | ||
| 7918 | DEFW $7828 | char $16, 2 args: set print position, bounds-checked | ||
| 791A | DEFW $78BF | char $17, unused (no-op) | ||
| 791C | DEFW $787F | char $18, 1 arg: set width/column counter ($FDB0) | ||
| 791E | DEFW $77EB | char $19, 1 arg: set/clear flag bit 0 ($FDAF) | ||
| 7920 | DEFW $7866 | char $1A, 2 args: set Font address ($FDA3) | ||
| 7922 | DEFW $78BF | char $1B, unused (no-op) | ||
| 7924 | DEFW $78BF | char $1C, unused (no-op) | ||
| 7926 | DEFW $78BF | char $1D, unused (no-op) | ||
| 7928 | DEFW $78BF | char $1E, unused (no-op) | ||
| 792A | DEFW $78BF | char $1F, unused (no-op) | ||
|
Resets the per-Area state -- controls, counters and the vehicle slots -- clears the player's dead flag, then rebuilds the scenery buffer and slot table and draws the surrounding frame.
|
||||
| 792C | XOR A | |||
| 792D | LD ($FD85),A | Clear last joystick/keyboard bits | ||
| 7930 | LD ($FD86),A | Clear Land space size | ||
| 7933 | LD ($FD88),A | Clear Offset in $FF00 buffer | ||
| 7936 | LD ($FDDA),A | |||
| 7939 | LD ($FDE0),A | |||
| 793C | LD ($FDFA),A | |||
| 793F | LD ($FDFB),A | |||
| 7942 | LD A,$FF | |||
| 7944 | LD ($FDC3),A | |||
| 7947 | LD ($FDC5),A | |||
| 794A | LD ($FDC7),A | |||
| 794D | LD ($FDC9),A | |||
| 7950 | LD ($FDCB),A | |||
| 7953 | RES 0,(IY+$62) | Clear Player's dead flag | ||
| 7957 | RES 4,(IY+$15) | |||
| 795B | CALL $79E1 | Init $FF00 buffer entries | ||
| 795E | CALL $6626 | Prepare records and variables at $6648 | ||
| 7961 | LD A,$31 | |||
| 7963 | CALL $6B87 | Draw menu box border/frame | ||
| 7966 | CALL $6BAC | Scroll the Area in, up to $5C steps or until it arrives | ||
| 7969 | RET | |||
|
Starts a new game: points the level sequence at its first record, sets the Area to 1, zeroes the score, gives the player five lives and six grenades, and clears the screen ready to play.
|
||||
| 796A | LD HL,($800A) | |||
| 796D | LD ($FD8A),HL | |||
| 7970 | XOR A | |||
| 7971 | LD ($FDA7),A | set Special-char argument counter | ||
| 7974 | INC A | |||
| 7975 | LD ($FDE5),A | Area number = $01 | ||
| 7978 | LD HL,$FDE8 | Point at the score, six digits | ||
| 797B | LD B,$06 | |||
| 797D | LD (HL),$30 | Fill with $30, count down | ||
| 797F | INC HL | |||
| 7980 | DJNZ $797D | |||
| 7982 | LD A,$05 | Player's lives = $05 | ||
| 7984 | LD ($FDE6),A | |||
| 7987 | INC A | |||
| 7988 | LD ($FDE7),A | Set grenades number = $06 | ||
| 798B | LD A,$00 | Set border black | ||
| 798D | OUT ($FE),A | |||
| 798F | CALL $7615 | Print immediate string | ||
| 7992 | DEFB $01 | char $01: reset print format state | ||
| 7993 | DEFB $00,$30 | char $00: clear screen, attribute = $30 | ||
| 7995 | DEFB $15,$00 | char $15: set/clear flag bit 1 ($FDAF) = $00 | ||
| 7997 | DEFB $16,$00,$00 | char $16: set position (col=$00, row=$00) | ||
| 799A | DEFB $18,$00 | char $18: set width counter ($FDB0) = $00 | ||
| 799C | DEFB $19,$00 | char $19: set flag bit 0 ($FDAF) = $00 | ||
| 799E | DEFB $11,$02 | char $11: set $FDA0 bits 3-5 = $02 | ||
| 79A0 | DEFB $10,$07 | char $10: set $FDA0 bits 0-2 = $07 | ||
| 79A2 | DEFM "000000 AREA 01 MEN 5 BOMBS 06" | |||
| 79C2 | DEFB $1F | char $1F: end of string | ||
| 79C3 | EI | |||
| 79C4 | HALT | |||
| 79C5 | RES 0,(IY+$07) | |||
| 79C9 | RET | |||
|
One-time setup: builds the interrupt vector table ($FB00), the $FE00 even-screen-line table and the checksum reference, then initialises the IY-based system variables.
|
||||
| 79CA | DI | |||
| 79CB | LD IY,$FD80 | |||
| 79CF | CALL $7A1E | Set up interrupt vector table at $FB00 | ||
| 79D2 | CALL $7A45 | Prepare $FE00 table - addresses for every even screen line | ||
| 79D5 | CALL $79FB | Build the $FA00 column-checksum table | ||
| 79D8 | LD (IY+$07),$00 | Clear byte ($FD87) | ||
| 79DC | LD (IY+$42),$02 | Set byte ($FDC2) = $02 | ||
| 79E0 | RET | |||
|
Used by the routine at 792C.
|
||||
|
Initialises the scenery buffer, laying out its thirty-two slots and linking them into a free list.
|
||||
| 79E1 | LD HL,$FF00 | Buffer pointer, 32 entries | ||
| 79E4 | LD C,$20 | |||
| 79E6 | LD A,$08 | |||
| 79E8 | LD (HL),A | Fill first two bytes of entry | ||
| 79E9 | INC L | |||
| 79EA | SUB $10 | |||
| 79EC | LD (HL),A | |||
| 79ED | INC L | |||
| 79EE | ADD A,$18 | |||
| 79F0 | LD B,$06 | |||
| 79F2 | LD (HL),$00 | Zero the rest of the entry | ||
| 79F4 | INC L | |||
| 79F5 | DJNZ $79F2 | |||
| 79F7 | DEC C | Next entry | ||
| 79F8 | JR NZ,$79E8 | |||
| 79FA | RET | |||
|
Used by the routine at 79CA.
|
||||
|
Builds the reference table the anti-tamper check compares against, folding each column of the code pages down into a single byte.
|
||||
| 79FB | LD HL,$8000 | Source page $8000 | ||
| 79FE | LD DE,$FA00 | Checksum buffer $FA00 | ||
| 7A01 | LD B,$70 | 112 rows, clear the total | ||
| 7A03 | XOR A | |||
| 7A04 | XOR (HL) | XOR the next row | ||
| 7A05 | INC H | |||
| 7A06 | DJNZ $7A04 | |||
| 7A08 | LD (DE),A | Store the column checksum | ||
| 7A09 | INC E | |||
| 7A0A | LD H,$80 | Move to the next column | ||
| 7A0C | INC L | |||
| 7A0D | JR NZ,$7A01 | |||
| 7A0F | RET | |||
|
Abort path: restores the saved stack ($FD80) and the IY/HL context off it, switches back to IM 1 and re-enables interrupts before returning to the frame loop.
|
||||
| 7A10 | DI | |||
| 7A11 | LD SP,($FD80) | Restore saved stack pointer | ||
| 7A15 | EXX | |||
| 7A16 | POP IY | Restore IY/HL context | ||
| 7A18 | POP HL | |||
| 7A19 | EXX | |||
| 7A1A | IM 1 | Back to IM 1 | ||
| 7A1C | EI | |||
| 7A1D | RET | |||
|
Used by the routine at 79CA.
|
||||
|
Builds the interrupt vector table so every entry points at the one handler, then switches the Z80 into mode 2.
|
||||
| 7A1E | LD A,($7A42) | Copy IM2 vector byte, fill $FB00 table | ||
| 7A21 | LD ($FD91),A | Install the JP opcode byte at $FD91 | ||
| 7A24 | LD HL,$FB00 | |||
| 7A27 | LD B,$00 | |||
| 7A29 | LD (HL),$FC | |||
| 7A2B | INC HL | |||
| 7A2C | DJNZ $7A29 | |||
| 7A2E | LD (HL),$FC | Terminate table, copy 3 more bytes | ||
| 7A30 | LD DE,$FCFC | |||
| 7A33 | LD HL,$7A42 | |||
| 7A36 | LD BC,$0003 | |||
| 7A39 | LDIR | |||
| 7A3B | LD A,$FB | |||
| 7A3D | LD I,A | |||
| 7A3F | IM 2 | |||
| 7A41 | RET | |||
|
|
||||
| 7A42 | JP $7357 | => Game main loop / frame handler | ||
|
Used by the routine at 79CA.
|
||||
|
Builds the lookup table of screen addresses for every even pixel line, so the blitters can find a row without recomputing it.
|
||||
| 7A45 | LD B,$80 | 128 even lines | ||
| 7A47 | LD DE,$4000 | Screen start $4000 | ||
| 7A4A | LD HL,$FE00 | Table at $FE00 | ||
| 7A4D | LD (HL),E | Low byte of the line address | ||
| 7A4E | INC L | |||
| 7A4F | LD (HL),D | High byte alongside it | ||
| 7A50 | INC L | |||
| 7A51 | EX DE,HL | |||
| 7A52 | CALL $98DC | DOWN HL | ||
| 7A55 | CALL $98DC | DOWN HL | ||
| 7A58 | EX DE,HL | |||
| 7A59 | DJNZ $7A4D | |||
| 7A5B | RET | |||
|
||||||||
|
Waits for a given number of frames by halting until each interrupt arrives.
|
||||||||
| 7A5C | HALT | |||||||
|
This entry point is used by the routine at EF37.
|
||||||||
| 7A5D | DEC BC | |||||||
| 7A5E | LD A,B | |||||||
| 7A5F | OR C | |||||||
| 7A60 | JR NZ,$7A5C | => Delay by BC HALTs | ||||||
| 7A62 | RET | |||||||
|
|
||||
| 7A63 | DEFB $10,$FB,$36,$FC,$11,$FC,$FC,$21 | |||
| 7A6B | DEFB $79,$7A,$01,$03,$00,$ED,$B0,$3E | |||
| 7A73 | DEFB $FB,$ED,$47,$ED,$5E,$C9,$C3,$89 | |||
| 7A7B | DEFB $73,$06,$80,$11,$00,$40,$21,$00 | |||
| 7A83 | DEFB $FE,$73,$2C,$72,$2C,$EB,$CD,$DC | |||
| 7A8B | DEFB $98,$CD,$DC,$98,$EB,$10,$F2,$C9 | |||
| 7A93 | DEFB $76,$0B,$78,$B1,$20,$FA,$C9,$00 | |||
| 7A9B | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 7AA3 | DEFB $07,$07,$07,$00,$00,$00,$00,$00 | |||
| 7AAB | DEFB $00,$00,$08,$88,$88,$80,$00,$00 | |||
| 7AB3 | DEFB $00,$00,$00,$00,$10,$50,$50,$40 | |||
| 7ABB | DEFB $00,$00,$00,$00,$00,$00,$10,$58 | |||
| 7AC3 | DEFB $D0,$40,$00,$00,$00,$00,$00,$00 | |||
| 7ACB | DEFB $10,$5F,$D0,$40,$00,$00,$00,$00 | |||
| 7AD3 | DEFB $00,$00,$10,$4F,$90,$40,$00,$00 | |||
| 7ADB | DEFB $00,$00,$00,$00,$10,$47,$10,$40 | |||
| 7AE3 | DEFB $00,$00,$00,$00,$00,$00,$10,$40 | |||
| 7AEB | DEFB $10,$40,$00,$00,$00,$00,$03,$FF | |||
| 7AF3 | DEFB $90,$47,$10,$3E,$03,$FF,$80,$00 | |||
| 7AFB | DEFB $1C,$00,$50,$48,$90,$01,$1C,$00 | |||
| 7B03 | DEFB $40,$00,$20,$00,$50,$50,$50,$01 | |||
| 7B0B | DEFB $20,$00,$40,$00,$40,$FF,$D0,$50 | |||
| 7B13 | DEFB $50,$3F,$40,$FF,$C0,$00,$43,$FF | |||
| 7B1B | DEFB $90,$50,$50,$7E,$43,$FF,$80,$00 | |||
| 7B23 | DEFB $87,$00,$10,$50,$50,$40,$87,$00 | |||
| 7B2B | DEFB $00,$00,$8C,$00,$10,$50,$50,$40 | |||
| 7B33 | DEFB $8C,$00,$00,$01,$88,$00,$10,$50 | |||
| 7B3B | DEFB $50,$41,$88,$00,$00,$01,$88,$00 | |||
| 7B43 | DEFB $18,$58,$58,$41,$88,$00,$00,$01 | |||
| 7B4B | DEFB $88,$00,$18,$D8,$D8,$C1,$88,$00 | |||
| 7B53 | DEFB $00,$03,$87,$FF,$98,$D8,$D8,$C3 | |||
| 7B5B | DEFB $87,$FF,$80,$03,$80,$00,$58,$D8 | |||
| 7B63 | DEFB $D8,$C3,$80,$00,$40,$03,$C0,$00 | |||
| 7B6B | DEFB $5D,$DD,$DD,$C3,$C0,$00,$40,$03 | |||
| 7B73 | DEFB $FF,$FF,$DF,$DF,$DF,$C3,$FF,$FF | |||
| 7B7B | DEFB $C0,$01,$FF,$FF,$9F,$DF,$DF,$C1 | |||
| 7B83 | DEFB $FF,$FF,$80,$01,$F8,$00,$1F,$DF | |||
| 7B8B | DEFB $DF,$C1,$F8,$00,$00,$01,$F8,$00 | |||
| 7B93 | DEFB $1E,$DE,$DE,$C1,$F8,$00,$00,$00 | |||
| 7B9B | DEFB $FC,$00,$1F,$5F,$5F,$40,$FC,$00 | |||
| 7BA3 | DEFB $00,$00,$FB,$00,$1E,$DE,$DE,$C0 | |||
| 7BAB | DEFB $FB,$00,$00,$00,$75,$FF,$9D,$5D | |||
| 7BB3 | DEFB $5D,$3E,$75,$FF,$80,$00,$7A,$00 | |||
| 7BBB | DEFB $5A,$DA,$DA,$81,$7A,$00,$40,$00 | |||
| 7BC3 | DEFB $3D,$00,$5D,$5D,$5D,$41,$3D,$00 | |||
| 7BCB | DEFB $40,$00,$1F,$FF,$CF,$8F,$8F,$FF | |||
| 7BD3 | DEFB $1F,$FF,$C0,$00,$03,$FF,$87,$07 | |||
| 7BDB | DEFB $07,$FE,$03,$FF,$80,$00,$03,$FF | |||
| 7BE3 | DEFB $FE,$00,$00,$00,$00,$00,$00,$00 | |||
| 7BEB | DEFB $00,$00,$00,$00,$00,$00,$00,$07 | |||
| 7BF3 | DEFB $F8,$00,$00,$00,$7C,$47,$FD,$00 | |||
| 7BFB | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 7C03 | DEFB $00,$00,$00,$00,$00,$FB,$E7,$F8 | |||
| 7C0B | DEFB $00,$00,$88,$0F,$FB,$80,$00,$00 | |||
| 7C13 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 7C1B | DEFB $00,$00,$01,$FF,$F0,$07,$80,$01 | |||
| 7C23 | DEFB $00,$0F,$FB,$C3,$FE,$00,$00,$00 | |||
| 7C2B | DEFB $00,$00,$00,$00,$00,$00,$00,$0E | |||
| 7C33 | DEFB $FF,$FF,$F0,$00,$80,$01,$00,$1F | |||
| 7C3B | DEFB $FF,$FF,$FF,$F0,$00,$00,$00,$00 | |||
| 7C43 | DEFB $00,$00,$00,$00,$01,$B7,$87,$FF | |||
| 7C4B | DEFB $F8,$18,$40,$02,$01,$E0,$FF,$F3 | |||
| 7C53 | DEFB $FF,$C8,$F0,$00,$00,$00,$00,$00 | |||
| 7C5B | DEFB $00,$00,$0F,$5F,$CF,$99,$07,$F0 | |||
| 7C63 | DEFB $40,$04,$FE,$3F,$00,$37,$EF,$BF | |||
| 7C6B | DEFB $F1,$FC,$00,$00,$00,$00,$00,$05 | |||
| 7C73 | DEFB $DF,$DF,$EF,$00,$DC,$0F,$E0,$0F | |||
| 7C7B | DEFB $00,$3F,$EF,$80,$07,$FD,$FE,$26 | |||
| 7C83 | DEFB $78,$00,$00,$00,$1F,$FF,$EF,$FF | |||
| 7C8B | DEFB $00,$FB,$FC,$00,$20,$0A,$04,$FF | |||
| 7C93 | DEFB $C1,$E7,$F0,$05,$F8,$5F,$F8,$7F | |||
| 7C9B | DEFB $03,$F8,$3F,$0F,$EE,$00,$EF,$F2 | |||
| 7CA3 | DEFB $FC,$00,$20,$08,$38,$3F,$07,$F7 | |||
| 7CAB | DEFB $5B,$F8,$00,$7E,$5F,$8F,$83,$E7 | |||
| 7CB3 | DEFB $8B,$8E,$01,$EF,$EF,$E1,$FC,$00 | |||
| 7CBB | DEFB $20,$0B,$C6,$3F,$C6,$F7,$E0,$FC | |||
| 7CC3 | DEFB $FC,$00,$5C,$1F,$83,$F0,$BE,$01 | |||
| 7CCB | DEFB $C7,$C4,$EF,$E1,$FC,$01,$E0,$0C | |||
| 7CD3 | DEFB $00,$3F,$C6,$F7,$F1,$FC,$FC,$78 | |||
| 7CDB | DEFB $00,$1B,$83,$F0,$41,$C7,$C7,$23 | |||
| 7CE3 | DEFB $CE,$00,$FC,$1E,$20,$09,$E0,$3F | |||
| 7CEB | DEFB $C5,$F7,$F1,$FC,$2C,$F6,$7E,$20 | |||
| 7CF3 | DEFB $04,$50,$5F,$07,$C7,$E7,$AF,$A1 | |||
| 7CFB | DEFB $3C,$00,$20,$0E,$00,$FF,$C3,$F7 | |||
| 7D03 | DEFB $F1,$FC,$FE,$FE,$15,$3F,$07,$F0 | |||
| 7D0B | DEFB $5C,$E7,$C7,$E7,$EF,$61,$DF,$00 | |||
| 7D13 | DEFB $00,$08,$03,$3F,$FF,$F7,$F1,$AC | |||
| 7D1B | DEFB $FE,$FE,$7F,$7F,$07,$F8,$47,$E7 | |||
| 7D23 | DEFB $C1,$E7,$EF,$E0,$FC,$70,$20,$08 | |||
| 7D2B | DEFB $04,$3F,$D0,$07,$F1,$F0,$FE,$FE | |||
| 7D33 | DEFB $7F,$FF,$07,$F8,$2F,$F7,$C7,$67 | |||
| 7D3B | DEFB $EF,$E0,$5C,$08,$20,$08,$3A,$3F | |||
| 7D43 | DEFB $D0,$00,$F1,$FC,$4F,$FE,$0F,$FF | |||
| 7D4B | DEFB $07,$F8,$33,$F7,$07,$E3,$E2,$E1 | |||
| 7D53 | DEFB $FC,$06,$20,$09,$81,$3F,$D0,$07 | |||
| 7D5B | DEFB $F1,$FC,$FF,$F4,$7F,$F8,$07,$B8 | |||
| 7D63 | DEFB $3F,$2F,$C7,$84,$EF,$E1,$FC,$19 | |||
| 7D6B | DEFB $A0,$0E,$00,$3A,$3F,$F7,$41,$FC | |||
| 7D73 | DEFB $FD,$EE,$7F,$EF,$0F,$BC,$1F,$FF | |||
| 7D7B | DEFB $C7,$E7,$EF,$E0,$5C,$20,$20,$08 | |||
| 7D83 | DEFB $00,$CF,$C7,$F7,$F1,$FC,$FF,$DE | |||
| 7D8B | DEFB $7F,$FF,$0E,$3C,$1F,$FF,$87,$E7 | |||
| 7D93 | DEFB $EF,$E1,$FC,$00,$20,$08,$00,$1F | |||
| 7D9B | DEFB $C7,$F7,$F1,$FC,$FE,$DE,$78,$EF | |||
| 7DA3 | DEFB $0F,$3C,$1F,$DF,$C7,$E7,$0F,$E1 | |||
| 7DAB | DEFB $9C,$00,$20,$08,$EC,$3F,$C7,$F7 | |||
| 7DB3 | DEFB $F1,$CC,$FA,$BE,$7D,$DF,$0F,$04 | |||
| 7DBB | DEFB $1E,$FF,$C7,$E6,$CF,$E0,$6F,$6C | |||
| 7DC3 | DEFB $20,$0F,$00,$7F,$C7,$F7,$F1,$BC | |||
| 7DCB | DEFB $F9,$BE,$7D,$DF,$0F,$3E,$18,$00 | |||
| 7DD3 | DEFB $00,$C1,$EF,$E1,$FC,$C0,$20,$08 | |||
| 7DDB | DEFB $01,$FF,$C7,$F7,$F1,$FC,$FB,$BE | |||
| 7DE3 | DEFB $7D,$DF,$0E,$FE,$0F,$7F,$C4,$E7 | |||
| 7DEB | DEFB $E1,$73,$FC,$00,$60,$08,$0A,$3F | |||
| 7DF3 | DEFB $EB,$F7,$C0,$FC,$F9,$3E,$3C,$9F | |||
| 7DFB | DEFB $1B,$F8,$1E,$7C,$C7,$C7,$EF,$EF | |||
| 7E03 | DEFB $FC,$00,$60,$08,$00,$3F,$EF,$F7 | |||
| 7E0B | DEFB $F1,$7C,$F9,$3E,$2C,$9F,$1F,$A6 | |||
| 7E13 | DEFB $1F,$3F,$47,$EF,$EF,$DE,$FF,$00 | |||
| 7E1B | DEFB $A0,$08,$0F,$FE,$DE,$77,$FB,$FC | |||
| 7E23 | DEFB $28,$3E,$7C,$1F,$1F,$FF,$1F,$3E | |||
| 7E2B | DEFB $07,$FF,$E7,$FF,$0C,$80,$20,$07 | |||
| 7E33 | DEFB $F0,$1D,$FF,$84,$57,$E4,$F8,$3E | |||
| 7E3B | DEFB $78,$1F,$1F,$1F,$0B,$1C,$C7,$FB | |||
| 7E43 | DEFB $E8,$7F,$B7,$F0,$20,$04,$C0,$03 | |||
| 7E4B | DEFB $FF,$E3,$FF,$F9,$FC,$7F,$72,$3C | |||
| 7E53 | DEFB $A5,$08,$BF,$9B,$EF,$FD,$EF,$BF | |||
| 7E5B | DEFB $F8,$4F,$C0,$03,$20,$0F,$FF,$C3 | |||
| 7E63 | DEFB $9F,$F8,$7C,$7F,$6E,$3F,$BF,$9F | |||
| 7E6B | DEFB $BF,$8F,$EF,$FD,$C7,$DF,$F0,$80 | |||
| 7E73 | DEFB $40,$00,$80,$07,$FF,$81,$BF,$F1 | |||
| 7E7B | DEFB $AC,$7F,$7E,$3F,$BF,$9F,$BF,$8F | |||
| 7E83 | DEFB $EF,$FF,$83,$FF,$F0,$00,$80,$00 | |||
| 7E8B | DEFB $7F,$FF,$FF,$7F,$7F,$EE,$FB,$BE | |||
| 7E93 | DEFB $BD,$DF,$5F,$6F,$5F,$75,$D7,$FF | |||
| 7E9B | DEFB $7D,$FF,$FF,$FF,$00 | |||
|
||||
| 7EA0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| 7EA8 | DEFB $28,$6C,$6C,$6C,$6C,$6C,$28,$00 | |||
| 7EB0 | DEFB $18,$38,$18,$18,$18,$18,$3C,$00 | |||
| 7EB8 | DEFB $5C,$CE,$4E,$1C,$30,$06,$7E,$00 | |||
| 7EC0 | DEFB $6C,$C6,$06,$1C,$06,$C6,$6C,$00 | |||
| 7EC8 | DEFB $0C,$0C,$2C,$4C,$EE,$0C,$1E,$00 | |||
| 7ED0 | DEFB $FE,$FC,$80,$EC,$06,$C6,$EC,$00 | |||
| 7ED8 | DEFB $34,$62,$60,$6C,$66,$66,$34,$00 | |||
| 7EE0 | DEFB $FE,$F8,$86,$1C,$38,$3C,$18,$00 | |||
| 7EE8 | DEFB $6C,$C6,$C6,$6C,$C6,$C6,$6C,$00 | |||
| 7EF0 | DEFB $2C,$66,$66,$36,$06,$46,$2C,$00 | |||
| 7EF8 | DEFB $00,$00,$00,$00,$00,$18,$18,$00 | |||
| 7F00 | DEFB $6C,$9E,$BE,$BE,$5C,$38,$10,$00 | |||
| 7F08 | DEFB $18,$18,$18,$18,$18,$00,$18,$00 | |||
| 7F10 | DEFB $38,$64,$38,$72,$9A,$D8,$6C,$00 | |||
| 7F18 | DEFB $10,$30,$7E,$FE,$7E,$30,$10,$00 | |||
| 7F20 | DEFB $E0,$80,$CC,$8A,$EA,$0A,$0C,$00 | |||
| 7F28 | DEFB $18,$18,$18,$18,$18,$18,$18,$00 | |||
| 7F30 | DEFB $30,$30,$58,$58,$7C,$8C,$9E,$00 | |||
| 7F38 | DEFB $EC,$66,$66,$6C,$66,$66,$EC,$00 | |||
| 7F40 | DEFB $6E,$C6,$C2,$C0,$C0,$C2,$6C,$00 | |||
| 7F48 | DEFB $EC,$66,$66,$66,$66,$66,$EC,$00 | |||
| 7F50 | DEFB $EE,$62,$64,$6C,$64,$62,$EE,$00 | |||
| 7F58 | DEFB $EE,$62,$64,$6C,$64,$60,$E0,$00 | |||
| 7F60 | DEFB $6E,$C6,$C2,$C0,$CE,$C6,$6C,$00 | |||
| 7F68 | DEFB $EE,$6C,$6C,$7C,$6C,$6C,$EE,$00 | |||
| 7F70 | DEFB $3C,$18,$18,$18,$18,$18,$3C,$00 | |||
| 7F78 | DEFB $1E,$0C,$0C,$0C,$CC,$8C,$58,$00 | |||
| 7F80 | DEFB $EE,$64,$68,$78,$6C,$6C,$EE,$00 | |||
| 7F88 | DEFB $F0,$60,$60,$60,$62,$66,$EE,$00 | |||
| 7F90 | DEFB $8E,$DC,$FC,$7C,$AC,$AC,$8E,$00 | |||
| 7F98 | DEFB $C6,$E2,$72,$BA,$9C,$8E,$C6,$00 | |||
| 7FA0 | DEFB $6C,$C6,$C6,$C6,$C6,$C6,$6C,$00 | |||
| 7FA8 | DEFB $EC,$66,$66,$66,$6C,$60,$E0,$00 | |||
| 7FB0 | DEFB $6C,$C6,$C6,$C6,$D6,$CC,$6A,$00 | |||
| 7FB8 | DEFB $EC,$66,$66,$6C,$6C,$66,$E6,$00 | |||
| 7FC0 | DEFB $6E,$E2,$F0,$7C,$1E,$8E,$EC,$00 | |||
| 7FC8 | DEFB $5A,$5A,$18,$18,$18,$18,$18,$00 | |||
| 7FD0 | DEFB $F2,$62,$62,$62,$62,$62,$34,$00 | |||
| 7FD8 | DEFB $F2,$62,$64,$34,$30,$18,$18,$00 | |||
| 7FE0 | DEFB $E2,$6A,$6A,$6A,$34,$34,$34,$00 | |||
| 7FE8 | DEFB $C6,$E4,$70,$38,$1C,$4E,$C6,$00 | |||
| 7FF0 | DEFB $E6,$64,$30,$18,$18,$18,$3C,$00 | |||
| 7FF8 | DEFB $F6,$CE,$9C,$38,$72,$E6,$DE,$00 | |||
|
|
||||
| 8000 | JP $6400 | => Block of redirects | ||
| 8003 | JP $9193 | => Advance level scroll | ||
| 8006 | JP $91AA | |||
|
|
||||
| 8009 | JP $9236 | |||
|
Used by the routine at 69B4.
|
||||
| 800C | JP $8E92 | => Shift-add multiply | ||
| 800F | JP $806B | => Mark map cells for object IX, direction-aware | ||
|
|
||||
| 8012 | DEFW $86F5 | |||
| 8014 | DEFW $90AC | |||
| 8016 | DEFW $9014 | |||
| 8018 | DEFW $9005 | |||
| 801A | DEFW $8F42 | |||
| 801C | DEFW $8F49 | |||
| 801E | DEFW $903E | |||
| 8020 | DEFW $87F1 | |||
| 8022 | DEFW $876E | |||
| 8024 | DEFW $8F17 | |||
| 8026 | DEFW $8F26 | |||
| 8028 | DEFW $8F35 | |||
| 802A | DEFW $8DCC | |||
| 802C | DEFW $8D5D | |||
| 802E | DEFW $8EB5 | |||
| 8030 | DEFW $8ECC | |||
| 8032 | DEFW $8EE3 | |||
| 8034 | DEFW $8E74 | |||
| 8036 | DEFW $8E83 | |||
| 8038 | DEFW $8301 | |||
| 803A | DEFW $88FD | |||
| 803C | DEFW $8914 | |||
| 803E | DEFW $872F | |||
| 8040 | DEFW $897F | |||
| 8042 | DEFW $8D58 | |||
| 8044 | DEFW $8594 | |||
| 8046 | DEFW $8458 | |||
| 8048 | DEFW $83A4 | |||
| 804A | DEFW $833F | |||
| 804C | DEFW $832F | |||
| 804E | DEFW $8344 | |||
| 8050 | DEFW $822B | |||
| 8052 | DEFW $818F | |||
| 8054 | DEFW $8187 | |||
| 8056 | DEFW $8169 | |||
| 8058 | DEFW $8178 | |||
| 805A | DEFW $8164 | |||
| 805C | DEFW $904D | |||
| 805E | DEFW $8158 | |||
| 8060 | DEFW $8062 | |||
|
|
||||
|
Ends the enemy run with rocket launchers, setting the scroll target and arming its timer.
|
||||
| 8062 | LD (IY+$7B),E | |||
| 8065 | LD (IY+$7D),$01 | |||
| 8069 | SCF | |||
| 806A | RET | |||
|
||||||||
|
Stamps an object's footprint onto the collision map, using its direction of travel to decide which cells to mark -- so as it moves it releases the cells behind it while claiming those ahead.
|
||||||||
| 806B | EXX | |||||||
| 806C | LD D,(IX+$01) | |||||||
| 806F | LD E,(IX+$00) | |||||||
| 8072 | LD A,(IX+$07) | |||||||
| 8075 | CP $12 | |||||||
| 8077 | JR Z,$80D6 | |||||||
| 8079 | LD H,(IX+$05) | |||||||
| 807C | LD L,(IX+$04) | |||||||
| 807F | LD A,L | |||||||
| 8080 | CP E | |||||||
| 8081 | JR Z,$8092 | |||||||
| 8083 | JP M,$808B | |||||||
| 8086 | CALL $80FB | Mark cells in $1600 map, B=1 | ||||||
| 8089 | JR $8092 | |||||||
| 808B | INC E | |||||||
| 808C | INC E | |||||||
| 808D | CALL $80FB | Mark cells in $1600 map, B=1 | ||||||
| 8090 | DEC E | |||||||
| 8091 | DEC E | |||||||
| 8092 | CALL $8101 | Mark cells in $1600 map, B=C | ||||||
| 8095 | INC L | |||||||
| 8096 | CALL $8101 | Mark cells in $1600 map, B=C | ||||||
| 8099 | INC L | |||||||
| 809A | CALL $8101 | Mark cells in $1600 map, B=C | ||||||
| 809D | DEC L | |||||||
| 809E | DEC L | |||||||
| 809F | LD A,D | |||||||
| 80A0 | AND $FC | |||||||
| 80A2 | LD B,A | |||||||
| 80A3 | LD A,H | |||||||
| 80A4 | AND $FC | |||||||
| 80A6 | CP B | |||||||
| 80A7 | JR Z,$80B4 | |||||||
| 80A9 | JP M,$80B1 | |||||||
| 80AC | CALL $80E4 | Mark 3 cells in $1600 map, B=1 | ||||||
| 80AF | JR $80B4 | |||||||
| 80B1 | CALL $80EA | Mark 3 cells in $1600 map, B=C | ||||||
| 80B4 | LD A,D | |||||||
| 80B5 | INC A | |||||||
| 80B6 | AND $FC | |||||||
| 80B8 | LD B,A | |||||||
| 80B9 | LD A,H | |||||||
| 80BA | INC A | |||||||
| 80BB | AND $FC | |||||||
| 80BD | CP B | |||||||
| 80BE | JR Z,$80D3 | |||||||
| 80C0 | JP M,$80CC | |||||||
| 80C3 | LD A,H | |||||||
| 80C4 | ADD A,$0A | |||||||
| 80C6 | LD A,H | |||||||
| 80C7 | CALL $80EA | Mark 3 cells in $1600 map, B=C | ||||||
| 80CA | JR $80D3 | |||||||
| 80CC | LD A,D | |||||||
| 80CD | ADD A,$0A | |||||||
| 80CF | LD D,A | |||||||
| 80D0 | CALL $80E4 | Mark 3 cells in $1600 map, B=1 | ||||||
| 80D3 | JP $98D0 | => Update object IX position, clip to screen, dispatch sprite draw | ||||||
| 80D6 | CALL $80FB | Mark cells in $1600 map, B=1 | ||||||
| 80D9 | INC E | |||||||
| 80DA | CALL $80FB | Mark cells in $1600 map, B=1 | ||||||
| 80DD | INC E | |||||||
| 80DE | CALL $80FB | Mark cells in $1600 map, B=1 | ||||||
| 80E1 | JP $98D0 | => Update object IX position, clip to screen, dispatch sprite draw | ||||||
|
Used by the routine at 806B.
|
||||||||
|
Marks three cells of the collision map, entering the shared marking loop with a fixed count.
|
||||||||
| 80E4 | PUSH DE | |||||||
| 80E5 | EXX | |||||||
| 80E6 | LD B,$01 | |||||||
| 80E8 | JR $80ED | |||||||
|
Used by the routine at 806B.
|
||||||||
|
Marks three neighbouring cells of the collision map, stepping along the row.
|
||||||||
| 80EA | PUSH HL | |||||||
| 80EB | EXX | |||||||
| 80EC | LD B,C | |||||||
|
This entry point is used by the routine at 80E4.
|
||||||||
| 80ED | POP DE | |||||||
| 80EE | CALL $8122 | Set/test flag in $1600 map at tile | ||||||
| 80F1 | INC E | |||||||
| 80F2 | CALL $8122 | Set/test flag in $1600 map at tile | ||||||
| 80F5 | INC E | |||||||
| 80F6 | CALL $8122 | Set/test flag in $1600 map at tile | ||||||
| 80F9 | EXX | |||||||
| 80FA | RET | |||||||
|
Used by the routine at 806B.
|
||||||||
|
Marks a single cell of the collision map, entering the shared marking loop with a count of one.
|
||||||||
| 80FB | PUSH DE | |||||||
| 80FC | EXX | |||||||
| 80FD | LD B,$01 | |||||||
| 80FF | JR $8104 | |||||||
|
Used by the routine at 806B.
|
||||||||||
|
Marks a short run of cells down one column of the collision map, stepping four rows at a time.
|
||||||||||
| 8101 | PUSH HL | |||||||||
| 8102 | EXX | |||||||||
| 8103 | LD B,C | |||||||||
|
This entry point is used by the routine at 80FB.
|
||||||||||
| 8104 | POP DE | |||||||||
| 8105 | CALL $8122 | Set/test flag in $1600 map at tile | ||||||||
| 8108 | LD A,D | |||||||||
| 8109 | ADD A,$04 | |||||||||
| 810B | LD D,A | |||||||||
| 810C | CALL $8122 | Set/test flag in $1600 map at tile | ||||||||
| 810F | LD A,D | |||||||||
| 8110 | ADD A,$04 | |||||||||
| 8112 | LD D,A | |||||||||
| 8113 | CALL $8122 | Set/test flag in $1600 map at tile | ||||||||
| 8116 | LD A,D | |||||||||
| 8117 | ADD A,$04 | |||||||||
| 8119 | LD D,A | |||||||||
| 811A | INC A | |||||||||
| 811B | AND $03 | |||||||||
| 811D | CALL Z,$8122 | Set/test flag in $1600 map at tile | ||||||||
| 8120 | EXX | |||||||||
| 8121 | RET | |||||||||
|
||||||||||||
|
Reads or sets a flag on one cell of the collision map, working the map address out from the row and column.
|
||||||||||||
| 8122 | LD A,E | |||||||||||
| 8123 | CP $20 | Reject if column (E) out of range | ||||||||||
| 8125 | RET NC | |||||||||||
| 8126 | LD A,D | Reject if row (D) out of range | ||||||||||
| 8127 | DEC A | |||||||||||
| 8128 | CP $5F | |||||||||||
| 812A | RET NC | |||||||||||
| 812B | INC A | |||||||||||
| 812C | CP $04 | |||||||||||
| 812E | RET C | |||||||||||
| 812F | ADD A,A | Column * 4 into A | ||||||||||
| 8130 | ADD A,A | |||||||||||
| 8131 | LD H,$16 | Row bit 8 into the map base | ||||||||||
| 8133 | RL H | |||||||||||
| 8135 | ADD A,A | Doubled and folded in too | ||||||||||
| 8136 | RL H | |||||||||||
| 8138 | AND $E0 | |||||||||||
| 813A | OR E | |||||||||||
| 813B | LD L,A | |||||||||||
| 813C | LD A,B | B=1: test flag only | ||||||||||
| 813D | CP $01 | |||||||||||
| 813F | JR Z,$814D | |||||||||||
| 8141 | LD A,(HL) | |||||||||||
| 8142 | AND $07 | |||||||||||
| 8144 | CP $01 | |||||||||||
| 8146 | RET NZ | |||||||||||
| 8147 | LD A,(HL) | Merge flag bits, write back | ||||||||||
| 8148 | AND $38 | |||||||||||
| 814A | OR B | |||||||||||
| 814B | LD (HL),A | |||||||||||
| 814C | RET | |||||||||||
| 814D | LD A,(HL) | |||||||||||
| 814E | AND $07 | |||||||||||
| 8150 | CP C | |||||||||||
| 8151 | RET NZ | |||||||||||
| 8152 | LD A,(HL) | |||||||||||
| 8153 | AND $38 | |||||||||||
| 8155 | OR B | |||||||||||
| 8156 | LD (HL),A | |||||||||||
| 8157 | RET | |||||||||||
|
|
||||
|
Turns the alarm on: triggers the sound effect, then draws. It heads a run of small scenery handlers sharing one block, each reached from the $8012 table by its own record code.
|
||||
| 8158 | LD A,$01 | |||
| 815A | DEC E | |||
| 815B | JR Z,$815F | |||
| 815D | LD A,$07 | |||
| 815F | CALL $642D | |||
| 8162 | SCF | |||
| 8163 | RET | |||
|
|
||||
|
Draws the right-hand end of a trench, loading its sprite and joining the neighbouring handler's draw path.
|
||||
| 8164 | LD HL,($C02C) | |||
| 8167 | JR $816C | |||
|
|
||||
|
Draws the left-hand end of a trench while its row is on screen.
|
||||
| 8169 | LD HL,($C028) | |||
|
This entry point is used by the routine at 8164.
|
||||
| 816C | LD A,D | |||
| 816D | CP $65 | |||
| 816F | CCF | |||
| 8170 | RET C | |||
| 8171 | LD B,$06 | |||
| 8173 | LD C,$30 | |||
| 8175 | JP $8A7B | => Sprite draw dispatch | ||
|
|
||||
|
Draws the middle of a trench while its row is on screen.
|
||||
| 8178 | LD A,D | |||
| 8179 | CP $65 | |||
| 817B | CCF | |||
| 817C | RET C | |||
| 817D | LD HL,($C02A) | |||
| 8180 | LD B,$06 | |||
| 8182 | LD C,$30 | |||
| 8184 | JP $8B4B | => Sprite draw dispatch | ||
|
|
||||
|
Marks a spawn point in the level sequence. Dying rewinds the sequence pointer back to the last one of these, so the Area replays from here.
|
||||
| 8187 | DEC E | |||
| 8188 | SCF | |||
| 8189 | RET NZ | |||
| 818A | SET 4,(IY+$15) | |||
| 818E | RET | |||
|
|
||||
|
Draws the fortress gates: clips the block against the screen edge, then fills it a row at a time, narrowing the fill when the level counter says the gates are at their edge.
|
||||
| 818F | LD BC,$1701 | Block size $17 by $01 | ||
| 8192 | CALL $867C | Clip sprite rectangle against screen edge | ||
| 8195 | RET C | |||
| 8196 | EX DE,HL | |||
| 8197 | LD A,E | Step the column back eight | ||
| 8198 | SUB $08 | |||
| 819A | LD E,A | |||
| 819B | LD C,$02 | Default fill width | ||
| 819D | LD A,($FDE0) | Narrower fill at the level's edge | ||
| 81A0 | CP $1F | |||
| 81A2 | JR NZ,$81A6 | |||
| 81A4 | LD C,$01 | |||
| 81A6 | LD A,$08 | Set drop type A=8 for draw address calc | ||
| 81A8 | CALL $899E | Compute screen draw address for sprite, save state to buffer | ||
| 81AB | LD A,E | Step the column forward again | ||
| 81AC | ADD A,$08 | |||
| 81AE | LD E,A | |||
| 81AF | EX DE,HL | |||
| 81B0 | LD DE,$FFFF | Fill value: all bits set | ||
| 81B3 | EXX | Swap in, load $FFFF | ||
| 81B4 | LD HL,$FFFF | |||
| 81B7 | LD B,H | Spread it into B, C, D and E too | ||
| 81B8 | LD C,H | |||
| 81B9 | LD D,H | |||
| 81BA | LD E,H | |||
| 81BB | LD A,($FDE0) | Load the level's edge counter | ||
| 81BE | SLA B | Rotate the mask one bit narrower | ||
| 81C0 | RL C | |||
| 81C2 | RL H | |||
| 81C4 | RL L | |||
| 81C6 | SRL E | ...continue through the other half | ||
| 81C8 | RR D | |||
| 81CA | EXX | |||
| 81CB | RR E | ...and its swapped-bank tail | ||
| 81CD | RR D | |||
| 81CF | EXX | |||
| 81D0 | DEC A | Count down, loop until the width is trimmed | ||
| 81D1 | JP P,$81BE | |||
| 81D4 | EXX | Trimmed width reached $17? | ||
| 81D5 | LD A,B | |||
| 81D6 | CP $17 | |||
| 81D8 | JR NZ,$81EF | No: skip the narrow-fill step | ||
| 81DA | LD A,$08 | Otherwise blank $08 bytes from the right edge | ||
| 81DC | DEC L | |||
| 81DD | LD (HL),$00 | |||
| 81DF | DEC A | |||
| 81E0 | JR NZ,$81DC | |||
| 81E2 | INC H | Then $08 more from the row below | ||
| 81E3 | LD A,$08 | |||
| 81E5 | LD (HL),$00 | |||
| 81E7 | INC L | ...counting both down together | ||
| 81E8 | DEC A | |||
| 81E9 | JR NZ,$81E5 | |||
| 81EB | DEC B | One row shorter overall | ||
| 81EC | CALL $98DC | DOWN HL | ||
| 81EF | LD ($FD82),SP | Point SP at the fill buffer | ||
| 81F3 | LD SP,HL | Push the first two rows through the stack | ||
| 81F4 | PUSH DE | |||
| 81F5 | EXX | |||
| 81F6 | PUSH DE | |||
| 81F7 | PUSH BC | ...and the third and fourth | ||
| 81F8 | PUSH HL | |||
| 81F9 | EXX | Swap back, drop a pixel line | ||
| 81FA | INC H | |||
| 81FB | LD SP,HL | |||
| 81FC | PUSH DE | Repeat for the second half | ||
| 81FD | EXX | |||
| 81FE | PUSH DE | ...its own two rows | ||
| 81FF | PUSH BC | |||
| 8200 | PUSH HL | |||
| 8201 | EXX | Swap back, drop a pixel line | ||
| 8202 | INC H | |||
| 8203 | LD A,H | Check screen third boundary | ||
| 8204 | AND $07 | |||
| 8206 | JR NZ,$8212 | |||
| 8208 | LD A,L | Advance to the next screen row | ||
| 8209 | ADD A,$20 | |||
| 820B | LD L,A | |||
| 820C | JR C,$8212 | |||
| 820E | LD A,H | Otherwise back a third, forward a row | ||
| 820F | SUB $08 | |||
| 8211 | LD H,A | |||
| 8212 | DJNZ $81F3 | |||
| 8214 | LD SP,($FD82) | |||
| 8218 | OR A | |||
| 8219 | BIT 4,(IY+$15) | |||
| 821D | RET Z | |||
| 821E | LD HL,$FDE0 | |||
| 8221 | INC (HL) | |||
| 8222 | LD A,(HL) | |||
| 8223 | CP $20 | |||
| 8225 | CCF | |||
| 8226 | RET NC | |||
| 8227 | LD (HL),$00 | |||
| 8229 | SCF | |||
| 822A | RET | |||
|
|
||||
|
Moves a prisoner of war down the screen while he is active, stepping his position as the counters lapse, then advancing his animation buffers.
|
||||
| 822B | LD IX,$FDCF | Load object at $FDCF, check flag bit 7 | ||
| 822F | BIT 7,(IX+$0B) | |||
| 8233 | JR Z,$82A7 | |||
| 8235 | LD A,D | |||
| 8236 | CP $28 | |||
| 8238 | JR NC,$8244 | |||
| 823A | LD A,R | |||
| 823C | JP P,$826F | |||
| 823F | INC (IX+$05) | |||
| 8242 | JR $826F | |||
| 8244 | LD A,(IX+$0B) | Check flags, clear ($FDDB) if all clear | ||
| 8247 | OR $ED | |||
| 8249 | INC A | |||
| 824A | JR NZ,$824F | |||
| 824C | LD ($FDDB),A | |||
| 824F | BIT 0,(IY+$5B) | Decrement scroll counters, adjust position | ||
| 8253 | JR NZ,$8262 | |||
| 8255 | DEC (IX+$06) | |||
| 8258 | JP P,$8262 | |||
| 825B | LD (IX+$06),$03 | |||
| 825F | DEC (IX+$04) | |||
| 8262 | DEC (IY+$5B) | |||
| 8265 | JP P,$826F | |||
| 8268 | LD (IY+$5B),$03 | |||
| 826C | DEC (IX+$05) | |||
| 826F | LD A,$10 | |||
| 8271 | LD E,$11 | |||
| 8273 | LD C,$02 | |||
| 8275 | CALL $82E1 | Advance/rotate object buffer pointer | ||
| 8278 | LD A,$08 | |||
| 827A | LD E,$10 | |||
| 827C | LD C,$03 | |||
| 827E | CALL $82E1 | Advance/rotate object buffer pointer | ||
| 8281 | LD A,$02 | |||
| 8283 | LD E,$11 | |||
| 8285 | LD C,$02 | |||
| 8287 | CALL $82C1 | Set object state flags, call $806B | ||
| 828A | LD HL,$FDDA | Read the state flags, clearing the top bit | ||
| 828D | LD A,(HL) | |||
| 828E | RES 7,(HL) | |||
| 8290 | OR $E5 | All other bits set? nothing to do | ||
| 8292 | INC A | |||
| 8293 | SCF | |||
| 8294 | RET Z | |||
| 8295 | SET 7,(HL) | Put the top bit back | ||
| 8297 | LD HL,$FDD3 | Step the buffer position back | ||
| 829A | LD A,(HL) | |||
| 829B | SUB $06 | |||
| 829D | LD (HL),A | |||
| 829E | LD HL,$FDCF | Step the object row back | ||
| 82A1 | LD A,(HL) | |||
| 82A2 | SUB $06 | |||
| 82A4 | LD (HL),A | |||
| 82A5 | OR A | |||
| 82A6 | RET | |||
| 82A7 | LD HL,$82B4 | Inactive: reload the record from its template | ||
| 82AA | LD DE,$FDCF | |||
| 82AD | LD BC,$000D | Copy the 13-byte template in | ||
| 82B0 | LDIR | |||
| 82B2 | OR A | |||
| 82B3 | RET | |||
|
|
||||
| 82B4 | DEFB $0C,$FA,$00,$00,$0C,$FA,$00,$00 | |||
| 82BC | DEFB $04,$5F,$0A,$80,$01 | |||
|
||||||||||
|
Stores an object's facing into its record, substituting a special sprite when the flag calls for it, then stamps the object onto the collision map and merges the new state flags in.
|
||||||||||
| 82C1 | LD (IX+$03),E | Store the facing into the record | ||||||||
| 82C4 | LD (IX+$07),E | |||||||||
| 82C7 | PUSH AF | |||||||||
| 82C8 | AND (IX+$0B) | Special sprite if the flag is set | ||||||||
| 82CB | JR Z,$82D1 | |||||||||
| 82CD | LD (IX+$07),$12 | |||||||||
| 82D1 | CALL $806B | Mark map cells for object IX, direction-aware | ||||||||
| 82D4 | POP AF | |||||||||
| 82D5 | BIT 5,(IX+$0B) | Keep the flags if bit 5 is set | ||||||||
| 82D9 | RET NZ | |||||||||
| 82DA | OR (IX+$0B) | Merge in the new flag bits | ||||||||
| 82DD | LD (IX+$0B),A | |||||||||
| 82E0 | RET | |||||||||
|
Used by the routine at 822B.
|
||||||||
|
Steps one of an object's animation buffer pointers on, wrapping it round when it passes the end of the buffer.
|
||||||||
| 82E1 | LD HL,($FDCF) | Save/restore pointer around $82C1 call | ||||||
| 82E4 | LD B,(IX+$02) | |||||||
| 82E7 | PUSH HL | |||||||
| 82E8 | PUSH BC | |||||||
| 82E9 | CALL $82C1 | Set object state flags, call $806B | ||||||
| 82EC | POP BC | |||||||
| 82ED | POP HL | |||||||
| 82EE | LD ($FDCF),HL | |||||||
| 82F1 | LD (IX+$02),B | |||||||
| 82F4 | LD HL,$FDD3 | Bump ($FDD3) and ($FDCF) counters by 3 | ||||||
| 82F7 | INC (HL) | |||||||
| 82F8 | INC (HL) | |||||||
| 82F9 | INC (HL) | |||||||
| 82FA | LD HL,$FDCF | |||||||
| 82FD | INC (HL) | |||||||
| 82FE | INC (HL) | |||||||
| 82FF | INC (HL) | |||||||
| 8300 | RET | |||||||
|
|
||||
|
Draws a small hut, its flag bit picking between two sprites and clearing before the draw so the second form persists.
|
||||
| 8301 | BIT 7,E | |||
| 8303 | RES 7,E | |||
| 8305 | JR Z,$8326 | |||
| 8307 | DEC E | |||
| 8308 | LD HL,($C04C) | |||
| 830B | LD BC,$1400 | |||
| 830E | PUSH DE | |||
| 830F | CALL $8A14 | Sprite draw dispatch variant, C=4 | ||
| 8312 | POP DE | |||
| 8313 | LD A,E | |||
| 8314 | ADD A,$07 | |||
| 8316 | LD E,A | |||
| 8317 | LD BC,$1400 | |||
| 831A | PUSH DE | |||
| 831B | LD HL,($C04E) | |||
| 831E | CALL $8A14 | Sprite draw dispatch variant, C=4 | ||
| 8321 | POP DE | |||
| 8322 | LD A,E | |||
| 8323 | SUB $06 | |||
| 8325 | LD E,A | |||
| 8326 | LD HL,($C030) | |||
| 8329 | LD B,$14 | |||
| 832B | LD A,$00 | |||
| 832D | JR $834B | => Draw sprite HL | ||
|
|
||||
|
Draws the cave body, choosing between two sprites by column.
|
||||
| 832F | LD A,$80 | |||
| 8331 | LD B,$14 | |||
| 8333 | LD HL,($C034) | |||
| 8336 | INC E | |||
| 8337 | DEC E | |||
| 8338 | JR Z,$834B | => Draw sprite HL | ||
| 833A | LD HL,($C036) | |||
| 833D | JR $834B | => Draw sprite HL | ||
|
|
||||
|
Draws a cave top edge, loading its sprite and joining the shared draw path.
|
||||
| 833F | LD HL,($C038) | |||
| 8342 | JR $8347 | |||
|
|
||||
|
Draws a cave bottom edge, loading its sprite and joining the shared draw path.
|
||||
| 8344 | LD HL,($C03A) | |||
|
This entry point is used by the routine at 833F.
|
||||
| 8347 | LD A,$00 | |||
| 8349 | LD B,$04 | |||
|
||||||||||||||||
|
Draws a pre-shifted sprite by pointing the stack at its data buffer and popping bytes straight into screen memory, row by row, after clipping.
|
||||||||||||||||
| 834B | EX AF,AF' | Swap alt HL in from the sprite bank | ||||||||||||||
| 834C | PUSH HL | |||||||||||||||
| 834D | EXX | |||||||||||||||
| 834E | POP HL | Load it, swap back | ||||||||||||||
| 834F | EXX | |||||||||||||||
| 8350 | LD C,$0C | |||||||||||||||
| 8352 | CALL $867C | Clip sprite rectangle against screen edge | ||||||||||||||
| 8355 | RET C | |||||||||||||||
| 8356 | PUSH HL | Stash the position, swap in | ||||||||||||||
| 8357 | EXX | |||||||||||||||
| 8358 | PUSH HL | Copy the position across, swap back | ||||||||||||||
| 8359 | EXX | |||||||||||||||
| 835A | POP HL | |||||||||||||||
| 835B | ADD HL,DE | Add the clip offset to the address | ||||||||||||||
| 835C | POP DE | |||||||||||||||
| 835D | EX AF,AF' | |||||||||||||||
| 835E | LD C,A | |||||||||||||||
| 835F | LD A,$06 | |||||||||||||||
| 8361 | BIT 6,C | Check attribute bit 6, choose draw variant | ||||||||||||||
| 8363 | CALL Z,$899E | Compute screen draw address for sprite, save state to buffer | ||||||||||||||
| 8366 | LD ($FD82),SP | |||||||||||||||
| 836A | LD SP,HL | |||||||||||||||
| 836B | EX DE,HL | |||||||||||||||
| 836C | LD A,L | Remember the row's start | ||||||||||||||
| 836D | POP DE | #0 first word, two screen bytes | ||||||||||||||
| 836E | LD (HL),E | |||||||||||||||
| 836F | INC L | |||||||||||||||
| 8370 | LD (HL),D | |||||||||||||||
| 8371 | INC L | |||||||||||||||
| 8372 | POP DE | #1 second word | ||||||||||||||
| 8373 | LD (HL),E | |||||||||||||||
| 8374 | INC L | |||||||||||||||
| 8375 | LD (HL),D | |||||||||||||||
| 8376 | INC L | |||||||||||||||
| 8377 | POP DE | #2 third word | ||||||||||||||
| 8378 | LD (HL),E | |||||||||||||||
| 8379 | INC L | |||||||||||||||
| 837A | LD (HL),D | |||||||||||||||
| 837B | LD L,A | Down to the next pixel line | ||||||||||||||
| 837C | INC H | |||||||||||||||
| 837D | POP DE | #0 first word, two screen bytes | ||||||||||||||
| 837E | LD (HL),E | |||||||||||||||
| 837F | INC L | |||||||||||||||
| 8380 | LD (HL),D | |||||||||||||||
| 8381 | INC L | |||||||||||||||
| 8382 | POP DE | #1 second word | ||||||||||||||
| 8383 | LD (HL),E | |||||||||||||||
| 8384 | INC L | |||||||||||||||
| 8385 | LD (HL),D | |||||||||||||||
| 8386 | INC L | |||||||||||||||
| 8387 | POP DE | #2 third word | ||||||||||||||
| 8388 | LD (HL),E | |||||||||||||||
| 8389 | INC L | |||||||||||||||
| 838A | LD (HL),D | |||||||||||||||
| 838B | LD L,A | |||||||||||||||
| 838C | INC H | |||||||||||||||
| 838D | LD A,H | Cross into the next screen third | ||||||||||||||
| 838E | AND $07 | |||||||||||||||
| 8390 | JR NZ,$839C | |||||||||||||||
| 8392 | LD A,L | |||||||||||||||
| 8393 | ADD A,$20 | |||||||||||||||
| 8395 | LD L,A | |||||||||||||||
| 8396 | JR C,$839C | |||||||||||||||
| 8398 | LD A,H | |||||||||||||||
| 8399 | SUB $08 | |||||||||||||||
| 839B | LD H,A | |||||||||||||||
| 839C | DJNZ $836C | Loop the rows | ||||||||||||||
| 839E | LD SP,($FD82) | |||||||||||||||
| 83A2 | OR A | |||||||||||||||
| 83A3 | RET | |||||||||||||||
|
|
||||
|
Spawns the Jeep by seeding its record with a starting position and clearing the two counters that pace it.
|
||||
| 83A4 | LD HL,$FDCB | |||
| 83A7 | LD (HL),$0A | |||
| 83A9 | INC HL | |||
| 83AA | LD (HL),$6A | |||
| 83AC | INC HL | |||
| 83AD | LD (HL),$46 | |||
| 83AF | XOR A | |||
| 83B0 | LD ($FDF9),A | |||
| 83B3 | LD ($FDF8),A | |||
| 83B6 | SCF | |||
| 83B7 | RET | |||
|
Used by the routine at 9193.
|
||||
|
Updates and draws the Jeep. It steps the position and clamps it to the road, retiring the Jeep once it runs off the end; otherwise it clips and draws the body, with a separate path for when it hangs off the screen edge.
|
||||
| 83B8 | LD HL,$FDCB | Read Jeep flag ($FDCB), check active | ||
| 83BB | LD E,(HL) | |||
| 83BC | INC E | |||
| 83BD | RET Z | |||
| 83BE | DEC E | |||
| 83BF | INC HL | Step past the position pointer | ||
| 83C0 | INC HL | |||
| 83C1 | DEC (HL) | Decrement it, take the absolute value | ||
| 83C2 | LD A,(HL) | |||
| 83C3 | DEC HL | |||
| 83C4 | JP P,$83C9 | |||
| 83C7 | NEG | |||
| 83C9 | CP $32 | Clamp to the $32 lower bound | ||
| 83CB | JR C,$83CE | |||
| 83CD | DEC (HL) | Decrement past it, clamp to $1E too | ||
| 83CE | CP $1E | |||
| 83D0 | JR C,$83D3 | |||
| 83D2 | DEC (HL) | |||
| 83D3 | LD A,(HL) | |||
| 83D4 | CP $04 | Deactivate Jeep when position under $04 | ||
| 83D6 | JR NC,$83F1 | |||
| 83D8 | DEC HL | |||
| 83D9 | LD (HL),$FF | |||
| 83DB | RET | |||
| 83DC | RES 7,E | Off-screen edge: clear flag bit, redraw | ||
| 83DE | DEC HL | |||
| 83DF | LD (HL),$FF | |||
| 83E1 | PUSH DE | |||
| 83E2 | LD C,$02 | |||
| 83E4 | CALL $854A | Sprite draw dispatch | ||
| 83E7 | POP HL | |||
| 83E8 | LD A,H | |||
| 83E9 | SUB $0E | |||
| 83EB | LD H,A | |||
| 83EC | LD A,$02 | |||
| 83EE | JP $642A | => Find free slot in $6648 table | ||
| 83F1 | LD D,A | |||
| 83F2 | LD BC,$1008 | |||
| 83F5 | BIT 7,E | Test sprite direction bit | ||
| 83F7 | JR NZ,$83DC | |||
| 83F9 | CALL $867C | Clip sprite rectangle against screen edge | ||
| 83FC | EX DE,HL | |||
| 83FD | LD A,$04 | |||
| 83FF | LD C,$00 | |||
| 8401 | CALL $899E | Compute screen draw address for sprite, save state to buffer | ||
| 8404 | PUSH DE | Save the position and size | ||
| 8405 | PUSH BC | |||
| 8406 | LD A,D | Align the row to a character boundary | ||
| 8407 | AND $F8 | |||
| 8409 | LD D,A | |||
| 840A | LD A,B | Column offset masked to a multiple of 4 | ||
| 840B | AND $FC | |||
| 840D | RLCA | |||
| 840E | RLCA | Doubled again | ||
| 840F | RLCA | |||
| 8410 | ADD A,E | Add it to the row address | ||
| 8411 | LD E,A | |||
| 8412 | JR NC,$841C | No carry? nothing more to do | ||
| 8414 | LD A,D | Step into the next character row | ||
| 8415 | ADD A,$08 | |||
| 8417 | LD D,A | |||
| 8418 | CP $58 | Past the screen? use the edge path | ||
| 841A | JR NC,$8425 | |||
| 841C | LD A,$04 | Set up the second draw | ||
| 841E | LD B,$04 | |||
| 8420 | LD C,$01 | |||
| 8422 | CALL $899E | Compute screen draw address for sprite, save state to buffer | ||
| 8425 | POP BC | |||
| 8426 | POP DE | |||
| 8427 | EX DE,HL | |||
| 8428 | SLA B | |||
| 842A | PUSH HL | |||
| 842B | LD HL,($C032) | Jeep sprite address, width 4 | ||
| 842E | ADD HL,DE | Advance the sprite pointer past the clip | ||
| 842F | POP DE | |||
| 8430 | LD ($FD82),SP | Save SP, repurpose as sprite-data pointer | ||
| 8434 | LD SP,HL | |||
| 8435 | EX DE,HL | |||
| 8436 | LD A,L | Blit one row of the Jeep | ||
| 8437 | POP DE | |||
| 8438 | LD (HL),E | |||
| 8439 | INC L | |||
| 843A | LD (HL),D | |||
| 843B | INC L | |||
| 843C | POP DE | |||
| 843D | LD (HL),E | |||
| 843E | INC L | |||
| 843F | LD (HL),D | |||
| 8440 | LD L,A | |||
| 8441 | INC H | Step down a pixel line | ||
| 8442 | LD A,H | Check screen third boundary | ||
| 8443 | AND $07 | |||
| 8445 | JR NZ,$8451 | |||
| 8447 | LD A,L | Advance to the next screen row | ||
| 8448 | ADD A,$20 | |||
| 844A | LD L,A | |||
| 844B | JR C,$8451 | |||
| 844D | LD A,H | |||
| 844E | SUB $08 | |||
| 8450 | LD H,A | |||
| 8451 | DJNZ $8436 | Loop the rows | ||
| 8453 | LD SP,($FD82) | Restore SP | ||
| 8457 | RET | |||
|
|
||||
|
Records the motorbike's state and sets the type of the next one to appear, reading the existing flag to decide which.
|
||||
| 8458 | LD A,E | Save state ($FDCE), read Motorbike flag ($FDC7) | ||
| 8459 | LD ($FDCE),A | |||
| 845C | LD HL,$FDC7 | |||
| 845F | LD E,(HL) | |||
| 8460 | LD A,$03 | Default to +3 | ||
| 8462 | INC E | -1 sentinel keeps it there | ||
| 8463 | JR Z,$846B | |||
| 8465 | DEC E | |||
| 8466 | LD A,E | |||
| 8467 | AND $03 | |||
| 8469 | INC HL | |||
| 846A | INC HL | |||
| 846B | LD (HL),A | |||
| 846C | INC HL | |||
| 846D | LD (HL),$04 | |||
| 846F | SCF | |||
| 8470 | RET | |||
|
Used by the routine at 9193.
|
||||
|
Runs both motorbikes, skipping out when neither is active. Each is prepared, animated and drawn in turn, and one that reports itself finished has its slot marked free.
|
||||
| 8471 | LD HL,$FDC7 | |||
| 8474 | LD A,(HL) | |||
| 8475 | INC A | |||
| 8476 | JR NZ,$847D | |||
| 8478 | INC HL | |||
| 8479 | INC HL | |||
| 847A | LD A,(HL) | |||
| 847B | INC A | |||
| 847C | RET Z | |||
| 847D | CALL $8500 | Prepare the motorbike sprite | ||
| 8480 | LD HL,$FDC7 | |||
| 8483 | PUSH HL | |||
| 8484 | CALL $8497 | Animate and draw a motorbike | ||
| 8487 | POP HL | |||
| 8488 | JR NC,$848C | |||
| 848A | LD (HL),$FF | |||
| 848C | INC HL | |||
| 848D | INC HL | |||
| 848E | PUSH HL | |||
| 848F | CALL $8497 | Animate and draw a motorbike | ||
| 8492 | POP HL | |||
| 8493 | RET NC | |||
| 8494 | LD (HL),$FF | |||
| 8496 | RET | |||
|
Used by the routine at 8471.
|
||||||||
|
Animates and draws an object held in the $FC06 sprite buffer. A per-frame timer in $FDCE steps the animation frame, slowing at the higher frames, with a small random wobble. The chosen frame is then drawn -- one special frame paints a solid block, otherwise the sprite is clipped and blitted from the buffer.
|
||||||||
| 8497 | LD E,(HL) | Read the frame counter, hold if idle | ||||||
| 8498 | OR A | |||||||
| 8499 | INC E | |||||||
| 849A | RET Z | |||||||
| 849B | DEC E | |||||||
| 849C | LD A,($FDCE) | Count down the frame timer | ||||||
| 849F | DEC A | |||||||
| 84A0 | JR Z,$84AF | |||||||
| 84A2 | LD ($FDCE),A | Reload and step the frame | ||||||
| 84A5 | INC E | |||||||
| 84A6 | CP $14 | Slow the animation at high frames | ||||||
| 84A8 | JR NC,$84AE | |||||||
| 84AA | RRCA | |||||||
| 84AB | JR C,$84AE | |||||||
| 84AD | DEC E | |||||||
| 84AE | LD (HL),E | Store the new frame | ||||||
| 84AF | INC HL | |||||||
| 84B0 | LD A,R | Bump (HL) when the draw-mode flag (R bit 7) is set | ||||||
| 84B2 | JP P,$84B6 | |||||||
| 84B5 | INC (HL) | |||||||
| 84B6 | LD D,(HL) | |||||||
| 84B7 | LD BC,$0C03 | |||||||
| 84BA | LD A,E | Halve the frame into a sprite index | ||||||
| 84BB | SRL E | |||||||
| 84BD | SRL E | |||||||
| 84BF | CP $6B | Special frame? | ||||||
| 84C1 | JP Z,$854A | => Sprite draw dispatch | ||||||
| 84C4 | LD C,$0C | Set the sprite width | ||||||
| 84C6 | CALL $867C | Clip sprite rectangle against screen edge | ||||||
| 84C9 | RET C | |||||||
| 84CA | SLA B | |||||||
| 84CC | PUSH HL | |||||||
| 84CD | LD HL,$FC06 | Point at the sprite buffer | ||||||
| 84D0 | ADD HL,DE | |||||||
| 84D1 | POP DE | |||||||
| 84D2 | LD ($FD82),SP | |||||||
| 84D6 | LD SP,HL | |||||||
| 84D7 | EX DE,HL | |||||||
| 84D8 | LD A,L | |||||||
| 84D9 | POP DE | |||||||
| 84DA | LD (HL),E | #0 copy sprite bytes into the row | ||||||
| 84DB | INC L | |||||||
| 84DC | LD (HL),D | |||||||
| 84DD | INC L | |||||||
| 84DE | POP DE | Take the next pair of sprite words | ||||||
|
This entry point is used by the routine at EF37.
|
||||||||
| 84DF | LD (HL),E | #1 write them into the screen row | ||||||
| 84E0 | INC L | |||||||
| 84E1 | LD (HL),D | |||||||
| 84E2 | INC L | |||||||
| 84E3 | POP DE | And the second pair | ||||||
| 84E4 | LD (HL),E | |||||||
| 84E5 | INC L | |||||||
| 84E6 | LD (HL),D | |||||||
| 84E7 | LD L,A | |||||||
| 84E8 | INC H | Step down a pixel line | ||||||
| 84E9 | LD A,H | Check screen third boundary | ||||||
| 84EA | AND $07 | |||||||
| 84EC | JR NZ,$84F8 | |||||||
| 84EE | LD A,L | Advance to the next screen row | ||||||
| 84EF | ADD A,$20 | |||||||
| 84F1 | LD L,A | |||||||
| 84F2 | JR C,$84F8 | |||||||
| 84F4 | LD A,H | |||||||
| 84F5 | SUB $08 | |||||||
| 84F7 | LD H,A | |||||||
| 84F8 | DJNZ $84D8 | Loop the rows | ||||||
| 84FA | LD SP,($FD82) | Restore SP | ||||||
| 84FE | OR A | |||||||
| 84FF | RET | |||||||
|
Used by the routine at 8471.
|
||||||||
|
Prepares the motorbike sprite. Every fourth step it reloads the sprite from the graphics into the work buffer; otherwise it shifts the buffered copy one pixel sideways, so the bike can be drawn at positions between whole cells.
|
||||||||
| 8500 | LD A,($FDCE) | Check Motorbike state counter ($FDCE) | ||||||
| 8503 | DEC A | |||||||
| 8504 | RET Z | |||||||
| 8505 | CP $14 | |||||||
| 8507 | JR NC,$850B | |||||||
| 8509 | RRCA | |||||||
| 850A | RET NC | |||||||
| 850B | LD A,(HL) | |||||||
| 850C | INC A | |||||||
| 850D | AND $03 | |||||||
| 850F | JR NZ,$851D | |||||||
| 8511 | LD HL,($C02E) | Point at the buffered sprite | ||||||
| 8514 | LD DE,$FC06 | Set up the copy: 144 bytes to $FC06 | ||||||
| 8517 | LD BC,$0090 | |||||||
| 851A | LDIR | Copy it, return | ||||||
| 851C | RET | |||||||
| 851D | LD B,$18 | Set up the 24-row shift loop | ||||||
| 851F | LD HL,$FC06 | Point at the sprite buffer | ||||||
| 8522 | LD A,L | Remember this row's start | ||||||
| 8523 | SRL (HL) | 1st shift: row byte 1 | ||||||
| 8525 | INC L | |||||||
| 8526 | RR (HL) | ...byte 2 | ||||||
| 8528 | INC L | |||||||
| 8529 | RR (HL) | ...byte 3 | ||||||
| 852B | INC L | |||||||
| 852C | RR (HL) | ...byte 4 | ||||||
| 852E | INC L | |||||||
| 852F | RR (HL) | ...byte 5 | ||||||
| 8531 | INC L | |||||||
| 8532 | RR (HL) | ...byte 6 | ||||||
| 8534 | LD L,A | Restart at the row's start | ||||||
| 8535 | SRL (HL) | 2nd shift: row byte 1 | ||||||
| 8537 | INC L | |||||||
| 8538 | RR (HL) | ...byte 2 | ||||||
| 853A | INC L | |||||||
| 853B | RR (HL) | ...byte 3 | ||||||
| 853D | INC L | |||||||
| 853E | RR (HL) | ...byte 4 | ||||||
| 8540 | INC L | |||||||
| 8541 | RR (HL) | ...byte 5 | ||||||
| 8543 | INC L | |||||||
| 8544 | RR (HL) | ...byte 6 | ||||||
| 8546 | INC L | |||||||
| 8547 | DJNZ $8522 | Next row | ||||||
| 8549 | RET | |||||||
|
Clips a rectangle and works out its screen address, then fills it with zero bytes a row at a time (two halves per row) using the stack -- painting a solid block where the sprite goes.
|
||||
| 854A | LD A,C | Save the column, swap in | ||
| 854B | EX AF,AF' | |||
| 854C | LD A,C | Column doubled, minus one | ||
| 854D | ADD A,A | |||
| 854E | DEC A | |||
| 854F | LD L,A | |||
| 8550 | LD H,$00 | |||
| 8552 | PUSH HL | |||
| 8553 | CALL $867C | Clip sprite rectangle against screen edge | ||
| 8556 | EX AF,AF' | |||
| 8557 | ADD A,A | Set width C=$01 for draw address calc | ||
| 8558 | LD C,$01 | |||
| 855A | EX DE,HL | |||
| 855B | CALL $899E | Compute screen draw address for sprite, save state to buffer | ||
| 855E | SRL A | |||
| 8560 | LD C,A | |||
| 8561 | EX DE,HL | |||
| 8562 | POP DE | Add the clip offset to the address | ||
| 8563 | ADD HL,DE | |||
| 8564 | LD ($FD82),SP | |||
| 8568 | LD DE,$0000 | |||
| 856B | LD A,B | |||
| 856C | EX AF,AF' | Swap back the width | ||
| 856D | LD SP,HL | Point SP at this screen row | ||
| 856E | INC SP | |||
| 856F | LD B,C | |||
| 8570 | PUSH DE | Blank the left half of the row | ||
| 8571 | DJNZ $8570 | |||
| 8573 | INC H | |||
| 8574 | LD SP,HL | |||
| 8575 | INC SP | |||
| 8576 | LD B,C | |||
| 8577 | PUSH DE | Blank the right half | ||
| 8578 | DJNZ $8577 | |||
| 857A | INC H | |||
| 857B | LD A,H | Cross into the next screen third | ||
| 857C | AND $07 | |||
| 857E | JR NZ,$858A | |||
| 8580 | LD A,L | |||
| 8581 | ADD A,$20 | |||
| 8583 | LD L,A | |||
| 8584 | JR C,$858A | |||
| 8586 | LD A,H | |||
| 8587 | SUB $08 | |||
| 8589 | LD H,A | |||
| 858A | EX AF,AF' | |||
| 858B | DEC A | Loop the rows | ||
| 858C | JR NZ,$856C | |||
| 858E | LD SP,($FD82) | |||
| 8592 | SCF | |||
| 8593 | RET | |||
|
|
||||
|
Draws the truck held in the $FDC3 slot, taking its animation frame from the slot's low bits and skipping the draw when the slot is empty.
|
||||
| 8594 | LD HL,$FDC3 | |||
| 8597 | LD E,(HL) | |||
| 8598 | LD A,$07 | |||
| 859A | INC E | |||
| 859B | JR Z,$85A3 | |||
| 859D | DEC E | |||
| 859E | LD A,E | |||
| 859F | AND $07 | |||
| 85A1 | INC HL | |||
| 85A2 | INC HL | |||
| 85A3 | ADD A,$B8 | |||
| 85A5 | LD (HL),A | |||
| 85A6 | INC HL | |||
| 85A7 | LD (HL),$04 | |||
| 85A9 | SCF | |||
| 85AA | RET | |||
|
Used by the routine at 9193.
|
||||
|
Manages the truck objects: bails out if none are active, otherwise readies the truck sprite buffer and ticks each truck's timer -- drawing it while it counts down, and spawning a replacement plus a final sprite when it expires.
|
||||
| 85AB | LD HL,$FDC3 | |||
| 85AE | LD A,(HL) | First truck slot active? | ||
| 85AF | INC A | |||
| 85B0 | JR NZ,$85B7 | |||
| 85B2 | INC HL | |||
| 85B3 | INC HL | |||
| 85B4 | LD A,(HL) | Bail if the second is idle too | ||
| 85B5 | INC A | |||
| 85B6 | RET Z | |||
| 85B7 | PUSH AF | |||
| 85B8 | LD A,R | Step the truck timers when the draw-mode flag (R bit 7) is set | ||
| 85BA | JP P,$85C3 | |||
| 85BD | INC (IY+$44) | |||
| 85C0 | INC (IY+$46) | |||
| 85C3 | POP AF | |||
| 85C4 | CALL $86B8 | Get Truck sprite to $6300 buffer and shift it if needed | ||
| 85C7 | LD HL,$FDC3 | |||
| 85CA | CALL $85D0 | |||
| 85CD | LD HL,$FDC5 | |||
| 85D0 | LD A,(HL) | Truck record inactive? stop | ||
| 85D1 | CP $FF | |||
| 85D3 | RET Z | |||
| 85D4 | DEC (HL) | Count the timer down, spawn on zero | ||
| 85D5 | JR Z,$8605 | |||
| 85D7 | INC HL | |||
| 85D8 | LD A,(HL) | |||
| 85D9 | DEC HL | |||
| 85DA | ADD A,A | Not ready to draw yet | ||
| 85DB | JR C,$85E6 | |||
| 85DD | PUSH HL | |||
| 85DE | CALL $8618 | Draw two-part sprite from record at HL | ||
| 85E1 | POP HL | |||
| 85E2 | RET NC | |||
| 85E3 | LD (HL),$FF | |||
| 85E5 | RET | |||
| 85E6 | PUSH HL | |||
| 85E7 | LD A,(HL) | Record index into A | ||
| 85E8 | RRCA | |||
| 85E9 | RRCA | Rotated down three, masked to the table | ||
| 85EA | RRCA | |||
| 85EB | AND $1F | |||
| 85ED | INC A | |||
| 85EE | INC HL | |||
| 85EF | LD H,(HL) | |||
| 85F0 | LD L,A | |||
| 85F1 | LD A,H | |||
| 85F2 | AND $7F | |||
| 85F4 | SUB $0E | |||
| 85F6 | LD H,A | |||
| 85F7 | XOR A | |||
| 85F8 | PUSH HL | |||
| 85F9 | CALL $642A | Find free slot in $6648 table | ||
| 85FC | POP HL | |||
| 85FD | INC L | |||
| 85FE | INC L | |||
| 85FF | INC L | |||
| 8600 | XOR A | |||
| 8601 | CALL $642A | Find free slot in $6648 table | ||
| 8604 | POP HL | |||
| 8605 | LD E,(HL) | Reclaim the slot | ||
| 8606 | LD (HL),$FF | |||
| 8608 | SRL E | |||
| 860A | SRL E | |||
| 860C | SRL E | |||
| 860E | INC HL | |||
| 860F | LD D,(HL) | |||
| 8610 | RES 7,D | |||
| 8612 | LD BC,$1004 | Draw the final truck sprite | ||
| 8615 | JP $854A | => Sprite draw dispatch | ||
|
Used by the routine at 85AB.
|
||||||||
|
Draws a sprite made of two stacked halves, taking the frame and colour from a short record and clipping the pair as one block before blitting each half.
|
||||||||
| 8618 | LD A,(HL) | Frame byte, one past it | ||||||
| 8619 | INC A | |||||||
| 861A | INC HL | |||||||
| 861B | RRCA | Rotate the type field down | ||||||
| 861C | RRCA | |||||||
| 861D | RRCA | Once more, masked to the type bits | ||||||
| 861E | AND $1F | |||||||
| 8620 | LD E,A | |||||||
| 8621 | LD D,(HL) | Read attribute (D), set size $1010 | ||||||
| 8622 | LD BC,$1010 | |||||||
| 8625 | CALL $867C | Clip sprite rectangle against screen edge | ||||||
| 8628 | RET C | |||||||
| 8629 | EX DE,HL | |||||||
| 862A | LD A,$08 | Draw first part, C=$04 | ||||||
| 862C | LD C,$04 | |||||||
| 862E | CALL $899E | Compute screen draw address for sprite, save state to buffer | ||||||
| 8631 | LD A,E | |||||||
| 8632 | ADD A,$08 | Offset second part 8 columns right | ||||||
| 8634 | LD E,A | |||||||
| 8635 | LD A,$01 | |||||||
| 8637 | LD C,$01 | |||||||
| 8639 | CALL $899E | Compute screen draw address for sprite, save state to buffer | ||||||
| 863C | LD A,E | |||||||
| 863D | SUB $08 | |||||||
| 863F | LD E,A | |||||||
| 8640 | EX DE,HL | |||||||
| 8641 | SLA B | Double row count for both halves | ||||||
| 8643 | PUSH HL | |||||||
| 8644 | LD HL,$6300 | |||||||
| 8647 | ADD HL,DE | |||||||
| 8648 | POP DE | |||||||
| 8649 | LD ($FD82),SP | Save SP, repurpose as sprite-data pointer | ||||||
| 864D | LD SP,HL | |||||||
| 864E | EX DE,HL | |||||||
| 864F | LD A,L | Blit row: pop pixel words, store to screen | ||||||
| 8650 | POP DE | #0 first word, two screen bytes | ||||||
| 8651 | LD (HL),D | |||||||
| 8652 | INC L | |||||||
| 8653 | LD (HL),E | |||||||
| 8654 | INC L | |||||||
| 8655 | POP DE | #1 second word | ||||||
| 8656 | LD (HL),D | |||||||
| 8657 | INC L | |||||||
| 8658 | LD (HL),E | |||||||
| 8659 | INC L | |||||||
| 865A | POP DE | #2 third word | ||||||
| 865B | LD (HL),D | |||||||
| 865C | INC L | |||||||
| 865D | LD (HL),E | |||||||
| 865E | INC L | |||||||
| 865F | POP DE | #3 fourth word | ||||||
| 8660 | LD (HL),D | |||||||
| 8661 | INC L | |||||||
| 8662 | LD (HL),E | |||||||
| 8663 | LD L,A | |||||||
| 8664 | INC H | Advance to next pixel line, handle char/third wrap | ||||||
| 8665 | LD A,H | |||||||
| 8666 | AND $07 | |||||||
| 8668 | JR NZ,$8674 | |||||||
| 866A | LD A,L | |||||||
| 866B | ADD A,$20 | |||||||
| 866D | LD L,A | |||||||
| 866E | JR C,$8674 | |||||||
| 8670 | LD A,H | |||||||
| 8671 | SUB $08 | |||||||
| 8673 | LD H,A | |||||||
| 8674 | DJNZ $864F | |||||||
| 8676 | LD SP,($FD82) | Restore SP | ||||||
| 867A | OR A | |||||||
| 867B | RET | |||||||
|
||||||||||
|
Clips a sprite against the top and bottom screen edges, trimming its height and start row. Returns the screen address of its first visible line, with carry set if it falls entirely off-screen.
|
||||||||||
| 867C | LD A,D | Check the row against the bottom | ||||||||
| 867D | CP $60 | |||||||||
| 867F | JR NC,$869B | |||||||||
| 8681 | LD H,B | Distance from the top edge | ||||||||
| 8682 | SUB B | |||||||||
| 8683 | CP $03 | Fully on-screen? skip the clip | ||||||||
| 8685 | JP P,$86A4 | |||||||||
| 8688 | SUB $03 | Otherwise clip rows off the top | ||||||||
| 868A | NEG | |||||||||
| 868C | LD H,A | |||||||||
| 868D | NEG | |||||||||
| 868F | ADD A,B | |||||||||
| 8690 | LD B,A | |||||||||
| 8691 | LD A,E | |||||||||
| 8692 | LD E,C | |||||||||
| 8693 | CALL $8E92 | Shift-add multiply | ||||||||
| 8696 | LD E,A | |||||||||
| 8697 | LD D,$04 | |||||||||
| 8699 | JR $86AB | |||||||||
| 869B | SUB B | Off bottom: reduce the visible height | ||||||||
| 869C | SUB $5F | |||||||||
| 869E | CCF | |||||||||
| 869F | RET C | |||||||||
| 86A0 | LD H,B | Clamp to the screen edge | ||||||||
| 86A1 | NEG | |||||||||
| 86A3 | LD B,A | |||||||||
| 86A4 | LD A,D | Rows above the clip edge | ||||||||
| 86A5 | SUB H | |||||||||
| 86A6 | INC A | One more, back into D | ||||||||
| 86A7 | LD D,A | |||||||||
| 86A8 | LD HL,$0000 | |||||||||
| 86AB | EX DE,HL | |||||||||
| 86AC | LD A,L | |||||||||
| 86AD | LD L,H | |||||||||
| 86AE | SLA L | |||||||||
| 86B0 | LD H,$FE | $FE00 - table of even screen lines addresses | ||||||||
| 86B2 | ADD A,(HL) | Fold in the column offset | ||||||||
| 86B3 | INC L | |||||||||
| 86B4 | LD H,(HL) | |||||||||
| 86B5 | LD L,A | |||||||||
| 86B6 | OR A | |||||||||
| 86B7 | RET | |||||||||
|
Used by the routine at 85AB.
|
||||
|
Prepares the truck sprite for drawing at a sub-cell position. On an eight-pixel boundary it reloads the sprite from the graphics; otherwise it shifts the buffered copy one pixel left, carrying between the bytes of each row.
|
||||
| 86B8 | AND $07 | Reload only on the 8-pixel boundary | ||
| 86BA | JR NZ,$86C7 | |||
| 86BC | LD HL,($C03C) | Truck sprite address, width 8 | ||
| 86BF | LD DE,$6300 | |||
| 86C2 | LD BC,$0100 | |||
| 86C5 | LDIR | |||
|
Shift 8*32 bytes at $6300 one bit left
|
||||
| 86C7 | LD ($FD82),SP | |||
| 86CB | LD HL,$6300 | Buffer address | ||
| 86CE | LD DE,$0008 | |||
| 86D1 | LD B,$20 | Loop counter = 32 | ||
| 86D3 | ADD HL,DE | Step to the next row | ||
| 86D4 | LD SP,HL | |||
| 86D5 | EXX | |||
| 86D6 | DEC SP | |||
| 86D7 | DEC SP | |||
| 86D8 | POP HL | #0 shift the low word left | ||
| 86D9 | ADD HL,HL | |||
| 86DA | PUSH HL | |||
| 86DB | DEC SP | #1 carry into the second word | ||
| 86DC | DEC SP | |||
| 86DD | POP HL | |||
| 86DE | ADC HL,HL | |||
| 86E0 | PUSH HL | |||
| 86E1 | DEC SP | #2 carry into the third word | ||
| 86E2 | DEC SP | |||
| 86E3 | POP HL | |||
| 86E4 | ADC HL,HL | |||
| 86E6 | PUSH HL | |||
| 86E7 | DEC SP | #3 carry into the fourth word | ||
| 86E8 | DEC SP | |||
| 86E9 | POP HL | |||
| 86EA | ADC HL,HL | |||
| 86EC | PUSH HL | |||
| 86ED | EXX | |||
| 86EE | DJNZ $86D3 | Loop the 32 rows | ||
| 86F0 | LD SP,($FD82) | |||
| 86F4 | RET | |||
|
|
||||
|
Draws a bunker, choosing between two sprites by column and skipping it once the row scrolls off. A flagged variant paints a solid block instead and books effect slots for the explosion that follows.
|
||||
| 86F5 | LD A,D | Reject if the row is off-screen | ||
| 86F6 | CP $7F | |||
| 86F8 | CCF | |||
| 86F9 | RET C | |||
| 86FA | LD B,$20 | |||
| 86FC | BIT 7,E | Pick the draw path (bit 7) | ||
| 86FE | JR NZ,$8711 | |||
| 8700 | LD C,$32 | |||
| 8702 | LD A,E | Choose the sprite by column | ||
| 8703 | CP $0F | |||
| 8705 | LD HL,($C024) | |||
| 8708 | JP C,$8C52 | |||
| 870B | LD HL,($C026) | |||
| 870E | JP $8C52 | |||
| 8711 | RES 7,E | Solid-block path: draw it | ||
| 8713 | PUSH DE | |||
| 8714 | LD C,$03 | |||
| 8716 | CALL $854A | Sprite draw dispatch | ||
| 8719 | POP HL | |||
| 871A | LD A,H | Move up for the effect slots | ||
| 871B | SUB $16 | |||
| 871D | LD H,A | |||
| 871E | LD A,$02 | |||
| 8720 | PUSH HL | |||
| 8721 | CALL $642A | Find free slot in $6648 table | ||
| 8724 | POP HL | |||
| 8725 | LD A,$02 | |||
| 8727 | INC L | |||
| 8728 | INC L | |||
| 8729 | INC L | |||
| 872A | CALL $642A | Find free slot in $6648 table | ||
| 872D | SCF | |||
| 872E | RET | |||
|
||||||||
|
Paints the road surface across a bridge, filling each row of attribute cells through the stack.
|
||||||||
| 872F | LD A,D | Skip if the row is off the bottom | ||||||
| 8730 | CP $5F | |||||||
| 8732 | CCF | |||||||
| 8733 | RET C | |||||||
| 8734 | AND $03 | Only act on every fourth row | ||||||
| 8736 | RET NZ | |||||||
| 8737 | LD B,$04 | Default to four rows | ||||||
| 8739 | LD A,D | Fewer rows near the top | ||||||
| 873A | CP $10 | |||||||
| 873C | JR NC,$8743 | |||||||
| 873E | SRL A | |||||||
| 8740 | SRL A | |||||||
| 8742 | LD B,A | |||||||
| 8743 | CALL $896D | Get attributes address for the screen line | ||||||
| 8746 | LD D,$38 | Fill colour = $38 | ||||||
| 8748 | LD E,D | |||||||
| 8749 | LD ($FD82),SP | Save SP | ||||||
| 874D | LD SP,HL | Point SP at the end of the attribute row | ||||||
| 874E | INC SP | |||||||
| 874F | PUSH DE | Sixteen pushes fill it | ||||||
| 8750 | PUSH DE | |||||||
| 8751 | PUSH DE | |||||||
| 8752 | PUSH DE | |||||||
| 8753 | PUSH DE | |||||||
| 8754 | PUSH DE | |||||||
| 8755 | PUSH DE | |||||||
| 8756 | PUSH DE | |||||||
| 8757 | PUSH DE | |||||||
| 8758 | PUSH DE | |||||||
| 8759 | PUSH DE | |||||||
| 875A | PUSH DE | |||||||
| 875B | PUSH DE | |||||||
| 875C | PUSH DE | |||||||
| 875D | PUSH DE | |||||||
| 875E | PUSH DE | |||||||
| 875F | LD A,L | Step up one attribute row | ||||||
| 8760 | SUB $20 | |||||||
| 8762 | LD L,A | |||||||
| 8763 | JR NC,$8766 | |||||||
| 8765 | DEC H | |||||||
| 8766 | DJNZ $874D | |||||||
| 8768 | LD SP,($FD82) | Restore SP | ||||||
| 876C | OR A | |||||||
| 876D | RET | |||||||
|
||||||||||
|
Draws a wall the full height of its band, tiling a narrow pattern across the width. A wall starting above the screen has its hidden rows skipped and the pattern advanced to match.
|
||||||||||
| 876E | LD A,D | Reject if the row is off-screen | ||||||||
| 876F | CP $78 | |||||||||
| 8771 | CCF | |||||||||
| 8772 | RET C | |||||||||
| 8773 | LD B,$19 | Full wall height = 25 rows | ||||||||
| 8775 | LD A,D | Row within the band | ||||||||
| 8776 | INC A | |||||||||
| 8777 | SUB B | Offset by the sub-band, store it | ||||||||
| 8778 | LD D,A | |||||||||
| 8779 | CP $04 | |||||||||
| 877B | JP P,$879E | |||||||||
| 877E | LD A,D | Compute second band value, save B | ||||||||
| 877F | ADD A,B | |||||||||
| 8780 | SUB $04 | |||||||||
| 8782 | EXX | |||||||||
| 8783 | LD B,A | |||||||||
| 8784 | EXX | |||||||||
| 8785 | LD H,$40 | |||||||||
| 8787 | LD A,E | |||||||||
| 8788 | ADD A,$20 | |||||||||
| 878A | LD L,A | |||||||||
| 878B | LD A,D | |||||||||
| 878C | EXX | |||||||||
| 878D | NEG | Skip the hidden top rows | ||||||||
| 878F | ADD A,$04 | |||||||||
| 8791 | LD L,A | |||||||||
| 8792 | LD H,$00 | |||||||||
| 8794 | ADD HL,HL | Scale to the sprite row stride | ||||||||
| 8795 | ADD HL,HL | |||||||||
| 8796 | ADD HL,HL | |||||||||
| 8797 | LD DE,($C004) | Wall sprite address, width 4 | ||||||||
| 879B | ADD HL,DE | |||||||||
| 879C | JR $87AE | |||||||||
| 879E | LD A,D | Screen address from the row | ||||||||
| 879F | ADD A,A | |||||||||
| 87A0 | LD L,A | |||||||||
| 87A1 | LD A,E | |||||||||
| 87A2 | LD H,$FE | $FE00 - table of even screen lines addresses | ||||||||
| 87A4 | ADD A,(HL) | |||||||||
| 87A5 | INC L | |||||||||
| 87A6 | LD H,(HL) | |||||||||
| 87A7 | LD L,A | |||||||||
| 87A8 | EXX | |||||||||
| 87A9 | LD B,$19 | Height = 25 | ||||||||
| 87AB | LD HL,($C004) | Wall sprite address, width 4 | ||||||||
| 87AE | LD DE,$0004 | Sprite column stride | ||||||||
| 87B1 | LD ($FD82),SP | |||||||||
| 87B5 | LD SP,HL | Point SP at the row data | ||||||||
| 87B6 | ADD HL,DE | |||||||||
| 87B7 | EXX | Swap in the row's first word | ||||||||
| 87B8 | POP BC | |||||||||
| 87B9 | POP DE | Take the row's second word | ||||||||
| 87BA | LD SP,HL | |||||||||
| 87BB | INC SP | |||||||||
| 87BC | PUSH DE | #0 tile the pattern pair across | ||||||||
| 87BD | PUSH BC | |||||||||
| 87BE | PUSH DE | #1 again | ||||||||
| 87BF | PUSH BC | |||||||||
| 87C0 | PUSH DE | #2 and again, twelve bytes in all | ||||||||
| 87C1 | PUSH BC | |||||||||
| 87C2 | INC H | Step down a pixel line | ||||||||
| 87C3 | EXX | |||||||||
| 87C4 | LD SP,HL | |||||||||
| 87C5 | ADD HL,DE | |||||||||
| 87C6 | EXX | |||||||||
| 87C7 | POP BC | Take the next row's words | ||||||||
| 87C8 | POP DE | |||||||||
| 87C9 | LD SP,HL | |||||||||
| 87CA | INC SP | |||||||||
| 87CB | PUSH DE | #0 tile the pattern pair across | ||||||||
| 87CC | PUSH BC | |||||||||
| 87CD | PUSH DE | #1 again | ||||||||
| 87CE | PUSH BC | |||||||||
| 87CF | PUSH DE | #2 and again | ||||||||
| 87D0 | PUSH BC | |||||||||
| 87D1 | INC H | |||||||||
| 87D2 | LD A,H | Cross into the next screen third | ||||||||
| 87D3 | AND $07 | |||||||||
| 87D5 | JR NZ,$87E8 | |||||||||
| 87D7 | LD A,L | Advance to the next screen row | ||||||||
| 87D8 | ADD A,$20 | |||||||||
| 87DA | LD L,A | |||||||||
| 87DB | JR C,$87E1 | |||||||||
| 87DD | LD A,H | |||||||||
| 87DE | SUB $08 | |||||||||
| 87E0 | LD H,A | |||||||||
| 87E1 | LD A,H | |||||||||
| 87E2 | AND $18 | |||||||||
| 87E4 | CP $18 | |||||||||
| 87E6 | JR Z,$87EB | |||||||||
| 87E8 | EXX | |||||||||
| 87E9 | DJNZ $87B5 | |||||||||
| 87EB | LD SP,($FD82) | |||||||||
| 87EF | OR A | |||||||||
| 87F0 | RET | |||||||||
|
||||||||||
|
Draws a bridge section, colouring its two-tone attribute band a row at a time through the stack before drawing the sprite itself.
|
||||||||||
| 87F1 | PUSH DE | |||||||||
| 87F2 | LD A,D | |||||||||
| 87F3 | SUB $03 | Align row to the 4-row grid | ||||||||
| 87F5 | LD D,A | |||||||||
| 87F6 | AND $03 | Act only on every fourth row | ||||||||
| 87F8 | JR NZ,$885B | |||||||||
| 87FA | LD A,D | |||||||||
| 87FB | LD C,D | |||||||||
| 87FC | CP $60 | |||||||||
| 87FE | JR C,$8823 | |||||||||
| 8800 | JR NZ,$885B | |||||||||
| 8802 | SUB $04 | |||||||||
| 8804 | LD D,A | |||||||||
| 8805 | CALL $896D | Get attributes address for the screen line | ||||||||
| 8808 | LD D,$31 | Attribute byte | ||||||||
| 880A | LD E,D | |||||||||
| 880B | LD ($FD82),SP | |||||||||
| 880F | LD SP,HL | |||||||||
| 8810 | INC SP | |||||||||
| 8811 | PUSH DE | Sixteen pushes fill the attribute row | ||||||||
| 8812 | PUSH DE | |||||||||
| 8813 | PUSH DE | |||||||||
| 8814 | PUSH DE | |||||||||
| 8815 | PUSH DE | |||||||||
| 8816 | PUSH DE | |||||||||
| 8817 | PUSH DE | |||||||||
| 8818 | PUSH DE | |||||||||
| 8819 | PUSH DE | |||||||||
| 881A | PUSH DE | |||||||||
| 881B | PUSH DE | |||||||||
| 881C | PUSH DE | |||||||||
| 881D | PUSH DE | |||||||||
| 881E | PUSH DE | |||||||||
| 881F | PUSH DE | |||||||||
| 8820 | PUSH DE | |||||||||
| 8821 | JR $8857 | |||||||||
| 8823 | CALL $896D | Get attributes address for the screen line | ||||||||
| 8826 | LD D,$30 | Attribute byte | ||||||||
| 8828 | LD E,D | |||||||||
| 8829 | LD ($FD82),SP | |||||||||
| 882D | LD SP,HL | |||||||||
| 882E | INC SP | |||||||||
| 882F | PUSH DE | Sixteen pushes fill the attribute row | ||||||||
| 8830 | PUSH DE | |||||||||
| 8831 | PUSH DE | |||||||||
| 8832 | PUSH DE | |||||||||
| 8833 | PUSH DE | |||||||||
| 8834 | PUSH DE | |||||||||
| 8835 | PUSH DE | |||||||||
| 8836 | PUSH DE | |||||||||
| 8837 | PUSH DE | |||||||||
| 8838 | PUSH DE | |||||||||
| 8839 | PUSH DE | |||||||||
| 883A | PUSH DE | |||||||||
| 883B | PUSH DE | |||||||||
| 883C | PUSH DE | |||||||||
| 883D | PUSH DE | |||||||||
| 883E | PUSH DE | |||||||||
| 883F | LD A,C | |||||||||
| 8840 | CP $04 | |||||||||
| 8842 | JR Z,$8857 | |||||||||
| 8844 | LD D,$31 | Attribute byte | ||||||||
| 8846 | LD E,D | |||||||||
| 8847 | PUSH DE | Sixteen pushes fill the attribute row | ||||||||
| 8848 | PUSH DE | |||||||||
| 8849 | PUSH DE | |||||||||
| 884A | PUSH DE | |||||||||
| 884B | PUSH DE | |||||||||
| 884C | PUSH DE | |||||||||
| 884D | PUSH DE | |||||||||
| 884E | PUSH DE | |||||||||
| 884F | PUSH DE | |||||||||
| 8850 | PUSH DE | |||||||||
| 8851 | PUSH DE | |||||||||
| 8852 | PUSH DE | |||||||||
| 8853 | PUSH DE | |||||||||
| 8854 | PUSH DE | |||||||||
| 8855 | PUSH DE | |||||||||
| 8856 | PUSH DE | |||||||||
| 8857 | LD SP,($FD82) | |||||||||
| 885B | POP DE | |||||||||
| 885C | CP $69 | Reject if row off bottom edge | ||||||||
| 885E | CCF | |||||||||
| 885F | RET C | |||||||||
| 8860 | LD A,D | Reject if above the band | ||||||||
| 8861 | CP $65 | |||||||||
| 8863 | RET NC | |||||||||
| 8864 | LD B,$06 | |||||||||
| 8866 | LD A,D | |||||||||
| 8867 | INC A | |||||||||
| 8868 | SUB B | |||||||||
| 8869 | LD D,A | |||||||||
| 886A | CP $04 | |||||||||
| 886C | EXX | |||||||||
| 886D | LD HL,$88E5 | Load structure graphic $88E5 | ||||||||
| 8870 | EXX | |||||||||
| 8871 | JP P,$8887 | |||||||||
| 8874 | LD A,D | |||||||||
| 8875 | ADD A,B | |||||||||
| 8876 | SUB $04 | |||||||||
| 8878 | LD B,A | |||||||||
| 8879 | LD A,D | |||||||||
| 887A | NEG | |||||||||
| 887C | ADD A,$04 | |||||||||
| 887E | ADD A,A | |||||||||
| 887F | ADD A,A | |||||||||
| 8880 | EXX | |||||||||
| 8881 | CALL $98D3 | HL = HL + A | ||||||||
| 8884 | EXX | |||||||||
| 8885 | LD D,$04 | |||||||||
| 8887 | LD A,D | |||||||||
| 8888 | ADD A,A | |||||||||
| 8889 | LD L,A | |||||||||
| 888A | LD A,E | |||||||||
| 888B | LD H,$FE | $FE00 - table of even screen lines addresses | ||||||||
| 888D | ADD A,(HL) | Add the table byte | ||||||||
| 888E | INC L | |||||||||
| 888F | LD H,(HL) | Take the high byte, restore the low | ||||||||
| 8890 | LD L,A | |||||||||
| 8891 | LD ($FD82),SP | |||||||||
| 8895 | LD SP,HL | Now SP = address on the screen | ||||||||
| 8896 | INC SP | |||||||||
| 8897 | EXX | |||||||||
| 8898 | LD E,(HL) | Low byte from table $88E5 | ||||||||
| 8899 | INC HL | |||||||||
| 889A | LD D,(HL) | High byte alongside it | ||||||||
| 889B | INC HL | |||||||||
| 889C | PUSH DE | Sixteen pushes fill the attribute row | ||||||||
| 889D | PUSH DE | |||||||||
| 889E | PUSH DE | |||||||||
| 889F | PUSH DE | |||||||||
| 88A0 | PUSH DE | |||||||||
| 88A1 | PUSH DE | |||||||||
| 88A2 | PUSH DE | |||||||||
| 88A3 | PUSH DE | |||||||||
| 88A4 | PUSH DE | |||||||||
| 88A5 | PUSH DE | |||||||||
| 88A6 | PUSH DE | |||||||||
| 88A7 | PUSH DE | |||||||||
| 88A8 | PUSH DE | |||||||||
| 88A9 | PUSH DE | |||||||||
| 88AA | PUSH DE | |||||||||
| 88AB | PUSH DE | |||||||||
| 88AC | EXX | |||||||||
| 88AD | INC H | Next screen line | ||||||||
| 88AE | LD SP,HL | |||||||||
| 88AF | INC SP | |||||||||
| 88B0 | EXX | |||||||||
| 88B1 | LD E,(HL) | Get 2nd word from table $88E5 | ||||||||
| 88B2 | INC HL | |||||||||
| 88B3 | LD D,(HL) | |||||||||
| 88B4 | INC HL | |||||||||
| 88B5 | PUSH DE | Sixteen pushes fill the attribute row | ||||||||
| 88B6 | PUSH DE | |||||||||
| 88B7 | PUSH DE | |||||||||
| 88B8 | PUSH DE | |||||||||
| 88B9 | PUSH DE | |||||||||
| 88BA | PUSH DE | |||||||||
| 88BB | PUSH DE | |||||||||
| 88BC | PUSH DE | |||||||||
| 88BD | PUSH DE | |||||||||
| 88BE | PUSH DE | |||||||||
| 88BF | PUSH DE | |||||||||
| 88C0 | PUSH DE | |||||||||
| 88C1 | PUSH DE | |||||||||
| 88C2 | PUSH DE | |||||||||
| 88C3 | PUSH DE | |||||||||
| 88C4 | PUSH DE | |||||||||
| 88C5 | EXX | Step down a pixel line | ||||||||
| 88C6 | INC H | |||||||||
| 88C7 | LD A,H | Check screen third boundary | ||||||||
| 88C8 | AND $07 | |||||||||
| 88CA | JR NZ,$88DD | |||||||||
| 88CC | LD A,L | Advance to the next screen row | ||||||||
| 88CD | ADD A,$20 | |||||||||
| 88CF | LD L,A | |||||||||
| 88D0 | JR C,$88D6 | |||||||||
| 88D2 | LD A,H | Wrap back a third | ||||||||
| 88D3 | SUB $08 | |||||||||
| 88D5 | LD H,A | |||||||||
| 88D6 | LD A,H | Reached the bottom third? stop | ||||||||
| 88D7 | AND $18 | |||||||||
| 88D9 | CP $18 | |||||||||
| 88DB | JR Z,$88DF | |||||||||
| 88DD | DJNZ $8895 | Loop the rows | ||||||||
| 88DF | LD SP,($FD82) | Restore SP | ||||||||
| 88E3 | OR A | |||||||||
| 88E4 | RET | |||||||||
|
|
||||
| 88E5 | DEFB $00,$00,$00,$00 | |||
| 88E9 | DEFB $3F,$FE,$55,$55 | |||
| 88ED | DEFB $6A,$AB,$D5,$55 | |||
| 88F1 | DEFB $FF,$FF,$7F,$FF | |||
| 88F5 | DEFB $FF,$FF,$7F,$FF | |||
| 88F9 | DEFB $7F,$FF,$BF,$FE | |||
|
|
||||
|
Draws a barracks, picking between two sprites by column and rejecting the row once it scrolls off.
|
||||
| 88FD | LD A,D | |||
| 88FE | CP $80 | |||
| 8900 | CCF | |||
| 8901 | RET C | |||
| 8902 | LD B,$21 | |||
| 8904 | LD C,$31 | |||
| 8906 | LD A,E | |||
| 8907 | OR A | |||
| 8908 | LD HL,($C020) | |||
| 890B | JP Z,$8BE7 | => Sprite draw dispatch | ||
| 890E | LD HL,($C022) | |||
| 8911 | JP $8BE7 | => Sprite draw dispatch | ||
|
|
||||
|
Draws a tunnel and then marks the ground it covers on the collision map, so nothing can walk through it.
|
||||
| 8914 | LD A,D | Reject if the row is off-screen | ||
| 8915 | CP $78 | |||
| 8917 | CCF | |||
| 8918 | RET C | |||
| 8919 | LD B,$19 | Sprite height = 25 rows | ||
| 891B | LD C,$30 | |||
| 891D | LD HL,($C006) | Load the sprite address ($C006) | ||
| 8920 | PUSH DE | |||
| 8921 | CALL $8CC9 | Clip sprite, then AND/OR-mask blit rows via SP into screen | ||
| 8924 | POP DE | |||
| 8925 | LD A,D | Skip the map fill if too low | ||
| 8926 | CP $60 | |||
| 8928 | RET NC | |||
| 8929 | LD E,$1F | Compute $1600 map row base | ||
| 892B | LD H,$16 | |||
| 892D | LD A,D | |||
| 892E | ADD A,A | |||
| 892F | ADD A,A | |||
| 8930 | RL H | |||
| 8932 | ADD A,A | |||
| 8933 | RL H | |||
| 8935 | AND $E0 | Combine row/column into map address | ||
| 8937 | OR E | |||
| 8938 | LD L,A | |||
| 8939 | LD D,$30 | |||
| 893B | LD E,D | |||
| 893C | LD ($FD82),SP | |||
| 8940 | LD SP,HL | |||
| 8941 | INC SP | Switch SP to HL for map fill | ||
| 8942 | PUSH DE | Sixteen pushes fill the first 32 map bytes | ||
| 8943 | PUSH DE | |||
| 8944 | PUSH DE | |||
| 8945 | PUSH DE | |||
| 8946 | PUSH DE | |||
| 8947 | PUSH DE | |||
| 8948 | PUSH DE | |||
| 8949 | PUSH DE | |||
| 894A | PUSH DE | |||
| 894B | PUSH DE | |||
| 894C | PUSH DE | |||
| 894D | PUSH DE | |||
| 894E | PUSH DE | |||
| 894F | PUSH DE | |||
| 8950 | PUSH DE | |||
| 8951 | PUSH DE | |||
| 8952 | LD A,H | Check width: 15 or 30 columns | ||
| 8953 | CP $5A | |||
| 8955 | JR C,$8967 | |||
| 8957 | PUSH DE | Sixteen more pushes for the wide variant | ||
| 8958 | PUSH DE | |||
| 8959 | PUSH DE | |||
| 895A | PUSH DE | |||
| 895B | PUSH DE | |||
| 895C | PUSH DE | |||
| 895D | PUSH DE | |||
| 895E | PUSH DE | |||
| 895F | PUSH DE | |||
| 8960 | PUSH DE | |||
| 8961 | PUSH DE | |||
| 8962 | PUSH DE | |||
| 8963 | PUSH DE | |||
| 8964 | PUSH DE | |||
| 8965 | PUSH DE | |||
| 8966 | PUSH DE | |||
| 8967 | LD SP,($FD82) | |||
| 896B | OR A | |||
| 896C | RET | |||
|
||||||||||||
|
Works out where a screen line's colour cells live in the attribute area.
|
||||||||||||
| 896D | LD A,D | |||||||||||
| 896E | ADD A,A | |||||||||||
| 896F | LD H,$FE | $FE00 - table of even screen lines addresses | ||||||||||
| 8971 | LD L,A | |||||||||||
| 8972 | LD A,E | |||||||||||
| 8973 | ADD A,(HL) | Add the table byte | ||||||||||
| 8974 | INC L | |||||||||||
| 8975 | LD H,(HL) | Take the high byte, restore the low | ||||||||||
| 8976 | LD L,A | |||||||||||
| 8977 | LD A,H | |||||||||||
| 8978 | RRCA | Rotate H right on 3 bits | ||||||||||
| 8979 | RRCA | |||||||||||
| 897A | RRCA | |||||||||||
| 897B | OR $58 | |||||||||||
| 897D | LD H,A | Now HL = address in the screen attribute area for the given line | ||||||||||
| 897E | RET | |||||||||||
|
|
||||
|
Draws a log crossing while its row is on screen.
|
||||
| 897F | LD A,D | |||
| 8980 | CP $87 | |||
| 8982 | CCF | |||
| 8983 | RET C | |||
| 8984 | LD B,$28 | |||
| 8986 | LD C,$32 | |||
| 8988 | LD HL,($C012) | |||
| 898B | PUSH DE | |||
| 898C | CALL $8A14 | Sprite draw dispatch variant, C=4 | ||
| 898F | POP DE | |||
| 8990 | LD A,E | |||
| 8991 | ADD A,$07 | |||
| 8993 | LD E,A | |||
| 8994 | LD B,$28 | |||
| 8996 | LD C,$32 | |||
| 8998 | LD HL,($C012) | |||
| 899B | JP $8A14 | => Sprite draw dispatch variant, C=4 | ||
|
||||||||||||
|
Works out where a sprite lands on screen and colours the ground beneath it, walking down its rows and repainting the attribute cells as it crosses them.
|
||||||||||||
| 899E | PUSH AF | |||||||||||
| 899F | PUSH DE | |||||||||||
| 89A0 | PUSH HL | |||||||||||
| 89A1 | PUSH BC | |||||||||||
| 89A2 | LD H,B | Pack the column into HL | ||||||||||
| 89A3 | LD L,A | |||||||||||
| 89A4 | EX AF,AF' | |||||||||||
| 89A5 | LD A,D | |||||||||||
| 89A6 | PUSH HL | |||||||||||
| 89A7 | EXX | |||||||||||
| 89A8 | POP BC | |||||||||||
| 89A9 | AND $06 | Screen third from the row | ||||||||||
| 89AB | RRCA | |||||||||||
| 89AC | LD H,A | |||||||||||
| 89AD | EXX | |||||||||||
| 89AE | EX AF,AF' | |||||||||||
| 89AF | NEG | Column offset within the third | ||||||||||
| 89B1 | ADD A,$20 | |||||||||||
| 89B3 | LD L,A | |||||||||||
| 89B4 | LD H,$00 | |||||||||||
| 89B6 | LD A,D | |||||||||||
| 89B7 | RRCA | Fold the row into the $58xx attribute page | ||||||||||
| 89B8 | RRCA | |||||||||||
| 89B9 | RRCA | |||||||||||
| 89BA | AND $03 | |||||||||||
| 89BC | OR $58 | |||||||||||
| 89BE | LD D,A | |||||||||||
| 89BF | EX DE,HL | |||||||||||
| 89C0 | EXX | |||||||||||
| 89C1 | LD A,H | At a third boundary, paint the attributes | ||||||||||
| 89C2 | INC A | |||||||||||
| 89C3 | AND $03 | |||||||||||
| 89C5 | JR Z,$89CC | |||||||||||
| 89C7 | CALL $89F3 | Set attribute color for B cells at HL | ||||||||||
| 89CA | JR $89E2 | |||||||||||
| 89CC | LD A,R | Draw-mode flag (R bit 7) picks the wrap direction | ||||||||||
| 89CE | JP M,$89DB | |||||||||||
| 89D1 | EXX | |||||||||||
| 89D2 | PUSH DE | |||||||||||
| 89D3 | LD DE,$0020 | Step down one screen row | ||||||||||
| 89D6 | ADD HL,DE | |||||||||||
| 89D7 | POP DE | |||||||||||
| 89D8 | EXX | |||||||||||
| 89D9 | JR $89E2 | |||||||||||
| 89DB | BIT 7,C | Otherwise cross into the next third | ||||||||||
| 89DD | JR NZ,$89D1 | |||||||||||
| 89DF | CALL $8A03 | Set attribute INK=1 for B cells at HL | ||||||||||
| 89E2 | DEC B | |||||||||||
| 89E3 | JR Z,$89EE | |||||||||||
| 89E5 | INC H | Advance a row, repaint attributes at a boundary | ||||||||||
| 89E6 | LD A,H | |||||||||||
| 89E7 | AND $03 | |||||||||||
| 89E9 | CALL Z,$89F3 | Set attribute color for B cells at HL | ||||||||||
| 89EC | DJNZ $89E5 | |||||||||||
| 89EE | POP BC | |||||||||||
| 89EF | POP HL | |||||||||||
| 89F0 | POP DE | |||||||||||
| 89F1 | POP AF | |||||||||||
| 89F2 | RET | |||||||||||
|
Used by the routine at 899E.
|
||||||||||||||
|
Recolours a run of attribute cells, keeping the paper colour and taking the ink from the caller, then steps to the next row.
|
||||||||||||||
| 89F3 | LD A,C | |||||||||||||
| 89F4 | EXX | |||||||||||||
| 89F5 | LD B,A | |||||||||||||
| 89F6 | RES 7,C | |||||||||||||
| 89F8 | LD A,(HL) | Keep PAPER bits, set INK from C | ||||||||||||
| 89F9 | AND $38 | |||||||||||||
| 89FB | OR C | |||||||||||||
| 89FC | LD (HL),A | |||||||||||||
| 89FD | INC HL | Next cell, loop | ||||||||||||
| 89FE | DJNZ $89F8 | |||||||||||||
| 8A00 | ADD HL,DE | Step to the next row | ||||||||||||
| 8A01 | EXX | |||||||||||||
| 8A02 | RET | |||||||||||||
|
Used by the routine at 899E.
|
||||||||||||||
|
Recolours a run of attribute cells, keeping the paper colour but forcing the ink to 1, then steps to the next row.
|
||||||||||||||
| 8A03 | LD A,C | |||||||||||||
| 8A04 | EXX | |||||||||||||
| 8A05 | LD B,A | |||||||||||||
| 8A06 | RES 7,C | |||||||||||||
| 8A08 | LD A,(HL) | |||||||||||||
| 8A09 | AND $38 | Keep PAPER bits, force INK to 1 | ||||||||||||
| 8A0B | OR $01 | |||||||||||||
| 8A0D | LD (HL),A | |||||||||||||
| 8A0E | INC HL | Next cell, loop | ||||||||||||
| 8A0F | DJNZ $8A08 | |||||||||||||
| 8A11 | ADD HL,DE | |||||||||||||
| 8A12 | EXX | |||||||||||||
| 8A13 | RET | |||||||||||||
|
||||||||||||||||||
|
Draws a 4-row masked sprite: clips it, computes the screen address, then blits each row either through its mask or straight in, picked at random.
|
||||||||||||||||||
| 8A14 | LD A,C | |||||||||||||||||
| 8A15 | EX AF,AF' | |||||||||||||||||
| 8A16 | LD C,$04 | Set the height to 4 rows | ||||||||||||||||
| 8A18 | PUSH HL | |||||||||||||||||
| 8A19 | CALL $867C | Clip sprite rectangle against screen edge | ||||||||||||||||
| 8A1C | JR NC,$8A23 | |||||||||||||||||
| 8A1E | POP HL | Restore the caller stack | ||||||||||||||||
| 8A1F | EX AF,AF' | |||||||||||||||||
| 8A20 | LD C,A | Save the attribute, flag off-screen | ||||||||||||||||
| 8A21 | SCF | |||||||||||||||||
| 8A22 | RET | |||||||||||||||||
| 8A23 | EX (SP),HL | |||||||||||||||||
| 8A24 | ADD HL,DE | |||||||||||||||||
| 8A25 | POP DE | |||||||||||||||||
| 8A26 | EX AF,AF' | |||||||||||||||||
| 8A27 | LD C,A | |||||||||||||||||
| 8A28 | LD A,$01 | On-screen: set draw flag | ||||||||||||||||
| 8A2A | CALL $899E | Compute screen draw address for sprite, save state to buffer | ||||||||||||||||
| 8A2D | LD ($FD82),SP | |||||||||||||||||
| 8A31 | LD SP,HL | |||||||||||||||||
| 8A32 | EX DE,HL | |||||||||||||||||
| 8A33 | LD A,R | Draw-mode flag (R bit 7) picks the blit entry point | ||||||||||||||||
| 8A35 | JP P,$8A5B | |||||||||||||||||
| 8A38 | POP DE | Pop the mask/sprite pair | ||||||||||||||||
| 8A39 | LD A,(HL) | |||||||||||||||||
| 8A3A | AND D | AND the mask, OR the sprite | ||||||||||||||||
| 8A3B | OR E | |||||||||||||||||
| 8A3C | LD (HL),A | |||||||||||||||||
| 8A3D | INC H | |||||||||||||||||
| 8A3E | POP DE | |||||||||||||||||
| 8A3F | LD A,(HL) | |||||||||||||||||
| 8A40 | AND D | |||||||||||||||||
| 8A41 | OR E | |||||||||||||||||
| 8A42 | LD (HL),A | |||||||||||||||||
| 8A43 | INC H | |||||||||||||||||
| 8A44 | LD A,H | Cross into the next screen third | ||||||||||||||||
| 8A45 | AND $07 | |||||||||||||||||
| 8A47 | JR NZ,$8A53 | |||||||||||||||||
| 8A49 | LD A,L | |||||||||||||||||
| 8A4A | ADD A,$20 | |||||||||||||||||
| 8A4C | LD L,A | |||||||||||||||||
| 8A4D | JR C,$8A53 | |||||||||||||||||
| 8A4F | LD A,H | |||||||||||||||||
| 8A50 | SUB $08 | |||||||||||||||||
| 8A52 | LD H,A | |||||||||||||||||
| 8A53 | DJNZ $8A38 | Loop the remaining rows | ||||||||||||||||
| 8A55 | OR A | |||||||||||||||||
| 8A56 | LD SP,($FD82) | |||||||||||||||||
| 8A5A | RET | |||||||||||||||||
| 8A5B | DEC SP | |||||||||||||||||
| 8A5C | POP AF | #0 opaque: OR the sprite straight in | ||||||||||||||||
| 8A5D | OR (HL) | |||||||||||||||||
| 8A5E | LD (HL),A | |||||||||||||||||
| 8A5F | INC H | |||||||||||||||||
| 8A60 | POP AF | #1 next pixel line | ||||||||||||||||
| 8A61 | OR (HL) | |||||||||||||||||
| 8A62 | LD (HL),A | |||||||||||||||||
| 8A63 | INC H | |||||||||||||||||
| 8A64 | LD A,H | Check screen third boundary | ||||||||||||||||
| 8A65 | AND $07 | |||||||||||||||||
| 8A67 | JR NZ,$8A73 | |||||||||||||||||
| 8A69 | LD A,L | Advance to the next screen row | ||||||||||||||||
| 8A6A | ADD A,$20 | |||||||||||||||||
| 8A6C | LD L,A | |||||||||||||||||
| 8A6D | JR C,$8A73 | |||||||||||||||||
| 8A6F | LD A,H | |||||||||||||||||
| 8A70 | SUB $08 | |||||||||||||||||
| 8A72 | LD H,A | |||||||||||||||||
| 8A73 | DJNZ $8A5C | Loop the rows | ||||||||||||||||
| 8A75 | OR A | |||||||||||||||||
| 8A76 | LD SP,($FD82) | Restore SP | ||||||||||||||||
| 8A7A | RET | |||||||||||||||||
|
Draws an eight-pixel-wide sprite, clipping it first. Colouring the ground beneath is skipped when the colour byte's top bit is set.
|
||||
| 8A7B | LD A,C | Save color, set width C=$08 | ||
| 8A7C | EX AF,AF' | |||
| 8A7D | LD C,$08 | |||
| 8A7F | PUSH HL | |||
| 8A80 | CALL $867C | Clip sprite rectangle against screen edge | ||
| 8A83 | EX (SP),HL | |||
| 8A84 | ADD HL,DE | |||
| 8A85 | POP DE | |||
| 8A86 | EX AF,AF' | Restore color, double for table index | ||
| 8A87 | LD C,A | |||
| 8A88 | ADD A,A | |||
| 8A89 | LD A,$02 | |||
| 8A8B | CALL NC,$899E | Compute screen draw address for sprite, save state to buffer | ||
| 8A8E | LD ($FD82),SP | |||
| 8A92 | LD SP,HL | |||
| 8A93 | EX DE,HL | |||
| 8A94 | POP DE | #0 column 0, upper line | ||
| 8A95 | LD A,(HL) | |||
| 8A96 | AND D | |||
| 8A97 | OR E | |||
| 8A98 | LD (HL),A | |||
| 8A99 | INC L | |||
| 8A9A | POP DE | #1 column 0, lower line | ||
| 8A9B | LD A,(HL) | |||
| 8A9C | AND D | |||
| 8A9D | OR E | |||
| 8A9E | LD (HL),A | |||
| 8A9F | INC H | |||
| 8AA0 | POP DE | #2 column 1, lower line | ||
| 8AA1 | LD A,(HL) | |||
| 8AA2 | AND D | |||
| 8AA3 | OR E | |||
| 8AA4 | LD (HL),A | |||
| 8AA5 | DEC L | |||
| 8AA6 | POP DE | #3 column 1, upper line | ||
| 8AA7 | LD A,(HL) | |||
| 8AA8 | AND D | |||
| 8AA9 | OR E | |||
| 8AAA | LD (HL),A | |||
| 8AAB | INC H | |||
| 8AAC | LD A,H | Cross into the next screen third | ||
| 8AAD | AND $07 | |||
| 8AAF | JR NZ,$8ABB | |||
| 8AB1 | LD A,L | Advance to the next screen row | ||
| 8AB2 | ADD A,$20 | |||
| 8AB4 | LD L,A | |||
| 8AB5 | JR C,$8ABB | |||
| 8AB7 | LD A,H | |||
| 8AB8 | SUB $08 | |||
| 8ABA | LD H,A | |||
| 8ABB | DJNZ $8A94 | Loop the rows | ||
| 8ABD | OR A | |||
| 8ABE | LD SP,($FD82) | |||
| 8AC2 | RET | |||
|
||||||||||||||
|
Draws a sprite twelve pixels wide, clipping it and colouring the ground beneath it before the blit. A global mode flag picks between a masked pass and a faster opaque one that skips the mask bytes in the same sprite data.
|
||||||||||||||
| 8AC3 | LD A,C | Save colour, set width to $0C | ||||||||||||
| 8AC4 | EX AF,AF' | |||||||||||||
| 8AC5 | LD C,$0C | |||||||||||||
| 8AC7 | PUSH HL | |||||||||||||
| 8AC8 | CALL $867C | Clip sprite rectangle against screen edge | ||||||||||||
| 8ACB | EX (SP),HL | |||||||||||||
| 8ACC | ADD HL,DE | Skip the clipped rows of sprite data | ||||||||||||
| 8ACD | POP DE | |||||||||||||
| 8ACE | EX AF,AF' | |||||||||||||
| 8ACF | LD C,A | |||||||||||||
| 8AD0 | LD A,$03 | Set drop type A=3 for draw address calc | ||||||||||||
| 8AD2 | CALL $899E | Compute screen draw address for sprite, save state to buffer | ||||||||||||
| 8AD5 | LD ($FD82),SP | Save SP, repurpose as sprite-data pointer | ||||||||||||
| 8AD9 | LD SP,HL | |||||||||||||
| 8ADA | EX DE,HL | |||||||||||||
| 8ADB | LD A,R | Draw-mode flag (R bit 7) picks masked or opaque | ||||||||||||
| 8ADD | JP P,$8B1B | |||||||||||||
| 8AE0 | POP DE | #0 column 0, upper line | ||||||||||||
| 8AE1 | LD A,(HL) | |||||||||||||
| 8AE2 | AND D | |||||||||||||
| 8AE3 | OR E | |||||||||||||
| 8AE4 | LD (HL),A | |||||||||||||
| 8AE5 | INC L | |||||||||||||
| 8AE6 | POP DE | #1 column 1, upper line | ||||||||||||
| 8AE7 | LD A,(HL) | |||||||||||||
| 8AE8 | AND D | |||||||||||||
| 8AE9 | OR E | |||||||||||||
| 8AEA | LD (HL),A | |||||||||||||
| 8AEB | INC L | |||||||||||||
| 8AEC | POP DE | #2 column 2, upper line | ||||||||||||
| 8AED | LD A,(HL) | |||||||||||||
| 8AEE | AND D | |||||||||||||
| 8AEF | OR E | |||||||||||||
| 8AF0 | LD (HL),A | |||||||||||||
| 8AF1 | INC H | |||||||||||||
| 8AF2 | POP DE | #3 column 2, lower line | ||||||||||||
| 8AF3 | LD A,(HL) | |||||||||||||
| 8AF4 | AND D | |||||||||||||
| 8AF5 | OR E | |||||||||||||
| 8AF6 | LD (HL),A | |||||||||||||
| 8AF7 | DEC L | |||||||||||||
| 8AF8 | POP DE | #4 column 1, lower line | ||||||||||||
| 8AF9 | LD A,(HL) | |||||||||||||
| 8AFA | AND D | |||||||||||||
| 8AFB | OR E | |||||||||||||
| 8AFC | LD (HL),A | |||||||||||||
| 8AFD | DEC L | |||||||||||||
| 8AFE | POP DE | #5 column 0, lower line | ||||||||||||
| 8AFF | LD A,(HL) | |||||||||||||
| 8B00 | AND D | |||||||||||||
| 8B01 | OR E | |||||||||||||
| 8B02 | LD (HL),A | |||||||||||||
| 8B03 | INC H | |||||||||||||
| 8B04 | LD A,H | Cross into the next screen third | ||||||||||||
| 8B05 | AND $07 | |||||||||||||
| 8B07 | JR NZ,$8B13 | |||||||||||||
| 8B09 | LD A,L | Advance to the next screen row | ||||||||||||
| 8B0A | ADD A,$20 | |||||||||||||
| 8B0C | LD L,A | |||||||||||||
| 8B0D | JR C,$8B13 | |||||||||||||
| 8B0F | LD A,H | |||||||||||||
| 8B10 | SUB $08 | |||||||||||||
| 8B12 | LD H,A | |||||||||||||
| 8B13 | DJNZ $8AE0 | Loop the pixel-line pairs | ||||||||||||
| 8B15 | OR A | |||||||||||||
| 8B16 | LD SP,($FD82) | Restore SP | ||||||||||||
| 8B1A | RET | |||||||||||||
| 8B1B | DEC SP | Opaque path: DEC SP misaligns POP AF to read data bytes only | ||||||||||||
| 8B1C | POP AF | #0 column 0, upper line | ||||||||||||
| 8B1D | OR (HL) | |||||||||||||
| 8B1E | LD (HL),A | |||||||||||||
| 8B1F | INC L | |||||||||||||
| 8B20 | POP AF | #1 column 1, upper line | ||||||||||||
| 8B21 | OR (HL) | |||||||||||||
| 8B22 | LD (HL),A | |||||||||||||
| 8B23 | INC L | |||||||||||||
| 8B24 | POP AF | #2 column 2, upper line | ||||||||||||
| 8B25 | OR (HL) | |||||||||||||
| 8B26 | LD (HL),A | |||||||||||||
| 8B27 | INC H | |||||||||||||
| 8B28 | POP AF | #3 column 2, lower line | ||||||||||||
| 8B29 | OR (HL) | |||||||||||||
| 8B2A | LD (HL),A | |||||||||||||
| 8B2B | DEC L | |||||||||||||
| 8B2C | POP AF | #4 column 1, lower line | ||||||||||||
| 8B2D | OR (HL) | |||||||||||||
| 8B2E | LD (HL),A | |||||||||||||
| 8B2F | DEC L | |||||||||||||
| 8B30 | POP AF | #5 column 0, lower line | ||||||||||||
| 8B31 | OR (HL) | |||||||||||||
| 8B32 | LD (HL),A | |||||||||||||
| 8B33 | INC H | |||||||||||||
| 8B34 | LD A,H | Cross into the next screen third | ||||||||||||
| 8B35 | AND $07 | |||||||||||||
| 8B37 | JR NZ,$8B43 | |||||||||||||
| 8B39 | LD A,L | |||||||||||||
| 8B3A | ADD A,$20 | |||||||||||||
| 8B3C | LD L,A | |||||||||||||
| 8B3D | JR C,$8B43 | |||||||||||||
| 8B3F | LD A,H | |||||||||||||
| 8B40 | SUB $08 | |||||||||||||
| 8B42 | LD H,A | |||||||||||||
| 8B43 | DJNZ $8B1C | Loop the pixel-line pairs | ||||||||||||
| 8B45 | OR A | |||||||||||||
| 8B46 | LD SP,($FD82) | Restore SP | ||||||||||||
| 8B4A | RET | |||||||||||||
|
Used by the routine at 8178.
|
||||
|
Widest member of the sprite-dispatch family: clips the rectangle, computes the screen address and blits with SP walking the sprite data. Like its narrower siblings it takes each popped word as an AND mask plus an OR value.
|
||||
| 8B4B | LD A,C | Save colour, set width to $10 | ||
| 8B4C | EX AF,AF' | |||
| 8B4D | LD C,$10 | |||
| 8B4F | PUSH HL | |||
| 8B50 | CALL $867C | Clip sprite rectangle against screen edge | ||
| 8B53 | EX (SP),HL | |||
| 8B54 | ADD HL,DE | Skip the clipped rows of sprite data | ||
| 8B55 | POP DE | |||
| 8B56 | EX AF,AF' | |||
| 8B57 | LD C,A | |||
| 8B58 | LD A,$04 | Set drop type A=4 for draw address calc | ||
| 8B5A | CALL $899E | Compute screen draw address for sprite, save state to buffer | ||
| 8B5D | LD ($FD82),SP | Save SP, repurpose as sprite-data pointer | ||
| 8B61 | LD SP,HL | |||
| 8B62 | EX DE,HL | |||
| 8B63 | LD A,R | Draw-mode flag (R bit 7) picks masked or opaque | ||
| 8B65 | JP P,$8BAF | |||
| 8B68 | POP DE | #0 column 0, upper line | ||
| 8B69 | LD A,(HL) | |||
| 8B6A | AND D | |||
| 8B6B | OR E | |||
| 8B6C | LD (HL),A | |||
| 8B6D | INC L | |||
| 8B6E | POP DE | #1 column 1, upper line | ||
| 8B6F | LD A,(HL) | |||
| 8B70 | AND D | |||
| 8B71 | OR E | |||
| 8B72 | LD (HL),A | |||
| 8B73 | INC L | |||
| 8B74 | POP DE | #2 column 2, upper line | ||
| 8B75 | LD A,(HL) | |||
| 8B76 | AND D | |||
| 8B77 | OR E | |||
| 8B78 | LD (HL),A | |||
| 8B79 | INC L | |||
| 8B7A | POP DE | #3 column 3, upper line | ||
| 8B7B | LD A,(HL) | |||
| 8B7C | AND D | |||
| 8B7D | OR E | |||
| 8B7E | LD (HL),A | |||
| 8B7F | INC H | |||
| 8B80 | POP DE | #4 column 3, lower line | ||
| 8B81 | LD A,(HL) | |||
| 8B82 | AND D | |||
| 8B83 | OR E | |||
| 8B84 | LD (HL),A | |||
| 8B85 | DEC L | |||
| 8B86 | POP DE | #5 column 2, lower line | ||
| 8B87 | LD A,(HL) | |||
| 8B88 | AND D | |||
| 8B89 | OR E | |||
| 8B8A | LD (HL),A | |||
| 8B8B | DEC L | |||
| 8B8C | POP DE | #6 column 1, lower line | ||
| 8B8D | LD A,(HL) | |||
| 8B8E | AND D | |||
| 8B8F | OR E | |||
| 8B90 | LD (HL),A | |||
| 8B91 | DEC L | |||
| 8B92 | POP DE | #7 column 0, lower line | ||
| 8B93 | LD A,(HL) | |||
| 8B94 | AND D | |||
| 8B95 | OR E | |||
| 8B96 | LD (HL),A | |||
| 8B97 | INC H | |||
| 8B98 | LD A,H | Check screen third boundary | ||
| 8B99 | AND $07 | |||
| 8B9B | JR NZ,$8BA7 | |||
| 8B9D | LD A,L | Advance to the next screen row | ||
| 8B9E | ADD A,$20 | |||
| 8BA0 | LD L,A | |||
| 8BA1 | JR C,$8BA7 | |||
| 8BA3 | LD A,H | |||
| 8BA4 | SUB $08 | |||
| 8BA6 | LD H,A | |||
| 8BA7 | DJNZ $8B68 | Loop the pixel-line pairs | ||
| 8BA9 | OR A | |||
| 8BAA | LD SP,($FD82) | Restore SP | ||
| 8BAE | RET | |||
| 8BAF | DEC SP | Opaque path: DEC SP misaligns POP AF to read data bytes only | ||
| 8BB0 | POP AF | #0 column 0, upper line | ||
| 8BB1 | OR (HL) | |||
| 8BB2 | LD (HL),A | |||
| 8BB3 | INC L | |||
| 8BB4 | POP AF | #1 column 1, upper line | ||
| 8BB5 | OR (HL) | |||
| 8BB6 | LD (HL),A | |||
| 8BB7 | INC L | |||
| 8BB8 | POP AF | #2 column 2, upper line | ||
| 8BB9 | OR (HL) | |||
| 8BBA | LD (HL),A | |||
| 8BBB | INC L | |||
| 8BBC | POP AF | #3 column 3, upper line | ||
| 8BBD | OR (HL) | |||
| 8BBE | LD (HL),A | |||
| 8BBF | INC H | |||
| 8BC0 | POP AF | #4 column 3, lower line | ||
| 8BC1 | OR (HL) | |||
| 8BC2 | LD (HL),A | |||
| 8BC3 | DEC L | |||
| 8BC4 | POP AF | #5 column 2, lower line | ||
| 8BC5 | OR (HL) | |||
| 8BC6 | LD (HL),A | |||
| 8BC7 | DEC L | |||
| 8BC8 | POP AF | |||
| 8BC9 | OR (HL) | |||
| 8BCA | LD (HL),A | |||
| 8BCB | DEC L | |||
| 8BCC | POP AF | |||
| 8BCD | OR (HL) | |||
| 8BCE | LD (HL),A | |||
| 8BCF | INC H | |||
| 8BD0 | LD A,H | |||
| 8BD1 | AND $07 | |||
| 8BD3 | JR NZ,$8BDF | |||
| 8BD5 | LD A,L | |||
| 8BD6 | ADD A,$20 | |||
| 8BD8 | LD L,A | |||
| 8BD9 | JR C,$8BDF | |||
| 8BDB | LD A,H | |||
| 8BDC | SUB $08 | |||
| 8BDE | LD H,A | |||
| 8BDF | DJNZ $8BB0 | |||
| 8BE1 | OR A | |||
| 8BE2 | LD SP,($FD82) | |||
| 8BE6 | RET | |||
|
Used by the routine at 88FD.
|
||||
|
Another member of the sprite-dispatch family, this one for the widest sprites. It clips the rectangle, computes the screen address and blits with SP walking the interleaved mask and data stream.
|
||||
| 8BE7 | LD A,C | Save colour, set width to $14 | ||
| 8BE8 | EX AF,AF' | |||
| 8BE9 | LD C,$14 | |||
| 8BEB | PUSH HL | |||
| 8BEC | CALL $867C | Clip sprite rectangle against screen edge | ||
| 8BEF | EX (SP),HL | |||
| 8BF0 | ADD HL,DE | Skip the clipped rows of sprite data | ||
| 8BF1 | POP DE | |||
| 8BF2 | EX AF,AF' | |||
| 8BF3 | LD C,A | |||
| 8BF4 | LD A,$05 | Set drop type A=5 for draw address calc | ||
| 8BF6 | CALL $899E | Compute screen draw address for sprite, save state to buffer | ||
| 8BF9 | LD ($FD82),SP | Save SP, repurpose as sprite-data pointer | ||
| 8BFD | LD SP,HL | |||
| 8BFE | EX DE,HL | |||
| 8BFF | POP DE | #0 column 0, upper line | ||
| 8C00 | LD A,(HL) | |||
| 8C01 | AND D | |||
| 8C02 | OR E | |||
| 8C03 | LD (HL),A | |||
| 8C04 | INC L | |||
| 8C05 | POP DE | #1 column 1, upper line | ||
| 8C06 | LD A,(HL) | |||
| 8C07 | AND D | |||
| 8C08 | OR E | |||
| 8C09 | LD (HL),A | |||
| 8C0A | INC L | |||
| 8C0B | POP DE | #2 column 2, upper line | ||
| 8C0C | LD A,(HL) | |||
| 8C0D | AND D | |||
| 8C0E | OR E | |||
| 8C0F | LD (HL),A | |||
| 8C10 | INC L | |||
| 8C11 | POP DE | #3 column 3, upper line | ||
| 8C12 | LD A,(HL) | |||
| 8C13 | AND D | |||
| 8C14 | OR E | |||
| 8C15 | LD (HL),A | |||
| 8C16 | INC L | |||
| 8C17 | POP DE | #4 column 4, upper line | ||
| 8C18 | LD A,(HL) | |||
| 8C19 | AND D | |||
| 8C1A | OR E | |||
| 8C1B | LD (HL),A | |||
| 8C1C | INC H | |||
| 8C1D | POP DE | #5 column 4, lower line | ||
| 8C1E | LD A,(HL) | |||
| 8C1F | AND D | |||
| 8C20 | OR E | |||
| 8C21 | LD (HL),A | |||
| 8C22 | DEC L | |||
| 8C23 | POP DE | #6 column 3, lower line | ||
| 8C24 | LD A,(HL) | |||
| 8C25 | AND D | |||
| 8C26 | OR E | |||
| 8C27 | LD (HL),A | |||
| 8C28 | DEC L | |||
| 8C29 | POP DE | #7 column 2, lower line | ||
| 8C2A | LD A,(HL) | |||
| 8C2B | AND D | |||
| 8C2C | OR E | |||
| 8C2D | LD (HL),A | |||
| 8C2E | DEC L | |||
| 8C2F | POP DE | #8 column 1, lower line | ||
| 8C30 | LD A,(HL) | |||
| 8C31 | AND D | |||
| 8C32 | OR E | |||
| 8C33 | LD (HL),A | |||
| 8C34 | DEC L | |||
| 8C35 | POP DE | #9 column 0, lower line | ||
| 8C36 | LD A,(HL) | |||
| 8C37 | AND D | |||
| 8C38 | OR E | |||
| 8C39 | LD (HL),A | |||
| 8C3A | INC H | |||
| 8C3B | LD A,H | Check screen third boundary | ||
| 8C3C | AND $07 | |||
| 8C3E | JR NZ,$8C4A | |||
| 8C40 | LD A,L | Advance to the next screen row | ||
| 8C41 | ADD A,$20 | |||
| 8C43 | LD L,A | |||
| 8C44 | JR C,$8C4A | |||
| 8C46 | LD A,H | |||
| 8C47 | SUB $08 | |||
| 8C49 | LD H,A | |||
| 8C4A | DJNZ $8BFF | |||
| 8C4C | OR A | |||
| 8C4D | LD SP,($FD82) | |||
| 8C51 | RET | |||
|
This entry point is used by the routine at 86F5.
|
||||
| 8C52 | LD A,C | |||
| 8C53 | EX AF,AF' | |||
| 8C54 | LD C,$18 | |||
| 8C56 | PUSH HL | |||
| 8C57 | CALL $867C | Clip sprite rectangle against screen edge | ||
| 8C5A | EX (SP),HL | |||
| 8C5B | ADD HL,DE | |||
| 8C5C | POP DE | |||
| 8C5D | EX AF,AF' | |||
| 8C5E | LD C,A | |||
| 8C5F | LD A,$06 | |||
| 8C61 | CALL $899E | Compute screen draw address for sprite, save state to buffer | ||
| 8C64 | LD ($FD82),SP | Save SP, repurpose as sprite-data pointer | ||
| 8C68 | LD SP,HL | |||
| 8C69 | EX DE,HL | |||
| 8C6A | POP DE | #0 column 0, upper line | ||
| 8C6B | LD A,(HL) | |||
| 8C6C | AND D | |||
| 8C6D | OR E | |||
| 8C6E | LD (HL),A | |||
| 8C6F | INC L | |||
| 8C70 | POP DE | #1 column 1, upper line | ||
| 8C71 | LD A,(HL) | |||
| 8C72 | AND D | |||
| 8C73 | OR E | |||
| 8C74 | LD (HL),A | |||
| 8C75 | INC L | |||
| 8C76 | POP DE | #2 column 2, upper line | ||
| 8C77 | LD A,(HL) | |||
| 8C78 | AND D | |||
| 8C79 | OR E | |||
| 8C7A | LD (HL),A | |||
| 8C7B | INC L | |||
| 8C7C | POP DE | #3 column 3, upper line | ||
| 8C7D | LD A,(HL) | |||
| 8C7E | AND D | |||
| 8C7F | OR E | |||
| 8C80 | LD (HL),A | |||
| 8C81 | INC L | |||
| 8C82 | POP DE | #4 column 4, upper line | ||
| 8C83 | LD A,(HL) | |||
| 8C84 | AND D | |||
| 8C85 | OR E | |||
| 8C86 | LD (HL),A | |||
| 8C87 | INC L | |||
| 8C88 | POP DE | |||
| 8C89 | LD A,(HL) | |||
| 8C8A | AND D | |||
| 8C8B | OR E | |||
| 8C8C | LD (HL),A | |||
| 8C8D | INC H | |||
| 8C8E | POP DE | #5 column 4, lower line | ||
| 8C8F | LD A,(HL) | |||
| 8C90 | AND D | |||
| 8C91 | OR E | |||
| 8C92 | LD (HL),A | |||
| 8C93 | DEC L | |||
| 8C94 | POP DE | #6 column 3, lower line | ||
| 8C95 | LD A,(HL) | |||
| 8C96 | AND D | |||
| 8C97 | OR E | |||
| 8C98 | LD (HL),A | |||
| 8C99 | DEC L | |||
| 8C9A | POP DE | #7 column 2, lower line | ||
| 8C9B | LD A,(HL) | |||
| 8C9C | AND D | |||
| 8C9D | OR E | |||
| 8C9E | LD (HL),A | |||
| 8C9F | DEC L | |||
| 8CA0 | POP DE | #8 column 1, lower line | ||
| 8CA1 | LD A,(HL) | |||
| 8CA2 | AND D | |||
| 8CA3 | OR E | |||
| 8CA4 | LD (HL),A | |||
| 8CA5 | DEC L | |||
| 8CA6 | POP DE | #9 column 0, lower line | ||
| 8CA7 | LD A,(HL) | |||
| 8CA8 | AND D | |||
| 8CA9 | OR E | |||
| 8CAA | LD (HL),A | |||
| 8CAB | DEC L | |||
| 8CAC | POP DE | |||
| 8CAD | LD A,(HL) | |||
| 8CAE | AND D | |||
| 8CAF | OR E | |||
| 8CB0 | LD (HL),A | |||
| 8CB1 | INC H | |||
| 8CB2 | LD A,H | |||
| 8CB3 | AND $07 | |||
| 8CB5 | JR NZ,$8CC1 | |||
| 8CB7 | LD A,L | |||
| 8CB8 | ADD A,$20 | |||
| 8CBA | LD L,A | |||
| 8CBB | JR C,$8CC1 | |||
| 8CBD | LD A,H | |||
| 8CBE | SUB $08 | |||
| 8CC0 | LD H,A | |||
| 8CC1 | DJNZ $8C6A | |||
| 8CC3 | OR A | |||
| 8CC4 | LD SP,($FD82) | |||
| 8CC8 | RET | |||
|
Used by the routine at 8914.
|
||||||||||||||||
|
Draws a full-width band across the screen, clipping it first and then laying each row down through the stack, masking the background out and the graphic in as it goes.
|
||||||||||||||||
| 8CC9 | LD A,C | Save color, set width C=$20 | ||||||||||||||
| 8CCA | EX AF,AF' | |||||||||||||||
| 8CCB | LD C,$20 | |||||||||||||||
| 8CCD | PUSH HL | |||||||||||||||
| 8CCE | CALL $867C | Clip sprite rectangle against screen edge | ||||||||||||||
| 8CD1 | EX (SP),HL | Swap position for return address | ||||||||||||||
| 8CD2 | ADD HL,DE | |||||||||||||||
| 8CD3 | POP DE | |||||||||||||||
| 8CD4 | EX AF,AF' | |||||||||||||||
| 8CD5 | LD C,A | |||||||||||||||
| 8CD6 | LD A,$08 | Set drop type A=8 for draw address calc | ||||||||||||||
| 8CD8 | CALL $899E | Compute screen draw address for sprite, save state to buffer | ||||||||||||||
| 8CDB | LD ($FD82),SP | |||||||||||||||
| 8CDF | LD SP,HL | |||||||||||||||
| 8CE0 | EX DE,HL | |||||||||||||||
| 8CE1 | POP DE | Draw byte 1 (top row, left to right) | ||||||||||||||
| 8CE2 | LD A,(HL) | |||||||||||||||
| 8CE3 | AND D | |||||||||||||||
| 8CE4 | OR E | |||||||||||||||
| 8CE5 | LD (HL),A | |||||||||||||||
| 8CE6 | INC L | |||||||||||||||
| 8CE7 | POP DE | Draw byte 2 | ||||||||||||||
| 8CE8 | LD A,(HL) | |||||||||||||||
| 8CE9 | AND D | |||||||||||||||
| 8CEA | OR E | |||||||||||||||
| 8CEB | LD (HL),A | |||||||||||||||
| 8CEC | INC L | |||||||||||||||
| 8CED | POP DE | Draw byte 3 | ||||||||||||||
| 8CEE | LD A,(HL) | |||||||||||||||
| 8CEF | AND D | |||||||||||||||
| 8CF0 | OR E | |||||||||||||||
| 8CF1 | LD (HL),A | |||||||||||||||
| 8CF2 | INC L | |||||||||||||||
| 8CF3 | POP DE | Draw byte 4 | ||||||||||||||
| 8CF4 | LD A,(HL) | |||||||||||||||
| 8CF5 | AND D | |||||||||||||||
| 8CF6 | OR E | |||||||||||||||
| 8CF7 | LD (HL),A | |||||||||||||||
| 8CF8 | INC L | |||||||||||||||
| 8CF9 | POP DE | Draw byte 5 | ||||||||||||||
| 8CFA | LD A,(HL) | |||||||||||||||
| 8CFB | AND D | |||||||||||||||
| 8CFC | OR E | |||||||||||||||
| 8CFD | LD (HL),A | |||||||||||||||
| 8CFE | INC L | |||||||||||||||
| 8CFF | POP DE | Draw byte 6 | ||||||||||||||
| 8D00 | LD A,(HL) | |||||||||||||||
| 8D01 | AND D | |||||||||||||||
| 8D02 | OR E | |||||||||||||||
| 8D03 | LD (HL),A | |||||||||||||||
| 8D04 | INC L | |||||||||||||||
| 8D05 | POP DE | Draw byte 7 | ||||||||||||||
| 8D06 | LD A,(HL) | |||||||||||||||
| 8D07 | AND D | |||||||||||||||
| 8D08 | OR E | |||||||||||||||
| 8D09 | LD (HL),A | |||||||||||||||
| 8D0A | INC L | |||||||||||||||
| 8D0B | POP DE | Draw byte 8 | ||||||||||||||
| 8D0C | LD A,(HL) | |||||||||||||||
| 8D0D | AND D | |||||||||||||||
| 8D0E | OR E | |||||||||||||||
| 8D0F | LD (HL),A | |||||||||||||||
| 8D10 | INC H | |||||||||||||||
| 8D11 | POP DE | Draw byte 9 (next row, right to left) | ||||||||||||||
| 8D12 | LD A,(HL) | |||||||||||||||
| 8D13 | AND D | |||||||||||||||
| 8D14 | OR E | |||||||||||||||
| 8D15 | LD (HL),A | |||||||||||||||
| 8D16 | DEC L | |||||||||||||||
| 8D17 | POP DE | Draw byte 10 | ||||||||||||||
| 8D18 | LD A,(HL) | |||||||||||||||
| 8D19 | AND D | |||||||||||||||
| 8D1A | OR E | |||||||||||||||
| 8D1B | LD (HL),A | |||||||||||||||
| 8D1C | DEC L | |||||||||||||||
| 8D1D | POP DE | Draw byte 11 | ||||||||||||||
| 8D1E | LD A,(HL) | |||||||||||||||
| 8D1F | AND D | |||||||||||||||
| 8D20 | OR E | |||||||||||||||
| 8D21 | LD (HL),A | |||||||||||||||
| 8D22 | DEC L | |||||||||||||||
| 8D23 | POP DE | Draw byte 12 | ||||||||||||||
| 8D24 | LD A,(HL) | |||||||||||||||
| 8D25 | AND D | |||||||||||||||
| 8D26 | OR E | |||||||||||||||
| 8D27 | LD (HL),A | |||||||||||||||
| 8D28 | DEC L | |||||||||||||||
| 8D29 | POP DE | Draw byte 13 | ||||||||||||||
| 8D2A | LD A,(HL) | |||||||||||||||
| 8D2B | AND D | |||||||||||||||
| 8D2C | OR E | |||||||||||||||
| 8D2D | LD (HL),A | |||||||||||||||
| 8D2E | DEC L | |||||||||||||||
| 8D2F | POP DE | Draw byte 14 | ||||||||||||||
| 8D30 | LD A,(HL) | |||||||||||||||
| 8D31 | AND D | |||||||||||||||
| 8D32 | OR E | |||||||||||||||
| 8D33 | LD (HL),A | |||||||||||||||
| 8D34 | DEC L | |||||||||||||||
| 8D35 | POP DE | Draw byte 15 | ||||||||||||||
| 8D36 | LD A,(HL) | |||||||||||||||
| 8D37 | AND D | |||||||||||||||
| 8D38 | OR E | |||||||||||||||
| 8D39 | LD (HL),A | |||||||||||||||
| 8D3A | DEC L | |||||||||||||||
| 8D3B | POP DE | Draw byte 16 | ||||||||||||||
| 8D3C | LD A,(HL) | |||||||||||||||
| 8D3D | AND D | |||||||||||||||
| 8D3E | OR E | |||||||||||||||
| 8D3F | LD (HL),A | |||||||||||||||
| 8D40 | INC H | |||||||||||||||
| 8D41 | LD A,H | Every 8 rows, step down to the next screen third | ||||||||||||||
| 8D42 | AND $07 | |||||||||||||||
| 8D44 | JR NZ,$8D50 | |||||||||||||||
| 8D46 | LD A,L | |||||||||||||||
| 8D47 | ADD A,$20 | |||||||||||||||
| 8D49 | LD L,A | |||||||||||||||
| 8D4A | JR C,$8D50 | |||||||||||||||
| 8D4C | LD A,H | |||||||||||||||
| 8D4D | SUB $08 | |||||||||||||||
| 8D4F | LD H,A | |||||||||||||||
| 8D50 | DJNZ $8CE1 | Loop back for the next column pair | ||||||||||||||
| 8D52 | OR A | |||||||||||||||
| 8D53 | LD SP,($FD82) | |||||||||||||||
| 8D57 | RET | |||||||||||||||
|
|
||||
|
Draws water strip 1, sharing its body with strip 2 at $8D5D and differing only in the attribute used. It works out the screen line from the row, then lays down three segments across it plus one at a fixed column.
|
||||
| 8D58 | LD A,$0D | First entry: attribute $0D | ||
| 8D5A | EX AF,AF' | |||
| 8D5B | JR $8D60 | |||
|
|
||||
|
Draws water strip 2, the second entry of the pair at $8D58, setting its own attribute before joining the shared body.
|
||||
| 8D5D | LD A,$31 | Second entry: attribute $31 | ||
| 8D5F | EX AF,AF' | |||
|
This entry point is used by the routine at 8D58.
|
||||
| 8D60 | LD A,D | Row into A, compare to $60 | ||
| 8D61 | CP $60 | |||
| 8D63 | CCF | Flip the carry and return once scrolled past it | ||
| 8D64 | RET C | |||
| 8D65 | LD A,D | Row * 2 indexes the $FE00 even-line table | ||
| 8D66 | ADD A,A | |||
| 8D67 | LD L,A | |||
| 8D68 | LD H,$FE | |||
| 8D6A | LD A,$07 | Seven columns in, add the table byte | ||
| 8D6C | ADD A,(HL) | |||
| 8D6D | INC L | Take the high byte, restore the low | ||
| 8D6E | LD H,(HL) | |||
| 8D6F | LD L,A | |||
| 8D70 | LD A,D | Row bits flipped and stepped back one | ||
| 8D71 | XOR $03 | |||
| 8D73 | DEC A | |||
| 8D74 | AND $03 | Masked to the sub-row 0-3 | ||
| 8D76 | LD C,A | |||
| 8D77 | CALL $8D9E | Draw one segment of the structure and colour the row beneath it | ||
| 8D7A | CALL $8D8D | Draw the structure's extra segment when the sub-row index calls for it | ||
| 8D7D | LD A,L | Step along by the column spacing | ||
| 8D7E | ADD A,E | |||
| 8D7F | LD L,A | |||
| 8D80 | CALL $8D9E | Draw one segment of the structure and colour the row beneath it | ||
| 8D83 | CALL $8D8D | Draw the structure's extra segment when the sub-row index calls for it | ||
| 8D86 | LD A,L | Jump to the fixed column $18 | ||
| 8D87 | OR $18 | |||
| 8D89 | LD L,A | |||
| 8D8A | CALL $8D9E | Draw one segment of the structure and colour the row beneath it | ||
|
Used by the routine at 8D5D.
|
||||||||||
|
Draws the structure's extra segment, but only when the sub-row index calls for one and the row is not the bottom of the band.
|
||||||||||
| 8D8D | INC C | Nothing more to draw? return | ||||||||
| 8D8E | DEC C | |||||||||
| 8D8F | RET Z | |||||||||
| 8D90 | LD A,D | The bottom row is left alone | ||||||||
| 8D91 | CP $5F | |||||||||
| 8D93 | RET Z | |||||||||
| 8D94 | LD A,C | All-ones pattern, swap in | ||||||||
| 8D95 | EXX | |||||||||
| 8D96 | LD DE,$FFFF | Both fill words set to $FFFF | ||||||||
| 8D99 | LD B,E | |||||||||
| 8D9A | LD C,E | |||||||||
| 8D9B | JP $8E35 | => Fill a block of screen rows with the DE and BC patterns through the stack | ||||||||
|
Used by the routine at 8D5D.
|
||||||||
|
Draws one segment of the structure: fills its rows with a clear pattern through 8E35, steps down a pixel line, then colours the cells beneath it and fills the rows below with a second pattern pair.
|
||||||||
| 8D9E | PUSH HL | Move the screen address into the alternate set | ||||||
| 8D9F | EXX | |||||||
| 8DA0 | POP HL | |||||||
| 8DA1 | LD DE,$0000 | Fill pattern: clear | ||||||
| 8DA4 | LD B,E | |||||||
| 8DA5 | LD C,E | |||||||
| 8DA6 | LD A,$01 | Fill one row | ||||||
| 8DA8 | CALL $8E35 | |||||||
| 8DAB | LD A,D | Stop at the bottom row | ||||||
| 8DAC | CP $5F | |||||||
| 8DAE | RET Z | |||||||
| 8DAF | EXX | Check screen third boundary | ||||||
| 8DB0 | LD A,H | |||||||
| 8DB1 | AND $07 | |||||||
| 8DB3 | JR NZ,$8DBF | |||||||
| 8DB5 | LD A,L | Advance to the next screen row | ||||||
| 8DB6 | ADD A,$20 | |||||||
| 8DB8 | LD L,A | |||||||
| 8DB9 | JR C,$8DBF | |||||||
| 8DBB | LD A,H | |||||||
| 8DBC | SUB $08 | |||||||
| 8DBE | LD H,A | |||||||
| 8DBF | CALL $8E51 | Fold the screen address into the attribute area and colour the cells | ||||||
| 8DC2 | LD DE,$8992 | Second pattern pair for the lower half | ||||||
| 8DC5 | LD BC,$E5DD | |||||||
| 8DC8 | LD A,$01 | Fill the rows below | ||||||
| 8DCA | JR $8E35 | |||||||
|
|
||||
|
Draws water, snapping the row down to a four-row grid and drawing the piece from the screen line it lands on.
|
||||
| 8DCC | LD A,D | |||
| 8DCD | CP $60 | |||
| 8DCF | CCF | |||
| 8DD0 | RET C | |||
| 8DD1 | LD A,D | Snap the row down to the 4-row grid | ||
| 8DD2 | AND $FC | |||
| 8DD4 | ADD A,A | |||
| 8DD5 | LD L,A | Look its screen line up in the $FE00 table | ||
| 8DD6 | LD H,$FE | |||
| 8DD8 | LD A,$07 | |||
| 8DDA | ADD A,(HL) | |||
| 8DDB | INC L | |||
| 8DDC | LD H,(HL) | |||
| 8DDD | LD L,A | |||
| 8DDE | LD A,D | Sub-row index from the low bits | ||
| 8DDF | INC A | |||
| 8DE0 | AND $03 | |||
| 8DE2 | LD C,A | |||
| 8DE3 | CALL $8E1D | Draw the upper half | ||
| 8DE6 | CALL $8DF9 | Colour it | ||
| 8DE9 | LD A,E | Step to the lower half | ||
| 8DEA | ADD A,L | |||
| 8DEB | LD L,A | |||
| 8DEC | CALL $8E1D | Draw the lower half | ||
| 8DEF | CALL $8DF9 | |||
| 8DF2 | LD A,L | |||
| 8DF3 | OR $18 | |||
| 8DF5 | LD L,A | |||
| 8DF6 | CALL $8E1D | |||
| 8DF9 | LD A,D | |||
| 8DFA | CP $5F | |||
| 8DFC | RET Z | |||
| 8DFD | EXX | |||
| 8DFE | LD A,H | |||
| 8DFF | AND $07 | |||
| 8E01 | JR NZ,$8E0D | |||
| 8E03 | LD A,L | |||
| 8E04 | ADD A,$20 | |||
| 8E06 | LD L,A | |||
| 8E07 | JR C,$8E0D | |||
| 8E09 | LD A,H | |||
| 8E0A | SUB $08 | |||
| 8E0C | LD H,A | |||
| 8E0D | LD A,$35 | |||
| 8E0F | EX AF,AF' | |||
| 8E10 | CALL $8E51 | Fold the screen address into the attribute area and colour the cells | ||
| 8E13 | LD DE,$DDE5 | |||
| 8E16 | LD BC,$9289 | |||
| 8E19 | LD A,$01 | |||
| 8E1B | JR $8E35 | => Fill a block of screen rows with the DE and BC patterns through the stack | ||
| 8E1D | PUSH HL | |||
| 8E1E | LD A,C | |||
| 8E1F | OR A | |||
| 8E20 | EXX | |||
| 8E21 | POP HL | |||
| 8E22 | LD DE,$FFFF | |||
| 8E25 | LD B,E | |||
| 8E26 | LD C,E | |||
| 8E27 | JR NZ,$8E35 | => Fill a block of screen rows with the DE and BC patterns through the stack | ||
| 8E29 | EXX | |||
| 8E2A | LD A,$29 | |||
| 8E2C | EX AF,AF' | |||
| 8E2D | CALL $8E51 | Fold the screen address into the attribute area and colour the cells | ||
| 8E30 | EXX | |||
| 8E31 | INC DE | |||
| 8E32 | INC BC | |||
| 8E33 | LD A,$04 | |||
|
||||||||||||||
|
Fills a run of screen rows with two alternating patterns, pushing DE onto one line and BC onto the next through SP, for A pairs of lines. The real SP is parked in $FD82 and restored on exit.
|
||||||||||||||
| 8E35 | LD ($FD82),SP | Save SP, repurpose it as the write pointer | ||||||||||||
| 8E39 | INC HL | Pushes write downwards, so start one byte past the row | ||||||||||||
| 8E3A | LD SP,HL | Point at the even line | ||||||||||||
| 8E3B | PUSH DE | #0-3 four pushes fill its eight bytes | ||||||||||||
| 8E3C | PUSH DE | |||||||||||||
| 8E3D | PUSH DE | |||||||||||||
| 8E3E | PUSH DE | |||||||||||||
| 8E3F | INC H | Step down a pixel line | ||||||||||||
| 8E40 | LD SP,HL | Point at the odd line | ||||||||||||
| 8E41 | PUSH BC | #0-3 four pushes of the second pattern | ||||||||||||
| 8E42 | PUSH BC | |||||||||||||
| 8E43 | PUSH BC | |||||||||||||
| 8E44 | PUSH BC | |||||||||||||
| 8E45 | INC H | Step down again | ||||||||||||
| 8E46 | DEC A | Loop for A pairs of lines | ||||||||||||
| 8E47 | JR NZ,$8E3A | |||||||||||||
| 8E49 | DEC HL | Undo the pre-step | ||||||||||||
| 8E4A | EXX | |||||||||||||
| 8E4B | LD SP,($FD82) | Restore SP | ||||||||||||
| 8E4F | OR A | |||||||||||||
| 8E50 | RET | |||||||||||||
|
||||||||
|
Folds a screen address into the matching $58xx attribute page and colours the cells there, so a structure's ground takes its colour in one pass.
|
||||||||
| 8E51 | LD B,H | |||||||
| 8E52 | LD A,H | |||||||
| 8E53 | AND $F8 | |||||||
| 8E55 | RRCA | |||||||
| 8E56 | RRCA | |||||||
| 8E57 | RRCA | |||||||
| 8E58 | AND $03 | |||||||
| 8E5A | OR $58 | |||||||
| 8E5C | LD H,A | |||||||
| 8E5D | EX AF,AF' | |||||||
| 8E5E | LD (HL),A | #0 rightmost cell | ||||||
| 8E5F | DEC L | |||||||
| 8E60 | LD (HL),A | #1 | ||||||
| 8E61 | DEC L | |||||||
| 8E62 | LD (HL),A | #2 | ||||||
| 8E63 | DEC L | |||||||
| 8E64 | LD (HL),A | #3 | ||||||
| 8E65 | DEC L | |||||||
| 8E66 | LD (HL),A | #4 | ||||||
| 8E67 | DEC L | |||||||
| 8E68 | LD (HL),A | #5 | ||||||
| 8E69 | DEC L | |||||||
| 8E6A | LD (HL),A | #6 | ||||||
| 8E6B | DEC L | |||||||
| 8E6C | LD (HL),A | #7 leftmost cell | ||||||
| 8E6D | EX AF,AF' | |||||||
| 8E6E | LD A,L | |||||||
| 8E6F | ADD A,$07 | |||||||
| 8E71 | LD L,A | |||||||
| 8E72 | LD H,B | |||||||
| 8E73 | RET | |||||||
|
|
||||
|
Draws a left-hand mortar while its row is on screen.
|
||||
| 8E74 | LD A,D | |||
| 8E75 | CP $67 | |||
| 8E77 | CCF | |||
| 8E78 | RET C | |||
| 8E79 | LD B,$08 | |||
| 8E7B | LD C,$30 | |||
| 8E7D | LD HL,($C00E) | |||
| 8E80 | JP $8A7B | => Sprite draw dispatch | ||
|
|
||||
|
Draws a right-hand mortar while its row is on screen.
|
||||
| 8E83 | LD A,D | |||
| 8E84 | CP $67 | |||
| 8E86 | CCF | |||
| 8E87 | RET C | |||
| 8E88 | LD B,$08 | |||
| 8E8A | LD C,$30 | |||
| 8E8C | LD HL,($C010) | |||
| 8E8F | JP $8A7B | => Sprite draw dispatch | ||
|
||||||||||||||||
|
Multiplies two bytes by shift and add, walking the eight bits of the multiplier and adding the other value in wherever a bit is set.
|
||||||||||||||||
| 8E92 | LD L,$00 | Clear the running total | ||||||||||||||
| 8E94 | LD D,L | |||||||||||||||
| 8E95 | ADD HL,HL | #7 top bit: double, add DE when it was set | ||||||||||||||
| 8E96 | JR NC,$8E99 | |||||||||||||||
| 8E98 | ADD HL,DE | |||||||||||||||
| 8E99 | ADD HL,HL | #6 | ||||||||||||||
| 8E9A | JR NC,$8E9D | |||||||||||||||
| 8E9C | ADD HL,DE | |||||||||||||||
| 8E9D | ADD HL,HL | #5 | ||||||||||||||
| 8E9E | JR NC,$8EA1 | |||||||||||||||
| 8EA0 | ADD HL,DE | |||||||||||||||
| 8EA1 | ADD HL,HL | #4 | ||||||||||||||
| 8EA2 | JR NC,$8EA5 | |||||||||||||||
| 8EA4 | ADD HL,DE | |||||||||||||||
| 8EA5 | ADD HL,HL | #3 | ||||||||||||||
| 8EA6 | JR NC,$8EA9 | |||||||||||||||
| 8EA8 | ADD HL,DE | |||||||||||||||
| 8EA9 | ADD HL,HL | #2 | ||||||||||||||
| 8EAA | JR NC,$8EAD | |||||||||||||||
| 8EAC | ADD HL,DE | |||||||||||||||
| 8EAD | ADD HL,HL | #1 | ||||||||||||||
| 8EAE | JR NC,$8EB1 | |||||||||||||||
| 8EB0 | ADD HL,DE | |||||||||||||||
| 8EB1 | ADD HL,HL | #0 bottom bit, then return | ||||||||||||||
| 8EB2 | RET NC | |||||||||||||||
| 8EB3 | ADD HL,DE | |||||||||||||||
| 8EB4 | RET | |||||||||||||||
|
||||||||||
|
A grenade box holding one grenade: drawn while it sits unclaimed, and once the player takes it the shared collect handler awards the grenade, scores and plays the pickup sound.
|
||||||||||
| 8EB5 | LD A,D | |||||||||
| 8EB6 | CP $67 | Reject if row off bottom edge | ||||||||
| 8EB8 | CCF | |||||||||
| 8EB9 | RET C | |||||||||
| 8EBA | LD A,$01 | |||||||||
| 8EBC | LD B,$08 | |||||||||
| 8EBE | LD C,$01 | |||||||||
| 8EC0 | BIT 7,E | Claimed? jump to collect | ||||||||
| 8EC2 | JR NZ,$8EFA | |||||||||
| 8EC4 | LD C,$32 | |||||||||
| 8EC6 | LD HL,($C008) | Load sprite $C008 | ||||||||
| 8EC9 | JP $8A7B | => Sprite draw dispatch | ||||||||
|
|
||||
|
A grenade box holding three grenades: drawn while unclaimed, handing over to the shared collect handler once the player takes it.
|
||||
| 8ECC | LD A,D | |||
| 8ECD | CP $6A | |||
| 8ECF | CCF | |||
| 8ED0 | RET C | |||
| 8ED1 | LD A,$03 | |||
| 8ED3 | LD B,$0B | |||
| 8ED5 | LD C,$02 | |||
| 8ED7 | BIT 7,E | |||
| 8ED9 | JR NZ,$8EFA | |||
| 8EDB | LD C,$32 | |||
| 8EDD | LD HL,($C00A) | |||
| 8EE0 | JP $8AC3 | => Sprite draw dispatch | ||
|
|
||||
|
A grenade box holding five grenades: drawn while unclaimed, and on pickup it awards them, scores 1000 and plays a sound.
|
||||
| 8EE3 | LD A,D | Reject if row (D) off bottom edge | ||
| 8EE4 | CP $6A | |||
| 8EE6 | CCF | |||
| 8EE7 | RET C | |||
| 8EE8 | LD A,$05 | Wider box, unclaimed variant | ||
| 8EEA | LD B,$0B | |||
| 8EEC | LD C,$02 | Flag says which sprite to draw | ||
| 8EEE | BIT 7,E | |||
| 8EF0 | JR NZ,$8EFA | |||
| 8EF2 | LD C,$32 | |||
| 8EF4 | LD HL,($C00C) | |||
| 8EF7 | JP $8AC3 | => Sprite draw dispatch | ||
| 8EFA | RES 7,E | Claimed: clear flag bit | ||
| 8EFC | CALL $6430 | We've got A more grenades | ||
| 8EFF | LD A,C | |||
| 8F00 | ADD A,A | |||
| 8F01 | ADD A,E | |||
| 8F02 | CP $21 | |||
| 8F04 | JR C,$8F07 | |||
| 8F06 | DEC E | |||
| 8F07 | CALL $854A | Sprite draw dispatch | ||
| 8F0A | LD BC,$0104 | +1000 | ||
| 8F0D | CALL $6415 | Update Score | ||
| 8F10 | LD A,$03 | |||
| 8F12 | CALL $642D | Trigger sound effect A (copy its parameter into slot A) | ||
| 8F15 | SCF | |||
| 8F16 | RET | |||
|
|
||||
|
Draws the left-hand end of a sandbag run while its row is on screen.
|
||||
| 8F17 | LD A,D | |||
| 8F18 | CP $68 | |||
| 8F1A | CCF | |||
| 8F1B | RET C | |||
| 8F1C | LD B,$09 | |||
| 8F1E | LD C,$31 | |||
| 8F20 | LD HL,($C016) | |||
| 8F23 | JP $8A7B | => Sprite draw dispatch | ||
|
|
||||
|
Draws the middle of a sandbag run while its row is on screen.
|
||||
| 8F26 | LD A,D | |||
| 8F27 | CP $68 | |||
| 8F29 | CCF | |||
| 8F2A | RET C | |||
| 8F2B | LD B,$09 | |||
| 8F2D | LD C,$31 | |||
| 8F2F | LD HL,($C018) | |||
| 8F32 | JP $8AC3 | => Sprite draw dispatch | ||
|
|
||||
|
Draws the right-hand end of a sandbag run while its row is on screen.
|
||||
| 8F35 | LD A,D | |||
| 8F36 | CP $68 | |||
| 8F38 | CCF | |||
| 8F39 | RET C | |||
| 8F3A | LD B,$09 | |||
| 8F3C | LD HL,($C01A) | |||
| 8F3F | JP $8A7B | => Sprite draw dispatch | ||
|
|
||||
|
Draws the road bottom edging, sharing its body with the top edging at $8F49 and differing only in colour and height. Above the band it addresses the screen directly; below it, it snaps the row to a four-row grid.
|
||||
| 8F42 | EXX | First entry: colour $30, height $07 | ||
| 8F43 | LD C,$07 | |||
| 8F45 | LD A,$30 | |||
| 8F47 | JR $8F4E | |||
|
|
||||
|
Draws the road top edging, the second entry of the pair at $8F42, setting its own colour and height before joining the shared body.
|
||||
| 8F49 | EXX | Second entry: colour $31, height $06 | ||
| 8F4A | LD C,$31 | |||
| 8F4C | LD A,$06 | |||
|
This entry point is used by the routine at 8F42.
|
||||
| 8F4E | EXX | Keep the colour and height in the alternate set | ||
| 8F4F | EX AF,AF' | |||
| 8F50 | LD A,D | Row into A, compare to $9F | ||
| 8F51 | CP $9F | |||
| 8F53 | CCF | Flip the carry and return once scrolled past it | ||
| 8F54 | RET C | |||
| 8F55 | LD B,$40 | Band height $40 | ||
| 8F57 | INC A | Row relative to the top of the band | ||
| 8F58 | SUB B | |||
| 8F59 | LD D,A | |||
| 8F5A | SUB $04 | Below the band? take the plain path | ||
| 8F5C | JP P,$8F8D | |||
| 8F5F | NEG | Above it: distance up from the band | ||
| 8F61 | LD C,A | |||
| 8F62 | LD A,$3F | Rows still visible from there | ||
| 8F64 | SUB C | |||
| 8F65 | SRL A | |||
| 8F67 | SRL A | |||
| 8F69 | INC A | Round up to a whole row | ||
| 8F6A | LD B,A | |||
| 8F6B | LD A,C | Cell column, quartered by two right shifts | ||
| 8F6C | SRL A | |||
| 8F6E | SRL A | |||
| 8F70 | ADD A,E | Add into the cursor | ||
| 8F71 | LD E,A | |||
| 8F72 | ADD A,$20 | Screen address in the $40xx third | ||
| 8F74 | LD L,A | |||
| 8F75 | LD H,$40 | |||
| 8F77 | LD A,C | Sub-row 0-3, counted from the bottom | ||
| 8F78 | AND $03 | |||
| 8F7A | XOR $03 | |||
| 8F7C | LD D,A | Count it up from 1 | ||
| 8F7D | INC D | |||
| 8F7E | LD A,C | Take the sub-row again, default fill $FF | ||
| 8F7F | AND $03 | |||
| 8F81 | LD C,$FF | |||
| 8F83 | JR Z,$8FC3 | Sub-row 0: straight to the fill | ||
| 8F85 | CP $02 | Otherwise pick the partial-row variant | ||
| 8F87 | JR Z,$8FD3 | |||
| 8F89 | JR C,$8FCA | |||
| 8F8B | JR $8FDC | |||
| 8F8D | LD B,$10 | Plain path: full band height | ||
| 8F8F | LD A,D | Row snapped to the 4-row grid | ||
| 8F90 | AND $FC | |||
| 8F92 | ADD A,A | Doubled into an offset | ||
| 8F93 | LD L,A | |||
| 8F94 | LD H,$FE | Look the screen line up in the $FE00 table | ||
| 8F96 | LD A,(HL) | |||
| 8F97 | INC L | |||
| 8F98 | LD H,(HL) | Take the high byte | ||
| 8F99 | ADD A,E | Offset by the column | ||
| 8F9A | LD L,A | |||
| 8F9B | LD C,$FF | Default fill $FF | ||
| 8F9D | LD A,D | Sub-row 0-3 picks how much of the row is drawn | ||
| 8F9E | AND $03 | |||
| 8FA0 | JR Z,$8FC3 | |||
| 8FA2 | CP $02 | |||
| 8FA4 | JR C,$8FBF | |||
| 8FA6 | JR Z,$8FBB | |||
| 8FA8 | LD C,H | Keep the screen page for later | ||
| 8FA9 | LD A,H | Fold the high byte into the $58xx page | ||
| 8FAA | RRCA | |||
| 8FAB | RRCA | |||
| 8FAC | RRCA | One more rotate, then OR in the page bits | ||
| 8FAD | OR $58 | |||
| 8FAF | LD H,A | |||
| 8FB0 | EXX | Take the colour from the alternate set | ||
| 8FB1 | LD A,C | |||
| 8FB2 | EXX | |||
| 8FB3 | LD (HL),A | Colour the cell | ||
| 8FB4 | LD H,C | Restore the screen page, clear the fill | ||
| 8FB5 | LD C,$00 | |||
| 8FB7 | LD (HL),C | #0-1 two rows of the column | ||
| 8FB8 | INC H | |||
| 8FB9 | LD (HL),C | |||
| 8FBA | INC H | |||
| 8FBB | LD (HL),C | #2-3 two more | ||
| 8FBC | INC H | |||
| 8FBD | LD (HL),C | |||
| 8FBE | INC H | |||
| 8FBF | LD (HL),C | #4-5 two more | ||
| 8FC0 | INC H | |||
| 8FC1 | LD (HL),C | |||
| 8FC2 | INC H | |||
| 8FC3 | LD (HL),C | #6-7 last pair | ||
| 8FC4 | INC H | |||
| 8FC5 | LD (HL),C | |||
| 8FC6 | CALL $8FFC | DOWN HL, off the bottom? done | ||
| 8FC9 | RET NC | |||
| 8FCA | LD (HL),$3F | Sub-row 3: two-thirds fill | ||
| 8FCC | INC H | |||
| 8FCD | LD (HL),$3F | The remaining third | ||
| 8FCF | CALL $8FFC | DOWN HL, off the bottom? done | ||
| 8FD2 | RET NC | |||
| 8FD3 | LD (HL),$0F | Sub-row 2: one-third fill | ||
| 8FD5 | INC H | |||
| 8FD6 | LD (HL),$0F | The remaining two-thirds | ||
| 8FD8 | CALL $8FFC | DOWN HL, off the bottom? done | ||
| 8FDB | RET NC | |||
| 8FDC | LD C,H | Keep the screen page, take the high byte | ||
| 8FDD | LD A,H | |||
| 8FDE | AND $F8 | Masked to the attribute third | ||
| 8FE0 | RRCA | Folded down into the page bits | ||
| 8FE1 | RRCA | |||
| 8FE2 | RRCA | |||
| 8FE3 | OR $58 | OR'd into the $58xx attribute page | ||
| 8FE5 | LD H,A | Swap in the colour | ||
| 8FE6 | EX AF,AF' | Store it, swap back | ||
| 8FE7 | LD (HL),A | |||
| 8FE8 | EX AF,AF' | |||
| 8FE9 | LD H,C | Restore the screen page | ||
| 8FEA | LD (HL),$03 | Sub-row 1: one-quarter fill | ||
| 8FEC | INC H | |||
| 8FED | LD (HL),$03 | The remaining three-quarters | ||
| 8FEF | CALL $8FFC | DOWN HL, off the bottom? done | ||
| 8FF2 | RET NC | |||
| 8FF3 | LD A,D | Row on four rows lower | ||
| 8FF4 | ADD A,$04 | |||
| 8FF6 | LD D,A | |||
| 8FF7 | INC E | Next column, loop the columns | ||
| 8FF8 | DJNZ $8F8F | |||
| 8FFA | OR A | |||
| 8FFB | RET | |||
| 8FFC | CALL $98DC | DOWN HL | ||
| 8FFF | LD A,H | |||
| 9000 | AND $18 | |||
| 9002 | CP $18 | |||
| 9004 | RET | |||
|
|
||||
|
Draws a road marking while its row is on screen.
|
||||
| 9005 | LD A,D | |||
| 9006 | CP $68 | |||
| 9008 | CCF | |||
| 9009 | RET C | |||
| 900A | LD B,$09 | |||
| 900C | LD C,$87 | |||
| 900E | LD HL,($C03E) | |||
| 9011 | JP $8A7B | => Sprite draw dispatch | ||
|
|
||||
|
Draws a tree as a top and bottom half, skipping either half that has scrolled off the screen.
|
||||
| 9014 | LD A,D | Top part off-screen? skip it | ||
| 9015 | CP $6B | |||
| 9017 | JR NC,$9025 | |||
| 9019 | LD HL,($C01E) | Load the top sprite ($C01E) | ||
| 901C | LD B,$0C | |||
| 901E | LD C,$B4 | |||
| 9020 | PUSH DE | |||
| 9021 | CALL $8A14 | Sprite draw dispatch variant, C=4 | ||
| 9024 | POP DE | |||
| 9025 | DEC E | |||
| 9026 | LD A,D | Move to the bottom part row | ||
| 9027 | SUB $0C | |||
| 9029 | CCF | |||
| 902A | RET NC | |||
| 902B | CP $04 | |||
| 902D | CCF | |||
| 902E | RET NC | |||
| 902F | LD D,A | |||
| 9030 | CP $67 | Bottom part on screen? | ||
| 9032 | CCF | |||
| 9033 | RET C | |||
| 9034 | LD HL,($C01C) | Load the bottom sprite ($C01C) | ||
| 9037 | LD B,$08 | |||
| 9039 | LD C,$34 | |||
| 903B | JP $8AC3 | => Sprite draw dispatch | ||
|
|
||||
|
Draws a boulder while its row is on screen.
|
||||
| 903E | LD A,D | |||
| 903F | CP $6A | |||
| 9041 | CCF | |||
| 9042 | RET C | |||
| 9043 | LD B,$0B | |||
| 9045 | LD C,$30 | |||
| 9047 | LD HL,($C014) | |||
| 904A | JP $8AC3 | => Sprite draw dispatch | ||
|
||||||||||
|
Draws a cliff edge, left or right variant, noting the edge column so other code knows where the cliff runs, then drawing its upper and lower halves.
|
||||||||||
| 904D | LD A,E | |||||||||
| 904E | AND $1F | |||||||||
| 9050 | BIT 7,E | E bit 7 picks left/right edge | ||||||||
| 9052 | JR NZ,$9070 | |||||||||
| 9054 | LD HL,($C002) | Get sprite addr Cliff edge left | ||||||||
| 9057 | PUSH HL | |||||||||
| 9058 | LD HL,($C048) | Get sprite addr ??? | ||||||||
| 905B | BIT 6,E | |||||||||
| 905D | JR Z,$908A | |||||||||
| 905F | LD (IY+$5F),D | Record left edge column (IY+$5F) | ||||||||
| 9062 | RES 0,(IY+$71) | |||||||||
| 9066 | BIT 5,E | |||||||||
| 9068 | JR Z,$908A | |||||||||
| 906A | SET 0,(IY+$71) | |||||||||
| 906E | JR $908A | |||||||||
| 9070 | LD HL,($C000) | Get sprite addr Cliff edge right | ||||||||
| 9073 | PUSH HL | |||||||||
| 9074 | LD HL,($C042) | |||||||||
| 9077 | BIT 6,E | |||||||||
| 9079 | JR Z,$908A | |||||||||
| 907B | LD (IY+$5E),D | Record right edge column (IY+$5E) | ||||||||
| 907E | RES 1,(IY+$71) | |||||||||
| 9082 | BIT 5,E | |||||||||
| 9084 | JR Z,$908A | |||||||||
| 9086 | SET 1,(IY+$71) | |||||||||
| 908A | LD E,A | |||||||||
| 908B | LD B,$15 | Top part height = $15 | ||||||||
| 908D | LD C,$34 | |||||||||
| 908F | LD A,$EC | |||||||||
| 9091 | CALL $90A1 | Adjust and clip sprite draw, calls $8A14 | ||||||||
| 9094 | POP HL | |||||||||
| 9095 | RET C | |||||||||
| 9096 | LD B,$0F | Bottom part height = $0F | ||||||||
| 9098 | LD C,$37 | |||||||||
| 909A | LD A,$FE | |||||||||
| 909C | CALL $90A1 | Adjust and clip sprite draw, calls $8A14 | ||||||||
| 909F | OR A | |||||||||
| 90A0 | RET | |||||||||
|
Used by the routine at 904D.
|
||||||||||||||||
|
Offsets a sprite's row by the given amount and draws it, skipping the draw when the result lands above the screen.
|
||||||||||||||||
| 90A1 | PUSH DE | |||||||||||||||
| 90A2 | ADD A,D | |||||||||||||||
| 90A3 | LD D,A | |||||||||||||||
| 90A4 | SUB $04 | |||||||||||||||
| 90A6 | OR A | |||||||||||||||
| 90A7 | CALL P,$8A14 | Sprite draw dispatch variant, C=4 | ||||||||||||||
| 90AA | POP DE | |||||||||||||||
| 90AB | RET | |||||||||||||||
|
||||||||||
|
Draws a mirrored cliff from a top and bottom sprite pair, then colours the attribute cells beneath it from a small palette table.
|
||||||||||
| 90AC | LD A,D | |||||||||
| 90AD | CP $93 | Reject if row off-screen | ||||||||
| 90AF | CCF | |||||||||
| 90B0 | RET C | |||||||||
| 90B1 | BIT 7,E | E bit 7 picks left/right variant | ||||||||
| 90B3 | RES 7,E | |||||||||
| 90B5 | LD A,E | |||||||||
| 90B6 | JR NZ,$90C1 | |||||||||
| 90B8 | LD HL,($C040) | Cliff top-right sprite address, width 6 | ||||||||
| 90BB | PUSH HL | |||||||||
| 90BC | LD HL,($C044) | Cliff bottom-right sprite address, width 6 | ||||||||
| 90BF | JR $90C8 | |||||||||
| 90C1 | LD HL,($C046) | Cliff top-left sprite address, width 6 | ||||||||
| 90C4 | PUSH HL | |||||||||
| 90C5 | LD HL,($C04A) | Cliff bottom-left sprite address, width 6 | ||||||||
| 90C8 | LD B,$14 | Sprite height = 20 | ||||||||
| 90CA | PUSH DE | |||||||||
| 90CB | LD A,$40 | |||||||||
| 90CD | CALL $834B | Draw sprite HL | ||||||||
| 90D0 | POP DE | |||||||||
| 90D1 | POP HL | |||||||||
| 90D2 | LD B,$0C | Sprite height = 12 | ||||||||
| 90D4 | PUSH DE | |||||||||
| 90D5 | LD A,D | |||||||||
| 90D6 | SUB $24 | |||||||||
| 90D8 | LD D,A | |||||||||
| 90D9 | CP $04 | |||||||||
| 90DB | LD A,$40 | |||||||||
| 90DD | CALL P,$834B | Draw sprite HL | ||||||||
| 90E0 | POP DE | |||||||||
| 90E1 | LD A,D | |||||||||
| 90E2 | AND $FC | |||||||||
| 90E4 | LD D,A | |||||||||
| 90E5 | LD BC,$3401 | |||||||||
| 90E8 | CALL $867C | Clip sprite rectangle against screen edge | ||||||||
| 90EB | PUSH HL | |||||||||
| 90EC | LD A,E | |||||||||
| 90ED | EXX | |||||||||
| 90EE | ADD A,$01 | |||||||||
| 90F0 | SRL A | |||||||||
| 90F2 | SRL A | |||||||||
| 90F4 | LD HL,$9124 | Colour palette table $9124 | ||||||||
| 90F7 | CALL $98D3 | HL = HL + A | ||||||||
| 90FA | EX DE,HL | |||||||||
| 90FB | POP HL | |||||||||
| 90FC | LD A,H | |||||||||
| 90FD | RRCA | |||||||||
| 90FE | RRCA | |||||||||
| 90FF | RRCA | |||||||||
| 9100 | AND $03 | |||||||||
| 9102 | OR $58 | Attribute area base ($58xx) | ||||||||
| 9104 | LD H,A | |||||||||
| 9105 | LD BC,$001B | |||||||||
| 9108 | EXX | |||||||||
| 9109 | LD A,B | |||||||||
| 910A | SRL A | |||||||||
| 910C | SRL A | |||||||||
| 910E | INC A | |||||||||
| 910F | LD B,A | |||||||||
| 9110 | EXX | Fill attribute row from palette | ||||||||
| 9111 | LD A,(DE) | |||||||||
| 9112 | INC DE | |||||||||
| 9113 | LD (HL),A | #0 first attribute cell | ||||||||
| 9114 | INC L | |||||||||
| 9115 | LD (HL),A | #1 second cell | ||||||||
| 9116 | INC L | |||||||||
| 9117 | LD (HL),A | #2 third cell | ||||||||
| 9118 | INC L | |||||||||
| 9119 | LD (HL),A | #3 fourth cell | ||||||||
| 911A | INC L | |||||||||
| 911B | LD (HL),A | #4 fifth cell | ||||||||
| 911C | INC L | |||||||||
| 911D | LD (HL),A | |||||||||
| 911E | ADD HL,BC | |||||||||
| 911F | EXX | |||||||||
| 9120 | DJNZ $9110 | |||||||||
| 9122 | OR A | |||||||||
| 9123 | RET | |||||||||
|
|
||||
| 9124 | DEFB $31,$34,$34,$34,$24,$21,$21,$21 | |||
| 912C | DEFB $27,$27,$27,$37,$37,$37 | |||
|
Used by the routine at 9193.
|
||||
|
Advances the level layout by one row. Blank ground is simply counted down a row at a time; otherwise the next record in the level sequence is read and acted on -- setting up more blank ground, marking a spawn point or the level end -- wrapping back to the start when the table runs out.
|
||||
| 9132 | LD A,($FD86) | Get Land space size | ||
| 9135 | OR A | zero? | ||
| 9136 | JR Z,$913D | yes => process next record in the sequence | ||
| 9138 | DEC A | |||
| 9139 | LD ($FD86),A | Update Land space size | ||
| 913C | RET | |||
| 913D | LD HL,($FD8A) | Get current level sequence address | ||
| 9140 | LD A,(HL) | Get record code | ||
| 9141 | AND $7F | |||
| 9143 | CP $7F | End of levels marker? | ||
| 9145 | JR NZ,$914D | |||
| 9147 | LD HL,$9236 | Level 1 start address | ||
| 914A | LD A,(HL) | Get record code | ||
| 914B | AND $7F | |||
| 914D | INC HL | |||
| 914E | LD E,(HL) | Get record parameter | ||
| 914F | INC HL | |||
| 9150 | LD ($FD8A),HL | Save current level sequence address | ||
| 9153 | OR A | $00 - Land space? | ||
| 9154 | JR NZ,$915B | no => jump | ||
| 9156 | LD A,E | |||
| 9157 | LD ($FD86),A | Save Land space size | ||
| 915A | RET | |||
| 915B | CP $29 | |||
| 915D | JR C,$9165 | |||
| 915F | LD BC,$0002 | |||
| 9162 | JP $6400 | => Block of redirects | ||
| 9165 | CP $22 | Spawn Point/Level End ? | ||
| 9167 | JR NZ,$9171 | no => jump | ||
| 9169 | DEC E | Level End ? | ||
| 916A | JR NZ,$913D | no => jump | ||
| 916C | SET 4,(IY+$15) | |||
| 9170 | RET | |||
| 9171 | CALL $9204 | Process record codes $01-28, not $22 | ||
| 9174 | JR $913D | => process next record in the sequence | ||
|
|
||||
|
Level-sequence record that abandons the sequence through the redirect block.
|
||||
| 9176 | LD BC,$0005 | |||
| 9179 | JP $6400 | => Block of redirects | ||
|
Used by the routine at 9193.
|
||||
|
Walks the scenery buffer chain and ticks a counter in every entry, so each object ages by one frame.
|
||||
| 917C | LD A,($FD88) | Get Offset in $FF00 buffer | ||
| 917F | OR A | |||
| 9180 | RET Z | |||
| 9181 | LD HL,$FF00 | |||
| 9184 | LD L,(HL) | |||
| 9185 | LD E,L | |||
| 9186 | LD A,L | |||
| 9187 | ADD A,$04 | |||
| 9189 | LD L,A | |||
| 918A | INC (HL) | |||
| 918B | LD L,E | |||
| 918C | LD A,($FD88) | Get Offset in $FF00 buffer | ||
| 918F | CP L | |||
| 9190 | JR NZ,$9184 | |||
| 9192 | RET | |||
|
Used by the routine at 8003.
|
||||
|
Per-frame world update: it advances the scenery buffer and the level sequence, sets this frame's draw mode, draws the three vehicles, then walks the buffer sending each record to its handler.
|
||||
| 9193 | BIT 4,(IY+$15) | |||
| 9197 | JR NZ,$91AA | |||
| 9199 | CALL $917C | Walk $FF00 buffer chain (offset $FD88), increment field at +4 | ||
| 919C | CALL $9132 | Decrement Land space or process next record in the sequence | ||
| 919F | BIT 1,(IY+$07) | |||
| 91A3 | RET NZ | |||
| 91A4 | LD A,$80 | |||
| 91A6 | LD R,A | |||
| 91A8 | JR $91AD | |||
|
This entry point is used by the routine at 8006.
|
||||
| 91AA | XOR A | |||
| 91AB | LD R,A | |||
| 91AD | CALL $85AB | Update and draw the Truck | ||
| 91B0 | CALL $8471 | Run both motorbikes | ||
| 91B3 | CALL $83B8 | Update and draw the Jeep sprite | ||
| 91B6 | LD A,($FD88) | Get Offset in $FF00 buffer | ||
| 91B9 | OR A | Nothing in the buffer? done | ||
| 91BA | RET Z | |||
| 91BB | LD HL,$FF00 | Start at the head of the chain | ||
|
This entry point is used by the routine at 91E3.
|
||||
| 91BE | LD L,(HL) | Follow the link to the next entry | ||
|
This entry point is used by the routine at 91E3.
|
||||
| 91BF | PUSH HL | |||
| 91C0 | INC L | |||
| 91C1 | INC L | |||
| 91C2 | LD A,(HL) | Read the record code | ||
| 91C3 | AND $7F | |||
| 91C5 | INC L | |||
| 91C6 | LD E,(HL) | Read the record position | ||
| 91C7 | INC L | |||
| 91C8 | LD D,(HL) | |||
| 91C9 | CP $29 | Codes of $29 and above are not scenery | ||
| 91CB | JR NC,$91DD | |||
| 91CD | LD HL,$91E3 | Queue the return point for the handler | ||
| 91D0 | PUSH HL | |||
| 91D1 | DEC A | Code doubled into the table | ||
| 91D2 | ADD A,A | |||
| 91D3 | ADD A,$12 | Add the table base | ||
| 91D5 | LD L,A | |||
| 91D6 | LD H,$80 | |||
| 91D8 | LD A,(HL) | Handler low byte | ||
| 91D9 | INC L | |||
| 91DA | LD H,(HL) | High byte, jump to it | ||
| 91DB | LD L,A | |||
| 91DC | JP (HL) | |||
| 91DD | LD BC,$0004 | Out of range: abort through the redirect | ||
| 91E0 | JP $6400 | => Block of redirects | ||
|
||||||||||
|
Return point after a level record is handled. Depending on the flag it either links the entry into the sorted scenery buffer and moves on to the next record, or simply advances the buffer position.
|
||||||||||
| 91E3 | JR NC,$91FC | Carry path: check buffer offset only | ||||||||
| 91E5 | POP HL | |||||||||
| 91E6 | LD A,($FD88) | Get Offset in $FF00 buffer | ||||||||
| 91E9 | CP L | |||||||||
| 91EA | JR Z,$91F6 | Already at head? update offset | ||||||||
| 91EC | LD A,L | |||||||||
| 91ED | LD L,(HL) | |||||||||
| 91EE | PUSH HL | |||||||||
| 91EF | LD L,A | |||||||||
| 91F0 | CALL $921F | Insert entry into $FF00 buffer chain | ||||||||
| 91F3 | POP HL | |||||||||
| 91F4 | JR $91BF | |||||||||
| 91F6 | INC L | |||||||||
| 91F7 | LD A,(HL) | |||||||||
| 91F8 | LD ($FD88),A | Update Offset in $FF00 buffer | ||||||||
| 91FB | RET | |||||||||
| 91FC | POP HL | |||||||||
| 91FD | LD A,($FD88) | Get Offset in $FF00 buffer | ||||||||
| 9200 | CP L | |||||||||
| 9201 | JR NZ,$91BE | |||||||||
| 9203 | RET | |||||||||
|
Used by the routine at 9132.
|
||||||||||
|
Handles the level-sequence record codes that place scenery, unpacking each record and adding the object it describes to the display list.
|
||||||||||
| 9204 | LD B,A | |||||||||
| 9205 | LD H,$FF | |||||||||
| 9207 | LD A,($FD88) | Get Offset in $FF00 buffer | ||||||||
| 920A | LD L,A | |||||||||
| 920B | LD A,(HL) | |||||||||
| 920C | LD L,A | |||||||||
| 920D | LD ($FD88),A | Update Offset in $FF00 buffer | ||||||||
| 9210 | INC L | |||||||||
| 9211 | INC L | |||||||||
| 9212 | LD (HL),B | |||||||||
| 9213 | INC L | |||||||||
| 9214 | LD (HL),E | |||||||||
| 9215 | INC L | #0 clip bound | ||||||||
| 9216 | LD (HL),$04 | |||||||||
| 9218 | INC L | #1 cleared field | ||||||||
| 9219 | LD (HL),$00 | |||||||||
| 921B | INC L | #2 cleared field | ||||||||
| 921C | LD (HL),$00 | |||||||||
| 921E | RET | |||||||||
|
Used by the routine at 91E3.
|
||||||||
|
Links a new entry into the scenery buffer chain, walking it until the right place is found so the list stays in order.
|
||||||||
| 921F | LD D,L | Remember the entry being linked | ||||||
| 9220 | LD A,(HL) | |||||||
| 9221 | INC L | Follow the chain to the next slot | ||||||
| 9222 | LD L,(HL) | |||||||
| 9223 | LD E,L | |||||||
| 9224 | LD (HL),A | Write this entry into it | ||||||
| 9225 | LD L,A | Step on to the link field | ||||||
| 9226 | INC L | |||||||
| 9227 | LD (HL),E | |||||||
| 9228 | LD A,($FD88) | Get Offset in $FF00 buffer | ||||||
| 922B | LD L,A | |||||||
| 922C | LD E,(HL) | |||||||
| 922D | LD (HL),D | |||||||
| 922E | LD L,D | |||||||
| 922F | LD (HL),E | |||||||
| 9230 | INC L | |||||||
| 9231 | LD (HL),A | |||||||
| 9232 | LD L,E | |||||||
| 9233 | INC L | |||||||
| 9234 | LD (HL),D | |||||||
| 9235 | RET | |||||||
|
Used by the routine at 8009.
|
||||
| 9236 | DEFB $22,$00 | Spawn Point | ||
| 9238 | DEFB $00,$04 | Land Space | ||
| 923A | DEFB $83,$0C | A tree in column 12 | ||
| 923C | DEFB $00,$05 | Land Space | ||
| 923E | DEFB $83,$0A | A tree in column 10 | ||
| 9240 | DEFB $83,$0E | A tree in column 14 | ||
| 9242 | DEFB $00,$1E | Land Space | ||
| 9244 | DEFB $83,$1C | A tree in column 28 | ||
| 9246 | DEFB $83,$02 | A tree in column 2 | ||
| 9248 | DEFB $00,$15 | Land Space | ||
| 924A | DEFB $82,$9A | A mirrored cliff in column 26 | ||
| 924C | DEFB $26,$59 | A cliff edge in column 25 with jumping soldiers | ||
| 924E | DEFB $00,$14 | Land Space | ||
| 9250 | DEFB $87,$14 | A boulder in column 20 | ||
| 9252 | DEFB $00,$14 | Land Space | ||
| 9254 | DEFB $83,$08 | A tree in column 8 | ||
| 9256 | DEFB $00,$1E | Land Space | ||
| 9258 | DEFB $83,$12 | A tree in column 18 | ||
| 925A | DEFB $83,$16 | A tree in column 22 | ||
| 925C | DEFB $00,$05 | Land Space | ||
| 925E | DEFB $83,$14 | A tree in column 20 | ||
| 9260 | DEFB $00,$19 | Land Space | ||
| 9262 | DEFB $83,$09 | A tree in column 9 | ||
| 9264 | DEFB $00,$14 | Land Space | ||
| 9266 | DEFB $82,$9A | A mirrored cliff in column 26 | ||
| 9268 | DEFB $26,$59 | A cliff edge in column 25 with jumping soldiers | ||
| 926A | DEFB $00,$28 | Land Space | ||
| 926C | DEFB $83,$01 | A tree in column 1 | ||
| 926E | DEFB $83,$17 | A tree in column 23 | ||
| 9270 | DEFB $83,$05 | A tree in column 5 | ||
| 9272 | DEFB $00,$06 | Land Space | ||
| 9274 | DEFB $83,$03 | A tree in column 3 | ||
| 9276 | DEFB $00,$10 | Land Space | ||
| 9278 | DEFB $8A,$11 | Sandbags LHS in column 17 | ||
| 927A | DEFB $8B,$13 | Sandbags MIDDLE in column 19 | ||
| 927C | DEFB $8B,$16 | Sandbags MIDDLE in column 22 | ||
| 927E | DEFB $8C,$19 | Sandbags RHS in column 25 | ||
| 9280 | DEFB $00,$08 | Land Space | ||
| 9282 | DEFB $83,$0D | A tree in column 13 | ||
| 9284 | DEFB $0F,$11 | A single grenade in column 17 | ||
| 9286 | DEFB $00,$1C | Land Space | ||
| 9288 | DEFB $83,$18 | A tree in column 24 | ||
| 928A | DEFB $82,$00 | A cliff in column 0 | ||
| 928C | DEFB $26,$C6 | A mirrored cliff edge in column 6 with jumping soldiers | ||
| 928E | DEFB $00,$28 | Land Space | ||
| 9290 | DEFB $83,$19 | A tree in column 25 | ||
| 9292 | DEFB $00,$1E | Land Space | ||
| 9294 | DEFB $82,$8A | A mirrored cliff in column 10 | ||
| 9296 | DEFB $82,$10 | A cliff in column 16 | ||
| 9298 | DEFB $26,$09 | A cliff edge in column 9 | ||
| 929A | DEFB $26,$96 | A mirrored cliff edge in column 22 | ||
| 929C | DEFB $00,$36 | Land Space | ||
| 929E | DEFB $87,$14 | A boulder in column 20 | ||
| 92A0 | DEFB $00,$04 | Land Space | ||
| 92A2 | DEFB $20,$00 | Prisoner of war | ||
| 92A4 | DEFB $00,$05 | Land Space | ||
| 92A6 | DEFB $22,$00 | Spawn Point | ||
| 92A8 | DEFB $00,$23 | Land Space | ||
| 92AA | DEFB $83,$02 | A tree in column 2 | ||
| 92AC | DEFB $00,$14 | Land Space | ||
| 92AE | DEFB $83,$13 | A tree in column 19 | ||
| 92B0 | DEFB $00,$1E | Land Space | ||
| 92B2 | DEFB $8B,$1D | Sandbags MIDDLE in column 29 | ||
| 92B4 | DEFB $8B,$1A | Sandbags MIDDLE in column 26 | ||
| 92B6 | DEFB $8A,$18 | Sandbags LHS in column 24 | ||
| 92B8 | DEFB $00,$08 | Land Space | ||
| 92BA | DEFB $13,$19 | A right mortar in column 25 | ||
| 92BC | DEFB $00,$06 | Land Space | ||
| 92BE | DEFB $11,$16 | A quintuple grenade in column 22 | ||
| 92C0 | DEFB $00,$0D | Land Space | ||
| 92C2 | DEFB $09,$0B | A wall in column 11 | ||
| 92C4 | DEFB $09,$1F | A wall in column 31 | ||
| 92C6 | DEFB $96,$0C | A tunnel in column 12 | ||
| 92C8 | DEFB $00,$17 | Land Space | ||
| 92CA | DEFB $17,$1F | Draw Road on bridge | ||
| 92CC | DEFB $00,$01 | Land Space | ||
| 92CE | DEFB $1B,$3C | Motorbike | ||
| 92D0 | DEFB $00,$0B | Land Space | ||
| 92D2 | DEFB $08,$1F | A bridge section | ||
| 92D4 | DEFB $00,$14 | Land Space | ||
| 92D6 | DEFB $87,$0F | A boulder in column 15 | ||
| 92D8 | DEFB $00,$32 | Land Space | ||
| 92DA | DEFB $22,$00 | Spawn Point | ||
| 92DC | DEFB $00,$1E | Land Space | ||
| 92DE | DEFB $87,$01 | A boulder in column 1 | ||
| 92E0 | DEFB $00,$23 | Land Space | ||
| 92E2 | DEFB $87,$09 | A boulder in column 9 | ||
| 92E4 | DEFB $00,$14 | Land Space | ||
| 92E6 | DEFB $87,$12 | A boulder in column 18 | ||
| 92E8 | DEFB $00,$1E | Land Space | ||
| 92EA | DEFB $87,$01 | A boulder in column 1 | ||
| 92EC | DEFB $87,$0E | A boulder in column 14 | ||
| 92EE | DEFB $87,$1B | A boulder in column 27 | ||
| 92F0 | DEFB $00,$19 | Land Space | ||
| 92F2 | DEFB $8A,$02 | Sandbags LHS in column 2 | ||
| 92F4 | DEFB $8B,$04 | Sandbags MIDDLE in column 4 | ||
| 92F6 | DEFB $8B,$07 | Sandbags MIDDLE in column 7 | ||
| 92F8 | DEFB $8C,$0A | Sandbags RHS in column 10 | ||
| 92FA | DEFB $00,$0A | Land Space | ||
| 92FC | DEFB $11,$03 | A quintuple grenade in column 3 | ||
| 92FE | DEFB $00,$0F | Land Space | ||
| 9300 | DEFB $8A,$13 | Sandbags LHS in column 19 | ||
| 9302 | DEFB $8B,$15 | Sandbags MIDDLE in column 21 | ||
| 9304 | DEFB $8B,$18 | Sandbags MIDDLE in column 24 | ||
| 9306 | DEFB $8C,$1B | Sandbags RHS in column 27 | ||
| 9308 | DEFB $00,$12 | Land Space | ||
| 930A | DEFB $8A,$04 | Sandbags LHS in column 4 | ||
| 930C | DEFB $8B,$06 | Sandbags MIDDLE in column 6 | ||
| 930E | DEFB $8C,$09 | Sandbags RHS in column 9 | ||
| 9310 | DEFB $00,$09 | Land Space | ||
| 9312 | DEFB $10,$05 | A triple grenade in column 5 | ||
| 9314 | DEFB $00,$05 | Land Space | ||
| 9316 | DEFB $22,$00 | Spawn Point | ||
| 9318 | DEFB $00,$32 | Land Space | ||
| 931A | DEFB $8A,$0D | Sandbags LHS in column 13 | ||
| 931C | DEFB $8B,$0F | Sandbags MIDDLE in column 15 | ||
| 931E | DEFB $8C,$12 | Sandbags RHS in column 18 | ||
| 9320 | DEFB $00,$19 | Land Space | ||
| 9322 | DEFB $8A,$00 | Sandbags LHS in column 0 | ||
| 9324 | DEFB $8B,$02 | Sandbags MIDDLE in column 2 | ||
| 9326 | DEFB $8C,$05 | Sandbags RHS in column 5 | ||
| 9328 | DEFB $00,$1C | Land Space | ||
| 932A | DEFB $8B,$1D | Sandbags MIDDLE in column 29 | ||
| 932C | DEFB $8B,$1A | Sandbags MIDDLE in column 26 | ||
| 932E | DEFB $8A,$18 | Sandbags LHS in column 24 | ||
| 9330 | DEFB $00,$08 | Land Space | ||
| 9332 | DEFB $0F,$18 | A single grenade in column 24 | ||
| 9334 | DEFB $00,$32 | Land Space | ||
| 9336 | DEFB $09,$0B | A wall in column 11 | ||
| 9338 | DEFB $09,$1F | A wall in column 31 | ||
| 933A | DEFB $21,$14 | Fortress gates | ||
| 933C | DEFB $00,$16 | Land Space | ||
| 933E | DEFB $22,$01 | Spawn Point | ||
|
|
||||
| 9340 | DEFB $00,$5E | Land Space | ||
| 9342 | DEFB $1C,$00 | Jeep | ||
| 9344 | DEFB $1A,$00 | Truck | ||
| 9346 | DEFB $00,$3C | Land Space | ||
| 9348 | DEFB $1B,$FF | Motorbike | ||
| 934A | DEFB $00,$28 | Land Space | ||
| 934C | DEFB $0F,$07 | A single grenade in column 7 | ||
| 934E | DEFB $00,$08 | Land Space | ||
| 9350 | DEFB $24,$00 | A trench MIDDLE in column 0 | ||
| 9352 | DEFB $24,$04 | A trench MIDDLE in column 4 | ||
| 9354 | DEFB $25,$08 | A trench RIGHT in column 8 | ||
| 9356 | DEFB $00,$19 | Land Space | ||
| 9358 | DEFB $23,$14 | A trench LHS in column 20 | ||
| 935A | DEFB $24,$16 | A trench MIDDLE in column 22 | ||
| 935C | DEFB $25,$1A | A trench RIGHT in column 26 | ||
| 935E | DEFB $00,$1E | Land Space | ||
| 9360 | DEFB $23,$02 | A trench LHS in column 2 | ||
| 9362 | DEFB $24,$04 | A trench MIDDLE in column 4 | ||
| 9364 | DEFB $25,$08 | A trench RIGHT in column 8 | ||
| 9366 | DEFB $00,$08 | Land Space | ||
| 9368 | DEFB $23,$16 | A trench LHS in column 22 | ||
| 936A | DEFB $24,$18 | A trench MIDDLE in column 24 | ||
| 936C | DEFB $25,$1C | A trench RIGHT in column 28 | ||
| 936E | DEFB $00,$1E | Land Space | ||
| 9370 | DEFB $23,$0A | A trench LHS in column 10 | ||
| 9372 | DEFB $24,$0C | A trench MIDDLE in column 12 | ||
| 9374 | DEFB $24,$10 | A trench MIDDLE in column 16 | ||
| 9376 | DEFB $25,$14 | A trench RIGHT in column 20 | ||
| 9378 | DEFB $00,$14 | Land Space | ||
| 937A | DEFB $10,$1B | A triple grenade in column 27 | ||
| 937C | DEFB $00,$0A | Land Space | ||
| 937E | DEFB $22,$00 | Spawn Point | ||
| 9380 | DEFB $00,$32 | Land Space | ||
| 9382 | DEFB $23,$12 | A trench LHS in column 18 | ||
| 9384 | DEFB $24,$14 | A trench MIDDLE in column 20 | ||
| 9386 | DEFB $24,$18 | A trench MIDDLE in column 24 | ||
| 9388 | DEFB $24,$1C | A trench MIDDLE in column 28 | ||
| 938A | DEFB $00,$19 | Land Space | ||
| 938C | DEFB $23,$01 | A trench LHS in column 1 | ||
| 938E | DEFB $24,$03 | A trench MIDDLE in column 3 | ||
| 9390 | DEFB $25,$07 | A trench RIGHT in column 7 | ||
| 9392 | DEFB $00,$1E | Land Space | ||
| 9394 | DEFB $23,$0C | A trench LHS in column 12 | ||
| 9396 | DEFB $24,$0E | A trench MIDDLE in column 14 | ||
| 9398 | DEFB $24,$12 | A trench MIDDLE in column 18 | ||
| 939A | DEFB $24,$16 | A trench MIDDLE in column 22 | ||
| 939C | DEFB $25,$1A | A trench RIGHT in column 26 | ||
| 939E | DEFB $00,$1E | Land Space | ||
| 93A0 | DEFB $23,$02 | A trench LHS in column 2 | ||
| 93A2 | DEFB $24,$04 | A trench MIDDLE in column 4 | ||
| 93A4 | DEFB $25,$08 | A trench RIGHT in column 8 | ||
| 93A6 | DEFB $00,$3C | Land Space | ||
| 93A8 | DEFB $10,$14 | A triple grenade in column 20 | ||
| 93AA | DEFB $00,$0C | Land Space | ||
| 93AC | DEFB $09,$0B | A wall in column 11 | ||
| 93AE | DEFB $09,$1F | A wall in column 31 | ||
| 93B0 | DEFB $96,$0C | A tunnel in column 12 | ||
| 93B2 | DEFB $00,$17 | Land Space | ||
| 93B4 | DEFB $17,$1F | Draw Road on bridge | ||
| 93B6 | DEFB $00,$0C | Land Space | ||
| 93B8 | DEFB $08,$1F | A bridge section | ||
| 93BA | DEFB $00,$50 | Land Space | ||
| 93BC | DEFB $22,$00 | Spawn Point | ||
| 93BE | DEFB $00,$14 | Land Space | ||
| 93C0 | DEFB $95,$00 | A barracks in column 0 | ||
| 93C2 | DEFB $00,$23 | Land Space | ||
| 93C4 | DEFB $10,$03 | A triple grenade in column 3 | ||
| 93C6 | DEFB $00,$1E | Land Space | ||
| 93C8 | DEFB $28,$19 | Start of NME with rocket launchers. Ferocity:25 | ||
| 93CA | DEFB $00,$0F | Land Space | ||
| 93CC | DEFB $98,$10 | A log crossing in column 16 | ||
| 93CE | DEFB $00,$02 | Land Space | ||
| 93D0 | DEFB $0D,$08 | Water | ||
| 93D2 | DEFB $00,$19 | Land Space | ||
| 93D4 | DEFB $19,$08 | Water Strip 1 | ||
| 93D6 | DEFB $00,$05 | Land Space | ||
| 93D8 | DEFB $0E,$08 | Water Strip 2 | ||
| 93DA | DEFB $00,$0A | Land Space | ||
| 93DC | DEFB $81,$00 | A bunker in column 0 | ||
| 93DE | DEFB $00,$14 | Land Space | ||
| 93E0 | DEFB $28,$00 | End of NME with rocket launchers | ||
| 93E2 | DEFB $00,$32 | Land Space | ||
| 93E4 | DEFB $81,$1A | A bunker in column 26 | ||
| 93E6 | DEFB $00,$05 | Land Space | ||
| 93E8 | DEFB $22,$00 | Spawn Point | ||
| 93EA | DEFB $00,$3C | Land Space | ||
| 93EC | DEFB $81,$00 | A bunker in column 0 | ||
| 93EE | DEFB $00,$1E | Land Space | ||
| 93F0 | DEFB $1F,$1A | A cave bottom edge in column 26 | ||
| 93F2 | DEFB $00,$03 | Land Space | ||
| 93F4 | DEFB $1E,$1A | A cave main in column 26 | ||
| 93F6 | DEFB $00,$0F | Land Space | ||
| 93F8 | DEFB $1F,$00 | A cave bottom edge in column 0 | ||
| 93FA | DEFB $00,$03 | Land Space | ||
| 93FC | DEFB $1E,$00 | A cave main in column 0 | ||
| 93FE | DEFB $1E,$1A | A cave main in column 26 | ||
| 9400 | DEFB $00,$13 | Land Space | ||
| 9402 | DEFB $1E,$00 | A cave main in column 0 | ||
| 9404 | DEFB $1E,$1A | A cave main in column 26 | ||
| 9406 | DEFB $00,$13 | Land Space | ||
| 9408 | DEFB $1D,$00 | A cave top edge in column 0 | ||
| 940A | DEFB $1D,$1A | A cave top edge in column 26 | ||
| 940C | DEFB $00,$04 | Land Space | ||
| 940E | DEFB $09,$0B | A wall in column 11 | ||
| 9410 | DEFB $09,$1F | A wall in column 31 | ||
| 9412 | DEFB $21,$14 | Fortress gates | ||
| 9414 | DEFB $00,$16 | Land Space | ||
| 9416 | DEFB $22,$01 | Spawn Point | ||
|
|
||||
| 9418 | DEFB $00,$14 | Land Space | ||
| 941A | DEFB $94,$86 | A large hut in column 6 | ||
| 941C | DEFB $00,$19 | Land Space | ||
| 941E | DEFB $94,$94 | A large hut in column 20 | ||
| 9420 | DEFB $00,$28 | Land Space | ||
| 9422 | DEFB $94,$81 | A large hut in column 1 | ||
| 9424 | DEFB $00,$14 | Land Space | ||
| 9426 | DEFB $10,$16 | A triple grenade in column 22 | ||
| 9428 | DEFB $00,$0A | Land Space | ||
| 942A | DEFB $94,$8B | A large hut in column 11 | ||
| 942C | DEFB $00,$1E | Land Space | ||
| 942E | DEFB $94,$94 | A large hut in column 20 | ||
| 9430 | DEFB $00,$0A | Land Space | ||
| 9432 | DEFB $94,$84 | A large hut in column 4 | ||
| 9434 | DEFB $00,$28 | Land Space | ||
| 9436 | DEFB $94,$8D | A large hut in column 13 | ||
| 9438 | DEFB $00,$28 | Land Space | ||
| 943A | DEFB $94,$86 | A large hut in column 6 | ||
| 943C | DEFB $00,$19 | Land Space | ||
| 943E | DEFB $94,$99 | A large hut in column 25 | ||
| 9440 | DEFB $00,$23 | Land Space | ||
| 9442 | DEFB $23,$12 | A trench LHS in column 18 | ||
| 9444 | DEFB $24,$14 | A trench MIDDLE in column 20 | ||
| 9446 | DEFB $25,$18 | A trench RIGHT in column 24 | ||
| 9448 | DEFB $00,$0D | Land Space | ||
| 944A | DEFB $10,$14 | A triple grenade in column 20 | ||
| 944C | DEFB $94,$81 | A large hut in column 1 | ||
| 944E | DEFB $00,$16 | Land Space | ||
| 9450 | DEFB $94,$8C | A large hut in column 12 | ||
| 9452 | DEFB $00,$32 | Land Space | ||
| 9454 | DEFB $94,$86 | A large hut in column 6 | ||
| 9456 | DEFB $00,$0A | Land Space | ||
| 9458 | DEFB $22,$00 | Spawn Point | ||
| 945A | DEFB $00,$05 | Land Space | ||
| 945C | DEFB $94,$93 | A large hut in column 19 | ||
| 945E | DEFB $00,$19 | Land Space | ||
| 9460 | DEFB $24,$00 | A trench MIDDLE in column 0 | ||
| 9462 | DEFB $24,$04 | A trench MIDDLE in column 4 | ||
| 9464 | DEFB $25,$08 | A trench RIGHT in column 8 | ||
| 9466 | DEFB $00,$1E | Land Space | ||
| 9468 | DEFB $94,$88 | A large hut in column 8 | ||
| 946A | DEFB $00,$1E | Land Space | ||
| 946C | DEFB $23,$14 | A trench LHS in column 20 | ||
| 946E | DEFB $24,$16 | A trench MIDDLE in column 22 | ||
| 9470 | DEFB $25,$1A | A trench RIGHT in column 26 | ||
| 9472 | DEFB $00,$28 | Land Space | ||
| 9474 | DEFB $94,$92 | A large hut in column 18 | ||
| 9476 | DEFB $00,$1E | Land Space | ||
| 9478 | DEFB $23,$00 | A trench LHS in column 0 | ||
| 947A | DEFB $24,$02 | A trench MIDDLE in column 2 | ||
| 947C | DEFB $24,$06 | A trench MIDDLE in column 6 | ||
| 947E | DEFB $25,$0A | A trench RIGHT in column 10 | ||
| 9480 | DEFB $00,$1E | Land Space | ||
| 9482 | DEFB $11,$04 | A quintuple grenade in column 4 | ||
| 9484 | DEFB $00,$28 | Land Space | ||
| 9486 | DEFB $09,$0B | A wall in column 11 | ||
| 9488 | DEFB $09,$1F | A wall in column 31 | ||
| 948A | DEFB $96,$0C | A tunnel in column 12 | ||
| 948C | DEFB $00,$17 | Land Space | ||
| 948E | DEFB $17,$1F | Draw Road on bridge | ||
| 9490 | DEFB $00,$0C | Land Space | ||
| 9492 | DEFB $08,$1F | A bridge section | ||
| 9494 | DEFB $00,$5A | Land Space | ||
| 9496 | DEFB $1A,$00 | Truck | ||
| 9498 | DEFB $00,$1E | Land Space | ||
| 949A | DEFB $1B,$FF | Motorbike | ||
| 949C | DEFB $00,$05 | Land Space | ||
| 949E | DEFB $22,$00 | Spawn Point | ||
| 94A0 | DEFB $00,$28 | Land Space | ||
| 94A2 | DEFB $1A,$00 | Truck | ||
| 94A4 | DEFB $00,$23 | Land Space | ||
| 94A6 | DEFB $1B,$FF | Motorbike | ||
| 94A8 | DEFB $00,$1E | Land Space | ||
| 94AA | DEFB $1C,$00 | Jeep | ||
| 94AC | DEFB $00,$28 | Land Space | ||
| 94AE | DEFB $1A,$00 | Truck | ||
| 94B0 | DEFB $00,$3C | Land Space | ||
| 94B2 | DEFB $28,$1E | Start of NME with rocket launchers. Ferocity:30 | ||
| 94B4 | DEFB $00,$28 | Land Space | ||
| 94B6 | DEFB $1C,$00 | Jeep | ||
| 94B8 | DEFB $28,$00 | End of NME with rocket launchers | ||
| 94BA | DEFB $00,$05 | Land Space | ||
| 94BC | DEFB $22,$00 | Spawn Point | ||
| 94BE | DEFB $00,$3C | Land Space | ||
| 94C0 | DEFB $0F,$04 | A single grenade in column 4 | ||
| 94C2 | DEFB $00,$3C | Land Space | ||
| 94C4 | DEFB $8A,$02 | Sandbags LHS in column 2 | ||
| 94C6 | DEFB $8B,$04 | Sandbags MIDDLE in column 4 | ||
| 94C8 | DEFB $8C,$07 | Sandbags RHS in column 7 | ||
| 94CA | DEFB $8A,$17 | Sandbags LHS in column 23 | ||
| 94CC | DEFB $8B,$19 | Sandbags MIDDLE in column 25 | ||
| 94CE | DEFB $8C,$1C | Sandbags RHS in column 28 | ||
| 94D0 | DEFB $00,$05 | Land Space | ||
| 94D2 | DEFB $10,$0A | A triple grenade in column 10 | ||
| 94D4 | DEFB $10,$13 | A triple grenade in column 19 | ||
| 94D6 | DEFB $00,$04 | Land Space | ||
| 94D8 | DEFB $13,$1B | A right mortar in column 27 | ||
| 94DA | DEFB $12,$03 | A left mortar in column 3 | ||
| 94DC | DEFB $00,$14 | Land Space | ||
| 94DE | DEFB $09,$0B | A wall in column 11 | ||
| 94E0 | DEFB $09,$1F | A wall in column 31 | ||
| 94E2 | DEFB $21,$14 | Fortress gates | ||
| 94E4 | DEFB $00,$16 | Land Space | ||
| 94E6 | DEFB $22,$01 | Spawn Point | ||
|
|
||||
| 94E8 | DEFB $00,$46 | Land Space | ||
| 94EA | DEFB $28,$46 | Start of NME with rocket launchers. Ferocity:70 | ||
| 94EC | DEFB $00,$14 | Land Space | ||
| 94EE | DEFB $98,$10 | A log crossing in column 16 | ||
| 94F0 | DEFB $00,$02 | Land Space | ||
| 94F2 | DEFB $0D,$08 | Water | ||
| 94F4 | DEFB $00,$19 | Land Space | ||
| 94F6 | DEFB $19,$08 | Water Strip 1 | ||
| 94F8 | DEFB $00,$05 | Land Space | ||
| 94FA | DEFB $0E,$08 | Water Strip 2 | ||
| 94FC | DEFB $00,$19 | Land Space | ||
| 94FE | DEFB $10,$19 | A triple grenade in column 25 | ||
| 9500 | DEFB $00,$19 | Land Space | ||
| 9502 | DEFB $98,$08 | A log crossing in column 8 | ||
| 9504 | DEFB $00,$02 | Land Space | ||
| 9506 | DEFB $0D,$10 | Water | ||
| 9508 | DEFB $00,$19 | Land Space | ||
| 950A | DEFB $19,$10 | Water Strip 1 | ||
| 950C | DEFB $00,$05 | Land Space | ||
| 950E | DEFB $0E,$10 | Water Strip 2 | ||
| 9510 | DEFB $00,$3C | Land Space | ||
| 9512 | DEFB $98,$10 | A log crossing in column 16 | ||
| 9514 | DEFB $00,$02 | Land Space | ||
| 9516 | DEFB $0D,$08 | Water | ||
| 9518 | DEFB $00,$19 | Land Space | ||
| 951A | DEFB $19,$08 | Water Strip 1 | ||
| 951C | DEFB $00,$05 | Land Space | ||
| 951E | DEFB $0E,$08 | Water Strip 2 | ||
| 9520 | DEFB $00,$1E | Land Space | ||
| 9522 | DEFB $22,$00 | Spawn Point | ||
| 9524 | DEFB $00,$14 | Land Space | ||
| 9526 | DEFB $28,$46 | Start of NME with rocket launchers. Ferocity:70 | ||
| 9528 | DEFB $83,$02 | A tree in column 2 | ||
| 952A | DEFB $00,$23 | Land Space | ||
| 952C | DEFB $83,$14 | A tree in column 20 | ||
| 952E | DEFB $00,$23 | Land Space | ||
| 9530 | DEFB $05,$10 | A road bottom edging in column 16 | ||
| 9532 | DEFB $00,$13 | Land Space | ||
| 9534 | DEFB $27,$01 | Turn the alarm ON | ||
| 9536 | DEFB $8A,$01 | Sandbags LHS in column 1 | ||
| 9538 | DEFB $8B,$03 | Sandbags MIDDLE in column 3 | ||
| 953A | DEFB $8B,$06 | Sandbags MIDDLE in column 6 | ||
| 953C | DEFB $8C,$09 | Sandbags RHS in column 9 | ||
| 953E | DEFB $00,$1E | Land Space | ||
| 9540 | DEFB $04,$1B | A road marking in column 27 | ||
| 9542 | DEFB $28,$14 | Start of NME with rocket launchers. Ferocity:20 | ||
| 9544 | DEFB $00,$0C | Land Space | ||
| 9546 | DEFB $05,$00 | A road bottom edging in column 0 | ||
| 9548 | DEFB $00,$0C | Land Space | ||
| 954A | DEFB $04,$15 | A road marking in column 21 | ||
| 954C | DEFB $11,$04 | A quintuple grenade in column 4 | ||
| 954E | DEFB $00,$06 | Land Space | ||
| 9550 | DEFB $06,$10 | A road top edging in column 16 | ||
| 9552 | DEFB $00,$12 | Land Space | ||
| 9554 | DEFB $04,$0F | A road marking in column 15 | ||
| 9556 | DEFB $00,$18 | Land Space | ||
| 9558 | DEFB $04,$09 | A road marking in column 9 | ||
| 955A | DEFB $00,$13 | Land Space | ||
| 955C | DEFB $06,$00 | A road top edging in column 0 | ||
| 955E | DEFB $00,$05 | Land Space | ||
| 9560 | DEFB $04,$03 | A road marking in column 3 | ||
| 9562 | DEFB $83,$14 | A tree in column 20 | ||
| 9564 | DEFB $00,$14 | Land Space | ||
| 9566 | DEFB $83,$1B | A tree in column 27 | ||
| 9568 | DEFB $00,$32 | Land Space | ||
| 956A | DEFB $81,$1A | A bunker in column 26 | ||
| 956C | DEFB $00,$1E | Land Space | ||
| 956E | DEFB $28,$00 | End of NME with rocket launchers | ||
| 9570 | DEFB $00,$28 | Land Space | ||
| 9572 | DEFB $87,$04 | A boulder in column 4 | ||
| 9574 | DEFB $00,$05 | Land Space | ||
| 9576 | DEFB $22,$00 | Spawn Point | ||
| 9578 | DEFB $00,$28 | Land Space | ||
| 957A | DEFB $27,$01 | Turn the alarm ON | ||
| 957C | DEFB $11,$19 | A quintuple grenade in column 25 | ||
| 957E | DEFB $00,$14 | Land Space | ||
| 9580 | DEFB $8A,$14 | Sandbags LHS in column 20 | ||
| 9582 | DEFB $8B,$16 | Sandbags MIDDLE in column 22 | ||
| 9584 | DEFB $8C,$19 | Sandbags RHS in column 25 | ||
| 9586 | DEFB $00,$32 | Land Space | ||
| 9588 | DEFB $27,$00 | Turn the alarm OFF | ||
| 958A | DEFB $10,$04 | A triple grenade in column 4 | ||
| 958C | DEFB $00,$32 | Land Space | ||
| 958E | DEFB $09,$0B | A wall in column 11 | ||
| 9590 | DEFB $09,$1F | A wall in column 31 | ||
| 9592 | DEFB $21,$14 | Fortress gates | ||
| 9594 | DEFB $00,$1E | Land Space | ||
| 9596 | DEFB $22,$01 | Spawn Point | ||
|
|
||||
| 9598 | DEFB $00,$05 | Land Space | ||
| 959A | DEFB $83,$05 | A tree in column 5 | ||
| 959C | DEFB $00,$05 | Land Space | ||
| 959E | DEFB $83,$0B | A tree in column 11 | ||
| 95A0 | DEFB $00,$1E | Land Space | ||
| 95A2 | DEFB $82,$80 | A mirrored cliff in column 0 | ||
| 95A4 | DEFB $26,$EC | A double cliff mirrored cliff edge in column 12 with jumping soldiers | ||
| 95A6 | DEFB $82,$06 | A cliff in column 6 | ||
| 95A8 | DEFB $00,$1E | Land Space | ||
| 95AA | DEFB $82,$9A | A mirrored cliff in column 26 | ||
| 95AC | DEFB $26,$59 | A cliff edge in column 25 with jumping soldiers | ||
| 95AE | DEFB $00,$1E | Land Space | ||
| 95B0 | DEFB $83,$03 | A tree in column 3 | ||
| 95B2 | DEFB $00,$05 | Land Space | ||
| 95B4 | DEFB $83,$07 | A tree in column 7 | ||
| 95B6 | DEFB $00,$14 | Land Space | ||
| 95B8 | DEFB $26,$1F | A cliff edge in column 31 | ||
| 95BA | DEFB $82,$80 | A mirrored cliff in column 0 | ||
| 95BC | DEFB $82,$06 | A cliff in column 6 | ||
| 95BE | DEFB $26,$EC | A double cliff mirrored cliff edge in column 12 with jumping soldiers | ||
| 95C0 | DEFB $00,$3C | Land Space | ||
| 95C2 | DEFB $0F,$09 | A single grenade in column 9 | ||
| 95C4 | DEFB $83,$0C | A tree in column 12 | ||
| 95C6 | DEFB $00,$08 | Land Space | ||
| 95C8 | DEFB $83,$0A | A tree in column 10 | ||
| 95CA | DEFB $00,$28 | Land Space | ||
| 95CC | DEFB $82,$8A | A mirrored cliff in column 10 | ||
| 95CE | DEFB $82,$10 | A cliff in column 16 | ||
| 95D0 | DEFB $26,$09 | A cliff edge in column 9 | ||
| 95D2 | DEFB $26,$96 | A mirrored cliff edge in column 22 | ||
| 95D4 | DEFB $00,$3C | Land Space | ||
| 95D6 | DEFB $82,$1A | A cliff in column 26 | ||
| 95D8 | DEFB $82,$94 | A mirrored cliff in column 20 | ||
| 95DA | DEFB $26,$73 | A double cliff cliff edge in column 19 with jumping soldiers | ||
| 95DC | DEFB $00,$06 | Land Space | ||
| 95DE | DEFB $82,$00 | A cliff in column 0 | ||
| 95E0 | DEFB $26,$C6 | A mirrored cliff edge in column 6 with jumping soldiers | ||
| 95E2 | DEFB $00,$32 | Land Space | ||
| 95E4 | DEFB $22,$00 | Spawn Point | ||
| 95E6 | DEFB $00,$05 | Land Space | ||
| 95E8 | DEFB $83,$0A | A tree in column 10 | ||
| 95EA | DEFB $83,$0E | A tree in column 14 | ||
| 95EC | DEFB $00,$08 | Land Space | ||
| 95EE | DEFB $83,$0C | A tree in column 12 | ||
| 95F0 | DEFB $00,$28 | Land Space | ||
| 95F2 | DEFB $83,$14 | A tree in column 20 | ||
| 95F4 | DEFB $00,$03 | Land Space | ||
| 95F6 | DEFB $83,$18 | A tree in column 24 | ||
| 95F8 | DEFB $00,$07 | Land Space | ||
| 95FA | DEFB $83,$1B | A tree in column 27 | ||
| 95FC | DEFB $00,$0A | Land Space | ||
| 95FE | DEFB $82,$80 | A mirrored cliff in column 0 | ||
| 9600 | DEFB $82,$06 | A cliff in column 6 | ||
| 9602 | DEFB $26,$EC | A double cliff mirrored cliff edge in column 12 with jumping soldiers | ||
| 9604 | DEFB $00,$0F | Land Space | ||
| 9606 | DEFB $82,$1A | A cliff in column 26 | ||
| 9608 | DEFB $82,$94 | A mirrored cliff in column 20 | ||
| 960A | DEFB $26,$73 | A double cliff cliff edge in column 19 with jumping soldiers | ||
| 960C | DEFB $00,$3C | Land Space | ||
| 960E | DEFB $11,$09 | A quintuple grenade in column 9 | ||
| 9610 | DEFB $00,$0E | Land Space | ||
| 9612 | DEFB $09,$0B | A wall in column 11 | ||
| 9614 | DEFB $09,$1F | A wall in column 31 | ||
| 9616 | DEFB $96,$0C | A tunnel in column 12 | ||
| 9618 | DEFB $00,$17 | Land Space | ||
| 961A | DEFB $17,$1F | Draw Road on bridge | ||
| 961C | DEFB $00,$01 | Land Space | ||
| 961E | DEFB $1B,$3C | Motorbike | ||
| 9620 | DEFB $00,$0B | Land Space | ||
| 9622 | DEFB $08,$1F | A bridge section | ||
| 9624 | DEFB $00,$28 | Land Space | ||
| 9626 | DEFB $87,$0E | A boulder in column 14 | ||
| 9628 | DEFB $00,$1E | Land Space | ||
| 962A | DEFB $87,$04 | A boulder in column 4 | ||
| 962C | DEFB $00,$28 | Land Space | ||
| 962E | DEFB $22,$00 | Spawn Point | ||
| 9630 | DEFB $00,$05 | Land Space | ||
| 9632 | DEFB $8A,$18 | Sandbags LHS in column 24 | ||
| 9634 | DEFB $8B,$1A | Sandbags MIDDLE in column 26 | ||
| 9636 | DEFB $8B,$1D | Sandbags MIDDLE in column 29 | ||
| 9638 | DEFB $00,$05 | Land Space | ||
| 963A | DEFB $87,$06 | A boulder in column 6 | ||
| 963C | DEFB $00,$14 | Land Space | ||
| 963E | DEFB $87,$19 | A boulder in column 25 | ||
| 9640 | DEFB $00,$0F | Land Space | ||
| 9642 | DEFB $87,$10 | A boulder in column 16 | ||
| 9644 | DEFB $00,$1E | Land Space | ||
| 9646 | DEFB $87,$16 | A boulder in column 22 | ||
| 9648 | DEFB $8B,$00 | Sandbags MIDDLE in column 0 | ||
| 964A | DEFB $8C,$03 | Sandbags RHS in column 3 | ||
| 964C | DEFB $00,$22 | Land Space | ||
| 964E | DEFB $87,$02 | A boulder in column 2 | ||
| 9650 | DEFB $00,$18 | Land Space | ||
| 9652 | DEFB $87,$0B | A boulder in column 11 | ||
| 9654 | DEFB $00,$14 | Land Space | ||
| 9656 | DEFB $87,$12 | A boulder in column 18 | ||
| 9658 | DEFB $00,$08 | Land Space | ||
| 965A | DEFB $82,$80 | A mirrored cliff in column 0 | ||
| 965C | DEFB $82,$06 | A cliff in column 6 | ||
| 965E | DEFB $26,$EC | A double cliff mirrored cliff edge in column 12 with jumping soldiers | ||
| 9660 | DEFB $00,$14 | Land Space | ||
| 9662 | DEFB $87,$19 | A boulder in column 25 | ||
| 9664 | DEFB $00,$1E | Land Space | ||
| 9666 | DEFB $8A,$0F | Sandbags LHS in column 15 | ||
| 9668 | DEFB $8B,$11 | Sandbags MIDDLE in column 17 | ||
| 966A | DEFB $8C,$14 | Sandbags RHS in column 20 | ||
| 966C | DEFB $00,$3C | Land Space | ||
| 966E | DEFB $28,$1E | Start of NME with rocket launchers. Ferocity:30 | ||
| 9670 | DEFB $23,$0A | A trench LHS in column 10 | ||
| 9672 | DEFB $24,$0C | A trench MIDDLE in column 12 | ||
| 9674 | DEFB $24,$10 | A trench MIDDLE in column 16 | ||
| 9676 | DEFB $25,$14 | A trench RIGHT in column 20 | ||
| 9678 | DEFB $00,$14 | Land Space | ||
| 967A | DEFB $25,$0A | A trench RIGHT in column 10 | ||
| 967C | DEFB $24,$06 | A trench MIDDLE in column 6 | ||
| 967E | DEFB $23,$04 | A trench LHS in column 4 | ||
| 9680 | DEFB $23,$14 | A trench LHS in column 20 | ||
| 9682 | DEFB $24,$16 | A trench MIDDLE in column 22 | ||
| 9684 | DEFB $25,$1A | A trench RIGHT in column 26 | ||
| 9686 | DEFB $00,$0F | Land Space | ||
| 9688 | DEFB $28,$00 | End of NME with rocket launchers | ||
| 968A | DEFB $09,$0B | A wall in column 11 | ||
| 968C | DEFB $09,$1F | A wall in column 31 | ||
| 968E | DEFB $21,$14 | Fortress gates | ||
| 9690 | DEFB $00,$16 | Land Space | ||
| 9692 | DEFB $22,$01 | Spawn Point | ||
|
|
||||
| 9694 | DEFB $00,$28 | Land Space | ||
| 9696 | DEFB $81,$00 | A bunker in column 0 | ||
| 9698 | DEFB $00,$32 | Land Space | ||
| 969A | DEFB $81,$1A | A bunker in column 26 | ||
| 969C | DEFB $00,$32 | Land Space | ||
| 969E | DEFB $81,$00 | A bunker in column 0 | ||
| 96A0 | DEFB $00,$28 | Land Space | ||
| 96A2 | DEFB $81,$1A | A bunker in column 26 | ||
| 96A4 | DEFB $00,$32 | Land Space | ||
| 96A6 | DEFB $1F,$1A | A cave bottom edge in column 26 | ||
| 96A8 | DEFB $1F,$00 | A cave bottom edge in column 0 | ||
| 96AA | DEFB $00,$03 | Land Space | ||
| 96AC | DEFB $1E,$1A | A cave main in column 26 | ||
| 96AE | DEFB $1E,$00 | A cave main in column 0 | ||
| 96B0 | DEFB $00,$13 | Land Space | ||
| 96B2 | DEFB $11,$07 | A quintuple grenade in column 7 | ||
| 96B4 | DEFB $1E,$1A | A cave main in column 26 | ||
| 96B6 | DEFB $1E,$00 | A cave main in column 0 | ||
| 96B8 | DEFB $00,$13 | Land Space | ||
| 96BA | DEFB $1E,$1A | A cave main in column 26 | ||
| 96BC | DEFB $1E,$00 | A cave main in column 0 | ||
| 96BE | DEFB $00,$13 | Land Space | ||
| 96C0 | DEFB $10,$16 | A triple grenade in column 22 | ||
| 96C2 | DEFB $1E,$1A | A cave main in column 26 | ||
| 96C4 | DEFB $1E,$00 | A cave main in column 0 | ||
| 96C6 | DEFB $00,$13 | Land Space | ||
| 96C8 | DEFB $1E,$1A | A cave main in column 26 | ||
| 96CA | DEFB $1E,$00 | A cave main in column 0 | ||
| 96CC | DEFB $00,$13 | Land Space | ||
| 96CE | DEFB $1E,$1A | A cave main in column 26 | ||
| 96D0 | DEFB $1E,$00 | A cave main in column 0 | ||
| 96D2 | DEFB $00,$13 | Land Space | ||
| 96D4 | DEFB $1D,$00 | A cave top edge in column 0 | ||
| 96D6 | DEFB $1D,$1A | A cave top edge in column 26 | ||
| 96D8 | DEFB $00,$23 | Land Space | ||
| 96DA | DEFB $09,$0B | A wall in column 11 | ||
| 96DC | DEFB $09,$1F | A wall in column 31 | ||
| 96DE | DEFB $96,$0C | A tunnel in column 12 | ||
| 96E0 | DEFB $00,$17 | Land Space | ||
| 96E2 | DEFB $17,$1F | Draw Road on bridge | ||
| 96E4 | DEFB $00,$0C | Land Space | ||
| 96E6 | DEFB $08,$1F | A bridge section | ||
| 96E8 | DEFB $00,$3C | Land Space | ||
| 96EA | DEFB $25,$00 | A trench RIGHT in column 0 | ||
| 96EC | DEFB $00,$1E | Land Space | ||
| 96EE | DEFB $22,$00 | Spawn Point | ||
| 96F0 | DEFB $00,$05 | Land Space | ||
| 96F2 | DEFB $24,$1C | A trench MIDDLE in column 28 | ||
| 96F4 | DEFB $23,$1A | A trench LHS in column 26 | ||
| 96F6 | DEFB $00,$21 | Land Space | ||
| 96F8 | DEFB $24,$00 | A trench MIDDLE in column 0 | ||
| 96FA | DEFB $24,$04 | A trench MIDDLE in column 4 | ||
| 96FC | DEFB $25,$08 | A trench RIGHT in column 8 | ||
| 96FE | DEFB $00,$19 | Land Space | ||
| 9700 | DEFB $23,$10 | A trench LHS in column 16 | ||
| 9702 | DEFB $24,$12 | A trench MIDDLE in column 18 | ||
| 9704 | DEFB $24,$16 | A trench MIDDLE in column 22 | ||
| 9706 | DEFB $28,$14 | Start of NME with rocket launchers. Ferocity:20 | ||
| 9708 | DEFB $24,$1A | A trench MIDDLE in column 26 | ||
| 970A | DEFB $25,$1E | A trench RIGHT in column 30 | ||
| 970C | DEFB $00,$0A | Land Space | ||
| 970E | DEFB $11,$04 | A quintuple grenade in column 4 | ||
| 9710 | DEFB $00,$0E | Land Space | ||
| 9712 | DEFB $98,$10 | A log crossing in column 16 | ||
| 9714 | DEFB $00,$02 | Land Space | ||
| 9716 | DEFB $0D,$08 | Water | ||
| 9718 | DEFB $00,$19 | Land Space | ||
| 971A | DEFB $19,$08 | Water Strip 1 | ||
| 971C | DEFB $00,$05 | Land Space | ||
| 971E | DEFB $0E,$08 | Water Strip 2 | ||
| 9720 | DEFB $00,$14 | Land Space | ||
| 9722 | DEFB $28,$00 | End of NME with rocket launchers | ||
| 9724 | DEFB $23,$0A | A trench LHS in column 10 | ||
| 9726 | DEFB $24,$0C | A trench MIDDLE in column 12 | ||
| 9728 | DEFB $24,$10 | A trench MIDDLE in column 16 | ||
| 972A | DEFB $24,$14 | A trench MIDDLE in column 20 | ||
| 972C | DEFB $25,$18 | A trench RIGHT in column 24 | ||
| 972E | DEFB $00,$28 | Land Space | ||
| 9730 | DEFB $24,$00 | A trench MIDDLE in column 0 | ||
| 9732 | DEFB $24,$04 | A trench MIDDLE in column 4 | ||
| 9734 | DEFB $24,$08 | A trench MIDDLE in column 8 | ||
| 9736 | DEFB $25,$0C | A trench RIGHT in column 12 | ||
| 9738 | DEFB $00,$1E | Land Space | ||
| 973A | DEFB $23,$12 | A trench LHS in column 18 | ||
| 973C | DEFB $24,$14 | A trench MIDDLE in column 20 | ||
| 973E | DEFB $25,$18 | A trench RIGHT in column 24 | ||
| 9740 | DEFB $00,$05 | Land Space | ||
| 9742 | DEFB $22,$00 | Spawn Point | ||
| 9744 | DEFB $00,$32 | Land Space | ||
| 9746 | DEFB $23,$14 | A trench LHS in column 20 | ||
| 9748 | DEFB $24,$16 | A trench MIDDLE in column 22 | ||
| 974A | DEFB $25,$1A | A trench RIGHT in column 26 | ||
| 974C | DEFB $00,$0E | Land Space | ||
| 974E | DEFB $10,$16 | A triple grenade in column 22 | ||
| 9750 | DEFB $28,$19 | Start of NME with rocket launchers. Ferocity:25 | ||
| 9752 | DEFB $00,$1E | Land Space | ||
| 9754 | DEFB $98,$08 | A log crossing in column 8 | ||
| 9756 | DEFB $00,$02 | Land Space | ||
| 9758 | DEFB $0D,$10 | Water | ||
| 975A | DEFB $00,$19 | Land Space | ||
| 975C | DEFB $19,$10 | Water Strip 1 | ||
| 975E | DEFB $00,$05 | Land Space | ||
| 9760 | DEFB $0E,$10 | Water Strip 2 | ||
| 9762 | DEFB $00,$19 | Land Space | ||
| 9764 | DEFB $23,$06 | A trench LHS in column 6 | ||
| 9766 | DEFB $24,$08 | A trench MIDDLE in column 8 | ||
| 9768 | DEFB $24,$0C | A trench MIDDLE in column 12 | ||
| 976A | DEFB $25,$10 | A trench RIGHT in column 16 | ||
| 976C | DEFB $00,$14 | Land Space | ||
| 976E | DEFB $23,$10 | A trench LHS in column 16 | ||
| 9770 | DEFB $24,$12 | A trench MIDDLE in column 18 | ||
| 9772 | DEFB $28,$00 | End of NME with rocket launchers | ||
| 9774 | DEFB $24,$16 | A trench MIDDLE in column 22 | ||
| 9776 | DEFB $25,$1A | A trench RIGHT in column 26 | ||
| 9778 | DEFB $00,$0F | Land Space | ||
| 977A | DEFB $24,$00 | A trench MIDDLE in column 0 | ||
| 977C | DEFB $24,$04 | A trench MIDDLE in column 4 | ||
| 977E | DEFB $24,$08 | A trench MIDDLE in column 8 | ||
| 9780 | DEFB $25,$0C | A trench RIGHT in column 12 | ||
| 9782 | DEFB $00,$0F | Land Space | ||
| 9784 | DEFB $09,$0B | A wall in column 11 | ||
| 9786 | DEFB $09,$1F | A wall in column 31 | ||
| 9788 | DEFB $21,$14 | Fortress gates | ||
| 978A | DEFB $00,$16 | Land Space | ||
| 978C | DEFB $22,$01 | Spawn Point | ||
|
|
||||
| 978E | DEFB $00,$1E | Land Space | ||
| 9790 | DEFB $94,$00 | A small hut in column 0 | ||
| 9792 | DEFB $94,$14 | A small hut in column 20 | ||
| 9794 | DEFB $94,$1A | A small hut in column 26 | ||
| 9796 | DEFB $00,$32 | Land Space | ||
| 9798 | DEFB $94,$00 | A small hut in column 0 | ||
| 979A | DEFB $94,$06 | A small hut in column 6 | ||
| 979C | DEFB $94,$0C | A small hut in column 12 | ||
| 979E | DEFB $00,$1E | Land Space | ||
| 97A0 | DEFB $94,$00 | A small hut in column 0 | ||
| 97A2 | DEFB $94,$14 | A small hut in column 20 | ||
| 97A4 | DEFB $94,$1A | A small hut in column 26 | ||
| 97A6 | DEFB $00,$28 | Land Space | ||
| 97A8 | DEFB $94,$00 | A small hut in column 0 | ||
| 97AA | DEFB $94,$06 | A small hut in column 6 | ||
| 97AC | DEFB $94,$0C | A small hut in column 12 | ||
| 97AE | DEFB $00,$3C | Land Space | ||
| 97B0 | DEFB $94,$00 | A small hut in column 0 | ||
| 97B2 | DEFB $94,$06 | A small hut in column 6 | ||
| 97B4 | DEFB $94,$12 | A small hut in column 18 | ||
| 97B6 | DEFB $00,$28 | Land Space | ||
| 97B8 | DEFB $94,$0A | A small hut in column 10 | ||
| 97BA | DEFB $94,$10 | A small hut in column 16 | ||
| 97BC | DEFB $00,$05 | Land Space | ||
| 97BE | DEFB $22,$00 | Spawn Point | ||
| 97C0 | DEFB $00,$32 | Land Space | ||
| 97C2 | DEFB $94,$00 | A small hut in column 0 | ||
| 97C4 | DEFB $94,$1A | A small hut in column 26 | ||
| 97C6 | DEFB $00,$1E | Land Space | ||
| 97C8 | DEFB $94,$0D | A small hut in column 13 | ||
| 97CA | DEFB $00,$3C | Land Space | ||
| 97CC | DEFB $12,$03 | A left mortar in column 3 | ||
| 97CE | DEFB $00,$02 | Land Space | ||
| 97D0 | DEFB $11,$1A | A quintuple grenade in column 26 | ||
| 97D2 | DEFB $00,$0F | Land Space | ||
| 97D4 | DEFB $09,$0B | A wall in column 11 | ||
| 97D6 | DEFB $09,$1F | A wall in column 31 | ||
| 97D8 | DEFB $96,$0C | A tunnel in column 12 | ||
| 97DA | DEFB $00,$17 | Land Space | ||
| 97DC | DEFB $17,$1F | Draw Road on bridge | ||
| 97DE | DEFB $00,$0C | Land Space | ||
| 97E0 | DEFB $08,$1F | A bridge section | ||
| 97E2 | DEFB $00,$3C | Land Space | ||
| 97E4 | DEFB $1A,$00 | Truck | ||
| 97E6 | DEFB $00,$28 | Land Space | ||
| 97E8 | DEFB $22,$00 | Spawn Point | ||
| 97EA | DEFB $00,$3C | Land Space | ||
| 97EC | DEFB $28,$28 | Start of NME with rocket launchers. Ferocity:40 | ||
| 97EE | DEFB $11,$04 | A quintuple grenade in column 4 | ||
| 97F0 | DEFB $00,$1E | Land Space | ||
| 97F2 | DEFB $1C,$00 | Jeep | ||
| 97F4 | DEFB $00,$50 | Land Space | ||
| 97F6 | DEFB $28,$0C | Start of NME with rocket launchers. Ferocity:12 | ||
| 97F8 | DEFB $00,$32 | Land Space | ||
| 97FA | DEFB $11,$03 | A quintuple grenade in column 3 | ||
| 97FC | DEFB $00,$64 | Land Space | ||
| 97FE | DEFB $0F,$19 | A single grenade in column 25 | ||
| 9800 | DEFB $00,$05 | Land Space | ||
| 9802 | DEFB $22,$00 | Spawn Point | ||
| 9804 | DEFB $00,$05 | Land Space | ||
| 9806 | DEFB $28,$0C | Start of NME with rocket launchers. Ferocity:12 | ||
| 9808 | DEFB $00,$78 | Land Space | ||
| 980A | DEFB $28,$00 | End of NME with rocket launchers | ||
| 980C | DEFB $00,$1E | Land Space | ||
| 980E | DEFB $09,$0B | A wall in column 11 | ||
| 9810 | DEFB $09,$1F | A wall in column 31 | ||
| 9812 | DEFB $21,$14 | Fortress gates | ||
| 9814 | DEFB $00,$16 | Land Space | ||
| 9816 | DEFB $22,$01 | Spawn Point | ||
|
|
||||
| 9818 | DEFB $00,$3C | Land Space | ||
| 981A | DEFB $8A,$07 | Sandbags LHS in column 7 | ||
| 981C | DEFB $8B,$09 | Sandbags MIDDLE in column 9 | ||
| 981E | DEFB $8B,$0C | Sandbags MIDDLE in column 12 | ||
| 9820 | DEFB $8C,$0F | Sandbags RHS in column 15 | ||
| 9822 | DEFB $00,$28 | Land Space | ||
| 9824 | DEFB $98,$08 | A log crossing in column 8 | ||
| 9826 | DEFB $00,$02 | Land Space | ||
| 9828 | DEFB $0D,$10 | Water | ||
| 982A | DEFB $00,$19 | Land Space | ||
| 982C | DEFB $19,$10 | Water Strip 1 | ||
| 982E | DEFB $00,$05 | Land Space | ||
| 9830 | DEFB $0E,$10 | Water Strip 2 | ||
| 9832 | DEFB $00,$0F | Land Space | ||
| 9834 | DEFB $98,$10 | A log crossing in column 16 | ||
| 9836 | DEFB $00,$02 | Land Space | ||
| 9838 | DEFB $0D,$08 | Water | ||
| 983A | DEFB $00,$19 | Land Space | ||
| 983C | DEFB $19,$08 | Water Strip 1 | ||
| 983E | DEFB $00,$05 | Land Space | ||
| 9840 | DEFB $0E,$08 | Water Strip 2 | ||
| 9842 | DEFB $00,$1E | Land Space | ||
| 9844 | DEFB $8B,$00 | Sandbags MIDDLE in column 0 | ||
| 9846 | DEFB $8B,$03 | Sandbags MIDDLE in column 3 | ||
| 9848 | DEFB $8C,$06 | Sandbags RHS in column 6 | ||
| 984A | DEFB $8B,$1D | Sandbags MIDDLE in column 29 | ||
| 984C | DEFB $8A,$1B | Sandbags LHS in column 27 | ||
| 984E | DEFB $00,$28 | Land Space | ||
| 9850 | DEFB $95,$00 | A barracks in column 0 | ||
| 9852 | DEFB $00,$28 | Land Space | ||
| 9854 | DEFB $1B,$FF | Motorbike | ||
| 9856 | DEFB $00,$0A | Land Space | ||
| 9858 | DEFB $10,$14 | A triple grenade in column 20 | ||
| 985A | DEFB $00,$14 | Land Space | ||
| 985C | DEFB $1B,$FF | Motorbike | ||
| 985E | DEFB $00,$05 | Land Space | ||
| 9860 | DEFB $22,$00 | Spawn Point | ||
| 9862 | DEFB $00,$1E | Land Space | ||
| 9864 | DEFB $11,$15 | A quintuple grenade in column 21 | ||
| 9866 | DEFB $00,$05 | Land Space | ||
| 9868 | DEFB $83,$02 | A tree in column 2 | ||
| 986A | DEFB $00,$23 | Land Space | ||
| 986C | DEFB $83,$14 | A tree in column 20 | ||
| 986E | DEFB $00,$23 | Land Space | ||
| 9870 | DEFB $05,$10 | A road bottom edging in column 16 | ||
| 9872 | DEFB $00,$13 | Land Space | ||
| 9874 | DEFB $27,$01 | Turn the alarm ON | ||
| 9876 | DEFB $8B,$00 | Sandbags MIDDLE in column 0 | ||
| 9878 | DEFB $8B,$03 | Sandbags MIDDLE in column 3 | ||
| 987A | DEFB $8C,$06 | Sandbags RHS in column 6 | ||
| 987C | DEFB $00,$0A | Land Space | ||
| 987E | DEFB $12,$02 | A left mortar in column 2 | ||
| 9880 | DEFB $00,$13 | Land Space | ||
| 9882 | DEFB $04,$1B | A road marking in column 27 | ||
| 9884 | DEFB $28,$14 | Start of NME with rocket launchers. Ferocity:20 | ||
| 9886 | DEFB $00,$0C | Land Space | ||
| 9888 | DEFB $05,$00 | A road bottom edging in column 0 | ||
| 988A | DEFB $00,$0C | Land Space | ||
| 988C | DEFB $04,$15 | A road marking in column 21 | ||
| 988E | DEFB $00,$06 | Land Space | ||
| 9890 | DEFB $06,$10 | A road top edging in column 16 | ||
| 9892 | DEFB $00,$12 | Land Space | ||
| 9894 | DEFB $04,$0F | A road marking in column 15 | ||
| 9896 | DEFB $00,$18 | Land Space | ||
| 9898 | DEFB $04,$09 | A road marking in column 9 | ||
| 989A | DEFB $00,$13 | Land Space | ||
| 989C | DEFB $06,$00 | A road top edging in column 0 | ||
| 989E | DEFB $00,$05 | Land Space | ||
| 98A0 | DEFB $04,$03 | A road marking in column 3 | ||
| 98A2 | DEFB $11,$19 | A quintuple grenade in column 25 | ||
| 98A4 | DEFB $00,$28 | Land Space | ||
| 98A6 | DEFB $10,$06 | A triple grenade in column 6 | ||
| 98A8 | DEFB $00,$14 | Land Space | ||
| 98AA | DEFB $95,$00 | A barracks in column 0 | ||
| 98AC | DEFB $00,$3C | Land Space | ||
| 98AE | DEFB $0F,$0A | A single grenade in column 10 | ||
| 98B0 | DEFB $00,$05 | Land Space | ||
| 98B2 | DEFB $22,$00 | Spawn Point | ||
| 98B4 | DEFB $00,$05 | Land Space | ||
| 98B6 | DEFB $27,$01 | Turn the alarm ON | ||
| 98B8 | DEFB $28,$14 | Start of NME with rocket launchers. Ferocity:20 | ||
| 98BA | DEFB $00,$82 | Land Space | ||
| 98BC | DEFB $10,$04 | A triple grenade in column 4 | ||
| 98BE | DEFB $28,$00 | End of NME with rocket launchers | ||
| 98C0 | DEFB $27,$00 | Turn the alarm OFF | ||
| 98C2 | DEFB $00,$32 | Land Space | ||
| 98C4 | DEFB $09,$0B | A wall in column 11 | ||
| 98C6 | DEFB $09,$1F | A wall in column 31 | ||
| 98C8 | DEFB $21,$14 | Fortress gates | ||
| 98CA | DEFB $00,$1E | Land Space | ||
| 98CC | DEFB $22,$01 | Spawn Point | ||
| 98CE | DEFB $FF | End of levels marker | ||
| 98CF | DEFB $07 | |||
| 98D0 | JP $9922 | => Update object IX position, clip to screen, dispatch sprite draw | ||
| 98D3 | JP $98EA | => HL = HL + A | ||
| 98D6 | JP $98F0 | => (HL) -> HL | ||
| 98D9 | JP $98F5 | => Convert row number to screen line address | ||
| 98DC | JP $9904 | => DOWN HL - move HL to the next screen line | ||
|
|
||||
| 98DF | JP $9913 | => UP HL | ||
|
|
||||
|
Indexed as frame*2 (+1 if the flip bit, IX+$0B bit 2, is set) -- 8 entries cover 4 animation frames, each with a normal and flipped variant.
|
||||
| 98E2 | DEFB $00 | frame 0, normal | ||
| 98E3 | DEFB $1E | 1 | ||
| 98E4 | DEFB $40 | 2 | ||
| 98E5 | DEFB $5E | frame 1, flipped | ||
| 98E6 | DEFB $80 | frame 2, normal | ||
| 98E7 | DEFB $9E | frame 2, flipped | ||
| 98E8 | DEFB $C0 | frame 3, normal | ||
| 98E9 | DEFB $DE | frame 3, flipped | ||
|
Used by the routine at 98D3.
|
||||
|
Adds the byte in A to HL, carrying into the high byte.
|
||||
| 98EA | ADD A,L | |||
| 98EB | LD L,A | |||
| 98EC | ADC A,H | |||
| 98ED | SUB L | |||
| 98EE | LD H,A | |||
| 98EF | RET | |||
|
Used by the routine at 98D6.
|
||||
|
Follows a pointer, replacing HL with the address it points at.
|
||||
| 98F0 | LD A,(HL) | |||
| 98F1 | INC HL | |||
| 98F2 | LD H,(HL) | |||
| 98F3 | LD L,A | |||
| 98F4 | RET | |||
|
Used by the routine at 98D9.
|
||||
|
Converts a row and column into a screen address, halving the row to a character line and looking it up in the line table.
|
||||
| 98F5 | LD A,L | |||
| 98F6 | SRL A | |||
| 98F8 | SRL A | |||
| 98FA | LD L,H | |||
| 98FB | SLA L | |||
| 98FD | LD H,$FE | $FE00 - table of even screen lines addresses | ||
| 98FF | ADD A,(HL) | |||
| 9900 | INC L | |||
| 9901 | LD H,(HL) | |||
|
This entry point is used by the routine at EF37.
|
||||
| 9902 | LD L,A | |||
| 9903 | RET | |||
|
Used by the routine at 98DC.
|
||||||||||||
|
Advances screen address HL down one pixel line, crossing character-cell and screen-third boundaries as needed.
|
||||||||||||
| 9904 | INC H | |||||||||||
| 9905 | LD A,H | |||||||||||
| 9906 | AND $07 | Same character cell? return | ||||||||||
| 9908 | RET NZ | |||||||||||
| 9909 | LD A,L | |||||||||||
| 990A | ADD A,$20 | Step down a character row | ||||||||||
| 990C | LD L,A | |||||||||||
| 990D | RET C | |||||||||||
| 990E | LD A,H | |||||||||||
| 990F | SUB $08 | Cross into next third | ||||||||||
| 9911 | LD H,A | |||||||||||
| 9912 | RET | |||||||||||
|
Used by the routine at 98DF.
|
||||||||||||
|
Moves screen address HL up one pixel line, crossing character-cell and screen-third boundaries as needed.
|
||||||||||||
| 9913 | LD A,H | |||||||||||
| 9914 | DEC H | |||||||||||
| 9915 | AND $07 | Same character cell? return | ||||||||||
| 9917 | RET NZ | |||||||||||
| 9918 | LD A,L | |||||||||||
| 9919 | SUB $20 | Step up a character row | ||||||||||
| 991B | LD L,A | |||||||||||
| 991C | RET C | |||||||||||
| 991D | LD A,H | |||||||||||
| 991E | ADD A,$08 | Cross into previous third | ||||||||||
| 9920 | LD H,A | |||||||||||
| 9921 | RET | |||||||||||
|
Used by the routine at 98D0.
|
||||||||
|
Prepares and draws an object's sprite. It marks the object active, takes its pending position, and rejects it if the sprite or its clip window falls off screen; otherwise it resolves the sprite address, promotes the queued next frame into place, and picks the on-screen or off-screen blitter.
|
||||||||
| 9922 | SET 5,(IX+$0B) | Mark record draw-active (+$0B bit 5) | ||||||
| 9926 | LD D,(IX+$04) | |||||||
| 9929 | LD E,(IX+$00) | |||||||
| 992C | LD (IX+$00),D | |||||||
| 992F | LD A,D | |||||||
| 9930 | ADD A,$02 | Reject object past right/bottom edge | ||||||
| 9932 | CP $22 | |||||||
| 9934 | JR C,$993E | |||||||
| 9936 | LD A,E | |||||||
| 9937 | ADD A,$02 | |||||||
| 9939 | CP $22 | |||||||
| 993B | JP NC,$9FDE | => Finish sprite off-screen | ||||||
| 993E | LD B,(IX+$05) | Take the object height and row | ||||||
| 9941 | LD C,(IX+$01) | |||||||
| 9944 | LD A,(IX+$08) | Clip window top, less the height | ||||||
| 9947 | SUB (IX+$0A) | |||||||
| 994A | CP B | Above the window? try the lower edge | ||||||
| 994B | JP M,$9952 | |||||||
| 994E | CP C | Below it? nothing to draw | ||||||
| 994F | JP P,$9FE2 | |||||||
| 9952 | LD A,(IX+$09) | |||||||
| 9955 | CP B | |||||||
| 9956 | JP P,$995D | |||||||
| 9959 | CP C | |||||||
| 995A | JP M,$9FDE | => Finish sprite off-screen | ||||||
| 995D | EXX | Frame index (IX+$02) * 2 into A | ||||||
| 995E | LD A,(IX+$02) | |||||||
| 9961 | ADD A,A | |||||||
| 9962 | ADD A,$E2 | lo byte of $98E2 | ||||||
| 9964 | BIT 2,(IX+$0B) | Flipped? add 1 to the frame index | ||||||
| 9968 | JR Z,$996B | |||||||
| 996A | INC A | |||||||
| 996B | LD L,A | Look it up in the low-byte table | ||||||
| 996C | LD H,$98 | |||||||
| 996E | LD L,(HL) | |||||||
| 996F | LD A,(IX+$03) | Sprite page = (IX+$03) + $A0 | ||||||
| 9972 | ADD A,$A0 | |||||||
| 9974 | LD H,A | |||||||
| 9975 | EXX | |||||||
| 9976 | LD A,(IX+$06) | Copy new frame (IX+$06) into (IX+$02) for next draw | ||||||
| 9979 | LD (IX+$02),A | |||||||
| 997C | ADD A,A | New frame index * 2 into A | ||||||
| 997D | ADD A,$E2 | |||||||
| 997F | BIT 2,(IX+$0B) | Flipped? add 1 to the frame index | ||||||
| 9983 | JR Z,$9986 | |||||||
| 9985 | INC A | |||||||
| 9986 | LD L,A | Look it up in the low-byte table | ||||||
| 9987 | LD H,$98 | |||||||
| 9989 | LD L,(HL) | |||||||
| 998A | LD A,(IX+$07) | Store new sub-frame, sprite page = (IX+$07) + $A0 | ||||||
| 998D | LD (IX+$03),A | |||||||
| 9990 | ADD A,$A0 | |||||||
| 9992 | LD H,A | |||||||
| 9993 | LD A,D | |||||||
| 9994 | CP $1E | Off-screen blit if past column $1E | ||||||
| 9996 | JP NC,$9B61 | => Set up sprite erase, dispatch to erase-blit variant | ||||||
| 9999 | LD A,E | |||||||
| 999A | CP $1E | |||||||
| 999C | JP NC,$9B61 | => Set up sprite erase, dispatch to erase-blit variant | ||||||
| 999F | LD A,(IX+$08) | |||||||
| 99A2 | DEC A | |||||||
| 99A3 | CP B | |||||||
| 99A4 | JP P,$9F1D | => Off-screen sprite draw | ||||||
| 99A7 | CP C | |||||||
| 99A8 | JP P,$9F1D | => Off-screen sprite draw | ||||||
| 99AB | PUSH HL | |||||||
| 99AC | LD H,(IX+$01) | |||||||
| 99AF | LD A,(IX+$05) | |||||||
| 99B2 | CP H | |||||||
| 99B3 | JR NC,$99B6 | |||||||
| 99B5 | LD H,A | |||||||
| 99B6 | LD A,(IX+$09) | |||||||
| 99B9 | SUB H | |||||||
| 99BA | INC A | |||||||
| 99BB | EX AF,AF' | |||||||
| 99BC | LD A,D | |||||||
| 99BD | LD L,H | |||||||
| 99BE | SLA L | |||||||
| 99C0 | LD H,$FE | $FE00 - table of even screen lines addresses | ||||||
| 99C2 | ADD A,(HL) | |||||||
| 99C3 | INC L | |||||||
| 99C4 | LD H,(HL) | |||||||
| 99C5 | LD L,A | |||||||
| 99C6 | LD A,D | |||||||
| 99C7 | SUB E | |||||||
| 99C8 | EX DE,HL | |||||||
| 99C9 | POP HL | |||||||
| 99CA | EXX | |||||||
| 99CB | EX AF,AF' | |||||||
| 99CC | LD E,A | |||||||
| 99CD | OR A | |||||||
| 99CE | EX AF,AF' | |||||||
| 99CF | LD ($FD82),SP | Point SP at the screen address | ||||||
| 99D3 | LD SP,HL | |||||||
| 99D4 | LD A,(IX+$01) | Take the clip flag, width $00 | ||||||
| 99D7 | LD C,$00 | |||||||
| 99D9 | JP C,$9AE6 | => Clip wide sprite edge, dispatch to masked blit | ||||||
| 99DC | JP NZ,$9A6E | => Clip sprite edge, dispatch to masked blit | ||||||
| 99DF | SUB (IX+$05) | |||||||
| 99E2 | JR Z,$99F3 | |||||||
| 99E4 | LD HL,$99F3 | |||||||
| 99E7 | LD B,A | |||||||
| 99E8 | LD C,A | |||||||
| 99E9 | JP NC,$9EDF | => Unmasked-OR blit, draws opaque sprite row across screen thirds | ||||||
| 99EC | NEG | |||||||
| 99EE | LD B,A | |||||||
| 99EF | LD C,A | |||||||
| 99F0 | JP $9E98 | => Masked-OR blit variant, draws sprite row across screen thirds | ||||||
| 99F3 | LD A,(IX+$0A) | Row loop: height = (IX+$0A) - C | ||||||
| 99F6 | SUB C | |||||||
| 99F7 | LD B,A | |||||||
| 99F8 | LD HL,$9A46 | |||||||
| 99FB | EXX | Blit masked row (AND mask, OR graphic) across thirds | ||||||
| 99FC | POP BC | Take a mask word | ||||||
| 99FD | LD A,(DE) | #0 column 0, upper line | ||||||
| 99FE | CPL | |||||||
| 99FF | OR C | |||||||
| 9A00 | CPL | |||||||
| 9A01 | OR (HL) | |||||||
| 9A02 | LD (DE),A | |||||||
| 9A03 | INC L | |||||||
| 9A04 | INC E | |||||||
| 9A05 | LD A,(DE) | #1 column 1, upper line | ||||||
| 9A06 | CPL | |||||||
| 9A07 | OR B | |||||||
| 9A08 | CPL | |||||||
| 9A09 | OR (HL) | |||||||
| 9A0A | LD (DE),A | |||||||
| 9A0B | INC L | |||||||
| 9A0C | INC E | |||||||
| 9A0D | POP BC | Take the next mask word | ||||||
| 9A0E | LD A,(DE) | #2 column 2, upper line | ||||||
| 9A0F | CPL | |||||||
| 9A10 | OR C | |||||||
| 9A11 | CPL | |||||||
| 9A12 | OR (HL) | |||||||
| 9A13 | LD (DE),A | |||||||
| 9A14 | INC L | |||||||
| 9A15 | INC D | |||||||
| 9A16 | LD A,(DE) | #3 column 2, lower line | ||||||
| 9A17 | CPL | |||||||
| 9A18 | OR B | |||||||
| 9A19 | CPL | |||||||
| 9A1A | OR (HL) | |||||||
| 9A1B | LD (DE),A | |||||||
| 9A1C | INC L | |||||||
| 9A1D | DEC E | |||||||
| 9A1E | POP BC | Take the last mask word | ||||||
| 9A1F | LD A,(DE) | #4 column 1, lower line | ||||||
| 9A20 | CPL | |||||||
| 9A21 | OR C | |||||||
| 9A22 | CPL | |||||||
| 9A23 | OR (HL) | |||||||
| 9A24 | LD (DE),A | |||||||
| 9A25 | INC L | |||||||
| 9A26 | DEC E | |||||||
| 9A27 | LD A,(DE) | #5 column 0, lower line | ||||||
| 9A28 | CPL | |||||||
| 9A29 | OR B | |||||||
| 9A2A | CPL | |||||||
| 9A2B | OR (HL) | |||||||
| 9A2C | LD (DE),A | |||||||
| 9A2D | INC L | |||||||
| 9A2E | INC D | |||||||
| 9A2F | LD A,D | Advance to next pixel line, handle third wrap | ||||||
| 9A30 | AND $07 | |||||||
| 9A32 | JR NZ,$9A3E | |||||||
| 9A34 | LD A,E | |||||||
| 9A35 | ADD A,$20 | |||||||
| 9A37 | LD E,A | |||||||
| 9A38 | JR C,$9A3E | |||||||
| 9A3A | LD A,D | |||||||
| 9A3B | SUB $08 | |||||||
| 9A3D | LD D,A | |||||||
| 9A3E | EXX | |||||||
| 9A3F | DEC E | |||||||
| 9A40 | JP Z,$9FF5 | => Blit finish | ||||||
| 9A43 | DJNZ $99FB | |||||||
| 9A45 | JP (HL) | |||||||
|
||||||||
|
Advances the screen line, then draws the remaining sprite-width segment (IX+$05 - IX+$01) through the unmasked or masked blit before committing the width and restoring SP.
|
||||||||
| 9A46 | EXX | |||||||
| 9A47 | EX AF,AF' | |||||||
| 9A48 | LD A,E | Carry vertical offset into E | ||||||
| 9A49 | ADC A,$00 | |||||||
| 9A4B | LD E,A | |||||||
| 9A4C | EXX | |||||||
| 9A4D | LD A,(IX+$05) | Remaining width = (IX+$05) - (IX+$01) | ||||||
| 9A50 | LD L,(IX+$01) | |||||||
| 9A53 | SUB L | |||||||
| 9A54 | JR Z,$9A63 | |||||||
| 9A56 | LD HL,$9A63 | |||||||
| 9A59 | LD B,A | |||||||
| 9A5A | JP NC,$9EDF | => Unmasked-OR blit, draws opaque sprite row across screen thirds | ||||||
| 9A5D | NEG | |||||||
| 9A5F | LD B,A | |||||||
| 9A60 | JP $9E98 | => Masked-OR blit variant, draws sprite row across screen thirds | ||||||
| 9A63 | LD A,(IX+$05) | Commit drawn width (IX+$01 = IX+$05) | ||||||
| 9A66 | LD (IX+$01),A | |||||||
| 9A69 | LD SP,($FD82) | Restore SP | ||||||
| 9A6D | RET | |||||||
|
Used by the routine at 9922.
|
||||||||||||
|
Handles a sprite straddling a screen-third boundary, sending the visible part to the plain blitter and any overhang through the masked path before both continue into the row blit.
|
||||||||||||
| 9A6E | SUB (IX+$05) | Compare sprite width to clip limit | ||||||||||
| 9A71 | JR Z,$9A8A | |||||||||||
| 9A73 | LD HL,$9A8A | On-screen: save entry point, split width | ||||||||||
| 9A76 | LD B,A | |||||||||||
| 9A77 | LD C,A | |||||||||||
| 9A78 | JP NC,$9EDF | => Unmasked-OR blit, draws opaque sprite row across screen thirds | ||||||||||
| 9A7B | EXX | |||||||||||
| 9A7C | DEC E | |||||||||||
| 9A7D | EXX | |||||||||||
| 9A7E | LD HL,$9A8D | Off-left: take the masked path | ||||||||||
| 9A81 | NEG | Negate the overhang width | ||||||||||
| 9A83 | LD B,A | |||||||||||
| 9A84 | LD C,A | |||||||||||
| 9A85 | SCF | Mark clip type, dispatch to masked blit | ||||||||||
| 9A86 | EX AF,AF' | |||||||||||
| 9A87 | JP $9E98 | => Masked-OR blit variant, draws sprite row across screen thirds | ||||||||||
| 9A8A | EXX | |||||||||||
| 9A8B | DEC E | |||||||||||
| 9A8C | EXX | |||||||||||
| 9A8D | LD A,(IX+$0A) | Row byte count from the sprite width | ||||||||||
| 9A90 | SUB C | |||||||||||
| 9A91 | LD B,A | |||||||||||
| 9A92 | LD HL,$9A46 | |||||||||||
| 9A95 | EXX | Take a mask word | ||||||||||
| 9A96 | POP BC | |||||||||||
| 9A97 | LD A,(DE) | #0 column 0, upper line (mask only) | ||||||||||
| 9A98 | CPL | |||||||||||
| 9A99 | OR C | |||||||||||
| 9A9A | CPL | |||||||||||
| 9A9B | LD (DE),A | |||||||||||
| 9A9C | INC E | |||||||||||
| 9A9D | LD A,(DE) | #1 column 1, upper line | ||||||||||
| 9A9E | CPL | |||||||||||
| 9A9F | OR B | |||||||||||
| 9AA0 | CPL | |||||||||||
| 9AA1 | OR (HL) | |||||||||||
| 9AA2 | LD (DE),A | |||||||||||
| 9AA3 | INC L | |||||||||||
| 9AA4 | INC E | |||||||||||
| 9AA5 | POP BC | Take the next mask word | ||||||||||
| 9AA6 | LD A,(DE) | #2 column 2, upper line | ||||||||||
| 9AA7 | CPL | |||||||||||
| 9AA8 | OR C | |||||||||||
| 9AA9 | CPL | |||||||||||
| 9AAA | OR (HL) | |||||||||||
| 9AAB | LD (DE),A | |||||||||||
| 9AAC | INC L | |||||||||||
| 9AAD | INC E | |||||||||||
| 9AAE | LD A,(DE) | #3 column 3, upper line (graphic only) | ||||||||||
| 9AAF | OR (HL) | |||||||||||
| 9AB0 | LD (DE),A | |||||||||||
| 9AB1 | INC L | |||||||||||
| 9AB2 | INC D | |||||||||||
| 9AB3 | LD A,(DE) | #4 column 3, lower line (graphic only) | ||||||||||
| 9AB4 | OR (HL) | |||||||||||
| 9AB5 | LD (DE),A | |||||||||||
| 9AB6 | INC L | |||||||||||
| 9AB7 | DEC E | |||||||||||
| 9AB8 | LD A,(DE) | #5 column 2, lower line | ||||||||||
| 9AB9 | CPL | |||||||||||
| 9ABA | OR B | |||||||||||
| 9ABB | CPL | |||||||||||
| 9ABC | OR (HL) | |||||||||||
| 9ABD | LD (DE),A | |||||||||||
| 9ABE | INC L | |||||||||||
| 9ABF | DEC E | |||||||||||
| 9AC0 | POP BC | Take the last mask word | ||||||||||
| 9AC1 | LD A,(DE) | #6 column 1, lower line | ||||||||||
| 9AC2 | CPL | |||||||||||
| 9AC3 | OR C | |||||||||||
| 9AC4 | CPL | |||||||||||
| 9AC5 | OR (HL) | |||||||||||
| 9AC6 | LD (DE),A | |||||||||||
| 9AC7 | INC L | |||||||||||
| 9AC8 | DEC E | |||||||||||
| 9AC9 | LD A,(DE) | #7 column 0, lower line (mask only) | ||||||||||
| 9ACA | CPL | |||||||||||
| 9ACB | OR B | |||||||||||
| 9ACC | CPL | |||||||||||
| 9ACD | LD (DE),A | |||||||||||
| 9ACE | INC D | |||||||||||
| 9ACF | LD A,D | Cross into the next screen third | ||||||||||
| 9AD0 | AND $07 | |||||||||||
| 9AD2 | JR NZ,$9ADE | |||||||||||
| 9AD4 | LD A,E | Advance to the next screen row | ||||||||||
| 9AD5 | ADD A,$20 | |||||||||||
| 9AD7 | LD E,A | |||||||||||
| 9AD8 | JR C,$9ADE | |||||||||||
| 9ADA | LD A,D | |||||||||||
| 9ADB | SUB $08 | |||||||||||
| 9ADD | LD D,A | |||||||||||
| 9ADE | EXX | |||||||||||
| 9ADF | DEC E | |||||||||||
| 9AE0 | JP Z,$9FF5 | => Blit finish | ||||||||||
| 9AE3 | DJNZ $9A95 | |||||||||||
| 9AE5 | JP (HL) | |||||||||||
|
Used by the routine at 9922.
|
||||||||||||
|
The same clipping decision as its narrower sibling, but for the wide masked blit: the visible part goes to the plain blitter, an overhang to the masked one.
|
||||||||||||
| 9AE6 | SUB (IX+$05) | Compare width to clip limit | ||||||||||
| 9AE9 | JR Z,$9B08 | |||||||||||
| 9AEB | LD HL,$9B08 | |||||||||||
| 9AEE | LD B,A | |||||||||||
| 9AEF | LD C,A | |||||||||||
| 9AF0 | EX AF,AF' | |||||||||||
| 9AF1 | SCF | |||||||||||
| 9AF2 | EX AF,AF' | |||||||||||
| 9AF3 | JP NC,$9EDF | => Unmasked-OR blit, draws opaque sprite row across screen thirds | ||||||||||
| 9AF6 | NEG | Negate off-left overhang | ||||||||||
| 9AF8 | LD B,A | |||||||||||
| 9AF9 | LD C,A | |||||||||||
| 9AFA | EXX | |||||||||||
| 9AFB | INC E | |||||||||||
| 9AFC | EXX | |||||||||||
| 9AFD | OR A | |||||||||||
| 9AFE | EX AF,AF' | |||||||||||
| 9AFF | LD HL,$9B05 | Off-left: masked path | ||||||||||
| 9B02 | JP $9E98 | => Masked-OR blit variant, draws sprite row across screen thirds | ||||||||||
|
||||||||||||
|
Draws a masked sprite four columns wide, clearing the background under it before laying the graphic on top. It sweeps left to right along one pixel line and back along the next, and the mask reaches a column further than the graphic so the sprite's trailing edge is cut cleanly.
|
||||||||||||
| 9B05 | EXX | Adjust column, dispatch entry | ||||||||||
| 9B06 | DEC E | |||||||||||
| 9B07 | EXX | |||||||||||
|
This entry point is used by the routine at 9AE6.
|
||||||||||||
| 9B08 | LD A,(IX+$0A) | Row count = (IX+$0A) - C | ||||||||||
| 9B0B | SUB C | |||||||||||
| 9B0C | LD B,A | |||||||||||
| 9B0D | LD HL,$9A46 | Continuation address for the next segment | ||||||||||
| 9B10 | EXX | Swap to the graphic pointer | ||||||||||
| 9B11 | POP BC | Take a mask word | ||||||||||
| 9B12 | LD A,(DE) | Leftmost column: plain OR, no mask | ||||||||||
| 9B13 | OR (HL) | |||||||||||
| 9B14 | LD (DE),A | |||||||||||
| 9B15 | INC L | |||||||||||
| 9B16 | INC E | |||||||||||
| 9B17 | LD A,(DE) | Screen byte masked clear | ||||||||||
| 9B18 | CPL | |||||||||||
| 9B19 | OR C | |||||||||||
| 9B1A | CPL | OR in the graphic, store | ||||||||||
| 9B1B | OR (HL) | |||||||||||
| 9B1C | LD (DE),A | |||||||||||
| 9B1D | INC L | |||||||||||
| 9B1E | INC E | |||||||||||
| 9B1F | LD A,(DE) | |||||||||||
| 9B20 | CPL | |||||||||||
| 9B21 | OR B | |||||||||||
| 9B22 | CPL | |||||||||||
| 9B23 | OR (HL) | |||||||||||
| 9B24 | LD (DE),A | |||||||||||
| 9B25 | INC L | |||||||||||
| 9B26 | INC E | |||||||||||
| 9B27 | POP BC | Take the next mask word | ||||||||||
| 9B28 | LD A,(DE) | Right edge byte masked clear | ||||||||||
| 9B29 | CPL | |||||||||||
| 9B2A | OR C | |||||||||||
| 9B2B | CPL | Store it, no graphic to OR in | ||||||||||
| 9B2C | LD (DE),A | |||||||||||
| 9B2D | INC D | Step down a pixel line | ||||||||||
| 9B2E | LD A,(DE) | |||||||||||
| 9B2F | CPL | |||||||||||
| 9B30 | OR B | |||||||||||
| 9B31 | CPL | |||||||||||
| 9B32 | LD (DE),A | |||||||||||
| 9B33 | DEC E | |||||||||||
| 9B34 | POP BC | Take the third mask word | ||||||||||
| 9B35 | LD A,(DE) | #5 column 2, lower line | ||||||||||
| 9B36 | CPL | |||||||||||
| 9B37 | OR C | |||||||||||
| 9B38 | CPL | |||||||||||
| 9B39 | OR (HL) | |||||||||||
| 9B3A | LD (DE),A | |||||||||||
| 9B3B | INC L | |||||||||||
| 9B3C | DEC E | |||||||||||
| 9B3D | LD A,(DE) | #6 column 1, lower line | ||||||||||
| 9B3E | CPL | |||||||||||
| 9B3F | OR B | |||||||||||
| 9B40 | CPL | |||||||||||
| 9B41 | OR (HL) | |||||||||||
| 9B42 | LD (DE),A | |||||||||||
| 9B43 | INC L | |||||||||||
| 9B44 | DEC E | |||||||||||
| 9B45 | LD A,(DE) | Leftmost column again: plain OR | ||||||||||
| 9B46 | OR (HL) | |||||||||||
| 9B47 | LD (DE),A | |||||||||||
| 9B48 | INC D | |||||||||||
| 9B49 | INC L | Advance column, check wrap point | ||||||||||
| 9B4A | LD A,D | |||||||||||
| 9B4B | AND $07 | |||||||||||
| 9B4D | JR NZ,$9B59 | |||||||||||
| 9B4F | LD A,E | Wrap to next screen third if needed | ||||||||||
| 9B50 | ADD A,$20 | |||||||||||
| 9B52 | LD E,A | |||||||||||
| 9B53 | JR C,$9B59 | |||||||||||
| 9B55 | LD A,D | |||||||||||
| 9B56 | SUB $08 | |||||||||||
| 9B58 | LD D,A | |||||||||||
| 9B59 | EXX | |||||||||||
| 9B5A | DEC E | Count down the segments | ||||||||||
| 9B5B | JP Z,$9FF5 | => Blit finish | ||||||||||
| 9B5E | DJNZ $9B10 | Loop the rows | ||||||||||
| 9B60 | JP (HL) | Continue with the next segment | ||||||||||
|
Used by the routine at 9922.
|
||||||||||
|
Sets up erasing a sprite: it clips the sprite to the object's bounds, works out where it sits on screen and picks the erase routine matching its width, queueing the redraw pass to run afterwards.
|
||||||||||
| 9B61 | PUSH DE | |||||||||
| 9B62 | PUSH HL | |||||||||
| 9B63 | OR A | |||||||||
| 9B64 | JP P,$9BCB | => Set up sprite erase (positive path), dispatch to erase-blit | ||||||||
| 9B67 | LD HL,$9B97 | |||||||||
| 9B6A | PUSH HL | |||||||||
| 9B6B | LD A,C | |||||||||
| 9B6C | LD C,B | |||||||||
| 9B6D | DEC A | |||||||||
| 9B6E | CP (IX+$09) | Clip against upper bound (IX+$09) | ||||||||
| 9B71 | RET P | |||||||||
| 9B72 | ADD A,(IX+$0A) | |||||||||
| 9B75 | CP (IX+$08) | Clip against lower bound (IX+$08) | ||||||||
| 9B78 | RET M | |||||||||
| 9B79 | SUB (IX+$0A) | |||||||||
| 9B7C | INC A | |||||||||
| 9B7D | LD B,$00 | |||||||||
| 9B7F | CALL $9C23 | Compute screen address for sprite row via IX object | ||||||||
| 9B82 | LD A,E | |||||||||
| 9B83 | CP $02 | Pick erase variant by third span | ||||||||
| 9B85 | JR C,$9B90 | |||||||||
| 9B87 | INC A | |||||||||
| 9B88 | JP Z,$9CB1 | => Erase sprite | ||||||||
| 9B8B | INC A | |||||||||
| 9B8C | RET NZ | |||||||||
| 9B8D | JP $9CED | => Erase sprite variant | ||||||||
| 9B90 | EXX | |||||||||
| 9B91 | ADD A,E | |||||||||
| 9B92 | LD E,A | |||||||||
| 9B93 | EXX | |||||||||
| 9B94 | JP $9C6B | => Erase sprite | ||||||||
|
||||||||||
|
The redraw pass that follows the erase, re-clipping the sprite and picking the draw routine matching its width.
|
||||||||||
| 9B97 | EXX | |||||||||
| 9B98 | POP HL | |||||||||
| 9B99 | EXX | |||||||||
| 9B9A | POP DE | |||||||||
| 9B9B | LD HL,$9FEE | |||||||||
| 9B9E | PUSH HL | |||||||||
| 9B9F | LD A,C | |||||||||
| 9BA0 | DEC A | |||||||||
| 9BA1 | CP (IX+$09) | Clip against upper bound (IX+$09) | ||||||||
| 9BA4 | RET P | |||||||||
| 9BA5 | ADD A,(IX+$0A) | |||||||||
| 9BA8 | CP (IX+$08) | Clip against lower bound (IX+$08) | ||||||||
| 9BAB | RET M | |||||||||
| 9BAC | SUB (IX+$0A) | |||||||||
| 9BAF | INC A | |||||||||
| 9BB0 | LD B,$00 | |||||||||
| 9BB2 | CALL $9C23 | Compute screen address for sprite row via IX object | ||||||||
| 9BB5 | LD E,D | |||||||||
| 9BB6 | LD A,E | |||||||||
| 9BB7 | CP $02 | Pick draw variant by third span | ||||||||
| 9BB9 | JR C,$9BC4 | |||||||||
| 9BBB | INC A | |||||||||
| 9BBC | JP Z,$9DCC | => Unmasked-OR blit variant | ||||||||
| 9BBF | INC A | |||||||||
| 9BC0 | RET NZ | |||||||||
| 9BC1 | JP $9E03 | => Unmasked-OR blit variant | ||||||||
| 9BC4 | EXX | |||||||||
| 9BC5 | ADD A,E | |||||||||
| 9BC6 | LD E,A | |||||||||
| 9BC7 | EXX | |||||||||
| 9BC8 | JP $9D8D | => Unmasked-OR blit variant, draws opaque sprite row across screen thirds | ||||||||
|
Used by the routine at 9B61.
|
||||||||||
|
Erase setup for the other coordinate branch, doing the same clipping and dispatch as its sibling with its own redraw pass queued behind it.
|
||||||||||
| 9BCB | LD HL,$9BF5 | |||||||||
| 9BCE | PUSH HL | |||||||||
| 9BCF | LD A,C | |||||||||
| 9BD0 | LD C,B | |||||||||
| 9BD1 | DEC A | |||||||||
| 9BD2 | CP (IX+$09) | Clip against upper bound (IX+$09) | ||||||||
| 9BD5 | RET P | |||||||||
| 9BD6 | ADD A,(IX+$0A) | |||||||||
| 9BD9 | CP (IX+$08) | Clip against lower bound (IX+$08) | ||||||||
| 9BDC | RET M | |||||||||
| 9BDD | SUB (IX+$0A) | |||||||||
| 9BE0 | INC A | |||||||||
| 9BE1 | LD B,E | |||||||||
| 9BE2 | CALL $9C23 | Compute screen address for sprite row via IX object | ||||||||
| 9BE5 | LD A,E | |||||||||
| 9BE6 | CP $20 | Pick erase variant by third span | ||||||||
| 9BE8 | RET NC | |||||||||
| 9BE9 | SUB $1F | |||||||||
| 9BEB | JP Z,$9D5B | => Erase sprite variant | ||||||||
| 9BEE | INC A | |||||||||
| 9BEF | JP Z,$9D1F | => Erase sprite | ||||||||
| 9BF2 | JP $9C6B | => Erase sprite | ||||||||
|
||||||||||
|
The redraw pass for that branch, re-clipping the sprite and picking the draw routine matching its width.
|
||||||||||
| 9BF5 | EXX | |||||||||
| 9BF6 | POP HL | |||||||||
| 9BF7 | EXX | |||||||||
| 9BF8 | POP DE | |||||||||
| 9BF9 | LD HL,$9FEE | |||||||||
| 9BFC | PUSH HL | |||||||||
| 9BFD | LD E,D | |||||||||
| 9BFE | LD A,C | |||||||||
| 9BFF | DEC A | |||||||||
| 9C00 | CP (IX+$09) | Clip against upper bound (IX+$09) | ||||||||
| 9C03 | RET P | |||||||||
| 9C04 | ADD A,(IX+$0A) | |||||||||
| 9C07 | CP (IX+$08) | Clip against lower bound (IX+$08) | ||||||||
| 9C0A | RET M | |||||||||
| 9C0B | SUB (IX+$0A) | |||||||||
| 9C0E | INC A | |||||||||
| 9C0F | LD B,E | |||||||||
| 9C10 | CALL $9C23 | Compute screen address for sprite row via IX object | ||||||||
| 9C13 | LD A,E | |||||||||
| 9C14 | CP $20 | Pick draw variant by third span | ||||||||
| 9C16 | RET NC | |||||||||
| 9C17 | SUB $1F | |||||||||
| 9C19 | JP Z,$9E69 | => Unmasked-OR blit variant | ||||||||
| 9C1C | INC A | |||||||||
| 9C1D | JP Z,$9E32 | => Unmasked-OR blit variant | ||||||||
| 9C20 | JP $9D8D | => Unmasked-OR blit variant, draws opaque sprite row across screen thirds | ||||||||
|
||||||||||||||||||
|
Works out where a sprite starts on screen and how much of it is visible, trimming the height at the lower bound. A sprite whose top is off screen has the hidden rows skipped and its data advanced to match.
|
||||||||||||||||||
| 9C23 | CP (IX+$08) | Row above the clip bound? | ||||||||||||||||
| 9C26 | JP M,$9C47 | |||||||||||||||||
| 9C29 | LD L,A | |||||||||||||||||
| 9C2A | EX AF,AF' | |||||||||||||||||
| 9C2B | SLA L | |||||||||||||||||
| 9C2D | LD H,$FE | $FE00 - table of even screen lines addresses | ||||||||||||||||
| 9C2F | LD A,(HL) | Add the row offset | ||||||||||||||||
| 9C30 | ADD A,B | |||||||||||||||||
| 9C31 | INC L | Take the high byte | ||||||||||||||||
| 9C32 | LD H,(HL) | |||||||||||||||||
| 9C33 | LD L,A | |||||||||||||||||
| 9C34 | PUSH HL | |||||||||||||||||
| 9C35 | EXX | |||||||||||||||||
| 9C36 | POP DE | |||||||||||||||||
| 9C37 | EX AF,AF' | |||||||||||||||||
| 9C38 | LD B,(IX+$0A) | Sprite height into B | ||||||||||||||||
| 9C3B | SUB (IX+$09) | |||||||||||||||||
| 9C3E | NEG | |||||||||||||||||
| 9C40 | CP B | Trim if it runs past the bound | ||||||||||||||||
| 9C41 | JR NC,$9C45 | |||||||||||||||||
| 9C43 | INC A | |||||||||||||||||
| 9C44 | LD B,A | |||||||||||||||||
| 9C45 | EXX | |||||||||||||||||
| 9C46 | RET | |||||||||||||||||
| 9C47 | ADD A,(IX+$0A) | Off the top: rows hidden | ||||||||||||||||
| 9C4A | SUB (IX+$08) | |||||||||||||||||
| 9C4D | EXX | |||||||||||||||||
| 9C4E | LD B,A | |||||||||||||||||
| 9C4F | LD A,(IX+$0A) | |||||||||||||||||
| 9C52 | SUB B | |||||||||||||||||
| 9C53 | LD E,A | |||||||||||||||||
| 9C54 | ADD A,A | Column doubled twice | ||||||||||||||||
| 9C55 | ADD A,E | |||||||||||||||||
| 9C56 | ADD A,A | Added into the pointer | ||||||||||||||||
| 9C57 | ADD A,L | |||||||||||||||||
| 9C58 | LD L,A | |||||||||||||||||
| 9C59 | EX DE,HL | |||||||||||||||||
| 9C5A | LD L,(IX+$08) | Screen line at the clip edge | ||||||||||||||||
| 9C5D | SLA L | |||||||||||||||||
| 9C5F | LD H,$FE | $FE00 - table of even screen lines addresses | ||||||||||||||||
| 9C61 | LD A,(HL) | |||||||||||||||||
| 9C62 | INC L | |||||||||||||||||
| 9C63 | EXX | |||||||||||||||||
| 9C64 | ADD A,B | |||||||||||||||||
| 9C65 | EXX | |||||||||||||||||
| 9C66 | LD H,(HL) | |||||||||||||||||
| 9C67 | LD L,A | |||||||||||||||||
| 9C68 | EX DE,HL | |||||||||||||||||
| 9C69 | EXX | |||||||||||||||||
| 9C6A | RET | |||||||||||||||||
|
||||||||||||
|
Erases a six-cell-wide sprite, rubbing its footprint out a row at a time with the stack walking the mask data.
|
||||||||||||
| 9C6B | LD ($FD82),SP | Save SP, aim it at the mask data | ||||||||||
| 9C6F | EXX | |||||||||||
| 9C70 | LD SP,HL | |||||||||||
| 9C71 | EX DE,HL | |||||||||||
| 9C72 | POP DE | #0 clear one column byte | ||||||||||
| 9C73 | LD A,E | |||||||||||
| 9C74 | CPL | |||||||||||
| 9C75 | AND (HL) | |||||||||||
| 9C76 | LD (HL),A | |||||||||||
| 9C77 | INC L | |||||||||||
| 9C78 | LD A,D | |||||||||||
| 9C79 | CPL | #1 clear the paired byte | ||||||||||
| 9C7A | AND (HL) | |||||||||||
| 9C7B | LD (HL),A | |||||||||||
| 9C7C | INC L | |||||||||||
| 9C7D | POP DE | |||||||||||
| 9C7E | LD A,E | |||||||||||
| 9C7F | CPL | |||||||||||
| 9C80 | AND (HL) | |||||||||||
| 9C81 | LD (HL),A | |||||||||||
| 9C82 | INC H | |||||||||||
| 9C83 | LD A,D | #2 clear a third byte | ||||||||||
| 9C84 | CPL | |||||||||||
| 9C85 | AND (HL) | |||||||||||
| 9C86 | LD (HL),A | |||||||||||
| 9C87 | DEC L | |||||||||||
| 9C88 | POP DE | #3 clear the fourth byte, next line | ||||||||||
| 9C89 | LD A,E | |||||||||||
| 9C8A | CPL | |||||||||||
| 9C8B | AND (HL) | |||||||||||
| 9C8C | LD (HL),A | |||||||||||
| 9C8D | DEC L | |||||||||||
| 9C8E | LD A,D | #4 clear the fifth and sixth bytes | ||||||||||
| 9C8F | CPL | |||||||||||
| 9C90 | AND (HL) | |||||||||||
| 9C91 | LD (HL),A | |||||||||||
| 9C92 | INC H | |||||||||||
| 9C93 | LD A,H | Check screen third boundary | ||||||||||
| 9C94 | AND $07 | |||||||||||
| 9C96 | JR NZ,$9CA2 | |||||||||||
| 9C98 | LD A,L | |||||||||||
| 9C99 | ADD A,$20 | |||||||||||
| 9C9B | LD L,A | |||||||||||
| 9C9C | LD A,H | Wrap to next screen third if needed | ||||||||||
| 9C9D | JR C,$9CAA | |||||||||||
| 9C9F | SUB $08 | |||||||||||
| 9CA1 | LD H,A | |||||||||||
| 9CA2 | DJNZ $9C72 | Loop the columns | ||||||||||
| 9CA4 | EXX | |||||||||||
| 9CA5 | LD SP,($FD82) | |||||||||||
| 9CA9 | RET | |||||||||||
| 9CAA | AND $18 | |||||||||||
| 9CAC | JP PO,$9CA2 | |||||||||||
| 9CAF | JR $9CA4 | |||||||||||
|
Used by the routine at 9B61.
|
||||||||||||
|
Erases a three-cell-wide sprite, rubbing its footprint out a row at a time with the stack walking the mask data.
|
||||||||||||
| 9CB1 | LD ($FD82),SP | Save SP, repurpose as mask-data pointer | ||||||||||
| 9CB5 | EXX | |||||||||||
| 9CB6 | LD SP,HL | |||||||||||
| 9CB7 | EX DE,HL | |||||||||||
| 9CB8 | POP DE | #0 clear one column byte | ||||||||||
| 9CB9 | LD A,D | |||||||||||
| 9CBA | CPL | |||||||||||
| 9CBB | AND (HL) | |||||||||||
| 9CBC | LD (HL),A | |||||||||||
| 9CBD | INC L | |||||||||||
| 9CBE | POP DE | |||||||||||
| 9CBF | LD A,E | #1 clear the paired byte | ||||||||||
| 9CC0 | CPL | |||||||||||
| 9CC1 | AND (HL) | |||||||||||
| 9CC2 | LD (HL),A | |||||||||||
| 9CC3 | INC H | |||||||||||
| 9CC4 | LD A,D | |||||||||||
| 9CC5 | CPL | |||||||||||
| 9CC6 | AND (HL) | |||||||||||
| 9CC7 | LD (HL),A | |||||||||||
| 9CC8 | DEC L | |||||||||||
| 9CC9 | POP DE | #2 clear a third byte | ||||||||||
| 9CCA | LD A,E | |||||||||||
| 9CCB | CPL | |||||||||||
| 9CCC | AND (HL) | |||||||||||
| 9CCD | LD (HL),A | |||||||||||
| 9CCE | INC H | |||||||||||
| 9CCF | LD A,H | Check screen third boundary | ||||||||||
| 9CD0 | AND $07 | |||||||||||
| 9CD2 | JR NZ,$9CDE | |||||||||||
| 9CD4 | LD A,L | |||||||||||
| 9CD5 | ADD A,$20 | |||||||||||
| 9CD7 | LD L,A | |||||||||||
| 9CD8 | LD A,H | Wrap to next screen third if needed | ||||||||||
| 9CD9 | JR C,$9CE6 | |||||||||||
| 9CDB | SUB $08 | |||||||||||
| 9CDD | LD H,A | |||||||||||
| 9CDE | DJNZ $9CB8 | Loop next row | ||||||||||
| 9CE0 | EXX | |||||||||||
| 9CE1 | LD SP,($FD82) | Restore SP | ||||||||||
| 9CE5 | RET | |||||||||||
| 9CE6 | AND $18 | |||||||||||
| 9CE8 | JP PO,$9CDE | |||||||||||
| 9CEB | JR $9CE0 | |||||||||||
|
Used by the routine at 9B61.
|
||||||||||||
|
Erases a sprite two cells per row, with the stack walking the mask data.
|
||||||||||||
| 9CED | LD ($FD82),SP | Save SP, repurpose as mask-data pointer | ||||||||||
| 9CF1 | EXX | |||||||||||
| 9CF2 | LD SP,HL | |||||||||||
| 9CF3 | EX DE,HL | |||||||||||
| 9CF4 | POP DE | |||||||||||
| 9CF5 | POP DE | |||||||||||
| 9CF6 | LD A,E | #0 clear one column byte | ||||||||||
| 9CF7 | CPL | |||||||||||
| 9CF8 | AND (HL) | |||||||||||
| 9CF9 | LD (HL),A | |||||||||||
| 9CFA | INC H | |||||||||||
| 9CFB | LD A,D | Clear the paired byte | ||||||||||
| 9CFC | CPL | |||||||||||
| 9CFD | AND (HL) | |||||||||||
| 9CFE | LD (HL),A | |||||||||||
| 9CFF | POP DE | |||||||||||
| 9D00 | INC H | |||||||||||
| 9D01 | LD A,H | Check screen third boundary | ||||||||||
| 9D02 | AND $07 | |||||||||||
| 9D04 | JR NZ,$9D10 | |||||||||||
| 9D06 | LD A,L | |||||||||||
| 9D07 | ADD A,$20 | |||||||||||
| 9D09 | LD L,A | |||||||||||
| 9D0A | LD A,H | |||||||||||
| 9D0B | JR C,$9D18 | |||||||||||
| 9D0D | SUB $08 | |||||||||||
| 9D0F | LD H,A | |||||||||||
| 9D10 | DJNZ $9CF4 | Loop next row | ||||||||||
| 9D12 | EXX | |||||||||||
| 9D13 | LD SP,($FD82) | Restore SP | ||||||||||
| 9D17 | RET | |||||||||||
| 9D18 | AND $18 | |||||||||||
| 9D1A | JP PO,$9D10 | |||||||||||
| 9D1D | JR $9D12 | |||||||||||
|
Used by the routine at 9BCB.
|
||||||||||||
|
Erases a three-cell-wide sprite in a different cell order to its sibling, with the stack walking the mask data.
|
||||||||||||
| 9D1F | LD ($FD82),SP | Save SP, repurpose as mask-data pointer | ||||||||||
| 9D23 | EXX | |||||||||||
| 9D24 | LD SP,HL | |||||||||||
| 9D25 | EX DE,HL | |||||||||||
| 9D26 | POP DE | #0 clear one column byte | ||||||||||
| 9D27 | LD A,E | |||||||||||
| 9D28 | CPL | |||||||||||
| 9D29 | AND (HL) | |||||||||||
| 9D2A | LD (HL),A | |||||||||||
| 9D2B | INC L | |||||||||||
| 9D2C | LD A,D | |||||||||||
| 9D2D | CPL | #1 clear the paired byte | ||||||||||
| 9D2E | AND (HL) | |||||||||||
| 9D2F | LD (HL),A | |||||||||||
| 9D30 | POP DE | |||||||||||
| 9D31 | INC H | |||||||||||
| 9D32 | POP DE | |||||||||||
| 9D33 | LD A,E | |||||||||||
| 9D34 | CPL | |||||||||||
| 9D35 | AND (HL) | |||||||||||
| 9D36 | LD (HL),A | |||||||||||
| 9D37 | DEC L | #2 clear a third byte | ||||||||||
| 9D38 | LD A,D | |||||||||||
| 9D39 | CPL | |||||||||||
| 9D3A | AND (HL) | |||||||||||
| 9D3B | LD (HL),A | |||||||||||
| 9D3C | INC H | |||||||||||
| 9D3D | LD A,H | Check screen third boundary | ||||||||||
| 9D3E | AND $07 | |||||||||||
| 9D40 | JR NZ,$9D4C | |||||||||||
| 9D42 | LD A,L | |||||||||||
| 9D43 | ADD A,$20 | |||||||||||
| 9D45 | LD L,A | |||||||||||
| 9D46 | LD A,H | Wrap to next screen third if needed | ||||||||||
| 9D47 | JR C,$9D54 | |||||||||||
| 9D49 | SUB $08 | |||||||||||
| 9D4B | LD H,A | |||||||||||
| 9D4C | DJNZ $9D26 | Loop next row | ||||||||||
| 9D4E | EXX | |||||||||||
| 9D4F | LD SP,($FD82) | Restore SP | ||||||||||
| 9D53 | RET | |||||||||||
| 9D54 | AND $18 | |||||||||||
| 9D56 | JP PO,$9D4C | |||||||||||
| 9D59 | JR $9D4E | |||||||||||
|
Used by the routine at 9BCB.
|
||||||||||||
|
Erases a narrow sprite two cells per row, the smallest of the erase variants.
|
||||||||||||
| 9D5B | LD ($FD82),SP | Save SP, repurpose as mask-data pointer | ||||||||||
| 9D5F | EXX | |||||||||||
| 9D60 | LD SP,HL | |||||||||||
| 9D61 | EX DE,HL | |||||||||||
| 9D62 | POP DE | |||||||||||
| 9D63 | LD A,E | #0 clear one screen byte | ||||||||||
| 9D64 | CPL | |||||||||||
| 9D65 | AND (HL) | |||||||||||
| 9D66 | LD (HL),A | |||||||||||
| 9D67 | POP DE | |||||||||||
| 9D68 | INC H | |||||||||||
| 9D69 | POP DE | |||||||||||
| 9D6A | LD A,D | #1 clear the paired byte | ||||||||||
| 9D6B | CPL | |||||||||||
| 9D6C | AND (HL) | |||||||||||
| 9D6D | LD (HL),A | |||||||||||
| 9D6E | INC H | |||||||||||
| 9D6F | LD A,H | Check screen third boundary | ||||||||||
| 9D70 | AND $07 | |||||||||||
| 9D72 | JR NZ,$9D7E | |||||||||||
| 9D74 | LD A,L | |||||||||||
| 9D75 | ADD A,$20 | |||||||||||
| 9D77 | LD L,A | |||||||||||
| 9D78 | LD A,H | |||||||||||
| 9D79 | JR C,$9D86 | |||||||||||
| 9D7B | SUB $08 | |||||||||||
| 9D7D | LD H,A | |||||||||||
| 9D7E | DJNZ $9D62 | Loop next row | ||||||||||
| 9D80 | EXX | |||||||||||
| 9D81 | LD SP,($FD82) | Restore SP | ||||||||||
| 9D85 | RET | |||||||||||
| 9D86 | AND $18 | |||||||||||
| 9D88 | JP PO,$9D7E | |||||||||||
| 9D8B | JR $9D80 | |||||||||||
|
||||||||||||
|
Draws an opaque sprite straight over whatever lies beneath it, with the stack walking the sprite data.
|
||||||||||||
| 9D8D | LD ($FD82),SP | Save SP, repurpose as sprite-data pointer | ||||||||||
| 9D91 | EXX | |||||||||||
| 9D92 | LD SP,HL | |||||||||||
| 9D93 | POP HL | #0 OR sprite byte, first third | ||||||||||
| 9D94 | LD A,(DE) | |||||||||||
| 9D95 | OR L | |||||||||||
| 9D96 | LD (DE),A | |||||||||||
| 9D97 | INC E | |||||||||||
| 9D98 | LD A,(DE) | |||||||||||
| 9D99 | OR H | |||||||||||
| 9D9A | LD (DE),A | |||||||||||
| 9D9B | INC E | |||||||||||
| 9D9C | POP HL | #1 OR sprite byte, second third | ||||||||||
| 9D9D | LD A,(DE) | |||||||||||
| 9D9E | OR L | |||||||||||
| 9D9F | LD (DE),A | |||||||||||
| 9DA0 | INC D | |||||||||||
| 9DA1 | LD A,(DE) | |||||||||||
| 9DA2 | OR H | |||||||||||
| 9DA3 | LD (DE),A | |||||||||||
| 9DA4 | DEC E | |||||||||||
| 9DA5 | POP HL | |||||||||||
| 9DA6 | LD A,(DE) | #2 OR sprite byte, third third | ||||||||||
| 9DA7 | OR L | |||||||||||
| 9DA8 | LD (DE),A | |||||||||||
| 9DA9 | DEC E | |||||||||||
| 9DAA | LD A,(DE) | |||||||||||
| 9DAB | OR H | |||||||||||
| 9DAC | LD (DE),A | |||||||||||
| 9DAD | INC D | |||||||||||
| 9DAE | LD A,D | Check screen third boundary | ||||||||||
| 9DAF | AND $07 | |||||||||||
| 9DB1 | JR NZ,$9DBD | |||||||||||
| 9DB3 | LD A,E | |||||||||||
| 9DB4 | ADD A,$20 | |||||||||||
| 9DB6 | LD E,A | |||||||||||
| 9DB7 | LD A,D | Wrap to next screen third if needed | ||||||||||
| 9DB8 | JR C,$9DC5 | |||||||||||
| 9DBA | SUB $08 | |||||||||||
| 9DBC | LD D,A | |||||||||||
| 9DBD | DJNZ $9D93 | Loop next row | ||||||||||
| 9DBF | EXX | |||||||||||
| 9DC0 | LD SP,($FD82) | Restore SP | ||||||||||
| 9DC4 | RET | |||||||||||
| 9DC5 | AND $18 | |||||||||||
| 9DC7 | JP PO,$9DBD | |||||||||||
| 9DCA | JR $9DBF | |||||||||||
|
Used by the routine at 9B97.
|
||||
|
Two-column version of the opaque blitter, ORing the sprite straight onto the screen and working across and back on alternate pixel lines.
|
||||
| 9DCC | LD ($FD82),SP | |||
| 9DD0 | EXX | |||
| 9DD1 | LD SP,HL | |||
| 9DD2 | POP HL | #0 OR sprite byte into one column byte | ||
| 9DD3 | LD A,(DE) | |||
| 9DD4 | OR H | |||
| 9DD5 | LD (DE),A | |||
| 9DD6 | INC E | |||
| 9DD7 | POP HL | |||
| 9DD8 | LD A,(DE) | OR sprite byte into paired byte | ||
| 9DD9 | OR L | |||
| 9DDA | LD (DE),A | |||
| 9DDB | INC D | |||
| 9DDC | LD A,(DE) | |||
| 9DDD | OR H | |||
| 9DDE | LD (DE),A | |||
| 9DDF | DEC E | |||
| 9DE0 | POP HL | |||
| 9DE1 | LD A,(DE) | |||
| 9DE2 | OR L | |||
| 9DE3 | LD (DE),A | |||
| 9DE4 | INC D | |||
| 9DE5 | LD A,D | Check screen third boundary | ||
| 9DE6 | AND $07 | |||
| 9DE8 | JR NZ,$9DF4 | |||
| 9DEA | LD A,E | Advance to the next screen row | ||
| 9DEB | ADD A,$20 | |||
| 9DED | LD E,A | |||
| 9DEE | LD A,D | |||
| 9DEF | JR C,$9DFC | |||
| 9DF1 | SUB $08 | |||
| 9DF3 | LD D,A | |||
| 9DF4 | DJNZ $9DD2 | Loop the rows | ||
| 9DF6 | EXX | |||
| 9DF7 | LD SP,($FD82) | |||
| 9DFB | RET | |||
| 9DFC | AND $18 | |||
| 9DFE | JP PO,$9DF4 | |||
| 9E01 | JR $9DF6 | |||
|
Used by the routine at 9B97.
|
||||||||||||
|
Single-column version of the sprite blitter, used when clipping leaves one byte of the sprite showing. Most of each source row is read past and discarded.
|
||||||||||||
| 9E03 | LD ($FD82),SP | Save SP, repurpose as sprite-data pointer | ||||||||||
| 9E07 | EXX | |||||||||||
| 9E08 | LD SP,HL | |||||||||||
| 9E09 | POP HL | Discard the leading word | ||||||||||
| 9E0A | POP HL | Take the middle word | ||||||||||
| 9E0B | LD A,(DE) | #0 OR its low byte into the column | ||||||||||
| 9E0C | OR L | |||||||||||
| 9E0D | LD (DE),A | |||||||||||
| 9E0E | INC D | |||||||||||
| 9E0F | LD A,(DE) | OR its high byte into the next pixel line | ||||||||||
| 9E10 | OR H | |||||||||||
| 9E11 | LD (DE),A | |||||||||||
| 9E12 | POP HL | Discard the trailing word, step a line | ||||||||||
| 9E13 | INC D | |||||||||||
| 9E14 | LD A,D | Check screen third boundary | ||||||||||
| 9E15 | AND $07 | |||||||||||
| 9E17 | JR NZ,$9E23 | |||||||||||
| 9E19 | LD A,E | Advance to the next screen row | ||||||||||
| 9E1A | ADD A,$20 | |||||||||||
| 9E1C | LD E,A | |||||||||||
| 9E1D | LD A,D | |||||||||||
| 9E1E | JR C,$9E2B | |||||||||||
| 9E20 | SUB $08 | |||||||||||
| 9E22 | LD D,A | |||||||||||
| 9E23 | DJNZ $9E09 | Loop the pixel-line pairs | ||||||||||
| 9E25 | EXX | |||||||||||
| 9E26 | LD SP,($FD82) | Restore SP | ||||||||||
| 9E2A | RET | |||||||||||
| 9E2B | AND $18 | |||||||||||
| 9E2D | JP PO,$9E23 | |||||||||||
| 9E30 | JR $9E25 | |||||||||||
|
Used by the routine at 9BF5.
|
||||||||||||
|
Two-column version of the sprite blitter, used when clipping leaves that much of the sprite showing. It works across and back on alternate pixel lines, skipping the parts of each source row it no longer needs.
|
||||||||||||
| 9E32 | LD ($FD82),SP | Save SP, repurpose as sprite-data pointer | ||||||||||
| 9E36 | EXX | |||||||||||
| 9E37 | LD SP,HL | |||||||||||
| 9E38 | POP HL | #0 OR low byte into the first column | ||||||||||
| 9E39 | LD A,(DE) | |||||||||||
| 9E3A | OR L | |||||||||||
| 9E3B | LD (DE),A | |||||||||||
| 9E3C | INC E | Step to the adjacent column | ||||||||||
| 9E3D | LD A,(DE) | OR high byte into the second column | ||||||||||
| 9E3E | OR H | |||||||||||
| 9E3F | LD (DE),A | |||||||||||
| 9E40 | POP HL | Discard a word, step down a pixel line | ||||||||||
| 9E41 | INC D | |||||||||||
| 9E42 | POP HL | Take the next word | ||||||||||
| 9E43 | LD A,(DE) | OR its low byte into the second column | ||||||||||
| 9E44 | OR L | |||||||||||
| 9E45 | LD (DE),A | |||||||||||
| 9E46 | DEC E | Back to the first column | ||||||||||
| 9E47 | LD A,(DE) | OR its high byte into the first column | ||||||||||
| 9E48 | OR H | |||||||||||
| 9E49 | LD (DE),A | |||||||||||
| 9E4A | INC D | |||||||||||
| 9E4B | LD A,D | Check screen third boundary | ||||||||||
| 9E4C | AND $07 | |||||||||||
| 9E4E | JR NZ,$9E5A | |||||||||||
| 9E50 | LD A,E | Advance to the next screen row | ||||||||||
| 9E51 | ADD A,$20 | |||||||||||
| 9E53 | LD E,A | |||||||||||
| 9E54 | LD A,D | |||||||||||
| 9E55 | JR C,$9E62 | |||||||||||
| 9E57 | SUB $08 | |||||||||||
| 9E59 | LD D,A | |||||||||||
| 9E5A | DJNZ $9E38 | Loop the pixel-line pairs | ||||||||||
| 9E5C | EXX | |||||||||||
| 9E5D | LD SP,($FD82) | Restore SP | ||||||||||
| 9E61 | RET | |||||||||||
| 9E62 | AND $18 | |||||||||||
| 9E64 | JP PO,$9E5A | |||||||||||
| 9E67 | JR $9E5C | |||||||||||
|
Used by the routine at 9BF5.
|
||||||||||||
|
Narrowest version of the sprite blitter, for the tightest clipping case. It takes one byte from each end of a source row and skips the rest; which columns of the sprite those are has not been traced.
|
||||||||||||
| 9E69 | LD ($FD82),SP | Save SP, repurpose as sprite-data pointer | ||||||||||
| 9E6D | EXX | |||||||||||
| 9E6E | LD SP,HL | |||||||||||
| 9E6F | POP HL | Take the low byte of the first word | ||||||||||
| 9E70 | LD A,(DE) | OR sprite byte into first column | ||||||||||
| 9E71 | OR L | |||||||||||
| 9E72 | LD (DE),A | |||||||||||
| 9E73 | POP HL | Skip a word, step down a pixel line | ||||||||||
| 9E74 | INC D | |||||||||||
| 9E75 | POP HL | Take the high byte of the third word | ||||||||||
| 9E76 | LD A,(DE) | OR sprite byte into second column | ||||||||||
| 9E77 | OR H | |||||||||||
| 9E78 | LD (DE),A | |||||||||||
| 9E79 | INC D | |||||||||||
| 9E7A | LD A,D | Check screen third boundary | ||||||||||
| 9E7B | AND $07 | |||||||||||
| 9E7D | JR NZ,$9E89 | |||||||||||
| 9E7F | LD A,E | Advance to the next screen row | ||||||||||
| 9E80 | ADD A,$20 | |||||||||||
| 9E82 | LD E,A | |||||||||||
| 9E83 | LD A,D | |||||||||||
| 9E84 | JR C,$9E91 | |||||||||||
| 9E86 | SUB $08 | |||||||||||
| 9E88 | LD D,A | |||||||||||
| 9E89 | DJNZ $9E6F | Loop the pixel-line pairs | ||||||||||
| 9E8B | EXX | |||||||||||
| 9E8C | LD SP,($FD82) | Restore SP | ||||||||||
| 9E90 | RET | |||||||||||
| 9E91 | AND $18 | |||||||||||
| 9E93 | JP PO,$9E89 | |||||||||||
| 9E96 | JR $9E8B | |||||||||||
|
||||||||||||
|
Clears a sprite's footprint out of the screen ahead of the graphic being drawn over it, working across the three screen thirds a row at a time.
|
||||||||||||
| 9E98 | EXX | |||||||||||
| 9E99 | POP BC | #0 AND-mask then OR sprite byte, first third | ||||||||||
| 9E9A | LD A,(DE) | |||||||||||
| 9E9B | CPL | |||||||||||
| 9E9C | OR C | |||||||||||
| 9E9D | CPL | |||||||||||
| 9E9E | LD (DE),A | |||||||||||
| 9E9F | INC E | |||||||||||
| 9EA0 | LD A,(DE) | |||||||||||
| 9EA1 | CPL | |||||||||||
| 9EA2 | OR B | |||||||||||
| 9EA3 | CPL | |||||||||||
| 9EA4 | LD (DE),A | |||||||||||
| 9EA5 | INC E | #1 AND-mask then OR sprite byte, second third | ||||||||||
| 9EA6 | POP BC | |||||||||||
| 9EA7 | LD A,(DE) | |||||||||||
| 9EA8 | CPL | |||||||||||
| 9EA9 | OR C | |||||||||||
| 9EAA | CPL | |||||||||||
| 9EAB | LD (DE),A | |||||||||||
| 9EAC | INC D | |||||||||||
| 9EAD | LD A,(DE) | |||||||||||
| 9EAE | CPL | |||||||||||
| 9EAF | OR B | |||||||||||
| 9EB0 | CPL | |||||||||||
| 9EB1 | LD (DE),A | |||||||||||
| 9EB2 | DEC E | |||||||||||
| 9EB3 | POP BC | |||||||||||
| 9EB4 | LD A,(DE) | #2 AND-mask then OR sprite byte, third third | ||||||||||
| 9EB5 | CPL | |||||||||||
| 9EB6 | OR C | |||||||||||
| 9EB7 | CPL | |||||||||||
| 9EB8 | LD (DE),A | |||||||||||
| 9EB9 | DEC E | |||||||||||
| 9EBA | LD A,(DE) | |||||||||||
| 9EBB | CPL | |||||||||||
| 9EBC | OR B | |||||||||||
| 9EBD | CPL | |||||||||||
| 9EBE | LD (DE),A | |||||||||||
| 9EBF | INC D | |||||||||||
| 9EC0 | LD A,D | Advance column, check wrap point | ||||||||||
| 9EC1 | AND $07 | |||||||||||
| 9EC3 | JR NZ,$9ECF | |||||||||||
| 9EC5 | LD A,E | Column moves into next third | ||||||||||
| 9EC6 | ADD A,$20 | |||||||||||
| 9EC8 | LD E,A | |||||||||||
| 9EC9 | LD A,D | Carry says wrap the row too | ||||||||||
| 9ECA | JR C,$9ED7 | |||||||||||
| 9ECC | SUB $08 | |||||||||||
| 9ECE | LD D,A | |||||||||||
| 9ECF | EXX | |||||||||||
| 9ED0 | DEC E | |||||||||||
| 9ED1 | JP Z,$9FF5 | => Blit finish | ||||||||||
| 9ED4 | DJNZ $9E98 | Loop next sprite row | ||||||||||
| 9ED6 | JP (HL) | Return via continuation address in HL | ||||||||||
| 9ED7 | AND $18 | |||||||||||
| 9ED9 | JP PO,$9ECF | |||||||||||
| 9EDC | JP $9A63 | |||||||||||
|
Draws an opaque sprite three columns wide, ORing the graphic straight onto the screen with no mask. It works left to right along one pixel line and back along the next, so the sprite data is read in one continuous sweep.
|
||||
| 9EDF | EXX | OR graphic byte into the first column | ||
| 9EE0 | LD A,(DE) | |||
| 9EE1 | OR (HL) | |||
| 9EE2 | LD (DE),A | |||
| 9EE3 | INC L | |||
| 9EE4 | INC E | |||
| 9EE5 | LD A,(DE) | #0 OR graphic byte into the second column | ||
| 9EE6 | OR (HL) | |||
| 9EE7 | LD (DE),A | |||
| 9EE8 | INC L | |||
| 9EE9 | INC E | |||
| 9EEA | LD A,(DE) | |||
| 9EEB | OR (HL) | |||
| 9EEC | LD (DE),A | |||
| 9EED | INC L | |||
| 9EEE | INC D | |||
| 9EEF | LD A,(DE) | #1 reverse along the next pixel line | ||
| 9EF0 | OR (HL) | |||
| 9EF1 | LD (DE),A | |||
| 9EF2 | INC L | |||
| 9EF3 | DEC E | |||
| 9EF4 | LD A,(DE) | |||
| 9EF5 | OR (HL) | |||
| 9EF6 | LD (DE),A | |||
| 9EF7 | INC L | |||
| 9EF8 | DEC E | |||
| 9EF9 | LD A,(DE) | |||
| 9EFA | OR (HL) | |||
| 9EFB | LD (DE),A | |||
| 9EFC | INC L | |||
| 9EFD | INC D | |||
| 9EFE | LD A,D | Advance row, check wrap point | ||
| 9EFF | AND $07 | |||
| 9F01 | JR NZ,$9F0D | |||
| 9F03 | LD A,E | Column moves into next third | ||
| 9F04 | ADD A,$20 | |||
| 9F06 | LD E,A | |||
| 9F07 | LD A,D | Carry says wrap the row too | ||
| 9F08 | JR C,$9F15 | |||
| 9F0A | SUB $08 | |||
| 9F0C | LD D,A | |||
| 9F0D | EXX | |||
| 9F0E | DEC E | |||
| 9F0F | JP Z,$9FF5 | => Blit finish | ||
| 9F12 | DJNZ $9EDF | |||
| 9F14 | JP (HL) | |||
| 9F15 | AND $18 | |||
| 9F17 | JP PO,$9F0D | |||
| 9F1A | JP $9A63 | |||
|
Used by the routine at 9922.
|
||||
|
Draws a sprite running off the left or right edge: clips its width, skips the hidden columns in the sprite data, computes the screen address of the visible part, then hands it to the row blitter.
|
||||
| 9F1D | PUSH HL | Check width against clip limit | ||
| 9F1E | LD ($FD82),SP | |||
| 9F22 | SUB C | |||
| 9F23 | EXX | |||
| 9F24 | INC A | Sign check: fully off left/right edge | ||
| 9F25 | JP M,$9F2E | |||
| 9F28 | LD C,A | Column times three | ||
| 9F29 | ADD A,A | |||
| 9F2A | ADD A,C | |||
| 9F2B | ADD A,A | Doubled again, added into the pointer | ||
| 9F2C | ADD A,L | |||
| 9F2D | LD L,A | |||
| 9F2E | LD SP,HL | |||
| 9F2F | EXX | |||
| 9F30 | LD A,E | |||
| 9F31 | EX AF,AF' | |||
| 9F32 | LD A,C | |||
| 9F33 | EXX | |||
| 9F34 | CP (IX+$08) | Clip column against (IX+$08) | ||
| 9F37 | JP P,$9F3D | |||
| 9F3A | LD A,(IX+$08) | |||
| 9F3D | LD C,A | |||
| 9F3E | ADD A,A | |||
| 9F3F | LD L,A | |||
| 9F40 | LD H,$FE | $FE00 - table of even screen lines addresses | ||
| 9F42 | EX AF,AF' | |||
| 9F43 | ADD A,(HL) | Add the table low byte | ||
| 9F44 | INC L | |||
| 9F45 | LD D,(HL) | Take the high byte, restore the low | ||
| 9F46 | LD E,A | |||
| 9F47 | EXX | |||
| 9F48 | LD A,C | |||
| 9F49 | SUB (IX+$08) | Width remaining after the clip | ||
| 9F4C | ADD A,(IX+$0A) | |||
| 9F4F | DEC A | |||
| 9F50 | JP M,$9F74 | |||
| 9F53 | CP (IX+$0A) | |||
| 9F56 | INC A | |||
| 9F57 | JR C,$9F5C | |||
| 9F59 | LD A,(IX+$0A) | |||
| 9F5C | LD B,A | |||
| 9F5D | EXX | |||
| 9F5E | ADD A,C | |||
| 9F5F | EXX | |||
| 9F60 | DEC A | Trim against the vertical bound | ||
| 9F61 | SUB (IX+$09) | |||
| 9F64 | JR C,$9F6C | |||
| 9F66 | JR Z,$9F6C | |||
| 9F68 | NEG | |||
| 9F6A | ADD A,B | |||
| 9F6B | LD B,A | |||
| 9F6C | LD E,$00 | |||
| 9F6E | LD HL,$9F74 | |||
| 9F71 | JP $9E98 | => Masked-OR blit variant, draws sprite row across screen thirds | ||
| 9F74 | LD A,(IX+$08) | Other edge: recompute the width | ||
| 9F77 | LD C,(IX+$05) | Columns clipped off the left edge | ||
| 9F7A | SUB C | |||
| 9F7B | EXX | |||
| 9F7C | LD C,A | |||
| 9F7D | LD A,$00 | Nothing hidden? no data to skip | ||
| 9F7F | JP M,$9F86 | |||
| 9F82 | LD A,C | Hidden columns times three | ||
| 9F83 | ADD A,A | |||
| 9F84 | ADD A,C | Doubled to a byte count | ||
| 9F85 | ADD A,A | |||
| 9F86 | LD SP,($FD82) | Reclaim the sprite pointer off the stack | ||
| 9F8A | POP HL | |||
| 9F8B | LD ($FD82),SP | |||
| 9F8F | ADD A,L | Skip the hidden columns | ||
| 9F90 | LD L,A | |||
| 9F91 | EXX | |||
| 9F92 | LD A,D | Stash the row for later | ||
| 9F93 | EX AF,AF' | |||
| 9F94 | LD A,C | |||
| 9F95 | EXX | |||
| 9F96 | CP (IX+$08) | Clamp the start row to the upper bound | ||
| 9F99 | JP P,$9F9F | |||
| 9F9C | LD A,(IX+$08) | |||
| 9F9F | LD C,A | |||
| 9FA0 | ADD A,A | Two table entries per row | ||
| 9FA1 | EX DE,HL | |||
| 9FA2 | LD L,A | |||
| 9FA3 | LD H,$FE | $FE00 - table of even screen lines addresses | ||
| 9FA5 | EX AF,AF' | Look the screen line up in the table | ||
| 9FA6 | ADD A,(HL) | |||
| 9FA7 | INC L | |||
| 9FA8 | LD H,(HL) | |||
| 9FA9 | LD L,A | |||
| 9FAA | EX DE,HL | |||
| 9FAB | EXX | |||
| 9FAC | LD A,C | Rows remaining below the start | ||
| 9FAD | SUB (IX+$08) | |||
| 9FB0 | ADD A,(IX+$0A) | |||
| 9FB3 | DEC A | Nothing visible? give up | ||
| 9FB4 | JP M,$9FD8 | |||
| 9FB7 | CP (IX+$0A) | Clamp the height to the sprite | ||
| 9FBA | INC A | |||
| 9FBB | JR C,$9FC0 | |||
| 9FBD | LD A,(IX+$0A) | |||
| 9FC0 | LD B,A | |||
| 9FC1 | EXX | |||
| 9FC2 | ADD A,C | Where the sprite would end | ||
| 9FC3 | EXX | |||
| 9FC4 | DEC A | |||
| 9FC5 | SUB (IX+$09) | Trim anything past the lower bound | ||
| 9FC8 | JR C,$9FD0 | |||
| 9FCA | JR Z,$9FD0 | |||
| 9FCC | NEG | Shorten the height to match | ||
| 9FCE | ADD A,B | |||
| 9FCF | LD B,A | |||
| 9FD0 | LD E,$00 | Clear the segment counter | ||
| 9FD2 | LD HL,$9FD8 | |||
| 9FD5 | JP $9EDF | => Unmasked-OR blit, draws opaque sprite row across screen thirds | ||
| 9FD8 | LD SP,($FD82) | |||
| 9FDC | JR $9FE8 | |||
|
Used by the routine at 9922.
|
||||||||
|
Finishes an off-screen or clipped sprite without drawing: clears the draw-active flag (+$0B bit 5) and commits the pending frame/page and Y fields (+$06/+$07/+$05) into the current ones (+$02/+$01).
|
||||||||
| 9FDE | RES 5,(IX+$0B) | Clear draw-active flag | ||||||
|
This entry point is used by the routine at 9922.
|
||||||||
| 9FE2 | LD A,(IX+$06) | Promote next frame into current | ||||||
| 9FE5 | LD (IX+$02),A | |||||||
|
This entry point is used by the routine at 9F1D.
|
||||||||
| 9FE8 | LD A,(IX+$07) | |||||||
| 9FEB | LD (IX+$07),A | |||||||
| 9FEE | LD A,(IX+$05) | Promote next Y into current | ||||||
| 9FF1 | LD (IX+$01),A | |||||||
| 9FF4 | RET | |||||||
|
||||||||
|
Blit finish: commits the pending Y position (+$05 into +$01) and restores the real SP saved in $FD82.
|
||||||||
| 9FF5 | LD A,(IX+$05) | Commit pending Y position | ||||||
| 9FF8 | LD (IX+$01),A | |||||||
| 9FFB | LD SP,($FD82) | Restore SP | ||||||
| 9FFF | RET | |||||||
|
The sprites have no mask; even row bytes go left to right, odd row bytes right to left.
|
||||
| A000 | DEFB $03,$D0,$00,$00,$70,$06,$0D,$F0,$00,$00,$F0,$0F,$0F,$F0,$00,$00 | |||
| A010 | DEFB $D8,$17,$3C,$38,$00,$00,$CC,$3F,$1F,$9C,$00,$00,$3C,$1F,$0C,$EC | |||
| A020 | DEFB $00,$00,$38,$09,$0E,$F0,$00,$00,$F0,$0F,$0F,$E0,$00,$00,$50,$1E | |||
| A030 | DEFB $2E,$A8,$00,$00,$50,$1F,$2E,$A8,$00,$00,$40,$11,$00,$00,$00,$00 | |||
| A040 | DEFB $00,$F4,$00,$00,$9C,$01,$03,$7C,$00,$00,$FC,$03,$03,$FC,$00,$00 | |||
| A050 | DEFB $F6,$05,$0F,$0E,$00,$00,$F3,$0F,$07,$E7,$00,$00,$CF,$07,$03,$3B | |||
| A060 | DEFB $00,$00,$4E,$02,$03,$BC,$00,$00,$FC,$03,$03,$F8,$00,$00,$94,$07 | |||
| A070 | DEFB $0B,$AA,$00,$00,$D4,$07,$0B,$AA,$00,$00,$50,$04,$00,$00,$00,$00 | |||
| A080 | DEFB $00,$3D,$00,$00,$67,$00,$00,$DF,$00,$00,$FF,$00,$00,$FF,$00,$80 | |||
| A090 | DEFB $7D,$01,$03,$C3,$80,$C0,$FC,$03,$01,$F9,$C0,$C0,$F3,$01,$00,$CE | |||
| A0A0 | DEFB $C0,$80,$93,$00,$00,$EF,$00,$00,$FF,$00,$00,$FE,$00,$00,$E5,$01 | |||
| A0B0 | DEFB $02,$EA,$80,$00,$F5,$01,$02,$EA,$80,$00,$14,$01,$00,$00,$00,$00 | |||
| A0C0 | DEFB $00,$0F,$40,$C0,$19,$00,$00,$37,$C0,$C0,$3F,$00,$00,$3F,$C0,$60 | |||
| A0D0 | DEFB $5F,$00,$00,$F0,$E0,$30,$FF,$00,$00,$7E,$70,$F0,$7C,$00,$00,$33 | |||
| A0E0 | DEFB $B0,$E0,$24,$00,$00,$3B,$C0,$C0,$3F,$00,$00,$3F,$80,$40,$79,$00 | |||
| A0F0 | DEFB $00,$BA,$A0,$40,$7D,$00,$00,$BA,$A0,$00,$45,$00,$00,$00,$00,$00 | |||
| A100 | DEFB $00,$00,$00,$00,$C0,$03,$06,$60,$00,$00,$F0,$0D,$0F,$F0,$00,$00 | |||
| A110 | DEFB $F0,$0F,$17,$D8,$00,$00,$28,$3C,$3F,$DC,$00,$00,$9C,$3F,$17,$3C | |||
| A120 | DEFB $00,$00,$68,$0C,$09,$70,$00,$00,$F0,$0F,$0F,$E0,$00,$00,$E4,$5C | |||
| A130 | DEFB $2A,$E8,$00,$00,$F4,$55,$2A,$E8,$00,$00,$10,$15,$00,$00,$00,$00 | |||
| A140 | DEFB $00,$00,$00,$00,$F0,$00,$01,$98,$00,$00,$7C,$03,$03,$FC,$00,$00 | |||
| A150 | DEFB $FC,$03,$05,$F6,$00,$00,$0A,$0F,$0F,$F7,$00,$00,$E7,$0F,$05,$CF | |||
| A160 | DEFB $00,$00,$1A,$03,$02,$5C,$00,$00,$FC,$03,$03,$F8,$00,$00,$39,$17 | |||
| A170 | DEFB $0A,$BA,$00,$00,$7D,$15,$0A,$BA,$00,$00,$44,$05,$00,$00,$00,$00 | |||
| A180 | DEFB $00,$00,$00,$00,$3C,$00,$00,$66,$00,$00,$DF,$00,$00,$FF,$00,$00 | |||
| A190 | DEFB $FF,$00,$01,$7D,$80,$80,$C2,$03,$03,$FD,$C0,$C0,$F9,$03,$01,$73 | |||
| A1A0 | DEFB $C0,$80,$C6,$00,$00,$97,$00,$00,$FF,$00,$00,$FE,$00,$40,$CE,$05 | |||
| A1B0 | DEFB $02,$AE,$80,$40,$5F,$05,$02,$AE,$80,$00,$51,$01,$00,$00,$00,$00 | |||
| A1C0 | DEFB $00,$00,$00,$00,$0F,$00,$00,$19,$80,$C0,$37,$00,$00,$3F,$C0,$C0 | |||
| A1D0 | DEFB $3F,$00,$00,$5F,$60,$A0,$F0,$00,$00,$FF,$70,$70,$FE,$00,$00,$5C | |||
| A1E0 | DEFB $F0,$A0,$31,$00,$00,$25,$C0,$C0,$3F,$00,$00,$3F,$80,$90,$73,$01 | |||
| A1F0 | DEFB $00,$AB,$A0,$D0,$57,$01,$00,$AB,$A0,$40,$54,$00,$00,$00,$00,$00 | |||
| A200 | DEFB $01,$C0,$00,$00,$60,$02,$05,$F0,$00,$00,$F1,$07,$07,$E3,$00,$00 | |||
| A210 | DEFB $B6,$0B,$1E,$EC,$00,$00,$DA,$19,$13,$FC,$00,$00,$D0,$16,$17,$90 | |||
| A220 | DEFB $00,$00,$70,$0F,$0F,$E4,$00,$00,$FC,$07,$03,$FD,$00,$00,$AA,$07 | |||
| A230 | DEFB $0F,$54,$00,$00,$AA,$0E,$07,$50,$00,$00,$80,$00,$00,$00,$00,$00 | |||
| A240 | DEFB $00,$70,$00,$00,$98,$00,$01,$7C,$00,$40,$FC,$01,$01,$F8,$C0,$80 | |||
| A250 | DEFB $ED,$02,$07,$BB,$00,$80,$76,$06,$04,$FF,$00,$00,$B4,$05,$05,$E4 | |||
| A260 | DEFB $00,$00,$DC,$03,$03,$F9,$00,$00,$FF,$01,$00,$FF,$40,$80,$EA,$01 | |||
| A270 | DEFB $03,$D5,$00,$80,$AA,$03,$01,$D4,$00,$00,$20,$00,$00,$00,$00,$00 | |||
| A280 | DEFB $00,$1C,$00,$00,$26,$00,$00,$5F,$00,$10,$7F,$00,$00,$7E,$30,$60 | |||
| A290 | DEFB $BB,$00,$01,$EE,$C0,$A0,$9D,$01,$01,$3F,$C0,$00,$6D,$01,$01,$79 | |||
| A2A0 | DEFB $00,$00,$F7,$00,$00,$FE,$40,$C0,$7F,$00,$00,$3F,$D0,$A0,$7A,$00 | |||
| A2B0 | DEFB $00,$F5,$40,$A0,$EA,$00,$00,$75,$00,$00,$08,$00,$00,$00,$00,$00 | |||
| A2C0 | DEFB $00,$07,$00,$80,$09,$00,$00,$17,$C0,$C4,$1F,$00,$00,$1F,$8C,$D8 | |||
| A2D0 | DEFB $2E,$00,$00,$7B,$B0,$68,$67,$00,$00,$4F,$F0,$40,$5B,$00,$00,$5E | |||
| A2E0 | DEFB $40,$C0,$3D,$00,$00,$3F,$90,$F0,$1F,$00,$00,$0F,$F4,$A8,$1E,$00 | |||
| A2F0 | DEFB $00,$3D,$50,$A8,$3A,$00,$00,$1D,$40,$00,$02,$00,$00,$00,$00,$00 | |||
| A300 | DEFB $00,$E0,$00,$00,$30,$01,$02,$F8,$00,$00,$F8,$03,$07,$F2,$00,$00 | |||
| A310 | DEFB $D6,$0B,$0E,$EC,$00,$00,$D8,$1D,$19,$B4,$00,$00,$F8,$1A,$17,$B0 | |||
| A320 | DEFB $00,$00,$30,$0E,$0F,$E0,$00,$00,$C0,$07,$03,$E0,$00,$00,$EA,$01 | |||
| A330 | DEFB $05,$F4,$00,$00,$EA,$0A,$05,$F8,$00,$00,$F0,$00,$00,$00,$00,$00 | |||
| A340 | DEFB $00,$38,$00,$00,$4C,$00,$00,$BE,$00,$00,$FE,$00,$01,$FC,$80,$80 | |||
| A350 | DEFB $F5,$02,$03,$BB,$00,$00,$76,$07,$06,$6D,$00,$00,$BE,$06,$05,$EC | |||
| A360 | DEFB $00,$00,$8C,$03,$03,$F8,$00,$00,$F0,$01,$00,$F8,$00,$80,$7A,$00 | |||
| A370 | DEFB $01,$7D,$00,$80,$BA,$02,$01,$7E,$00,$00,$3C,$00,$00,$00,$00,$00 | |||
| A380 | DEFB $00,$0E,$00,$00,$13,$00,$00,$2F,$80,$80,$3F,$00,$00,$7F,$20,$60 | |||
| A390 | DEFB $BD,$00,$00,$EE,$C0,$80,$DD,$01,$01,$9B,$40,$80,$AF,$01,$01,$7B | |||
| A3A0 | DEFB $00,$00,$E3,$00,$00,$FE,$00,$00,$7C,$00,$00,$3E,$00,$A0,$1E,$00 | |||
| A3B0 | DEFB $00,$5F,$40,$A0,$AE,$00,$00,$5F,$80,$00,$0F,$00,$00,$00,$00,$00 | |||
| A3C0 | DEFB $00,$03,$80,$C0,$04,$00,$00,$0B,$E0,$E0,$0F,$00,$00,$1F,$C8,$58 | |||
| A3D0 | DEFB $2F,$00,$00,$3B,$B0,$60,$77,$00,$00,$66,$D0,$E0,$6B,$00,$00,$5E | |||
| A3E0 | DEFB $C0,$C0,$38,$00,$00,$3F,$80,$00,$1F,$00,$00,$0F,$80,$A8,$07,$00 | |||
| A3F0 | DEFB $00,$17,$D0,$A8,$2B,$00,$00,$17,$E0,$C0,$03,$00,$00,$00,$00,$00 | |||
| A400 | DEFB $01,$C0,$00,$00,$60,$02,$05,$F0,$00,$00,$F0,$07,$0B,$D0,$00,$00 | |||
| A410 | DEFB $18,$27,$73,$E8,$00,$00,$F8,$79,$F4,$D0,$00,$00,$FE,$BF,$FF,$D0 | |||
| A420 | DEFB $00,$00,$B0,$7D,$13,$C0,$00,$00,$E0,$1F,$07,$F0,$00,$00,$60,$07 | |||
| A430 | DEFB $2F,$E8,$00,$00,$D5,$5D,$2F,$28,$00,$00,$50,$17,$00,$00,$00,$00 | |||
| A440 | DEFB $00,$70,$00,$00,$98,$00,$01,$7C,$00,$00,$FC,$01,$02,$F4,$00,$00 | |||
| A450 | DEFB $C6,$01,$0C,$FA,$00,$00,$3C,$1F,$1D,$9A,$00,$C0,$FF,$17,$1F,$7A | |||
| A460 | DEFB $00,$00,$D2,$0F,$05,$3C,$00,$00,$FF,$07,$03,$FF,$00,$00,$CE,$07 | |||
| A470 | DEFB $0F,$1C,$00,$40,$4F,$1E,$3A,$AA,$80,$00,$55,$1D,$00,$00,$00,$00 | |||
| A480 | DEFB $00,$38,$00,$00,$4C,$00,$00,$BE,$00,$00,$FE,$00,$01,$FA,$00,$00 | |||
| A490 | DEFB $63,$02,$07,$3D,$00,$80,$9F,$07,$0F,$4D,$00,$E0,$FF,$0B,$0F,$DD | |||
| A4A0 | DEFB $00,$00,$D9,$07,$01,$3F,$00,$00,$FE,$01,$00,$FF,$00,$00,$EF,$01 | |||
| A4B0 | DEFB $07,$E7,$00,$40,$96,$07,$0C,$AF,$20,$80,$53,$05,$00,$00,$00,$00 | |||
| A4C0 | DEFB $00,$0E,$00,$00,$13,$00,$00,$2F,$80,$80,$3F,$00,$00,$3E,$80,$C0 | |||
| A4D0 | DEFB $58,$00,$00,$CF,$40,$C0,$F3,$01,$01,$D9,$A0,$FC,$7F,$01,$00,$F7 | |||
| A4E0 | DEFB $A0,$20,$FD,$00,$00,$53,$C0,$80,$7F,$00,$00,$3F,$80,$80,$3F,$00 | |||
| A4F0 | DEFB $00,$3F,$00,$50,$7D,$00,$00,$9C,$A8,$50,$5E,$00,$00,$00,$00,$00 | |||
| A500 | DEFB $01,$C0,$00,$00,$20,$03,$07,$D0,$00,$00,$F0,$07,$0F,$90,$00,$00 | |||
| A510 | DEFB $10,$1A,$25,$20,$00,$00,$A0,$3B,$3F,$D0,$00,$00,$E8,$1D,$2E,$B0 | |||
| A520 | DEFB $00,$00,$D8,$37,$3D,$8C,$00,$00,$76,$3F,$1F,$80,$00,$00,$80,$2F | |||
| A530 | DEFB $3B,$E8,$00,$00,$D4,$5D,$2A,$EA,$00,$00,$F4,$14,$00,$00,$00,$00 | |||
| A540 | DEFB $00,$70,$00,$00,$C8,$00,$01,$F4,$00,$00,$FC,$01,$03,$E4,$00,$00 | |||
| A550 | DEFB $84,$06,$09,$48,$00,$00,$E8,$0E,$0F,$F4,$00,$00,$7A,$07,$0B,$AC | |||
| A560 | DEFB $00,$00,$F6,$0D,$0F,$63,$00,$80,$DD,$0F,$07,$E0,$00,$00,$E0,$0B | |||
| A570 | DEFB $0E,$FA,$00,$00,$75,$17,$0A,$BA,$80,$00,$3D,$05,$00,$00,$00,$00 | |||
| A580 | DEFB $00,$1C,$00,$00,$32,$00,$00,$7D,$00,$00,$7F,$00,$00,$F9,$00,$00 | |||
| A590 | DEFB $A1,$01,$02,$52,$00,$00,$BA,$03,$03,$FD,$00,$80,$DE,$01,$02,$EB | |||
| A5A0 | DEFB $00,$80,$7D,$03,$03,$D8,$C0,$60,$F7,$03,$01,$F8,$00,$00,$F8,$02 | |||
| A5B0 | DEFB $03,$BE,$80,$40,$DD,$05,$02,$AE,$A0,$40,$4F,$01,$00,$00,$00,$00 | |||
| A5C0 | DEFB $00,$07,$00,$80,$0C,$00,$00,$1F,$40,$C0,$1F,$00,$00,$3E,$40,$40 | |||
| A5D0 | DEFB $68,$00,$00,$94,$80,$80,$EE,$00,$00,$FF,$40,$A0,$77,$00,$00,$BA | |||
| A5E0 | DEFB $C0,$60,$DF,$00,$00,$F6,$30,$D8,$FD,$00,$00,$7E,$00,$00,$BE,$00 | |||
| A5F0 | DEFB $00,$EF,$A0,$50,$77,$01,$00,$AB,$A8,$D0,$53,$00,$00,$00,$00,$00 | |||
| A600 | DEFB $03,$80,$00,$00,$40,$06,$0F,$A0,$00,$00,$E0,$0F,$1F,$20,$00,$00 | |||
| A610 | DEFB $20,$1C,$12,$40,$00,$00,$A0,$29,$3B,$D0,$00,$00,$E0,$3E,$1F,$B0 | |||
| A620 | DEFB $00,$00,$98,$3F,$3E,$EC,$00,$00,$80,$1F,$1F,$80,$00,$00,$80,$0F | |||
| A630 | DEFB $2E,$A8,$00,$00,$D4,$5F,$2E,$AA,$00,$00,$D4,$17,$00,$00,$00,$00 | |||
| A640 | DEFB $00,$E0,$00,$00,$90,$01,$03,$E8,$00,$00,$F8,$03,$07,$C8,$00,$00 | |||
| A650 | DEFB $08,$07,$04,$90,$00,$00,$68,$0A,$0E,$F4,$00,$00,$B8,$0F,$07,$EC | |||
| A660 | DEFB $00,$00,$E6,$0F,$0F,$BB,$00,$00,$E0,$07,$07,$E0,$00,$00,$E0,$03 | |||
| A670 | DEFB $0B,$AA,$00,$00,$F5,$17,$0B,$AA,$80,$00,$F5,$05,$00,$00,$00,$00 | |||
| A680 | DEFB $00,$38,$00,$00,$64,$00,$00,$FA,$00,$00,$FE,$00,$01,$F2,$00,$00 | |||
| A690 | DEFB $C2,$01,$01,$24,$00,$00,$9A,$02,$03,$BD,$00,$00,$EE,$03,$01,$FB | |||
| A6A0 | DEFB $00,$80,$F9,$03,$03,$EE,$C0,$00,$F8,$01,$01,$F8,$00,$00,$F8,$00 | |||
| A6B0 | DEFB $02,$EA,$80,$40,$FD,$05,$02,$EA,$A0,$40,$7D,$01,$00,$00,$00,$00 | |||
| A6C0 | DEFB $00,$0E,$00,$00,$19,$00,$00,$3E,$80,$80,$3F,$00,$00,$7C,$80,$80 | |||
| A6D0 | DEFB $70,$00,$00,$49,$00,$80,$A6,$00,$00,$EF,$40,$80,$FB,$00,$00,$7E | |||
| A6E0 | DEFB $C0,$60,$FE,$00,$00,$FB,$B0,$00,$7E,$00,$00,$7E,$00,$00,$3E,$00 | |||
| A6F0 | DEFB $00,$BA,$A0,$50,$7F,$01,$00,$BA,$A8,$50,$5F,$00,$00,$00,$00,$00 | |||
| A700 | DEFB $00,$00,$00,$00,$C0,$03,$06,$60,$00,$00,$F0,$0D,$0F,$F0,$00,$00 | |||
| A710 | DEFB $18,$18,$34,$2C,$00,$00,$FC,$7B,$6C,$7C,$00,$00,$F8,$3A,$2D,$C0 | |||
| A720 | DEFB $00,$00,$30,$19,$1F,$F0,$00,$00,$F0,$0F,$0F,$F0,$00,$00,$E0,$0F | |||
| A730 | DEFB $1E,$50,$00,$00,$A8,$2E,$1F,$50,$00,$00,$A8,$2E,$00,$00,$00,$00 | |||
| A740 | DEFB $00,$00,$00,$00,$F0,$00,$01,$98,$00,$00,$7C,$03,$03,$FC,$00,$00 | |||
| A750 | DEFB $06,$06,$0D,$0B,$00,$00,$FF,$1E,$1B,$1F,$00,$00,$BE,$0E,$0B,$70 | |||
| A760 | DEFB $00,$00,$4C,$06,$07,$FC,$00,$00,$FC,$03,$03,$FC,$00,$00,$F8,$03 | |||
| A770 | DEFB $07,$94,$00,$00,$AA,$0B,$07,$D4,$00,$00,$AA,$0B,$00,$00,$00,$00 | |||
| A780 | DEFB $00,$00,$00,$00,$3C,$00,$00,$66,$00,$00,$DF,$00,$00,$FF,$00,$80 | |||
| A790 | DEFB $81,$01,$03,$42,$C0,$C0,$BF,$07,$06,$C7,$C0,$80,$AF,$03,$02,$DC | |||
| A7A0 | DEFB $00,$00,$93,$01,$01,$FF,$00,$00,$FF,$00,$00,$FF,$00,$00,$FE,$00 | |||
| A7B0 | DEFB $01,$E5,$00,$80,$EA,$02,$01,$F5,$00,$80,$EA,$02,$00,$00,$00,$00 | |||
| A7C0 | DEFB $00,$00,$00,$00,$0F,$00,$00,$19,$80,$C0,$37,$00,$00,$3F,$C0,$60 | |||
| A7D0 | DEFB $60,$00,$00,$D0,$B0,$F0,$EF,$01,$01,$B1,$F0,$E0,$EB,$00,$00,$B7 | |||
| A7E0 | DEFB $00,$C0,$64,$00,$00,$7F,$C0,$C0,$3F,$00,$00,$3F,$C0,$80,$3F,$00 | |||
| A7F0 | DEFB $00,$79,$40,$A0,$BA,$00,$00,$7D,$40,$A0,$BA,$00,$00,$00,$00,$00 | |||
| A800 | DEFB $00,$00,$00,$00,$C0,$03,$06,$60,$00,$00,$F0,$0D,$0F,$F0,$00,$00 | |||
| A810 | DEFB $18,$28,$74,$3C,$00,$00,$DC,$7B,$6C,$F8,$00,$00,$70,$3B,$2D,$C0 | |||
| A820 | DEFB $00,$00,$B0,$19,$1F,$F0,$00,$00,$F0,$1B,$2B,$F8,$00,$00,$E4,$5C | |||
| A830 | DEFB $2A,$E8,$00,$00,$F4,$55,$2A,$E8,$00,$00,$10,$15,$00,$00,$00,$00 | |||
| A840 | DEFB $00,$00,$00,$00,$F0,$00,$01,$98,$00,$00,$7C,$03,$03,$FC,$00,$00 | |||
| A850 | DEFB $06,$0A,$1D,$0F,$00,$00,$F7,$1E,$1B,$3E,$00,$00,$DC,$0E,$0B,$70 | |||
| A860 | DEFB $00,$00,$6C,$06,$07,$FC,$00,$00,$FC,$06,$0A,$FE,$00,$00,$39,$17 | |||
| A870 | DEFB $0A,$BA,$00,$00,$7D,$15,$0A,$BA,$00,$00,$44,$05,$00,$00,$00,$00 | |||
| A880 | DEFB $00,$00,$00,$00,$3C,$00,$00,$66,$00,$00,$DF,$00,$00,$FF,$00,$80 | |||
| A890 | DEFB $81,$02,$07,$43,$C0,$C0,$BD,$07,$06,$CF,$80,$00,$B7,$03,$02,$DC | |||
| A8A0 | DEFB $00,$00,$9B,$01,$01,$FF,$00,$00,$BF,$01,$02,$BF,$80,$40,$CE,$05 | |||
| A8B0 | DEFB $02,$AE,$80,$40,$5F,$05,$02,$AE,$80,$00,$51,$01,$00,$00,$00,$00 | |||
| A8C0 | DEFB $00,$00,$00,$00,$0F,$00,$00,$19,$80,$C0,$37,$00,$00,$3F,$C0,$60 | |||
| A8D0 | DEFB $A0,$00,$01,$D0,$F0,$70,$EF,$01,$01,$B3,$E0,$C0,$ED,$00,$00,$B7 | |||
| A8E0 | DEFB $00,$C0,$66,$00,$00,$7F,$C0,$C0,$6F,$00,$00,$AF,$E0,$90,$73,$01 | |||
| A8F0 | DEFB $00,$AB,$A0,$D0,$57,$01,$00,$AB,$A0,$40,$54,$00,$00,$00,$00,$00 | |||
| A900 | DEFB $03,$80,$00,$00,$C0,$04,$0B,$E0,$00,$00,$E0,$0F,$09,$F0,$00,$00 | |||
| A910 | DEFB $78,$08,$04,$FC,$00,$00,$DC,$05,$0A,$FC,$00,$00,$38,$16,$0D,$74 | |||
| A920 | DEFB $00,$00,$EC,$1B,$31,$BC,$00,$00,$FC,$6E,$01,$F8,$00,$00,$F4,$01 | |||
| A930 | DEFB $17,$DC,$00,$00,$BA,$2B,$57,$54,$00,$00,$28,$2F,$00,$00,$00,$00 | |||
| A940 | DEFB $00,$E0,$00,$00,$30,$01,$02,$F8,$00,$00,$F8,$03,$02,$7C,$00,$00 | |||
| A950 | DEFB $1E,$02,$01,$3F,$00,$00,$77,$01,$02,$BF,$00,$00,$8E,$05,$03,$5D | |||
| A960 | DEFB $00,$00,$FB,$06,$0C,$6F,$00,$00,$BF,$1B,$00,$7E,$00,$00,$7D,$00 | |||
| A970 | DEFB $05,$F7,$00,$80,$EE,$0A,$15,$D5,$00,$00,$CA,$0B,$00,$00,$00,$00 | |||
| A980 | DEFB $00,$38,$00,$00,$4C,$00,$00,$BE,$00,$00,$FE,$00,$00,$9F,$00,$80 | |||
| A990 | DEFB $87,$00,$00,$4F,$C0,$C0,$5D,$00,$00,$AF,$C0,$80,$63,$01,$00,$D7 | |||
| A9A0 | DEFB $40,$C0,$BE,$01,$03,$1B,$C0,$C0,$EF,$06,$00,$1F,$80,$40,$1F,$00 | |||
| A9B0 | DEFB $01,$7D,$C0,$A0,$BB,$02,$05,$75,$40,$80,$F2,$02,$00,$00,$00,$00 | |||
| A9C0 | DEFB $00,$0E,$00,$00,$13,$00,$00,$2F,$80,$80,$3F,$00,$00,$27,$C0,$E0 | |||
| A9D0 | DEFB $21,$00,$00,$13,$F0,$70,$17,$00,$00,$2B,$F0,$E0,$58,$00,$00,$35 | |||
| A9E0 | DEFB $D0,$B0,$6F,$00,$00,$C6,$F0,$F0,$BB,$01,$00,$07,$E0,$D0,$07,$00 | |||
| A9F0 | DEFB $00,$5F,$70,$E8,$AE,$00,$01,$5D,$50,$A0,$BC,$00,$00,$00,$00,$00 | |||
| AA00 | DEFB $01,$C0,$00,$00,$60,$02,$05,$F0,$00,$00,$F0,$07,$04,$F8,$00,$00 | |||
| AA10 | DEFB $38,$04,$02,$78,$00,$00,$FC,$05,$0A,$DC,$00,$00,$7C,$07,$0D,$F8 | |||
| AA20 | DEFB $00,$00,$FC,$19,$37,$7C,$00,$00,$F8,$01,$01,$F8,$00,$00,$F0,$01 | |||
| AA30 | DEFB $15,$74,$00,$00,$FA,$2B,$55,$74,$00,$00,$E8,$2B,$00,$00,$00,$00 | |||
| AA40 | DEFB $00,$70,$00,$00,$98,$00,$01,$7C,$00,$00,$FC,$01,$01,$3E,$00,$00 | |||
| AA50 | DEFB $0E,$01,$00,$9E,$00,$00,$7F,$01,$02,$B7,$00,$00,$DF,$01,$03,$7E | |||
| AA60 | DEFB $00,$00,$7F,$06,$0D,$DF,$00,$00,$7E,$00,$00,$7E,$00,$00,$7C,$00 | |||
| AA70 | DEFB $05,$5D,$00,$80,$FE,$0A,$15,$5D,$00,$00,$FA,$0A,$00,$00,$00,$00 | |||
| AA80 | DEFB $00,$1C,$00,$00,$26,$00,$00,$5F,$00,$00,$7F,$00,$00,$4F,$80,$80 | |||
| AA90 | DEFB $43,$00,$00,$27,$80,$C0,$5F,$00,$00,$AD,$C0,$C0,$77,$00,$00,$DF | |||
| AAA0 | DEFB $80,$C0,$9F,$01,$03,$77,$C0,$80,$1F,$00,$00,$1F,$80,$00,$1F,$00 | |||
| AAB0 | DEFB $01,$57,$40,$A0,$BF,$02,$05,$57,$40,$80,$BE,$02,$00,$00,$00,$00 | |||
| AAC0 | DEFB $00,$07,$00,$80,$09,$00,$00,$17,$C0,$C0,$1F,$00,$00,$13,$E0,$E0 | |||
| AAD0 | DEFB $10,$00,$00,$09,$E0,$F0,$17,$00,$00,$2B,$70,$F0,$1D,$00,$00,$37 | |||
| AAE0 | DEFB $E0,$F0,$67,$00,$00,$DD,$F0,$E0,$07,$00,$00,$07,$E0,$C0,$07,$00 | |||
| AAF0 | DEFB $00,$55,$D0,$E8,$AF,$00,$01,$55,$D0,$A0,$AF,$00,$00,$00,$00,$00 | |||
| AB00 | DEFB $03,$80,$00,$00,$C0,$04,$0B,$E0,$00,$00,$E0,$0F,$0B,$D0,$00,$00 | |||
| AB10 | DEFB $FC,$18,$17,$FE,$00,$00,$DE,$1F,$03,$DF,$00,$00,$7D,$7C,$04,$FB | |||
| AB20 | DEFB $00,$00,$4E,$07,$03,$F8,$00,$00,$F8,$07,$0F,$E0,$00,$00,$E0,$06 | |||
| AB30 | DEFB $07,$F0,$00,$00,$BA,$0B,$54,$F4,$00,$00,$EA,$0A,$00,$00,$00,$00 | |||
| AB40 | DEFB $00,$E0,$00,$00,$30,$01,$02,$F8,$00,$00,$F8,$03,$02,$FC,$00,$00 | |||
| AB50 | DEFB $3C,$06,$05,$FF,$00,$80,$FF,$03,$05,$F7,$80,$80,$3F,$3E,$02,$79 | |||
| AB60 | DEFB $80,$00,$A7,$01,$03,$FE,$00,$00,$FE,$0F,$0F,$FC,$00,$00,$3E,$07 | |||
| AB70 | DEFB $03,$8F,$00,$80,$27,$2F,$15,$51,$C0,$80,$AB,$0A,$00,$00,$00,$00 | |||
| AB80 | DEFB $00,$1C,$00,$00,$26,$00,$00,$5F,$00,$00,$7F,$00,$00,$5F,$80,$C0 | |||
| AB90 | DEFB $C7,$00,$00,$BF,$E0,$E0,$FD,$01,$00,$BD,$F0,$F0,$C7,$07,$00,$4F | |||
| ABA0 | DEFB $B0,$E0,$74,$00,$00,$7F,$80,$80,$7F,$00,$00,$FF,$00,$80,$F7,$00 | |||
| ABB0 | DEFB $00,$E7,$E0,$E0,$69,$01,$04,$F5,$20,$A0,$CA,$01,$00,$00,$00,$00 | |||
| ABC0 | DEFB $00,$07,$00,$80,$09,$00,$00,$17,$C0,$C0,$1F,$00,$00,$17,$C0,$E0 | |||
| ABD0 | DEFB $31,$00,$00,$2F,$F0,$F8,$3F,$00,$00,$5E,$78,$F8,$E3,$03,$00,$27 | |||
| ABE0 | DEFB $D0,$70,$39,$00,$00,$1F,$E0,$E0,$1F,$00,$00,$1F,$C0,$C0,$1F,$00 | |||
| ABF0 | DEFB $00,$0F,$C0,$E8,$AB,$00,$01,$53,$90,$A8,$A7,$00,$00,$00,$00,$00 | |||
| AC00 | DEFB $03,$80,$00,$00,$C0,$04,$0B,$E0,$00,$00,$E0,$8F,$C7,$E0,$00,$00 | |||
| AC10 | DEFB $D0,$6D,$37,$68,$00,$00,$E8,$5B,$3F,$C8,$00,$00,$58,$0B,$09,$D8 | |||
| AC20 | DEFB $00,$00,$B0,$0E,$27,$F0,$00,$00,$E0,$3F,$BF,$C0,$00,$00,$E0,$55 | |||
| AC30 | DEFB $2A,$F0,$00,$00,$70,$55,$0A,$E0,$00,$00,$00,$01,$00,$00,$00,$00 | |||
| AC40 | DEFB $00,$E0,$00,$00,$30,$01,$02,$F8,$00,$00,$F8,$23,$31,$F8,$00,$00 | |||
| AC50 | DEFB $74,$1B,$0D,$DA,$00,$00,$FA,$16,$0F,$F2,$00,$00,$D6,$02,$02,$76 | |||
| AC60 | DEFB $00,$00,$AC,$03,$09,$FC,$00,$00,$F8,$0F,$2F,$F0,$00,$00,$78,$15 | |||
| AC70 | DEFB $0A,$BC,$00,$00,$5C,$15,$02,$B8,$00,$00,$40,$00,$00,$00,$00,$00 | |||
| AC80 | DEFB $00,$38,$00,$00,$4C,$00,$00,$BE,$00,$00,$FE,$08,$0C,$7E,$00,$00 | |||
| AC90 | DEFB $DD,$06,$03,$76,$80,$80,$BE,$05,$03,$FC,$80,$80,$B5,$00,$00,$9D | |||
| ACA0 | DEFB $80,$00,$EB,$00,$02,$7F,$00,$00,$FE,$03,$0B,$FC,$00,$00,$5E,$05 | |||
| ACB0 | DEFB $02,$AF,$00,$00,$57,$05,$00,$AE,$00,$00,$10,$00,$00,$00,$00,$00 | |||
| ACC0 | DEFB $00,$0E,$00,$00,$13,$00,$00,$2F,$80,$80,$3F,$02,$03,$1F,$80,$40 | |||
| ACD0 | DEFB $B7,$01,$00,$DD,$A0,$A0,$6F,$01,$00,$FF,$20,$60,$2D,$00,$00,$27 | |||
| ACE0 | DEFB $60,$C0,$3A,$00,$00,$9F,$C0,$80,$FF,$00,$02,$FF,$00,$80,$57,$01 | |||
| ACF0 | DEFB $00,$AB,$C0,$C0,$55,$01,$00,$2B,$80,$00,$04,$00,$00,$00,$00,$00 | |||
| AD00 | DEFB $07,$00,$00,$00,$80,$09,$17,$C0,$00,$00,$C0,$1F,$4F,$E0,$00,$00 | |||
| AD10 | DEFB $D0,$6B,$37,$50,$00,$00,$C8,$1B,$2D,$E8,$00,$00,$48,$1F,$0D,$D8 | |||
| AD20 | DEFB $00,$00,$70,$0C,$07,$F0,$00,$00,$E0,$03,$07,$C0,$00,$00,$80,$57 | |||
| AD30 | DEFB $2F,$A0,$00,$00,$50,$57,$1F,$A0,$00,$00,$00,$0F,$00,$00,$00,$00 | |||
| AD40 | DEFB $01,$C0,$00,$00,$60,$02,$05,$F0,$00,$00,$F0,$07,$13,$F8,$00,$00 | |||
| AD50 | DEFB $F4,$1A,$0D,$D4,$00,$00,$F2,$06,$0B,$7A,$00,$00,$D2,$07,$03,$76 | |||
| AD60 | DEFB $00,$00,$1C,$03,$01,$FC,$00,$00,$F8,$00,$01,$F0,$00,$00,$E0,$15 | |||
| AD70 | DEFB $0B,$E8,$00,$00,$D4,$15,$07,$E8,$00,$00,$C0,$03,$00,$00,$00,$00 | |||
| AD80 | DEFB $00,$70,$00,$00,$98,$00,$01,$7C,$00,$00,$FC,$01,$04,$FE,$00,$00 | |||
| AD90 | DEFB $BD,$06,$03,$75,$00,$80,$BC,$01,$02,$DE,$80,$80,$F4,$01,$00,$DD | |||
| ADA0 | DEFB $80,$00,$C7,$00,$00,$7F,$00,$00,$3E,$00,$00,$7C,$00,$00,$78,$05 | |||
| ADB0 | DEFB $02,$FA,$00,$00,$75,$05,$01,$FA,$00,$00,$F0,$00,$00,$00,$00,$00 | |||
| ADC0 | DEFB $00,$1C,$00,$00,$26,$00,$00,$5F,$00,$00,$7F,$00,$01,$3F,$80,$40 | |||
| ADD0 | DEFB $AF,$01,$00,$DD,$40,$20,$6F,$00,$00,$B7,$A0,$20,$7D,$00,$00,$37 | |||
| ADE0 | DEFB $60,$C0,$31,$00,$00,$1F,$C0,$80,$0F,$00,$00,$1F,$00,$00,$5E,$01 | |||
| ADF0 | DEFB $00,$BE,$80,$40,$5D,$01,$00,$7E,$80,$00,$3C,$00,$00,$00,$00,$00 | |||
| AE00 | DEFB $07,$00,$00,$00,$80,$09,$D7,$C0,$00,$00,$E0,$DF,$F7,$F8,$00,$40 | |||
| AE10 | DEFB $DC,$F1,$7F,$BE,$C0,$C0,$7F,$3F,$0F,$64,$80,$00,$E7,$0E,$04,$2C | |||
| AE20 | DEFB $00,$00,$F8,$0F,$0F,$F0,$00,$00,$E0,$1E,$1D,$C0,$00,$00,$F0,$1D | |||
| AE30 | DEFB $0E,$E8,$00,$00,$70,$00,$00,$38,$00,$00,$70,$00,$00,$00,$00,$00 | |||
| AE40 | DEFB $01,$C0,$00,$00,$60,$02,$35,$F0,$00,$00,$F8,$37,$3D,$FE,$00,$10 | |||
| AE50 | DEFB $77,$3C,$1F,$EF,$B0,$F0,$DF,$0F,$03,$D9,$20,$C0,$B9,$03,$01,$0B | |||
| AE60 | DEFB $00,$00,$FE,$03,$03,$FC,$00,$00,$B8,$07,$07,$70,$00,$00,$7C,$07 | |||
| AE70 | DEFB $03,$BA,$00,$00,$1C,$00,$00,$0E,$00,$00,$1C,$00,$00,$00,$00,$00 | |||
| AE80 | DEFB $00,$70,$00,$00,$98,$00,$0D,$7C,$00,$00,$FE,$0D,$0F,$7F,$80,$C4 | |||
| AE90 | DEFB $1D,$0F,$07,$FB,$EC,$FC,$F7,$03,$00,$F6,$48,$70,$EE,$00,$00,$42 | |||
| AEA0 | DEFB $C0,$80,$FF,$00,$00,$FF,$00,$00,$EE,$01,$01,$DC,$00,$00,$DF,$01 | |||
| AEB0 | DEFB $00,$EE,$80,$00,$07,$00,$00,$03,$80,$00,$07,$00,$00,$00,$00,$00 | |||
| AEC0 | DEFB $00,$1C,$00,$00,$26,$00,$03,$5F,$00,$80,$7F,$03,$03,$DF,$E0,$71 | |||
| AED0 | DEFB $C7,$03,$01,$FE,$FB,$FF,$FD,$00,$00,$3D,$92,$9C,$3B,$00,$00,$10 | |||
| AEE0 | DEFB $B0,$E0,$3F,$00,$00,$3F,$C0,$80,$7B,$00,$00,$77,$00,$C0,$77,$00 | |||
| AEF0 | DEFB $00,$3B,$A0,$C0,$01,$00,$00,$00,$E0,$C0,$01,$00,$00,$00,$00,$00 | |||
| AF00 | DEFB $00,$38,$00,$00,$64,$00,$00,$FA,$C0,$C0,$FE,$01,$07,$FB,$C0,$C0 | |||
| AF10 | DEFB $E3,$8E,$DF,$7F,$80,$00,$BF,$FF,$49,$BC,$00,$00,$DC,$39,$0D,$08 | |||
| AF20 | DEFB $00,$00,$FC,$07,$03,$FC,$00,$00,$DE,$01,$00,$EE,$00,$00,$EE,$03 | |||
| AF30 | DEFB $05,$DC,$00,$00,$80,$03,$07,$00,$00,$00,$80,$03,$00,$00,$00,$00 | |||
| AF40 | DEFB $00,$0E,$00,$00,$19,$00,$00,$3E,$B0,$B0,$7F,$00,$01,$FE,$F0,$F0 | |||
| AF50 | DEFB $B8,$23,$37,$DF,$E0,$C0,$EF,$3F,$12,$6F,$00,$00,$77,$0E,$03,$42 | |||
| AF60 | DEFB $00,$00,$FF,$01,$00,$FF,$00,$80,$77,$00,$00,$3B,$80,$80,$FB,$00 | |||
| AF70 | DEFB $01,$77,$00,$00,$E0,$00,$01,$C0,$00,$00,$E0,$00,$00,$00,$00,$00 | |||
| AF80 | DEFB $00,$03,$80,$40,$06,$00,$00,$0F,$AC,$EC,$1F,$00,$00,$7F,$BC,$3C | |||
| AF90 | DEFB $EE,$08,$0D,$F7,$F8,$F0,$FB,$0F,$04,$9B,$C0,$C0,$9D,$03,$00,$D0 | |||
| AFA0 | DEFB $80,$C0,$7F,$00,$00,$3F,$C0,$E0,$1D,$00,$00,$0E,$E0,$E0,$3E,$00 | |||
| AFB0 | DEFB $00,$5D,$C0,$00,$38,$00,$00,$70,$00,$00,$38,$00,$00,$00,$00,$00 | |||
| AFC0 | DEFB $00,$00,$E0,$90,$01,$00,$00,$03,$EB,$FB,$07,$00,$00,$1F,$EF,$8F | |||
| AFD0 | DEFB $3B,$02,$03,$7D,$FE,$FC,$FE,$03,$01,$26,$F0,$70,$E7,$00,$00,$34 | |||
| AFE0 | DEFB $20,$F0,$1F,$00,$00,$0F,$F0,$78,$07,$00,$00,$03,$B8,$B8,$0F,$00 | |||
| AFF0 | DEFB $00,$17,$70,$00,$0E,$00,$00,$1C,$00,$00,$0E,$00,$00,$00,$00,$00 | |||
| B000 | DEFB $0F,$00,$00,$00,$80,$1F,$3F,$C0,$00,$00,$C0,$3F,$3F,$C0,$00,$00 | |||
| B010 | DEFB $60,$5F,$F0,$E0,$00,$00,$F0,$FF,$7F,$F0,$00,$00,$B0,$77,$39,$70 | |||
| B020 | DEFB $00,$00,$E0,$1E,$31,$00,$00,$00,$C0,$3F,$3F,$80,$00,$00,$40,$79 | |||
| B030 | DEFB $BA,$A0,$00,$00,$40,$7D,$BA,$A0,$00,$00,$00,$45,$00,$00,$00,$00 | |||
| B040 | DEFB $00,$00,$00,$00,$C0,$03,$07,$E0,$00,$00,$F0,$0F,$0F,$F0,$00,$00 | |||
| B050 | DEFB $F0,$0F,$17,$D8,$00,$00,$38,$3C,$3F,$FC,$00,$00,$CC,$3B,$1D,$3C | |||
| B060 | DEFB $00,$00,$F8,$1E,$09,$20,$00,$00,$F0,$0F,$0F,$E0,$00,$00,$E4,$1E | |||
| B070 | DEFB $2E,$E8,$00,$00,$54,$1F,$2E,$A8,$00,$00,$50,$15,$00,$00,$00,$00 | |||
| B080 | DEFB $00,$F0,$00,$00,$F8,$01,$03,$FC,$00,$00,$FC,$03,$03,$FC,$00,$00 | |||
| B090 | DEFB $F6,$05,$0F,$0E,$00,$00,$FF,$0F,$0F,$FF,$00,$00,$E7,$05,$06,$9E | |||
| B0A0 | DEFB $00,$00,$7C,$02,$01,$90,$00,$00,$FC,$03,$03,$F8,$00,$00,$BC,$07 | |||
| B0B0 | DEFB $0B,$BA,$00,$00,$7C,$05,$0A,$BA,$00,$00,$50,$05,$00,$00,$00,$00 | |||
| B0C0 | DEFB $00,$00,$00,$00,$3C,$00,$00,$7E,$00,$00,$FF,$00,$00,$FF,$00,$00 | |||
| B0D0 | DEFB $FF,$00,$01,$7D,$80,$80,$C3,$03,$03,$FF,$C0,$C0,$7E,$03,$03,$99 | |||
| B0E0 | DEFB $C0,$80,$EF,$01,$00,$94,$80,$00,$FF,$00,$00,$FE,$00,$40,$EE,$01 | |||
| B0F0 | DEFB $02,$AE,$80,$40,$5F,$01,$02,$AE,$80,$00,$51,$01,$00,$00,$00,$00 | |||
| B100 | DEFB $00,$00,$00,$00,$00,$0F,$19,$80,$00,$00,$C0,$37,$3F,$C0,$00,$00 | |||
| B110 | DEFB $A0,$7F,$D9,$A0,$00,$00,$A0,$FF,$7E,$B0,$00,$00,$B0,$3E,$3C,$B0 | |||
| B120 | DEFB $00,$00,$90,$31,$25,$A0,$00,$00,$C0,$3F,$3F,$80,$00,$00,$80,$3B | |||
| B130 | DEFB $3A,$80,$00,$00,$50,$7D,$BA,$A0,$00,$00,$40,$55,$00,$00,$00,$00 | |||
| B140 | DEFB $00,$00,$00,$00,$C0,$03,$06,$60,$00,$00,$F0,$0D,$0F,$F0,$00,$00 | |||
| B150 | DEFB $E8,$0F,$16,$68,$00,$00,$E8,$3F,$3F,$AC,$00,$00,$AC,$3F,$1F,$2C | |||
| B160 | DEFB $00,$00,$64,$0C,$09,$68,$00,$00,$F0,$0F,$0F,$E0,$00,$00,$E0,$0E | |||
| B170 | DEFB $0E,$E0,$00,$00,$54,$1F,$2E,$A8,$00,$00,$50,$15,$00,$00,$00,$00 | |||
| B180 | DEFB $00,$00,$00,$00,$F0,$00,$01,$98,$00,$00,$7C,$03,$03,$FC,$00,$00 | |||
| B190 | DEFB $FA,$03,$05,$9A,$00,$00,$FA,$0F,$0F,$EB,$00,$00,$EB,$0F,$0F,$CB | |||
| B1A0 | DEFB $00,$00,$19,$0B,$06,$5A,$00,$00,$FC,$03,$03,$F8,$00,$00,$B8,$03 | |||
| B1B0 | DEFB $02,$B8,$00,$00,$7D,$05,$0A,$BA,$00,$00,$54,$05,$00,$00,$00,$00 | |||
| B1C0 | DEFB $00,$00,$00,$00,$3C,$00,$00,$66,$00,$00,$DF,$00,$00,$FF,$00,$80 | |||
| B1D0 | DEFB $FE,$00,$01,$66,$80,$80,$FE,$03,$03,$FA,$C0,$C0,$FA,$03,$01,$F2 | |||
| B1E0 | DEFB $C0,$40,$C6,$00,$00,$96,$80,$00,$FF,$00,$00,$FE,$00,$00,$EE,$00 | |||
| B1F0 | DEFB $00,$EE,$00,$40,$5F,$01,$02,$AE,$80,$00,$55,$01,$00,$00,$00,$00 | |||
| B200 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| B210 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| B220 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| B230 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| B240 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| B250 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| B260 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| B270 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| B280 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| B290 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| B2A0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| B2B0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| B2C0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| B2D0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| B2E0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| B2F0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| B300 | DEFB $01,$C0,$00,$00,$60,$02,$05,$F0,$00,$00,$F0,$0F,$05,$F0,$00,$00 | |||
| B310 | DEFB $78,$04,$0B,$FC,$00,$00,$FE,$07,$07,$9E,$00,$00,$FE,$02,$01,$F4 | |||
| B320 | DEFB $00,$00,$DC,$07,$0F,$F8,$00,$00,$F8,$1B,$07,$70,$00,$00,$F0,$06 | |||
| B330 | DEFB $02,$F0,$00,$00,$FA,$2A,$54,$E4,$00,$00,$EA,$29,$00,$00,$00,$00 | |||
| B340 | DEFB $00,$00,$10,$80,$41,$30,$78,$00,$80,$00,$8E,$61,$07,$5E,$00,$80 | |||
| B350 | DEFB $D9,$07,$1D,$FF,$80,$40,$DE,$2F,$1F,$6D,$C0,$C0,$F3,$13,$19,$BE | |||
| B360 | DEFB $C0,$40,$EF,$1E,$0E,$FB,$80,$80,$FF,$5F,$1C,$D3,$80,$00,$BD,$05 | |||
| B370 | DEFB $23,$7F,$00,$80,$6C,$08,$18,$71,$C0,$C0,$01,$00,$00,$00,$00,$00 | |||
| B380 | DEFB $63,$00,$00,$80,$C9,$47,$05,$C2,$C0,$C0,$CA,$07,$01,$83,$E0,$E0 | |||
| B390 | DEFB $01,$30,$38,$30,$60,$10,$B8,$7C,$74,$3A,$00,$E0,$10,$2C,$3C,$00 | |||
| B3A0 | DEFB $F0,$F0,$20,$19,$03,$24,$60,$60,$0C,$20,$20,$00,$00,$20,$00,$07 | |||
| B3B0 | DEFB $47,$A7,$00,$80,$87,$07,$03,$17,$80,$10,$03,$00,$00,$00,$00,$00 | |||
| B3C0 | DEFB $03,$11,$00,$80,$81,$03,$18,$80,$00,$00,$02,$08,$40,$03,$00,$20 | |||
| B3D0 | DEFB $20,$C4,$E0,$00,$00,$00,$00,$60,$62,$12,$30,$20,$18,$00,$00,$00 | |||
| B3E0 | DEFB $00,$20,$00,$18,$00,$00,$10,$10,$08,$23,$01,$20,$80,$00,$30,$00 | |||
| B3F0 | DEFB $02,$00,$00,$00,$00,$60,$70,$07,$00,$00,$26,$30,$00,$00,$00,$00 | |||
| B400 | DEFB $01,$C0,$00,$00,$60,$02,$05,$F0,$00,$00,$F0,$CF,$E4,$78,$00,$00 | |||
| B410 | DEFB $3C,$7C,$3B,$FE,$00,$00,$FE,$1F,$07,$CF,$00,$00,$7F,$07,$02,$FB | |||
| B420 | DEFB $00,$00,$EE,$03,$06,$F8,$00,$00,$F8,$0D,$07,$70,$00,$00,$F0,$06 | |||
| B430 | DEFB $02,$F0,$00,$00,$FA,$2A,$54,$E4,$00,$00,$EA,$29,$00,$00,$00,$00 | |||
| B440 | DEFB $00,$00,$01,$18,$04,$03,$07,$80,$08,$E0,$18,$06,$00,$75,$E0,$98 | |||
| B450 | DEFB $7D,$00,$01,$DF,$F8,$E4,$FD,$02,$01,$F6,$DC,$3C,$3F,$01,$01,$9B | |||
| B460 | DEFB $EC,$F4,$EE,$01,$00,$EF,$B8,$F8,$FF,$05,$01,$CD,$38,$D0,$5B,$00 | |||
| B470 | DEFB $02,$37,$F0,$C8,$86,$00,$01,$87,$1C,$1C,$00,$00,$00,$00,$00,$00 | |||
| B480 | DEFB $06,$30,$00,$98,$7C,$04,$00,$5C,$2C,$AC,$7C,$00,$00,$18,$3E,$1E | |||
| B490 | DEFB $00,$03,$03,$83,$06,$81,$CB,$07,$07,$43,$A0,$0E,$C1,$02,$03,$C0 | |||
| B4A0 | DEFB $0F,$0F,$92,$01,$00,$32,$46,$C6,$00,$02,$02,$00,$00,$02,$70,$00 | |||
| B4B0 | DEFB $04,$7A,$70,$78,$78,$00,$00,$31,$78,$31,$00,$00,$00,$00,$00,$00 | |||
| B4C0 | DEFB $00,$31,$10,$18,$38,$00,$01,$88,$00,$20,$80,$00,$04,$00,$30,$02 | |||
| B4D0 | DEFB $42,$0C,$0E,$00,$00,$00,$00,$06,$06,$21,$23,$82,$01,$00,$00,$00 | |||
| B4E0 | DEFB $00,$02,$80,$01,$00,$00,$01,$81,$30,$02,$00,$12,$08,$00,$03,$00 | |||
| B4F0 | DEFB $00,$20,$00,$00,$00,$06,$07,$00,$70,$60,$02,$03,$00,$00,$00,$00 | |||
| B500 | DEFB $31,$E0,$00,$00,$70,$32,$75,$FB,$00,$00,$FB,$77,$74,$0F,$00,$00 | |||
| B510 | DEFB $9E,$7A,$3F,$3E,$00,$00,$F4,$3F,$17,$7C,$00,$00,$5C,$1D,$1E,$38 | |||
| B520 | DEFB $00,$00,$8A,$68,$0E,$30,$00,$00,$50,$0D,$1F,$70,$00,$00,$F8,$36 | |||
| B530 | DEFB $78,$3C,$00,$00,$9C,$38,$18,$8E,$00,$00,$07,$38,$00,$00,$00,$00 | |||
| B540 | DEFB $0C,$78,$00,$00,$9C,$0C,$1D,$7E,$C0,$C0,$FE,$1D,$1D,$03,$C0,$80 | |||
| B550 | DEFB $A7,$1E,$0F,$CF,$80,$00,$FD,$0F,$05,$DF,$00,$00,$57,$07,$07,$8E | |||
| B560 | DEFB $00,$80,$22,$1A,$03,$8C,$00,$00,$54,$03,$07,$DC,$00,$00,$BE,$0D | |||
| B570 | DEFB $1E,$0F,$00,$00,$27,$0E,$06,$23,$80,$C0,$01,$0E,$00,$00,$00,$00 | |||
| B580 | DEFB $03,$1E,$00,$00,$27,$03,$07,$5F,$B0,$B0,$7F,$07,$07,$40,$F0,$E0 | |||
| B590 | DEFB $A9,$07,$03,$F3,$E0,$40,$FF,$03,$01,$77,$C0,$C0,$D5,$01,$01,$E3 | |||
| B5A0 | DEFB $80,$A0,$88,$06,$00,$E3,$00,$00,$D5,$00,$01,$F7,$00,$80,$6F,$03 | |||
| B5B0 | DEFB $07,$83,$C0,$C0,$89,$03,$01,$88,$E0,$70,$80,$03,$00,$00,$00,$00 | |||
| B5C0 | DEFB $00,$C7,$80,$C0,$C9,$00,$01,$D7,$EC,$EC,$DF,$01,$01,$D0,$3C,$78 | |||
| B5D0 | DEFB $EA,$01,$00,$FC,$F8,$D0,$FF,$00,$00,$5D,$F0,$70,$75,$00,$00,$78 | |||
| B5E0 | DEFB $E0,$28,$A2,$01,$00,$38,$C0,$40,$35,$00,$00,$7D,$C0,$E0,$DB,$00 | |||
| B5F0 | DEFB $01,$E0,$F0,$70,$E2,$00,$00,$62,$38,$1C,$E0,$00,$00,$00,$00,$00 | |||
| B600 | DEFB $07,$8C,$00,$00,$4C,$0E,$DF,$AE,$00,$00,$EE,$DF,$F0,$2E,$00,$00 | |||
| B610 | DEFB $5E,$79,$7C,$FC,$00,$00,$FC,$2F,$3E,$E8,$00,$00,$B8,$3A,$1C,$78 | |||
| B620 | DEFB $00,$00,$16,$51,$0C,$70,$00,$00,$B0,$0A,$0E,$F8,$00,$00,$6C,$1F | |||
| B630 | DEFB $3C,$1E,$00,$00,$1C,$39,$71,$18,$00,$00,$1C,$E0,$00,$00,$00,$00 | |||
| B640 | DEFB $01,$E3,$00,$00,$93,$03,$37,$EB,$80,$80,$FB,$37,$3C,$0B,$80,$80 | |||
| B650 | DEFB $57,$1E,$1F,$3F,$00,$00,$FF,$0B,$0F,$BA,$00,$00,$AE,$0E,$07,$1E | |||
| B660 | DEFB $00,$80,$45,$14,$03,$1C,$00,$00,$AC,$02,$03,$BE,$00,$00,$DB,$07 | |||
| B670 | DEFB $0F,$07,$80,$00,$47,$0E,$1C,$46,$00,$00,$07,$38,$00,$00,$00,$00 | |||
| B680 | DEFB $00,$78,$C0,$C0,$E4,$00,$0D,$FA,$E0,$E0,$FE,$0D,$0F,$02,$E0,$E0 | |||
| B690 | DEFB $95,$07,$07,$CF,$C0,$C0,$FF,$02,$03,$EE,$80,$80,$AB,$03,$01,$C7 | |||
| B6A0 | DEFB $80,$60,$11,$05,$00,$C7,$00,$00,$AB,$00,$00,$EF,$80,$C0,$F6,$01 | |||
| B6B0 | DEFB $03,$C1,$E0,$C0,$91,$03,$07,$11,$80,$C0,$01,$0E,$00,$00,$00,$00 | |||
| B6C0 | DEFB $00,$1E,$30,$30,$39,$00,$03,$7E,$B8,$B8,$7F,$03,$03,$C0,$B8,$78 | |||
| B6D0 | DEFB $E5,$01,$01,$F3,$F0,$F0,$BF,$00,$00,$FB,$A0,$E0,$EA,$00,$00,$71 | |||
| B6E0 | DEFB $E0,$58,$44,$01,$00,$31,$C0,$C0,$2A,$00,$00,$3B,$E0,$B0,$7D,$00 | |||
| B6F0 | DEFB $00,$F0,$78,$70,$E4,$00,$01,$C4,$60,$70,$80,$03,$00,$00,$00,$00 | |||
| B700 | DEFB $00,$00,$00,$00,$00,$00,$01,$00,$00,$00,$00,$00,$01,$00,$00,$00 | |||
| B710 | DEFB $20,$08,$01,$00,$00,$00,$80,$03,$57,$D4,$00,$00,$80,$03,$01,$00 | |||
| B720 | DEFB $00,$00,$20,$08,$01,$00,$00,$00,$00,$00,$01,$00,$00,$00,$00,$00 | |||
| B730 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| B740 | DEFB $00,$00,$00,$00,$00,$00,$00,$40,$00,$00,$00,$00,$00,$40,$00,$00 | |||
| B750 | DEFB $08,$02,$00,$40,$00,$00,$E0,$00,$15,$F5,$00,$00,$E0,$00,$00,$40 | |||
| B760 | DEFB $00,$00,$08,$02,$00,$40,$00,$00,$00,$00,$00,$40,$00,$00,$00,$00 | |||
| B770 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| B780 | DEFB $00,$00,$00,$00,$00,$00,$00,$10,$00,$00,$00,$00,$00,$10,$00,$00 | |||
| B790 | DEFB $82,$00,$00,$10,$00,$00,$38,$00,$05,$7D,$40,$00,$38,$00,$00,$10 | |||
| B7A0 | DEFB $00,$00,$82,$00,$00,$10,$00,$00,$00,$00,$00,$10,$00,$00,$00,$00 | |||
| B7B0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| B7C0 | DEFB $00,$00,$00,$00,$00,$00,$00,$04,$00,$00,$00,$00,$00,$04,$00,$80 | |||
| B7D0 | DEFB $20,$00,$00,$04,$00,$00,$0E,$00,$01,$5F,$50,$00,$0E,$00,$00,$04 | |||
| B7E0 | DEFB $00,$80,$20,$00,$00,$04,$00,$00,$00,$00,$00,$04,$00,$00,$00,$00 | |||
| B7F0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| B800 | DEFB $00,$00,$00,$00,$00,$01,$00,$00,$00,$00,$08,$21,$01,$20,$00,$00 | |||
| B810 | DEFB $60,$18,$0D,$C0,$00,$00,$80,$07,$B7,$DA,$00,$00,$C0,$03,$07,$60 | |||
| B820 | DEFB $00,$00,$30,$0C,$09,$00,$00,$00,$08,$21,$00,$00,$00,$00,$00,$01 | |||
| B830 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| B840 | DEFB $00,$00,$00,$00,$40,$00,$00,$00,$00,$00,$42,$08,$00,$48,$00,$00 | |||
| B850 | DEFB $18,$06,$03,$70,$00,$00,$E0,$01,$2D,$F6,$80,$00,$F0,$00,$01,$D8 | |||
| B860 | DEFB $00,$00,$0C,$03,$02,$40,$00,$00,$42,$08,$00,$00,$00,$00,$40,$00 | |||
| B870 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| B880 | DEFB $00,$00,$00,$00,$10,$00,$00,$00,$00,$80,$10,$02,$00,$12,$00,$00 | |||
| B890 | DEFB $86,$01,$00,$DC,$00,$00,$78,$00,$0B,$7D,$A0,$00,$3C,$00,$00,$76 | |||
| B8A0 | DEFB $00,$00,$C3,$00,$00,$90,$00,$80,$10,$02,$00,$00,$00,$00,$10,$00 | |||
| B8B0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| B8C0 | DEFB $00,$00,$00,$00,$04,$00,$00,$00,$00,$20,$84,$00,$00,$04,$80,$80 | |||
| B8D0 | DEFB $61,$00,$00,$37,$00,$00,$1E,$00,$02,$DF,$68,$00,$0F,$00,$00,$1D | |||
| B8E0 | DEFB $80,$C0,$30,$00,$00,$24,$00,$20,$84,$00,$00,$00,$00,$00,$04,$00 | |||
| B8F0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| B900 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$40,$07,$0B,$80,$00,$00 | |||
| B910 | DEFB $80,$0B,$0D,$80,$00,$00,$00,$07,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| B920 | DEFB $00,$00,$00,$00,$03,$80,$00,$00,$C0,$04,$05,$C0,$00,$00,$C0,$07 | |||
| B930 | DEFB $03,$80,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| B940 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$D0,$01,$02,$E0,$00,$00 | |||
| B950 | DEFB $E0,$02,$03,$60,$00,$00,$C0,$01,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| B960 | DEFB $00,$00,$00,$00,$00,$E0,$00,$00,$30,$01,$01,$70,$00,$00,$F0,$01 | |||
| B970 | DEFB $00,$E0,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| B980 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$74,$00,$00,$B8,$00,$00 | |||
| B990 | DEFB $B8,$00,$00,$D8,$00,$00,$70,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| B9A0 | DEFB $00,$00,$00,$00,$00,$38,$00,$00,$4C,$00,$00,$5C,$00,$00,$7C,$00 | |||
| B9B0 | DEFB $00,$38,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| B9C0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$1D,$00,$00,$2E,$00,$00 | |||
| B9D0 | DEFB $2E,$00,$00,$36,$00,$00,$1C,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| B9E0 | DEFB $00,$00,$00,$00,$00,$0E,$00,$00,$13,$00,$00,$17,$00,$00,$1F,$00 | |||
| B9F0 | DEFB $00,$0E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| BA00 | DEFB $00,$00,$00,$00,$E0,$01,$06,$D0,$00,$00,$F0,$0D,$0B,$D0,$00,$00 | |||
| BA10 | DEFB $C0,$0B,$0D,$C0,$00,$00,$80,$07,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| BA20 | DEFB $00,$00,$C0,$03,$04,$E0,$00,$00,$E0,$05,$07,$E0,$00,$00,$E0,$07 | |||
| BA30 | DEFB $03,$C0,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| BA40 | DEFB $00,$00,$00,$00,$78,$00,$01,$B4,$00,$00,$7C,$03,$02,$F4,$00,$00 | |||
| BA50 | DEFB $F0,$02,$03,$70,$00,$00,$E0,$01,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| BA60 | DEFB $00,$00,$F0,$00,$01,$38,$00,$00,$78,$01,$01,$F8,$00,$00,$F8,$01 | |||
| BA70 | DEFB $00,$F0,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| BA80 | DEFB $00,$00,$00,$00,$1E,$00,$00,$6D,$00,$00,$DF,$00,$00,$BD,$00,$00 | |||
| BA90 | DEFB $BC,$00,$00,$DC,$00,$00,$78,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| BAA0 | DEFB $00,$00,$3C,$00,$00,$4E,$00,$00,$5E,$00,$00,$7E,$00,$00,$7E,$00 | |||
| BAB0 | DEFB $00,$3C,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| BAC0 | DEFB $00,$00,$00,$80,$07,$00,$00,$1B,$40,$C0,$37,$00,$00,$2F,$40,$00 | |||
| BAD0 | DEFB $2F,$00,$00,$37,$00,$00,$1E,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| BAE0 | DEFB $00,$00,$0F,$00,$00,$13,$80,$80,$17,$00,$00,$1F,$80,$80,$1F,$00 | |||
| BAF0 | DEFB $00,$0F,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| BB00 | DEFB $00,$00,$00,$00,$E0,$03,$0D,$F0,$00,$00,$E8,$1B,$17,$F8,$00,$00 | |||
| BB10 | DEFB $E8,$17,$17,$E0,$00,$00,$C0,$1B,$0F,$80,$00,$00,$00,$06,$01,$80 | |||
| BB20 | DEFB $00,$00,$E0,$07,$0C,$F0,$00,$00,$F0,$09,$19,$F8,$00,$00,$F8,$1B | |||
| BB30 | DEFB $0F,$F0,$00,$00,$F0,$0F,$07,$E0,$00,$00,$80,$01,$00,$00,$00,$00 | |||
| BB40 | DEFB $00,$00,$00,$00,$F8,$00,$03,$7C,$00,$00,$FA,$06,$05,$FE,$00,$00 | |||
| BB50 | DEFB $FA,$05,$05,$F8,$00,$00,$F0,$06,$03,$E0,$00,$00,$80,$01,$00,$60 | |||
| BB60 | DEFB $00,$00,$F8,$01,$03,$3C,$00,$00,$7C,$02,$06,$7E,$00,$00,$FE,$06 | |||
| BB70 | DEFB $03,$FC,$00,$00,$FC,$03,$01,$F8,$00,$00,$60,$00,$00,$00,$00,$00 | |||
| BB80 | DEFB $00,$00,$00,$00,$3E,$00,$00,$DF,$00,$80,$BE,$01,$01,$7F,$80,$80 | |||
| BB90 | DEFB $7E,$01,$01,$7E,$00,$00,$BC,$01,$00,$F8,$00,$00,$60,$00,$00,$18 | |||
| BBA0 | DEFB $00,$00,$7E,$00,$00,$CF,$00,$00,$9F,$00,$01,$9F,$80,$80,$BF,$01 | |||
| BBB0 | DEFB $00,$FF,$00,$00,$FF,$00,$00,$7E,$00,$00,$18,$00,$00,$00,$00,$00 | |||
| BBC0 | DEFB $00,$00,$00,$80,$0F,$00,$00,$37,$C0,$A0,$6F,$00,$00,$5F,$E0,$A0 | |||
| BBD0 | DEFB $5F,$00,$00,$5F,$80,$00,$6F,$00,$00,$3E,$00,$00,$18,$00,$00,$06 | |||
| BBE0 | DEFB $00,$80,$1F,$00,$00,$33,$C0,$C0,$27,$00,$00,$67,$E0,$E0,$6F,$00 | |||
| BBF0 | DEFB $00,$3F,$C0,$C0,$3F,$00,$00,$1F,$80,$00,$06,$00,$00,$00,$00,$00 | |||
| BC00 | DEFB $37,$80,$00,$00,$40,$48,$53,$20,$00,$00,$E0,$5F,$50,$30,$00,$00 | |||
| BC10 | DEFB $58,$48,$EF,$F8,$00,$00,$B8,$CA,$7D,$78,$00,$00,$F0,$4B,$36,$70 | |||
| BC20 | DEFB $00,$00,$20,$3F,$1F,$E0,$00,$00,$E0,$1F,$1D,$C0,$00,$00,$E0,$29 | |||
| BC30 | DEFB $55,$D0,$00,$00,$E0,$2B,$55,$D0,$00,$00,$20,$0A,$00,$00,$00,$00 | |||
| BC40 | DEFB $0D,$E0,$00,$00,$10,$12,$14,$C8,$00,$00,$F8,$17,$14,$0E,$00,$00 | |||
| BC50 | DEFB $16,$12,$3B,$FE,$00,$00,$AE,$32,$1F,$56,$00,$00,$AC,$12,$0D,$5C | |||
| BC60 | DEFB $00,$00,$F4,$0F,$07,$F8,$00,$00,$F8,$07,$07,$70,$00,$00,$F8,$0F | |||
| BC70 | DEFB $17,$74,$00,$00,$F8,$0A,$15,$74,$00,$00,$A0,$08,$00,$00,$00,$00 | |||
| BC80 | DEFB $00,$78,$00,$00,$84,$03,$05,$32,$00,$00,$FF,$05,$05,$03,$80,$80 | |||
| BC90 | DEFB $85,$04,$04,$FF,$80,$80,$AB,$0E,$0C,$D5,$80,$00,$AB,$07,$04,$D7 | |||
| BCA0 | DEFB $00,$00,$FE,$03,$01,$FE,$00,$00,$FE,$01,$01,$DC,$00,$00,$FE,$03 | |||
| BCB0 | DEFB $05,$DD,$00,$00,$EA,$03,$05,$D5,$00,$00,$2A,$02,$00,$00,$00,$00 | |||
| BCC0 | DEFB $00,$1E,$00,$00,$E1,$00,$01,$4C,$80,$80,$7F,$01,$01,$40,$E0,$60 | |||
| BCD0 | DEFB $21,$01,$01,$3F,$E0,$E0,$AA,$03,$03,$35,$60,$C0,$EA,$01,$01,$35 | |||
| BCE0 | DEFB $C0,$40,$FF,$00,$00,$7F,$80,$80,$7F,$00,$00,$77,$00,$80,$F2,$00 | |||
| BCF0 | DEFB $01,$75,$40,$80,$F2,$00,$01,$75,$40,$80,$8A,$00,$00,$00,$00,$00 | |||
| BD00 | DEFB $02,$00,$00,$00,$00,$05,$06,$00,$00,$00,$00,$18,$38,$00,$00,$00 | |||
| BD10 | DEFB $00,$78,$F0,$00,$00,$00,$00,$E0,$C0,$00,$00,$00,$00,$00,$00,$00 | |||
| BD20 | DEFB $00,$00,$00,$70,$F8,$00,$00,$00,$00,$70,$00,$00,$00,$00,$00,$00 | |||
| BD30 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| BD40 | DEFB $00,$80,$00,$00,$40,$01,$01,$80,$00,$00,$00,$06,$0E,$00,$00,$00 | |||
| BD50 | DEFB $00,$1E,$3C,$00,$00,$00,$00,$38,$30,$00,$00,$00,$00,$00,$00,$00 | |||
| BD60 | DEFB $00,$00,$00,$1C,$3E,$00,$00,$00,$00,$1C,$00,$00,$00,$00,$00,$00 | |||
| BD70 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| BD80 | DEFB $00,$20,$00,$00,$50,$00,$00,$60,$00,$00,$80,$01,$03,$80,$00,$00 | |||
| BD90 | DEFB $80,$07,$0F,$00,$00,$00,$00,$0E,$0C,$00,$00,$00,$00,$00,$00,$00 | |||
| BDA0 | DEFB $00,$00,$00,$07,$0F,$80,$00,$00,$00,$07,$00,$00,$00,$00,$00,$00 | |||
| BDB0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| BDC0 | DEFB $00,$08,$00,$00,$14,$00,$00,$18,$00,$00,$60,$00,$00,$E0,$00,$00 | |||
| BDD0 | DEFB $E0,$01,$03,$C0,$00,$00,$80,$03,$03,$00,$00,$00,$00,$00,$00,$00 | |||
| BDE0 | DEFB $00,$00,$C0,$01,$03,$E0,$00,$00,$C0,$01,$00,$00,$00,$00,$00,$00 | |||
| BDF0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| BE00 | DEFB $A0,$00,$00,$00,$00,$A0,$40,$00,$00,$00,$00,$E0,$E0,$00,$00,$00 | |||
| BE10 | DEFB $00,$E0,$E0,$00,$00,$00,$00,$E0,$E0,$00,$00,$00,$00,$40,$00,$00 | |||
| BE20 | DEFB $00,$00,$00,$7C,$FE,$00,$00,$00,$00,$7C,$00,$00,$00,$00,$00,$00 | |||
| BE30 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| BE40 | DEFB $28,$00,$00,$00,$00,$28,$10,$00,$00,$00,$00,$38,$38,$00,$00,$00 | |||
| BE50 | DEFB $00,$38,$38,$00,$00,$00,$00,$38,$38,$00,$00,$00,$00,$10,$00,$00 | |||
| BE60 | DEFB $00,$00,$00,$1F,$3F,$80,$00,$00,$00,$1F,$00,$00,$00,$00,$00,$00 | |||
| BE70 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| BE80 | DEFB $0A,$00,$00,$00,$00,$0A,$04,$00,$00,$00,$00,$0E,$0E,$00,$00,$00 | |||
| BE90 | DEFB $00,$0E,$0E,$00,$00,$00,$00,$0E,$0E,$00,$00,$00,$00,$04,$00,$00 | |||
| BEA0 | DEFB $00,$00,$C0,$07,$0F,$E0,$00,$00,$C0,$07,$00,$00,$00,$00,$00,$00 | |||
| BEB0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| BEC0 | DEFB $02,$80,$00,$00,$80,$02,$01,$00,$00,$00,$80,$03,$03,$80,$00,$00 | |||
| BED0 | DEFB $80,$03,$03,$80,$00,$00,$80,$03,$03,$80,$00,$00,$00,$01,$00,$00 | |||
| BEE0 | DEFB $00,$00,$F0,$01,$03,$F8,$00,$00,$F0,$01,$00,$00,$00,$00,$00,$00 | |||
| BEF0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| BF00 | DEFB $40,$00,$00,$00,$00,$A0,$60,$00,$00,$00,$00,$18,$1C,$00,$00,$00 | |||
| BF10 | DEFB $00,$1E,$0F,$00,$00,$00,$00,$07,$03,$00,$00,$00,$00,$00,$3C,$00 | |||
| BF20 | DEFB $00,$00,$00,$FF,$FF,$00,$00,$00,$00,$FF,$3C,$00,$00,$00,$00,$00 | |||
| BF30 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| BF40 | DEFB $10,$00,$00,$00,$00,$28,$18,$00,$00,$00,$00,$06,$07,$00,$00,$00 | |||
| BF50 | DEFB $80,$07,$03,$C0,$00,$00,$C0,$01,$00,$C0,$00,$00,$00,$00,$0F,$00 | |||
| BF60 | DEFB $00,$00,$C0,$3F,$3F,$C0,$00,$00,$C0,$3F,$0F,$00,$00,$00,$00,$00 | |||
| BF70 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| BF80 | DEFB $04,$00,$00,$00,$00,$0A,$06,$00,$00,$00,$80,$01,$01,$C0,$00,$00 | |||
| BF90 | DEFB $E0,$01,$00,$F0,$00,$00,$70,$00,$00,$30,$00,$00,$00,$00,$03,$C0 | |||
| BFA0 | DEFB $00,$00,$F0,$0F,$0F,$F0,$00,$00,$F0,$0F,$03,$C0,$00,$00,$00,$00 | |||
| BFB0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| BFC0 | DEFB $01,$00,$00,$00,$80,$02,$01,$80,$00,$00,$60,$00,$00,$70,$00,$00 | |||
| BFD0 | DEFB $78,$00,$00,$3C,$00,$00,$1C,$00,$00,$0C,$00,$00,$00,$00,$00,$F0 | |||
| BFE0 | DEFB $00,$00,$FC,$03,$03,$FC,$00,$00,$FC,$03,$00,$F0,$00,$00,$00,$00 | |||
| BFF0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
|
|
||||
| C000 | DEFW $C350 | Sprite addr Cliff edge right; width 2 | ||
| C002 | DEFW $C318 | Sprite addr Cliff edge left; width 2 | ||
| C004 | DEFW $CB50 | Sprite addr Wall; width 4 | ||
| C006 | DEFW $CC18 | Sprite addr ??? | ||
| C008 | DEFW $CF38 | Sprite addr ??? | ||
| C00A | DEFW $CF78 | Sprite addr | ||
| C00C | DEFW $CFFC | Sprite addr | ||
| C00E | DEFW $D080 | Sprite addr | ||
| C010 | DEFW $D0C0 | Sprite addr | ||
| C012 | DEFW $D100 | Sprite addr | ||
| C014 | DEFW $D1A0 | Sprite addr | ||
| C016 | DEFW $D224 | Sprite addr | ||
| C018 | DEFW $D26C | Sprite addr | ||
| C01A | DEFW $D2D8 | Sprite addr | ||
| C01C | DEFW $D320 | Sprite addr | ||
| C01E | DEFW $D614 | Sprite addr | ||
| C020 | DEFW $D380 | Sprite addr | ||
| C022 | DEFW $0000 | ?? | ||
| C024 | DEFW $D644 | Sprite addr | ||
| C026 | DEFW $D944 | Sprite addr | ||
| C028 | DEFW $CA90 | Sprite addr ???; width ? | ||
| C02A | DEFW $CAC0 | Sprite addr ???; width ? | ||
| C02C | DEFW $CB20 | Sprite addr ???; width ? | ||
| C02E | DEFW $CA00 | Sprite addr Motorbike; width 6 | ||
| C030 | DEFW $C890 | Sprite addr Hut; width 6 | ||
| C032 | DEFW $C980 | Sprite addr Jeep; width 4 | ||
| C034 | DEFW $C508 | Sprite addr Cave, exit to the right; width 6 | ||
| C036 | DEFW $C5F8 | Sprite addr Cave, exit to the left; width 6 | ||
| C038 | DEFW $C6E8 | Sprite addr Cave top edge; width 6 | ||
| C03A | DEFW $C718 | Sprite addr Cave bottom edge; width 6 | ||
| C03C | DEFW $C748 | Sprite addr Truck; width 8 | ||
| C03E | DEFW $C848 | Sprite addr ???; width 2? | ||
| C040 | DEFW $C478 | Sprite addr Cliff top right; width 6 | ||
| C042 | DEFW $C2C4 | Sprite addr ???; width 2 | ||
| C044 | DEFW $C388 | Sprite addr Cliff bottom right; width 6 | ||
| C046 | DEFW $C1E0 | Sprite addr Cliff top left; width 6 | ||
| C048 | DEFW $C270 | Sprite addr ???; width 2 | ||
| C04A | DEFW $C0F0 | Sprite addr Cliff bottom left; width 6 | ||
| C04C | DEFW $C0A0 | Sprite addr ???; width 2 | ||
| C04E | DEFW $C050 | Sprite addr ???; width 2 | ||
|
|
||||
| C050 | DEFB $00,$7F,$00,$7F,$80,$7F,$80,$3F | |||
| C058 | DEFB $80,$3F,$C0,$1F,$C0,$5F,$E0,$AF | |||
| C060 | DEFB $A0,$4F,$50,$27,$B0,$17,$D8,$8B | |||
| C068 | DEFB $E8,$13,$74,$09,$EC,$55,$F6,$01 | |||
| C070 | DEFB $AA,$00,$FE,$FE,$FF,$7C,$01,$7E | |||
| C078 | DEFB $83,$54,$81,$2A,$AB,$09,$D5,$C4 | |||
| C080 | DEFB $F6,$EE,$3B,$EC,$11,$EE,$13,$C4 | |||
| C088 | DEFB $11,$00,$3B,$FD,$FF,$7D,$02,$FD | |||
| C090 | DEFB $82,$54,$05,$2A,$AB,$01,$D5,$FD | |||
| C098 | DEFB $FE,$55,$02,$01,$AA,$FF,$FE,$FF | |||
|
|
||||
| C0A0 | DEFB $00,$FF,$00,$FE,$00,$FE,$01,$FE | |||
| C0A8 | DEFB $01,$FD,$01,$FC,$02,$F9,$03,$FA | |||
| C0B0 | DEFB $06,$F4,$05,$F2,$0B,$E5,$0D,$EA | |||
| C0B8 | DEFB $1A,$D5,$15,$CA,$2A,$95,$35,$80 | |||
| C0C0 | DEFB $6A,$80,$7F,$80,$7F,$7E,$7F,$3F | |||
| C0C8 | DEFB $81,$5F,$C0,$3B,$A0,$55,$C4,$2A | |||
| C0D0 | DEFB $AA,$80,$D5,$3E,$7F,$7F,$C1,$3F | |||
| C0D8 | DEFB $80,$5F,$C0,$2A,$A0,$90,$D5,$80 | |||
| C0E0 | DEFB $6F,$7E,$7F,$3F,$81,$57,$C0,$2A | |||
| C0E8 | DEFB $A8,$00,$D5,$80,$FF,$FF,$7F,$FF | |||
|
|
||||
| C0F0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | ![]() |
||
| C0FC | DEFB $80,$30,$00,$00,$00,$00,$E8,$48,$00,$00,$04,$00 | |||
| C108 | DEFB $F6,$30,$C0,$04,$40,$08,$ED,$83,$80,$00,$28,$04 | |||
| C114 | DEFB $D7,$FF,$04,$00,$00,$00,$EF,$F3,$FE,$18,$01,$3F | |||
| C120 | DEFB $F7,$EF,$FF,$1F,$FF,$3F,$FF,$EF,$FF,$BF,$FE,$FF | |||
| C12C | DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF | |||
| C138 | DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF | |||
| C144 | DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF | |||
| C150 | DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF | |||
| C15C | DEFB $FF,$FB,$FF,$BF,$FF,$FF,$FF,$FF,$FF,$DF,$FF,$DF | |||
| C168 | DEFB $FF,$FF,$FF,$FF,$FF,$BF,$FF,$FF,$FF,$FF,$FF,$FF | |||
| C174 | DEFB $FD,$FF,$FF,$FF,$FF,$FF,$FA,$FF,$FF,$FF,$FF,$FF | |||
| C180 | DEFB $FD,$FF,$BF,$FF,$FF,$FF,$FB,$FF,$7F,$FF,$FF,$FF | |||
| C18C | DEFB $FF,$FE,$DF,$FF,$F3,$FF,$FF,$FE,$DF,$FF,$EB,$FF | |||
| C198 | DEFB $FF,$FF,$5F,$FF,$F6,$FF,$FF,$FF,$7F,$DF,$FF,$FF | |||
| C1A4 | DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$BF,$FE,$F7,$FF,$FF | |||
| C1B0 | DEFB $FF,$7F,$FD,$F7,$FF,$FF,$FE,$FF,$FD,$F7,$FF,$F7 | |||
| C1BC | DEFB $FC,$FF,$FD,$FB,$FF,$FB,$FD,$FF,$FD,$FB,$F7,$FB | |||
| C1C8 | DEFB $F9,$FF,$F9,$FD,$FF,$FD,$01,$FF,$F8,$03,$FD,$FC | |||
| C1D4 | DEFB $00,$3F,$80,$00,$FF,$FE,$00,$00,$00,$00,$1F,$FE | |||
|
|
||||
| C1E0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | ![]() |
||
| C1EC | DEFB $00,$00,$00,$00,$00,$0F,$00,$00,$00,$70,$00,$FF | |||
| C1F8 | DEFB $00,$00,$03,$FF,$07,$FF,$00,$00,$1F,$FF,$FF,$FF | |||
| C204 | DEFB $00,$00,$7F,$FF,$FF,$8F,$00,$00,$FF,$FF,$FF,$DF | |||
| C210 | DEFB $00,$01,$FF,$FF,$EF,$FF,$00,$00,$7F,$FF,$FB,$FF | |||
| C21C | DEFB $00,$67,$BF,$FF,$FF,$FF,$01,$FF,$EF,$FF,$FF,$FF | |||
| C228 | DEFB $03,$FF,$FF,$F5,$FF,$FF,$07,$FF,$FF,$FF,$FF,$DF | |||
| C234 | DEFB $0F,$BF,$FF,$FF,$FF,$F7,$1E,$FF,$B7,$FF,$FF,$FF | |||
| C240 | DEFB $7D,$FF,$FB,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF | |||
| C24C | DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF | |||
| C258 | DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF | |||
| C264 | DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF | |||
|
|
||||
| C270 | DEFB $00,$FE,$00,$FE,$01,$FE,$01,$FC | |||
| C278 | DEFB $01,$F8,$03,$F8,$07,$F8,$07,$FC | |||
| C280 | DEFB $07,$FC,$03,$FE,$03,$F8,$01,$F8 | |||
| C288 | DEFB $07,$F0,$07,$E0,$0F,$E0,$1F,$E4 | |||
| C290 | DEFB $1F,$E2,$1B,$E4,$1D,$C6,$1B,$C0 | |||
| C298 | DEFB $39,$E0,$3F,$E0,$1F,$E0,$1F,$F0 | |||
| C2A0 | DEFB $1F,$F0,$0F,$F0,$0F,$E0,$0F,$E0 | |||
| C2A8 | DEFB $1F,$C0,$1F,$C0,$3F,$80,$3F,$80 | |||
| C2B0 | DEFB $7F,$D0,$7F,$A8,$2F,$90,$57,$28 | |||
| C2B8 | DEFB $6F,$10,$D7,$86,$EF,$E0,$79,$F8 | |||
| C2C0 | DEFB $1F,$FF,$07,$FF | |||
|
|
||||
| C2C4 | DEFB $00,$7F,$00,$7F,$80,$7F,$80,$3F | |||
| C2CC | DEFB $80,$1F,$C0,$1F,$E0,$1F,$E0,$3F | |||
| C2D4 | DEFB $E0,$3F,$C0,$7F,$C0,$1F,$80,$1F | |||
| C2DC | DEFB $E0,$0F,$E0,$07,$F0,$07,$F8,$17 | |||
| C2E4 | DEFB $F8,$47,$D8,$27,$B8,$63,$D8,$03 | |||
| C2EC | DEFB $9C,$07,$FC,$07,$F8,$07,$F8,$0F | |||
| C2F4 | DEFB $F8,$0F,$F0,$0F,$F0,$07,$F0,$07 | |||
| C2FC | DEFB $F8,$03,$F8,$03,$FC,$01,$FC,$01 | |||
| C304 | DEFB $FE,$0B,$FE,$15,$F4,$09,$EA,$14 | |||
| C30C | DEFB $F6,$08,$EB,$61,$F7,$07,$9E,$1F | |||
| C314 | DEFB $F8,$FF,$E0,$FF | |||
|
|
||||
| C318 | DEFB $00,$00,$00,$00,$01,$00,$03,$00 | ![]() |
||
| C320 | DEFB $03,$00,$03,$00,$03,$00,$07,$00 | |||
| C328 | DEFB $05,$00,$07,$00,$07,$00,$07,$00 | |||
| C330 | DEFB $07,$00,$07,$00,$0F,$00,$0F,$00 | |||
| C338 | DEFB $0F,$00,$0F,$00,$1F,$00,$1F,$00 | |||
| C340 | DEFB $3F,$00,$3B,$00,$35,$00,$7B,$00 | |||
| C348 | DEFB $FF,$00,$3F,$00,$1F,$00,$07,$00 | |||
|
|
||||
| C350 | DEFB $00,$00,$00,$00,$80,$00,$C0,$00 | ![]() |
||
| C358 | DEFB $C0,$00,$C0,$00,$C0,$00,$E0,$00 | |||
| C360 | DEFB $A0,$00,$E0,$00,$E0,$00,$E0,$00 | |||
| C368 | DEFB $E0,$00,$E0,$00,$F0,$00,$F0,$00 | |||
| C370 | DEFB $F0,$00,$F0,$00,$F8,$00,$F8,$00 | |||
| C378 | DEFB $FC,$00,$DC,$00,$AC,$00,$DE,$00 | |||
| C380 | DEFB $FF,$00,$FC,$00,$F8,$00,$E0,$00 | |||
|
|
||||
| C388 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | ![]() |
||
| C394 | DEFB $00,$00,$00,$00,$0C,$01,$00,$20,$00,$00,$12,$17 | |||
| C3A0 | DEFB $10,$02,$20,$03,$0C,$6F,$20,$14,$00,$01,$C1,$B7 | |||
| C3AC | DEFB $00,$00,$00,$20,$FF,$EB,$FC,$80,$18,$7F,$CF,$F7 | |||
| C3B8 | DEFB $FC,$FF,$F8,$FF,$F7,$EF,$FF,$7F,$FD,$FF,$F7,$FF | |||
| C3C4 | DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF | |||
| C3D0 | DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF | |||
| C3DC | DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF | |||
| C3E8 | DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF | |||
| C3F4 | DEFB $FF,$FF,$FD,$FF,$DF,$FF,$FB,$FF,$FB,$FF,$FF,$FF | |||
| C400 | DEFB $FD,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF | |||
| C40C | DEFB $FF,$FF,$FF,$FF,$FF,$BF,$FF,$FF,$FF,$FF,$FF,$5F | |||
| C418 | DEFB $FF,$FF,$FF,$FD,$FF,$BF,$FF,$FF,$FF,$FE,$FF,$DF | |||
| C424 | DEFB $FF,$CF,$FF,$FB,$7F,$FF,$FF,$D7,$FF,$FB,$7F,$FF | |||
| C430 | DEFB $FF,$6F,$FF,$FA,$FF,$FF,$FF,$FF,$FB,$FE,$FF,$FF | |||
| C43C | DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$EF,$7F,$FD,$FF | |||
| C448 | DEFB $FF,$FF,$EF,$BF,$FE,$FF,$EF,$FF,$EF,$BF,$FF,$7F | |||
| C454 | DEFB $DF,$FF,$DF,$BF,$FF,$3F,$DF,$EF,$DF,$BF,$FF,$BF | |||
| C460 | DEFB $BF,$FF,$BF,$9F,$FF,$9F,$3F,$BF,$C0,$1F,$FF,$80 | |||
| C46C | DEFB $7F,$FF,$00,$01,$FC,$00,$7F,$F8,$00,$00,$00,$00 | |||
|
|
||||
| C478 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | ![]() |
||
| C484 | DEFB $F0,$00,$00,$00,$00,$00,$FF,$00,$0E,$00,$00,$00 | |||
| C490 | DEFB $FF,$E0,$FF,$C0,$00,$00,$FF,$FF,$FF,$F8,$00,$00 | |||
| C49C | DEFB $F1,$FF,$FF,$FE,$00,$00,$FB,$FF,$FF,$FF,$00,$00 | |||
| C4A8 | DEFB $FF,$F7,$FF,$FF,$80,$00,$FF,$DF,$FF,$FE,$00,$00 | |||
| C4B4 | DEFB $FF,$FF,$FF,$FD,$E6,$00,$FF,$FF,$FF,$F7,$FF,$80 | |||
| C4C0 | DEFB $FF,$FF,$AF,$FF,$FF,$C0,$FB,$FF,$FF,$FF,$FF,$E0 | |||
| C4CC | DEFB $EF,$FF,$FF,$FF,$FD,$F0,$FF,$FF,$FF,$ED,$FF,$78 | |||
| C4D8 | DEFB $FF,$FF,$FF,$DF,$FF,$BE,$FF,$FF,$FF,$FF,$FF,$FF | |||
| C4E4 | DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF | |||
| C4F0 | DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF | |||
| C4FC | DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF | |||
|
|
||||
| C508 | DEFB $55,$00,$BD,$A8,$41,$EC,$6A,$81,$46,$D0,$20,$7A | ![]() |
||
| C514 | DEFB $55,$02,$81,$E9,$B2,$36,$2A,$01,$83,$B0,$12,$1A | |||
| C520 | DEFB $35,$02,$87,$0C,$01,$04,$2A,$05,$6B,$03,$3C,$04 | |||
| C52C | DEFB $35,$02,$9E,$00,$FF,$02,$28,$06,$0B,$80,$7F,$82 | |||
| C538 | DEFB $54,$0A,$15,$D0,$FF,$C6,$68,$04,$0B,$68,$FF,$CE | |||
| C544 | DEFB $54,$0E,$06,$1D,$FF,$F4,$68,$05,$85,$47,$FF,$F8 | |||
| C550 | DEFB $50,$00,$66,$43,$FF,$E0,$A8,$01,$1D,$01,$FE,$80 | |||
| C55C | DEFB $D0,$00,$06,$81,$F5,$00,$A0,$08,$05,$C1,$EA,$00 | |||
| C568 | DEFB $D0,$1E,$02,$71,$D5,$00,$A0,$07,$06,$0D,$EA,$00 | |||
| C574 | DEFB $D0,$02,$E4,$13,$D4,$00,$A8,$05,$08,$21,$AA,$00 | |||
| C580 | DEFB $D0,$03,$0C,$00,$D4,$00,$A8,$04,$06,$20,$AA,$00 | |||
| C58C | DEFB $D0,$02,$07,$20,$D4,$00,$A0,$07,$03,$98,$6A,$00 | |||
| C598 | DEFB $D0,$00,$E7,$C1,$F5,$00,$A0,$00,$5E,$F7,$3A,$00 | |||
| C5A4 | DEFB $50,$00,$0C,$3C,$0D,$00,$68,$00,$14,$06,$0E,$80 | |||
| C5B0 | DEFB $54,$00,$0E,$03,$07,$00,$60,$00,$17,$03,$CD,$80 | |||
| C5BC | DEFB $50,$00,$0B,$80,$60,$C0,$A8,$00,$05,$57,$38,$40 | |||
| C5C8 | DEFB $D0,$02,$0A,$A2,$06,$20,$A0,$05,$55,$70,$01,$34 | |||
| C5D4 | DEFB $50,$1E,$AB,$98,$A0,$DA,$68,$03,$D6,$2D,$98,$2C | |||
| C5E0 | DEFB $D0,$44,$7D,$1F,$46,$06,$A8,$00,$92,$2F,$A1,$84 | |||
| C5EC | DEFB $54,$00,$20,$15,$D4,$58,$68,$00,$00,$2A,$BA,$34 | |||
|
|
||||
| C5F8 | DEFB $37,$82,$15,$BD,$00,$AA,$5E,$04,$0B,$62,$81,$56 | ![]() |
||
| C604 | DEFB $6C,$4D,$97,$81,$40,$AA,$58,$48,$0D,$C1,$80,$54 | |||
| C610 | DEFB $20,$80,$30,$E1,$40,$AC,$20,$3C,$C0,$D6,$A0,$54 | |||
| C61C | DEFB $40,$FF,$00,$79,$40,$AC,$41,$FE,$01,$D0,$60,$14 | |||
| C628 | DEFB $63,$FF,$0B,$A8,$50,$2A,$73,$FF,$16,$D0,$20,$16 | |||
| C634 | DEFB $2F,$FF,$B8,$60,$70,$2A,$1F,$FF,$E2,$A1,$A0,$16 | |||
| C640 | DEFB $07,$FF,$C2,$66,$00,$0A,$01,$7F,$80,$B8,$80,$15 | |||
| C64C | DEFB $00,$AF,$81,$60,$00,$0B,$00,$57,$83,$A0,$10,$05 | |||
| C658 | DEFB $00,$AB,$8E,$40,$78,$0B,$00,$57,$B0,$60,$E0,$05 | |||
| C664 | DEFB $00,$2B,$C8,$27,$40,$0B,$00,$55,$84,$10,$A0,$15 | |||
| C670 | DEFB $00,$2B,$00,$30,$C0,$0B,$00,$55,$04,$60,$20,$15 | |||
| C67C | DEFB $00,$2B,$04,$E0,$40,$0B,$00,$56,$19,$C0,$E0,$05 | |||
| C688 | DEFB $00,$AF,$83,$E7,$00,$0B,$00,$5C,$EF,$7A,$00,$05 | |||
| C694 | DEFB $00,$B0,$3C,$30,$00,$0A,$01,$70,$60,$28,$00,$16 | |||
| C6A0 | DEFB $00,$E0,$C0,$70,$00,$2A,$01,$B3,$C0,$E8,$00,$06 | |||
| C6AC | DEFB $03,$06,$01,$D0,$00,$0A,$02,$1C,$EA,$A0,$00,$15 | |||
| C6B8 | DEFB $04,$60,$45,$50,$40,$0B,$2C,$80,$0E,$AA,$A0,$05 | |||
| C6C4 | DEFB $5B,$05,$19,$D5,$78,$0A,$34,$19,$B4,$6B,$C0,$16 | |||
| C6D0 | DEFB $60,$62,$F8,$BE,$22,$0B,$21,$85,$F4,$49,$00,$15 | |||
| C6DC | DEFB $1A,$2B,$A8,$04,$00,$2A,$2C,$5D,$54,$00,$00,$16 | |||
|
|
||||
| C6E8 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | ![]() |
||
| C6F4 | DEFB $0F,$F8,$07,$FC,$0F,$F8,$3A,$AF,$FE,$AB,$FA,$AE | |||
| C700 | DEFB $55,$55,$55,$05,$55,$55,$68,$00,$00,$00,$00,$01 | |||
| C70C | DEFB $54,$00,$21,$54,$00,$0A,$6A,$64,$CA,$AB,$26,$56 | |||
|
|
||||
| C718 | DEFB $30,$80,$00,$00,$00,$2A,$30,$00,$00,$00,$00,$15 | ![]() |
||
| C724 | DEFB $25,$00,$04,$00,$2A,$AB,$6A,$B5,$7A,$A0,$F5,$57 | |||
| C730 | DEFB $77,$EB,$C7,$F3,$0E,$BA,$3C,$1E,$01,$9C,$03,$CC | |||
| C73C | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
|
|
||||
| C748 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | |||
| C758 | DEFB $00,$00,$D0,$01,$40,$29,$10,$44,$07,$00,$AF,$F9,$FA,$50,$A8,$8E | |||
| C768 | DEFB $08,$00,$DE,$05,$75,$A9,$08,$47,$18,$00,$AF,$07,$EA,$54,$88,$22 | |||
| C778 | DEFB $18,$00,$CE,$05,$75,$80,$14,$07,$18,$00,$A5,$07,$E8,$04,$AC,$23 | |||
| C788 | DEFB $28,$00,$CE,$05,$74,$80,$14,$07,$28,$00,$E5,$07,$38,$02,$AC,$23 | |||
| C798 | DEFB $28,$00,$CA,$05,$75,$80,$D2,$11,$28,$00,$E5,$07,$2A,$42,$EA,$83 | |||
| C7A8 | DEFB $48,$00,$EA,$05,$55,$80,$52,$11,$68,$00,$FC,$07,$80,$03,$02,$0E | |||
| C7B8 | DEFB $D7,$00,$EF,$FF,$E0,$04,$84,$31,$B0,$00,$DF,$07,$7F,$FC,$FE,$E3 | |||
| C7C8 | DEFB $D7,$00,$CF,$B5,$FF,$F8,$FE,$F1,$AF,$00,$DF,$B7,$7F,$FC,$FE,$E3 | |||
| C7D8 | DEFB $EF,$00,$CF,$75,$FF,$F8,$FE,$F1,$DF,$00,$D7,$72,$7F,$F4,$FE,$E3 | |||
| C7E8 | DEFB $C0,$00,$CF,$03,$FF,$F8,$FE,$D1,$C0,$00,$D7,$02,$7F,$F4,$FE,$E3 | |||
| C7F8 | DEFB $C0,$00,$CF,$03,$FF,$F8,$FE,$D1,$4A,$00,$D7,$AA,$7F,$FC,$FE,$E3 | |||
| C808 | DEFB $57,$00,$CF,$F5,$FF,$F8,$FE,$F1,$78,$00,$DF,$0E,$7F,$FC,$FE,$EB | |||
| C818 | DEFB $20,$00,$FF,$07,$FF,$FF,$FC,$FF,$27,$00,$AA,$FA,$AA,$AA,$AA,$AA | |||
| C828 | DEFB $2F,$00,$00,$FF,$00,$00,$02,$00,$16,$00,$FF,$31,$FF,$FF,$FC,$FF | |||
| C838 | DEFB $07,$00,$00,$70,$73,$E0,$E0,$9C,$03,$00,$00,$E0,$3F,$00,$C0,$0F | |||
|
|
||||
| C848 | DEFB $00,$E7,$00,$FF,$00,$FF,$00,$C3 | |||
| C850 | DEFB $18,$81,$00,$C3,$00,$FF,$3C,$00 | |||
| C858 | DEFB $7E,$00,$00,$7F,$00,$3F,$FF,$80 | |||
| C860 | DEFB $FF,$C0,$80,$1F,$C0,$0F,$7F,$E0 | |||
| C868 | DEFB $3F,$F0,$E0,$07,$F0,$03,$1F,$F8 | |||
| C870 | DEFB $0F,$FC,$F8,$01,$FC,$00,$07,$FE | |||
| C878 | DEFB $03,$FF,$FE,$00,$FF,$81,$01,$FF | |||
| C880 | DEFB $00,$FF,$FF,$C3,$7E,$E7,$00,$FF | |||
| C888 | DEFB $00,$FF,$3C,$FF,$18,$FF,$00,$FF | |||
|
|
||||
| C890 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | ![]() |
||
| C89C | DEFB $FF,$C0,$00,$00,$1F,$FF,$20,$3F,$FF,$FF,$F9,$D0 | |||
| C8A8 | DEFB $34,$6A,$AA,$AA,$AB,$A0,$6A,$F9,$99,$99,$99,$40 | |||
| C8B4 | DEFB $FF,$CA,$AA,$AA,$AB,$84,$FF,$F9,$99,$99,$99,$AA | |||
| C8C0 | DEFB $8C,$0E,$AA,$AA,$AB,$D5,$06,$03,$99,$99,$99,$EB | |||
| C8CC | DEFB $A3,$86,$AA,$AA,$AA,$7F,$D5,$45,$99,$99,$99,$01 | |||
| C8D8 | DEFB $FF,$AE,$AA,$AA,$AA,$82,$FF,$59,$99,$99,$99,$D5 | |||
| C8E4 | DEFB $AB,$BA,$AA,$AA,$AA,$EB,$54,$F5,$55,$55,$55,$7F | |||
| C8F0 | DEFB $AA,$AA,$AA,$AA,$AA,$AA,$FF,$FF,$FF,$FF,$FF,$FF | |||
| C8FC | DEFB $FF,$FF,$FF,$FF,$FF,$FF,$F7,$FF,$FF,$FF,$FC,$0F | |||
| C908 | DEFB $E2,$FF,$80,$00,$F8,$03,$C2,$FF,$7F,$FF,$F8,$01 | |||
| C914 | DEFB $6B,$7F,$7F,$FE,$F8,$AA,$D5,$7F,$7F,$FE,$FD,$55 | |||
| C920 | DEFB $7F,$DF,$7F,$FE,$FF,$FF,$7F,$EF,$7F,$FE,$C1,$E0 | |||
| C92C | DEFB $C0,$37,$7F,$FE,$80,$C0,$A0,$1F,$7F,$FE,$80,$62 | |||
| C938 | DEFB $D4,$1F,$7F,$FE,$D5,$D5,$AA,$9F,$7F,$FE,$AB,$6A | |||
| C944 | DEFB $D5,$5F,$7F,$FE,$D5,$FF,$EA,$BF,$7F,$FE,$FF,$C2 | |||
| C950 | DEFB $7F,$FF,$7F,$FE,$F8,$15,$70,$5F,$7F,$FE,$F0,$AB | |||
| C95C | DEFB $E0,$2F,$7F,$FE,$F1,$55,$D0,$2F,$7F,$FE,$F8,$AB | |||
| C968 | DEFB $EA,$2F,$7F,$FE,$FF,$FE,$D5,$2F,$7F,$FE,$FC,$01 | |||
| C974 | DEFB $EA,$DF,$7F,$FE,$FC,$02,$FF,$FF,$FF,$FF,$FF,$D5 | |||
|
|
||||
| C980 | DEFB $7F,$FF,$FF,$FE,$43,$AA,$AA,$C2 | ![]() |
||
| C988 | DEFB $47,$FF,$FF,$E2,$3F,$FF,$FF,$FC | |||
| C990 | DEFB $6F,$F8,$00,$06,$4C,$9F,$FF,$F2 | |||
| C998 | DEFB $59,$E5,$55,$7A,$5B,$F6,$BE,$BA | |||
| C9A0 | DEFB $57,$3B,$FF,$DE,$66,$FB,$FF,$FA | |||
| C9A8 | DEFB $63,$F3,$FF,$FE,$61,$E3,$FF,$FA | |||
| C9B0 | DEFB $40,$03,$F9,$F6,$77,$F7,$B7,$D2 | |||
| C9B8 | DEFB $5A,$AF,$3F,$CE,$5F,$FF,$10,$8A | |||
| C9C0 | DEFB $98,$0F,$10,$85,$BC,$1F,$1D,$45 | |||
| C9C8 | DEFB $BF,$FF,$1E,$25,$B0,$01,$8E,$45 | |||
| C9D0 | DEFB $9F,$FF,$CF,$09,$C0,$00,$7E,$92 | |||
| C9D8 | DEFB $D5,$55,$57,$75,$AA,$AA,$AE,$AB | |||
| C9E0 | DEFB $D5,$55,$57,$56,$BF,$FF,$FF,$FD | |||
| C9E8 | DEFB $C0,$00,$03,$03,$7F,$FF,$FF,$FE | |||
| C9F0 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| C9F8 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
|
|
||||
| CA00 | DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | ![]() |
||
| CA0C | DEFB $00,$00,$38,$00,$00,$00,$00,$00,$44,$00,$00,$00 | |||
| CA18 | DEFB $00,$00,$82,$00,$00,$00,$00,$00,$82,$00,$00,$00 | |||
| CA24 | DEFB $00,$03,$BF,$00,$00,$00,$00,$05,$46,$80,$00,$00 | |||
| CA30 | DEFB $00,$09,$3F,$C0,$00,$00,$00,$1A,$20,$A0,$00,$00 | |||
| CA3C | DEFB $00,$2E,$19,$D1,$C0,$00,$00,$27,$87,$BA,$00,$00 | |||
| CA48 | DEFB $01,$E1,$E2,$6B,$C0,$00,$07,$50,$5D,$FF,$F0,$00 | |||
| CA54 | DEFB $0D,$F8,$3F,$DD,$D8,$00,$19,$06,$1F,$B6,$0C,$00 | |||
| CA60 | DEFB $13,$FF,$1F,$A3,$E4,$00,$37,$56,$3F,$6F,$76,$00 | |||
| CA6C | DEFB $2D,$AC,$7C,$59,$9E,$00,$1D,$FE,$60,$38,$9C,$00 | |||
| CA78 | DEFB $1C,$0F,$80,$38,$1C,$00,$0F,$3D,$C0,$1E,$78,$00 | |||
| CA84 | DEFB $07,$F8,$00,$0F,$F0,$00,$01,$E0,$00,$03,$C0,$00 | |||
|
|
||||
| CA90 | DEFB $00,$FF,$00,$37,$00,$80,$00,$FC | |||
| CA98 | DEFB $00,$C3,$C8,$07,$7F,$1F,$03,$F0 | |||
| CAA0 | DEFB $3C,$F0,$F8,$7F,$E0,$BF,$0F,$C8 | |||
| CAA8 | DEFB $0F,$10,$80,$55,$40,$00,$37,$88 | |||
| CAB0 | DEFB $EF,$E4,$AA,$00,$FF,$3C,$77,$F8 | |||
| CAB8 | DEFB $1B,$79,$FF,$79,$C3,$78,$07,$78 | |||
|
|
||||
| CAC0 | DEFB $00,$7E,$00,$1E,$00,$7E,$00,$1E | |||
| CAC8 | DEFB $00,$E1,$00,$71,$00,$E1,$00,$71 | |||
| CAD0 | DEFB $81,$8F,$E1,$FF,$81,$8F,$E1,$FF | |||
| CAD8 | DEFB $1E,$FF,$8E,$FF,$1E,$FF,$8E,$FF | |||
| CAE0 | DEFB $70,$FF,$00,$FF,$70,$FF,$00,$FF | |||
| CAE8 | DEFB $00,$AA,$00,$AA,$00,$AA,$00,$AA | |||
| CAF0 | DEFB $00,$50,$00,$05,$00,$50,$00,$05 | |||
| CAF8 | DEFB $55,$00,$55,$00,$55,$00,$55,$00 | |||
| CB00 | DEFB $AF,$03,$FA,$E0,$AF,$03,$FA,$E0 | |||
| CB08 | DEFB $FF,$FE,$FF,$7F,$FF,$FE,$FF,$7F | |||
| CB10 | DEFB $FC,$FD,$1F,$7A,$FC,$19,$1F,$11 | |||
| CB18 | DEFB $01,$0E,$80,$9D,$01,$02,$80,$DF | |||
|
|
||||
| CB20 | DEFB $00,$EC,$00,$FF,$00,$3F,$00,$01 | |||
| CB28 | DEFB $13,$E0,$00,$C3,$C0,$0F,$FE,$F8 | |||
| CB30 | DEFB $1F,$FE,$3C,$0F,$F0,$13,$07,$FD | |||
| CB38 | DEFB $01,$AA,$F0,$08,$EC,$11,$02,$00 | |||
| CB40 | DEFB $55,$00,$F7,$27,$EE,$1F,$FF,$3C | |||
| CB48 | DEFB $FF,$02,$D8,$FA,$E0,$84,$C3,$D7 | |||
|
|
||||
| CB50 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | ![]() |
||
| CB58 | DEFB $7F,$FE,$7F,$FE,$FF,$FF,$FF,$FF | |||
| CB60 | DEFB $FF,$FF,$FF,$FF,$7F,$FF,$7F,$FF | |||
| CB68 | DEFB $FF,$FF,$FF,$FF,$AA,$AA,$AA,$AA | |||
| CB70 | DEFB $7F,$FE,$7F,$FE,$6F,$FE,$6F,$FE | |||
| CB78 | DEFB $57,$FE,$55,$FE,$EB,$FE,$EB,$FE | |||
| CB80 | DEFB $D7,$FE,$D5,$FE,$AB,$FE,$AA,$FE | |||
| CB88 | DEFB $D5,$7E,$D5,$7E,$6A,$AE,$6A,$AE | |||
| CB90 | DEFB $75,$56,$F5,$56,$3F,$F9,$BF,$FB | |||
| CB98 | DEFB $01,$80,$03,$80,$F7,$BF,$F7,$BF | |||
| CBA0 | DEFB $FC,$EA,$FC,$EA,$FE,$D7,$FE,$D7 | |||
| CBA8 | DEFB $FE,$AB,$FE,$AB,$FE,$D5,$FE,$D5 | |||
| CBB0 | DEFB $BE,$AA,$BE,$AA,$56,$55,$56,$55 | |||
| CBB8 | DEFB $AF,$6A,$AE,$EA,$FD,$B7,$FD,$B7 | |||
| CBC0 | DEFB $00,$00,$00,$00,$7F,$F7,$7F,$F7 | |||
| CBC8 | DEFB $AB,$FC,$AB,$FC,$57,$FD,$57,$FD | |||
| CBD0 | DEFB $AA,$FD,$AA,$FD,$55,$5D,$55,$5D | |||
| CBD8 | DEFB $AA,$B9,$AA,$B9,$FF,$F6,$FF,$F6 | |||
| CBE0 | DEFB $00,$00,$00,$00,$FB,$7F,$FB,$7F | |||
| CBE8 | DEFB $FC,$AF,$FC,$AF,$FD,$55,$FD,$55 | |||
| CBF0 | DEFB $BD,$AA,$BD,$AA,$F9,$7F,$F9,$7F | |||
| CBF8 | DEFB $00,$00,$00,$00,$7F,$FD,$7F,$FC | |||
| CC00 | DEFB $55,$FE,$55,$FE,$AA,$AE,$AA,$AE | |||
| CC08 | DEFB $7F,$FC,$7F,$FC,$00,$00,$00,$00 | |||
| CC10 | DEFB $F8,$7F,$F8,$7F,$FE,$AA,$FE,$AA | |||
|
|
||||
| CC18 | DEFB $00,$80,$00,$01,$00,$80,$00,$01 | |||
| CC20 | DEFB $00,$80,$00,$01,$00,$80,$00,$01 | |||
| CC28 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| CC30 | DEFB $00,$00,$00,$00,$00,$00,$00,$00 | |||
| CC38 | DEFB $7F,$00,$FE,$00,$7F,$00,$FE,$00 | |||
| CC40 | DEFB $7F,$00,$FE,$00,$7F,$00,$FE,$00 | |||
| CC48 | DEFB $FF,$00,$FF,$80,$FF,$00,$FF,$80 | |||
| CC50 | DEFB $FF,$00,$FF,$80,$FF,$00,$FF,$80 | |||
| CC58 | DEFB $FF,$00,$FF,$00,$FF,$00,$FF,$00 | |||
| CC60 | DEFB $FF,$00,$FF,$00,$FF,$00,$FF,$00 | |||
| CC68 | DEFB $FF,$55,$7F,$55,$FF,$55,$7F,$55 | |||
| CC70 | DEFB $FF,$55,$7F,$55,$FF,$55,$7F,$55 | |||
| CC78 | DEFB $FF,$80,$FF,$01,$FF,$80,$FF,$01 | |||
| CC80 | DEFB $FF,$00,$FF,$01,$FF,$80,$FF,$01 | |||
| CC88 | DEFB $AA,$01,$AA,$90,$AA,$01,$AA,$50 | |||
| CC90 | DEFB $AA,$01,$AA,$90,$AA,$01,$AA,$90 | |||
| CC98 | DEFB $7F,$AA,$FE,$01,$7F,$AA,$FE,$01 | |||
| CCA0 | DEFB $FF,$AA,$FE,$01,$7F,$A8,$FE,$01 | |||
| CCA8 | DEFB $FE,$01,$6F,$14,$FE,$01,$AF,$FE | |||
| CCB0 | DEFB $FE,$7F,$6F,$00,$FE,$01,$6F,$14 | |||
| CCB8 | DEFB $55,$2A,$FE,$00,$55,$7F,$FE,$80 | |||
| CCC0 | DEFB $55,$01,$FE,$FE,$57,$28,$FE,$01 | |||
| CCC8 | DEFB $FE,$01,$EB,$F4,$FE,$01,$01,$F8 | |||
| CCD0 | DEFB $80,$02,$FF,$80,$FE,$07,$EB,$55 | |||
| CCD8 | DEFB $D5,$2A,$FF,$98,$80,$17,$7F,$95 | |||
| CCE0 | DEFB $FE,$F1,$01,$50,$D7,$1A,$FE,$81 | |||
| CCE8 | DEFB $FE,$51,$0B,$C7,$FE,$BC,$07,$F2 | |||
| CCF0 | DEFB $FD,$EA,$7F,$0B,$F8,$63,$AA,$95 | |||
| CCF8 | DEFB $D5,$0A,$67,$8F,$E8,$97,$6A,$E5 | |||
| CD00 | DEFB $0E,$55,$AF,$7D,$E5,$F1,$7E,$A9 | |||
| CD08 | DEFB $AE,$86,$38,$F8,$43,$AC,$0D,$A2 | |||
| CD10 | DEFB $15,$C2,$F4,$AA,$9C,$17,$6A,$41 | |||
| CD18 | DEFB $F5,$FA,$70,$6B,$68,$95,$1A,$05 | |||
| CD20 | DEFB $AA,$41,$82,$51,$0E,$5E,$56,$5F | |||
| CD28 | DEFB $79,$20,$07,$A8,$53,$00,$5D,$10 | |||
| CD30 | DEFB $3D,$08,$55,$00,$E8,$15,$BE,$04 | |||
| CD38 | DEFB $05,$09,$94,$AA,$6A,$01,$FA,$55 | |||
| CD40 | DEFB $BE,$55,$AE,$40,$A1,$55,$A0,$90 | |||
| CD48 | DEFB $DF,$D0,$57,$09,$FF,$A8,$EF,$AA | |||
| CD50 | DEFB $F7,$AA,$FF,$2A,$EA,$90,$FB,$0B | |||
| CD58 | DEFB $F6,$13,$55,$C1,$FE,$55,$AA,$55 | |||
| CD60 | DEFB $AA,$55,$BF,$55,$AA,$03,$6F,$C8 | |||
| CD68 | DEFB $2F,$F4,$F6,$84,$57,$AA,$55,$AA | |||
| CD70 | DEFB $55,$AA,$D5,$AA,$6F,$E2,$F4,$25 | |||
| CD78 | DEFB $EC,$2A,$3E,$C1,$AA,$55,$AA,$55 | |||
| CD80 | DEFB $AA,$55,$AA,$55,$FC,$41,$37,$54 | |||
| CD88 | DEFB $0B,$A2,$7B,$80,$55,$AA,$55,$AA | |||
| CD90 | DEFB $55,$AA,$55,$AA,$1D,$02,$DA,$C5 | |||
| CD98 | DEFB $D5,$42,$3E,$81,$AA,$55,$AA,$55 | |||
| CDA0 | DEFB $AA,$55,$AA,$55,$BE,$41,$AB,$42 | |||
| CDA8 | DEFB $5D,$02,$7F,$A0,$55,$AA,$55,$AA | |||
| CDB0 | DEFB $55,$AA,$55,$AA,$FD,$02,$3A,$B0 | |||
| CDB8 | DEFB $BD,$BC,$7E,$05,$AA,$55,$AA,$55 | |||
| CDC0 | DEFB $AA,$55,$AA,$55,$BE,$40,$BD,$19 | |||
| CDC8 | DEFB $FD,$15,$5F,$A0,$55,$AA,$55,$AA | |||
| CDD0 | DEFB $55,$AA,$55,$AA,$FD,$02,$4F,$BE | |||
| CDD8 | DEFB $43,$5C,$FA,$05,$AA,$55,$AA,$57 | |||
| CDE0 | DEFB $AA,$57,$AA,$55,$BF,$40,$E6,$2E | |||
| CDE8 | DEFB $EA,$16,$5F,$A0,$55,$AA,$55,$AA | |||
| CDF0 | DEFB $55,$AA,$55,$AA,$FD,$02,$41,$28 | |||
| CDF8 | DEFB $A3,$54,$FA,$05,$AA,$D5,$A8,$55 | |||
| CE00 | DEFB $A8,$55,$AA,$5D,$BF,$40,$D1,$2A | |||
| CE08 | DEFB $E9,$14,$5F,$A0,$55,$AA,$55,$AA | |||
| CE10 | DEFB $55,$AE,$55,$AE,$FD,$02,$D7,$28 | |||
| CE18 | DEFB $AB,$00,$FA,$05,$2A,$5D,$AA,$D5 | |||
| CE20 | DEFB $AA,$77,$A2,$55,$BF,$40,$D5,$00 | |||
| CE28 | DEFB $EB,$0C,$5F,$A0,$55,$BE,$55,$AA | |||
| CE30 | DEFB $51,$BA,$51,$AA,$FD,$03,$D7,$30 | |||
| CE38 | DEFB $FF,$7C,$FA,$05,$A2,$D7,$2A,$D5 | |||
| CE40 | DEFB $88,$F5,$AA,$75,$BF,$50,$FF,$2E | |||
| CE48 | DEFB $F3,$14,$5F,$A0,$41,$BA,$55,$AF | |||
| CE50 | DEFB $45,$AF,$55,$EB,$FC,$0A,$CF,$28 | |||
| CE58 | DEFB $83,$94,$FA,$07,$28,$5D,$2A,$F5 | |||
| CE60 | DEFB $0A,$D7,$8A,$5F,$AF,$50,$D1,$29 | |||
| CE68 | DEFB $EB,$15,$5F,$E0,$45,$EF,$50,$AE | |||
| CE70 | DEFB $50,$BE,$14,$EA,$F5,$0A,$D7,$A8 | |||
| CE78 | DEFB $6B,$90,$F8,$07,$A2,$55,$0A,$D7 | |||
| CE80 | DEFB $28,$FF,$A0,$5F,$AF,$50,$D6,$09 | |||
| CE88 | DEFB $EA,$21,$1F,$E0,$10,$EE,$51,$FE | |||
| CE90 | DEFB $41,$FF,$15,$BE,$F5,$0B,$57,$86 | |||
| CE98 | DEFB $6F,$5C,$F8,$07,$AA,$5F,$28,$FF | |||
| CEA0 | DEFB $00,$FF,$A0,$FD,$AF,$70,$F6,$32 | |||
| CEA8 | DEFB $DE,$5A,$1F,$A0,$11,$FE,$01,$FF | |||
| CEB0 | DEFB $00,$FF,$41,$EF,$F4,$0A,$79,$4A | |||
| CEB8 | DEFB $A3,$44,$F8,$17,$A0,$FF,$00,$FF | |||
| CEC0 | DEFB $00,$FF,$02,$FF,$8F,$D0,$CD,$22 | |||
| CEC8 | DEFB $A5,$14,$5F,$A8,$01,$FF,$00,$FF | |||
| CED0 | DEFB $00,$FF,$10,$FF,$F5,$0A,$B5,$28 | |||
| CED8 | DEFB $BB,$21,$E8,$1F,$00,$FF,$00,$FF | |||
| CEE0 | DEFB $00,$FF,$00,$FF,$2F,$F8,$DD,$84 | |||
| CEE8 | DEFB $EB,$4B,$57,$E9,$00,$FF,$00,$FF | |||
| CEF0 | DEFB $00,$FF,$00,$FF,$F5,$8F,$D7,$D2 | |||
| CEF8 | DEFB $DE,$15,$E0,$9F,$00,$FF,$00,$FF | |||
| CF00 | DEFB $00,$FF,$00,$FF,$07,$F8,$7B,$A8 | |||
| CF08 | DEFB $B4,$10,$16,$FC,$00,$FF,$00,$FF | |||
| CF10 | DEFB $00,$FF,$00,$FF,$70,$3F,$2D,$08 | |||
| CF18 | DEFB $EA,$FF,$60,$FF,$00,$FF,$00,$FE | |||
| CF20 | DEFB $00,$F9,$00,$E7,$07,$9F,$57,$9F | |||
| CF28 | DEFB $EF,$FF,$03,$F9,$00,$F2,$00,$E1 | |||
| CF30 | DEFB $00,$C2,$00,$81,$C0,$86,$F7,$8F | |||
|
|
||||
| CF38 | DEFB $00,$FF,$00,$9F,$00,$6F,$00,$FE | |||
| CF40 | DEFB $00,$F9,$60,$F7,$90,$FB,$01,$E7 | |||
| CF48 | DEFB $06,$9F,$08,$F9,$04,$E1,$18,$9F | |||
| CF50 | DEFB $60,$8F,$06,$95,$1E,$29,$60,$86 | |||
| CF58 | DEFB $70,$81,$6A,$51,$D6,$A7,$79,$C2 | |||
| CF60 | DEFB $7E,$E1,$AE,$1F,$58,$7F,$3D,$F2 | |||
| CF68 | DEFB $1E,$F9,$E0,$FF,$80,$FF,$0D,$FF | |||
| CF70 | DEFB $06,$FF,$00,$FF,$00,$FF,$00,$FF | |||
|
|
||||
| CF78 | DEFB $00,$FF,$00,$F3,$00,$FF,$00,$CF | |||
| CF80 | DEFB $00,$CD,$00,$FF,$00,$FF,$0C,$3E | |||
| CF88 | DEFB $00,$B7,$30,$7B,$32,$FF,$00,$FC | |||
| CF90 | DEFB $00,$F3,$C1,$FF,$48,$3D,$84,$3C | |||
| CF98 | DEFB $00,$FC,$03,$F3,$0C,$F1,$00,$F2 | |||
| CFA0 | DEFB $C2,$B2,$C3,$04,$03,$C5,$0C,$F0 | |||
| CFA8 | DEFB $0E,$F0,$0D,$2A,$4D,$2A,$FB,$54 | |||
| CFB0 | DEFB $3A,$54,$0F,$C8,$0F,$3C,$D5,$20 | |||
| CFB8 | DEFB $D5,$A3,$AB,$4F,$AB,$44,$37,$3E | |||
| CFC0 | DEFB $C3,$1F,$DF,$28,$5C,$3F,$B0,$FF | |||
| CFC8 | DEFB $BB,$54,$C1,$0C,$E0,$02,$D7,$A3 | |||
| CFD0 | DEFB $C0,$FF,$00,$FF,$AB,$4F,$F3,$85 | |||
| CFD8 | DEFB $FD,$C2,$5C,$3F,$00,$FF,$00,$FF | |||
| CFE0 | DEFB $B0,$FF,$7A,$E4,$3D,$F3,$C0,$FF | |||
| CFE8 | DEFB $00,$FF,$00,$FF,$00,$FF,$1B,$FF | |||
| CFF0 | DEFB $0C,$FF,$00,$FF,$00,$FF,$00,$F3 | |||
| CFF8 | DEFB $00,$FF,$00,$FF | |||
|
|
||||
| CFFC | DEFB $00,$FF,$00,$FC,$00,$FF,$00,$7F | |||
| D004 | DEFB $00,$F3,$00,$FF,$00,$FF,$03,$CF | |||
| D00C | DEFB $00,$8F,$80,$D7,$0C,$3F,$00,$FF | |||
| D014 | DEFB $00,$FC,$30,$DF,$70,$CB,$28,$0D | |||
| D01C | DEFB $C0,$EF,$00,$F3,$03,$CF,$20,$F4 | |||
| D024 | DEFB $34,$AC,$F2,$42,$10,$F1,$0C,$CF | |||
| D02C | DEFB $30,$C7,$0B,$CA,$53,$84,$BD,$2A | |||
| D034 | DEFB $0E,$11,$30,$C3,$38,$C0,$35,$A8 | |||
| D03C | DEFB $7B,$14,$D5,$A3,$EE,$52,$3C,$21 | |||
| D044 | DEFB $3F,$30,$57,$85,$EB,$0F,$5C,$3F | |||
| D04C | DEFB $AD,$2A,$DE,$19,$CF,$0C,$7A,$44 | |||
| D054 | DEFB $F0,$FF,$C0,$FF,$D5,$A3,$E6,$02 | |||
| D05C | DEFB $F3,$85,$BB,$4F,$00,$FF,$00,$FF | |||
| D064 | DEFB $5C,$3F,$FD,$C2,$7A,$E4,$B0,$FF | |||
| D06C | DEFB $00,$FF,$00,$FF,$C0,$FF,$3D,$F3 | |||
| D074 | DEFB $1B,$FF,$00,$FF,$00,$FF,$00,$FF | |||
| D07C | DEFB $00,$FF,$0C,$FF | |||
|
|
||||
| D080 | DEFB $00,$FF,$00,$F3,$00,$ED,$00,$FF | |||
| D088 | DEFB $00,$FF,$0C,$CE,$12,$A6,$00,$FF | |||
| D090 | DEFB $00,$FF,$31,$46,$59,$81,$00,$FE | |||
| D098 | DEFB $00,$FD,$B9,$03,$7E,$0F,$01,$FA | |||
| D0A0 | DEFB $02,$F4,$FC,$0F,$F0,$57,$05,$E8 | |||
| D0A8 | DEFB $0B,$D0,$F0,$B7,$A8,$BB,$17,$43 | |||
| D0B0 | DEFB $2F,$25,$48,$71,$44,$3F,$BC,$C2 | |||
| D0B8 | DEFB $DA,$FF,$8E,$FF,$C0,$B7,$3D,$CF | |||
|
|
||||
| D0C0 | DEFB $00,$CF,$00,$FF,$00,$FF,$00,$B7 | |||
| D0C8 | DEFB $30,$73,$00,$FF,$00,$FF,$48,$65 | |||
| D0D0 | DEFB $8C,$62,$00,$FF,$00,$7F,$9A,$81 | |||
| D0D8 | DEFB $9D,$C0,$00,$BF,$80,$5F,$7E,$F0 | |||
| D0E0 | DEFB $3F,$F0,$40,$2F,$A0,$17,$0F,$EA | |||
| D0E8 | DEFB $0F,$ED,$D0,$0B,$E8,$C2,$15,$DD | |||
| D0F0 | DEFB $12,$8E,$F4,$A4,$3D,$43,$22,$FC | |||
| D0F8 | DEFB $71,$FF,$5B,$FF,$BC,$FF,$03,$FF | |||
|
|
||||
| D100 | DEFB $00,$83,$00,$79,$7C,$3D,$86,$41 | |||
| D108 | DEFB $C2,$41,$BE,$40,$BE,$82,$BF,$6E | |||
| D110 | DEFB $7D,$39,$91,$31,$C6,$61,$CE,$41 | |||
| D118 | DEFB $9E,$41,$BE,$C5,$BE,$81,$3A,$FD | |||
| D120 | DEFB $7E,$83,$02,$7D,$7C,$39,$82,$41 | |||
| D128 | DEFB $C6,$41,$BE,$41,$BE,$41,$BE,$41 | |||
| D130 | DEFB $BE,$61,$BE,$41,$9E,$61,$BE,$41 | |||
| D138 | DEFB $9E,$21,$BE,$A1,$DE,$81,$5E,$3D | |||
| D140 | DEFB $7E,$83,$C2,$75,$7C,$39,$8A,$41 | |||
| D148 | DEFB $C6,$41,$BE,$40,$BE,$42,$BF,$86 | |||
| D150 | DEFB $BD,$ED,$79,$79,$12,$19,$86,$4D | |||
| D158 | DEFB $E6,$4D,$B2,$46,$B2,$62,$B9,$7D | |||
| D160 | DEFB $9D,$83,$82,$3D,$7C,$79,$C2,$01 | |||
| D168 | DEFB $86,$41,$FE,$40,$BE,$82,$BF,$F6 | |||
| D170 | DEFB $7D,$7D,$09,$0D,$82,$19,$F2,$71 | |||
| D178 | DEFB $E6,$C1,$8E,$83,$3E,$7D,$7C,$39 | |||
| D180 | DEFB $82,$41,$C6,$61,$BE,$41,$9E,$61 | |||
| D188 | DEFB $BE,$41,$9E,$61,$BE,$71,$9E,$29 | |||
| D190 | DEFB $8E,$3D,$D6,$C3,$C2,$FF,$3C,$FF | |||
| D198 | DEFB $00,$FF,$00,$FF,$00,$C7,$00,$E7 | |||
|
|
||||
| D1A0 | DEFB $00,$FF,$00,$81,$00,$FF,$00,$7F | |||
| D1A8 | DEFB $00,$3C,$00,$FE,$00,$FE,$7E,$DD | |||
| D1B0 | DEFB $00,$3F,$80,$BF,$C3,$FA,$01,$F8 | |||
| D1B8 | DEFB $01,$F3,$22,$FD,$C0,$1F,$40,$9F | |||
| D1C0 | DEFB $05,$EA,$07,$F7,$0C,$E7,$02,$75 | |||
| D1C8 | DEFB $E0,$0F,$60,$07,$15,$EA,$08,$C7 | |||
| D1D0 | DEFB $18,$DF,$8A,$D5,$F0,$17,$F8,$07 | |||
| D1D8 | DEFB $15,$AA,$38,$DF,$20,$95,$2A,$D4 | |||
| D1E0 | DEFB $E8,$03,$F8,$03,$55,$A0,$20,$BD | |||
| D1E8 | DEFB $6A,$31,$2B,$44,$FC,$03,$FC,$21 | |||
| D1F0 | DEFB $5F,$88,$42,$72,$CE,$B5,$BB,$40 | |||
| D1F8 | DEFB $FC,$01,$DE,$08,$77,$A0,$8D,$8A | |||
| D200 | DEFB $4A,$A1,$BF,$40,$FE,$A0,$F7,$55 | |||
| D208 | DEFB $5F,$1B,$75,$50,$5E,$AA,$BF,$AE | |||
| D210 | DEFB $5F,$AB,$AA,$FF,$E4,$7F,$AF,$F5 | |||
| D218 | DEFB $55,$FF,$51,$FF,$54,$FF,$00,$FE | |||
| D220 | DEFB $80,$FE,$0A,$FF | |||
|
|
||||
| D224 | DEFB $00,$FF,$00,$81,$00,$7E,$00,$FF | |||
| D22C | DEFB $00,$FE,$7E,$EA,$81,$54,$00,$FE | |||
| D234 | DEFB $01,$FE,$15,$A8,$AB,$00,$01,$FF | |||
| D23C | DEFB $01,$F8,$57,$FB,$FF,$54,$00,$F1 | |||
| D244 | DEFB $07,$E8,$04,$A9,$AB,$02,$0E,$E4 | |||
| D24C | DEFB $17,$E9,$56,$50,$FD,$A9,$1B,$F2 | |||
| D254 | DEFB $16,$C4,$AF,$14,$56,$40,$0D,$A3 | |||
| D25C | DEFB $3B,$54,$EB,$91,$BF,$40,$5C,$80 | |||
| D264 | DEFB $AB,$FF,$6E,$FF,$BF,$00,$7F,$FF | |||
|
|
||||
| D26C | DEFB $00,$00,$00,$81,$00,$81,$00,$7C | |||
| D274 | DEFB $00,$7E,$00,$FE,$FF,$6A,$7E,$3A | |||
| D27C | DEFB $7E,$74,$83,$A8,$81,$54,$01,$54 | |||
| D284 | DEFB $95,$28,$C5,$28,$8B,$55,$57,$00 | |||
| D28C | DEFB $AB,$80,$AB,$00,$D7,$F4,$D7,$FE | |||
| D294 | DEFB $AA,$FE,$FF,$2A,$7F,$B4,$FF,$A8 | |||
| D29C | DEFB $0B,$01,$01,$4A,$01,$54,$D5,$01 | |||
| D2A4 | DEFB $4B,$14,$57,$84,$FE,$A9,$B5,$41 | |||
| D2AC | DEFB $AB,$2B,$FE,$50,$EB,$2A,$7B,$50 | |||
| D2B4 | DEFB $56,$01,$BE,$14,$D4,$00,$AF,$09 | |||
| D2BC | DEFB $D5,$81,$AF,$6A,$FE,$81,$EB,$62 | |||
| D2C4 | DEFB $FF,$82,$F6,$0E,$7E,$84,$95,$03 | |||
| D2CC | DEFB $7E,$FF,$9D,$FF,$7D,$FF,$F1,$29 | |||
| D2D4 | DEFB $7B,$53,$FC,$0F | |||
|
|
||||
| D2D8 | DEFB $00,$FF,$00,$FF,$00,$FF,$00,$0F | |||
| D2E0 | DEFB $00,$53,$00,$FF,$00,$FF,$F0,$29 | |||
| D2E8 | DEFB $AC,$15,$00,$7F,$00,$BF,$D6,$00 | |||
| D2F0 | DEFB $EA,$DF,$80,$1F,$40,$9F,$FF,$2A | |||
| D2F8 | DEFB $20,$95,$E0,$5F,$60,$2F,$D5,$40 | |||
| D300 | DEFB $6A,$0A,$A0,$A7,$D0,$57,$BF,$95 | |||
| D308 | DEFB $F5,$28,$58,$27,$A8,$C3,$6A,$02 | |||
| D310 | DEFB $D7,$89,$D8,$27,$3C,$0F,$FD,$28 | |||
| D318 | DEFB $76,$FF,$D8,$FF,$F0,$FF,$D7,$FF | |||
|
|
||||
| D320 | DEFB $00,$FF,$00,$FF,$00,$FF,$00,$1F | |||
| D328 | DEFB $00,$1F,$00,$FF,$00,$FC,$00,$2C | |||
| D330 | DEFB $00,$07,$E0,$43,$E0,$88,$00,$F1 | |||
| D338 | DEFB $03,$C0,$D3,$44,$F8,$99,$BC,$07 | |||
| D340 | DEFB $77,$22,$0E,$84,$3F,$22,$BB,$08 | |||
| D348 | DEFB $66,$03,$F8,$B9,$DD,$80,$7B,$D0 | |||
| D350 | DEFB $DD,$80,$F7,$36,$FC,$03,$46,$21 | |||
| D358 | DEFB $7F,$20,$2F,$16,$7F,$70,$C9,$20 | |||
| D360 | DEFB $FC,$0D,$DE,$87,$DF,$8A,$E9,$C0 | |||
| D368 | DEFB $8F,$87,$DF,$21,$F2,$E3,$78,$FB | |||
| D370 | DEFB $75,$00,$3F,$BF,$78,$FF,$DE,$FF | |||
| D378 | DEFB $1C,$FF,$04,$3F,$FF,$FF,$40,$FF | |||
|
|
||||
| D380 | DEFB $00,$3F,$00,$FF,$00,$FF,$00,$FF | |||
| D388 | DEFB $00,$FF,$00,$FF,$00,$FF,$00,$FF | |||
| D390 | DEFB $00,$FF,$00,$4F,$C0,$A3,$00,$FF | |||
| D398 | DEFB $00,$FF,$00,$FF,$00,$FF,$00,$FF | |||
| D3A0 | DEFB $00,$FF,$00,$FF,$00,$FF,$B0,$54 | |||
| D3A8 | DEFB $5C,$AA,$00,$3F,$00,$FF,$00,$FF | |||
| D3B0 | DEFB $00,$FF,$00,$FF,$00,$FF,$00,$FF | |||
| D3B8 | DEFB $00,$4F,$AB,$55,$55,$2A,$C0,$03 | |||
| D3C0 | DEFB $00,$FF,$00,$FF,$00,$FF,$00,$FF | |||
| D3C8 | DEFB $00,$FF,$00,$FF,$B0,$54,$AA,$11 | |||
| D3D0 | DEFB $D5,$02,$FC,$AA,$00,$1F,$00,$FF | |||
| D3D8 | DEFB $00,$FF,$00,$FF,$00,$FF,$00,$47 | |||
| D3E0 | DEFB $AB,$55,$EE,$25,$FD,$4A,$55,$AA | |||
| D3E8 | DEFB $E0,$A1,$00,$FF,$00,$FF,$00,$FF | |||
| D3F0 | DEFB $00,$7F,$B8,$0A,$AA,$15,$DA,$84 | |||
| D3F8 | DEFB $B5,$80,$55,$02,$5E,$15,$00,$1F | |||
| D400 | DEFB $00,$FF,$00,$FF,$80,$A7,$F5,$AA | |||
| D408 | DEFB $EA,$04,$7B,$00,$7F,$00,$FD,$08 | |||
| D410 | DEFB $EA,$15,$E0,$51,$00,$FF,$00,$7F | |||
| D418 | DEFB $58,$A8,$55,$00,$FB,$10,$FF,$00 | |||
| D420 | DEFB $FF,$00,$F7,$10,$EA,$00,$AE,$07 | |||
| D428 | DEFB $00,$8F,$80,$F7,$57,$3F,$FF,$00 | |||
| D430 | DEFB $EF,$20,$FF,$00,$FF,$00,$EF,$40 | |||
| D438 | DEFB $FF,$00,$F8,$7F,$70,$FB,$08,$FB | |||
| D440 | DEFB $C0,$FF,$FF,$01,$D6,$40,$FF,$00 | |||
| D448 | DEFB $FF,$00,$BF,$80,$FF,$03,$80,$FF | |||
| D450 | DEFB $04,$FD,$04,$FD,$00,$FF,$FE,$07 | |||
| D458 | DEFB $BF,$80,$FF,$00,$FF,$00,$7F,$80 | |||
| D460 | DEFB $FC,$07,$00,$FF,$02,$FD,$02,$FD | |||
| D468 | DEFB $00,$FF,$F8,$0F,$7F,$00,$FF,$01 | |||
| D470 | DEFB $FF,$01,$7F,$00,$F8,$1F,$00,$FF | |||
| D478 | DEFB $02,$FD,$02,$FD,$00,$FF,$F0,$1F | |||
| D480 | DEFB $FF,$00,$FE,$01,$FE,$01,$FF,$00 | |||
| D488 | DEFB $E0,$3F,$00,$FE,$02,$FD,$02,$FD | |||
| D490 | DEFB $00,$FC,$E0,$3F,$FF,$00,$FE,$02 | |||
| D498 | DEFB $FE,$02,$FF,$00,$C0,$3F,$01,$FA | |||
| D4A0 | DEFB $02,$FD,$02,$FD,$03,$F2,$C0,$7F | |||
| D4A8 | DEFB $FF,$00,$FD,$02,$FD,$02,$FF,$00 | |||
| D4B0 | DEFB $C0,$7F,$05,$E2,$02,$FD,$02,$FD | |||
| D4B8 | DEFB $0D,$C2,$80,$7F,$FF,$00,$FD,$02 | |||
| D4C0 | DEFB $FD,$02,$FF,$00,$80,$7F,$1D,$82 | |||
| D4C8 | DEFB $02,$FD,$02,$FD,$3D,$02,$80,$7F | |||
| D4D0 | DEFB $FF,$00,$FD,$02,$FD,$02,$FF,$00 | |||
| D4D8 | DEFB $80,$7F,$7D,$02,$02,$FD,$02,$FD | |||
| D4E0 | DEFB $FD,$02,$80,$FF,$FF,$00,$FD,$82 | |||
| D4E8 | DEFB $FD,$62,$FF,$00,$80,$FF,$FD,$02 | |||
| D4F0 | DEFB $02,$FD,$02,$FD,$FD,$02,$00,$FF | |||
| D4F8 | DEFB $FF,$00,$7D,$1A,$9D,$06,$FF,$00 | |||
| D500 | DEFB $00,$FF,$FD,$02,$02,$FD,$02,$FD | |||
| D508 | DEFB $FD,$02,$00,$FF,$FF,$00,$E5,$02 | |||
| D510 | DEFB $F9,$06,$FF,$00,$00,$FF,$FD,$02 | |||
| D518 | DEFB $02,$F9,$02,$F7,$FD,$02,$00,$FF | |||
| D520 | DEFB $FF,$00,$FD,$02,$F9,$06,$FF,$00 | |||
| D528 | DEFB $00,$FF,$FD,$02,$06,$EF,$08,$DD | |||
| D530 | DEFB $FD,$02,$00,$FF,$FF,$00,$FD,$02 | |||
| D538 | DEFB $F9,$06,$FF,$00,$00,$FF,$FD,$02 | |||
| D540 | DEFB $10,$AF,$22,$BF,$FD,$02,$00,$FF | |||
| D548 | DEFB $FF,$00,$FD,$02,$F9,$86,$FF,$00 | |||
| D550 | DEFB $00,$FF,$FD,$02,$50,$77,$40,$FF | |||
| D558 | DEFB $FD,$55,$00,$FF,$FF,$00,$FD,$62 | |||
| D560 | DEFB $79,$1A,$FF,$00,$00,$FF,$FD,$2F | |||
| D568 | DEFB $88,$BF,$00,$FF,$AA,$57,$00,$FF | |||
| D570 | DEFB $FF,$00,$9D,$06,$E5,$02,$FF,$00 | |||
| D578 | DEFB $00,$FF,$D0,$3F,$40,$EF,$00,$FF | |||
| D580 | DEFB $A8,$5F,$00,$FF,$FF,$00,$F9,$02 | |||
| D588 | DEFB $FD,$02,$FF,$00,$00,$FF,$C0,$3B | |||
| D590 | DEFB $10,$FF,$00,$FF,$A0,$7F,$00,$FF | |||
| D598 | DEFB $FF,$00,$FD,$02,$FD,$02,$FF,$00 | |||
| D5A0 | DEFB $00,$FF,$C4,$6F,$00,$BF,$00,$DF | |||
| D5A8 | DEFB $80,$FD,$00,$FE,$FF,$00,$FD,$02 | |||
| D5B0 | DEFB $FD,$02,$FF,$00,$00,$FD,$90,$FD | |||
| D5B8 | DEFB $40,$FF,$20,$FF,$02,$7F,$01,$FD | |||
| D5C0 | DEFB $FF,$00,$FD,$C2,$FD,$F2,$FF,$00 | |||
| D5C8 | DEFB $02,$FB,$02,$EF,$00,$EF,$00,$FF | |||
| D5D0 | DEFB $80,$7F,$02,$F7,$FF,$00,$3D,$CC | |||
| D5D8 | DEFB $0D,$FF,$FF,$80,$04,$EF,$10,$5F | |||
| D5E0 | DEFB $10,$FF,$00,$FF,$80,$7F,$08,$DF | |||
| D5E8 | DEFB $FF,$E0,$33,$FB,$00,$FF,$7F,$F8 | |||
| D5F0 | DEFB $10,$B7,$A0,$F7,$00,$FF,$00,$FF | |||
| D5F8 | DEFB $80,$FF,$20,$7F,$1F,$DE,$04,$DE | |||
| D600 | DEFB $00,$FF,$07,$FF,$48,$FF,$08,$FF | |||
| D608 | DEFB $00,$FF,$00,$FF,$00,$FF,$80,$FC | |||
| D610 | DEFB $21,$FF,$21,$FF | |||
|
|
||||
| D614 | DEFB $FB,$85,$7B,$C7,$7A,$C3,$38,$C3 | |||
| D61C | DEFB $3C,$CB,$3C,$E3,$34,$E1,$1C,$E1 | |||
| D624 | DEFB $1E,$ED,$1E,$E1,$12,$E3,$1E,$DB | |||
| D62C | DEFB $1C,$C3,$24,$C3,$3C,$E3,$3C,$DB | |||
| D634 | DEFB $1C,$81,$24,$81,$7E,$11,$7E,$64 | |||
| D63C | DEFB $EE,$EE,$9B,$FF,$11,$FF,$00,$FF | |||
|
|
||||
| D644 | DEFB $00,$FF,$00,$FF,$00,$FF,$00,$FF | |||
| D64C | DEFB $00,$FF,$00,$FF,$00,$FF,$00,$FF | |||
| D654 | DEFB $00,$FF,$00,$FF,$00,$FF,$00,$FF | |||
| D65C | DEFB $00,$FF,$00,$FF,$00,$FF,$00,$FF | |||
| D664 | DEFB $00,$FF,$00,$FF,$00,$FF,$00,$FF | |||
| D66C | DEFB $00,$FC,$00,$FF,$00,$FF,$00,$FF | |||
| D674 | DEFB $00,$FF,$00,$FF,$00,$FF,$00,$FA | |||
| D67C | DEFB $00,$7F,$00,$FF,$00,$FF,$00,$1F | |||
| D684 | DEFB $03,$E5,$00,$FF,$00,$FF,$00,$FF | |||
| D68C | DEFB $00,$FF,$00,$FF,$00,$FF,$05,$CA | |||
| D694 | DEFB $80,$A7,$00,$FF,$00,$FF,$E0,$51 | |||
| D69C | DEFB $1A,$95,$00,$FF,$00,$FF,$00,$FF | |||
| D6A4 | DEFB $00,$FF,$00,$FF,$00,$FF,$35,$2A | |||
| D6AC | DEFB $58,$AA,$00,$FF,$00,$3F,$AE,$55 | |||
| D6B4 | DEFB $6A,$55,$00,$FE,$00,$FF,$00,$FF | |||
| D6BC | DEFB $00,$FF,$00,$FF,$00,$FC,$D5,$AA | |||
| D6C4 | DEFB $55,$AA,$00,$8F,$C0,$53,$AA,$55 | |||
| D6CC | DEFB $AA,$55,$01,$F1,$00,$FF,$00,$FF | |||
| D6D4 | DEFB $00,$FF,$00,$FF,$03,$EA,$55,$AA | |||
| D6DC | DEFB $55,$AA,$70,$BD,$AC,$59,$AA,$55 | |||
| D6E4 | DEFB $AA,$55,$0E,$D5,$00,$FF,$00,$FF | |||
| D6EC | DEFB $00,$FF,$00,$FF,$15,$AA,$55,$AA | |||
| D6F4 | DEFB $55,$AA,$42,$B5,$A6,$F5,$AA,$55 | |||
| D6FC | DEFB $AA,$55,$2A,$55,$00,$FF,$00,$FF | |||
| D704 | DEFB $00,$FF,$00,$FE,$55,$AA,$55,$AA | |||
| D70C | DEFB $55,$AA,$4A,$ED,$0A,$DD,$AA,$57 | |||
| D714 | DEFB $AA,$55,$AA,$55,$00,$F9,$00,$FF | |||
| D71C | DEFB $00,$FF,$01,$F2,$55,$AA,$55,$AA | |||
| D724 | DEFB $55,$AF,$12,$BD,$22,$BD,$A8,$7F | |||
| D72C | DEFB $AA,$55,$AA,$55,$06,$E5,$00,$FF | |||
| D734 | DEFB $00,$FF,$0D,$CA,$55,$AA,$55,$AA | |||
| D73C | DEFB $50,$FF,$42,$7D,$42,$DD,$80,$FE | |||
| D744 | DEFB $AA,$55,$AA,$55,$1A,$95,$00,$FF | |||
| D74C | DEFB $00,$FE,$35,$2A,$55,$AA,$55,$BF | |||
| D754 | DEFB $00,$FD,$82,$9D,$22,$1D,$01,$FD | |||
| D75C | DEFB $AA,$FF,$AA,$55,$6A,$55,$00,$FC | |||
| D764 | DEFB $01,$FA,$D5,$AA,$55,$BF,$40,$FF | |||
| D76C | DEFB $02,$FB,$62,$1D,$E2,$1D,$02,$F6 | |||
| D774 | DEFB $00,$FF,$AA,$FF,$AA,$55,$03,$F5 | |||
| D77C | DEFB $05,$EA,$55,$BF,$40,$FF,$00,$FF | |||
| D784 | DEFB $04,$EC,$E2,$1D,$E2,$1D,$09,$E8 | |||
| D78C | DEFB $00,$FF,$00,$FF,$AA,$FF,$0A,$E7 | |||
| D794 | DEFB $15,$E1,$40,$FF,$00,$FF,$00,$FF | |||
| D79C | DEFB $13,$D8,$E2,$3D,$E2,$3B,$17,$B0 | |||
| D7A4 | DEFB $00,$FF,$00,$FF,$00,$7F,$18,$E0 | |||
| D7AC | DEFB $1E,$E0,$00,$3F,$00,$FF,$00,$FF | |||
| D7B4 | DEFB $27,$60,$C2,$7B,$C4,$F6,$4F,$40 | |||
| D7BC | DEFB $00,$FF,$00,$FF,$80,$0F,$1F,$E0 | |||
| D7C4 | DEFB $1F,$E0,$C0,$03,$00,$FF,$00,$FE | |||
| D7CC | DEFB $9F,$C1,$84,$ED,$09,$DF,$BF,$81 | |||
| D7D4 | DEFB $00,$FD,$00,$FF,$F0,$00,$1F,$E0 | |||
| D7DC | DEFB $1F,$A0,$FC,$00,$00,$3F,$01,$FB | |||
| D7E4 | DEFB $3E,$03,$12,$DD,$20,$BF,$7E,$07 | |||
| D7EC | DEFB $02,$FA,$00,$1F,$FF,$00,$1F,$E0 | |||
| D7F4 | DEFB $5F,$A0,$FF,$00,$C0,$07,$04,$F6 | |||
| D7FC | DEFB $FC,$0F,$22,$7F,$40,$AF,$F8,$0E | |||
| D804 | DEFB $05,$EC,$E0,$01,$FF,$00,$1F,$E0 | |||
| D80C | DEFB $5F,$E0,$FF,$00,$F8,$00,$09,$5C | |||
| D814 | DEFB $F0,$1E,$80,$D7,$50,$FF,$F1,$3D | |||
| D81C | DEFB $13,$1C,$FE,$00,$FF,$00,$1F,$C0 | |||
| D824 | DEFB $1F,$E0,$FF,$00,$FF,$00,$A3,$3C | |||
| D82C | DEFB $E1,$7B,$28,$EF,$00,$FF,$C2,$7A | |||
| D834 | DEFB $E3,$3C,$FF,$00,$FF,$00,$3F,$A0 | |||
| D83C | DEFB $1F,$E0,$FF,$00,$FF,$00,$C3,$3C | |||
| D844 | DEFB $84,$F7,$10,$FF,$00,$DF,$85,$EB | |||
| D84C | DEFB $C3,$3D,$FF,$00,$FF,$00,$5F,$E0 | |||
| D854 | DEFB $1F,$E0,$FF,$00,$FF,$00,$C3,$3F | |||
| D85C | DEFB $08,$D7,$00,$FB,$20,$7F,$14,$DB | |||
| D864 | DEFB $C2,$3F,$FF,$00,$FF,$00,$1F,$E0 | |||
| D86C | DEFB $1F,$F8,$FF,$00,$FF,$00,$C0,$3F | |||
| D874 | DEFB $28,$BF,$04,$EF,$80,$FF,$24,$7F | |||
| D87C | DEFB $C0,$3F,$FF,$00,$FF,$00,$1F,$FE | |||
| D884 | DEFB $07,$DF,$FF,$80,$FF,$00,$C0,$3E | |||
| D88C | DEFB $40,$FF,$10,$BF,$00,$FF,$80,$B6 | |||
| D894 | DEFB $C0,$3E,$FF,$00,$FF,$C0,$01,$FF | |||
| D89C | DEFB $20,$F6,$7F,$F0,$FF,$00,$C1,$3D | |||
| D8A4 | DEFB $00,$FB,$40,$FF,$00,$FF,$49,$FF | |||
| D8AC | DEFB $C1,$3A,$FF,$00,$3F,$7C,$00,$FF | |||
| D8B4 | DEFB $09,$FF,$0F,$F7,$FF,$00,$C2,$3B | |||
| D8BC | DEFB $04,$DF,$00,$DF,$00,$F7,$00,$DD | |||
| D8C4 | DEFB $C5,$37,$FF,$C0,$83,$7E,$00,$DF | |||
| D8CC | DEFB $00,$FF,$08,$EF,$FF,$60,$C4,$2D | |||
| D8D4 | DEFB $20,$F7,$20,$FF,$08,$FF,$22,$FF | |||
| D8DC | DEFB $C8,$1F,$3F,$F8,$81,$FF,$20,$FF | |||
| D8E4 | DEFB $00,$ED,$10,$EB,$9F,$F6,$D2,$17 | |||
| D8EC | DEFB $08,$FD,$00,$FF,$00,$FF,$00,$7F | |||
| D8F4 | DEFB $E0,$BF,$07,$FF,$00,$FF,$00,$F5 | |||
| D8FC | DEFB $12,$FF,$14,$FF,$09,$FD,$E8,$7F | |||
| D904 | DEFB $02,$FF,$00,$EF,$00,$FF,$80,$FF | |||
| D90C | DEFB $40,$FF,$00,$7F,$00,$FF,$0A,$FF | |||
| D914 | DEFB $00,$FF,$00,$FB,$02,$FF,$80,$F7 | |||
| D91C | DEFB $00,$FF,$10,$FF,$00,$FF,$00,$7F | |||
| D924 | DEFB $00,$FF,$80,$FF,$00,$FF,$00,$FF | |||
| D92C | DEFB $00,$FF,$04,$FF,$00,$FF,$08,$FF | |||
| D934 | DEFB $00,$FF,$00,$FF,$00,$FF,$80,$FF | |||
| D93C | DEFB $00,$FF,$00,$FF,$00,$FF,$00,$FF | |||
|
|
||||
| D944 | DEFB $00,$FF,$00,$FF,$00,$FF,$00,$FF | |||
| D94C | DEFB $00,$FF,$00,$FF,$00,$FF,$00,$FF | |||
| D954 | DEFB $00,$FF,$00,$FF,$00,$FF,$00,$FF | |||
| D95C | DEFB $00,$FF,$00,$FF,$00,$FF,$00,$FF | |||
| D964 | DEFB $00,$FF,$00,$FF,$00,$FF,$00,$FF | |||
| D96C | DEFB $00,$FF,$00,$3F,$00,$FF,$00,$FF | |||
| D974 | DEFB $00,$FF,$00,$FE,$00,$5F,$00,$FF | |||
| D97C | DEFB $00,$FF,$00,$FF,$00,$FF,$00,$FF | |||
| D984 | DEFB $00,$FF,$C0,$A7,$00,$F8,$00,$FF | |||
| D98C | DEFB $00,$FF,$01,$E5,$A0,$53,$00,$FF | |||
| D994 | DEFB $00,$FF,$00,$FF,$00,$FF,$00,$FF | |||
| D99C | DEFB $00,$FF,$58,$A9,$07,$8A,$00,$FF | |||
| D9A4 | DEFB $00,$FF,$1A,$55,$AC,$54,$00,$FF | |||
| D9AC | DEFB $00,$FF,$00,$FF,$00,$FF,$00,$FF | |||
| D9B4 | DEFB $00,$7F,$56,$AA,$75,$AA,$00,$FC | |||
| D9BC | DEFB $00,$F1,$AA,$55,$AB,$55,$00,$3F | |||
| D9C4 | DEFB $00,$FF,$00,$FF,$00,$FF,$00,$FF | |||
| D9CC | DEFB $80,$8F,$55,$AA,$55,$AA,$03,$CA | |||
| D9D4 | DEFB $0E,$BD,$AA,$55,$AA,$55,$C0,$57 | |||
| D9DC | DEFB $00,$FF,$00,$FF,$00,$FF,$00,$FF | |||
| D9E4 | DEFB $70,$AB,$55,$AA,$55,$AA,$35,$9A | |||
| D9EC | DEFB $42,$AD,$AA,$55,$AA,$55,$A8,$55 | |||
| D9F4 | DEFB $00,$FF,$00,$FF,$00,$FF,$00,$FF | |||
| D9FC | DEFB $54,$AA,$55,$AA,$55,$AA,$65,$AF | |||
| DA04 | DEFB $52,$B7,$AA,$55,$AA,$55,$AA,$55 | |||
| DA0C | DEFB $00,$7F,$00,$FF,$00,$FF,$00,$9F | |||
| DA14 | DEFB $55,$AA,$55,$AA,$55,$EA,$50,$BB | |||
| DA1C | DEFB $48,$BD,$AA,$F5,$AA,$55,$AA,$55 | |||
| DA24 | DEFB $80,$4F,$00,$FF,$00,$FF,$60,$A7 | |||
| DA2C | DEFB $55,$AA,$55,$AA,$15,$FE,$44,$BD | |||
| DA34 | DEFB $42,$BE,$0A,$FF,$AA,$55,$AA,$55 | |||
| DA3C | DEFB $B0,$53,$00,$FF,$00,$FF,$58,$A9 | |||
| DA44 | DEFB $55,$AA,$55,$AA,$01,$7F,$42,$BB | |||
| DA4C | DEFB $41,$B9,$00,$BF,$AA,$FD,$AA,$55 | |||
| DA54 | DEFB $AC,$54,$00,$7F,$00,$3F,$56,$AA | |||
| DA5C | DEFB $55,$AA,$55,$FF,$80,$BF,$44,$B8 | |||
| DA64 | DEFB $46,$B8,$40,$DF,$02,$FF,$AA,$FD | |||
| DA6C | DEFB $AB,$55,$80,$5F,$C0,$AF,$55,$AA | |||
| DA74 | DEFB $55,$FF,$00,$FF,$40,$6F,$47,$B8 | |||
| DA7C | DEFB $47,$B8,$20,$37,$00,$FF,$02,$FF | |||
| DA84 | DEFB $AA,$FD,$A0,$57,$50,$E7,$55,$FF | |||
| DA8C | DEFB $00,$FF,$00,$FF,$90,$17,$47,$B8 | |||
| DA94 | DEFB $47,$BC,$C8,$1B,$00,$FF,$00,$FF | |||
| DA9C | DEFB $02,$FF,$A8,$87,$18,$07,$00,$FE | |||
| DAA4 | DEFB $00,$FF,$00,$FF,$E8,$0D,$47,$DC | |||
| DAAC | DEFB $43,$DE,$E4,$06,$00,$FF,$00,$FF | |||
| DAB4 | DEFB $00,$FC,$78,$07,$F8,$07,$01,$F0 | |||
| DABC | DEFB $00,$FF,$00,$FF,$F2,$02,$23,$6F | |||
| DAC4 | DEFB $21,$B7,$F9,$83,$00,$7F,$00,$FF | |||
| DACC | DEFB $03,$C0,$F8,$07,$F8,$07,$0F,$00 | |||
| DAD4 | DEFB $00,$FF,$00,$BF,$FD,$81,$90,$FB | |||
| DADC | DEFB $48,$BB,$7C,$C0,$80,$DF,$00,$FC | |||
| DAE4 | DEFB $3F,$00,$F8,$05,$F8,$07,$FF,$00 | |||
| DAEC | DEFB $00,$F8,$40,$5F,$7E,$E0,$04,$FD | |||
| DAF4 | DEFB $44,$FE,$3F,$F0,$20,$6F,$03,$E0 | |||
| DAFC | DEFB $FF,$00,$FA,$05,$F8,$07,$FF,$00 | |||
| DB04 | DEFB $07,$80,$A0,$37,$1F,$70,$02,$F5 | |||
| DB0C | DEFB $01,$EB,$0F,$78,$90,$3A,$1F,$00 | |||
| DB14 | DEFB $FF,$00,$FA,$07,$F8,$03,$FF,$00 | |||
| DB1C | DEFB $7F,$00,$C8,$38,$8F,$BC,$0A,$FF | |||
| DB24 | DEFB $14,$F7,$87,$DE,$C5,$3C,$FF,$00 | |||
| DB2C | DEFB $FF,$00,$F8,$07,$FC,$05,$FF,$00 | |||
| DB34 | DEFB $FF,$00,$C7,$3C,$43,$5E,$00,$FF | |||
| DB3C | DEFB $08,$FF,$21,$EF,$C3,$3C,$FF,$00 | |||
| DB44 | DEFB $FF,$00,$F8,$07,$FA,$07,$FF,$00 | |||
| DB4C | DEFB $FF,$00,$C3,$BC,$A1,$D7,$00,$FB | |||
| DB54 | DEFB $00,$DF,$10,$EB,$C3,$FC,$FF,$00 | |||
| DB5C | DEFB $FF,$00,$F8,$07,$F8,$07,$FF,$00 | |||
| DB64 | DEFB $FF,$00,$43,$FC,$28,$DB,$04,$FE | |||
| DB6C | DEFB $20,$F7,$14,$FD,$03,$FC,$FF,$00 | |||
| DB74 | DEFB $FF,$00,$F8,$1F,$F8,$7F,$FF,$00 | |||
| DB7C | DEFB $FF,$00,$03,$FC,$24,$FE,$01,$FF | |||
| DB84 | DEFB $08,$FD,$02,$FF,$03,$7C,$FF,$00 | |||
| DB8C | DEFB $FF,$01,$E0,$FB,$80,$FF,$FF,$03 | |||
| DB94 | DEFB $FF,$00,$03,$7C,$01,$6D,$00,$FF | |||
| DB9C | DEFB $02,$FF,$00,$DF,$83,$BC,$FF,$00 | |||
| DBA4 | DEFB $FE,$0F,$04,$6F,$00,$FF,$FC,$3E | |||
| DBAC | DEFB $FF,$00,$83,$5C,$92,$FF,$00,$FF | |||
| DBB4 | DEFB $00,$FB,$20,$FB,$43,$DC,$FF,$00 | |||
| DBBC | DEFB $F0,$EF,$90,$FF,$00,$FB,$C1,$7E | |||
| DBC4 | DEFB $FF,$03,$A3,$EC,$00,$BB,$00,$EF | |||
| DBCC | DEFB $04,$FF,$04,$EF,$23,$B4,$FF,$06 | |||
| DBD4 | DEFB $10,$F7,$00,$FF,$04,$FF,$81,$FF | |||
| DBDC | DEFB $FC,$1F,$13,$F8,$44,$FF,$10,$FF | |||
| DBE4 | DEFB $00,$FF,$10,$BF,$4B,$E8,$F9,$6F | |||
| DBEC | DEFB $08,$D7,$00,$B7,$00,$AF,$00,$FF | |||
| DBF4 | DEFB $E0,$FF,$07,$FD,$00,$FE,$00,$FF | |||
| DBFC | DEFB $00,$F7,$40,$FF,$17,$FE,$90,$BF | |||
| DC04 | DEFB $28,$FF,$48,$FF,$50,$FF,$00,$FF | |||
| DC0C | DEFB $00,$FE,$02,$FF,$01,$FF,$00,$FF | |||
| DC14 | DEFB $08,$FF,$00,$FF,$01,$EF,$40,$FF | |||
| DC1C | DEFB $00,$DF,$00,$FF,$00,$FF,$00,$FF | |||
| DC24 | DEFB $01,$FF,$00,$FF,$00,$FE,$00,$FF | |||
| DC2C | DEFB $00,$04,$00,$85,$10,$C3,$00,$CB | |||
| DC34 | DEFB $20,$E1,$00,$ED,$00,$EE,$00,$11 | |||
| DC3C | DEFB $00,$81,$00,$E3,$01,$C3,$00,$E3 | |||
| DC44 | DEFB $AC,$54,$00,$7F,$00,$3F,$56,$AA | |||
| DC4C | DEFB $55,$AA,$55,$FF,$80,$BF,$44,$B8 | |||
| DC54 | DEFB $46,$B8,$40,$DF,$02,$FF,$AA,$FD | |||
| DC5C | DEFB $AB,$55,$80,$5F,$C0,$AF,$55,$AA | |||
| DC64 | DEFB $55,$FF,$00,$FF,$40,$6F,$47,$B8 | |||
| DC6C | DEFB $47,$B8,$20,$37,$00,$FF,$02,$FF | |||
| DC74 | DEFB $AA,$FD,$A0,$57,$50,$E7,$55,$FF | |||
| DC7C | DEFB $00,$FF,$00,$FF,$C3,$00,$64 | |||
| DC83 | JP $DF16 | => Random number generator | ||
|
Used by the routine at EF37.
|
||||
| DC86 | JP $DF37 | => Entry E=0, dispatch bullet/collision handler via $DF39 | ||
|
Used by the routine at 6BBB.
|
||||
| DC89 | JP $DCDF | => Initialization and go to game main loop | ||
|
Used by the routine at E6A8.
|
||||
| DC8C | JP $E01B | => Check IX flag and column bound, dispatch | ||
|
Used by the routine at EF37.
|
||||
| DC8F | JP $DDBE | |||
|
Used by the routine at E2EA.
|
||||
| DC92 | JP $DF33 | => Entry E=2, dispatch bullet/collision handler via $DF39 | ||
|
Used by the routine at DE91.
|
||||
|
Advances the level scroll one step, then shifts every object in the $5B11 table down by one row (+$05) until the $90 end marker.
|
||||
| DC95 | CALL $8003 | Advance level scroll | ||
| DC98 | LD IX,$5B11 | |||
| DC9C | INC (IX+$05) | Scroll object down one row | ||
| DC9F | LD DE,$0014 | |||
| DCA2 | ADD IX,DE | |||
| DCA4 | LD A,(IX+$00) | Stop at $90 end marker | ||
| DCA7 | SUB $90 | |||
| DCA9 | JR NZ,$DC9C | |||
| DCAB | LD ($FDEE),A | |||
| DCAE | RET | |||
|
Used by the routine at DEEF.
|
||||
|
Spawns a new enemy in from the screen edge on a countdown, picking the side and column at random and dropping it into a free slot.
|
||||
| DCAF | LD A,($FDFB) | Spawning enabled ($FDFB)? | ||
| DCB2 | OR A | |||
| DCB3 | RET Z | |||
| DCB4 | DEC (IY+$7D) | Count down the spawn timer | ||
| DCB7 | RET NZ | |||
| DCB8 | LD ($FDFD),A | |||
| DCBB | CALL $DF16 | Random number generator | ||
| DCBE | LD B,$04 | |||
| DCC0 | LD L,$FF | |||
| DCC2 | BIT 7,A | Random bit picks spawn edge | ||
| DCC4 | JR Z,$DCCA | |||
| DCC6 | LD B,$0C | |||
| DCC8 | LD L,$1F | |||
| DCCA | AND $0F | |||
| DCCC | SUB $04 | |||
| DCCE | LD H,A | |||
| DCCF | CALL $E112 | Draw a small random offset (-1, 0 or +1) | ||
| DCD2 | ADD A,B | |||
| DCD3 | LD B,A | |||
| DCD4 | LD C,$0C | |||
| DCD6 | CALL $E10F | Find free enemy slot in $5B11 table, inside $E01B | ||
| DCD9 | RET Z | |||
| DCDA | SET 6,(IX+$0B) | Mark new enemy (flag bit 6) | ||
| DCDE | RET | |||
|
Used by the routine at DC89.
|
||||
|
Sets up a fresh game: clears the object table, places the player at the starting position, resets the projectile tables and seeds the random state, then drops into the main loop.
|
||||
| DCDF | LD HL,$5B11 | |||
| DCE2 | XOR A | |||
| DCE3 | LD (HL),A | |||
| DCE4 | INC L | |||
| DCE5 | JR NZ,$DCE3 | |||
| DCE7 | LD A,$90 | |||
| DCE9 | LD ($5BD9),A | |||
| DCEC | LD ($5BEE),A | |||
| DCEF | LD IY,$FD80 | |||
| DCF3 | LD HL,$5BDA | Player's object record address | ||
| DCF6 | LD (HL),$10 | ($5BDA) = $10 - Initial starting column | ||
| DCF8 | INC HL | |||
| DCF9 | LD (HL),$40 | ($5BDB) = $40 - Initial pixels down screen start point | ||
| DCFB | INC HL | |||
| DCFC | LD (HL),$02 | ($5BDC) = $02 - ?? | ||
| DCFE | INC HL | |||
| DCFF | INC HL | HL = $5BDE | ||
| DD00 | EX DE,HL | |||
| DD01 | LD HL,$5BDA | Player's object record address | ||
| DD04 | LD BC,$0004 | |||
| DD07 | LDIR | Copying 4 bytes from $5BDA to $5BDE | ||
| DD09 | EX DE,HL | |||
| DD0A | INC HL | |||
| DD0B | INC HL | HL = $5BE4 | ||
| DD0C | LD (HL),$0A | |||
| DD0E | INC HL | HL = $5BE5 | ||
| DD0F | LD (HL),$30 | |||
| DD11 | INC HL | HL = $5BE6 | ||
| DD12 | CALL $F221 | Clear the projectile/vehicle/explosion tables at $F73C | ||
| DD15 | LD HL,$FD9B | Point at the random state | ||
| DD18 | LD A,R | Seed the first byte from the refresh register | ||
| DD1A | LD (HL),A | |||
| DD1B | INC L | |||
| DD1C | XOR $AA | Second byte is the first flipped | ||
| DD1E | LD (HL),A | |||
| DD1F | INC L | |||
| DD20 | RRCA | Third is that rotated | ||
| DD21 | LD (HL),A | |||
| DD22 | XOR $AA | Fourth flips it again | ||
| DD24 | LD (HL),A | |||
| DD25 | LD A,$90 | |||
| DD27 | LD ($FD97),A | |||
| DD2A | LD ($FDDE),A | |||
| DD2D | LD ($FDDF),A | |||
| DD30 | LD (IY+$70),$88 | |||
| DD34 | LD (IY+$16),$88 | |||
| DD38 | LD (IY+$5D),$01 | $01 - Enemy delay (Time until first enemy appears) | ||
| DD3C | JP $DE91 | => Game's main loop, Part 1 | ||
|
|
||||
| DD3F | DEFB $00,$01,$00,$01,$02,$03,$04,$04 | |||
| DD47 | DEFB $04,$04,$04,$04,$05,$06,$07,$08 | |||
| DD4F | DEFB $07,$08,$0B,$0B,$09,$0A,$07,$08 | |||
| DD57 | DEFB $0B,$0B,$0B,$0B,$0C,$0D,$00,$01 | |||
| DD5F | DEFB $0F,$0F,$13,$13,$14,$14,$15,$15 | |||
| DD67 | DEFB $16,$16,$12,$12,$12,$12,$0E,$0E | |||
| DD6F | DEFB $1C,$1C | |||
|
Used by the routine at DE91.
|
||||
|
Walks the object table, drawing every entry whose draw-active flag is set, and stops at the end marker.
|
||||
| DD71 | LD IX,$5B11 | |||
| DD75 | BIT 5,(IX+$0B) | |||
| DD79 | CALL NZ,$DD8D | Draw object IX | ||
| DD7C | LD DE,$0014 | |||
| DD7F | ADD IX,DE | Next record | ||
| DD81 | LD A,(IX+$00) | |||
| DD84 | CP $90 | End marker? | ||
| DD86 | RET Z | |||
| DD87 | JR $DD75 | |||
|
Used by the routine at DEEF.
|
||||
| DD89 | LD IX,$5BDA | Player's object record address | ||
|
Used by the routine at DD71.
|
||||||||
|
Draws one object and works out its clipping. It picks the sprite frame from the object's state and direction, checks the row against the visible band, and on success paints a shadow strip and draws the sprite; an object outside the band is skipped or has its draw flag cleared.
|
||||||||
| DD8D | LD A,(IX+$0C) | |||||||
| DD90 | BIT 4,(IX+$0B) | Check wall-solid flag, adjust bit 0 | ||||||
| DD94 | JR Z,$DDA2 | |||||||
| DD96 | CP $10 | |||||||
| DD98 | JR NC,$DDA2 | |||||||
| DD9A | BIT 0,A | |||||||
| DD9C | JR Z,$DDA2 | |||||||
| DD9E | AND $FE | |||||||
| DDA0 | OR $02 | |||||||
| DDA2 | ADD A,A | Frame index * 2 into E | ||||||
| DDA3 | LD E,A | |||||||
| DDA4 | LD A,(IX+$10) | Direction offset, halved | ||||||
| DDA7 | AND $02 | |||||||
| DDA9 | RRA | Rotated in, added to the frame | ||||||
| DDAA | ADD A,E | |||||||
| DDAB | LD E,A | |||||||
| DDAC | LD D,$00 | |||||||
| DDAE | LD HL,$DD3F | |||||||
| DDB1 | ADD HL,DE | |||||||
| DDB2 | LD B,(HL) | |||||||
| DDB3 | LD (IX+$07),B | |||||||
| DDB6 | LD A,(IX+$12) | Skip further checks if state (IX+$12) = $09 | ||||||
| DDB9 | CP $09 | |||||||
| DDBB | JP Z,$DE65 | |||||||
|
This entry point is used by the routine at DC8F.
|
||||||||
| DDBE | LD A,($FD97) | |||||||
| DDC1 | CP $88 | Check screen brightness upper bound | ||||||
| DDC3 | JP NC,$DE65 | |||||||
| DDC6 | SUB $0D | |||||||
| DDC8 | JP C,$DE65 | |||||||
| DDCB | CP $04 | Row above the band? skip | ||||||
| DDCD | JP C,$DE65 | |||||||
| DDD0 | LD B,A | |||||||
| DDD1 | LD A,(IX+$05) | Row below the object? skip | ||||||
| DDD4 | SUB B | |||||||
| DDD5 | JP P,$DE65 | |||||||
| DDD8 | ADD A,$0A | Within reach of the object? | ||||||
| DDDA | JP P,$DDDF | |||||||
| DDDD | JR $DE10 | |||||||
| DDDF | LD A,B | Clamp the row to the visible range | ||||||
| DDE0 | CP $5F | |||||||
| DDE2 | JR NC,$DE0B | |||||||
| DDE4 | LD C,$5F | |||||||
| DDE6 | CP (IX+$08) | Same column as last frame? | ||||||
| DDE9 | JR Z,$DE2A | |||||||
| DDEB | PUSH BC | |||||||
| DDEC | LD H,A | |||||||
| DDED | DEC H | |||||||
| DDEE | LD A,H | |||||||
| DDEF | CP $60 | |||||||
| DDF1 | JR NC,$DE08 | |||||||
| DDF3 | LD L,$3B | Set up the shadow row | ||||||
| DDF5 | CALL $98D9 | Convert row number to screen line address | ||||||
| DDF8 | LD BC,$05AA | |||||||
|
This entry point is used by the routine at EF37.
|
||||||||
| DDFB | LD (HL),C | Fill the shadow bytes | ||||||
| DDFC | INC L | |||||||
| DDFD | DJNZ $DDFB | |||||||
| DDFF | INC H | |||||||
| DE00 | DEC L | |||||||
| DE01 | LD BC,$0555 | |||||||
| DE04 | LD (HL),C | ...and the row below | ||||||
| DE05 | DEC L | |||||||
| DE06 | DJNZ $DE04 | |||||||
| DE08 | POP BC | |||||||
| DE09 | JR $DE2A | |||||||
| DE0B | RES 5,(IX+$0B) | Off screen: clear the draw flag | ||||||
| DE0F | RET | |||||||
| DE10 | LD A,B | Clamp against the left edge | ||||||
| DE11 | SUB $1F | |||||||
| DE13 | JR NC,$DE19 | |||||||
| DE15 | LD C,$5F | |||||||
| DE17 | JR $DE2A | |||||||
| DE19 | CP $04 | |||||||
| DE1B | JR NC,$DE21 | |||||||
| DE1D | LD A,$04 | |||||||
| DE1F | JR $DE27 | |||||||
| DE21 | CP $5F | |||||||
| DE23 | JR C,$DE27 | |||||||
| DE25 | LD A,$5F | |||||||
| DE27 | LD C,A | |||||||
| DE28 | LD B,$04 | |||||||
| DE2A | LD (IX+$09),C | Store the computed clip bounds | ||||||
| DE2D | LD (IX+$08),B | |||||||
| DE30 | LD A,(IX+$05) | Object visible vertically? | ||||||
| DE33 | CP B | |||||||
| DE34 | JP P,$DE3D | |||||||
| DE37 | ADD A,$0A | |||||||
| DE39 | CP C | |||||||
| DE3A | JP P,$DE52 | |||||||
| DE3D | CALL $DE6D | Draw the object | ||||||
| DE40 | LD A,(IX+$12) | |||||||
| DE43 | CP $07 | |||||||
| DE45 | JR Z,$DE4D | |||||||
| DE47 | LD A,(IX+$04) | |||||||
| DE4A | CP $1F | |||||||
| DE4C | RET NC | |||||||
| DE4D | SET 5,(IX+$0B) | Flag it as drawn | ||||||
| DE51 | RET | |||||||
| DE52 | LD A,(IX+$05) | Special mid-screen row band | ||||||
| DE55 | CP $E0 | |||||||
| DE57 | JR NC,$DE3D | |||||||
| DE59 | CP $40 | |||||||
| DE5B | JR C,$DE3D | |||||||
| DE5D | LD (IX+$0C),$16 | Switch to a specific object state | ||||||
| DE61 | LD (IX+$07),$12 | |||||||
| DE65 | LD (IX+$08),$04 | Default clip bounds | ||||||
| DE69 | LD (IX+$09),$5F | |||||||
| DE6D | BIT 4,(IX+$0B) | Solid object? branch | ||||||
| DE71 | JR NZ,$DE8C | |||||||
| DE73 | BIT 6,(IX+$0B) | Otherwise update its position and draw | ||||||
| DE77 | JP Z,$98D0 | => Update object IX position, clip to screen, dispatch sprite draw | ||||||
| DE7A | LD A,(IX+$12) | |||||||
| DE7D | LD C,$02 | |||||||
| DE7F | CP $0C | |||||||
| DE81 | JP Z,$DE8E | |||||||
| DE84 | CP $0E | |||||||
| DE86 | JR NZ,$DE8E | |||||||
| DE88 | LD C,$04 | |||||||
| DE8A | JR $DE8E | |||||||
| DE8C | LD C,$00 | |||||||
| DE8E | JP $800F | => Mark map cells for object IX, direction-aware | ||||||
|
First half of the frame. It kills the player if their alive flag has gone, waits for the interrupt marking the frame boundary, then scrolls the level and redraws every object before dropping into Part 2.
|
||||
| DE91 | BIT 0,(IY+$62) | Is Player alive? | ||
| DE95 | JR Z,$DEAC | |||
| DE97 | LD A,($5BE6) | |||
| DE9A | CP $13 | |||
| DE9C | JR NC,$DEAC | |||
| DE9E | LD A,$13 | |||
| DEA0 | LD ($5BE6),A | |||
| DEA3 | LD A,$02 | |||
| DEA5 | LD ($5BEB),A | |||
| DEA8 | XOR A | |||
| DEA9 | CALL $642D | Trigger sound effect A (copy its parameter into slot A) | ||
| DEAC | BIT 0,(IY+$07) | |||
| DEB0 | JR Z,$DEAC | |||
| DEB2 | RES 0,(IY+$07) | |||
| DEB6 | LD A,($FDEE) | |||
| DEB9 | CP $32 | |||
| DEBB | JR NC,$DEC0 | |||
| DEBD | INC (IY+$6E) | |||
| DEC0 | BIT 5,(IY+$15) | |||
| DEC4 | JR Z,$DECB | |||
| DEC6 | CALL $DC95 | Scroll level and shift all objects down | ||
| DEC9 | JR $DECE | |||
| DECB | CALL $8006 | Clear the draw-mode flag (R bit 7), enter $9193 | ||
| DECE | CALL $DD71 | Process object records at $5B11 | ||
| DED1 | RES 5,(IY+$15) | |||
| DED5 | BIT 6,(IY+$05) | Check bit 6 (??) of Last joystick/keyboard bits ($FD85) | ||
| DED9 | JR Z,$DEEF | => Game's main loop, Part 2 | ||
| DEDB | JR $DEEF | => Game's main loop, Part 2 | ||
|
|
||||
|
Blocks on the pause key: waits for it to go up if held from before, then waits for the press and the following release, so a single tap resumes play.
|
||||
| DEDD | BIT 6,(IY+$05) | |||
| DEE1 | JR NZ,$DEDD | => Wait for the pause key to be released, pressed and released again | ||
| DEE3 | BIT 6,(IY+$05) | |||
| DEE7 | JR Z,$DEE3 | |||
| DEE9 | BIT 6,(IY+$05) | |||
| DEED | JR NZ,$DEE9 | |||
|
Used by the routine at DE91.
|
||||
|
Second half of the frame: it rebuilds the object list, reads the controls, then runs each subsystem in turn -- enemies, bullets, grenades, projectiles, explosions, spawning and sound -- before looping back to Part 1.
|
||||
| DEEF | CALL $E109 | Rebuild active-object list at $F900 from $FF00 buffer | ||
| DEF2 | CALL $E100 | Set up player object pointers (IX=$5BDA) | ||
| DEF5 | CALL $E103 | Check fire button and joystick input | ||
| DEF8 | CALL $E106 | Check player shots against every enemy in $5B11 | ||
| DEFB | CALL $F209 | Scan player-bullet table at $F82D, init $F8ED marker | ||
| DEFE | CALL $F212 | Set up grenade table $F81E, dispatch | ||
| DF01 | CALL $F203 | Set up primary projectile/vehicle table $F73C, process motion | ||
| DF04 | CALL $DD89 | Process Player's object record | ||
| DF07 | CALL $F206 | Scan explosion-effect table $F856, entry stride $14 | ||
| DF0A | CALL $E10C | Decrement Enemy delay ($FDDD), spawn enemy by Area ($FDE5) when due | ||
| DF0D | CALL $6427 | Scan $6648 table, call $65A5 for active entries | ||
| DF10 | CALL $DCAF | Periodically spawn a new enemy from the edge | ||
| DF13 | JP $DE91 | => Game's main loop, Part 1 | ||
|
Feeds a bit derived from the flags in $FD9B into the 32-bit shift register held across IY+$1B..$1E, rotating it one place; returns $FD9B in A.
|
||||
| DF16 | LD A,($FD9B) | |||
| DF19 | AND $48 | Mask control bits | ||
| DF1B | ADD A,$38 | |||
| DF1D | RLA | |||
| DF1E | RLA | |||
| DF1F | RL (IY+$1E) | Rotate the bit through IY+$1B..$1E | ||
| DF23 | RL (IY+$1D) | |||
| DF27 | RL (IY+$1C) | |||
| DF2B | RL (IY+$1B) | |||
| DF2F | LD A,($FD9B) | |||
| DF32 | RET | |||
|
Enters the bullet collision scan with the wider of the two hit boxes.
|
||||
| DF33 | LD E,$02 | |||
| DF35 | JR $DF39 | |||
|
Used by the routine at DC86.
|
||||
|
Scans the live-object list for anything a bullet has struck, using the list as a stack so it can be walked quickly. Each entry is compared against the bullet's box on both axes, with walls and obstacles branching off to their own handler.
|
||||
| DF37 | LD E,$00 | |||
|
This entry point is used by the routine at DF33.
|
||||
| DF39 | LD ($FD82),SP | Switch to $F900 stack for object scan | ||
| DF3D | LD SP,$F900 | |||
| DF40 | XOR A | Pop the bullet type | ||
| DF41 | EX AF,AF' | |||
| DF42 | POP BC | |||
| DF43 | LD A,C | High bit says a player bullet | ||
| DF44 | BIT 7,A | |||
| DF46 | JR NZ,$DF7B | => Bullet collision check, carry set on hit | ||
|
This entry point is used by the routine at DF7B.
|
||||
| DF48 | SUB L | Below the top edge? | ||
| DF49 | JR C,$DF4E | |||
| DF4B | SUB E | Try the bottom edge instead | ||
| DF4C | JR NC,$DF6D | |||
| DF4E | ADD A,B | |||
| DF4F | JR C,$DF54 | |||
| DF51 | SUB E | |||
| DF52 | JR NC,$DF6D | => Collision scan | ||
| DF54 | POP BC | Bullet X against the left edge | ||
| DF55 | LD A,C | |||
| DF56 | SUB H | Past the right edge? no hit | ||
| DF57 | JP M,$DF40 | |||
| DF5A | SUB B | |||
| DF5B | JP P,$DF40 | |||
|
This entry point is used by the routine at DF7B.
|
||||
| DF5E | LD SP,($FD82) | |||
| DF62 | EX AF,AF' | |||
| DF63 | JR NZ,$DF71 | => Collision hit on the player | ||
| DF65 | SCF | |||
| DF66 | RET | |||
|
Used by the routine at DF7B.
|
||||
|
Ends the collision scan with no hit, putting the real stack pointer back.
|
||||
| DF67 | LD SP,($FD82) | |||
| DF6B | XOR A | |||
| DF6C | RET | |||
|
Drops the entry just examined and goes back for the next one in the collision scan.
|
||||
| DF6D | POP BC | |||
| DF6E | JP $DF40 | |||
|
Used by the routine at DF37.
|
||||
|
Kills the player on contact and flags the object that did it, reporting the hit back to the scan.
|
||||
| DF71 | SET 0,(IY+$62) | Player is dead | ||
| DF75 | SET 7,(IX+$0B) | |||
| DF79 | SCF | |||
| DF7A | RET | |||
|
Used by the routine at DF37.
|
||||
|
Reached when the scanned record is a wall or obstacle (type byte bit 7 set) rather than an enemy. It decides how the bullet interacts with the tile -- passing over special tiles, and for real walls testing whether the bullet overlaps and whether the wall is breakable. A breakable tile that is hit gets its top bit set to mark the damage, while solid walls just stop the bullet.
|
||||
| DF7B | CP $80 | Type $80: pass straight through | ||
| DF7D | JR Z,$DF67 | |||
| DF7F | AND $7F | Split by wall type (bit 1) | ||
| DF81 | BIT 1,A | |||
| DF83 | JR Z,$DF96 | |||
| DF85 | INC E | |||
| DF86 | DEC E | |||
| DF87 | JR Z,$DF91 | |||
| DF89 | BIT 4,(IX+$0B) | Only certain directions damage it | ||
| DF8D | JR Z,$DF91 | |||
| DF8F | INC A | |||
| DF90 | EX AF,AF' | |||
| DF91 | LD A,C | Mask the tile column, retest bounds | ||
| DF92 | AND $7C | |||
| DF94 | JR $DF48 | |||
| DF96 | BIT 2,A | Solid wall? jump to the edge test | ||
| DF98 | JR NZ,$DFBE | |||
| DF9A | INC E | |||
| DF9B | DEC E | |||
| DF9C | JR Z,$DF6D | => Collision scan | ||
| DF9E | BIT 4,(IX+$0B) | Only breakable if the tile is flagged | ||
| DFA2 | JR Z,$DF6D | => Collision scan | ||
| DFA4 | LD A,B | Compare row against wall bound | ||
| DFA5 | SUB L | |||
| DFA6 | JR NC,$DF6D | |||
| DFA8 | ADD A,$08 | |||
| DFAA | JR NC,$DF6D | => Collision scan | ||
| DFAC | POP BC | |||
| DFAD | LD A,C | Compare column against wall bound | ||
| DFAE | SUB H | |||
| DFAF | JR C,$DF40 | |||
| DFB1 | SUB $08 | |||
| DFB3 | JR NC,$DF40 | |||
| DFB5 | LD C,B | Register the hit | ||
| DFB6 | LD B,$FF | |||
| DFB8 | LD A,(BC) | Set the tile's damage bit | ||
| DFB9 | OR $80 | |||
| DFBB | LD (BC),A | |||
| DFBC | JR $DF67 | => Collision scan exit | ||
| DFBE | LD ($FDB3),DE | Save the position for the edge tests | ||
| DFC2 | POP DE | |||
| DFC3 | LD C,A | |||
| DFC4 | SUB L | |||
| DFC5 | JR NC,$E014 | |||
| DFC7 | ADD A,B | |||
| DFC8 | JR NC,$E014 | |||
| DFCA | SUB D | Check second edge crossing | ||
| DFCB | JR NC,$DFF3 | |||
| DFCD | LD A,E | Distance to the near vertical edge | ||
| DFCE | SUB H | |||
| DFCF | JR C,$E014 | |||
| DFD1 | SUB D | |||
| DFD2 | JR NC,$DFE4 | |||
| DFD4 | LD A,E | Does the bullet span overlap the tile? | ||
| DFD5 | SUB H | |||
| DFD6 | LD B,A | |||
| DFD7 | LD A,L | |||
| DFD8 | SUB D | |||
| DFD9 | SUB C | |||
| DFDA | CP B | |||
| DFDB | JR NC,$E014 | |||
| DFDD | LD DE,($FDB3) | Inside the tile: report a hit | ||
| DFE1 | JP $DF5E | |||
| DFE4 | SUB D | Try the far edge of this half | ||
| DFE5 | JR NC,$E014 | |||
| DFE7 | LD A,H | |||
| DFE8 | SUB E | |||
| DFE9 | ADD A,B | |||
| DFEA | LD B,A | |||
| DFEB | LD A,L | |||
| DFEC | SUB D | |||
| DFED | SUB C | |||
| DFEE | CP B | |||
| DFEF | JR NC,$E014 | |||
| DFF1 | JR $DFDD | |||
| DFF3 | LD A,E | Check the other vertical half | ||
| DFF4 | SUB H | |||
| DFF5 | JR C,$E014 | |||
| DFF7 | SUB D | |||
| DFF8 | JR NC,$E005 | |||
| DFFA | LD A,E | |||
| DFFB | SUB H | |||
| DFFC | LD B,A | |||
| DFFD | LD A,C | |||
| DFFE | ADD A,D | |||
| DFFF | SUB L | |||
| E000 | CP B | |||
| E001 | JR NC,$E014 | |||
| E003 | JR $DFDD | |||
| E005 | SUB D | ...its far edge too | ||
| E006 | JR NC,$E014 | |||
| E008 | LD A,H | |||
| E009 | SUB E | |||
| E00A | ADD A,B | |||
| E00B | LD B,A | |||
| E00C | LD A,C | |||
| E00D | ADD A,D | |||
| E00E | SUB L | |||
| E00F | CP B | |||
| E010 | JR NC,$E014 | |||
| E012 | JR $DFDD | |||
| E014 | LD DE,($FDB3) | Miss: restore and scan on | ||
| E018 | JP $DF40 | |||
|
Used by the routine at DC8C.
|
||||||||||||
|
Tests whether an enemy may move into the cell ahead. A clear cell commits the move; a blocked one either turns the enemy round or picks a new heading, depending on its AI state.
|
||||||||||||
| E01B | BIT 1,(IX+$0B) | Check flag bit 1 and column limit | ||||||||||
| E01F | JR NZ,$E084 | |||||||||||
| E021 | LD A,L | |||||||||||
| E022 | CP $20 | Reject column past $20 | ||||||||||
| E024 | JR NC,$E084 | |||||||||||
| E026 | PUSH HL | Save the position | ||||||||||
| E027 | PUSH DE | |||||||||||
| E028 | LD A,L | Row into A | ||||||||||
| E029 | ADD A,A | Times four, base $04 added | ||||||||||
| E02A | ADD A,A | |||||||||||
| E02B | ADD A,$04 | |||||||||||
| E02D | ADD A,E | |||||||||||
| E02E | LD L,A | |||||||||||
| E02F | LD A,H | |||||||||||
| E030 | ADD A,$06 | |||||||||||
| E032 | LD H,A | |||||||||||
| E033 | CALL $DF33 | Entry E=2, dispatch bullet/collision handler via $DF39 | ||||||||||
| E036 | POP DE | |||||||||||
| E037 | POP HL | |||||||||||
| E038 | JR NC,$E084 | No collision: commit move | ||||||||||
| E03A | BIT 4,(IX+$0B) | Check wall-solid flag (IX+$0B) | ||||||||||
| E03E | JR NZ,$E083 | |||||||||||
| E040 | LD A,H | |||||||||||
| E041 | CP $60 | |||||||||||
| E043 | JR NC,$E049 | |||||||||||
| E045 | CP $03 | |||||||||||
| E047 | JR NC,$E04E | |||||||||||
| E049 | LD (IX+$0C),$16 | Blocked: set turn-around state $16 | ||||||||||
| E04D | RET | |||||||||||
| E04E | LD A,(IX+$12) | Branch by AI state (IX+$12) | ||||||||||
| E051 | CP $05 | #0 state $05 | ||||||||||
| E053 | JR Z,$E075 | |||||||||||
| E055 | CP $04 | #1 state $04 | ||||||||||
| E057 | JR Z,$E061 | |||||||||||
| E059 | CP $01 | #2 state $01 | ||||||||||
| E05B | JR Z,$E061 | |||||||||||
| E05D | CP $0C | |||||||||||
| E05F | JR NZ,$E075 | |||||||||||
| E061 | CALL $E112 | Draw a small random offset (-1, 0 or +1) | ||||||||||
| E064 | ADD A,(IX+$13) | |||||||||||
| E067 | XOR $08 | |||||||||||
| E069 | AND $0F | |||||||||||
| E06B | LD B,A | |||||||||||
| E06C | AND $07 | |||||||||||
| E06E | JR NZ,$E071 | |||||||||||
| E070 | INC B | |||||||||||
| E071 | LD (IX+$13),B | |||||||||||
| E074 | RET | |||||||||||
| E075 | CALL $E112 | Draw a small random offset (-1, 0 or +1) | ||||||||||
| E078 | ADD A,(IX+$0C) | |||||||||||
| E07B | ADD A,$04 | |||||||||||
| E07D | AND $0F | |||||||||||
| E07F | LD (IX+$0C),A | |||||||||||
| E082 | RET | |||||||||||
| E083 | RET | |||||||||||
| E084 | LD (IX+$04),L | Store new position into record | ||||||||||
| E087 | LD (IX+$06),E | |||||||||||
| E08A | LD A,D | |||||||||||
| E08B | CP $04 | |||||||||||
| E08D | JR C,$E097 | |||||||||||
| E08F | CP $0D | |||||||||||
| E091 | JR NC,$E097 | |||||||||||
|
This entry point is used by the routine at E0BF.
|
||||||||||||
| E093 | LD (IX+$05),H | |||||||||||
| E096 | RET | |||||||||||
| E097 | BIT 4,(IX+$0B) | |||||||||||
|
This entry point is used by the routine at E0BF.
|
||||||||||||
| E09B | JR Z,$E093 | |||||||||||
| E09D | LD A,H | |||||||||||
| E09E | CP $3C | |||||||||||
| E0A0 | JR NC,$E093 | |||||||||||
|
This entry point is used by the routine at E0BF.
|
||||||||||||
| E0A2 | BIT 3,(IY+$05) | Check bit 3 (Up) of Last joystick/keyboard bits ($FD85) | ||||||||||
| E0A6 | JR Z,$E0BE | |||||||||||
| E0A8 | BIT 4,(IY+$15) | |||||||||||
| E0AC | JR Z,$E0BA | |||||||||||
| E0AE | CP $1A | |||||||||||
| E0B0 | JR NC,$E093 | |||||||||||
| E0B2 | BIT 1,(IX+$0B) | |||||||||||
| E0B6 | JR Z,$E0BE | |||||||||||
| E0B8 | JR $E093 | |||||||||||
| E0BA | SET 5,(IY+$15) | |||||||||||
| E0BE | RET | |||||||||||
|
|
||||
|
A run of short tails for the map scan in E01B: each steps down a row and rejoins the scan, stores the new row, or raises the Area-complete flag when the player is at the end row with Up held. Only $E0D8 has a discovered caller, so the entry points of the other tails are not yet traced, and a few bytes between them (at $E0CA, $E0EF, $E0F5 and $E0FC) do not decode into anything sensible -- they may be reached at a different alignment.
|
||||
| E0BF | INC H | Step down a row and rejoin the scan | ||
| E0C0 | JR $E093 | |||
| E0C2 | SET 5,(IY+$15) | Raise the Area-complete flag and return | ||
| E0C6 | RET | |||
| E0C7 | INC H | Step down a row and rejoin at $E09B | ||
| E0C8 | JR $E09B | |||
| E0CA | RL L | |||
| E0CC | XOR $C9 | |||
| E0CE | INC H | Step down a row and rejoin at $E0A2 | ||
| E0CF | JR $E0A2 | |||
| E0D1 | INC B | |||
| E0D2 | LD (IX+$05),H | Store the new row and return | ||
| E0D5 | RET | |||
| E0D6 | BIT 4,(IX+$0B) | Only act when the wall-solid flag is set | ||
| E0DA | JR Z,$E0D2 | |||
| E0DC | LD A,H | At the Area-end row $3C? | ||
| E0DD | CP $3C | |||
| E0DF | JR NZ,$E0D2 | |||
| E0E1 | BIT 3,(IY+$05) | Up pressed as well? | ||
| E0E5 | JR Z,$E0EB | |||
| E0E7 | SET 5,(IY+$15) | Raise the Area-complete flag | ||
| E0EB | RET | |||
| E0EC | INC H | Step down a row, then store it | ||
| E0ED | JR $E0D2 | |||
| E0EF | DEC D | |||
| E0F0 | XOR $C9 | |||
| E0F2 | INC H | Step down and retest the flag | ||
| E0F3 | JR $E0D8 | |||
| E0F5 | RL L | |||
| E0F7 | XOR $C9 | |||
| E0F9 | INC H | Step down and retest the row | ||
| E0FA | JR $E0DF | |||
| E0FC | LD B,$D3 | |||
| E0FE | CP $18 | |||
|
Used by the routine at DEEF.
|
||||
| E100 | JP $E4FC | => Set up player object pointers | ||
|
Used by the routine at DEEF.
|
||||
| E103 | JP $ECC1 | => Check fire button and joystick input | ||
|
Used by the routine at DEEF.
|
||||
| E106 | JP $E6FE | => Check player shots against every enemy in $5B11 | ||
|
Used by the routine at DEEF.
|
||||
| E109 | JP $ED52 | => Rebuild active-object list at $F900 from $FF00 buffer | ||
|
Used by the routine at DEEF.
|
||||
| E10C | JP $E2EA | => Decrement Enemy delay ($FDDD), spawn enemy by Area ($FDE5) when due | ||
| E10F | JP $E44D | |||
| E112 | JP $E1AC | => Draw a small random offset | ||
|
|
||||
| E115 | DEFB $C3,$7D,$E7,$83,$00,$8B,$00,$05 | |||
| E11D | DEFB $05,$80,$00,$80,$00,$80,$00,$88 | |||
| E125 | DEFB $00,$8D,$00,$81,$00,$08,$09,$88 | |||
| E12D | DEFB $FF,$08,$09,$80,$00,$80,$00,$85 | |||
| E135 | DEFB $00,$86,$00,$86,$00,$87,$00,$87 | |||
| E13D | DEFB $00,$8A,$00,$84,$00,$8E,$00,$80 | |||
| E145 | DEFB $00,$82,$00,$80,$00,$80,$00,$80 | |||
| E14D | DEFB $00,$80,$00,$18,$03,$90,$00,$18 | |||
| E155 | DEFB $04,$80,$00,$80,$00,$80,$00,$8F | |||
| E15D | DEFB $00,$89,$00,$8C,$00,$04,$26,$5C | |||
| E165 | DEFB $ED,$7C,$EF,$A3,$EF,$52,$F0,$E7 | |||
| E16D | DEFB $F0,$14,$F1,$26,$F1,$4C,$F1,$37 | |||
| E175 | DEFB $EF,$F7,$EE,$3D,$EE,$D6,$ED,$28 | |||
| E17D | DEFB $EE,$15,$EE,$11,$EE,$24,$EE,$94 | |||
| E185 | DEFB $EE,$A8,$E1 | |||
|
|
||||
| E188 | DEFW $EB96 | |||
| E18A | DEFW $EB13 | |||
| E18C | DEFW $EC58 | |||
| E18E | DEFW $EB96 | |||
| E190 | DEFW $E881 | |||
| E192 | DEFW $E86B | |||
| E194 | DEFW $0000 | |||
| E196 | DEFW $EB68 | |||
| E198 | DEFW $EB7B | |||
| E19A | DEFW $E881 | |||
| E19C | DEFW $0000 | |||
| E19E | DEFW $E9C7 | |||
| E1A0 | DEFW $EA8E | |||
| E1A2 | DEFW $F180 | |||
| E1A4 | DEFW $E9D2 | |||
| E1A6 | DEFW $E9DD | |||
|
|
||||
|
Tail of the AI table block: drops the queued return address and aborts through the redirect.
|
||||
| E1A8 | POP BC | |||
| E1A9 | JP $6400 | => Block of redirects | ||
|
Draws a random byte for the enemy setup code, used to scatter starting positions and delays.
|
||||
| E1AC | CALL $DC83 | Get random byte | ||
| E1AF | AND $03 | |||
| E1B1 | RET Z | |||
| E1B2 | DEC A | |||
| E1B3 | DEC A | |||
| E1B4 | RET | |||
|
Used by the routine at E2EA.
|
||||
|
Services the two active bomb/explosion slots ($FDC3 and $FDC5), calling E1D1 on each to check for enemy hits and advance the effect.
|
||||
| E1B5 | LD HL,$FDF2 | |||
| E1B8 | LD DE,$FDC3 | |||
| E1BB | LD A,(DE) | First slot active? | ||
| E1BC | INC A | |||
| E1BD | JR Z,$E1C2 | |||
| E1BF | CALL $E1D1 | Check pickup/collision near object, award score | ||
| E1C2 | LD HL,$FDF3 | |||
| E1C5 | LD DE,$FDC5 | |||
| E1C8 | LD A,(DE) | Second slot active? | ||
| E1C9 | INC A | |||
| E1CA | JR Z,$E224 | => Jeep hit check, kill/score, spawn next enemy | ||
| E1CC | CALL $E1D1 | Check pickup/collision near object, award score | ||
| E1CF | JR $E224 | => Jeep hit check, kill/score, spawn next enemy | ||
|
Used by the routine at E1B5.
|
||||||||||
|
Checks whether an active bomb/explosion overlaps any enemy in the $F8EA list; a hit marks the enemy and scores 750. With no hit it counts down the explosion's own timer and, when that lapses, spawns a fresh object at a computed position.
|
||||||||||
| E1D1 | PUSH DE | |||||||||
| E1D2 | PUSH HL | |||||||||
| E1D3 | EX DE,HL | |||||||||
| E1D4 | ADD A,$08 | Turn the position into a scan key | ||||||||
| E1D6 | LD E,A | |||||||||
| E1D7 | INC L | |||||||||
| E1D8 | LD D,(HL) | |||||||||
| E1D9 | SRL E | |||||||||
| E1DB | LD HL,$F8EA | Scan the enemy list for one in range | ||||||||
| E1DE | LD B,$1D | |||||||||
| E1E0 | CALL $E77D | |||||||||
| E1E3 | POP DE | |||||||||
| E1E4 | POP HL | |||||||||
| E1E5 | JR Z,$E1F0 | No hit: fall through to the timer | ||||||||
| E1E7 | INC L | |||||||||
| E1E8 | SET 7,(HL) | Mark hit | ||||||||
| E1EA | LD BC,$4B02 | +750?? | ||||||||
| E1ED | JP $6415 | => Update Score | ||||||||
| E1F0 | EX DE,HL | Count down the respawn timer | ||||||||
| E1F1 | DEC (HL) | |||||||||
| E1F2 | RET NZ | |||||||||
| E1F3 | LD (HL),$28 | Reload the timer | ||||||||
| E1F5 | LD A,(DE) | Compute the spawn column | ||||||||
| E1F6 | ADD A,$3B | |||||||||
| E1F8 | RET C | |||||||||
| E1F9 | SUB $0A | |||||||||
| E1FB | AND $F8 | |||||||||
| E1FD | RRA | |||||||||
| E1FE | RRA | |||||||||
| E1FF | RRA | |||||||||
| E200 | LD L,A | |||||||||
| E201 | INC E | |||||||||
| E202 | LD A,(DE) | Compute the spawn row | ||||||||
| E203 | SUB $0E | |||||||||
| E205 | RET C | |||||||||
| E206 | LD H,A | |||||||||
| E207 | PUSH HL | |||||||||
| E208 | LD BC,$1002 | Grab a free enemy slot | ||||||||
| E20B | CALL $E44D | |||||||||
| E20E | POP DE | |||||||||
| E20F | RET Z | |||||||||
| E210 | LD (HL),$FD | Fill in the new record | ||||||||
| E212 | DEC L | |||||||||
| E213 | DEC L | |||||||||
| E214 | LD (HL),$0A | |||||||||
| E216 | DEC L | |||||||||
| E217 | DEC L | |||||||||
| E218 | LD (HL),$00 | |||||||||
| E21A | DEC L | |||||||||
| E21B | LD (HL),$00 | |||||||||
| E21D | DEC L | |||||||||
| E21E | LD (HL),D | |||||||||
| E21F | DEC L | |||||||||
| E220 | DEC L | |||||||||
| E221 | SET 6,(HL) | Flag the new object | ||||||||
| E223 | RET | |||||||||
|
Used by the routine at E1B5.
|
||||
|
Runs the Jeep enemy each frame. Once it has driven far enough it fires shells at the player on a cadence that quickens in later Areas, and enough shell hits destroy it for 1500 points. It also kills the player if caught in the Jeep's body or run over.
|
||||
| E224 | LD A,($FDCB) | Read the Jeep flag | ||
| E227 | INC A | None active? nothing to do | ||
| E228 | JP Z,$E2B2 | |||
| E22B | DEC A | Flag minus one | ||
| E22C | ADD A,A | |||
| E22D | ADD A,A | Doubled and based at $08 | ||
| E22E | ADD A,$08 | |||
| E230 | LD E,A | |||
| E231 | LD A,($FDCC) | Load the Jeep's row | ||
| E234 | LD D,A | |||
| E235 | CP $50 | Only fires past row $50 | ||
| E237 | LD HL,$FDF8 | |||
| E23A | JR C,$E241 | |||
| E23C | INC L | |||
| E23D | LD (HL),$00 | |||
| E23F | JR $E290 | |||
| E241 | INC (HL) | |||
| E242 | LD B,$1F | Set the fire cadence | ||
| E244 | CP $20 | |||
| E246 | JR NC,$E253 | |||
| E248 | SRL B | |||
| E24A | LD A,($FDE5) | Get Area number | ||
| E24D | CP $05 | |||
| E24F | JR C,$E253 | |||
| E251 | SRL B | |||
| E253 | LD A,(HL) | Due to fire this frame? | ||
| E254 | AND B | |||
| E255 | PUSH HL | |||
| E256 | JR NZ,$E26C | |||
| E258 | PUSH DE | |||
| E259 | EX DE,HL | |||
| E25A | LD A,($FDE3) | Aim at the player | ||
| E25D | ADD A,$04 | |||
| E25F | LD C,A | |||
| E260 | LD A,($FDE4) | |||
| E263 | ADD A,$04 | |||
| E265 | LD B,A | |||
| E266 | LD A,$03 | |||
| E268 | CALL $F200 | Scan object table (IX,$0E stride), compute and store motion vector | ||
| E26B | POP DE | |||
| E26C | LD HL,$F8ED | Check the shell against the targets | ||
| E26F | LD B,$10 | |||
| E271 | LD A,E | |||
| E272 | SUB $06 | |||
| E274 | LD E,A | |||
| E275 | LD A,D | |||
| E276 | SUB $10 | |||
| E278 | LD D,A | |||
| E279 | CALL $E77D | |||
| E27C | POP HL | |||
| E27D | JR Z,$E290 | |||
| E27F | INC L | |||
| E280 | INC (HL) | Count the hits on the Jeep | ||
| E281 | LD A,(HL) | |||
| E282 | CP $0C | Destroyed after enough hits | ||
| E284 | JR C,$E290 | |||
| E286 | SET 7,(IY+$4B) | Mark it dead | ||
| E28A | LD BC,$0F03 | +1500?? for destroying a Jeep?? | ||
| E28D | CALL $6415 | Update Score | ||
| E290 | LD A,($FDCB) | Player caught under the Jeep? | ||
| E293 | ADD A,A | |||
| E294 | ADD A,A | |||
| E295 | SUB $03 | |||
| E297 | SUB (IY+$63) | |||
| E29A | JR NC,$E2B2 | |||
| E29C | ADD A,$0D | |||
| E29E | JR NC,$E2B2 | |||
| E2A0 | LD A,($FDCC) | |||
| E2A3 | SUB $17 | |||
| E2A5 | SUB (IY+$64) | |||
| E2A8 | JR NC,$E2B2 | |||
| E2AA | ADD A,$0C | |||
| E2AC | JR NC,$E2B2 | |||
| E2AE | SET 0,(IY+$62) | Player is dead | ||
| E2B2 | LD HL,$FDC7 | Update the two gun positions | ||
| E2B5 | LD A,(HL) | |||
| E2B6 | INC A | |||
| E2B7 | CALL NZ,$E2BF | |||
| E2BA | LD HL,$FDC9 | |||
| E2BD | LD A,(HL) | |||
| E2BE | RET Z | |||
| E2BF | LD A,($FDE3) | Compare against the player column | ||
| E2C2 | ADD A,$07 | |||
| E2C4 | SUB (HL) | |||
| E2C5 | RET C | |||
| E2C6 | SUB $16 | |||
| E2C8 | RET NC | |||
| E2C9 | LD A,($FDE4) | |||
| E2CC | INC L | |||
| E2CD | SUB (HL) | |||
| E2CE | RET NC | |||
| E2CF | ADD A,$10 | |||
| E2D1 | RET NC | |||
| E2D2 | LD A,($FDCE) | |||
| E2D5 | CP $3D | |||
| E2D7 | RET C | |||
| E2D8 | SET 0,(IY+$62) | Player is dead | ||
| E2DC | RET | |||
|
Used by the routine at E2EA.
|
||||||||||||
|
Places one enemy of the fixed squad at the given column, with its type and timers preset.
|
||||||||||||
| E2DD | LD BC,$0806 | |||||||||||
| E2E0 | LD H,$04 | |||||||||||
| E2E2 | CALL $E44D | |||||||||||
| E2E5 | LD (IX+$0A),$07 | |||||||||||
| E2E9 | RET | |||||||||||
|
Used by the routine at E10C.
|
||||||||
|
Drives enemy spawning on a countdown that shortens as the Areas go on. A Fortress Area sends in a fixed squad; elsewhere enemies arrive one at a time, at a random column or in from a screen edge, each dropped into a free slot with a staggered delay. Once the level counter runs out it stops spawning and flags the level done.
|
||||||||
| E2EA | CALL $E1B5 | Service the two bomb/explosion slots | ||||||
| E2ED | DEC (IY+$5D) | |||||||
| E2F0 | JR Z,$E2FF | Timer up? go set up the next spawn | ||||||
| E2F2 | BIT 4,(IY+$15) | |||||||
| E2F6 | RET Z | |||||||
| E2F7 | LD A,($FDFA) | Force level-end once the counter passes $14 | ||||||
| E2FA | CP $14 | |||||||
| E2FC | JR NC,$E34C | |||||||
| E2FE | RET | |||||||
| E2FF | LD A,($FDE5) | Get Area number | ||||||
| E302 | CP $07 | |||||||
| E304 | JR C,$E308 | |||||||
| E306 | LD A,$07 | |||||||
| E308 | SRL A | Reload the delay -- shorter in later Areas | ||||||
| E30A | NEG | |||||||
| E30C | ADD A,$03 | |||||||
| E30E | ADD A,A | |||||||
| E30F | ADD A,A | |||||||
| E310 | ADD A,A | |||||||
| E311 | ADD A,$37 | |||||||
| E313 | LD (IY+$5D),A | |||||||
| E316 | BIT 4,(IY+$15) | Take the alternate path if the level flag is set | ||||||
| E31A | JP Z,$E3A4 | |||||||
| E31D | LD A,($FDFA) | |||||||
| E320 | OR A | |||||||
| E321 | JR NZ,$E348 | |||||||
| E323 | LD A,($FDE5) | Get Area number | ||||||
| E326 | AND $03 | $03 - Fortress byte | ||||||
| E328 | JR NZ,$E348 | |||||||
| E32A | PUSH AF | Fortress Area: spawn a fixed squad | ||||||
| E32B | LD L,$02 | |||||||
| E32D | CALL $E2DD | Init enemy object | ||||||
| E330 | LD L,$08 | |||||||
| E332 | CALL $E2DD | Init enemy object | ||||||
| E335 | LD L,$14 | |||||||
| E337 | CALL $E2DD | Init enemy object | ||||||
| E33A | SET 7,(IX+$0B) | Mark one squad member special | ||||||
| E33E | LD L,$1B | |||||||
| E340 | CALL $E2DD | Init enemy object | ||||||
| E343 | POP AF | |||||||
| E344 | LD (IY+$7A),$04 | |||||||
| E348 | CP $14 | |||||||
| E34A | JR C,$E35A | |||||||
| E34C | LD A,($FDFC) | Level cleared: raise the done flag in $5BE5 | ||||||
| E34F | OR A | |||||||
| E350 | RET NZ | |||||||
| E351 | LD A,($5BE5) | |||||||
| E354 | SET 1,A | |||||||
| E356 | LD ($5BE5),A | |||||||
| E359 | RET | |||||||
| E35A | LD (IY+$5D),$0A | Normal spawn: short delay, random placement | ||||||
| E35E | LD L,$0F | |||||||
| E360 | CALL $DC83 | Get random byte | ||||||
| E363 | BIT 7,A | |||||||
| E365 | JR NZ,$E368 | |||||||
| E367 | DEC L | |||||||
| E368 | AND $07 | |||||||
| E36A | ADD A,$FF | |||||||
| E36C | LD H,A | |||||||
| E36D | CALL $E1AC | Draw a small random offset | ||||||
| E370 | ADD A,$08 | Column and default delay for the new enemy | ||||||
| E372 | LD B,A | |||||||
| E373 | LD C,$0F | |||||||
| E375 | LD A,($FDFA) | Shorten it once the level counter reaches $0A | ||||||
| E378 | CP $0A | |||||||
| E37A | JR NZ,$E37D | |||||||
| E37C | DEC C | |||||||
| E37D | PUSH BC | |||||||
| E37E | CALL $E44D | Claim a free slot | ||||||
| E381 | POP BC | |||||||
| E382 | RET Z | None free? give up | ||||||
| E383 | LD A,C | Only this delay gets the special setup | ||||||
| E384 | CP $0E | |||||||
| E386 | JR NZ,$E398 | |||||||
| E388 | SET 1,(IX+$0B) | Mark it aggressive and facing | ||||||
| E38C | SET 6,(IX+$0B) | |||||||
| E390 | SET 0,(IX+$0C) | |||||||
| E394 | LD (IX+$11),$20 | Give it a longer first action | ||||||
| E398 | INC (IY+$7A) | Count the spawn | ||||||
| E39B | CALL $DC83 | Get random byte | ||||||
| E39E | AND $01 | |||||||
| E3A0 | JP Z,$EC1B | => Check enemy position on-screen, trigger action | ||||||
| E3A3 | RET | |||||||
| E3A4 | CALL $DC83 | Get random byte | ||||||
| E3A7 | AND $04 | |||||||
| E3A9 | JR Z,$E3B5 | |||||||
|
This entry point is used by the routine at EDD6.
|
||||||||
| E3AB | LD L,$1F | Spawn from the right edge | ||||||
| E3AD | LD BC,$0C00 | |||||||
| E3B0 | LD A,($FDDF) | |||||||
| E3B3 | JR $E3BD | |||||||
|
This entry point is used by the routine at EDD6.
|
||||||||
| E3B5 | LD L,$FE | Spawn from the left edge | ||||||
| E3B7 | LD BC,$0400 | |||||||
| E3BA | LD A,($FDDE) | |||||||
| E3BD | CP $60 | Skip unless within the visible column band | ||||||
| E3BF | JR NC,$E3EC | |||||||
| E3C1 | CP $28 | |||||||
| E3C3 | JR C,$E3EC | |||||||
| E3C5 | SUB $20 | Convert column to a row index | ||||||
| E3C7 | LD H,A | |||||||
| E3C8 | BIT 3,B | |||||||
| E3CA | LD A,($FDF1) | |||||||
| E3CD | JR NZ,$E3D0 | |||||||
| E3CF | RRA | |||||||
| E3D0 | LD C,$18 | |||||||
| E3D2 | RRA | |||||||
| E3D3 | JR NC,$E3D7 | |||||||
| E3D5 | LD C,$30 | |||||||
| E3D7 | PUSH BC | Stagger the spawn timer | ||||||
| E3D8 | LD C,$02 | |||||||
| E3DA | RLC (IY+$16) | |||||||
| E3DE | JR C,$E3E4 | |||||||
| E3E0 | LD (IY+$5D),$08 | |||||||
| E3E4 | CALL $E44D | Grab a free enemy slot | ||||||
| E3E7 | POP BC | |||||||
| E3E8 | LD (IX+$11),C | Store its action timer | ||||||
| E3EB | RET | |||||||
| E3EC | LD A,($FD97) | Off band: retry against the vertical range | ||||||
| E3EF | CP $5E | |||||||
| E3F1 | JR NC,$E416 | |||||||
| E3F3 | CP $2A | Below the band? try the vertical range | ||||||
| E3F5 | JR C,$E416 | |||||||
| E3F7 | LD H,A | Take the row, set the default delay | ||||||
| E3F8 | LD C,$07 | |||||||
| E3FA | RLC (IY+$70) | Alternate between the two spawn rows | ||||||
| E3FE | JR NC,$E408 | |||||||
| E400 | LD C,$09 | Longer delay on this row | ||||||
| E402 | LD A,H | Move the spawn row up | ||||||
| E403 | SUB $24 | |||||||
| E405 | LD H,A | |||||||
| E406 | JR $E44D | |||||||
| E408 | LD A,H | Shift the row further | ||||||
| E409 | SUB $37 | |||||||
| E40B | LD H,A | Take the low byte, flip the side | ||||||
| E40C | LD A,L | |||||||
| E40D | XOR $01 | |||||||
| E40F | LD L,A | |||||||
| E410 | LD (IY+$5D),$28 | Slow the spawn timer down | ||||||
| E414 | JR $E44D | |||||||
| E416 | LD A,($FDEE) | Too many objects already? | ||||||
| E419 | CP $32 | |||||||
| E41B | JR C,$E425 | |||||||
| E41D | LD C,$04 | Crowded: shorten the delay | ||||||
| E41F | SRL (IY+$5D) | Halve the spawn timer | ||||||
| E423 | JR $E42C | |||||||
| E425 | CALL $DC83 | Get random byte | ||||||
| E428 | AND $0E | |||||||
| E42A | JR NZ,$E438 | |||||||
| E42C | CALL $DC83 | Get random byte | ||||||
| E42F | LD C,$04 | |||||||
| E431 | BIT 7,A | |||||||
| E433 | JR Z,$E448 | |||||||
| E435 | INC C | |||||||
| E436 | JR $E448 | |||||||
| E438 | CALL $DC83 | Get random byte | ||||||
| E43B | AND $1E | |||||||
| E43D | LD L,A | |||||||
| E43E | LD H,$FF | |||||||
| E440 | CALL $E1AC | Draw a small random offset | ||||||
| E443 | ADD A,$08 | |||||||
| E445 | LD B,A | |||||||
| E446 | JR $E44D | |||||||
| E448 | AND $3F | |||||||
| E44A | ADD A,$08 | |||||||
| E44C | LD H,A | |||||||
| E44D | EXX | |||||||
| E44E | LD HL,$5B11 | Point at the object table | ||||||
| E451 | LD A,(HL) | Stop at the end marker -- no slot free | ||||||
| E452 | CP $90 | |||||||
| E454 | RET Z | |||||||
| E455 | LD A,L | |||||||
| E456 | ADD A,$0B | |||||||
| E458 | LD L,A | |||||||
| E459 | BIT 5,(HL) | Skip records whose active flag is set | ||||||
| E45B | JR Z,$E462 | |||||||
| E45D | ADD A,$09 | |||||||
| E45F | LD L,A | |||||||
| E460 | JR $E451 | |||||||
| E462 | SUB $0B | Found a free record, rewind to its start | ||||||
| E464 | LD L,A | |||||||
| E465 | PUSH HL | |||||||
| E466 | EXX | |||||||
| E467 | LD D,$20 | |||||||
| E469 | LD A,C | Some enemy types get a special flag | ||||||
| E46A | CP $09 | #0 type $09 | ||||||
| E46C | JR Z,$E47A | |||||||
| E46E | CP $0B | #1 type $0B | ||||||
| E470 | JR Z,$E47A | |||||||
| E472 | CP $02 | #2 type $02 | ||||||
| E474 | JR Z,$E47A | |||||||
| E476 | CP $0F | |||||||
| E478 | JR NZ,$E47C | |||||||
| E47A | SET 1,D | |||||||
| E47C | PUSH BC | |||||||
| E47D | PUSH HL | |||||||
| E47E | LD A,L | |||||||
| E47F | CP $20 | |||||||
| E481 | JR C,$E484 | |||||||
| E483 | XOR A | |||||||
| E484 | ADD A,A | Convert the spawn spot to a map address | ||||||
| E485 | ADD A,A | |||||||
| E486 | ADD A,$07 | |||||||
| E488 | LD L,A | |||||||
| E489 | LD A,H | |||||||
| E48A | ADD A,$06 | |||||||
| E48C | LD H,A | |||||||
| E48D | CALL $DC92 | Entry E=2, dispatch bullet/collision handler via $DF39 | ||||||
| E490 | POP HL | |||||||
| E491 | POP BC | |||||||
| E492 | JR NC,$E4A7 | |||||||
| E494 | LD A,C | Reject the spawn if it clashes with the player | ||||||
| E495 | CP $06 | |||||||
| E497 | JR Z,$E4A7 | |||||||
| E499 | CP $0A | |||||||
| E49B | JR Z,$E4A7 | |||||||
| E49D | BIT 1,D | |||||||
| E49F | JR NZ,$E4A7 | |||||||
| E4A1 | POP HL | |||||||
| E4A2 | LD (IY+$5D),$01 | Give up: reset the spawn timer | ||||||
| E4A6 | RET | |||||||
| E4A7 | EX DE,HL | Commit the new object into the record | ||||||
| E4A8 | EX (SP),HL | |||||||
| E4A9 | PUSH HL | |||||||
| E4AA | POP IX | |||||||
| E4AC | LD (HL),E | Write its start position | ||||||
| E4AD | INC L | |||||||
| E4AE | LD (HL),D | |||||||
| E4AF | INC L | |||||||
| E4B0 | LD (HL),$00 | Clear the position fields | ||||||
| E4B2 | INC L | |||||||
| E4B3 | LD (HL),$00 | |||||||
| E4B5 | INC L | |||||||
| E4B6 | LD (HL),E | Store the spawn column and row | ||||||
| E4B7 | INC L | |||||||
| E4B8 | LD (HL),D | |||||||
| E4B9 | INC L | |||||||
| E4BA | LD (HL),$03 | Initial state and heading | ||||||
| E4BC | INC L | |||||||
| E4BD | LD (HL),$00 | |||||||
| E4BF | INC L | |||||||
| E4C0 | LD (HL),$04 | Clip bounds for the sprite | ||||||
| E4C2 | INC L | |||||||
| E4C3 | LD (HL),$5F | |||||||
| E4C5 | INC L | |||||||
| E4C6 | LD (HL),$0A | Sprite height | ||||||
| E4C8 | INC L | |||||||
| E4C9 | POP DE | |||||||
| E4CA | LD (HL),D | Store the caller's frame and count | ||||||
| E4CB | INC L | |||||||
| E4CC | LD (HL),B | |||||||
| E4CD | INC L | |||||||
| E4CE | LD (HL),$00 | |||||||
| E4D0 | LD A,L | Skip on to the attribute field | ||||||
| E4D1 | ADD A,$03 | |||||||
| E4D3 | LD L,A | |||||||
| E4D4 | LD (HL),$00 | |||||||
| E4D6 | INC L | |||||||
| E4D7 | LD E,$0F | Bright attribute for types 7 and 8 | ||||||
| E4D9 | LD A,C | |||||||
| E4DA | CP $07 | |||||||
| E4DC | JR Z,$E4E2 | |||||||
| E4DE | CP $08 | |||||||
| E4E0 | JR NZ,$E4E4 | |||||||
| E4E2 | LD E,$38 | |||||||
| E4E4 | LD (HL),E | Store the attribute and type | ||||||
| E4E5 | INC L | |||||||
| E4E6 | LD (HL),C | |||||||
| E4E7 | INC L | |||||||
| E4E8 | LD (HL),B | |||||||
| E4E9 | CP $0C | Type $0C starts in state $18 | ||||||
| E4EB | RET NZ | |||||||
| E4EC | LD (IX+$0C),$18 | |||||||
| E4F0 | OR A | |||||||
| E4F1 | RET | |||||||
|
|
||||
| E4F2 | DEFB $04,$0C,$0C,$08,$06,$0A,$04,$00 | |||
| E4FA | DEFB $02,$0E | |||
|
Used by the routine at E100.
|
||||
|
Reads the player's position and drives their movement each frame. Under scripted control (entering an area) it injects a synthetic direction to walk the player to a target column, and when captured or dying it runs a death countdown. Otherwise it reads the joystick, maps it through the $E4F1 direction table, and steps the player toward the input.
|
||||
| E4FC | LD IX,$5BDA | Player's object record address | ||
| E500 | LD A,($5BDE) | |||
| E503 | ADD A,A | |||
| E504 | ADD A,A | |||
| E505 | ADD A,(IX+$06) | |||
| E508 | LD ($FDE3),A | Store the player's X ($FDE3) | ||
| E50B | LD E,A | |||
| E50C | LD A,($5BDF) | Store the player's Y ($FDE4) | ||
| E50F | LD ($FDE4),A | |||
| E512 | LD D,A | |||
| E513 | BIT 1,(IX+$0B) | In an auto-move state? | ||
| E517 | JR Z,$E552 | |||
| E519 | BIT 4,(IX+$0C) | |||
| E51D | JR Z,$E527 | |||
| E51F | LD (IX+$0C),$00 | |||
| E523 | LD (IX+$0A),$0A | |||
| E527 | LD A,E | |||
| E528 | CP $40 | Reached the target column? | ||
| E52A | JR NZ,$E53E | |||
| E52C | LD A,D | |||
| E52D | OR A | |||
| E52E | JR NZ,$E53A | |||
| E530 | RES 0,(IY+$62) | Arrived: clear the auto-move | ||
| E534 | LD (IY+$7A),$00 | |||
| E538 | POP AF | |||
| E539 | RET | |||
| E53A | LD D,$08 | |||
| E53C | JR $E546 | |||
| E53E | JR C,$E544 | |||
| E540 | LD D,$02 | |||
| E542 | JR $E546 | |||
| E544 | LD D,$01 | |||
| E546 | LD A,($FD85) | Get last joystick/keyboard bits | ||
| E549 | AND $F0 | |||
| E54B | OR D | |||
| E54C | LD ($FD85),A | Update last joystick/keyboard bits | ||
| E54F | JP $E586 | |||
| E552 | LD A,($5BE6) | Captured or dying? run the death sequence | ||
| E555 | CP $10 | |||
| E557 | JR C,$E586 | |||
| E559 | DEC (IX+$11) | Count down the death timer | ||
| E55C | RET NZ | Not due yet? leave it | ||
| E55D | LD B,$14 | |||
| E55F | BIT 7,(IX+$0B) | Aggressive objects are worth more | ||
| E563 | JR Z,$E56A | |||
| E565 | CP $13 | ...as is the special state $13 | ||
| E567 | JR Z,$E56A | |||
| E569 | DEC B | |||
| E56A | LD A,B | Store the score band | ||
| E56B | LD ($5BE6),A | |||
| E56E | LD (IX+$11),$02 | Short delay before the next step | ||
| E572 | LD A,($5BE4) | Count the remaining objects down | ||
| E575 | DEC A | |||
| E576 | LD ($5BE4),A | |||
| E579 | DEC A | None left? finish the wave | ||
| E57A | JR NZ,$E582 | |||
| E57C | SET 0,(IY+$62) | Player is dead | ||
| E580 | POP AF | |||
| E581 | RET | |||
| E582 | INC (IX+$05) | Otherwise inch the body down | ||
| E585 | RET | |||
| E586 | LD A,($FD85) | Get last joystick/keyboard bits | ||
| E589 | AND $0F | |||
| E58B | XOR $0F | |||
| E58D | JR NZ,$E58F | |||
| E58F | XOR $0F | |||
| E591 | RET Z | |||
| E592 | CP $0B | Clamp input to 8 directions | ||
| E594 | JR C,$E598 | |||
| E596 | LD A,$08 | |||
| E598 | LD HL,$E4F1 | Look up the target direction | ||
| E59B | LD C,A | |||
| E59C | LD B,$00 | |||
| E59E | ADD HL,BC | |||
| E59F | LD A,(HL) | |||
| E5A0 | LD D,A | |||
| E5A1 | LD E,(IX+$0C) | Already facing that way? | ||
| E5A4 | SUB E | |||
| E5A5 | JR Z,$E5DB | => Move enemy toward target, clamp to bounds | ||
| E5A7 | BIT 4,E | |||
| E5A9 | JR NZ,$E5DB | => Move enemy toward target, clamp to bounds | ||
| E5AB | CALL $E5B8 | Convert direction code (masked 0-15) to E delta | ||
| E5AE | LD A,E | |||
| E5AF | AND $0F | |||
| E5B1 | LD (IX+$0C),A | Store the new facing | ||
| E5B4 | LD D,A | |||
| E5B5 | JP $E5DB | => Move enemy toward target, clamp to bounds | ||
|
Used by the routine at E4FC.
|
||||||||||||||||
|
Turns a heading into a step along one axis, mapping the low nibble of the direction to a signed offset -- the X component of movement for the sixteen-way headings.
|
||||||||||||||||
| E5B8 | LD B,A | Mask direction to 0-15, check low range | ||||||||||||||
| E5B9 | AND $0F | |||||||||||||||
| E5BB | CP $05 | |||||||||||||||
| E5BD | JR C,$E5D3 | |||||||||||||||
| E5BF | CP $08 | |||||||||||||||
| E5C1 | JR Z,$E5D5 | |||||||||||||||
| E5C3 | JR C,$E5D0 | Check mid range, branch | ||||||||||||||
| E5C5 | CP $0C | |||||||||||||||
| E5C7 | JR C,$E5CB | |||||||||||||||
| E5C9 | DEC E | Step -1 (directions 12-15) | ||||||||||||||
| E5CA | RET | |||||||||||||||
| E5CB | DEC E | Step down twice | ||||||||||||||
| E5CC | DEC E | |||||||||||||||
| E5CD | DEC E | ...and twice more | ||||||||||||||
| E5CE | DEC E | |||||||||||||||
| E5CF | RET | |||||||||||||||
| E5D0 | INC E | Step +3 (directions 5-8) | ||||||||||||||
| E5D1 | INC E | |||||||||||||||
| E5D2 | INC E | |||||||||||||||
| E5D3 | INC E | Step +1 (directions 0-4) | ||||||||||||||
| E5D4 | RET | |||||||||||||||
| E5D5 | BIT 7,B | Direction 8: pick sign from bit 7 | ||||||||||||||
| E5D7 | JR NZ,$E5D0 | |||||||||||||||
| E5D9 | JR $E5CB | |||||||||||||||
|
||||||||
|
Moves an object one step along its heading: the two horizontal directions go through their own movers, anything else falls through to the direction dispatcher. The new position is clamped against the object's bounds before being stored.
|
||||||||
| E5DB | INC (IX+$10) | Load object position/velocity into HL/E | ||||||
| E5DE | LD H,(IX+$05) | |||||||
| E5E1 | LD L,(IX+$04) | |||||||
| E5E4 | LD E,(IX+$06) | |||||||
| E5E7 | LD A,D | Pick $E679 or $E648 handler by direction (D) | ||||||
| E5E8 | CP $10 | |||||||
| E5EA | JR Z,$E5F5 | |||||||
| E5EC | CP $17 | |||||||
| E5EE | JR NZ,$E61B | |||||||
| E5F0 | CALL $E679 | Move left | ||||||
| E5F3 | JR $E5F8 | |||||||
| E5F5 | CALL $E648 | Move right | ||||||
| E5F8 | LD (IX+$06),E | |||||||
| E5FB | LD (IX+$04),L | |||||||
| E5FE | LD D,(IX+$0F) | Load target coordinates for bound check | ||||||
| E601 | LD E,(IX+$0E) | |||||||
| E604 | LD H,(IX+$13) | |||||||
| E607 | CALL $F21E | Clamp/check coordinate H | ||||||
| E60A | LD (IX+$0F),H | |||||||
| E60D | LD (IX+$0E),L | |||||||
| E610 | LD (IX+$13),C | |||||||
| E613 | LD A,(IX+$0D) | |||||||
| E616 | ADD A,H | |||||||
| E617 | LD (IX+$05),A | |||||||
| E61A | RET | |||||||
| E61B | LD BC,$E628 | |||||||
| E61E | PUSH BC | |||||||
| E61F | OR A | |||||||
| E620 | RET Z | |||||||
| E621 | CP $08 | |||||||
| E623 | RET Z | |||||||
| E624 | JR C,$E648 | => Move right | ||||||
| E626 | JR $E679 | => Move left | ||||||
|
|
||||
|
Dispatches an object by its heading, sending it to the up or up/down mover according to which band the direction falls in, and clearing its draw flag when the column has gone out of range.
|
||||
| E628 | LD A,L | Check column bound, clear active flag | ||
| E629 | CP $81 | |||
| E62B | JR C,$E636 | |||
| E62D | CP $FE | |||
| E62F | JR NC,$E636 | |||
| E631 | RES 5,(IX+$0B) | |||
| E635 | RET | |||
| E636 | LD A,D | Check row band, dispatch by direction | ||
| E637 | CP $04 | |||
| E639 | JP Z,$E6C3 | |||
| E63C | JR C,$E6A8 | => Move enemy up one row if states/flags allow | ||
| E63E | CP $0C | |||
| E640 | JP Z,$E6C3 | |||
| E643 | JP C,$E6DB | => Move up/down | ||
| E646 | JR $E6A8 | => Move enemy up one row if states/flags allow | ||
|
Used by the routine at E5DB.
|
||||||||||||
|
Moves an object right when its state and the collision flags allow, stepping a sub-position counter and only shifting a whole column once that wraps.
|
||||||||||||
| E648 | CP $01 | Check special states $01/$07, test heading bit | ||||||||||
| E64A | JR Z,$E650 | |||||||||||
| E64C | CP $07 | |||||||||||
| E64E | JR NZ,$E655 | |||||||||||
| E650 | BIT 0,(IX+$10) | |||||||||||
| E654 | RET Z | |||||||||||
| E655 | BIT 4,(IX+$0B) | |||||||||||
| E659 | JR Z,$E660 | |||||||||||
| E65B | BIT 0,(IY+$05) | Check bit 0 (Right) of Last joystick/keyboard bits ($FD85) | ||||||||||
| E65F | RET Z | |||||||||||
| E660 | LD A,E | Counter up one | ||||||||||
| E661 | INC A | |||||||||||
| E662 | AND $03 | Wrapped mod 4, stored | ||||||||||
| E664 | LD E,A | |||||||||||
| E665 | JR Z,$E668 | |||||||||||
| E667 | RET | |||||||||||
| E668 | LD A,L | |||||||||||
| E669 | INC A | |||||||||||
| E66A | CP $1E | |||||||||||
| E66C | JR NC,$E670 | |||||||||||
| E66E | LD L,A | |||||||||||
| E66F | RET | |||||||||||
| E670 | BIT 4,(IX+$0B) | |||||||||||
| E674 | JR Z,$E66E | |||||||||||
| E676 | LD E,$03 | |||||||||||
| E678 | RET | |||||||||||
|
Used by the routine at E5DB.
|
||||||||||||
|
Moves an object left when its state and the collision flags allow, stepping a sub-position counter and only shifting a whole column once that wraps.
|
||||||||||||
| E679 | CP $09 | Check special states $09/$0F, test heading bit | ||||||||||
| E67B | JR Z,$E681 | |||||||||||
| E67D | CP $0F | |||||||||||
| E67F | JR NZ,$E686 | |||||||||||
| E681 | BIT 0,(IX+$10) | |||||||||||
| E685 | RET Z | |||||||||||
| E686 | BIT 4,(IX+$0B) | |||||||||||
| E68A | JR Z,$E693 | |||||||||||
| E68C | BIT 1,(IY+$05) | Check bit 1 (Left) of Last joystick/keyboard bits ($FD85) | ||||||||||
| E690 | JR NZ,$E693 | |||||||||||
| E692 | RET | |||||||||||
| E693 | LD A,E | Counter down one | ||||||||||
| E694 | DEC A | |||||||||||
| E695 | AND $03 | Wrapped mod 4, stored | ||||||||||
| E697 | LD E,A | |||||||||||
| E698 | CP $03 | |||||||||||
| E69A | RET NZ | |||||||||||
| E69B | DEC L | |||||||||||
| E69C | LD A,L | |||||||||||
| E69D | INC A | |||||||||||
| E69E | RET NZ | |||||||||||
| E69F | BIT 4,(IX+$0B) | |||||||||||
| E6A3 | RET Z | |||||||||||
| E6A4 | INC L | |||||||||||
| E6A5 | LD E,$00 | |||||||||||
| E6A7 | RET | |||||||||||
|
Used by the routine at E628.
|
||||||||||||
|
Moves an enemy up one row when its state and collision flags allow it, then bounds-checks the new row and either clears the draw-active flag or falls through to the movement dispatcher at DC8C.
|
||||||||||||
| E6A8 | CP $03 | States $03/$0D take the gated path | ||||||||||
| E6AA | JR Z,$E6B0 | |||||||||||
| E6AC | CP $0D | |||||||||||
| E6AE | JR NZ,$E6B6 | |||||||||||
| E6B0 | BIT 0,(IX+$10) | |||||||||||
| E6B4 | JR Z,$E6C3 | |||||||||||
| E6B6 | BIT 4,(IX+$0B) | Blocked by wall-solid flag? | ||||||||||
| E6BA | JR Z,$E6C2 | |||||||||||
| E6BC | BIT 3,(IY+$05) | Check bit 3 (Up) of Last joystick/keyboard bits ($FD85) | ||||||||||
| E6C0 | JR Z,$E6C3 | |||||||||||
| E6C2 | DEC H | Move up one row | ||||||||||
| E6C3 | LD A,H | |||||||||||
| E6C4 | CP $61 | Reject row above top | ||||||||||
| E6C6 | JR C,$E6D8 | |||||||||||
| E6C8 | CP $FA | Reject row below bottom | ||||||||||
| E6CA | JR NC,$E6D8 | |||||||||||
| E6CC | LD A,(IX+$12) | |||||||||||
| E6CF | CP $07 | |||||||||||
| E6D1 | JR Z,$E6D8 | |||||||||||
| E6D3 | RES 5,(IX+$0B) | Clear draw-active flag | ||||||||||
| E6D7 | RET | |||||||||||
| E6D8 | JP $DC8C | => Check IX flag and column bound, dispatch | ||||||||||
|
Used by the routine at E628.
|
||||
|
Moves an object down a row when its state and the collision flags allow, stopping it at the lower limit.
|
||||
| E6DB | CP $05 | Check special states $05/$0B, test heading bit | ||
| E6DD | JR Z,$E6E3 | |||
| E6DF | CP $0B | |||
| E6E1 | JR NZ,$E6E9 | |||
| E6E3 | BIT 0,(IX+$10) | |||
| E6E7 | JR Z,$E6C3 | |||
| E6E9 | LD A,H | Advance row, check limit $55 | ||
| E6EA | INC A | |||
| E6EB | CP $55 | |||
| E6ED | JR C,$E6FB | |||
| E6EF | BIT 4,(IX+$0B) | |||
| E6F3 | JR Z,$E6FB | |||
| E6F5 | LD A,D | |||
| E6F6 | CP $08 | |||
| E6F8 | RET Z | |||
| E6F9 | JR $E6FC | |||
| E6FB | LD H,A | |||
| E6FC | JR $E6C3 | |||
|
Used by the routine at E106.
|
||||
|
Runs one object from the $5B11 table each frame, checking whether the player's shots have hit it. It works out the object's position, then scans the bullet lists at $F8ED and $F8EA for an overlap. A hit starts the object's death animation and scores 200 points (2000 for a special target), with a sound effect.
|
||||
| E6FE | LD A,($FDFC) | Copy a state byte forward | ||
| E701 | LD ($FDFE),A | |||
| E704 | LD (IY+$7C),$00 | |||
| E708 | LD IX,$5B11 | Point at the object table | ||
|
This entry point is used by the routine at E972.
|
||||
| E70C | BIT 5,(IX+$0B) | Skip inactive objects | ||
| E710 | JP Z,$E9B9 | |||
| E713 | LD A,(IX+$04) | Object column into the position | ||
| E716 | ADD A,A | |||
| E717 | ADD A,A | |||
| E718 | ADD A,(IX+$06) | |||
| E71B | LD E,A | |||
| E71C | LD D,(IX+$05) | |||
| E71F | LD A,(IX+$12) | Read the object's state | ||
| E722 | CP $0A | |||
| E724 | JR Z,$E732 | |||
| E726 | CP $06 | |||
| E728 | JR Z,$E732 | |||
| E72A | LD A,D | |||
| E72B | CP $61 | On screen? | ||
| E72D | JR NC,$E732 | |||
| E72F | INC (IY+$7C) | |||
| E732 | LD HL,$F8ED | Scan the bullet list | ||
| E735 | LD B,$09 | |||
| E737 | INC E | |||
| E738 | INC E | |||
| E739 | LD A,(IX+$0C) | Only certain frames can be hit | ||
| E73C | CP $13 | |||
| E73E | JR C,$E744 | |||
| E740 | CP $17 | |||
| E742 | JR C,$E770 | |||
| E744 | LD A,(IX+$12) | |||
| E747 | SUB $0A | |||
| E749 | JR Z,$E770 | |||
| E74B | INC A | |||
| E74C | JR Z,$E770 | |||
| E74E | CALL $E77D | Look for a collision | ||
| E751 | JR Z,$E770 | |||
|
Killed the object
|
||||
| E753 | LD (IX+$0C),$13 | Hit: start the death animation | ||
| E757 | LD (IX+$11),$10 | |||
| E75B | LD BC,$0203 | +200 for the kill | ||
| E75E | LD A,(IX+$12) | Bigger score for a special target | ||
| E761 | CP $0E | |||
| E763 | JR NZ,$E766 | |||
| E765 | INC C | change to +2000 | ||
| E766 | CALL $6415 | Update Score | ||
| E769 | LD A,$05 | |||
| E76B | CALL $642D | Trigger sound effect A (copy its parameter into slot A) | ||
| E76E | JR $E794 | => Enemy melee/contact check vs player, kill if close | ||
| E770 | LD HL,$F8EA | Otherwise scan the second list | ||
| E773 | LD B,$1D | |||
| E775 | CALL $E77D | |||
| E778 | JR NZ,$E753 | Hit there too? handle the kill | ||
| E77A | JR $E794 | => Enemy melee/contact check vs player, kill if close | ||
|
||||||||||||||||||||
|
Walks a list of row/column record pairs and returns the first one within a B-sized box of the target position (D,E), stopping at the $90 end marker; the zero flag is set only when nothing matched.
|
||||||||||||||||||||
| E77C | INC L | |||||||||||||||||||
| E77D | LD A,(HL) | Read record | ||||||||||||||||||
| E77E | INC L | |||||||||||||||||||
| E77F | CP $90 | Inactive record marker ($90) | ||||||||||||||||||
| E781 | RET Z | |||||||||||||||||||
| E782 | SUB D | Check row within range B | ||||||||||||||||||
| E783 | JR C,$E77C | |||||||||||||||||||
| E785 | CP B | |||||||||||||||||||
| E786 | JR NC,$E77C | => Scan object table for entry near position | ||||||||||||||||||
| E788 | LD A,E | Check column within range B | ||||||||||||||||||
| E789 | SUB (HL) | |||||||||||||||||||
| E78A | JR NC,$E77C | => Scan object table for entry near position | ||||||||||||||||||
| E78C | NEG | |||||||||||||||||||
| E78E | CP B | |||||||||||||||||||
| E78F | JR NC,$E77C | => Scan object table for entry near position | ||||||||||||||||||
| E791 | INC B | Match found: set flags (B nonzero) | ||||||||||||||||||
| E792 | DEC B | |||||||||||||||||||
| E793 | RET | |||||||||||||||||||
|
Used by the routine at E6FE.
|
||||||||||||
|
Runs one frame of an enemy soldier. It first checks whether the player has walked into the enemy and kills them if so, then hands off to the handler for whatever state the enemy is in.
|
||||||||||||
| E794 | BIT 4,(IX+$0C) | Check sub-state flag and AI state $09 | ||||||||||
| E798 | JR NZ,$E7BD | |||||||||||
| E79A | LD A,(IX+$12) | |||||||||||
| E79D | CP $09 | |||||||||||
| E79F | JR Z,$E7BD | |||||||||||
| E7A1 | LD A,($FDE4) | Compare player row/column against enemy | ||||||||||
| E7A4 | SUB D | |||||||||||
| E7A5 | JR NC,$E7BD | |||||||||||
| E7A7 | ADD A,$05 | |||||||||||
| E7A9 | JR NC,$E7BD | |||||||||||
| E7AB | LD A,($FDE3) | |||||||||||
| E7AE | ADD A,$03 | |||||||||||
| E7B0 | SUB E | |||||||||||
| E7B1 | JR NC,$E7B5 | |||||||||||
| E7B3 | NEG | |||||||||||
| E7B5 | CP $06 | Player within 6 columns? | ||||||||||
| E7B7 | JR NC,$E7BD | |||||||||||
| E7B9 | SET 0,(IY+$62) | Flag player dead | ||||||||||
| E7BD | LD A,(IX+$0C) | |||||||||||
| E7C0 | LD D,A | |||||||||||
| E7C1 | CP $10 | Dispatch by enemy state | ||||||||||
| E7C3 | JP C,$E972 | => Dispatch enemy AI by state | ||||||||||
| E7C6 | JR Z,$E7E4 | |||||||||||
| E7C8 | CP $18 | |||||||||||
| E7CA | JP Z,$E972 | => Dispatch enemy AI by state | ||||||||||
| E7CD | CP $16 | |||||||||||
| E7CF | JR NZ,$E7D8 | |||||||||||
| E7D1 | RES 5,(IX+$0B) | |||||||||||
| E7D5 | JP $E9B9 | |||||||||||
| E7D8 | CP $11 | |||||||||||
| E7DA | JR Z,$E81B | |||||||||||
| E7DC | CP $12 | |||||||||||
| E7DE | JR Z,$E843 | |||||||||||
| E7E0 | CP $17 | |||||||||||
| E7E2 | JR NZ,$E7FF | |||||||||||
| E7E4 | DEC (IX+$11) | Count down the state timer | ||||||||||
| E7E7 | LD D,A | |||||||||||
| E7E8 | JR NZ,$E7FC | |||||||||||
| E7EA | LD (IX+$12),$00 | |||||||||||
| E7EE | CALL $EBE1 | Compute direction bits toward player position | ||||||||||
| E7F1 | LD (IX+$0C),A | Store the new heading | ||||||||||
| E7F4 | LD (IX+$11),$10 | Reload the state timer | ||||||||||
| E7F8 | RES 1,(IX+$0B) | |||||||||||
| E7FC | JP $E9B6 | |||||||||||
| E7FF | DEC (IX+$11) | Count the state timer down | ||||||||||
| E802 | LD B,$16 | |||||||||||
| E804 | JR Z,$E815 | |||||||||||
| E806 | INC (IX+$10) | Step the animation counter | ||||||||||
| E809 | LD A,(IX+$10) | Pick the heading from its low bits | ||||||||||
| E80C | DEC B | |||||||||||
| E80D | RRA | |||||||||||
| E80E | JR NC,$E815 | |||||||||||
| E810 | DEC B | |||||||||||
| E811 | RRA | |||||||||||
| E812 | JR NC,$E815 | |||||||||||
| E814 | DEC B | |||||||||||
| E815 | LD (IX+$0C),B | Store the heading | ||||||||||
| E818 | JP $E9B9 | |||||||||||
| E81B | DEC (IX+$11) | Count the state timer down | ||||||||||
| E81E | JP NZ,$E9B9 | |||||||||||
| E821 | LD (IX+$0C),$12 | Switch to state $12 | ||||||||||
| E825 | LD (IX+$11),$04 | |||||||||||
| E829 | LD D,(IX+$05) | Take the object row | ||||||||||
| E82C | LD A,(IX+$04) | Column doubled | ||||||||||
| E82F | ADD A,A | Doubled again, added to the row | ||||||||||
| E830 | ADD A,A | |||||||||||
| E831 | ADD A,(IX+$06) | |||||||||||
| E834 | SUB $03 | |||||||||||
| E836 | LD E,A | |||||||||||
| E837 | LD C,$00 | |||||||||||
| E839 | PUSH IX | |||||||||||
| E83B | CALL $F1BB | Check position bounds, set flags | ||||||||||
| E83E | POP IX | |||||||||||
| E840 | JP $E9B9 | |||||||||||
| E843 | DEC (IX+$11) | |||||||||||
| E846 | JP NZ,$E9B9 | |||||||||||
| E849 | LD (IX+$11),$12 | |||||||||||
| E84D | LD A,(IX+$12) | |||||||||||
| E850 | CP $08 | |||||||||||
| E852 | JP Z,$EB7B | => Enemy patrol AI | ||||||||||
| E855 | CP $04 | |||||||||||
| E857 | JR NZ,$E862 | |||||||||||
| E859 | CALL $EBE1 | Compute direction bits toward player position | ||||||||||
| E85C | LD (IX+$0C),A | |||||||||||
| E85F | JP $E9B9 | |||||||||||
| E862 | LD A,(IX+$13) | |||||||||||
| E865 | LD (IX+$0C),A | |||||||||||
| E868 | JP $E9B9 | |||||||||||
|
||||||||
|
Enemy AI pause state: reloads the action timer (+$11) to $02, or to $04 with sub-state $11 when the object has no queued sprite frame (+$06 = 0), then continues at E9B9.
|
||||||||
| E86B | LD A,$02 | |||||||
| E86D | LD E,(IX+$06) | Read queued sprite frame (+$06) | ||||||
| E870 | INC E | |||||||
| E871 | DEC E | |||||||
| E872 | JR Z,$E876 | |||||||
| E874 | JR $E87B | |||||||
| E876 | LD (IX+$0C),$11 | No frame: force sub-state $11 | ||||||
| E87A | ADD A,A | |||||||
| E87B | LD (IX+$11),A | Store pause timer | ||||||
| E87E | JP $E9B9 | |||||||
|
||||||||
| E881 | CALL $EBE1 | Compute direction bits toward player position | ||||||
| E884 | LD (IX+$0C),A | Aim heading at player | ||||||
| E887 | CALL $DC83 | Get random byte | ||||||
| E88A | RRA | |||||||
| E88B | JR C,$E86B | => Enemy AI pause | ||||||
| E88D | AND $0C | |||||||
| E88F | JR NZ,$E899 | |||||||
| E891 | LD A,(IX+$12) | |||||||
| E894 | CP $09 | |||||||
| E896 | CALL NZ,$EC1B | Check enemy position on-screen, trigger action | ||||||
| E899 | LD (IX+$11),$0E | Reload action timer $0E | ||||||
| E89D | JP $E992 | |||||||
|
Used by the routine at E972.
|
||||||||
|
The enemy's wandering AI, run on a countdown. When the timer expires it cycles through a short sequence of behaviours -- re-aiming at the player, sometimes firing, then picking a fresh random step.
|
||||||||
| E8A0 | DEC (IX+$11) | Count down the move timer | ||||||
| E8A3 | JP NZ,$E9B9 | |||||||
| E8A6 | LD A,(IX+$13) | Read phase counter (+$13) | ||||||
| E8A9 | OR A | |||||||
| E8AA | JR Z,$E8D6 | |||||||
| E8AC | CP $03 | |||||||
| E8AE | JR Z,$E8D6 | |||||||
| E8B0 | CP $01 | |||||||
| E8B2 | JR NZ,$E8BE | |||||||
| E8B4 | CALL $EBE1 | Compute direction bits toward player position | ||||||
| E8B7 | LD (IX+$0C),B | |||||||
| E8BA | LD A,$01 | |||||||
| E8BC | JR $E8D6 | |||||||
| E8BE | CALL $EBE1 | Compute direction bits toward player position | ||||||
| E8C1 | LD (IX+$0C),A | |||||||
| E8C4 | CALL $DC83 | Get random byte | ||||||
| E8C7 | BIT 6,A | Random chance to fire | ||||||
| E8C9 | PUSH AF | |||||||
| E8CA | PUSH BC | |||||||
| E8CB | CALL NZ,$EC1B | Check enemy position on-screen, trigger action | ||||||
| E8CE | POP BC | |||||||
| E8CF | POP AF | |||||||
| E8D0 | AND $02 | |||||||
| E8D2 | JR NZ,$E8D6 | |||||||
| E8D4 | JR $E904 | |||||||
| E8D6 | INC A | |||||||
| E8D7 | AND $03 | Advance phase counter 0..3 | ||||||
| E8D9 | LD (IX+$13),A | |||||||
| E8DC | LD D,A | |||||||
| E8DD | LD BC,$0113 | |||||||
| E8E0 | CALL $DC83 | Get random byte | ||||||
| E8E3 | AND $1F | Random step size | ||||||
| E8E5 | ADD A,C | Add the random part to the step | ||||||
| E8E6 | LD C,A | |||||||
| E8E7 | LD A,D | Low bit forces the shorter step | ||||||
| E8E8 | BIT 0,A | |||||||
| E8EA | JR Z,$E8EE | |||||||
| E8EC | LD C,$04 | |||||||
| E8EE | INC A | Second bit picks the direction | ||||||
| E8EF | AND $02 | |||||||
| E8F1 | LD A,B | |||||||
| E8F2 | JR Z,$E8F6 | |||||||
| E8F4 | NEG | Negate for the other way | ||||||
| E8F6 | LD B,A | |||||||
| E8F7 | ADD A,(IX+$05) | Apply the step to the row | ||||||
| E8FA | LD (IX+$05),A | |||||||
| E8FD | LD A,(IX+$0A) | And take it off the height | ||||||
| E900 | SUB B | |||||||
| E901 | LD (IX+$0A),A | |||||||
| E904 | LD (IX+$11),C | Reload move timer | ||||||
| E907 | JP $E9B9 | |||||||
|
Used by the routine at E972.
|
||||||||
|
Enemy approach AI: it closes on the player's row, switching into the attack state once near enough, and fires at intervals along the way.
|
||||||||
| E90A | LD L,(IX+$04) | Load target row, check upper bound | ||||||
| E90D | LD A,(IX+$05) | |||||||
| E910 | LD H,A | |||||||
| E911 | CP $60 | Row off-screen? exit | ||||||
| E913 | JR NC,$E96F | |||||||
| E915 | CP $2E | Close enough to attack? | ||||||
| E917 | JR C,$E92F | |||||||
| E919 | LD (IX+$12),$01 | Enter attack state | ||||||
| E91D | CALL $E1AC | Draw a small random offset | ||||||
| E920 | AND $0F | |||||||
| E922 | LD (IX+$0C),A | |||||||
| E925 | LD (IX+$13),A | |||||||
| E928 | LD (IX+$0A),$0A | |||||||
| E92C | JP $E9B9 | |||||||
| E92F | BIT 4,(IY+$15) | |||||||
| E933 | JR NZ,$E939 | |||||||
| E935 | CP $14 | |||||||
| E937 | JR C,$E96F | |||||||
| E939 | LD A,($5BDE) | |||||||
| E93C | SUB L | Compare against player row | ||||||
| E93D | JR Z,$E952 | |||||||
| E93F | JR NC,$E948 | |||||||
| E941 | INC A | |||||||
| E942 | JR Z,$E952 | |||||||
| E944 | LD B,$0A | |||||||
| E946 | JR $E954 | |||||||
| E948 | DEC A | |||||||
| E949 | JR Z,$E952 | |||||||
| E94B | DEC A | |||||||
| E94C | JR Z,$E952 | |||||||
| E94E | LD B,$06 | |||||||
| E950 | JR $E954 | |||||||
| E952 | LD B,$08 | |||||||
| E954 | LD (IX+$0C),B | Set heading toward player | ||||||
| E957 | DEC (IX+$11) | Count down fire timer | ||||||
| E95A | JR NZ,$E96F | |||||||
| E95C | LD (IX+$11),$19 | Reload fire timer | ||||||
| E960 | CALL $DC83 | Get random byte | ||||||
| E963 | AND $03 | |||||||
| E965 | JR Z,$E96C | |||||||
| E967 | LD A,B | |||||||
| E968 | CP $08 | |||||||
| E96A | JR NZ,$E96F | |||||||
| E96C | CALL $EC1B | Check enemy position on-screen, trigger action | ||||||
| E96F | JP $E9B9 | |||||||
|
Used by the routine at E794.
|
||||||||
|
Sends an enemy to the handler for its current AI state through a jump table, once its action timer expires. Until then it simply keeps moving the enemy toward its target.
|
||||||||
| E972 | LD A,(IX+$12) | Special-case states $06 and $0A | ||||||
| E975 | CP $06 | |||||||
| E977 | JR Z,$E90A | |||||||
| E979 | CP $0A | |||||||
| E97B | JP Z,$E8A0 | => Enemy wandering AI | ||||||
| E97E | DEC (IX+$11) | Count down the action timer | ||||||
| E981 | JP NZ,$E992 | |||||||
| E984 | LD A,(IX+$12) | State code doubled | ||||||
| E987 | ADD A,A | State code doubled and based | ||||||
| E988 | ADD A,$88 | |||||||
| E98A | LD L,A | Point at the handler | ||||||
| E98B | LD H,$E1 | |||||||
| E98D | LD E,(HL) | |||||||
| E98E | INC L | |||||||
| E98F | LD H,(HL) | |||||||
| E990 | LD L,E | |||||||
| E991 | JP (HL) | |||||||
| E992 | LD A,(IX+$12) | Check for a small set of special states | ||||||
| E995 | CP $0D | |||||||
| E997 | JP Z,$E9B9 | |||||||
| E99A | CP $04 | #1 state $04 | ||||||
| E99C | JR Z,$E9AE | |||||||
| E99E | CP $09 | #2 state $09 | ||||||
| E9A0 | JR Z,$E9AE | |||||||
| E9A2 | CP $01 | #3 state $01 | ||||||
| E9A4 | JR Z,$E9AE | |||||||
| E9A6 | CP $0C | #4 state $0C | ||||||
| E9A8 | JR Z,$E9AE | |||||||
| E9AA | CP $0F | |||||||
| E9AC | JR NZ,$E9B3 | |||||||
| E9AE | LD D,(IX+$13) | Use alternate delay field (IX+$13) | ||||||
| E9B1 | JR $E9B6 | |||||||
| E9B3 | LD D,(IX+$0C) | Use heading field (IX+$0C) | ||||||
| E9B6 | CALL $E5DB | Move enemy toward target, clamp to bounds | ||||||
| E9B9 | LD DE,$0014 | |||||||
| E9BC | ADD IX,DE | |||||||
| E9BE | LD A,(IX+$00) | |||||||
| E9C1 | CP $90 | |||||||
| E9C3 | RET Z | |||||||
| E9C4 | JP $E70C | |||||||
|
|
||||
|
Enemy AI state that clears the turn flag, resets the state byte and sends the object back to wandering.
|
||||
| E9C7 | RES 1,(IX+$0B) | |||
| E9CB | LD (IX+$12),$00 | |||
| E9CF | JP $EB96 | => Enemy AI | ||
|
|
||||
|
Enemy AI state that clears the turn flag and holds the object still for $30 frames.
|
||||
| E9D2 | RES 1,(IX+$0B) | |||
| E9D6 | LD (IX+$11),$30 | |||
| E9DA | JP $E992 | |||
|
|
||||
|
Enemy AI state that picks a heading from which row band the object sits in, and fires at the player when the band and its timers line up.
|
||||
| E9DD | LD A,(IX+$05) | |||
| E9E0 | CP $24 | |||
| E9E2 | JR NC,$EA18 | |||
| E9E4 | LD A,(IX+$13) | Take the stored heading | ||
| E9E7 | LD D,A | |||
| E9E8 | CP $04 | Row band picks which behaviour runs | ||
| E9EA | JR C,$E9F0 | |||
| E9EC | CP $0C | |||
| E9EE | JR C,$E9FF | |||
| E9F0 | LD (IX+$12),$01 | Enter the attack state | ||
| E9F4 | RES 1,(IX+$0B) | Clear the turn flag | ||
| E9F8 | LD (IX+$11),$10 | Reload the action timer | ||
| E9FC | JP $E992 | |||
| E9FF | LD B,(IX+$13) | Keep the current heading | ||
| EA02 | LD (IX+$11),$0B | Short delay before the next step | ||
| EA06 | CALL $DC83 | Get random byte | ||
| EA09 | AND $03 | |||
| EA0B | JR NZ,$EA77 | |||
| EA0D | CALL $DC83 | Get random byte | ||
| EA10 | AND $0F | |||
| EA12 | LD (IX+$0C),A | Store it | ||
| EA15 | JP $E992 | |||
| EA18 | RES 1,(IX+$0B) | Clear the turn flag before turning | ||
| EA1C | CALL $DC83 | Get random byte | ||
| EA1F | PUSH AF | |||
| EA20 | AND $07 | |||
| EA22 | JR NZ,$EA40 | |||
| EA24 | POP AF | |||
| EA25 | PUSH AF | |||
| EA26 | AND $18 | |||
| EA28 | JR NZ,$EA31 | |||
| EA2A | POP AF | |||
| EA2B | LD (IX+$12),$04 | |||
| EA2F | JR $E9F4 | |||
| EA31 | POP AF | |||
| EA32 | LD (IX+$12),$00 | |||
| EA36 | AND $E0 | |||
| EA38 | JR $E9F4 | |||
| EA3A | SET 7,(IX+$0B) | |||
| EA3E | JR $E9F4 | |||
| EA40 | POP AF | |||
| EA41 | LD (IX+$11),$05 | |||
| EA45 | CALL $EBE1 | Compute direction bits toward player position | ||
| EA48 | LD (IX+$13),B | |||
| EA4B | CALL $DC83 | Get random byte | ||
| EA4E | BIT 7,A | |||
| EA50 | JR Z,$EA6F | |||
| EA52 | AND $0F | |||
| EA54 | LD C,A | |||
| EA55 | LD A,B | |||
| EA56 | AND $07 | |||
| EA58 | JR NZ,$EA69 | |||
| EA5A | LD A,C | |||
| EA5B | CP $04 | |||
| EA5D | JR Z,$EA67 | |||
| EA5F | CP $0C | |||
| EA61 | JR NZ,$EA69 | |||
| EA63 | LD C,$0A | |||
| EA65 | JR $EA69 | |||
| EA67 | LD C,$06 | |||
| EA69 | LD (IX+$0C),C | |||
| EA6C | JP $E992 | |||
| EA6F | CALL $DC83 | Get random byte | ||
| EA72 | AND $0F | |||
| EA74 | LD (IX+$13),A | |||
| EA77 | LD (IX+$0C),B | |||
| EA7A | LD A,($FDFE) | |||
| EA7D | CP $01 | |||
| EA7F | JR NZ,$EA83 | |||
| EA81 | JR $EA88 | |||
| EA83 | CALL $DC83 | Get random byte | ||
| EA86 | AND $07 | |||
| EA88 | CALL Z,$EC1B | Check enemy position on-screen, trigger action | ||
| EA8B | JP $E992 | |||
|
|
||||
|
Enemy AI state that counts the turn timer down and, when it lapses, clears the turn flag and steers the object onto its new heading.
|
||||
| EA8E | BIT 1,(IX+$0B) | Turn flag set? | ||
| EA92 | JR Z,$EAA4 | |||
| EA94 | DEC (IX+$0E) | Count the turn timer down | ||
| EA97 | LD (IX+$11),$01 | Hold the action timer at one while turning | ||
| EA9B | JP NZ,$E9B9 | |||
| EA9E | RES 1,(IX+$0B) | Timer lapsed: clear the turn flag | ||
| EAA2 | JR $EB0C | Skip straight to picking the new heading | ||
| EAA4 | LD D,(IX+$05) | Player's row into D | ||
| EAA7 | LD A,(IX+$04) | Column plus a lookahead offset | ||
| EAAA | ADD A,A | |||
| EAAB | ADD A,A | |||
| EAAC | ADD A,(IX+$06) | |||
| EAAF | LD E,A | |||
| EAB0 | LD C,$02 | Default: heading east | ||
| EAB2 | LD A,($FDE3) | Player's column, minus this offset | ||
| EAB5 | SUB E | Behind us? | ||
| EAB6 | JR NC,$EABC | No: skip the flip | ||
| EAB8 | NEG | Flip it, heading west instead | ||
| EABA | LD C,$00 | |||
| EABC | LD B,A | Distance into B | ||
| EABD | LD A,($FDE4) | Player's row, minus ours | ||
| EAC0 | SUB D | |||
| EAC1 | JR C,$EB0C | Below us? too close, bail | ||
| EAC3 | CP B | Distance too small vertically? bail | ||
| EAC4 | JR C,$EB0C | |||
| EAC6 | LD A,B | Far enough to keep east/west? | ||
| EAC7 | CP $14 | |||
| EAC9 | JR NC,$EACD | Yes: skip the south override | ||
| EACB | LD C,$01 | Otherwise heading south instead | ||
| EACD | PUSH IX | Save state around the bounds check | ||
| EACF | PUSH BC | |||
| EAD0 | LD C,$00 | No flag bits to OR in | ||
| EAD2 | CALL $F1BB | Check position bounds, set flags | ||
| EAD5 | POP BC | Restore the heading choice | ||
| EAD6 | JR Z,$EB0A | |||
| EAD8 | LD (IX+$0C),C | Store the heading | ||
| EADB | SET 0,(IX+$00) | Flag it moving | ||
| EADF | SET 1,(IX+$00) | ...and turning | ||
| EAE3 | LD E,$04 | Base speed $04, check the Area | ||
| EAE5 | LD A,($FDE5) | |||
| EAE8 | CP $05 | Past Area $05? | ||
| EAEA | JR C,$EAF2 | |||
| EAEC | INC E | Faster: past Area $09 too? | ||
| EAED | CP $09 | |||
| EAEF | JR C,$EAF2 | Even faster | ||
| EAF1 | INC E | |||
| EAF2 | LD (IX+$06),E | Store the speed | ||
| EAF5 | LD (IX+$07),$73 | Set the action timer | ||
| EAF9 | POP IX | Restore IX | ||
| EAFB | LD (IX+$11),$01 | Hold the action timer at one | ||
| EAFF | SET 1,(IX+$0B) | Flag turning | ||
| EB03 | LD (IX+$0E),$03 | Arm the turn timer | ||
| EB07 | JP $E9B9 | |||
| EB0A | POP IX | |||
| EB0C | LD (IX+$11),$1C | |||
| EB10 | JP $E992 | |||
|
||||||||
|
An enemy AI state that reloads its timer according to the Area, then either turns to face the player and possibly fires, or holds its existing heading.
|
||||||||
| EB13 | LD B,$10 | |||||||
| EB15 | LD A,($FDE5) | Get Area number | ||||||
| EB18 | CP $04 | |||||||
| EB1A | JR C,$EB1E | |||||||
| EB1C | LD B,$09 | |||||||
| EB1E | LD (IX+$11),B | |||||||
| EB21 | CALL $DC83 | Get random byte | ||||||
| EB24 | AND $01 | Coin-flip: re-aim or hold heading | ||||||
| EB26 | JR Z,$EB5F | |||||||
| EB28 | CALL $EBE1 | Compute direction bits toward player position | ||||||
| EB2B | LD A,(IX+$13) | |||||||
| EB2E | AND $07 | |||||||
| EB30 | JR NZ,$EB41 | |||||||
| EB32 | LD A,B | |||||||
| EB33 | CP $04 | |||||||
| EB35 | JR Z,$EB3F | |||||||
| EB37 | CP $0C | |||||||
| EB39 | JR NZ,$EB41 | |||||||
| EB3B | LD B,$0A | |||||||
| EB3D | JR $EB41 | |||||||
| EB3F | LD B,$06 | |||||||
| EB41 | LD (IX+$0C),B | Set heading | ||||||
| EB44 | LD A,($FDE5) | Get Area number | ||||||
| EB47 | DEC A | |||||||
| EB48 | BIT 1,A | Fire probability scales with area | ||||||
| EB4A | LD B,$03 | |||||||
| EB4C | JR Z,$EB55 | |||||||
| EB4E | LD B,$01 | |||||||
| EB50 | CP $07 | |||||||
| EB52 | JR C,$EB55 | |||||||
| EB54 | DEC B | |||||||
| EB55 | CALL $DC83 | Get random byte | ||||||
| EB58 | AND B | Random chance to fire | ||||||
| EB59 | CALL Z,$EC1B | Check enemy position on-screen, trigger action | ||||||
| EB5C | JP $E992 | |||||||
| EB5F | LD A,(IX+$13) | Hold stored heading (IX+$13) | ||||||
| EB62 | LD (IX+$0C),A | |||||||
| EB65 | JP $E992 | |||||||
|
||||||||
|
Puts an enemy into AI state $01 with heading $08 (current and next) and a $20-tick action timer, then moves via E9B6.
|
||||||||
| EB68 | LD (IX+$12),$01 | Enter AI state $01 | ||||||
| EB6C | LD D,$08 | |||||||
| EB6E | LD (IX+$0C),D | Set heading $08 (current and next) | ||||||
| EB71 | LD (IX+$13),D | |||||||
| EB74 | LD (IX+$11),$20 | Set action timer $20 | ||||||
| EB78 | JP $E9B6 | |||||||
|
Used by the routine at E794.
|
||||||||
|
Enemy patrol AI: advances a step counter (+$0D) and keeps walking until it reaches 5, then reverses the heading (XOR $08), reloads the timer and moves via E9B6.
|
||||||||
| EB7B | INC (IX+$0D) | Advance step counter | ||||||
| EB7E | LD A,(IX+$0D) | |||||||
| EB81 | CP $05 | Still walking? | ||||||
| EB83 | JP C,$E86B | => Enemy AI pause | ||||||
| EB86 | LD A,(IX+$13) | |||||||
| EB89 | XOR $08 | Reverse heading 180 degrees | ||||||
| EB8B | LD (IX+$0C),A | |||||||
| EB8E | LD (IX+$11),$40 | Reload timer $40 | ||||||
| EB92 | LD D,A | |||||||
| EB93 | JP $E9B6 | |||||||
|
Used by the routine at E9C7.
|
||||||||
|
An enemy AI state that wanders on a random heading until it turns aggressive, after which it homes in on the player and fires, dropping back out again after a while.
|
||||||||
| EB96 | BIT 7,(IX+$0B) | Aggressive flag set? chase | ||||||
| EB9A | JR NZ,$EBB4 | |||||||
| EB9C | CALL $DC83 | Get random byte | ||||||
| EB9F | AND $0F | Random heading 0-15 | ||||||
| EBA1 | LD D,A | |||||||
| EBA2 | ADD A,$19 | Random timer reload | ||||||
| EBA4 | LD (IX+$11),A | |||||||
| EBA7 | LD A,(IX+$10) | |||||||
| EBAA | AND $01 | |||||||
| EBAC | JR NZ,$EBB4 | |||||||
| EBAE | LD (IX+$0C),D | |||||||
| EBB1 | JP $E9B6 | |||||||
| EBB4 | CALL $EBE1 | Compute direction bits toward player position | ||||||
| EBB7 | LD (IX+$0C),B | Aim heading at player | ||||||
| EBBA | BIT 7,(IX+$0B) | |||||||
| EBBE | JR NZ,$EBC9 | |||||||
| EBC0 | CALL $DC83 | Get random byte | ||||||
| EBC3 | RRA | |||||||
| EBC4 | JR C,$EBDB | |||||||
| EBC6 | JP Z,$E992 | |||||||
| EBC9 | LD (IX+$11),$11 | Reload timer | ||||||
| EBCD | INC (IX+$0F) | |||||||
| EBD0 | LD A,(IX+$0F) | |||||||
| EBD3 | AND $07 | |||||||
| EBD5 | JR NZ,$EBDB | |||||||
| EBD7 | RES 7,(IX+$0B) | Drop aggressive flag | ||||||
| EBDB | CALL $EC1B | Check enemy position on-screen, trigger action | ||||||
| EBDE | JP $E992 | |||||||
|
||||||||||||||
|
Works out which way the player lies from an object, comparing the two positions with a small dead zone and turning the result into one of the sixteen headings.
|
||||||||||||||
| EBE1 | LD A,($5BDF) | Player Y and zeroed flag accumulator | ||||||||||||
| EBE4 | LD BC,$0000 | |||||||||||||
| EBE7 | SUB (IX+$05) | Y distance to player | ||||||||||||
| EBEA | JR C,$EBF4 | |||||||||||||
| EBEC | SUB $10 | Below dead-zone: set down bit | ||||||||||||
| EBEE | JR C,$EBFA | |||||||||||||
| EBF0 | SET 2,C | |||||||||||||
| EBF2 | JR $EBFA | |||||||||||||
| EBF4 | ADD A,$10 | Above dead-zone: set up bit | ||||||||||||
| EBF6 | JR C,$EBFA | |||||||||||||
| EBF8 | SET 3,C | |||||||||||||
| EBFA | LD A,($5BDE) | Compare X coordinate to object (IX+$04) | ||||||||||||
| EBFD | CP (IX+$04) | |||||||||||||
| EC00 | JR Z,$EC12 | |||||||||||||
| EC02 | JR NC,$EC0C | |||||||||||||
| EC04 | ADD A,$01 | |||||||||||||
| EC06 | JR C,$EC12 | |||||||||||||
| EC08 | SET 1,C | Player to the right: set bit | ||||||||||||
| EC0A | JR $EC12 | |||||||||||||
| EC0C | SUB $01 | |||||||||||||
| EC0E | JR C,$EC12 | |||||||||||||
| EC10 | SET 0,C | Player to the left: set bit | ||||||||||||
| EC12 | LD HL,$E4F1 | Look up direction code in $E4F1 table | ||||||||||||
| EC15 | ADD HL,BC | |||||||||||||
| EC16 | LD A,(HL) | |||||||||||||
| EC17 | AND $0F | |||||||||||||
| EC19 | LD B,A | |||||||||||||
| EC1A | RET | |||||||||||||
|
||||||||
|
Fires an enemy shot from a position looked up for its direction, aimed near the player, provided the shot starts on screen.
|
||||||||
| EC1B | PUSH IX | |||||||
| EC1D | PUSH IX | |||||||
| EC1F | POP HL | |||||||
| EC20 | CALL $ED31 | Look up entry in table at $EC81 | ||||||
| EC23 | LD A,H | |||||||
| EC24 | CP $60 | Reject if off bottom edge | ||||||
| EC26 | JR NC,$EC55 | |||||||
| EC28 | CP $05 | |||||||
| EC2A | JR C,$EC55 | |||||||
| EC2C | LD A,L | |||||||
| EC2D | CP $80 | Reject if off right edge | ||||||
| EC2F | JR NC,$EC55 | |||||||
| EC31 | LD A,($5BDF) | |||||||
| EC34 | ADD A,$04 | |||||||
| EC36 | LD B,A | |||||||
| EC37 | LD A,($FDE3) | |||||||
| EC3A | ADD A,$04 | |||||||
| EC3C | LD C,A | |||||||
| EC3D | LD E,$82 | |||||||
| EC3F | LD A,($FDE5) | Get Area number | ||||||
| EC42 | CP $04 | #0 area band 0-3 | ||||||
| EC44 | JR C,$EC51 | |||||||
| EC46 | INC E | |||||||
| EC47 | CP $08 | #1 area band 4-7 | ||||||
| EC49 | JR C,$EC51 | |||||||
| EC4B | INC E | |||||||
| EC4C | CP $0C | #2 area band 8-11, else 12+ | ||||||
| EC4E | JR C,$EC51 | |||||||
| EC50 | INC E | |||||||
| EC51 | LD A,E | |||||||
| EC52 | CALL $F200 | Scan object table (IX,$0E stride), compute and store motion vector | ||||||
| EC55 | POP IX | |||||||
| EC57 | RET | |||||||
|
||||||||
|
Flips the enemy sub-state (+$0C) between $10 and $17 depending on whether its current value is under $08, then resets its timers and target fields and continues at E9B9.
|
||||||||
| EC58 | LD A,(IX+$0C) | Compare (IX+$0C) against $08, pick $17/$10 | ||||||
| EC5B | CP $08 | |||||||
| EC5D | JR C,$EC63 | |||||||
| EC5F | LD A,$17 | |||||||
| EC61 | JR $EC65 | |||||||
| EC63 | LD A,$10 | |||||||
| EC65 | LD (IX+$0C),A | Store new sub-state, reset timers to defaults | ||||||
| EC68 | LD (IX+$13),$F6 | |||||||
| EC6C | LD (IX+$11),$10 | |||||||
| EC70 | LD (IX+$0F),$00 | Clear position counters (+$0F/+$0E) | ||||||
| EC74 | LD (IX+$0E),$00 | |||||||
| EC78 | LD A,(IX+$05) | Snapshot target row into +$0D | ||||||
| EC7B | LD (IX+$0D),A | |||||||
| EC7E | JP $E9B9 | |||||||
|
|
||||
| EC81 | DEFB $04,$FF,$00,$FC,$07,$02,$02,$FC | |||
| EC89 | DEFB $07,$02,$03,$FD,$07,$02,$04,$FE | |||
| EC91 | DEFB $07,$04,$04,$00,$07,$07,$04,$02 | |||
| EC99 | DEFB $07,$07,$03,$03,$07,$07,$02,$04 | |||
| ECA1 | DEFB $04,$0A,$00,$04,$00,$06,$FE,$04 | |||
| ECA9 | DEFB $00,$06,$FD,$03,$00,$06,$FC,$02 | |||
| ECB1 | DEFB $00,$05,$FC,$00,$00,$01,$FC,$FE | |||
| ECB9 | DEFB $00,$01,$FD,$FD,$00,$01,$FE,$FC | |||
|
Used by the routine at E103.
|
||||
|
Handles the player firing: a tap shoots a bullet, holding the button lobs a grenade if any remain, and either way the shot is spawned with its sound.
|
||||
| ECC1 | LD A,($5BE6) | |||
| ECC4 | CP $10 | Skip while player busy | ||
| ECC6 | RET NC | |||
| ECC7 | BIT 4,(IY+$05) | Check bit 4 (Fire) of Last joystick/keyboard bits ($FD85) | ||
| ECCB | LD A,($FD95) | |||
| ECCE | LD D,A | |||
| ECCF | JR NZ,$ECE3 | Fire => jump | ||
| ECD1 | AND $70 | Keep only the charge bits | ||
| ECD3 | LD ($FD95),A | |||
| ECD6 | BIT 5,(IY+$05) | Grenade key held? | ||
| ECDA | JR NZ,$ECF2 | |||
| ECDC | BIT 6,A | Nothing pending? done | ||
| ECDE | RET Z | |||
| ECDF | RES 6,A | Clear the pending flag and fire | ||
| ECE1 | JR $ED1C | |||
|
Fire button pressed
|
||||
| ECE3 | BIT 7,A | Already charging? | ||
| ECE5 | JR Z,$ED1A | |||
| ECE7 | INC A | Step the charge counter on | ||
| ECE8 | LD ($FD95),A | |||
| ECEB | AND $0F | Held long enough for a grenade? | ||
| ECED | CP $0F | |||
| ECEF | LD A,D | |||
| ECF0 | JR C,$ECD6 | |||
| ECF2 | LD A,($FD95) | Clear the charge, keep the mode bits | ||
| ECF5 | AND $F0 | |||
| ECF7 | LD ($FD95),A | |||
| ECFA | LD A,($FDE7) | Get grenades number | ||
| ECFD | OR A | |||
| ECFE | RET Z | |||
| ECFF | LD A,($5BDA) | Get player's column | ||
| ED02 | ADD A,A | |||
| ED03 | ADD A,A | |||
| ED04 | LD L,A | |||
| ED05 | LD A,($5BDB) | |||
| ED08 | LD H,A | |||
| ED09 | SUB $30 | |||
| ED0B | JR NC,$ED0F | |||
| ED0D | LD A,$04 | |||
| ED0F | LD B,A | |||
| ED10 | LD C,L | |||
| ED11 | CALL $F21B | Select grenade table $F81E | ||
| ED14 | RET Z | |||
| ED15 | LD A,$FF | -1 more grenades | ||
| ED17 | JP $6430 | => We've got A more grenades | ||
| ED1A | OR $C0 | |||
| ED1C | LD ($FD95),A | |||
| ED1F | LD HL,$5BDA | Player's object record address | ||
| ED22 | LD A,($5BE6) | |||
| ED25 | LD B,A | |||
| ED26 | CALL $ED31 | Look up entry in table at $EC81 | ||
| ED29 | CALL $F20C | Scan player-bullet table at $F82D, entry stride 5 | ||
| ED2C | LD A,$06 | Play shot sound $06 | ||
| ED2E | JP $642D | => Trigger sound effect A (copy its parameter into slot A) | ||
|
||||||||||||||||
|
Works out where a shot starts and how big it is, offsetting the firer's position by an amount looked up for the direction.
|
||||||||||||||||
| ED31 | LD A,(HL) | Row index * 4 into E | ||||||||||||||
| ED32 | ADD A,A | |||||||||||||||
| ED33 | ADD A,A | |||||||||||||||
| ED34 | LD E,A | |||||||||||||||
| ED35 | INC HL | |||||||||||||||
| ED36 | LD D,(HL) | |||||||||||||||
| ED37 | INC HL | |||||||||||||||
| ED38 | LD A,(HL) | |||||||||||||||
| ED39 | ADD A,E | |||||||||||||||
| ED3A | LD E,A | |||||||||||||||
| ED3B | LD HL,$EC81 | |||||||||||||||
| ED3E | LD A,B | Column doubled | ||||||||||||||
| ED3F | ADD A,A | |||||||||||||||
| ED40 | ADD A,A | Doubled again | ||||||||||||||
| ED41 | LD C,A | |||||||||||||||
| ED42 | LD B,$00 | |||||||||||||||
| ED44 | ADD HL,BC | Add row+column to get table entry offset | ||||||||||||||
| ED45 | LD A,(HL) | |||||||||||||||
| ED46 | ADD A,E | |||||||||||||||
| ED47 | LD E,A | |||||||||||||||
| ED48 | INC HL | |||||||||||||||
| ED49 | LD A,(HL) | |||||||||||||||
| ED4A | ADD A,D | |||||||||||||||
| ED4B | LD D,A | |||||||||||||||
| ED4C | INC HL | |||||||||||||||
| ED4D | LD C,(HL) | Read projectile size (C, B) | ||||||||||||||
| ED4E | INC HL | |||||||||||||||
| ED4F | LD B,(HL) | |||||||||||||||
| ED50 | EX DE,HL | |||||||||||||||
| ED51 | RET | |||||||||||||||
|
Used by the routine at E109.
|
||||
|
Rebuilds the sprite display list at $F900 each frame by walking the $FF00 linked buffer of live objects. For each object it looks up an attribute-table entry by type and writes a scaled position plus draw data into the list. The active Jeep is appended at the end, then the whole list is checksummed.
|
||||
| ED52 | LD (IY+$17),$FF | |||
| ED56 | LD HL,$FF00 | |||
| ED59 | LD DE,$F900 | |||
| ED5C | LD A,L | Align the link pointer to its page | ||
| ED5D | AND $F8 | |||
| ED5F | LD L,A | |||
| ED60 | CP (IY+$08) | Reached the end of the list? | ||
| ED63 | JR Z,$ED8E | |||
| ED65 | LD L,(HL) | Follow the buffer link | ||
| ED66 | INC L | |||
| ED67 | INC L | |||
| ED68 | LD A,(HL) | Read the record type | ||
| ED69 | AND $3F | |||
| ED6B | CP $27 | |||
| ED6D | JR NC,$ED5C | |||
| ED6F | ADD A,A | Turn the type into a table index | ||
| ED70 | ADD A,$16 | |||
| ED72 | LD C,A | |||
| ED73 | LD B,$E1 | |||
| ED75 | INC L | |||
| ED76 | LD A,(HL) | Scale the Y into the entry | ||
| ED77 | AND $1F | |||
| ED79 | ADD A,A | |||
| ED7A | ADD A,A | |||
| ED7B | LD (DE),A | |||
| ED7C | LD A,(BC) | Visible object? | ||
| ED7D | BIT 7,A | |||
| ED7F | JR NZ,$EDB9 | |||
| ED81 | INC E | Copy the fields into the list | ||
| ED82 | LD (DE),A | |||
| ED83 | INC E | |||
| ED84 | INC C | |||
| ED85 | INC L | |||
| ED86 | LD A,(HL) | |||
| ED87 | LD (DE),A | |||
| ED88 | INC E | |||
| ED89 | LD A,(BC) | |||
| ED8A | LD (DE),A | |||
| ED8B | INC E | |||
| ED8C | JR $ED5C | |||
| ED8E | LD A,($FDCB) | At the end: append the Jeep if active | ||
| ED91 | INC A | |||
| ED92 | JR Z,$EDA8 | |||
| ED94 | DEC A | |||
| ED95 | ADD A,A | |||
| ED96 | ADD A,A | |||
| ED97 | LD (DE),A | |||
| ED98 | EX DE,HL | |||
| ED99 | INC L | Fill in the Jeep entry | ||
| ED9A | LD (HL),$10 | |||
| ED9C | INC L | |||
| ED9D | LD A,($FDCC) | |||
| EDA0 | SUB $06 | |||
| EDA2 | LD (HL),A | |||
| EDA3 | INC L | |||
| EDA4 | LD (HL),$04 | |||
| EDA6 | INC L | |||
| EDA7 | EX DE,HL | |||
| EDA8 | LD A,$80 | Terminate the list | ||
| EDAA | LD (DE),A | |||
| EDAB | XOR A | |||
| EDAC | EX AF,AF' | |||
| EDAD | XOR A | |||
| EDAE | CALL $6424 | XOR AF and AF' with every byte in $F900-F9FF | ||
| EDB1 | LD ($FDF4),A | |||
| EDB4 | EX AF,AF' | |||
| EDB5 | LD ($FDF5),A | |||
| EDB8 | RET | |||
| EDB9 | AND $7F | Hidden object: jump to its handler | ||
| EDBB | EXX | |||
| EDBC | ADD A,A | |||
| EDBD | LD H,$E1 | |||
| EDBF | ADD A,$64 | |||
| EDC1 | LD L,A | |||
| EDC2 | LD E,(HL) | |||
| EDC3 | INC L | |||
| EDC4 | LD D,(HL) | |||
| EDC5 | PUSH DE | |||
| EDC6 | EXX | |||
| EDC7 | RET | |||
|
||||||||||||||
|
Writes into the destination record at DE: frame A at +$01, the source byte from HL+1 at +$02, count B at +$03, and $80 (active flag) at +$04, then restores DE.
|
||||||||||||||
| EDC8 | EX DE,HL | |||||||||||||
| EDC9 | INC L | |||||||||||||
| EDCA | LD (HL),A | Store A at record +$01 | ||||||||||||
| EDCB | INC L | |||||||||||||
| EDCC | INC E | |||||||||||||
| EDCD | LD A,(DE) | Copy source byte into +$02 | ||||||||||||
| EDCE | LD (HL),A | |||||||||||||
| EDCF | INC L | |||||||||||||
| EDD0 | LD (HL),B | Store B at +$03 | ||||||||||||
| EDD1 | INC L | |||||||||||||
| EDD2 | LD (HL),$80 | Set +$04 = $80 (active flag) | ||||||||||||
| EDD4 | EX DE,HL | |||||||||||||
| EDD5 | RET | |||||||||||||
|
||||||||||
|
Sets the record up, then counts a timer down and, when it lapses, reloads it randomly and triggers a spawn suited to the object's type.
|
||||||||||
| EDD6 | LD C,(HL) | Read record, set up type $1C, count $2D | ||||||||
| EDD7 | LD A,$1C | |||||||||
| EDD9 | LD B,$2D | |||||||||
| EDDB | CALL $EDC8 | Populate object record fields from A/B and a source byte | ||||||||
| EDDE | INC L | |||||||||
| EDDF | CP $20 | Check range, branch by type value | ||||||||
| EDE1 | JR NC,$EE0E | |||||||||
| EDE3 | CP $06 | |||||||||
| EDE5 | JR NC,$EDEB | |||||||||
| EDE7 | LD (HL),$08 | Reset timer to $08 | ||||||||
| EDE9 | JR $EE0E | |||||||||
| EDEB | DEC (HL) | Count down timer field | ||||||||
| EDEC | JR NZ,$EE0E | |||||||||
| EDEE | CALL $DC83 | Get random byte | ||||||||
| EDF1 | AND $0F | Reload timer with random $14-$23 | ||||||||
| EDF3 | ADD A,$14 | |||||||||
| EDF5 | LD (HL),A | |||||||||
| EDF6 | PUSH HL | |||||||||
| EDF7 | PUSH DE | |||||||||
| EDF8 | LD (IY+$16),$AA | Raise effect flag (IY+$16)=$AA | ||||||||
| EDFC | LD A,C | |||||||||
| EDFD | OR A | |||||||||
| EDFE | JR Z,$EE09 | |||||||||
| EE00 | CP $18 | |||||||||
| EE02 | JR C,$EE0C | |||||||||
| EE04 | CALL $E3AB | Fire type-specific spawn action | ||||||||
| EE07 | JR $EE0C | |||||||||
| EE09 | CALL $E3B5 | |||||||||
| EE0C | POP DE | |||||||||
| EE0D | POP HL | |||||||||
| EE0E | JP $ED5C | |||||||||
|
|
||||
|
Reads the scroll value out of the record and stores it as the current position.
|
||||
| EE11 | INC L | |||
| EE12 | LD A,(HL) | |||
| EE13 | JR $EE1F | |||
|
|
||||
|
Nudges the scroll position on, seeding it from the record when it has not been set yet.
|
||||
| EE15 | LD A,($FD97) | |||
| EE18 | INC A | |||
| EE19 | JR NZ,$EE22 | |||
| EE1B | INC L | |||
| EE1C | LD A,(HL) | |||
| EE1D | ADD A,$26 | |||
|
This entry point is used by the routine at EE11.
|
||||
| EE1F | LD ($FD97),A | |||
| EE22 | JR $EE0E | |||
|
|
||||
|
Steps an object record on to its next state: nudges the position fields, sets the type and flag bits, then writes the object into the collision map so it blocks movement at its new place.
|
||||
| EE24 | LD A,(DE) | Step the position field on | ||
| EE25 | ADD A,$04 | |||
| EE27 | LD (DE),A | |||
| EE28 | LD A,(DE) | Set the type and flag bits | ||
| EE29 | OR $82 | |||
| EE2B | LD (DE),A | |||
| EE2C | EX DE,HL | |||
| EE2D | INC L | Store the clip bound | ||
| EE2E | LD (HL),$04 | |||
| EE30 | INC L | |||
| EE31 | INC E | Take the paired coordinate | ||
| EE32 | LD A,(DE) | |||
| EE33 | SUB $04 | |||
| EE35 | LD (HL),A | Store it back one step lower | ||
| EE36 | INC L | |||
| EE37 | LD (HL),$02 | Mark the record live | ||
| EE39 | INC L | |||
| EE3A | EX DE,HL | |||
| EE3B | JR $EE0E | |||
| EE3D | LD A,(HL) | Take the frame from the record's low bits | ||
| EE3E | AND $1F | |||
| EE40 | LD C,A | |||
| EE41 | LD A,$1C | Set up the sprite frame and count | ||
| EE43 | LD B,$12 | |||
| EE45 | CALL $EDC8 | Populate object record fields from A/B and a source byte | ||
| EE48 | INC L | |||
| EE49 | SUB $12 | Wrap the counter when it underflows | ||
| EE4B | JR NC,$EE51 | |||
| EE4D | LD (HL),$00 | |||
| EE4F | JR $EE0E | |||
|
This entry point is used by the routine at EF37.
|
||||
| EE51 | ADD A,$04 | |||
| EE53 | CP $4E | |||
| EE55 | JR NC,$EE4F | |||
| EE57 | LD B,A | |||
| EE58 | LD A,(HL) | |||
| EE59 | AND $1F | |||
| EE5B | JR NZ,$EE64 | |||
| EE5D | CALL $DC83 | Get random byte | ||
| EE60 | AND $1F | |||
| EE62 | ADD A,$1E | |||
| EE64 | LD (HL),A | |||
| EE65 | DEC (HL) | |||
| EE66 | JR NZ,$EE4F | |||
| EE68 | CALL $DC83 | Get random byte | ||
| EE6B | AND $C0 | |||
| EE6D | ADD A,$3C | |||
| EE6F | LD (HL),A | |||
| EE70 | PUSH HL | |||
| EE71 | PUSH DE | |||
| EE72 | LD H,B | |||
| EE73 | LD L,C | |||
| EE74 | LD BC,$080B | |||
| EE77 | INC L | |||
| EE78 | BIT 7,L | |||
| EE7A | RES 7,L | |||
| EE7C | JR Z,$EE80 | |||
| EE7E | LD B,$06 | |||
| EE80 | CALL $E44D | |||
| EE83 | JR Z,$EE90 | |||
| EE85 | CALL $DC83 | Get random byte | ||
| EE88 | AND $03 | |||
| EE8A | JR NZ,$EE90 | |||
| EE8C | SET 7,(IX+$0B) | |||
| EE90 | POP DE | |||
| EE91 | POP HL | |||
| EE92 | JR $EE4F | |||
| EE94 | LD A,(HL) | |||
| EE95 | AND $1F | |||
| EE97 | LD C,A | |||
| EE98 | LD A,$18 | |||
| EE9A | LD B,$14 | |||
| EE9C | CALL $EDC8 | Populate object record fields from A/B and a source byte | ||
| EE9F | INC L | |||
| EEA0 | SUB $12 | |||
| EEA2 | JR NC,$EEA9 | |||
| EEA4 | LD (HL),$00 | |||
| EEA6 | JP $ED5C | |||
| EEA9 | ADD A,$04 | |||
| EEAB | CP $4E | |||
| EEAD | JR NC,$EEA6 | |||
| EEAF | LD B,A | |||
| EEB0 | LD A,(HL) | |||
| EEB1 | OR A | |||
| EEB2 | JR NZ,$EEC1 | |||
| EEB4 | LD A,B | |||
| EEB5 | CP $08 | |||
| EEB7 | JR C,$EEA6 | |||
| EEB9 | CALL $DC83 | Get random byte | ||
| EEBC | AND $80 | |||
| EEBE | ADD A,$28 | |||
| EEC0 | LD (HL),A | |||
| EEC1 | DEC (HL) | |||
| EEC2 | JR NZ,$EEA6 | |||
| EEC4 | CALL $DC83 | Get random byte | ||
| EEC7 | AND $3F | Fold to a value 0-63, offset by $0C | ||
| EEC9 | ADD A,$0C | |||
| EECB | BIT 4,(IY+$15) | Draw-mode flag picks the branch | ||
| EECF | JR Z,$EEDD | |||
| EED1 | LD A,($FDFA) | Too many enemies already? bail out | ||
| EED4 | CP $14 | |||
| EED6 | JR NC,$EEA6 | |||
| EED8 | INC (IY+$7A) | Otherwise bump the spawn counter | ||
| EEDB | JR $EEDF | Skip the alternate offset | ||
| EEDD | ADD A,$AF | Alternate offset, store the byte | ||
| EEDF | LD (HL),A | |||
| EEE0 | PUSH HL | Save the position pair | ||
| EEE1 | PUSH DE | |||
| EEE2 | LD H,B | Move the pending record base into HL, size $040B | ||
| EEE3 | LD L,C | |||
| EEE4 | LD BC,$040B | |||
| EEE7 | LD A,L | Odd column? widen the box and back off | ||
| EEE8 | INC L | |||
| EEE9 | INC L | |||
| EEEA | OR A | |||
| EEEB | JR Z,$EEF0 | Even: widen it, back off | ||
| EEED | DEC L | |||
| EEEE | LD B,$0C | |||
| EEF0 | CALL $E44D | Claim a slot | ||
| EEF3 | POP DE | Restore state, continue the loop | ||
| EEF4 | POP HL | |||
| EEF5 | JR $EEA6 | |||
| EEF6 | XOR A | |||
| EEF7 | LD C,(HL) | Take the frame from the record's low bits | ||
| EEF8 | LD A,(DE) | Set the type and flag bits | ||
| EEF9 | OR $82 | |||
| EEFB | LD (DE),A | |||
| EEFC | EX DE,HL | Store the clip bound $10 | ||
| EEFD | INC L | |||
| EEFE | LD (HL),$10 | |||
| EF00 | INC L | Take the paired coordinate | ||
| EF01 | INC E | |||
| EF02 | LD A,(DE) | Store it back one step lower | ||
| EF03 | SUB $04 | |||
| EF05 | LD (HL),A | |||
| EF06 | INC L | Mark the record live | ||
| EF07 | LD (HL),$02 | |||
| EF09 | INC L | Wrap the counter when it underflows | ||
| EF0A | EX DE,HL | |||
| EF0B | SUB $02 | Underflowed: clear the byte, continue | ||
| EF0D | JR NC,$EF15 | |||
| EF0F | INC L | |||
| EF10 | LD (HL),$00 | |||
| EF12 | JP $ED5C | |||
| EF15 | ADD A,$01 | Otherwise add one, save as the new height | ||
| EF17 | LD B,A | |||
| EF18 | INC HL | Skip an occupied buffer slot | ||
| EF19 | LD A,(HL) | |||
| EF1A | INC A | |||
| EF1B | JR Z,$EF12 | |||
| EF1D | LD (HL),$FF | Claim it | ||
| EF1F | PUSH HL | Save the position pair | ||
| EF20 | PUSH DE | |||
| EF21 | LD H,B | Move the base into HL, size $080A | ||
| EF22 | LD L,C | |||
| EF23 | LD BC,$080A | |||
| EF26 | CALL $E44D | Failed? adjust the offset and set height $05 | ||
| EF29 | JR Z,$EF33 | |||
| EF2B | LD A,L | |||
| EF2C | LD (HL),$00 | |||
| EF2E | SUB $09 | |||
| EF30 | LD L,A | |||
| EF31 | LD (HL),$05 | |||
| EF33 | POP DE | Restore state, loop back | ||
| EF34 | POP HL | |||
| EF35 | JR $EF12 | |||
| EF36 | IN A,($03) | |||
|
|
||||
| EF37 | INC BC | |||
| EF38 | LD A,(BC) | |||
| EF39 | EXX | |||
| EF3A | LD B,A | |||
| EF3B | EXX | |||
| EF3C | LD C,(HL) | |||
| EF3D | LD A,$0C | |||
| EF3F | LD B,$09 | |||
| EF41 | CALL $EDC8 | |||
| EF44 | SUB $0E | |||
| EF46 | JR NC,$EF4E | |||
| EF48 | INC L | |||
| EF49 | LD (HL),$00 | |||
| EF4B | JP $ED5C | |||
| EF4E | DEC A | |||
| EF4F | LD B,A | |||
| EF50 | INC L | |||
| EF51 | LD A,(HL) | |||
| EF52 | INC A | |||
| EF53 | JR Z,$EF4B | |||
| EF55 | LD (HL),$FF | |||
| EF57 | EXX | |||
| EF58 | INC B | |||
| EF59 | EXX | |||
| EF5A | JR NZ,$EF66 | |||
| EF5C | INC (IY+$61) | |||
| EF5F | BIT 0,(IY+$61) | |||
| EF63 | JR Z,$EF4B | |||
| EF65 | INC B | |||
| EF66 | PUSH HL | |||
| EF67 | PUSH DE | |||
| EF68 | LD H,B | |||
| EF69 | LD L,C | |||
| EF6A | LD BC,$0806 | |||
| EF6D | CALL $E44D | |||
| EF70 | JR Z,$EF78 | |||
| EF72 | LD A,L | |||
| EF73 | SUB $09 | |||
| EF75 | LD L,A | |||
| EF76 | LD (HL),$08 | |||
| EF78 | POP DE | |||
| EF79 | POP HL | |||
| EF7A | JR $EF4B | |||
| EF7C | LD A,(HL) | |||
| EF7D | CP $0B | |||
| EF7F | JR NZ,$EF4B | |||
| EF81 | LD B,$24 | |||
| EF83 | XOR A | |||
| EF84 | LD (DE),A | |||
| EF85 | LD A,$38 | |||
| EF87 | CALL $EDC8 | |||
| EF8A | DEC L | |||
| EF8B | LD A,$4A | |||
| EF8D | LD (DE),A | |||
| EF8E | LD A,$38 | |||
| EF90 | CALL $EDC8 | |||
| EF93 | BIT 4,(IY+$15) | |||
| EF97 | JP NZ,$ED5C | |||
| EF9A | SUB $0C | |||
| EF9C | LD B,A | |||
| EF9D | LD C,$33 | |||
| EF9F | ADD A,$18 | |||
| EFA1 | JR $EFDD | |||
| EFA3 | LD A,(DE) | |||
| EFA4 | LD C,A | |||
| EFA5 | LD A,$06 | |||
| EFA7 | LD B,$26 | |||
| EFA9 | CALL $EDC8 | |||
| EFAC | DEC L | |||
| EFAD | LD A,C | |||
| EFAE | ADD A,$1A | |||
| EFB0 | LD (DE),A | |||
| EFB1 | LD B,$26 | |||
| EFB3 | LD A,$06 | |||
| EFB5 | CALL $EDC8 | |||
| EFB8 | EX DE,HL | |||
| EFB9 | LD (HL),$82 | |||
| EFBB | INC L | |||
| EFBC | LD (HL),C | |||
| EFBD | INC L | |||
| EFBE | LD A,(DE) | |||
| EFBF | SUB $05 | |||
| EFC1 | LD B,A | |||
| EFC2 | LD (HL),B | |||
| EFC3 | INC L | |||
| EFC4 | LD (HL),$1D | |||
| EFC6 | INC L | |||
| EFC7 | LD A,C | |||
| EFC8 | ADD A,$20 | |||
| EFCA | OR $82 | |||
| EFCC | LD (HL),A | |||
| EFCD | INC L | |||
| EFCE | NEG | |||
| EFD0 | ADD A,$80 | |||
| EFD2 | LD (HL),A | |||
| EFD3 | INC L | |||
| EFD4 | LD (HL),B | |||
| EFD5 | INC L | |||
| EFD6 | LD (HL),$1D | |||
| EFD8 | INC L | |||
| EFD9 | LD (HL),$80 | |||
| EFDB | EX DE,HL | |||
| EFDC | LD A,B | |||
| EFDD | INC L | |||
| EFDE | CP $4B | |||
| EFE0 | JP NC,$ED5C | |||
| EFE3 | CP $15 | |||
| EFE5 | JR NC,$EFEF | |||
| EFE7 | LD (HL),$01 | |||
| EFE9 | INC L | |||
| EFEA | LD (HL),$00 | |||
| EFEC | JP $ED5C | |||
| EFEF | DEC (HL) | |||
| EFF0 | JP NZ,$ED5C | |||
| EFF3 | LD (HL),$0C | |||
| EFF5 | CALL $DC83 | |||
| EFF8 | AND $07 | |||
| EFFA | ADD A,B | |||
| EFFB | SUB $30 | |||
| EFFD | EX AF,AF' | |||
| EFFE | INC L | |||
| EFFF | LD A,(HL) | |||
| F000 | ADD A,$10 | |||
| F002 | LD (HL),A | |||
| F003 | LD A,($FDE5) | |||
| F006 | ADD A,$05 | |||
| F008 | RLCA | |||
| F009 | RLCA | |||
| F00A | RLCA | |||
| F00B | CP (HL) | |||
| F00C | JP C,$ED5C | |||
| F00F | LD A,(HL) | |||
| F010 | AND $30 | |||
| F012 | XOR $30 | |||
| F014 | PUSH HL | |||
| F015 | PUSH DE | |||
| F016 | LD E,$00 | |||
| F018 | LD A,C | |||
| F019 | LD BC,$0C07 | |||
| F01C | JR NZ,$F021 | |||
| F01E | INC C | |||
| F01F | LD E,$12 | |||
| F021 | LD L,$1F | |||
| F023 | ADD A,$0D | |||
| F025 | EX AF,AF' | |||
| F026 | LD H,A | |||
| F027 | JR NC,$F030 | |||
| F029 | EX AF,AF' | |||
| F02A | BIT 6,A | |||
| F02C | JR NZ,$F03B | |||
| F02E | JR $F035 | |||
| F030 | EX AF,AF' | |||
| F031 | BIT 6,A | |||
| F033 | JR Z,$F03B | |||
| F035 | NEG | |||
| F037 | ADD A,$80 | |||
| F039 | JR $F03F | |||
| F03B | LD B,$04 | |||
| F03D | LD L,$FE | |||
| F03F | SUB E | |||
| F040 | PUSH AF | |||
| F041 | CALL $E44D | |||
| F044 | POP DE | |||
| F045 | CALL $DC83 | |||
| F048 | AND $07 | |||
| F04A | ADD A,D | |||
| F04B | LD (IX+$11),A | |||
| F04E | POP DE | |||
| F04F | POP HL | |||
| F050 | JR $F076 | |||
| F052 | EX DE,HL | |||
| F053 | LD A,(HL) | |||
| F054 | LD C,A | |||
| F055 | CP $40 | |||
| F057 | JR C,$F05B | |||
| F059 | SUB $04 | |||
| F05B | OR $84 | |||
| F05D | LD (HL),A | |||
| F05E | INC L | |||
| F05F | LD (HL),$1C | |||
| F061 | INC L | |||
| F062 | INC E | |||
| F063 | LD A,(DE) | |||
| F064 | LD B,A | |||
| F065 | LD (HL),A | |||
| F066 | INC L | |||
| F067 | LD (HL),$0E | |||
| F069 | INC L | |||
| F06A | EX DE,HL | |||
| F06B | INC L | |||
| F06C | CP $70 | |||
| F06E | JR NC,$F076 | |||
| F070 | CP $14 | |||
| F072 | JR NC,$F09E | |||
| F074 | LD (HL),$1C | |||
| F076 | PUSH BC | |||
| F077 | EXX | |||
| F078 | POP DE | |||
| F079 | LD A,D | |||
| F07A | SUB $08 | |||
| F07C | LD D,A | |||
| F07D | LD A,E | |||
| F07E | ADD A,$0D | |||
| F080 | LD E,A | |||
| F081 | LD HL,$F8EA | |||
| F084 | LD B,$10 | |||
| F086 | CALL $E77D | |||
| F089 | EXX | |||
| F08A | JP Z,$ED5C | |||
| F08D | DEC L | |||
| F08E | DEC L | |||
| F08F | SET 7,(HL) | |||
| F091 | PUSH HL | |||
| F092 | PUSH DE | |||
| F093 | LD BC,$0304 | |||
| F096 | CALL $6415 | |||
| F099 | POP DE | |||
| F09A | POP HL | |||
| F09B | JP $ED5C | |||
| F09E | EX AF,AF' | |||
| F09F | LD A,(HL) | |||
| F0A0 | CP $19 | |||
| F0A2 | JR C,$F0A6 | |||
| F0A4 | LD (HL),$17 | |||
| F0A6 | EX AF,AF' | |||
| F0A7 | DEC (HL) | |||
| F0A8 | JR NZ,$F076 | |||
| F0AA | LD (HL),$17 | |||
| F0AC | SUB $10 | |||
| F0AE | PUSH DE | |||
| F0AF | PUSH HL | |||
| F0B0 | PUSH BC | |||
| F0B1 | LD D,A | |||
| F0B2 | CP $48 | |||
| F0B4 | LD E,$03 | |||
| F0B6 | JR C,$F0BA | |||
| F0B8 | LD E,$08 | |||
| F0BA | LD A,($5BDE) | |||
| F0BD | CP E | |||
| F0BE | JR C,$F0E2 | |||
| F0C0 | ADD A,E | |||
| F0C1 | CP $1E | |||
| F0C3 | JR NC,$F0E2 | |||
| F0C5 | LD A,C | |||
| F0C6 | BIT 6,A | |||
| F0C8 | JR NZ,$F0CC | |||
| F0CA | ADD A,$0A | |||
| F0CC | ADD A,$04 | |||
| F0CE | LD E,A | |||
| F0CF | LD C,$80 | |||
| F0D1 | CALL $F1BB | |||
| F0D4 | JR Z,$F0E2 | |||
| F0D6 | SET 1,(IX+$00) | |||
| F0DA | LD (IX+$07),$A8 | |||
| F0DE | LD (IX+$06),$05 | |||
| F0E2 | POP BC | |||
| F0E3 | POP HL | |||
| F0E4 | POP DE | |||
| F0E5 | JR $F076 | |||
| F0E7 | EX DE,HL | |||
| F0E8 | LD BC,$180C | |||
| F0EB | LD (HL),$84 | |||
| F0ED | INC L | |||
| F0EE | LD (HL),B | |||
| F0EF | INC L | |||
| F0F0 | INC E | |||
| F0F1 | LD A,(DE) | |||
| F0F2 | ADD A,$01 | |||
| F0F4 | LD (HL),A | |||
| F0F5 | INC L | |||
| F0F6 | LD (HL),C | |||
| F0F7 | INC L | |||
| F0F8 | LD (HL),$00 | |||
| F0FA | INC L | |||
| F0FB | LD (HL),$0F | |||
| F0FD | INC L | |||
| F0FE | ADD A,$01 | |||
| F100 | LD (HL),A | |||
| F101 | INC L | |||
| F102 | LD (HL),$20 | |||
| F104 | INC L | |||
| F105 | EX DE,HL | |||
| F106 | INC L | |||
| F107 | LD C,$81 | |||
| F109 | SUB $16 | |||
| F10B | JP C,$EE4C | |||
| F10E | JP $EE51 | |||
| F111 | JP $F076 | |||
| F114 | EX DE,HL | |||
| F115 | LD A,(HL) | |||
| F116 | LD (HL),$81 | |||
| F118 | INC L | |||
| F119 | LD (HL),A | |||
| F11A | INC E | |||
| F11B | INC L | |||
| F11C | LD A,(DE) | |||
| F11D | LD (HL),A | |||
| F11E | INC L | |||
| F11F | DEC E | |||
| F120 | LD (HL),E | |||
| F121 | INC L | |||
| F122 | EX DE,HL | |||
| F123 | JP $ED5C | |||
| F126 | EX DE,HL | |||
| F127 | LD B,(HL) | |||
| F128 | LD (HL),$81 | |||
| F12A | INC L | |||
| F12B | LD (HL),B | |||
| F12C | INC E | |||
| F12D | INC L | |||
| F12E | LD A,(DE) | |||
| F12F | LD C,A | |||
| F130 | LD (HL),A | |||
| F131 | INC L | |||
| F132 | DEC E | |||
| F133 | LD (HL),E | |||
| F134 | INC L | |||
| F135 | LD (HL),$81 | |||
| F137 | INC L | |||
| F138 | LD A,B | |||
| F139 | ADD A,$08 | |||
| F13B | LD (HL),A | |||
| F13C | INC L | |||
| F13D | LD A,C | |||
| F13E | SUB $08 | |||
| F140 | JR NC,$F144 | |||
| F142 | LD A,$04 | |||
| F144 | LD (HL),A | |||
| F145 | INC L | |||
| F146 | LD (HL),E | |||
| F147 | INC L | |||
| F148 | EX DE,HL | |||
| F149 | JP $ED5C | |||
| F14C | LD C,(HL) | |||
| F14D | INC L | |||
| F14E | LD A,(HL) | |||
| F14F | INC L | |||
| F150 | CP $06 | |||
| F152 | JR Z,$F15A | |||
| F154 | JR NC,$F149 | |||
| F156 | LD (HL),$00 | |||
| F158 | JR $F149 | |||
| F15A | LD A,(HL) | |||
| F15B | INC A | |||
| F15C | JR Z,$F149 | |||
| F15E | LD (HL),$FF | |||
| F160 | PUSH DE | |||
| F161 | PUSH HL | |||
| F162 | LD H,$FD | |||
| F164 | LD L,C | |||
| F165 | LD BC,$080D | |||
| F168 | LD A,$80 | |||
| F16A | LD (DE),A | |||
| F16B | CALL $E44D | |||
| F16E | JR Z,$F17C | |||
| F170 | LD (IX+$06),$00 | |||
| F174 | LD (IX+$0F),$14 | |||
| F178 | LD (IX+$11),$01 | |||
| F17C | POP HL | |||
| F17D | POP DE | |||
| F17E | JR $F149 | |||
| F180 | LD (IX+$11),$01 | |||
| F184 | LD A,(IX+$04) | |||
| F187 | ADD A,A | |||
| F188 | ADD A,A | |||
| F189 | LD E,A | |||
| F18A | LD A,(IX+$05) | |||
| F18D | LD D,A | |||
| F18E | CP $34 | |||
| F190 | JR C,$F199 | |||
| F192 | RLA | |||
| F193 | JR C,$F199 | |||
| F195 | LD (IX+$12),$01 | |||
| F199 | LD D,A | |||
| F19A | DEC (IX+$0F) | |||
| F19D | JP NZ,$E9B9 | |||
| F1A0 | LD (IX+$0F),$14 | |||
| F1A4 | LD A,E | |||
| F1A5 | CP $40 | |||
| F1A7 | JR NC,$F1AB | |||
| F1A9 | ADD A,$08 | |||
| F1AB | SUB $04 | |||
| F1AD | LD E,A | |||
| F1AE | INC D | |||
| F1AF | LD C,$80 | |||
| F1B1 | PUSH IX | |||
| F1B3 | CALL $F1BB | |||
| F1B6 | POP IX | |||
| F1B8 | JP $E9B9 | |||
| F1BB | LD A,E | |||
| F1BC | CP $78 | |||
| F1BE | JR NC,$F1DB | |||
| F1C0 | LD A,D | |||
| F1C1 | CP $60 | |||
| F1C3 | JR NC,$F1DB | |||
| F1C5 | CP $04 | |||
| F1C7 | JR C,$F1DB | |||
| F1C9 | LD A,($5BDF) | |||
| F1CC | ADD A,$05 | |||
| F1CE | LD B,A | |||
| F1CF | LD A,($FDE3) | |||
| F1D2 | ADD A,$03 | |||
| F1D4 | OR C | |||
| F1D5 | LD C,A | |||
| F1D6 | EX DE,HL | |||
| F1D7 | XOR A | |||
| F1D8 | JP $F20F | |||
| F1DB | XOR A | |||
| F1DC | RET | |||
| F1DD | LD A,(BC) | |||
| F1DE | JR NC,$F233 | |||
| F1E0 | LD A,($FDD3) | |||
| F1E3 | LD C,A | |||
| F1E4 | ADD A,A | |||
| F1E5 | ADD A,A | |||
| F1E6 | ADD A,(IY+$55) | |||
| F1E9 | SUB E | |||
| F1EA | JR NC,$F233 | |||
| F1EC | ADD A,$07 | |||
| F1EE | JR NC,$F1FB | |||
| F1F0 | BIT 4,B | |||
| F1F2 | JR NZ,$F233 | |||
| F1F4 | SET 4,(IY+$5A) | |||
| F1F8 | LD L,C | |||
| F1F9 | JR $F20F | |||
| F1FB | ADD A,$0B | |||
| F1FD | JR C,$F233 | |||
| F1FF | ADD A,$C3 | |||
| F201 | OR $F4 | |||
|
This entry point is used by the routine at DEEF.
|
||||
| F203 | JP $F381 | |||
|
This entry point is used by the routine at DEEF.
|
||||
| F206 | JP $F707 | |||
|
This entry point is used by the routine at DEEF.
|
||||
| F209 | JP $F26E | |||
|
This entry point is used by the routine at ECC1.
|
||||
| F20C | JP $F24A | |||
| F20F | JP $F4E9 | |||
|
This entry point is used by the routine at DEEF.
|
||||
| F212 | JP $F36D | |||
| F215 | JP $F582 | |||
| F218 | JP $F5A0 | |||
|
This entry point is used by the routine at ECC1.
|
||||
| F21B | JP $F4E3 | |||
|
This entry point is used by the routine at E5DB.
|
||||
| F21E | JP $F34F | |||
|
This entry point is used by the routine at DCDF.
|
||||
| F221 | JP $F224 | |||
| F224 | LD HL,$F73C | |||
| F227 | CALL $F237 | |||
| F22A | CALL $F237 | |||
| F22D | CALL $F237 | |||
| F230 | CALL $F23B | |||
| F233 | LD B,$14 | |||
| F235 | JR $F23D | |||
| F237 | LD B,$0E | |||
| F239 | JR $F23D | |||
| F23B | LD B,$05 | |||
| F23D | PUSH BC | |||
| F23E | LD (HL),$00 | |||
| F240 | INC HL | |||
| F241 | DJNZ $F23E | |||
| F243 | POP BC | |||
| F244 | LD A,(HL) | |||
| F245 | INC A | |||
| F246 | JR NZ,$F23D | |||
| F248 | INC HL | |||
| F249 | RET | |||
| F24A | LD IX,$F82D | |||
| F24E | LD DE,$0005 | |||
| F251 | LD A,(IX+$00) | |||
| F254 | INC A | |||
| F255 | RET Z | |||
| F256 | DEC A | |||
| F257 | JR Z,$F25D | |||
| F259 | ADD IX,DE | |||
| F25B | JR $F251 | |||
| F25D | LD (IX+$01),L | |||
| F260 | LD (IX+$02),H | |||
| F263 | LD (IX+$03),C | |||
| F266 | LD (IX+$04),B | |||
| F269 | LD (IX+$00),$0E | |||
| F26D | RET | |||
| F26E | LD IX,$F82D | |||
| F272 | LD HL,$F8ED | |||
| F275 | LD (HL),$90 | |||
| F277 | LD ($FDBD),HL | |||
| F27A | LD A,(IX+$00) | |||
| F27D | INC A | |||
| F27E | RET Z | |||
| F27F | DEC A | |||
| F280 | JR NZ,$F289 | |||
| F282 | LD DE,$0005 | |||
| F285 | ADD IX,DE | |||
| F287 | JR $F27A | |||
| F289 | LD L,(IX+$01) | |||
| F28C | LD H,(IX+$02) | |||
| F28F | CALL $F5BF | |||
| F292 | LD A,(IX+$03) | |||
| F295 | ADD A,L | |||
| F296 | LD (IX+$01),A | |||
| F299 | LD L,A | |||
| F29A | RLA | |||
| F29B | JP C,$F33D | |||
| F29E | LD A,(IX+$04) | |||
| F2A1 | ADD A,H | |||
| F2A2 | BIT 5,(IY+$15) | |||
| F2A6 | JR Z,$F2A9 | |||
| F2A8 | INC A | |||
| F2A9 | LD (IX+$02),A | |||
| F2AC | LD H,A | |||
| F2AD | CP $60 | |||
| F2AF | JP NC,$F33D | |||
| F2B2 | CP $05 | |||
| F2B4 | JP C,$F33D | |||
| F2B7 | DEC (IX+$00) | |||
| F2BA | JP Z,$F348 | |||
| F2BD | EX DE,HL | |||
| F2BE | LD HL,($FDBD) | |||
| F2C1 | LD (HL),D | |||
| F2C2 | INC L | |||
| F2C3 | LD (HL),E | |||
| F2C4 | INC L | |||
| F2C5 | LD (HL),$90 | |||
| F2C7 | LD ($FDBD),HL | |||
| F2CA | LD A,($FDDA) | |||
| F2CD | LD B,A | |||
| F2CE | BIT 7,A | |||
| F2D0 | JR Z,$F32F | |||
| F2D2 | LD A,($FDD4) | |||
| F2D5 | SUB D | |||
| F2D6 | JR NC,$F32F | |||
| F2D8 | ADD A,$0A | |||
| F2DA | JR NC,$F32F | |||
| F2DC | LD A,($FDD3) | |||
| F2DF | LD C,A | |||
| F2E0 | ADD A,A | |||
| F2E1 | ADD A,A | |||
| F2E2 | ADD A,(IY+$55) | |||
| F2E5 | SUB E | |||
| F2E6 | JR NC,$F32F | |||
| F2E8 | ADD A,$07 | |||
| F2EA | JR NC,$F2F7 | |||
| F2EC | BIT 4,B | |||
| F2EE | JR NZ,$F32F | |||
| F2F0 | SET 4,(IY+$5A) | |||
| F2F4 | LD L,C | |||
| F2F5 | JR $F30B | |||
| F2F7 | ADD A,$0B | |||
| F2F9 | JR C,$F32F | |||
| F2FB | ADD A,$07 | |||
| F2FD | JR NC,$F32F | |||
| F2FF | BIT 1,B | |||
| F301 | JR NZ,$F32F | |||
| F303 | SET 1,(IY+$5A) | |||
| F307 | LD A,C | |||
| F308 | ADD A,$04 | |||
| F30A | LD L,A | |||
| F30B | LD H,(IY+$54) | |||
| F30E | PUSH DE | |||
| F30F | LD BC,$1302 | |||
| F312 | PUSH IX | |||
| F314 | CALL $E10F | |||
| F317 | JR Z,$F321 | |||
| F319 | LD (IX+$11),$12 | |||
| F31D | SET 6,(IX+$0B) | |||
| F321 | LD A,$05 | |||
| F323 | CALL $642D | |||
| F326 | LD BC,$0104 | |||
| F329 | CALL $6415 | |||
| F32C | POP IX | |||
| F32E | POP DE | |||
| F32F | EX DE,HL | |||
| F330 | INC L | |||
| F331 | CALL $DC86 | |||
| F334 | DEC L | |||
| F335 | JR C,$F344 | |||
| F337 | CALL $F5C6 | |||
| F33A | JP $F282 | |||
| F33D | LD (IX+$00),$00 | |||
| F341 | JP $F282 | |||
| F344 | LD (IX+$00),$00 | |||
| F348 | EX DE,HL | |||
| F349 | CALL $F6C2 | |||
| F34C | JP $F282 | |||
| F34F | LD A,H | |||
| F350 | LD L,$00 | |||
| F352 | ADD A,$02 | |||
| F354 | LD C,A | |||
| F355 | LD H,A | |||
| F356 | JP P,$F35D | |||
| F359 | DEC L | |||
| F35A | SCF | |||
| F35B | JR $F35E | |||
| F35D | XOR A | |||
| F35E | RR H | |||
| F360 | RR L | |||
| F362 | RR H | |||
| F364 | RR L | |||
| F366 | RR H | |||
| F368 | RR L | |||
| F36A | ADD HL,DE | |||
| F36B | LD A,H | |||
| F36C | RET | |||
| F36D | CALL $F37B | |||
| F370 | LD IX,$F81E | |||
| F374 | LD A,$90 | |||
| F376 | LD ($F8EA),A | |||
| F379 | JR $F385 | |||
| F37B | LD IX,$F7C9 | |||
| F37F | JR $F385 | |||
| F381 | LD IX,$F73C | |||
| F385 | LD C,(IX+$00) | |||
| F388 | INC C | |||
| F389 | RET Z | |||
| F38A | DEC C | |||
| F38B | JP Z,$F4DB | |||
| F38E | LD D,(IX+$03) | |||
| F391 | LD E,(IX+$02) | |||
| F394 | PUSH DE | |||
| F395 | SRL D | |||
| F397 | SRL E | |||
| F399 | BIT 3,(IX+$00) | |||
| F39D | JR Z,$F3A4 | |||
| F39F | CALL $F68A | |||
| F3A2 | JR $F3A7 | |||
| F3A4 | CALL $F5A0 | |||
| F3A7 | LD A,(IX+$00) | |||
| F3AA | BIT 3,A | |||
| F3AC | JR Z,$F3CE | |||
| F3AE | AND $03 | |||
| F3B0 | JR NZ,$F3CE | |||
| F3B2 | LD D,(IX+$0A) | |||
| F3B5 | LD E,(IX+$09) | |||
| F3B8 | LD H,(IX+$08) | |||
| F3BB | CALL $F34F | |||
| F3BE | RLA | |||
| F3BF | JR C,$F3C5 | |||
| F3C1 | POP DE | |||
| F3C2 | JP $F481 | |||
| F3C5 | LD (IX+$0A),H | |||
| F3C8 | LD (IX+$09),L | |||
| F3CB | LD (IX+$08),C | |||
| F3CE | LD A,(IX+$01) | |||
| F3D1 | LD B,(IX+$06) | |||
| F3D4 | LD C,(IX+$00) | |||
| F3D7 | LD E,(IX+$04) | |||
| F3DA | LD D,(IX+$05) | |||
| F3DD | LD HL,$0000 | |||
| F3E0 | BIT 5,C | |||
| F3E2 | RES 5,C | |||
| F3E4 | JR NZ,$F3E9 | |||
| F3E6 | SUB D | |||
| F3E7 | JR NC,$F3F3 | |||
| F3E9 | INC H | |||
| F3EA | ADD A,E | |||
| F3EB | JR C,$F3F3 | |||
| F3ED | DJNZ $F3E9 | |||
| F3EF | SET 5,C | |||
| F3F1 | JR $F3F6 | |||
| F3F3 | INC L | |||
| F3F4 | DJNZ $F3E6 | |||
| F3F6 | LD (IX+$01),A | |||
| F3F9 | LD (IX+$00),C | |||
| F3FC | POP DE | |||
| F3FD | LD A,H | |||
| F3FE | RL C | |||
| F400 | JR C,$F404 | |||
| F402 | NEG | |||
| F404 | ADD A,D | |||
| F405 | BIT 5,(IY+$15) | |||
| F409 | JR Z,$F40D | |||
| F40B | INC A | |||
| F40C | INC A | |||
| F40D | CP $C0 | |||
| F40F | JR C,$F41C | |||
| F411 | LD A,(IX+$00) | |||
| F414 | AND $0C | |||
| F416 | JP Z,$F4D7 | |||
| F419 | JP $F481 | |||
| F41C | CP $09 | |||
| F41E | JP C,$F411 | |||
| F421 | LD (IX+$03),A | |||
| F424 | LD D,A | |||
| F425 | LD A,L | |||
| F426 | RL C | |||
| F428 | JR C,$F430 | |||
| F42A | LD A,E | |||
| F42B | SUB L | |||
| F42C | JR C,$F411 | |||
| F42E | JR $F433 | |||
| F430 | ADD A,E | |||
| F431 | JR C,$F411 | |||
| F433 | LD E,A | |||
| F434 | LD (IX+$02),A | |||
| F437 | JR C,$F411 | |||
| F439 | SRL D | |||
| F43B | SRL E | |||
| F43D | PUSH DE | |||
| F43E | BIT 3,(IX+$00) | |||
| F442 | JR Z,$F453 | |||
| F444 | LD H,$01 | |||
| F446 | CALL $F5DD | |||
| F449 | POP DE | |||
| F44A | LD A,(IX+$00) | |||
| F44D | AND $03 | |||
| F44F | JR NZ,$F457 | |||
| F451 | JR $F470 | |||
| F453 | CALL $F582 | |||
| F456 | POP DE | |||
| F457 | LD A,($FDE3) | |||
| F45A | INC A | |||
| F45B | SUB E | |||
| F45C | JR NC,$F470 | |||
| F45E | ADD A,$06 | |||
| F460 | JR NC,$F470 | |||
| F462 | LD A,($FDE4) | |||
| F465 | SUB D | |||
| F466 | JR NC,$F470 | |||
| F468 | ADD A,$05 | |||
| F46A | JR NC,$F470 | |||
| F46C | SET 0,(IY+$62) | |||
| F470 | LD A,(IX+$07) | |||
| F473 | SUB (IX+$06) | |||
| F476 | LD (IX+$07),A | |||
| F479 | JR NC,$F4DB | |||
| F47B | LD D,(IX+$03) | |||
| F47E | LD E,(IX+$02) | |||
| F481 | SRL D | |||
| F483 | SRL E | |||
| F485 | LD A,(IX+$00) | |||
| F488 | AND $0C | |||
| F48A | JR Z,$F4D4 | |||
| F48C | LD HL,$F8EA | |||
| F48F | LD A,D | |||
| F490 | ADD A,$0F | |||
| F492 | LD (HL),A | |||
| F493 | INC L | |||
| F494 | LD A,E | |||
| F495 | ADD A,$0F | |||
| F497 | LD (HL),A | |||
| F498 | LD A,($FDE4) | |||
| F49B | SUB $06 | |||
| F49D | SUB D | |||
| F49E | JR NC,$F4BA | |||
| F4A0 | ADD A,$14 | |||
| F4A2 | JR NC,$F4BA | |||
| F4A4 | LD A,($FDE3) | |||
| F4A7 | SUB E | |||
| F4A8 | JP C,$F4B1 | |||
| F4AB | SUB $06 | |||
| F4AD | JR NC,$F4BA | |||
| F4AF | JR $F4B6 | |||
| F4B1 | ADD A,$07 | |||
| F4B3 | JP NC,$F4BA | |||
| F4B6 | SET 0,(IY+$62) | |||
| F4BA | LD H,$00 | |||
| F4BC | CALL $F5DD | |||
| F4BF | LD A,($F8D3) | |||
| F4C2 | LD L,A | |||
| F4C3 | LD A,($F8D4) | |||
| F4C6 | LD H,A | |||
| F4C7 | LD A,($F8D5) | |||
| F4CA | CALL $642A | |||
| F4CD | LD A,$04 | |||
| F4CF | CALL $642D | |||
| F4D2 | JR $F4D7 | |||
| F4D4 | CALL $F6C2 | |||
| F4D7 | XOR A | |||
| F4D8 | LD (IX+$00),A | |||
| F4DB | LD DE,$000E | |||
| F4DE | ADD IX,DE | |||
| F4E0 | JP $F385 | |||
| F4E3 | LD IX,$F81E | |||
| F4E7 | JR $F4ED | |||
| F4E9 | LD IX,$F7C9 | |||
| F4ED | SET 7,B | |||
| F4EF | ADD A,A | |||
| F4F0 | JR NC,$F4F4 | |||
| F4F2 | OR $80 | |||
| F4F4 | JR $F4FA | |||
| F4F6 | LD IX,$F73C | |||
| F4FA | SLA H | |||
| F4FC | SLA L | |||
| F4FE | EX AF,AF' | |||
| F4FF | LD DE,$000E | |||
| F502 | LD A,(IX+$00) | |||
| F505 | INC A | |||
| F506 | RET Z | |||
| F507 | DEC A | |||
| F508 | JR Z,$F50E | |||
| F50A | ADD IX,DE | |||
| F50C | JR $F502 | |||
| F50E | LD A,B | |||
| F50F | RLA | |||
| F510 | LD B,$90 | |||
| F512 | JR NC,$F516 | |||
| F514 | SET 3,B | |||
| F516 | SUB H | |||
| F517 | JR NC,$F51D | |||
| F519 | RES 7,B | |||
| F51B | NEG | |||
| F51D | LD D,A | |||
| F51E | SLA C | |||
| F520 | LD A,C | |||
| F521 | JR NC,$F525 | |||
| F523 | SET 2,B | |||
| F525 | SUB L | |||
| F526 | JR NC,$F52C | |||
| F528 | NEG | |||
| F52A | JR $F52E | |||
| F52C | SET 6,B | |||
| F52E | LD E,A | |||
| F52F | CP D | |||
| F530 | JR C,$F535 | |||
| F532 | LD C,E | |||
| F533 | JR $F536 | |||
| F535 | LD C,D | |||
| F536 | LD (IX+$00),B | |||
| F539 | LD A,E | |||
| F53A | SRL A | |||
| F53C | LD (IX+$01),A | |||
| F53F | LD (IX+$02),L | |||
| F542 | LD (IX+$03),H | |||
| F545 | LD (IX+$04),E | |||
| F548 | LD (IX+$05),D | |||
| F54B | EX AF,AF' | |||
| F54C | BIT 7,A | |||
| F54E | RES 7,A | |||
| F550 | LD (IX+$06),A | |||
| F553 | JR Z,$F557 | |||
| F555 | LD C,$50 | |||
| F557 | LD (IX+$07),C | |||
| F55A | BIT 3,B | |||
| F55C | JR Z,$F580 | |||
| F55E | LD D,$00 | |||
| F560 | LD (IX+$09),D | |||
| F563 | LD (IX+$0A),D | |||
| F566 | LD A,C | |||
| F567 | AND $E0 | |||
| F569 | BIT 4,C | |||
| F56B | JR Z,$F56F | |||
| F56D | ADD A,$20 | |||
| F56F | LD (IX+$07),A | |||
| F572 | RRA | |||
| F573 | RRA | |||
| F574 | RRA | |||
| F575 | RRA | |||
| F576 | OR A | |||
| F577 | RET Z | |||
| F578 | RRA | |||
| F579 | LD (IX+$06),A | |||
| F57C | LD (IX+$08),$E0 | |||
| F580 | OR A | |||
| F581 | RET | |||
| F582 | CALL $F5CD | |||
| F585 | RET NC | |||
| F586 | EX DE,HL | |||
| F587 | LD A,L | |||
| F588 | PUSH AF | |||
| F589 | CALL $98D9 | |||
| F58C | POP AF | |||
| F58D | AND $03 | |||
| F58F | LD B,A | |||
| F590 | LD A,$C0 | |||
| F592 | JR Z,$F598 | |||
| F594 | RRA | |||
| F595 | RRA | |||
| F596 | DJNZ $F594 | |||
| F598 | LD D,A | |||
| F599 | OR (HL) | |||
| F59A | LD (HL),A | |||
| F59B | INC H | |||
| F59C | LD A,D | |||
| F59D | OR (HL) | |||
| F59E | LD (HL),A | |||
| F59F | RET | |||
| F5A0 | CALL $F5CD | |||
| F5A3 | RET NC | |||
| F5A4 | EX DE,HL | |||
| F5A5 | LD A,L | |||
| F5A6 | PUSH AF | |||
| F5A7 | CALL $98D9 | |||
| F5AA | POP AF | |||
| F5AB | AND $03 | |||
| F5AD | LD B,A | |||
| F5AE | OR A | |||
| F5AF | LD A,$3F | |||
| F5B1 | JR Z,$F5B7 | |||
| F5B3 | RRCA | |||
| F5B4 | RRCA | |||
| F5B5 | DJNZ $F5B3 | |||
| F5B7 | LD D,A | |||
| F5B8 | AND (HL) | |||
| F5B9 | LD (HL),A | |||
| F5BA | LD A,D | |||
| F5BB | INC H | |||
| F5BC | AND (HL) | |||
| F5BD | LD (HL),A | |||
| F5BE | RET | |||
| F5BF | PUSH HL | |||
| F5C0 | EX DE,HL | |||
| F5C1 | CALL $F5A0 | |||
| F5C4 | POP HL | |||
| F5C5 | RET | |||
| F5C6 | PUSH HL | |||
| F5C7 | EX DE,HL | |||
| F5C8 | CALL $F582 | |||
| F5CB | POP HL | |||
| F5CC | RET | |||
| F5CD | LD A,($FD97) | |||
| F5D0 | SUB $0D | |||
| F5D2 | RET C | |||
| F5D3 | SUB D | |||
| F5D4 | RET C | |||
| F5D5 | SUB $1F | |||
| F5D7 | JR NC,$F5DB | |||
| F5D9 | XOR A | |||
| F5DA | RET | |||
| F5DB | SCF | |||
| F5DC | RET | |||
| F5DD | EX DE,HL | |||
| F5DE | LD A,(IX+$0A) | |||
| F5E1 | LD B,A | |||
| F5E2 | ADD A,H | |||
| F5E3 | LD C,A | |||
| F5E4 | PUSH IX | |||
| F5E6 | LD A,$20 | |||
| F5E8 | BIT 2,(IX+$00) | |||
| F5EC | JR Z,$F5F0 | |||
| F5EE | SET 2,A | |||
| F5F0 | LD ($F8DA),A | |||
| F5F3 | LD A,L | |||
| F5F4 | AND $03 | |||
| F5F6 | LD ($F8D5),A | |||
| F5F9 | LD A,L | |||
| F5FA | AND $FC | |||
| F5FC | RRA | |||
| F5FD | RRA | |||
| F5FE | LD ($F8D3),A | |||
| F601 | INC D | |||
| F602 | DEC D | |||
| F603 | LD A,B | |||
| F604 | LD B,$12 | |||
| F606 | JR Z,$F623 | |||
| F608 | BIT 0,(IX+$00) | |||
| F60C | JR Z,$F615 | |||
| F60E | LD A,(IX+$0C) | |||
| F611 | ADD A,$1D | |||
| F613 | JR $F624 | |||
| F615 | NEG | |||
| F617 | LD B,$19 | |||
| F619 | CP $10 | |||
| F61B | JR C,$F623 | |||
| F61D | INC B | |||
| F61E | CP $1A | |||
| F620 | JR C,$F623 | |||
| F622 | INC B | |||
| F623 | LD A,B | |||
| F624 | LD ($F8D6),A | |||
| F627 | LD IX,$F8CF | |||
| F62B | LD (IX+$08),$04 | |||
| F62F | LD (IX+$09),$5F | |||
| F633 | LD (IX+$0A),$05 | |||
| F637 | LD A,C | |||
| F638 | SUB (IX+$01) | |||
| F63B | JP P,$F661 | |||
| F63E | NEG | |||
| F640 | SUB $05 | |||
| F642 | JR C,$F681 | |||
| F644 | PUSH AF | |||
| F645 | LD A,($F8D0) | |||
| F648 | SUB $04 | |||
| F64A | LD ($F8D4),A | |||
| F64D | CALL $98D0 | |||
| F650 | POP AF | |||
| F651 | INC A | |||
| F652 | LD B,A | |||
| F653 | LD A,($F8D4) | |||
| F656 | SUB B | |||
| F657 | LD C,A | |||
| F658 | LD A,B | |||
| F659 | CP $05 | |||
| F65B | JR C,$F640 | |||
| F65D | LD A,$05 | |||
| F65F | JR $F640 | |||
| F661 | SUB $05 | |||
| F663 | JR C,$F681 | |||
| F665 | PUSH AF | |||
| F666 | LD A,($F8D0) | |||
| F669 | ADD A,$04 | |||
| F66B | LD ($F8D4),A | |||
| F66E | CALL $98D0 | |||
| F671 | POP AF | |||
| F672 | INC A | |||
| F673 | LD B,A | |||
| F674 | ADD A,(IX+$05) | |||
| F677 | LD C,A | |||
| F678 | LD A,B | |||
| F679 | CP $05 | |||
| F67B | JR C,$F661 | |||
| F67D | LD A,$05 | |||
| F67F | JR $F661 | |||
| F681 | LD (IX+$05),C | |||
| F684 | CALL $98D0 | |||
| F687 | POP IX | |||
| F689 | RET | |||
| F68A | EX DE,HL | |||
| F68B | LD A,(IX+$0A) | |||
| F68E | LD C,A | |||
| F68F | ADD A,H | |||
| F690 | LD ($F8D0),A | |||
| F693 | LD A,L | |||
| F694 | AND $03 | |||
| F696 | LD ($F8D1),A | |||
| F699 | LD A,L | |||
| F69A | AND $FC | |||
| F69C | RRA | |||
| F69D | RRA | |||
| F69E | LD ($F8CF),A | |||
| F6A1 | BIT 0,(IX+$00) | |||
| F6A5 | JR Z,$F6AE | |||
| F6A7 | LD A,(IX+$0C) | |||
| F6AA | ADD A,$1D | |||
| F6AC | JR $F6BE | |||
| F6AE | LD A,C | |||
| F6AF | NEG | |||
| F6B1 | LD C,$19 | |||
| F6B3 | CP $10 | |||
| F6B5 | JR C,$F6BD | |||
| F6B7 | INC C | |||
| F6B8 | CP $1A | |||
| F6BA | JR C,$F6BD | |||
| F6BC | INC C | |||
| F6BD | LD A,C | |||
| F6BE | LD ($F8D2),A | |||
| F6C1 | RET | |||
| F6C2 | LD HL,$F856 | |||
| F6C5 | LD A,(HL) | |||
| F6C6 | INC A | |||
| F6C7 | JR Z,$F704 | |||
| F6C9 | LD BC,$0011 | |||
| F6CC | ADD HL,BC | |||
| F6CD | LD A,(HL) | |||
| F6CE | OR A | |||
| F6CF | JR Z,$F6D7 | |||
| F6D1 | LD BC,$0003 | |||
| F6D4 | ADD HL,BC | |||
| F6D5 | JR $F6C5 | |||
| F6D7 | PUSH DE | |||
| F6D8 | LD (HL),$07 | |||
| F6DA | XOR A | |||
| F6DB | SBC HL,BC | |||
| F6DD | LD A,E | |||
| F6DE | SUB $03 | |||
| F6E0 | LD E,A | |||
| F6E1 | AND $03 | |||
| F6E3 | LD B,A | |||
| F6E4 | LD A,E | |||
| F6E5 | AND $FC | |||
| F6E7 | RRA | |||
| F6E8 | RRA | |||
| F6E9 | LD E,A | |||
| F6EA | LD (HL),E | |||
| F6EB | INC HL | |||
| F6EC | LD A,D | |||
| F6ED | SUB $04 | |||
| F6EF | LD (HL),A | |||
| F6F0 | INC HL | |||
| F6F1 | LD (HL),B | |||
| F6F2 | INC HL | |||
| F6F3 | LD (HL),$17 | |||
| F6F5 | INC HL | |||
| F6F6 | LD (HL),E | |||
| F6F7 | INC HL | |||
| F6F8 | LD (HL),A | |||
| F6F9 | INC HL | |||
| F6FA | LD (HL),B | |||
| F6FB | INC HL | |||
| F6FC | LD (HL),$17 | |||
| F6FE | INC HL | |||
| F6FF | INC HL | |||
| F700 | INC HL | |||
| F701 | LD (HL),$0A | |||
| F703 | POP DE | |||
| F704 | JP $F5A0 | |||
| F707 | LD IX,$F856 | |||
| F70B | LD A,(IX+$00) | |||
| F70E | INC A | |||
| F70F | RET Z | |||
| F710 | LD A,(IX+$11) | |||
| F713 | OR A | |||
| F714 | JR NZ,$F71D | |||
| F716 | LD DE,$0014 | |||
| F719 | ADD IX,DE | |||
| F71B | JR $F70B | |||
| F71D | DEC A | |||
| F71E | LD (IX+$11),A | |||
| F721 | JR NZ,$F727 | |||
| F723 | LD B,$12 | |||
| F725 | JR $F734 | |||
| F727 | DEC A | |||
| F728 | SRL A | |||
| F72A | JR C,$F716 | |||
| F72C | AND $01 | |||
| F72E | LD B,$18 | |||
| F730 | JR NZ,$F734 | |||
| F732 | LD B,$17 | |||
| F734 | LD (IX+$07),B | |||
| F737 | CALL $DC8F | |||
| F73A | JR $F716 | |||
| F73C | NOP | |||
| F73D | NOP | |||
| F73E | NOP | |||
| F73F | NOP | |||
| F740 | NOP | |||
| F741 | NOP | |||
| F742 | NOP | |||
| F743 | NOP | |||
| F744 | NOP | |||
| F745 | NOP | |||
| F746 | NOP | |||
| F747 | NOP | |||
| F748 | NOP | |||
| F749 | NOP | |||
| F74A | NOP | |||
| F74B | NOP | |||
| F74C | NOP | |||
| F74D | NOP | |||
| F74E | NOP | |||
| F74F | NOP | |||
| F750 | NOP | |||
| F751 | NOP | |||
| F752 | NOP | |||
| F753 | NOP | |||
| F754 | NOP | |||
| F755 | NOP | |||
| F756 | NOP | |||
| F757 | NOP | |||
| F758 | NOP | |||
| F759 | NOP | |||
| F75A | NOP | |||
| F75B | NOP | |||
| F75C | NOP | |||
| F75D | NOP | |||
| F75E | NOP | |||
| F75F | NOP | |||
| F760 | NOP | |||
| F761 | NOP | |||
| F762 | NOP | |||
| F763 | NOP | |||
| F764 | NOP | |||
| F765 | NOP | |||
| F766 | NOP | |||
| F767 | NOP | |||
| F768 | NOP | |||
| F769 | NOP | |||
| F76A | NOP | |||
| F76B | NOP | |||
| F76C | NOP | |||
| F76D | NOP | |||
| F76E | NOP | |||
| F76F | NOP | |||
| F770 | NOP | |||
| F771 | NOP | |||
| F772 | NOP | |||
| F773 | NOP | |||
| F774 | NOP | |||
| F775 | NOP | |||
| F776 | NOP | |||
| F777 | NOP | |||
| F778 | NOP | |||
| F779 | NOP | |||
| F77A | NOP | |||
| F77B | NOP | |||
| F77C | NOP | |||
| F77D | NOP | |||
| F77E | NOP | |||
| F77F | NOP | |||
| F780 | NOP | |||
| F781 | NOP | |||
| F782 | NOP | |||
| F783 | NOP | |||
| F784 | NOP | |||
| F785 | NOP | |||
| F786 | NOP | |||
| F787 | NOP | |||
| F788 | NOP | |||
| F789 | NOP | |||
| F78A | NOP | |||
| F78B | NOP | |||
| F78C | NOP | |||
| F78D | NOP | |||
| F78E | NOP | |||
| F78F | NOP | |||
| F790 | NOP | |||
| F791 | NOP | |||
| F792 | NOP | |||
| F793 | NOP | |||
| F794 | NOP | |||
| F795 | NOP | |||
| F796 | NOP | |||
| F797 | NOP | |||
| F798 | NOP | |||
| F799 | NOP | |||
| F79A | NOP | |||
| F79B | NOP | |||
| F79C | NOP | |||
| F79D | NOP | |||
| F79E | NOP | |||
| F79F | NOP | |||
| F7A0 | NOP | |||
| F7A1 | NOP | |||
| F7A2 | NOP | |||
| F7A3 | NOP | |||
| F7A4 | NOP | |||
| F7A5 | NOP | |||
| F7A6 | NOP | |||
| F7A7 | NOP | |||
| F7A8 | NOP | |||
| F7A9 | NOP | |||
| F7AA | NOP | |||
| F7AB | NOP | |||
| F7AC | NOP | |||
| F7AD | NOP | |||
| F7AE | NOP | |||
| F7AF | NOP | |||
| F7B0 | NOP | |||
| F7B1 | NOP | |||
| F7B2 | NOP | |||
| F7B3 | NOP | |||
| F7B4 | NOP | |||
| F7B5 | NOP | |||
| F7B6 | NOP | |||
| F7B7 | NOP | |||
| F7B8 | NOP | |||
| F7B9 | NOP | |||
| F7BA | NOP | |||
| F7BB | NOP | |||
| F7BC | NOP | |||
| F7BD | NOP | |||
| F7BE | NOP | |||
| F7BF | NOP | |||
| F7C0 | NOP | |||
| F7C1 | NOP | |||
| F7C2 | NOP | |||
| F7C3 | NOP | |||
| F7C4 | NOP | |||
| F7C5 | NOP | |||
| F7C6 | NOP | |||
| F7C7 | NOP | |||
| F7C8 | RST $38 | |||
| F7C9 | NOP | |||
| F7CA | NOP | |||
| F7CB | NOP | |||
| F7CC | NOP | |||
| F7CD | NOP | |||
| F7CE | NOP | |||
| F7CF | NOP | |||
| F7D0 | NOP | |||
| F7D1 | NOP | |||
| F7D2 | NOP | |||
| F7D3 | NOP | |||
| F7D4 | NOP | |||
| F7D5 | NOP | |||
| F7D6 | NOP | |||
| F7D7 | NOP | |||
| F7D8 | NOP | |||
| F7D9 | NOP | |||
| F7DA | NOP | |||
| F7DB | NOP | |||
| F7DC | NOP | |||
| F7DD | NOP | |||
| F7DE | NOP | |||
| F7DF | NOP | |||
| F7E0 | NOP | |||
| F7E1 | NOP | |||
| F7E2 | NOP | |||
| F7E3 | NOP | |||
| F7E4 | NOP | |||
| F7E5 | NOP | |||
| F7E6 | NOP | |||
| F7E7 | NOP | |||
| F7E8 | NOP | |||
| F7E9 | NOP | |||
| F7EA | NOP | |||
| F7EB | NOP | |||
| F7EC | NOP | |||
| F7ED | NOP | |||
| F7EE | NOP | |||
| F7EF | NOP | |||
| F7F0 | NOP | |||
| F7F1 | NOP | |||
| F7F2 | NOP | |||
| F7F3 | NOP | |||
| F7F4 | NOP | |||
| F7F5 | NOP | |||
| F7F6 | NOP | |||
| F7F7 | NOP | |||
| F7F8 | NOP | |||
| F7F9 | NOP | |||
| F7FA | NOP | |||
| F7FB | NOP | |||
| F7FC | NOP | |||
| F7FD | NOP | |||
| F7FE | NOP | |||
| F7FF | NOP | |||
| F800 | NOP | |||
| F801 | NOP | |||
| F802 | NOP | |||
| F803 | NOP | |||
| F804 | NOP | |||
| F805 | NOP | |||
| F806 | NOP | |||
| F807 | NOP | |||
| F808 | NOP | |||
| F809 | NOP | |||
| F80A | NOP | |||
| F80B | NOP | |||
| F80C | NOP | |||
| F80D | NOP | |||
| F80E | NOP | |||
| F80F | NOP | |||
| F810 | NOP | |||
| F811 | NOP | |||
| F812 | NOP | |||
| F813 | NOP | |||
| F814 | NOP | |||
| F815 | NOP | |||
| F816 | NOP | |||
| F817 | NOP | |||
| F818 | NOP | |||
| F819 | NOP | |||
| F81A | NOP | |||
| F81B | NOP | |||
| F81C | NOP | |||
| F81D | RST $38 | |||
| F81E | NOP | |||
| F81F | NOP | |||
| F820 | NOP | |||
| F821 | NOP | |||
| F822 | NOP | |||
| F823 | NOP | |||
| F824 | NOP | |||
| F825 | NOP | |||
| F826 | NOP | |||
| F827 | NOP | |||
| F828 | NOP | |||
| F829 | NOP | |||
| F82A | NOP | |||
| F82B | NOP | |||
| F82C | RST $38 | |||
| F82D | NOP | |||
| F82E | NOP | |||
| F82F | NOP | |||
| F830 | NOP | |||
| F831 | NOP | |||
| F832 | NOP | |||
| F833 | NOP | |||
| F834 | NOP | |||
| F835 | NOP | |||
| F836 | NOP | |||
| F837 | NOP | |||
| F838 | NOP | |||
| F839 | NOP | |||
| F83A | NOP | |||
| F83B | NOP | |||
| F83C | NOP | |||
| F83D | NOP | |||
| F83E | NOP | |||
| F83F | NOP | |||
| F840 | NOP | |||
| F841 | NOP | |||
| F842 | NOP | |||
| F843 | NOP | |||
| F844 | NOP | |||
| F845 | NOP | |||
| F846 | NOP | |||
| F847 | NOP | |||
| F848 | NOP | |||
| F849 | NOP | |||
| F84A | NOP | |||
| F84B | NOP | |||
| F84C | NOP | |||
| F84D | NOP | |||
| F84E | NOP | |||
| F84F | NOP | |||
| F850 | NOP | |||
| F851 | NOP | |||
| F852 | NOP | |||
| F853 | NOP | |||
| F854 | NOP | |||
| F855 | RST $38 | |||
| F856 | NOP | |||
| F857 | NOP | |||
| F858 | NOP | |||
| F859 | NOP | |||
| F85A | NOP | |||
| F85B | NOP | |||
| F85C | NOP | |||
| F85D | NOP | |||
| F85E | NOP | |||
| F85F | NOP | |||
| F860 | NOP | |||
| F861 | NOP | |||
| F862 | NOP | |||
| F863 | NOP | |||
| F864 | NOP | |||
| F865 | NOP | |||
| F866 | NOP | |||
| F867 | NOP | |||
| F868 | NOP | |||
| F869 | NOP | |||
| F86A | NOP | |||
| F86B | NOP | |||
| F86C | NOP | |||
| F86D | NOP | |||
| F86E | NOP | |||
| F86F | NOP | |||
| F870 | NOP | |||
| F871 | NOP | |||
| F872 | NOP | |||
| F873 | NOP | |||
| F874 | NOP | |||
| F875 | NOP | |||
| F876 | NOP | |||
| F877 | NOP | |||
| F878 | NOP | |||
| F879 | NOP | |||
| F87A | NOP | |||
| F87B | NOP | |||
| F87C | NOP | |||
| F87D | NOP | |||
| F87E | NOP | |||
| F87F | NOP | |||
| F880 | NOP | |||
| F881 | NOP | |||
| F882 | NOP | |||
| F883 | NOP | |||
| F884 | NOP | |||
| F885 | NOP | |||
| F886 | NOP | |||
| F887 | NOP | |||
| F888 | NOP | |||
| F889 | NOP | |||
| F88A | NOP | |||
| F88B | NOP | |||
| F88C | NOP | |||
| F88D | NOP | |||
| F88E | NOP | |||
| F88F | NOP | |||
| F890 | NOP | |||
| F891 | NOP | |||
| F892 | NOP | |||
| F893 | NOP | |||
| F894 | NOP | |||
| F895 | NOP | |||
| F896 | NOP | |||
| F897 | NOP | |||
| F898 | NOP | |||
| F899 | NOP | |||
| F89A | NOP | |||
| F89B | NOP | |||
| F89C | NOP | |||
| F89D | NOP | |||
| F89E | NOP | |||
| F89F | NOP | |||
| F8A0 | NOP | |||
| F8A1 | NOP | |||
| F8A2 | NOP | |||
| F8A3 | NOP | |||
| F8A4 | NOP | |||
| F8A5 | NOP | |||
| F8A6 | NOP | |||
| F8A7 | NOP | |||
| F8A8 | NOP | |||
| F8A9 | NOP | |||
| F8AA | NOP | |||
| F8AB | NOP | |||
| F8AC | NOP | |||
| F8AD | NOP | |||
| F8AE | NOP | |||
| F8AF | NOP | |||
| F8B0 | NOP | |||
| F8B1 | NOP | |||
| F8B2 | NOP | |||
| F8B3 | NOP | |||
| F8B4 | NOP | |||
| F8B5 | NOP | |||
| F8B6 | NOP | |||
| F8B7 | NOP | |||
| F8B8 | NOP | |||
| F8B9 | NOP | |||
| F8BA | NOP | |||
| F8BB | NOP | |||
| F8BC | NOP | |||
| F8BD | NOP | |||
| F8BE | NOP | |||
| F8BF | NOP | |||
| F8C0 | NOP | |||
| F8C1 | NOP | |||
| F8C2 | NOP | |||
| F8C3 | NOP | |||
| F8C4 | NOP | |||
| F8C5 | NOP | |||
| F8C6 | NOP | |||
| F8C7 | NOP | |||
| F8C8 | NOP | |||
| F8C9 | NOP | |||
| F8CA | NOP | |||
| F8CB | NOP | |||
| F8CC | NOP | |||
| F8CD | NOP | |||
| F8CE | RST $38 | |||
| F8CF | NOP | |||
| F8D0 | NOP | |||
| F8D1 | NOP | |||
| F8D2 | NOP | |||
| F8D3 | NOP | |||
| F8D4 | NOP | |||
| F8D5 | NOP | |||
| F8D6 | NOP | |||
| F8D7 | INC B | |||
| F8D8 | LD E,A | |||
| F8D9 | INC D | |||
| F8DA | JR NZ,$F8DC | |||
| F8DC | NOP | |||
| F8DD | NOP | |||
| F8DE | NOP | |||
| F8DF | NOP | |||
| F8E0 | NOP | |||
| F8E1 | NOP | |||
| F8E2 | NOP | |||
| F8E3 | NOP | |||
| F8E4 | NOP | |||
| F8E5 | NOP | |||
| F8E6 | NOP | |||
| F8E7 | NOP | |||
| F8E8 | NOP | |||
| F8E9 | NOP | |||
| F8EA | NOP | |||
| F8EB | NOP | |||
| F8EC | SUB B | |||
| F8ED | SUB B | |||
| F8EE | NOP | |||
| F8EF | NOP | |||
| F8F0 | NOP | |||
| F8F1 | NOP | |||
| F8F2 | NOP | |||
| F8F3 | NOP | |||
| F8F4 | NOP | |||
| F8F5 | NOP | |||
| F8F6 | NOP | |||
| F8F7 | NOP | |||
| F8F8 | NOP | |||
| F8F9 | NOP | |||
| F8FA | NOP | |||
| F8FB | SUB B | |||
| F8FC | SUB B | |||
| F8FD | SUB B | |||
| F8FE | NOP | |||
| F8FF | NOP | |||
| F900 | NOP | |||
| F901 | NOP | |||
| F902 | NOP | |||
| F903 | NOP | |||
| F904 | NOP | |||
| F905 | NOP | |||
| F906 | NOP | |||
| F907 | NOP | |||
| F908 | NOP | |||
| F909 | NOP | |||
| F90A | NOP | |||
| F90B | NOP | |||
| F90C | NOP | |||
| F90D | NOP | |||
| F90E | NOP | |||
| F90F | NOP | |||
| F910 | NOP | |||
| F911 | NOP | |||
| F912 | NOP | |||
| F913 | NOP | |||
| F914 | NOP | |||
| F915 | NOP | |||
| F916 | NOP | |||
| F917 | NOP | |||
| F918 | NOP | |||
| F919 | NOP | |||
| F91A | NOP | |||
| F91B | NOP | |||
| F91C | NOP | |||
| F91D | NOP | |||
| F91E | NOP | |||
| F91F | NOP | |||
| F920 | NOP | |||
| F921 | NOP | |||
| F922 | NOP | |||
| F923 | NOP | |||
| F924 | NOP | |||
| F925 | NOP | |||
| F926 | NOP | |||
| F927 | NOP | |||
| F928 | NOP | |||
| F929 | NOP | |||
| F92A | NOP | |||
| F92B | NOP | |||
| F92C | NOP | |||
| F92D | NOP | |||
| F92E | NOP | |||
| F92F | NOP | |||
| F930 | NOP | |||
| F931 | NOP | |||
| F932 | NOP | |||
| F933 | NOP | |||
| F934 | NOP | |||
| F935 | NOP | |||
| F936 | NOP | |||
| F937 | NOP | |||
| F938 | NOP | |||
| F939 | NOP | |||
| F93A | NOP | |||
| F93B | NOP | |||
| F93C | NOP | |||
| F93D | NOP | |||
| F93E | NOP | |||
| F93F | NOP | |||
| F940 | NOP | |||
| F941 | NOP | |||
| F942 | NOP | |||
| F943 | NOP | |||
| F944 | NOP | |||
| F945 | NOP | |||
| F946 | NOP | |||
| F947 | NOP | |||
| F948 | NOP | |||
| F949 | NOP | |||
| F94A | NOP | |||
| F94B | NOP | |||
| F94C | NOP | |||
| F94D | NOP | |||
| F94E | NOP | |||
| F94F | NOP | |||
| F950 | NOP | |||
| F951 | NOP | |||
| F952 | NOP | |||
| F953 | NOP | |||
| F954 | NOP | |||
| F955 | NOP | |||
| F956 | NOP | |||
| F957 | NOP | |||
| F958 | NOP | |||
| F959 | NOP | |||
| F95A | NOP | |||
| F95B | NOP | |||
| F95C | NOP | |||
| F95D | NOP | |||
| F95E | NOP | |||
| F95F | NOP | |||
| F960 | NOP | |||
| F961 | NOP | |||
| F962 | NOP | |||
| F963 | NOP | |||
| F964 | NOP | |||
| F965 | NOP | |||
| F966 | NOP | |||
| F967 | NOP | |||
| F968 | NOP | |||
| F969 | NOP | |||
| F96A | NOP | |||
| F96B | NOP | |||
| F96C | NOP | |||
| F96D | NOP | |||
| F96E | NOP | |||
| F96F | NOP | |||
| F970 | NOP | |||
| F971 | NOP | |||
| F972 | NOP | |||
| F973 | NOP | |||
| F974 | NOP | |||
| F975 | NOP | |||
| F976 | NOP | |||
| F977 | NOP | |||
| F978 | NOP | |||
| F979 | NOP | |||
| F97A | NOP | |||
| F97B | NOP | |||
| F97C | NOP | |||
| F97D | NOP | |||
| F97E | NOP | |||
| F97F | NOP | |||
| F980 | NOP | |||
| F981 | NOP | |||
| F982 | NOP | |||
| F983 | NOP | |||
| F984 | NOP | |||
| F985 | NOP | |||
| F986 | NOP | |||
| F987 | NOP | |||
| F988 | NOP | |||
| F989 | NOP | |||
| F98A | NOP | |||
| F98B | NOP | |||
| F98C | NOP | |||
| F98D | NOP | |||
| F98E | NOP | |||
| F98F | NOP | |||
| F990 | NOP | |||
| F991 | NOP | |||
| F992 | NOP | |||
| F993 | NOP | |||
| F994 | NOP | |||
| F995 | NOP | |||
| F996 | NOP | |||
| F997 | NOP | |||
| F998 | NOP | |||
| F999 | NOP | |||
| F99A | NOP | |||
| F99B | NOP | |||
| F99C | NOP | |||
| F99D | NOP | |||
| F99E | NOP | |||
| F99F | NOP | |||
| F9A0 | NOP | |||
| F9A1 | NOP | |||
| F9A2 | NOP | |||
| F9A3 | NOP | |||
| F9A4 | NOP | |||
| F9A5 | NOP | |||
| F9A6 | NOP | |||
| F9A7 | NOP | |||
| F9A8 | NOP | |||
| F9A9 | NOP | |||
| F9AA | NOP | |||
| F9AB | NOP | |||
| F9AC | NOP | |||
| F9AD | NOP | |||
| F9AE | NOP | |||
| F9AF | NOP | |||
| F9B0 | NOP | |||
| F9B1 | NOP | |||
| F9B2 | NOP | |||
| F9B3 | NOP | |||
| F9B4 | NOP | |||
| F9B5 | NOP | |||
| F9B6 | NOP | |||
| F9B7 | NOP | |||
| F9B8 | NOP | |||
| F9B9 | NOP | |||
| F9BA | NOP | |||
| F9BB | NOP | |||
| F9BC | NOP | |||
| F9BD | NOP | |||
| F9BE | NOP | |||
| F9BF | NOP | |||
| F9C0 | NOP | |||
| F9C1 | NOP | |||
| F9C2 | NOP | |||
| F9C3 | NOP | |||
| F9C4 | NOP | |||
| F9C5 | NOP | |||
| F9C6 | NOP | |||
| F9C7 | NOP | |||
| F9C8 | NOP | |||
| F9C9 | NOP | |||
| F9CA | NOP | |||
| F9CB | NOP | |||
| F9CC | NOP | |||
| F9CD | NOP | |||
| F9CE | NOP | |||
| F9CF | NOP | |||
| F9D0 | NOP | |||
| F9D1 | NOP | |||
| F9D2 | NOP | |||
| F9D3 | NOP | |||
| F9D4 | NOP | |||
| F9D5 | NOP | |||
| F9D6 | NOP | |||
| F9D7 | NOP | |||
| F9D8 | NOP | |||
| F9D9 | NOP | |||
| F9DA | NOP | |||
| F9DB | NOP | |||
| F9DC | NOP | |||
| F9DD | NOP | |||
| F9DE | NOP | |||
| F9DF | NOP | |||
| F9E0 | NOP | |||
| F9E1 | NOP | |||
| F9E2 | NOP | |||
| F9E3 | NOP | |||
| F9E4 | NOP | |||
| F9E5 | NOP | |||
| F9E6 | NOP | |||
| F9E7 | NOP | |||
| F9E8 | NOP | |||
| F9E9 | NOP | |||
| F9EA | NOP | |||
| F9EB | NOP | |||
| F9EC | NOP | |||
| F9ED | NOP | |||
| F9EE | NOP | |||
| F9EF | NOP | |||
| F9F0 | NOP | |||
| F9F1 | NOP | |||
| F9F2 | NOP | |||
| F9F3 | NOP | |||
| F9F4 | NOP | |||
| F9F5 | NOP | |||
| F9F6 | NOP | |||
| F9F7 | NOP | |||
| F9F8 | NOP | |||
| F9F9 | NOP | |||
| F9FA | NOP | |||
| F9FB | NOP | |||
| F9FC | NOP | |||
| F9FD | NOP | |||
| F9FE | NOP | |||
| F9FF | NOP | |||
| FA00 | SUB C | |||
| FA01 | LD H,L | |||
| FA02 | JP $8E24 | |||
| FA05 | NOP | |||
| FA06 | POP HL | |||
| FA07 | LD BC,$723B | |||
| FA0A | JP Z,$584A | |||
| FA0D | RST $10 | |||
| FA0E | AND (IY+$16) | |||
| FA11 | LD E,$FD | |||
| FA13 | SBC A,L | |||
| FA14 | LD B,D | |||
| FA15 | LD C,L | |||
| FA16 | LD A,A | |||
| FA17 | LD D,(HL) | |||
| FA18 | DEC HL | |||
| FA19 | LD C,L | |||
| FA1A | LD H,B | |||
| FA1B | OR L | |||
| FA1C | INC SP | |||
| FA1D | SUB H | |||
| FA1E | LD A,$CE | |||
| FA20 | CALL NC,$4E3F | |||
| FA23 | LD B,(HL) | |||
| FA24 | RET NZ | |||
| FA25 | POP DE | |||
| FA26 | JP NZ,$F02A | |||
| FA29 | ADD HL,BC | |||
| FA2A | CALL NZ,$5169 | |||
| FA2D | OR D | |||
| FA2E | LD L,(HL) | |||
| FA2F | DEFB $DD | |||
| FA30 | CALL PE,$84DF | |||
| FA33 | LD B,C | |||
| FA34 | SBC A,D | |||
| FA35 | LD H,L | |||
| FA36 | CALL NC,$B970 | |||
| FA39 | LD (HL),B | |||
| FA3A | SUB D | |||
| FA3B | SUB $8B | |||
| FA3D | LD L,D | |||
| FA3E | LD D,D | |||
| FA3F | EXX | |||
| FA40 | LD L,A | |||
| FA41 | LD L,D | |||
| FA42 | CP A | |||
| FA43 | CP (HL) | |||
| FA44 | OUT ($00),A | |||
| FA46 | LD D,B | |||
| FA47 | ADC A,C | |||
| FA48 | DEC E | |||
| FA49 | SUB $BC | |||
| FA4B | XOR (HL) | |||
| FA4C | RST $08 | |||
| FA4D | LD L,C | |||
| FA4E | INC BC | |||
| FA4F | JP $9717 | |||
| FA52 | LD BC,$A0A1 | |||
| FA55 | LD C,B | |||
| FA56 | RET NZ | |||
| FA57 | DI | |||
| FA58 | PUSH HL | |||
| FA59 | DEC BC | |||
| FA5A | LD H,C | |||
| FA5B | LD H,D | |||
| FA5C | SBC A,E | |||
| FA5D | ADC A,D | |||
| FA5E | LD ($411C),A | |||
| FA61 | LD C,A | |||
| FA62 | EX AF,AF' | |||
| FA63 | ADC A,E | |||
| FA64 | SUB L | |||
| FA65 | DEC (IX-$34) | |||
| FA68 | AND C | |||
| FA69 | EI | |||
| FA6A | ADC A,(HL) | |||
| FA6B | DEFB $ED,$AE | |||
| FA6D | PUSH BC | |||
| FA6E | RLCA | |||
| FA6F | ADC A,C | |||
| FA70 | LD E,B | |||
| FA71 | POP BC | |||
| FA72 | OR E | |||
| FA73 | LD C,C | |||
| FA74 | LD L,H | |||
| FA75 | LD C,(HL) | |||
| FA76 | LD E,B | |||
| FA77 | LD H,B | |||
| FA78 | DEC H | |||
| FA79 | SBC A,H | |||
| FA7A | LD D,B | |||
| FA7B | LD (HL),C | |||
| FA7C | OR B | |||
| FA7D | SUB E | |||
| FA7E | LD D,H | |||
| FA7F | LD C,(HL) | |||
| FA80 | LD D,A | |||
| FA81 | LD A,(DE) | |||
| FA82 | LD D,D | |||
| FA83 | DEC B | |||
| FA84 | POP HL | |||
| FA85 | DEC L | |||
| FA86 | SBC A,A | |||
| FA87 | ADD A,B | |||
| FA88 | SUB H | |||
| FA89 | JP P,$4AFE | |||
| FA8C | XOR B | |||
| FA8D | CP L | |||
| FA8E | AND C | |||
| FA8F | JP M,$72B2 | |||
| FA92 | LD B,D | |||
| FA93 | LD E,C | |||
| FA94 | INC DE | |||
| FA95 | RET NZ | |||
| FA96 | DEC D | |||
| FA97 | OR $7D | |||
| FA99 | JP PO,$C907 | |||
| FA9C | DEC L | |||
| FA9D | EXX | |||
| FA9E | LD B,C | |||
| FA9F | EX AF,AF' | |||
| FAA0 | INC A | |||
| FAA1 | JR NC,$FA89 | |||
| FAA3 | CP B | |||
| FAA4 | LD H,$9C | |||
| FAA6 | CALL M,$9902 | |||
| FAA9 | ADD A,H | |||
| FAAA | LD BC,$AD9A | |||
| FAAD | LD E,$38 | |||
| FAAF | CP A | |||
| FAB0 | OR D | |||
| FAB1 | LD E,$FE | |||
| FAB3 | JP P,$D737 | |||
| FAB6 | LD (DE),A | |||
| FAB7 | LD D,D | |||
| FAB8 | EXX | |||
| FAB9 | LD H,B | |||
| FABA | ADD A,$09 | |||
| FABC | RET P | |||
| FABD | LD A,C | |||
| FABE | DEC SP | |||
| FABF | INC (HL) | |||
| FAC0 | LD (HL),L | |||
| FAC1 | LD D,$BC | |||
| FAC3 | RET M | |||
| FAC4 | RL H | |||
| FAC6 | CP C | |||
| FAC7 | OUT ($02),A | |||
| FAC9 | LD (HL),C | |||
| FACA | XOR A | |||
| FACB | JR C,$FB42 | |||
| FACD | ADC A,(HL) | |||
| FACE | CP D | |||
| FACF | ADD A,E | |||
| FAD0 | XOR E | |||
| FAD1 | LD D,L | |||
| FAD2 | LD (HL),A | |||
| FAD3 | LD L,E | |||
| FAD4 | SUB $22 | |||
| FAD6 | LD SP,$299F | |||
| FAD9 | CALL NZ,$C427 | |||
| FADC | LD B,B | |||
| FADD | ADC A,H | |||
| FADE | RRCA | |||
| FADF | CP B | |||
| FAE0 | CALL C,$179F | |||
| FAE3 | RST $30 | |||
| FAE4 | ADC A,C | |||
| FAE5 | CPL | |||
| FAE6 | LD A,C | |||
| FAE7 | PUSH HL | |||
| FAE8 | RRA | |||
| FAE9 | OR E | |||
| FAEA | RET NZ | |||
| FAEB | CALL PO,$825C | |||
| FAEE | LD E,D | |||
| FAEF | OR L | |||
| FAF0 | JP PO,$96F5 | |||
| FAF3 | LD L,D | |||
| FAF4 | LD E,B | |||
| FAF5 | INC D | |||
| FAF6 | LD A,(HL) | |||
| FAF7 | LD E,D | |||
| FAF8 | CP H | |||
| FAF9 | LD L,C | |||
| FAFA | JP M,$DDFB | |||
| FAFD | CP H | |||
| FAFE | POP BC | |||
| FAFF | LD SP,HL | |||
| FB00 | CALL M,$FCFC | |||
| FB03 | CALL M,$FCFC | |||
| FB06 | CALL M,$FCFC | |||
| FB09 | CALL M,$FCFC | |||
| FB0C | CALL M,$FCFC | |||
| FB0F | CALL M,$FCFC | |||
| FB12 | CALL M,$FCFC | |||
| FB15 | CALL M,$FCFC | |||
| FB18 | CALL M,$FCFC | |||
| FB1B | CALL M,$FCFC | |||
| FB1E | CALL M,$FCFC | |||
| FB21 | CALL M,$FCFC | |||
| FB24 | CALL M,$FCFC | |||
| FB27 | CALL M,$FCFC | |||
| FB2A | CALL M,$FCFC | |||
| FB2D | CALL M,$FCFC | |||
| FB30 | CALL M,$FCFC | |||
| FB33 | CALL M,$FCFC | |||
| FB36 | CALL M,$FCFC | |||
| FB39 | CALL M,$FCFC | |||
| FB3C | CALL M,$FCFC | |||
| FB3F | CALL M,$FCFC | |||
| FB42 | CALL M,$FCFC | |||
| FB45 | CALL M,$FCFC | |||
| FB48 | CALL M,$FCFC | |||
| FB4B | CALL M,$FCFC | |||
| FB4E | CALL M,$FCFC | |||
| FB51 | CALL M,$FCFC | |||
| FB54 | CALL M,$FCFC | |||
| FB57 | CALL M,$FCFC | |||
| FB5A | CALL M,$FCFC | |||
| FB5D | CALL M,$FCFC | |||
| FB60 | CALL M,$FCFC | |||
| FB63 | CALL M,$FCFC | |||
| FB66 | CALL M,$FCFC | |||
| FB69 | CALL M,$FCFC | |||
| FB6C | CALL M,$FCFC | |||
| FB6F | CALL M,$FCFC | |||
| FB72 | CALL M,$FCFC | |||
| FB75 | CALL M,$FCFC | |||
| FB78 | CALL M,$FCFC | |||
| FB7B | CALL M,$FCFC | |||
| FB7E | CALL M,$FCFC | |||
| FB81 | CALL M,$FCFC | |||
| FB84 | CALL M,$FCFC | |||
| FB87 | CALL M,$FCFC | |||
| FB8A | CALL M,$FCFC | |||
| FB8D | CALL M,$FCFC | |||
| FB90 | CALL M,$FCFC | |||
| FB93 | CALL M,$FCFC | |||
| FB96 | CALL M,$FCFC | |||
| FB99 | CALL M,$FCFC | |||
| FB9C | CALL M,$FCFC | |||
| FB9F | CALL M,$FCFC | |||
| FBA2 | CALL M,$FCFC | |||
| FBA5 | CALL M,$FCFC | |||
| FBA8 | CALL M,$FCFC | |||
| FBAB | CALL M,$FCFC | |||
| FBAE | CALL M,$FCFC | |||
| FBB1 | CALL M,$FCFC | |||
| FBB4 | CALL M,$FCFC | |||
| FBB7 | CALL M,$FCFC | |||
| FBBA | CALL M,$FCFC | |||
| FBBD | CALL M,$FCFC | |||
| FBC0 | CALL M,$FCFC | |||
| FBC3 | CALL M,$FCFC | |||
| FBC6 | CALL M,$FCFC | |||
| FBC9 | CALL M,$FCFC | |||
| FBCC | CALL M,$FCFC | |||
| FBCF | CALL M,$FCFC | |||
| FBD2 | CALL M,$FCFC | |||
| FBD5 | CALL M,$FCFC | |||
| FBD8 | CALL M,$FCFC | |||
| FBDB | CALL M,$FCFC | |||
| FBDE | CALL M,$FCFC | |||
| FBE1 | CALL M,$FCFC | |||
| FBE4 | CALL M,$FCFC | |||
| FBE7 | CALL M,$FCFC | |||
| FBEA | CALL M,$FCFC | |||
| FBED | CALL M,$FCFC | |||
| FBF0 | CALL M,$FCFC | |||
| FBF3 | CALL M,$FCFC | |||
| FBF6 | CALL M,$FCFC | |||
| FBF9 | CALL M,$FCFC | |||
| FBFC | CALL M,$FCFC | |||
| FBFF | CALL M,$00FC | |||
| FC02 | NOP | |||
| FC03 | NOP | |||
| FC04 | NOP | |||
| FC05 | NOP | |||
| FC06 | NOP | |||
| FC07 | NOP | |||
| FC08 | NOP | |||
| FC09 | NOP | |||
| FC0A | NOP | |||
| FC0B | NOP | |||
| FC0C | NOP | |||
| FC0D | NOP | |||
| FC0E | NOP | |||
| FC0F | NOP | |||
| FC10 | NOP | |||
| FC11 | NOP | |||
| FC12 | NOP | |||
| FC13 | NOP | |||
| FC14 | NOP | |||
| FC15 | NOP | |||
| FC16 | NOP | |||
| FC17 | NOP | |||
| FC18 | NOP | |||
| FC19 | NOP | |||
| FC1A | NOP | |||
| FC1B | NOP | |||
| FC1C | NOP | |||
| FC1D | NOP | |||
| FC1E | NOP | |||
| FC1F | NOP | |||
| FC20 | NOP | |||
| FC21 | NOP | |||
| FC22 | NOP | |||
| FC23 | NOP | |||
| FC24 | NOP | |||
| FC25 | NOP | |||
| FC26 | NOP | |||
| FC27 | NOP | |||
| FC28 | NOP | |||
| FC29 | NOP | |||
| FC2A | NOP | |||
| FC2B | NOP | |||
| FC2C | NOP | |||
| FC2D | NOP | |||
| FC2E | NOP | |||
| FC2F | NOP | |||
| FC30 | NOP | |||
| FC31 | NOP | |||
| FC32 | NOP | |||
| FC33 | NOP | |||
| FC34 | NOP | |||
| FC35 | NOP | |||
| FC36 | NOP | |||
| FC37 | NOP | |||
| FC38 | NOP | |||
| FC39 | NOP | |||
| FC3A | NOP | |||
| FC3B | NOP | |||
| FC3C | NOP | |||
| FC3D | NOP | |||
| FC3E | NOP | |||
| FC3F | NOP | |||
| FC40 | NOP | |||
| FC41 | NOP | |||
| FC42 | NOP | |||
| FC43 | NOP | |||
| FC44 | NOP | |||
| FC45 | NOP | |||
| FC46 | NOP | |||
| FC47 | NOP | |||
| FC48 | NOP | |||
| FC49 | NOP | |||
| FC4A | NOP | |||
| FC4B | NOP | |||
| FC4C | NOP | |||
| FC4D | NOP | |||
| FC4E | NOP | |||
| FC4F | NOP | |||
| FC50 | NOP | |||
| FC51 | NOP | |||
| FC52 | NOP | |||
| FC53 | NOP | |||
| FC54 | NOP | |||
| FC55 | NOP | |||
| FC56 | NOP | |||
| FC57 | NOP | |||
| FC58 | NOP | |||
| FC59 | NOP | |||
| FC5A | NOP | |||
| FC5B | NOP | |||
| FC5C | NOP | |||
| FC5D | NOP | |||
| FC5E | NOP | |||
| FC5F | NOP | |||
| FC60 | NOP | |||
| FC61 | NOP | |||
| FC62 | NOP | |||
| FC63 | NOP | |||
| FC64 | NOP | |||
| FC65 | NOP | |||
| FC66 | NOP | |||
| FC67 | NOP | |||
| FC68 | NOP | |||
| FC69 | NOP | |||
| FC6A | NOP | |||
| FC6B | NOP | |||
| FC6C | NOP | |||
| FC6D | NOP | |||
| FC6E | NOP | |||
| FC6F | NOP | |||
| FC70 | NOP | |||
| FC71 | NOP | |||
| FC72 | NOP | |||
| FC73 | NOP | |||
| FC74 | NOP | |||
| FC75 | NOP | |||
| FC76 | NOP | |||
| FC77 | NOP | |||
| FC78 | NOP | |||
| FC79 | NOP | |||
| FC7A | NOP | |||
| FC7B | NOP | |||
| FC7C | NOP | |||
| FC7D | NOP | |||
| FC7E | NOP | |||
| FC7F | NOP | |||
| FC80 | NOP | |||
| FC81 | NOP | |||
| FC82 | NOP | |||
| FC83 | NOP | |||
| FC84 | NOP | |||
| FC85 | NOP | |||
| FC86 | NOP | |||
| FC87 | NOP | |||
| FC88 | NOP | |||
| FC89 | NOP | |||
| FC8A | NOP | |||
| FC8B | NOP | |||
| FC8C | NOP | |||
| FC8D | NOP | |||
| FC8E | NOP | |||
| FC8F | NOP | |||
| FC90 | NOP | |||
| FC91 | NOP | |||
| FC92 | NOP | |||
| FC93 | NOP | |||
| FC94 | NOP | |||
| FC95 | NOP | |||
| FC96 | NOP | |||
| FC97 | NOP | |||
| FC98 | NOP | |||
| FC99 | NOP | |||
| FC9A | NOP | |||
| FC9B | NOP | |||
| FC9C | NOP | |||
| FC9D | NOP | |||
| FC9E | NOP | |||
| FC9F | NOP | |||
| FCA0 | NOP | |||
| FCA1 | NOP | |||
| FCA2 | NOP | |||
| FCA3 | NOP | |||
| FCA4 | NOP | |||
| FCA5 | NOP | |||
| FCA6 | NOP | |||
| FCA7 | NOP | |||
| FCA8 | NOP | |||
| FCA9 | NOP | |||
| FCAA | NOP | |||
| FCAB | NOP | |||
| FCAC | NOP | |||
| FCAD | NOP | |||
| FCAE | NOP | |||
| FCAF | NOP | |||
| FCB0 | NOP | |||
| FCB1 | NOP | |||
| FCB2 | NOP | |||
| FCB3 | NOP | |||
| FCB4 | NOP | |||
| FCB5 | NOP | |||
| FCB6 | NOP | |||
| FCB7 | NOP | |||
| FCB8 | NOP | |||
| FCB9 | NOP | |||
| FCBA | NOP | |||
| FCBB | NOP | |||
| FCBC | NOP | |||
| FCBD | NOP | |||
| FCBE | NOP | |||
| FCBF | NOP | |||
| FCC0 | NOP | |||
| FCC1 | NOP | |||
| FCC2 | NOP | |||
| FCC3 | NOP | |||
| FCC4 | NOP | |||
| FCC5 | NOP | |||
| FCC6 | NOP | |||
| FCC7 | NOP | |||
| FCC8 | NOP | |||
| FCC9 | NOP | |||
| FCCA | NOP | |||
| FCCB | NOP | |||
| FCCC | NOP | |||
| FCCD | NOP | |||
| FCCE | NOP | |||
| FCCF | NOP | |||
| FCD0 | NOP | |||
| FCD1 | NOP | |||
| FCD2 | NOP | |||
| FCD3 | NOP | |||
| FCD4 | NOP | |||
| FCD5 | NOP | |||
| FCD6 | NOP | |||
| FCD7 | NOP | |||
| FCD8 | NOP | |||
| FCD9 | NOP | |||
| FCDA | NOP | |||
| FCDB | NOP | |||
| FCDC | NOP | |||
| FCDD | NOP | |||
| FCDE | NOP | |||
| FCDF | NOP | |||
| FCE0 | NOP | |||
| FCE1 | NOP | |||
| FCE2 | NOP | |||
| FCE3 | NOP | |||
| FCE4 | NOP | |||
| FCE5 | NOP | |||
| FCE6 | NOP | |||
| FCE7 | NOP | |||
| FCE8 | NOP | |||
| FCE9 | NOP | |||
| FCEA | NOP | |||
| FCEB | NOP | |||
| FCEC | NOP | |||
| FCED | NOP | |||
| FCEE | NOP | |||
| FCEF | NOP | |||
| FCF0 | NOP | |||
| FCF1 | NOP | |||
| FCF2 | NOP | |||
| FCF3 | NOP | |||
| FCF4 | NOP | |||
| FCF5 | NOP | |||
| FCF6 | NOP | |||
| FCF7 | NOP | |||
| FCF8 | NOP | |||
| FCF9 | NOP | |||
| FCFA | NOP | |||
| FCFB | NOP | |||
| FCFC | JP $7357 | |||
| FCFF | NOP | |||
| FD00 | NOP | |||
| FD01 | NOP | |||
| FD02 | NOP | |||
| FD03 | NOP | |||
| FD04 | NOP | |||
| FD05 | NOP | |||
| FD06 | NOP | |||
| FD07 | NOP | |||
| FD08 | NOP | |||
| FD09 | NOP | |||
| FD0A | NOP | |||
| FD0B | NOP | |||
| FD0C | NOP | |||
| FD0D | NOP | |||
| FD0E | NOP | |||
| FD0F | NOP | |||
| FD10 | NOP | |||
| FD11 | NOP | |||
| FD12 | NOP | |||
| FD13 | NOP | |||
| FD14 | NOP | |||
| FD15 | NOP | |||
| FD16 | NOP | |||
| FD17 | NOP | |||
| FD18 | NOP | |||
| FD19 | NOP | |||
| FD1A | NOP | |||
| FD1B | NOP | |||
| FD1C | NOP | |||
| FD1D | NOP | |||
| FD1E | NOP | |||
| FD1F | NOP | |||
| FD20 | NOP | |||
| FD21 | NOP | |||
| FD22 | NOP | |||
| FD23 | NOP | |||
| FD24 | NOP | |||
| FD25 | NOP | |||
| FD26 | NOP | |||
| FD27 | NOP | |||
| FD28 | NOP | |||
| FD29 | NOP | |||
| FD2A | NOP | |||
| FD2B | NOP | |||
| FD2C | NOP | |||
| FD2D | NOP | |||
| FD2E | NOP | |||
| FD2F | NOP | |||
| FD30 | NOP | |||
| FD31 | NOP | |||
| FD32 | NOP | |||
| FD33 | NOP | |||
| FD34 | NOP | |||
| FD35 | NOP | |||
| FD36 | NOP | |||
| FD37 | NOP | |||
| FD38 | NOP | |||
| FD39 | NOP | |||
| FD3A | NOP | |||
| FD3B | NOP | |||
| FD3C | NOP | |||
| FD3D | NOP | |||
| FD3E | NOP | |||
| FD3F | NOP | |||
| FD40 | NOP | |||
| FD41 | NOP | |||
| FD42 | NOP | |||
| FD43 | NOP | |||
| FD44 | NOP | |||
| FD45 | NOP | |||
| FD46 | NOP | |||
| FD47 | NOP | |||
| FD48 | NOP | |||
| FD49 | NOP | |||
| FD4A | NOP | |||
| FD4B | NOP | |||
| FD4C | NOP | |||
| FD4D | NOP | |||
| FD4E | NOP | |||
| FD4F | NOP | |||
| FD50 | NOP | |||
| FD51 | NOP | |||
| FD52 | NOP | |||
| FD53 | NOP | |||
| FD54 | NOP | |||
| FD55 | NOP | |||
| FD56 | NOP | |||
| FD57 | NOP | |||
| FD58 | NOP | |||
| FD59 | NOP | |||
| FD5A | NOP | |||
| FD5B | NOP | |||
| FD5C | NOP | |||
| FD5D | NOP | |||
| FD5E | NOP | |||
| FD5F | NOP | |||
| FD60 | NOP | |||
| FD61 | NOP | |||
| FD62 | NOP | |||
| FD63 | NOP | |||
| FD64 | NOP | |||
| FD65 | NOP | |||
| FD66 | AND C | |||
| FD67 | LD L,B | |||
| FD68 | RET PO | |||
| FD69 | LD A,E | |||
| FD6A | DEC B | |||
| FD6B | LD B,H | |||
| FD6C | XOR A | |||
| FD6D | LD L,C | |||
| FD6E | NOP | |||
| FD6F | LD BC,$1848 | |||
| FD72 | RRA | |||
| FD73 | RLA | |||
| FD74 | ADD HL,BC | |||
| FD75 | RRA | |||
| FD76 | SUB L | |||
| FD77 | LD L,C | |||
| FD78 | SUB H | |||
| FD79 | LD (HL),E | |||
| FD7A | LD B,B | |||
| FD7B | LD H,H | |||
| FD7C | INC B | |||
| FD7D | NOP | |||
| FD7E | DJNZ $FD82 | |||
| FD80 | CALL M,$0061 | |||
| FD83 | NOP | |||
| FD84 | NOP | |||
| FD85 | NOP | |||
| FD86 | NOP | |||
| FD87 | RRCA | |||
| FD88 | NOP | |||
| FD89 | NOP | |||
| FD8A | NOP | |||
| FD8B | NOP | |||
| FD8C | NOP | |||
| FD8D | RET PE | |||
| FD8E | LD H,C | |||
| FD8F | ADD HL,SP | |||
| FD90 | LD H,H | |||
|
This entry point is used by the routine at 7357.
|
||||
| FD91 | JP $7A5D | |||
| FD94 | NOP | |||
| FD95 | NOP | |||
| FD96 | NOP | |||
| FD97 | NOP | |||
| FD98 | NOP | |||
| FD99 | NOP | |||
| FD9A | NOP | |||
| FD9B | NOP | |||
| FD9C | NOP | |||
| FD9D | NOP | |||
| FD9E | NOP | |||
| FD9F | NOP | |||
| FDA0 | RLCA | |||
| FDA1 | NOP | |||
| FDA2 | LD E,B | |||
| FDA3 | AND B | |||
| FDA4 | LD A,(HL) | |||
| FDA5 | INC B | |||
| FDA6 | INC C | |||
| FDA7 | NOP | |||
| FDA8 | DEC D | |||
| FDA9 | XOR H | |||
| FDAA | DEFB $FD | |||
| FDAB | NOP | |||
| FDAC | LD (BC),A | |||
| FDAD | NOP | |||
| FDAE | NOP | |||
| FDAF | LD BC,$0102 | |||
| FDB2 | NOP | |||
| FDB3 | NOP | |||
| FDB4 | NOP | |||
| FDB5 | NOP | |||
| FDB6 | NOP | |||
| FDB7 | NOP | |||
| FDB8 | NOP | |||
| FDB9 | NOP | |||
| FDBA | NOP | |||
| FDBB | ADD HL,DE | |||
| FDBC | NOP | |||
| FDBD | NOP | |||
| FDBE | NOP | |||
| FDBF | NOP | |||
| FDC0 | NOP | |||
| FDC1 | NOP | |||
| FDC2 | LD (BC),A | |||
| FDC3 | NOP | |||
| FDC4 | NOP | |||
| FDC5 | NOP | |||
| FDC6 | NOP | |||
| FDC7 | NOP | |||
| FDC8 | NOP | |||
| FDC9 | NOP | |||
| FDCA | NOP | |||
| FDCB | NOP | |||
| FDCC | NOP | |||
| FDCD | NOP | |||
| FDCE | NOP | |||
| FDCF | NOP | |||
| FDD0 | NOP | |||
| FDD1 | NOP | |||
| FDD2 | NOP | |||
| FDD3 | NOP | |||
| FDD4 | NOP | |||
| FDD5 | NOP | |||
| FDD6 | NOP | |||
| FDD7 | NOP | |||
| FDD8 | NOP | |||
| FDD9 | NOP | |||
| FDDA | NOP | |||
| FDDB | NOP | |||
| FDDC | NOP | |||
| FDDD | NOP | |||
| FDDE | NOP | |||
| FDDF | NOP | |||
| FDE0 | NOP | |||
| FDE1 | NOP | |||
| FDE2 | NOP | |||
| FDE3 | NOP | |||
| FDE4 | NOP | |||
| FDE5 | NOP | |||
| FDE6 | NOP | |||
| FDE7 | NOP | |||
| FDE8 | NOP | |||
| FDE9 | NOP | |||
| FDEA | NOP | |||
| FDEB | NOP | |||
| FDEC | NOP | |||
| FDED | NOP | |||
| FDEE | NOP | |||
| FDEF | NOP | |||
| FDF0 | NOP | |||
| FDF1 | NOP | |||
| FDF2 | NOP | |||
| FDF3 | NOP | |||
| FDF4 | NOP | |||
| FDF5 | NOP | |||
| FDF6 | NOP | |||
| FDF7 | NOP | |||
| FDF8 | NOP | |||
| FDF9 | NOP | |||
| FDFA | NOP | |||
| FDFB | NOP | |||
| FDFC | NOP | |||
| FDFD | NOP | |||
| FDFE | NOP | |||
| FDFF | NOP | |||
| FE00 | NOP | |||
| FE01 | LD B,B | |||
| FE02 | NOP | |||
| FE03 | LD B,D | |||
| FE04 | NOP | |||
| FE05 | LD B,H | |||
| FE06 | NOP | |||
| FE07 | LD B,(HL) | |||
| FE08 | JR NZ,$FE4A | |||
| FE0A | JR NZ,$FE4E | |||
| FE0C | JR NZ,$FE52 | |||
| FE0E | JR NZ,$FE56 | |||
| FE10 | LD B,B | |||
| FE11 | LD B,B | |||
| FE12 | LD B,B | |||
| FE13 | LD B,D | |||
| FE14 | LD B,B | |||
| FE15 | LD B,H | |||
| FE16 | LD B,B | |||
| FE17 | LD B,(HL) | |||
| FE18 | LD H,B | |||
| FE19 | LD B,B | |||
| FE1A | LD H,B | |||
| FE1B | LD B,D | |||
| FE1C | LD H,B | |||
| FE1D | LD B,H | |||
| FE1E | LD H,B | |||
| FE1F | LD B,(HL) | |||
| FE20 | ADD A,B | |||
| FE21 | LD B,B | |||
| FE22 | ADD A,B | |||
| FE23 | LD B,D | |||
| FE24 | ADD A,B | |||
| FE25 | LD B,H | |||
| FE26 | ADD A,B | |||
| FE27 | LD B,(HL) | |||
| FE28 | AND B | |||
| FE29 | LD B,B | |||
| FE2A | AND B | |||
| FE2B | LD B,D | |||
| FE2C | AND B | |||
| FE2D | LD B,H | |||
| FE2E | AND B | |||
| FE2F | LD B,(HL) | |||
| FE30 | RET NZ | |||
| FE31 | LD B,B | |||
| FE32 | RET NZ | |||
| FE33 | LD B,D | |||
| FE34 | RET NZ | |||
| FE35 | LD B,H | |||
| FE36 | RET NZ | |||
| FE37 | LD B,(HL) | |||
| FE38 | RET PO | |||
| FE39 | LD B,B | |||
| FE3A | RET PO | |||
| FE3B | LD B,D | |||
| FE3C | RET PO | |||
| FE3D | LD B,H | |||
| FE3E | RET PO | |||
| FE3F | LD B,(HL) | |||
| FE40 | NOP | |||
| FE41 | LD C,B | |||
| FE42 | NOP | |||
| FE43 | LD C,D | |||
| FE44 | NOP | |||
| FE45 | LD C,H | |||
| FE46 | NOP | |||
| FE47 | LD C,(HL) | |||
| FE48 | JR NZ,$FE92 | |||
| FE4A | JR NZ,$FE96 | |||
| FE4C | JR NZ,$FE9A | |||
| FE4E | JR NZ,$FE9E | |||
| FE50 | LD B,B | |||
| FE51 | LD C,B | |||
| FE52 | LD B,B | |||
| FE53 | LD C,D | |||
| FE54 | LD B,B | |||
| FE55 | LD C,H | |||
| FE56 | LD B,B | |||
| FE57 | LD C,(HL) | |||
| FE58 | LD H,B | |||
| FE59 | LD C,B | |||
| FE5A | LD H,B | |||
| FE5B | LD C,D | |||
| FE5C | LD H,B | |||
| FE5D | LD C,H | |||
| FE5E | LD H,B | |||
| FE5F | LD C,(HL) | |||
| FE60 | ADD A,B | |||
| FE61 | LD C,B | |||
| FE62 | ADD A,B | |||
| FE63 | LD C,D | |||
| FE64 | ADD A,B | |||
| FE65 | LD C,H | |||
| FE66 | ADD A,B | |||
| FE67 | LD C,(HL) | |||
| FE68 | AND B | |||
| FE69 | LD C,B | |||
| FE6A | AND B | |||
| FE6B | LD C,D | |||
| FE6C | AND B | |||
| FE6D | LD C,H | |||
| FE6E | AND B | |||
| FE6F | LD C,(HL) | |||
| FE70 | RET NZ | |||
| FE71 | LD C,B | |||
| FE72 | RET NZ | |||
| FE73 | LD C,D | |||
| FE74 | RET NZ | |||
| FE75 | LD C,H | |||
| FE76 | RET NZ | |||
| FE77 | LD C,(HL) | |||
| FE78 | RET PO | |||
| FE79 | LD C,B | |||
| FE7A | RET PO | |||
| FE7B | LD C,D | |||
| FE7C | RET PO | |||
| FE7D | LD C,H | |||
| FE7E | RET PO | |||
| FE7F | LD C,(HL) | |||
| FE80 | NOP | |||
| FE81 | LD D,B | |||
| FE82 | NOP | |||
| FE83 | LD D,D | |||
| FE84 | NOP | |||
| FE85 | LD D,H | |||
| FE86 | NOP | |||
| FE87 | LD D,(HL) | |||
| FE88 | JR NZ,$FEDA | |||
| FE8A | JR NZ,$FEDE | |||
| FE8C | JR NZ,$FEE2 | |||
| FE8E | JR NZ,$FEE6 | |||
| FE90 | LD B,B | |||
| FE91 | LD D,B | |||
| FE92 | LD B,B | |||
| FE93 | LD D,D | |||
| FE94 | LD B,B | |||
| FE95 | LD D,H | |||
| FE96 | LD B,B | |||
| FE97 | LD D,(HL) | |||
| FE98 | LD H,B | |||
| FE99 | LD D,B | |||
| FE9A | LD H,B | |||
| FE9B | LD D,D | |||
| FE9C | LD H,B | |||
| FE9D | LD D,H | |||
| FE9E | LD H,B | |||
| FE9F | LD D,(HL) | |||
| FEA0 | ADD A,B | |||
| FEA1 | LD D,B | |||
| FEA2 | ADD A,B | |||
| FEA3 | LD D,D | |||
| FEA4 | ADD A,B | |||
| FEA5 | LD D,H | |||
| FEA6 | ADD A,B | |||
| FEA7 | LD D,(HL) | |||
| FEA8 | AND B | |||
| FEA9 | LD D,B | |||
| FEAA | AND B | |||
| FEAB | LD D,D | |||
| FEAC | AND B | |||
| FEAD | LD D,H | |||
| FEAE | AND B | |||
| FEAF | LD D,(HL) | |||
| FEB0 | RET NZ | |||
| FEB1 | LD D,B | |||
| FEB2 | RET NZ | |||
| FEB3 | LD D,D | |||
| FEB4 | RET NZ | |||
| FEB5 | LD D,H | |||
| FEB6 | RET NZ | |||
| FEB7 | LD D,(HL) | |||
| FEB8 | RET PO | |||
| FEB9 | LD D,B | |||
| FEBA | RET PO | |||
| FEBB | LD D,D | |||
| FEBC | RET PO | |||
| FEBD | LD D,H | |||
| FEBE | RET PO | |||
| FEBF | LD D,(HL) | |||
| FEC0 | NOP | |||
| FEC1 | LD E,B | |||
| FEC2 | NOP | |||
| FEC3 | LD E,D | |||
| FEC4 | NOP | |||
| FEC5 | LD E,H | |||
| FEC6 | NOP | |||
| FEC7 | LD E,(HL) | |||
| FEC8 | JR NZ,$FF22 | |||
| FECA | JR NZ,$FF26 | |||
| FECC | JR NZ,$FF2A | |||
| FECE | JR NZ,$FF2E | |||
| FED0 | LD B,B | |||
| FED1 | LD E,B | |||
| FED2 | LD B,B | |||
| FED3 | LD E,D | |||
| FED4 | LD B,B | |||
| FED5 | LD E,H | |||
| FED6 | LD B,B | |||
| FED7 | LD E,(HL) | |||
| FED8 | LD H,B | |||
| FED9 | LD E,B | |||
| FEDA | LD H,B | |||
| FEDB | LD E,D | |||
| FEDC | LD H,B | |||
| FEDD | LD E,H | |||
| FEDE | LD H,B | |||
| FEDF | LD E,(HL) | |||
| FEE0 | ADD A,B | |||
| FEE1 | LD E,B | |||
| FEE2 | ADD A,B | |||
| FEE3 | LD E,D | |||
| FEE4 | ADD A,B | |||
| FEE5 | LD E,H | |||
| FEE6 | ADD A,B | |||
| FEE7 | LD E,(HL) | |||
| FEE8 | AND B | |||
| FEE9 | LD E,B | |||
| FEEA | AND B | |||
| FEEB | LD E,D | |||
| FEEC | AND B | |||
| FEED | LD E,H | |||
| FEEE | AND B | |||
| FEEF | LD E,(HL) | |||
| FEF0 | RET NZ | |||
| FEF1 | LD E,B | |||
| FEF2 | RET NZ | |||
| FEF3 | LD E,D | |||
| FEF4 | RET NZ | |||
| FEF5 | LD E,H | |||
| FEF6 | RET NZ | |||
| FEF7 | LD E,(HL) | |||
| FEF8 | RET PO | |||
| FEF9 | LD E,B | |||
| FEFA | RET PO | |||
| FEFB | LD E,D | |||
| FEFC | RET PO | |||
| FEFD | LD E,H | |||
| FEFE | RET PO | |||
| FEFF | LD E,(HL) | |||
| FF00 | NOP | |||
| FF01 | NOP | |||
| FF02 | LD IX,$4000 | |||
| FF06 | LD DE,$BE00 | |||
| FF09 | LD A,$FF | |||
| FF0B | SCF | |||
| FF0C | INC D | |||
| FF0D | EX AF,AF' | |||
| FF0E | DEC D | |||
| FF0F | DI | |||
| FF10 | LD A,$0F | |||
| FF12 | OUT ($FE),A | |||
| FF14 | IN A,($FE) | |||
| FF16 | RRA | |||
| FF17 | AND $20 | |||
| FF19 | OR $02 | |||
| FF1B | LD C,A | |||
| FF1C | CP A | |||
| FF1D | CALL $FFA7 | |||
| FF20 | JR NC,$FF1D | |||
| FF22 | LD HL,$0415 | |||
| FF25 | DJNZ $FF25 | |||
| FF27 | DEC HL | |||
| FF28 | LD A,H | |||
| FF29 | OR L | |||
| FF2A | JR NZ,$FF25 | |||
| FF2C | CALL $FFA3 | |||
| FF2F | JR NC,$FF1D | |||
| FF31 | LD B,$9C | |||
| FF33 | CALL $FFA3 | |||
| FF36 | JR NC,$FF1D | |||
| FF38 | LD A,$C6 | |||
| FF3A | CP B | |||
| FF3B | JR NC,$FF1D | |||
| FF3D | INC H | |||
| FF3E | JR NZ,$FF31 | |||
| FF40 | LD B,$C9 | |||
| FF42 | CALL $FFA7 | |||
| FF45 | JR NC,$FF1D | |||
| FF47 | LD A,B | |||
| FF48 | CP $D4 | |||
| FF4A | JR NC,$FF40 | |||
| FF4C | CALL $FFA7 | |||
| FF4F | JP NC,$0000 | |||
| FF52 | LD A,C | |||
| FF53 | XOR $03 | |||
| FF55 | LD C,A | |||
| FF56 | LD H,$00 | |||
| FF58 | LD B,$B0 | |||
| FF5A | JR $FF83 | |||
| FF5C | EX AF,AF' | |||
| FF5D | JR NZ,$FF6E | |||
| FF5F | JR NC,$FF78 | |||
| FF61 | PUSH AF | |||
| FF62 | LD A,L | |||
| FF63 | XOR $A5 | |||
| FF65 | RRCA | |||
| FF66 | ADD A,$0F | |||
| FF68 | LD (IX+$00),A | |||
| FF6B | POP AF | |||
| FF6C | JR $FF7D | |||
| FF6E | RL C | |||
| FF70 | XOR L | |||
| FF71 | RET NZ | |||
| FF72 | LD A,C | |||
| FF73 | RRA | |||
| FF74 | LD C,A | |||
| FF75 | INC DE | |||
| FF76 | JR $FF7F | |||
| FF78 | LD A,(IX+$00) | |||
| FF7B | XOR L | |||
| FF7C | RET NZ | |||
| FF7D | INC IX | |||
| FF7F | DEC DE | |||
| FF80 | EX AF,AF' | |||
| FF81 | LD B,$B2 | |||
| FF83 | LD L,$01 | |||
| FF85 | CALL $FFA3 | |||
| FF88 | RET NC | |||
| FF89 | LD A,$CB | |||
| FF8B | CP B | |||
| FF8C | RL L | |||
| FF8E | LD B,$B0 | |||
| FF90 | JP NC,$FF85 | |||
| FF93 | LD A,H | |||
| FF94 | XOR L | |||
| FF95 | LD H,A | |||
| FF96 | LD A,D | |||
| FF97 | OR E | |||
| FF98 | JR NZ,$FF5C | |||
| FF9A | LD A,H | |||
| FF9B | CP $01 | |||
| FF9D | JP NC,$0000 | |||
| FFA0 | JP $FFC7 | |||
| FFA3 | CALL $FFA7 | |||
| FFA6 | RET NC | |||
| FFA7 | LD A,$16 | |||
| FFA9 | DEC A | |||
| FFAA | JR NZ,$FFA9 | |||
| FFAC | AND A | |||
| FFAD | INC B | |||
| FFAE | RET Z | |||
| FFAF | LD A,$7F | |||
| FFB1 | IN A,($FE) | |||
| FFB3 | RRA | |||
| FFB4 | NOP | |||
| FFB5 | XOR C | |||
| FFB6 | AND $20 | |||
| FFB8 | JR Z,$FFAD | |||
| FFBA | LD A,C | |||
| FFBB | CPL | |||
| FFBC | LD C,A | |||
| FFBD | LD A,R | |||
| FFBF | AND $07 | |||
| FFC1 | OR $08 | |||
| FFC3 | OUT ($FE),A | |||
| FFC5 | SCF | |||
| FFC6 | RET | |||
| FFC7 | LD SP,$6200 | |||
| FFCA | JP $641E | |||
| FFCD | LD HL,$FF63 | |||
| FFD0 | LD A,L | |||
| FFD1 | LD A,L | |||
| FFD2 | SCF | |||
| FFD3 | BIT 2,A | |||
| FFD5 | LD DE,$FF66 | |||
| FFD8 | LD A,(HL) | |||
| FFD9 | LD A,(HL) | |||
| FFDA | LD A,(HL) | |||
| FFDB | LD B,A | |||
| FFDC | LD C,A | |||
| FFDD | SET 2,A | |||
| FFDF | SET 2,A | |||
| FFE1 | LD A,(DE) | |||
| FFE2 | LD (HL),A | |||
| FFE3 | LD (HL),A | |||
| FFE4 | LD A,B | |||
| FFE5 | LD (DE),A | |||
| FFE6 | INC HL | |||
| FFE7 | INC DE | |||
| FFE8 | LD A,(HL) | |||
| FFE9 | LD B,A | |||
| FFEA | LD C,A | |||
| FFEB | SET 2,A | |||
| FFED | SET 2,A | |||
| FFEF | LD A,(DE) | |||
| FFF0 | LD (HL),A | |||
| FFF1 | LD (HL),A | |||
| FFF2 | LD A,B | |||
| FFF3 | LD (DE),A | |||
| FFF4 | JP $FEEF | |||
| FFF7 | NOP | |||
| FFF8 | NOP | |||
| FFF9 | NOP | |||
| FFFA | NOP | |||
| FFFB | NOP | |||
| FFFC | AND (HL) | |||
| FFFD | RST $38 | |||
| FFFE | ADC A,B | |||
| FFFF | RST $38 | |||