Prev: E20A Up: Map Next: E3A5
E2D9: Interpreter handler: draw graphic frame
Reads a byte then a word pointer from the script -- e.g. one of the bitmap_endshot_N pointers at $E104 onward -- calls draw_endshot to blit it, then rejoins run_script's loop.
draw_endshot ($E4A9) is the montage-shot blitter, not a generic tile blit -- 64-row bitmap copy plus attribute copy.
es_clear_then_draw_frame E2D9 PUSH HL
E2DA CALL $609C Call $E49C (buffer zeroing thing)
E2DD POP HL
es_draw_frame_common E2DE LD E,(HL)
E2DF INC HL
E2E0 LD D,(HL)
E2E1 INC HL
E2E2 LD A,(HL)
E2E3 INC HL
E2E4 PUSH HL
E2E5 LD H,(HL)
E2E6 LD L,A
E2E7 EX DE,HL
E2E8 CALL $60A9
E2EB POP HL
E2EC INC HL
E2ED JP $5E0D
Command 11: clear the backbuffer, then render a run of text.
es_handler_render_text E2F0 PUSH HL
E2F1 CALL $6099
E2F4 POP HL
Command 10: render a run of text without clearing first. Reads a colour byte and a destination word from the script, then plots characters until one is found with its top bit set.
es_render_text_common E2F5 LD C,(HL)
E2F6 INC HL
E2F7 LD E,(HL)
E2F8 INC HL
E2F9 LD D,(HL)
E2FA INC HL
E2FB PUSH HL
E2FC LD A,D
E2FD RRA
E2FE RRA
E2FF RRA
E300 AND $03
E302 ADD A,$EF
E304 LD H,A
E305 LD L,E
E306 EXX
E307 EX (SP),HL
E308 PUSH DE
E309 PUSH BC
es_clear_then_draw_frame_0 E30A LD A,(HL)
E30B AND $7F
E30D PUSH HL
E30E CALL $5F1F
E311 POP HL
E312 BIT 7,(HL)
E314 INC HL
E315 JR Z,es_clear_then_draw_frame_0
E317 EXX
E318 POP BC
E319 POP DE
E31A POP HL
E31B EXX
E31C JP $5E0D
Render one end-screen character at double height. A space advances both cursors by a column and draws nothing.
es_plot_char E31F SUB $20
E321 JR NZ,es_plot_char_glyph
E323 EXX
E324 INC E
E325 INC L
E326 EXX
E327 RET
es_plot_char_glyph E328 LD C,$12
E32A CP $21
E32C JR NC,es_clear_then_draw_frame_1
E32E LD C,$0B
E330 CP $10
E332 JR NC,es_clear_then_draw_frame_1
E334 LD C,$00
E336 DEC A
E337 JR Z,es_clear_then_draw_frame_2
E339 INC C
E33A SUB $07
E33C JR Z,es_clear_then_draw_frame_2
E33E INC C
E33F DEC A
E340 JR Z,es_clear_then_draw_frame_2
E342 INC C
E343 SUB $03
E345 JR Z,es_clear_then_draw_frame_2
E347 INC C
E348 JR es_clear_then_draw_frame_2
es_clear_then_draw_frame_1 E34A SUB C
E34B LD C,A
es_clear_then_draw_frame_2 E34C LD A,C
E34D RLCA
E34E LD B,A
E34F RLCA
E350 ADD A,B
E351 ADD A,C
E352 LD B,$00
E354 RL B
E356 LD C,A
E357 LD HL,$A27A
E35A ADD HL,BC
E35B EXX
E35C PUSH DE
E35D INC E
E35E EXX
E35F POP DE
E360 LD A,(HL)
E361 LD (DE),A
E362 INC D
E363 LDI
E365 DEC E
E366 INC D
E367 LD A,(HL)
E368 LD (DE),A
E369 INC D
E36A LDI
E36C DEC E
E36D INC D
E36E LD A,(HL)
E36F LD (DE),A
E370 INC D
E371 LDI
E373 DEC E
E374 INC D
E375 LD A,(HL)
E376 LD (DE),A
E377 INC D
E378 LDI
E37A LD A,E
E37B ADD A,$1F
E37D LD E,A
E37E LD A,D
E37F SUB $07
This entry point is used by the routine at handshake_table.
E381 LD D,A
E382 LD A,(HL)
E383 LD (DE),A
E384 INC D
E385 LDI
E387 DEC E
E388 INC D
E389 LD A,(HL)
E38A LD (DE),A
E38B INC D
E38C LDI
E38E DEC E
E38F INC D
E390 LD A,(HL)
E391 LD (DE),A
E392 INC D
E393 LDI
E395 DEC E
E396 INC D
E397 XOR A
E398 LD (DE),A
E399 EXX
E39A LD B,L
E39B LD (HL),C
E39C LD A,L
E39D ADD A,$20
E39F LD L,A
E3A0 LD (HL),C
E3A1 LD L,B
E3A2 INC L
E3A3 EXX
E3A4 RET
Prev: E20A Up: Map Next: E3A5