Prev: E0FE Up: Map Next: E2D9
E20A: Command interpreter
Confirmed live by trace-end-screen.log: reads script bytes via $A16D and dispatches on a DEC A/JP Z chain. Self-modifies the CALL operand at $E030 (live address $5C31, patched by LD ($5C31),DE at $E2D4) to repoint the main loop's per-frame handler call based on which command last ran.
run_script E20A LD HL,($A16D) Load script pointer
rs_loop E20D LD A,(HL) Load the next script command
E20E INC HL Advance script program counter
E20F DEC A If command == 1 goto es_clear_then_draw_frame
E210 JP Z,$5ED9
E213 DEC A If command == 2 goto es_draw_frame_common
E214 JP Z,$5EDE
E217 LD DE,$602E -> es_attribute_fade_in
E21A LD C,$10 16
E21C DEC A If command == 3 goto $E2CD/es_set_dispatch
E21D JP Z,$5ECD
E220 LD DE,$6072 -> es_attribute_fade_out
E223 DEC A If command == 4 goto $E2CD/es_set_dispatch
E224 JP Z,$5ECD
E227 LD DE,$5FB7 -> es_handler_handshake
E22A DEC A If command == 5 goto $E2CD/es_set_dispatch
E22B JP Z,$5ECD
E22E LD C,$20 32
E230 LD DE,$606D -> es_handler_glyph_fade_c
E233 DEC A If command == 6 goto ...
E234 JP Z,$5ECD
E237 DEC A If command == 7 goto ...
E238 JP Z,$5EC8
E23B DEC A If command == 8 goto ...
E23C JP Z,$5EC0
E23F DEC A If command == 9 goto ...
E240 JP Z,$5EC3
E243 DEC A If command == 10 goto ...
E244 JP Z,$5EF5
E247 DEC A If command == 11 goto ...
E248 JP Z,$5EF0
E24B DEC A If command == 12 goto ...
E24C JR Z,es_handler_chatter
E24E DEC A If command == 13 goto $E256
E24F JR Z,es_handler_draw_score
E251 LD HL,$5E04
E254 JR rs_loop Loop
es_handler_draw_score E256 PUSH HL
E257 LD BC,$03E8
run_script_0 E25A PUSH BC
E25B LD DE,$0050
E25E XOR A
E25F CALL $9D17
E262 CALL $9F12
E265 LD DE,$0202
E268 CALL $8A36
E26B POP BC
E26C DEC BC
E26D LD A,B
E26E OR C
E26F JR NZ,run_script_0
E271 INC A
E272 LD ($A16F),A
E275 LD BC,$0400
E278 LD DE,$8005
E27B LD HL,$5DFB
run_script_1 E27E LD A,(DE)
E27F RLCA
E280 RLCA
E281 RLCA
E282 RLCA
E283 AND $0F
E285 JR NZ,run_script_2
E287 RLC C
E289 JR C,run_script_2
E28B LD A,$20
E28D JR run_script_3
run_script_2 E28F LD C,$FF
E291 ADD A,$30
run_script_3 E293 LD (HL),A
E294 INC HL
E295 LD A,(DE)
E296 AND $0F
E298 JR NZ,run_script_4
E29A RLC C
E29C JR C,run_script_4
E29E LD A,$20
E2A0 JR run_script_5
run_script_4 E2A2 LD C,$FF
E2A4 ADD A,$30
run_script_5 E2A6 LD (HL),A
E2A7 INC HL
E2A8 DEC DE
E2A9 DJNZ run_script_1
E2AB DEC HL
E2AC SET 7,(HL)
E2AE POP HL
E2AF JP $5E0D
Command 12: start chatter using a block pointer taken from the script.
es_handler_chatter E2B2 LD E,(HL)
E2B3 INC HL
E2B4 LD D,(HL)
E2B5 INC HL
E2B6 PUSH HL
E2B7 EX DE,HL
E2B8 INC A
E2B9 CALL $9945
E2BC POP HL
E2BD JP $5E0D
E2C0 LD ($A172),A
E2C3 LD DE,$5FBA
E2C6 JR run_script_6
E2C8 LD DE,$5ED8
run_script_6 E2CB LD C,(HL)
E2CC INC HL
es_set_dispatch E2CD LD ($A16D),HL Update script pointer
E2D0 LD A,C
E2D1 LD ($A170),A
E2D4 LD ($5C31),DE Store func ptr in E031
E2D8 RET
Prev: E0FE Up: Map Next: E2D9