1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2025-08-07 06:30:04 +00:00
Files
kickc/src/test/ref/complex/tetris/tetris.log

25965 lines
1.9 MiB

Resolved forward reference next_piece_idx to (byte) next_piece_idx
Resolved forward reference PIECES to (word[]) PIECES
Resolved forward reference PIECES_NEXT_CHARS to (byte[]) PIECES_NEXT_CHARS
Resolved forward reference next_piece_idx to (byte) next_piece_idx
Resolved forward reference sprites_irq to interrupt(HARDWARE_CLOBBER)(void()) sprites_irq()
Resolved forward reference COLLISION_NONE to (byte) COLLISION_NONE
Resolved forward reference COLLISION_NONE to (byte) COLLISION_NONE
Resolved forward reference COLLISION_NONE to (byte) COLLISION_NONE
Resolved forward reference COLLISION_NONE to (byte) COLLISION_NONE
Identified constant variable (byte) render_screen_original::SPACE
Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx
Inlined call call vicSelectGfxBank (byte*) PLAYFIELD_CHARSET
Inlined call (byte~) render_show::$2 ← call toD018 (byte*) PLAYFIELD_SCREEN_1 (byte*) PLAYFIELD_CHARSET
Inlined call (byte~) render_show::$1 ← call toD018 (byte*) PLAYFIELD_SCREEN_2 (byte*) PLAYFIELD_CHARSET
Inlined call (byte~) $6 ← call toSpritePtr (byte*) PLAYFIELD_SPRITES
Inlined call (byte~) sprites_irq::$5 ← call toSpritePtr (byte*) PLAYFIELD_SPRITES
Inlined call (byte~) play_spawn_current::$6 ← call sid_rnd
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
(byte*) PROCPORT_DDR#0 ← ((byte*)) (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) PROCPORT_DDR_MEMORY_MASK#0 ← (byte/signed byte/word/signed word/dword/signed dword) 7
(byte*) PROCPORT#0 ← ((byte*)) (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) PROCPORT_RAM_IO#0 ← (byte/signed byte/word/signed word/dword/signed dword) $35
(word) SPRITE_PTRS#0 ← (word/signed word/dword/signed dword) $3f8
(byte*) SPRITES_XPOS#0 ← ((byte*)) (word/dword/signed dword) $d000
(byte*) SPRITES_YPOS#0 ← ((byte*)) (word/dword/signed dword) $d001
(byte*) RASTER#0 ← ((byte*)) (word/dword/signed dword) $d012
(byte*) SPRITES_ENABLE#0 ← ((byte*)) (word/dword/signed dword) $d015
(byte*) SPRITES_EXPAND_Y#0 ← ((byte*)) (word/dword/signed dword) $d017
(byte*) SPRITES_MC#0 ← ((byte*)) (word/dword/signed dword) $d01c
(byte*) SPRITES_EXPAND_X#0 ← ((byte*)) (word/dword/signed dword) $d01d
(byte*) BORDERCOL#0 ← ((byte*)) (word/dword/signed dword) $d020
(byte*) BGCOL1#0 ← ((byte*)) (word/dword/signed dword) $d021
(byte*) BGCOL2#0 ← ((byte*)) (word/dword/signed dword) $d022
(byte*) BGCOL3#0 ← ((byte*)) (word/dword/signed dword) $d023
(byte*) BGCOL4#0 ← ((byte*)) (word/dword/signed dword) $d024
(byte*) SPRITES_COLS#0 ← ((byte*)) (word/dword/signed dword) $d027
(byte*) VIC_CONTROL#0 ← ((byte*)) (word/dword/signed dword) $d011
(byte*) D011#0 ← ((byte*)) (word/dword/signed dword) $d011
(byte) VIC_ECM#0 ← (byte/signed byte/word/signed word/dword/signed dword) $40
(byte) VIC_DEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) $10
(byte) VIC_RSEL#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8
(byte*) D018#0 ← ((byte*)) (word/dword/signed dword) $d018
(byte*) IRQ_STATUS#0 ← ((byte*)) (word/dword/signed dword) $d019
(byte*) IRQ_ENABLE#0 ← ((byte*)) (word/dword/signed dword) $d01a
(byte) IRQ_RASTER#0 ← (byte/signed byte/word/signed word/dword/signed dword) 1
(byte*) COLS#0 ← ((byte*)) (word/dword/signed dword) $d800
(byte*) CIA1_PORT_A#0 ← ((byte*)) (word/dword/signed dword) $dc00
(byte*) CIA1_PORT_B#0 ← ((byte*)) (word/dword/signed dword) $dc01
(byte*) CIA1_INTERRUPT#0 ← ((byte*)) (word/dword/signed dword) $dc0d
(byte) CIA_INTERRUPT_CLEAR#0 ← (byte/signed byte/word/signed word/dword/signed dword) $7f
(byte*) CIA2_PORT_A#0 ← ((byte*)) (word/dword/signed dword) $dd00
(byte*) CIA2_PORT_A_DDR#0 ← ((byte*)) (word/dword/signed dword) $dd02
(void()**) HARDWARE_IRQ#0 ← ((void()**)) (word/dword/signed dword) $fffe
(byte) BLACK#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) RED#0 ← (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) CYAN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 3
(byte) PURPLE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 4
(byte) GREEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 5
(byte) BLUE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 6
(byte) ORANGE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8
(byte) PINK#0 ← (byte/signed byte/word/signed word/dword/signed dword) $a
(byte) DARK_GREY#0 ← (byte/signed byte/word/signed word/dword/signed dword) $b
(byte) GREY#0 ← (byte/signed byte/word/signed word/dword/signed dword) $c
(byte) LIGHT_GREEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) $d
(byte) LIGHT_BLUE#0 ← (byte/signed byte/word/signed word/dword/signed dword) $e
to:@5
@5: scope:[] from @begin
(byte) KEY_Z#0 ← (byte/signed byte/word/signed word/dword/signed dword) $c
(byte) KEY_LSHIFT#0 ← (byte/signed byte/word/signed word/dword/signed dword) $f
(byte) KEY_X#0 ← (byte/signed byte/word/signed word/dword/signed dword) $17
(byte) KEY_DOT#0 ← (byte/signed byte/word/signed word/dword/signed dword) $2c
(byte) KEY_COMMA#0 ← (byte/signed byte/word/signed word/dword/signed dword) $2f
(byte) KEY_RSHIFT#0 ← (byte/signed byte/word/signed word/dword/signed dword) $34
(byte) KEY_CTRL#0 ← (byte/signed byte/word/signed word/dword/signed dword) $3a
(byte) KEY_SPACE#0 ← (byte/signed byte/word/signed word/dword/signed dword) $3c
(byte) KEY_COMMODORE#0 ← (byte/signed byte/word/signed word/dword/signed dword) $3d
(byte[8]) keyboard_matrix_row_bitmask#0 ← { (byte/word/signed word/dword/signed dword) $fe, (byte/word/signed word/dword/signed dword) $fd, (byte/word/signed word/dword/signed dword) $fb, (byte/word/signed word/dword/signed dword) $f7, (byte/word/signed word/dword/signed dword) $ef, (byte/word/signed word/dword/signed dword) $df, (byte/word/signed word/dword/signed dword) $bf, (byte/signed byte/word/signed word/dword/signed dword) $7f }
(byte[8]) keyboard_matrix_col_bitmask#0 ← { (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 2, (byte/signed byte/word/signed word/dword/signed dword) 4, (byte/signed byte/word/signed word/dword/signed dword) 8, (byte/signed byte/word/signed word/dword/signed dword) $10, (byte/signed byte/word/signed word/dword/signed dword) $20, (byte/signed byte/word/signed word/dword/signed dword) $40, (byte/word/signed word/dword/signed dword) $80 }
to:@9
keyboard_matrix_read: scope:[keyboard_matrix_read] from keyboard_event_scan::@8
(byte) keyboard_matrix_read::rowid#1 ← phi( keyboard_event_scan::@8/(byte) keyboard_matrix_read::rowid#0 )
*((byte*) CIA1_PORT_A#0) ← *((byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#1)
(byte~) keyboard_matrix_read::$0 ← ~ *((byte*) CIA1_PORT_B#0)
(byte) keyboard_matrix_read::row_pressed_bits#0 ← (byte~) keyboard_matrix_read::$0
(byte) keyboard_matrix_read::return#0 ← (byte) keyboard_matrix_read::row_pressed_bits#0
to:keyboard_matrix_read::@return
keyboard_matrix_read::@return: scope:[keyboard_matrix_read] from keyboard_matrix_read
(byte) keyboard_matrix_read::return#3 ← phi( keyboard_matrix_read/(byte) keyboard_matrix_read::return#0 )
(byte) keyboard_matrix_read::return#1 ← (byte) keyboard_matrix_read::return#3
return
to:@return
@9: scope:[] from @5
(byte[8]) keyboard_events#0 ← { fill( 8, 0) }
(byte) keyboard_events_size#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) keyboard_modifiers#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) KEY_MODIFIER_LSHIFT#0 ← (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) KEY_MODIFIER_RSHIFT#0 ← (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) KEY_MODIFIER_CTRL#0 ← (byte/signed byte/word/signed word/dword/signed dword) 4
(byte) KEY_MODIFIER_COMMODORE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8
(byte[8]) keyboard_scan_values#0 ← { fill( 8, 0) }
to:@12
keyboard_event_scan: scope:[keyboard_event_scan] from main::@35
(byte) keyboard_events_size#55 ← phi( main::@35/(byte) keyboard_events_size#26 )
(byte) keyboard_event_scan::keycode#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) keyboard_event_scan::row#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:keyboard_event_scan::@8
keyboard_event_scan::@8: scope:[keyboard_event_scan] from keyboard_event_scan keyboard_event_scan::@10
(byte) keyboard_events_size#45 ← phi( keyboard_event_scan/(byte) keyboard_events_size#55 keyboard_event_scan::@10/(byte) keyboard_events_size#56 )
(byte) keyboard_event_scan::keycode#11 ← phi( keyboard_event_scan/(byte) keyboard_event_scan::keycode#0 keyboard_event_scan::@10/(byte) keyboard_event_scan::keycode#14 )
(byte) keyboard_event_scan::row#2 ← phi( keyboard_event_scan/(byte) keyboard_event_scan::row#0 keyboard_event_scan::@10/(byte) keyboard_event_scan::row#1 )
(byte) keyboard_matrix_read::rowid#0 ← (byte) keyboard_event_scan::row#2
call keyboard_matrix_read
(byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#1
to:keyboard_event_scan::@25
keyboard_event_scan::@25: scope:[keyboard_event_scan] from keyboard_event_scan::@8
(byte) keyboard_events_size#37 ← phi( keyboard_event_scan::@8/(byte) keyboard_events_size#45 )
(byte) keyboard_event_scan::keycode#7 ← phi( keyboard_event_scan::@8/(byte) keyboard_event_scan::keycode#11 )
(byte) keyboard_event_scan::row#3 ← phi( keyboard_event_scan::@8/(byte) keyboard_event_scan::row#2 )
(byte) keyboard_matrix_read::return#4 ← phi( keyboard_event_scan::@8/(byte) keyboard_matrix_read::return#2 )
(byte~) keyboard_event_scan::$12 ← (byte) keyboard_matrix_read::return#4
(byte) keyboard_event_scan::row_scan#0 ← (byte~) keyboard_event_scan::$12
(bool~) keyboard_event_scan::$13 ← (byte) keyboard_event_scan::row_scan#0 != *((byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#3)
if((bool~) keyboard_event_scan::$13) goto keyboard_event_scan::@9
to:keyboard_event_scan::@21
keyboard_event_scan::@9: scope:[keyboard_event_scan] from keyboard_event_scan::@25
(byte) keyboard_events_size#30 ← phi( keyboard_event_scan::@25/(byte) keyboard_events_size#37 )
(byte) keyboard_event_scan::keycode#12 ← phi( keyboard_event_scan::@25/(byte) keyboard_event_scan::keycode#7 )
(byte) keyboard_event_scan::row#9 ← phi( keyboard_event_scan::@25/(byte) keyboard_event_scan::row#3 )
(byte) keyboard_event_scan::row_scan#5 ← phi( keyboard_event_scan::@25/(byte) keyboard_event_scan::row_scan#0 )
(byte) keyboard_event_scan::col#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:keyboard_event_scan::@11
keyboard_event_scan::@21: scope:[keyboard_event_scan] from keyboard_event_scan::@25
(byte) keyboard_events_size#64 ← phi( keyboard_event_scan::@25/(byte) keyboard_events_size#37 )
(byte) keyboard_event_scan::row#7 ← phi( keyboard_event_scan::@25/(byte) keyboard_event_scan::row#3 )
(byte) keyboard_event_scan::keycode#3 ← phi( keyboard_event_scan::@25/(byte) keyboard_event_scan::keycode#7 )
(byte/signed word/word/dword/signed dword~) keyboard_event_scan::$14 ← (byte) keyboard_event_scan::keycode#3 + (byte/signed byte/word/signed word/dword/signed dword) 8
(byte) keyboard_event_scan::keycode#1 ← (byte/signed word/word/dword/signed dword~) keyboard_event_scan::$14
to:keyboard_event_scan::@10
keyboard_event_scan::@10: scope:[keyboard_event_scan] from keyboard_event_scan::@20 keyboard_event_scan::@21
(byte) keyboard_events_size#56 ← phi( keyboard_event_scan::@20/(byte) keyboard_events_size#63 keyboard_event_scan::@21/(byte) keyboard_events_size#64 )
(byte) keyboard_event_scan::keycode#14 ← phi( keyboard_event_scan::@20/(byte) keyboard_event_scan::keycode#15 keyboard_event_scan::@21/(byte) keyboard_event_scan::keycode#1 )
(byte) keyboard_event_scan::row#4 ← phi( keyboard_event_scan::@20/(byte) keyboard_event_scan::row#6 keyboard_event_scan::@21/(byte) keyboard_event_scan::row#7 )
(byte) keyboard_event_scan::row#1 ← (byte) keyboard_event_scan::row#4 + rangenext(0,7)
(bool~) keyboard_event_scan::$25 ← (byte) keyboard_event_scan::row#1 != rangelast(0,7)
if((bool~) keyboard_event_scan::$25) goto keyboard_event_scan::@8
to:keyboard_event_scan::@23
keyboard_event_scan::@11: scope:[keyboard_event_scan] from keyboard_event_scan::@12 keyboard_event_scan::@9
(byte) keyboard_events_size#21 ← phi( keyboard_event_scan::@12/(byte) keyboard_events_size#29 keyboard_event_scan::@9/(byte) keyboard_events_size#30 )
(byte) keyboard_event_scan::keycode#8 ← phi( keyboard_event_scan::@12/(byte) keyboard_event_scan::keycode#2 keyboard_event_scan::@9/(byte) keyboard_event_scan::keycode#12 )
(byte) keyboard_event_scan::col#2 ← phi( keyboard_event_scan::@12/(byte) keyboard_event_scan::col#1 keyboard_event_scan::@9/(byte) keyboard_event_scan::col#0 )
(byte) keyboard_event_scan::row#5 ← phi( keyboard_event_scan::@12/(byte) keyboard_event_scan::row#8 keyboard_event_scan::@9/(byte) keyboard_event_scan::row#9 )
(byte) keyboard_event_scan::row_scan#1 ← phi( keyboard_event_scan::@12/(byte) keyboard_event_scan::row_scan#4 keyboard_event_scan::@9/(byte) keyboard_event_scan::row_scan#5 )
(byte~) keyboard_event_scan::$15 ← (byte) keyboard_event_scan::row_scan#1 ^ *((byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#5)
(byte~) keyboard_event_scan::$16 ← (byte~) keyboard_event_scan::$15 & *((byte[8]) keyboard_matrix_col_bitmask#0 + (byte) keyboard_event_scan::col#2)
(bool~) keyboard_event_scan::$17 ← (byte~) keyboard_event_scan::$16 != (byte/signed byte/word/signed word/dword/signed dword) 0
(bool~) keyboard_event_scan::$18 ← ! (bool~) keyboard_event_scan::$17
if((bool~) keyboard_event_scan::$18) goto keyboard_event_scan::@12
to:keyboard_event_scan::@16
keyboard_event_scan::@12: scope:[keyboard_event_scan] from keyboard_event_scan::@11 keyboard_event_scan::@13 keyboard_event_scan::@14 keyboard_event_scan::@18
(byte) keyboard_events_size#29 ← phi( keyboard_event_scan::@11/(byte) keyboard_events_size#21 keyboard_event_scan::@13/(byte) keyboard_events_size#38 keyboard_event_scan::@14/(byte) keyboard_events_size#1 keyboard_event_scan::@18/(byte) keyboard_events_size#2 )
(byte) keyboard_event_scan::row#8 ← phi( keyboard_event_scan::@11/(byte) keyboard_event_scan::row#5 keyboard_event_scan::@13/(byte) keyboard_event_scan::row#10 keyboard_event_scan::@14/(byte) keyboard_event_scan::row#11 keyboard_event_scan::@18/(byte) keyboard_event_scan::row#12 )
(byte) keyboard_event_scan::row_scan#4 ← phi( keyboard_event_scan::@11/(byte) keyboard_event_scan::row_scan#1 keyboard_event_scan::@13/(byte) keyboard_event_scan::row_scan#7 keyboard_event_scan::@14/(byte) keyboard_event_scan::row_scan#8 keyboard_event_scan::@18/(byte) keyboard_event_scan::row_scan#9 )
(byte) keyboard_event_scan::col#3 ← phi( keyboard_event_scan::@11/(byte) keyboard_event_scan::col#2 keyboard_event_scan::@13/(byte) keyboard_event_scan::col#5 keyboard_event_scan::@14/(byte) keyboard_event_scan::col#6 keyboard_event_scan::@18/(byte) keyboard_event_scan::col#7 )
(byte) keyboard_event_scan::keycode#4 ← phi( keyboard_event_scan::@11/(byte) keyboard_event_scan::keycode#8 keyboard_event_scan::@13/(byte) keyboard_event_scan::keycode#9 keyboard_event_scan::@14/(byte) keyboard_event_scan::keycode#5 keyboard_event_scan::@18/(byte) keyboard_event_scan::keycode#6 )
(byte) keyboard_event_scan::keycode#2 ← ++ (byte) keyboard_event_scan::keycode#4
(byte) keyboard_event_scan::col#1 ← (byte) keyboard_event_scan::col#3 + rangenext(0,7)
(bool~) keyboard_event_scan::$24 ← (byte) keyboard_event_scan::col#1 != rangelast(0,7)
if((bool~) keyboard_event_scan::$24) goto keyboard_event_scan::@11
to:keyboard_event_scan::@20
keyboard_event_scan::@16: scope:[keyboard_event_scan] from keyboard_event_scan::@11
(byte) keyboard_event_scan::row#13 ← phi( keyboard_event_scan::@11/(byte) keyboard_event_scan::row#5 )
(byte) keyboard_event_scan::keycode#13 ← phi( keyboard_event_scan::@11/(byte) keyboard_event_scan::keycode#8 )
(byte) keyboard_event_scan::col#8 ← phi( keyboard_event_scan::@11/(byte) keyboard_event_scan::col#2 )
(byte) keyboard_event_scan::row_scan#6 ← phi( keyboard_event_scan::@11/(byte) keyboard_event_scan::row_scan#1 )
(byte) keyboard_events_size#10 ← phi( keyboard_event_scan::@11/(byte) keyboard_events_size#21 )
(bool~) keyboard_event_scan::$19 ← (byte) keyboard_events_size#10 != (byte/signed byte/word/signed word/dword/signed dword) 8
(bool~) keyboard_event_scan::$20 ← ! (bool~) keyboard_event_scan::$19
if((bool~) keyboard_event_scan::$20) goto keyboard_event_scan::@13
to:keyboard_event_scan::@17
keyboard_event_scan::@13: scope:[keyboard_event_scan] from keyboard_event_scan::@16
(byte) keyboard_events_size#38 ← phi( keyboard_event_scan::@16/(byte) keyboard_events_size#10 )
(byte) keyboard_event_scan::row#10 ← phi( keyboard_event_scan::@16/(byte) keyboard_event_scan::row#13 )
(byte) keyboard_event_scan::row_scan#7 ← phi( keyboard_event_scan::@16/(byte) keyboard_event_scan::row_scan#6 )
(byte) keyboard_event_scan::col#5 ← phi( keyboard_event_scan::@16/(byte) keyboard_event_scan::col#8 )
(byte) keyboard_event_scan::keycode#9 ← phi( keyboard_event_scan::@16/(byte) keyboard_event_scan::keycode#13 )
to:keyboard_event_scan::@12
keyboard_event_scan::@17: scope:[keyboard_event_scan] from keyboard_event_scan::@16
(byte) keyboard_event_scan::row#14 ← phi( keyboard_event_scan::@16/(byte) keyboard_event_scan::row#13 )
(byte) keyboard_events_size#22 ← phi( keyboard_event_scan::@16/(byte) keyboard_events_size#10 )
(byte) keyboard_event_scan::keycode#10 ← phi( keyboard_event_scan::@16/(byte) keyboard_event_scan::keycode#13 )
(byte) keyboard_event_scan::col#4 ← phi( keyboard_event_scan::@16/(byte) keyboard_event_scan::col#8 )
(byte) keyboard_event_scan::row_scan#2 ← phi( keyboard_event_scan::@16/(byte) keyboard_event_scan::row_scan#6 )
(byte~) keyboard_event_scan::$21 ← (byte) keyboard_event_scan::row_scan#2 & *((byte[8]) keyboard_matrix_col_bitmask#0 + (byte) keyboard_event_scan::col#4)
(byte) keyboard_event_scan::event_type#0 ← (byte~) keyboard_event_scan::$21
(bool~) keyboard_event_scan::$22 ← (byte) keyboard_event_scan::event_type#0 == (byte/signed byte/word/signed word/dword/signed dword) 0
if((bool~) keyboard_event_scan::$22) goto keyboard_event_scan::@14
to:keyboard_event_scan::@18
keyboard_event_scan::@14: scope:[keyboard_event_scan] from keyboard_event_scan::@17
(byte) keyboard_event_scan::row#11 ← phi( keyboard_event_scan::@17/(byte) keyboard_event_scan::row#14 )
(byte) keyboard_event_scan::row_scan#8 ← phi( keyboard_event_scan::@17/(byte) keyboard_event_scan::row_scan#2 )
(byte) keyboard_event_scan::col#6 ← phi( keyboard_event_scan::@17/(byte) keyboard_event_scan::col#4 )
(byte) keyboard_events_size#11 ← phi( keyboard_event_scan::@17/(byte) keyboard_events_size#22 )
(byte) keyboard_event_scan::keycode#5 ← phi( keyboard_event_scan::@17/(byte) keyboard_event_scan::keycode#10 )
(byte/word/dword~) keyboard_event_scan::$23 ← (byte) keyboard_event_scan::keycode#5 | (byte/signed byte/word/signed word/dword/signed dword) $40
*((byte[8]) keyboard_events#0 + (byte) keyboard_events_size#11) ← (byte/word/dword~) keyboard_event_scan::$23
(byte) keyboard_events_size#1 ← ++ (byte) keyboard_events_size#11
to:keyboard_event_scan::@12
keyboard_event_scan::@18: scope:[keyboard_event_scan] from keyboard_event_scan::@17
(byte) keyboard_event_scan::row#12 ← phi( keyboard_event_scan::@17/(byte) keyboard_event_scan::row#14 )
(byte) keyboard_event_scan::row_scan#9 ← phi( keyboard_event_scan::@17/(byte) keyboard_event_scan::row_scan#2 )
(byte) keyboard_event_scan::col#7 ← phi( keyboard_event_scan::@17/(byte) keyboard_event_scan::col#4 )
(byte) keyboard_events_size#12 ← phi( keyboard_event_scan::@17/(byte) keyboard_events_size#22 )
(byte) keyboard_event_scan::keycode#6 ← phi( keyboard_event_scan::@17/(byte) keyboard_event_scan::keycode#10 )
*((byte[8]) keyboard_events#0 + (byte) keyboard_events_size#12) ← (byte) keyboard_event_scan::keycode#6
(byte) keyboard_events_size#2 ← ++ (byte) keyboard_events_size#12
to:keyboard_event_scan::@12
keyboard_event_scan::@20: scope:[keyboard_event_scan] from keyboard_event_scan::@12
(byte) keyboard_events_size#63 ← phi( keyboard_event_scan::@12/(byte) keyboard_events_size#29 )
(byte) keyboard_event_scan::keycode#15 ← phi( keyboard_event_scan::@12/(byte) keyboard_event_scan::keycode#2 )
(byte) keyboard_event_scan::row#6 ← phi( keyboard_event_scan::@12/(byte) keyboard_event_scan::row#8 )
(byte) keyboard_event_scan::row_scan#3 ← phi( keyboard_event_scan::@12/(byte) keyboard_event_scan::row_scan#4 )
*((byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#6) ← (byte) keyboard_event_scan::row_scan#3
to:keyboard_event_scan::@10
keyboard_event_scan::@23: scope:[keyboard_event_scan] from keyboard_event_scan::@10
(byte) keyboard_events_size#78 ← phi( keyboard_event_scan::@10/(byte) keyboard_events_size#56 )
(byte) keyboard_modifiers#1 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) keyboard_event_pressed::keycode#0 ← (byte) KEY_LSHIFT#0
call keyboard_event_pressed
(byte) keyboard_event_pressed::return#0 ← (byte) keyboard_event_pressed::return#5
to:keyboard_event_scan::@26
keyboard_event_scan::@26: scope:[keyboard_event_scan] from keyboard_event_scan::@23
(byte) keyboard_events_size#75 ← phi( keyboard_event_scan::@23/(byte) keyboard_events_size#78 )
(byte) keyboard_modifiers#18 ← phi( keyboard_event_scan::@23/(byte) keyboard_modifiers#1 )
(byte) keyboard_event_pressed::return#7 ← phi( keyboard_event_scan::@23/(byte) keyboard_event_pressed::return#0 )
(byte~) keyboard_event_scan::$0 ← (byte) keyboard_event_pressed::return#7
(bool~) keyboard_event_scan::$1 ← (byte~) keyboard_event_scan::$0 != (byte/signed byte/word/signed word/dword/signed dword) 0
(bool~) keyboard_event_scan::$2 ← ! (bool~) keyboard_event_scan::$1
if((bool~) keyboard_event_scan::$2) goto keyboard_event_scan::@1
to:keyboard_event_scan::@24
keyboard_event_scan::@1: scope:[keyboard_event_scan] from keyboard_event_scan::@24 keyboard_event_scan::@26
(byte) keyboard_events_size#70 ← phi( keyboard_event_scan::@24/(byte) keyboard_events_size#74 keyboard_event_scan::@26/(byte) keyboard_events_size#75 )
(byte) keyboard_modifiers#26 ← phi( keyboard_event_scan::@24/(byte) keyboard_modifiers#2 keyboard_event_scan::@26/(byte) keyboard_modifiers#18 )
(byte) keyboard_event_pressed::keycode#1 ← (byte) KEY_RSHIFT#0
call keyboard_event_pressed
(byte) keyboard_event_pressed::return#1 ← (byte) keyboard_event_pressed::return#5
to:keyboard_event_scan::@27
keyboard_event_scan::@27: scope:[keyboard_event_scan] from keyboard_event_scan::@1
(byte) keyboard_events_size#65 ← phi( keyboard_event_scan::@1/(byte) keyboard_events_size#70 )
(byte) keyboard_modifiers#19 ← phi( keyboard_event_scan::@1/(byte) keyboard_modifiers#26 )
(byte) keyboard_event_pressed::return#8 ← phi( keyboard_event_scan::@1/(byte) keyboard_event_pressed::return#1 )
(byte~) keyboard_event_scan::$3 ← (byte) keyboard_event_pressed::return#8
(bool~) keyboard_event_scan::$4 ← (byte~) keyboard_event_scan::$3 != (byte/signed byte/word/signed word/dword/signed dword) 0
(bool~) keyboard_event_scan::$5 ← ! (bool~) keyboard_event_scan::$4
if((bool~) keyboard_event_scan::$5) goto keyboard_event_scan::@2
to:keyboard_event_scan::@5
keyboard_event_scan::@24: scope:[keyboard_event_scan] from keyboard_event_scan::@26
(byte) keyboard_events_size#74 ← phi( keyboard_event_scan::@26/(byte) keyboard_events_size#75 )
(byte) keyboard_modifiers#10 ← phi( keyboard_event_scan::@26/(byte) keyboard_modifiers#18 )
(byte~) keyboard_event_scan::$26 ← (byte) keyboard_modifiers#10 | (byte) KEY_MODIFIER_LSHIFT#0
(byte) keyboard_modifiers#2 ← (byte~) keyboard_event_scan::$26
to:keyboard_event_scan::@1
keyboard_event_scan::@2: scope:[keyboard_event_scan] from keyboard_event_scan::@27 keyboard_event_scan::@5
(byte) keyboard_events_size#57 ← phi( keyboard_event_scan::@27/(byte) keyboard_events_size#65 keyboard_event_scan::@5/(byte) keyboard_events_size#66 )
(byte) keyboard_modifiers#27 ← phi( keyboard_event_scan::@27/(byte) keyboard_modifiers#19 keyboard_event_scan::@5/(byte) keyboard_modifiers#3 )
(byte) keyboard_event_pressed::keycode#2 ← (byte) KEY_CTRL#0
call keyboard_event_pressed
(byte) keyboard_event_pressed::return#2 ← (byte) keyboard_event_pressed::return#5
to:keyboard_event_scan::@28
keyboard_event_scan::@28: scope:[keyboard_event_scan] from keyboard_event_scan::@2
(byte) keyboard_events_size#46 ← phi( keyboard_event_scan::@2/(byte) keyboard_events_size#57 )
(byte) keyboard_modifiers#20 ← phi( keyboard_event_scan::@2/(byte) keyboard_modifiers#27 )
(byte) keyboard_event_pressed::return#9 ← phi( keyboard_event_scan::@2/(byte) keyboard_event_pressed::return#2 )
(byte~) keyboard_event_scan::$6 ← (byte) keyboard_event_pressed::return#9
(bool~) keyboard_event_scan::$7 ← (byte~) keyboard_event_scan::$6 != (byte/signed byte/word/signed word/dword/signed dword) 0
(bool~) keyboard_event_scan::$8 ← ! (bool~) keyboard_event_scan::$7
if((bool~) keyboard_event_scan::$8) goto keyboard_event_scan::@3
to:keyboard_event_scan::@6
keyboard_event_scan::@5: scope:[keyboard_event_scan] from keyboard_event_scan::@27
(byte) keyboard_events_size#66 ← phi( keyboard_event_scan::@27/(byte) keyboard_events_size#65 )
(byte) keyboard_modifiers#11 ← phi( keyboard_event_scan::@27/(byte) keyboard_modifiers#19 )
(byte~) keyboard_event_scan::$27 ← (byte) keyboard_modifiers#11 | (byte) KEY_MODIFIER_RSHIFT#0
(byte) keyboard_modifiers#3 ← (byte~) keyboard_event_scan::$27
to:keyboard_event_scan::@2
keyboard_event_scan::@3: scope:[keyboard_event_scan] from keyboard_event_scan::@28 keyboard_event_scan::@6
(byte) keyboard_events_size#39 ← phi( keyboard_event_scan::@28/(byte) keyboard_events_size#46 keyboard_event_scan::@6/(byte) keyboard_events_size#47 )
(byte) keyboard_modifiers#28 ← phi( keyboard_event_scan::@28/(byte) keyboard_modifiers#20 keyboard_event_scan::@6/(byte) keyboard_modifiers#4 )
(byte) keyboard_event_pressed::keycode#3 ← (byte) KEY_COMMODORE#0
call keyboard_event_pressed
(byte) keyboard_event_pressed::return#3 ← (byte) keyboard_event_pressed::return#5
to:keyboard_event_scan::@29
keyboard_event_scan::@29: scope:[keyboard_event_scan] from keyboard_event_scan::@3
(byte) keyboard_events_size#31 ← phi( keyboard_event_scan::@3/(byte) keyboard_events_size#39 )
(byte) keyboard_modifiers#21 ← phi( keyboard_event_scan::@3/(byte) keyboard_modifiers#28 )
(byte) keyboard_event_pressed::return#10 ← phi( keyboard_event_scan::@3/(byte) keyboard_event_pressed::return#3 )
(byte~) keyboard_event_scan::$9 ← (byte) keyboard_event_pressed::return#10
(bool~) keyboard_event_scan::$10 ← (byte~) keyboard_event_scan::$9 != (byte/signed byte/word/signed word/dword/signed dword) 0
(bool~) keyboard_event_scan::$11 ← ! (bool~) keyboard_event_scan::$10
if((bool~) keyboard_event_scan::$11) goto keyboard_event_scan::@4
to:keyboard_event_scan::@7
keyboard_event_scan::@6: scope:[keyboard_event_scan] from keyboard_event_scan::@28
(byte) keyboard_events_size#47 ← phi( keyboard_event_scan::@28/(byte) keyboard_events_size#46 )
(byte) keyboard_modifiers#12 ← phi( keyboard_event_scan::@28/(byte) keyboard_modifiers#20 )
(byte~) keyboard_event_scan::$28 ← (byte) keyboard_modifiers#12 | (byte) KEY_MODIFIER_CTRL#0
(byte) keyboard_modifiers#4 ← (byte~) keyboard_event_scan::$28
to:keyboard_event_scan::@3
keyboard_event_scan::@4: scope:[keyboard_event_scan] from keyboard_event_scan::@29
(byte) keyboard_modifiers#22 ← phi( keyboard_event_scan::@29/(byte) keyboard_modifiers#21 )
(byte) keyboard_events_size#23 ← phi( keyboard_event_scan::@29/(byte) keyboard_events_size#31 )
to:keyboard_event_scan::@return
keyboard_event_scan::@7: scope:[keyboard_event_scan] from keyboard_event_scan::@29
(byte) keyboard_events_size#24 ← phi( keyboard_event_scan::@29/(byte) keyboard_events_size#31 )
(byte) keyboard_modifiers#13 ← phi( keyboard_event_scan::@29/(byte) keyboard_modifiers#21 )
(byte~) keyboard_event_scan::$29 ← (byte) keyboard_modifiers#13 | (byte) KEY_MODIFIER_COMMODORE#0
(byte) keyboard_modifiers#5 ← (byte~) keyboard_event_scan::$29
to:keyboard_event_scan::@return
keyboard_event_scan::@return: scope:[keyboard_event_scan] from keyboard_event_scan::@4 keyboard_event_scan::@7
(byte) keyboard_modifiers#14 ← phi( keyboard_event_scan::@4/(byte) keyboard_modifiers#22 keyboard_event_scan::@7/(byte) keyboard_modifiers#5 )
(byte) keyboard_events_size#13 ← phi( keyboard_event_scan::@4/(byte) keyboard_events_size#23 keyboard_event_scan::@7/(byte) keyboard_events_size#24 )
(byte) keyboard_events_size#3 ← (byte) keyboard_events_size#13
(byte) keyboard_modifiers#6 ← (byte) keyboard_modifiers#14
return
to:@return
keyboard_event_pressed: scope:[keyboard_event_pressed] from keyboard_event_scan::@1 keyboard_event_scan::@2 keyboard_event_scan::@23 keyboard_event_scan::@3 play_move_down::@1
(byte) keyboard_event_pressed::keycode#5 ← phi( keyboard_event_scan::@1/(byte) keyboard_event_pressed::keycode#1 keyboard_event_scan::@2/(byte) keyboard_event_pressed::keycode#2 keyboard_event_scan::@23/(byte) keyboard_event_pressed::keycode#0 keyboard_event_scan::@3/(byte) keyboard_event_pressed::keycode#3 play_move_down::@1/(byte) keyboard_event_pressed::keycode#4 )
(byte~) keyboard_event_pressed::$0 ← (byte) keyboard_event_pressed::keycode#5 >> (byte/signed byte/word/signed word/dword/signed dword) 3
(byte) keyboard_event_pressed::row_bits#0 ← *((byte[8]) keyboard_scan_values#0 + (byte~) keyboard_event_pressed::$0)
(byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#5 & (byte/signed byte/word/signed word/dword/signed dword) 7
(byte~) keyboard_event_pressed::$2 ← (byte) keyboard_event_pressed::row_bits#0 & *((byte[8]) keyboard_matrix_col_bitmask#0 + (byte~) keyboard_event_pressed::$1)
(byte) keyboard_event_pressed::return#4 ← (byte~) keyboard_event_pressed::$2
to:keyboard_event_pressed::@return
keyboard_event_pressed::@return: scope:[keyboard_event_pressed] from keyboard_event_pressed
(byte) keyboard_event_pressed::return#11 ← phi( keyboard_event_pressed/(byte) keyboard_event_pressed::return#4 )
(byte) keyboard_event_pressed::return#5 ← (byte) keyboard_event_pressed::return#11
return
to:@return
keyboard_event_get: scope:[keyboard_event_get] from main::@36
(byte) keyboard_events_size#14 ← phi( main::@36/(byte) keyboard_events_size#6 )
(bool~) keyboard_event_get::$0 ← (byte) keyboard_events_size#14 == (byte/signed byte/word/signed word/dword/signed dword) 0
if((bool~) keyboard_event_get::$0) goto keyboard_event_get::@1
to:keyboard_event_get::@3
keyboard_event_get::@1: scope:[keyboard_event_get] from keyboard_event_get
(byte) keyboard_events_size#25 ← phi( keyboard_event_get/(byte) keyboard_events_size#14 )
(byte) keyboard_event_get::return#0 ← (byte/word/signed word/dword/signed dword) $ff
to:keyboard_event_get::@return
keyboard_event_get::@3: scope:[keyboard_event_get] from keyboard_event_get
(byte) keyboard_events_size#15 ← phi( keyboard_event_get/(byte) keyboard_events_size#14 )
(byte) keyboard_events_size#4 ← -- (byte) keyboard_events_size#15
(byte) keyboard_event_get::return#1 ← *((byte[8]) keyboard_events#0 + (byte) keyboard_events_size#4)
to:keyboard_event_get::@return
keyboard_event_get::@return: scope:[keyboard_event_get] from keyboard_event_get::@1 keyboard_event_get::@3
(byte) keyboard_events_size#16 ← phi( keyboard_event_get::@1/(byte) keyboard_events_size#25 keyboard_event_get::@3/(byte) keyboard_events_size#4 )
(byte) keyboard_event_get::return#4 ← phi( keyboard_event_get::@1/(byte) keyboard_event_get::return#0 keyboard_event_get::@3/(byte) keyboard_event_get::return#1 )
(byte) keyboard_event_get::return#2 ← (byte) keyboard_event_get::return#4
(byte) keyboard_events_size#5 ← (byte) keyboard_events_size#16
return
to:@return
@12: scope:[] from @9
(byte) keyboard_modifiers#62 ← phi( @9/(byte) keyboard_modifiers#0 )
(byte) keyboard_events_size#81 ← phi( @9/(byte) keyboard_events_size#0 )
(word*) SID_VOICE3_FREQ#0 ← ((word*)) (word/dword/signed dword) $d40e
(byte*) SID_VOICE3_CONTROL#0 ← ((byte*)) (word/dword/signed dword) $d412
(byte) SID_CONTROL_NOISE#0 ← (byte/word/signed word/dword/signed dword) $80
(byte*) SID_VOICE3_OSC#0 ← ((byte*)) (word/dword/signed dword) $d41b
to:@14
sid_rnd_init: scope:[sid_rnd_init] from main
*((word*) SID_VOICE3_FREQ#0) ← (word/dword/signed dword) $ffff
*((byte*) SID_VOICE3_CONTROL#0) ← (byte) SID_CONTROL_NOISE#0
to:sid_rnd_init::@return
sid_rnd_init::@return: scope:[sid_rnd_init] from sid_rnd_init
return
to:@return
@14: scope:[] from @12
(byte) keyboard_modifiers#60 ← phi( @12/(byte) keyboard_modifiers#62 )
(byte) keyboard_events_size#79 ← phi( @12/(byte) keyboard_events_size#81 )
(byte*) PLAYFIELD_SCREEN_1#0 ← ((byte*)) (word/signed word/dword/signed dword) $400
(byte*) PLAYFIELD_SCREEN_2#0 ← ((byte*)) (word/signed word/dword/signed dword) $2c00
(byte*~) $1 ← (byte*) PLAYFIELD_SCREEN_1#0 + (word) SPRITE_PTRS#0
(byte*) PLAYFIELD_SPRITE_PTRS_1#0 ← (byte*~) $1
(byte*~) $2 ← (byte*) PLAYFIELD_SCREEN_2#0 + (word) SPRITE_PTRS#0
(byte*) PLAYFIELD_SPRITE_PTRS_2#0 ← (byte*~) $2
(byte*) PLAYFIELD_SCREEN_ORIGINAL#0 ← ((byte*)) (word/signed word/dword/signed dword) $1800
(byte*) PLAYFIELD_COLORS_ORIGINAL#0 ← ((byte*)) (word/signed word/dword/signed dword) $1c00
(byte*) PLAYFIELD_SPRITES#0 ← ((byte*)) (word/signed word/dword/signed dword) $2000
(byte*) PLAYFIELD_CHARSET#0 ← ((byte*)) (word/signed word/dword/signed dword) $2800
(byte) PLAYFIELD_LINES#0 ← (byte/signed byte/word/signed word/dword/signed dword) $16
(byte) PLAYFIELD_COLS#0 ← (byte/signed byte/word/signed word/dword/signed dword) $a
(byte~) $3 ← (byte) PLAYFIELD_LINES#0 * (byte) PLAYFIELD_COLS#0
(byte[$3]) playfield#0 ← { fill( $3, 0) }
(byte*) current_piece_gfx#0 ← (byte*) 0
(byte) current_piece_char#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) current_xpos#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) current_ypos#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) render_screen_render#0 ← (byte/signed byte/word/signed word/dword/signed dword) $40
(byte) render_screen_show#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) render_screen_showing#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(dword) score_bcd#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(word) lines_bcd#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) level_bcd#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) level#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) game_over#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
kickasm(location (byte*) PLAYFIELD_CHARSET#0) {{ .fill 8,$00 // Place a filled char at the start of the charset
.import binary "playfield-screen.imap"
}}
kickasm(location (byte*) PLAYFIELD_SCREEN_ORIGINAL#0) {{ // Load chars for the screen
.var screen = LoadBinary("playfield-screen.iscr")
// Load extended colors for the screen
.var extended = LoadBinary("playfield-extended.col")
// screen.get(i)+1 because the charset is loaded into PLAYFIELD_CHARSET+8
// extended.get(i)-1 because the extended colors are 1-based (1/2/3/4)
// <<6 to move extended colors to the upper 2 bits
.fill screen.getSize(), ( (screen.get(i)+1) | (extended.get(i)-1)<<6 )
}}
kickasm(location (byte*) PLAYFIELD_COLORS_ORIGINAL#0) {{ .import binary "playfield-screen.col"
}}
(byte[]) PIECES_COLORS_1#0 ← { (byte) BLUE#0, (byte) GREEN#0, (byte) PURPLE#0, (byte) BLUE#0, (byte) RED#0, (byte) LIGHT_GREEN#0, (byte) RED#0, (byte) BLUE#0, (byte) LIGHT_BLUE#0, (byte) RED#0, (byte) BLUE#0, (byte) GREEN#0, (byte) PURPLE#0, (byte) BLUE#0, (byte) RED#0, (byte) LIGHT_GREEN#0, (byte) RED#0, (byte) BLUE#0, (byte) LIGHT_BLUE#0, (byte) RED#0, (byte) BLUE#0, (byte) GREEN#0, (byte) PURPLE#0, (byte) BLUE#0, (byte) RED#0, (byte) LIGHT_GREEN#0, (byte) RED#0, (byte) BLUE#0, (byte) LIGHT_BLUE#0, (byte) RED#0 }
(byte[]) PIECES_COLORS_2#0 ← { (byte) CYAN#0, (byte) LIGHT_GREEN#0, (byte) PINK#0, (byte) LIGHT_GREEN#0, (byte) LIGHT_GREEN#0, (byte) LIGHT_BLUE#0, (byte) DARK_GREY#0, (byte) PURPLE#0, (byte) RED#0, (byte) ORANGE#0, (byte) CYAN#0, (byte) LIGHT_GREEN#0, (byte) PINK#0, (byte) LIGHT_GREEN#0, (byte) LIGHT_GREEN#0, (byte) LIGHT_BLUE#0, (byte) DARK_GREY#0, (byte) PURPLE#0, (byte) RED#0, (byte) ORANGE#0, (byte) CYAN#0, (byte) LIGHT_GREEN#0, (byte) PINK#0, (byte) LIGHT_GREEN#0, (byte) LIGHT_GREEN#0, (byte) LIGHT_BLUE#0, (byte) DARK_GREY#0, (byte) PURPLE#0, (byte) RED#0, (byte) ORANGE#0 }
(byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 ← { fill( PLAYFIELD_LINES#0, 0) }
(byte*[PLAYFIELD_LINES#0]) screen_lines_2#0 ← { fill( PLAYFIELD_LINES#0, 0) }
to:@23
render_init: scope:[render_init] from main::@25
(byte*) render_init::vicSelectGfxBank1_gfx#0 ← (byte*) PLAYFIELD_CHARSET#0
to:render_init::vicSelectGfxBank1
render_init::vicSelectGfxBank1: scope:[render_init] from render_init
(byte*) render_init::vicSelectGfxBank1_gfx#1 ← phi( render_init/(byte*) render_init::vicSelectGfxBank1_gfx#0 )
*((byte*) CIA2_PORT_A_DDR#0) ← (byte/signed byte/word/signed word/dword/signed dword) 3
(byte*) render_init::vicSelectGfxBank1_toDd001_gfx#0 ← (byte*) render_init::vicSelectGfxBank1_gfx#1
to:render_init::vicSelectGfxBank1_toDd001
render_init::vicSelectGfxBank1_toDd001: scope:[render_init] from render_init::vicSelectGfxBank1
(byte*) render_init::vicSelectGfxBank1_toDd001_gfx#1 ← phi( render_init::vicSelectGfxBank1/(byte*) render_init::vicSelectGfxBank1_toDd001_gfx#0 )
(word) render_init::vicSelectGfxBank1_toDd001_$0#0 ← ((word)) (byte*) render_init::vicSelectGfxBank1_toDd001_gfx#1
(byte) render_init::vicSelectGfxBank1_toDd001_$1#0 ← > (word) render_init::vicSelectGfxBank1_toDd001_$0#0
(byte/signed word/word/dword/signed dword) render_init::vicSelectGfxBank1_toDd001_$2#0 ← (byte) render_init::vicSelectGfxBank1_toDd001_$1#0 / (byte/signed byte/word/signed word/dword/signed dword) $40
(byte/word/dword) render_init::vicSelectGfxBank1_toDd001_$3#0 ← (byte/signed byte/word/signed word/dword/signed dword) 3 ^ (byte/signed word/word/dword/signed dword) render_init::vicSelectGfxBank1_toDd001_$2#0
(byte) render_init::vicSelectGfxBank1_toDd001_return#0 ← (byte/word/dword) render_init::vicSelectGfxBank1_toDd001_$3#0
to:render_init::vicSelectGfxBank1_toDd001_@return
render_init::vicSelectGfxBank1_toDd001_@return: scope:[render_init] from render_init::vicSelectGfxBank1_toDd001
(byte) render_init::vicSelectGfxBank1_toDd001_return#2 ← phi( render_init::vicSelectGfxBank1_toDd001/(byte) render_init::vicSelectGfxBank1_toDd001_return#0 )
(byte) render_init::vicSelectGfxBank1_toDd001_return#1 ← (byte) render_init::vicSelectGfxBank1_toDd001_return#2
to:render_init::vicSelectGfxBank1_@1
render_init::vicSelectGfxBank1_@1: scope:[render_init] from render_init::vicSelectGfxBank1_toDd001_@return
(byte) render_init::vicSelectGfxBank1_toDd001_return#3 ← phi( render_init::vicSelectGfxBank1_toDd001_@return/(byte) render_init::vicSelectGfxBank1_toDd001_return#1 )
(byte) render_init::vicSelectGfxBank1_$0#0 ← (byte) render_init::vicSelectGfxBank1_toDd001_return#3
*((byte*) CIA2_PORT_A#0) ← (byte) render_init::vicSelectGfxBank1_$0#0
to:render_init::@3
render_init::@3: scope:[render_init] from render_init::vicSelectGfxBank1_@1
(byte~) render_init::$1 ← (byte) VIC_ECM#0 | (byte) VIC_DEN#0
(byte~) render_init::$2 ← (byte~) render_init::$1 | (byte) VIC_RSEL#0
(byte/word/dword~) render_init::$3 ← (byte~) render_init::$2 | (byte/signed byte/word/signed word/dword/signed dword) 3
*((byte*) D011#0) ← (byte/word/dword~) render_init::$3
*((byte*) BORDERCOL#0) ← (byte) BLACK#0
*((byte*) BGCOL1#0) ← (byte) BLACK#0
*((byte*) BGCOL2#0) ← *((byte[]) PIECES_COLORS_1#0 + (byte/signed byte/word/signed word/dword/signed dword) 0)
*((byte*) BGCOL3#0) ← *((byte[]) PIECES_COLORS_2#0 + (byte/signed byte/word/signed word/dword/signed dword) 0)
*((byte*) BGCOL4#0) ← (byte) GREY#0
(byte*) render_screen_original::screen#0 ← (byte*) PLAYFIELD_SCREEN_1#0
call render_screen_original
to:render_init::@4
render_init::@4: scope:[render_init] from render_init::@3
(byte*) render_screen_original::screen#1 ← (byte*) PLAYFIELD_SCREEN_2#0
call render_screen_original
to:render_init::@5
render_init::@5: scope:[render_init] from render_init::@4
(byte/signed byte/word/signed word/dword/signed dword~) render_init::$6 ← (byte/signed byte/word/signed word/dword/signed dword) 2 * (byte/signed byte/word/signed word/dword/signed dword) $28
(byte*~) render_init::$7 ← (byte*) PLAYFIELD_SCREEN_1#0 + (byte/signed byte/word/signed word/dword/signed dword~) render_init::$6
(byte*~) render_init::$8 ← (byte*~) render_init::$7 + (byte/signed byte/word/signed word/dword/signed dword) $10
(byte*) render_init::li_1#0 ← (byte*~) render_init::$8
(byte/signed byte/word/signed word/dword/signed dword~) render_init::$9 ← (byte/signed byte/word/signed word/dword/signed dword) 2 * (byte/signed byte/word/signed word/dword/signed dword) $28
(byte*~) render_init::$10 ← (byte*) PLAYFIELD_SCREEN_2#0 + (byte/signed byte/word/signed word/dword/signed dword~) render_init::$9
(byte*~) render_init::$11 ← (byte*~) render_init::$10 + (byte/signed byte/word/signed word/dword/signed dword) $10
(byte*) render_init::li_2#0 ← (byte*~) render_init::$11
(byte/signed word/word/dword/signed dword~) render_init::$12 ← (byte) PLAYFIELD_LINES#0 - (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) render_init::i#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:render_init::@1
render_init::@1: scope:[render_init] from render_init::@1 render_init::@5
(byte*) render_init::li_2#2 ← phi( render_init::@1/(byte*) render_init::li_2#1 render_init::@5/(byte*) render_init::li_2#0 )
(byte*) render_init::li_1#2 ← phi( render_init::@1/(byte*) render_init::li_1#1 render_init::@5/(byte*) render_init::li_1#0 )
(byte) render_init::i#2 ← phi( render_init::@1/(byte) render_init::i#1 render_init::@5/(byte) render_init::i#0 )
(byte/signed word/word/dword/signed dword~) render_init::$13 ← (byte) render_init::i#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
*((byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte/signed word/word/dword/signed dword~) render_init::$13) ← (byte*) render_init::li_1#2
(byte/signed word/word/dword/signed dword~) render_init::$14 ← (byte) render_init::i#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
*((byte*[PLAYFIELD_LINES#0]) screen_lines_2#0 + (byte/signed word/word/dword/signed dword~) render_init::$14) ← (byte*) render_init::li_2#2
(byte*) render_init::li_1#1 ← (byte*) render_init::li_1#2 + (byte/signed byte/word/signed word/dword/signed dword) $28
(byte*) render_init::li_2#1 ← (byte*) render_init::li_2#2 + (byte/signed byte/word/signed word/dword/signed dword) $28
(byte) render_init::i#1 ← (byte) render_init::i#2 + rangenext(0,render_init::$12)
(bool~) render_init::$15 ← (byte) render_init::i#1 != rangelast(0,render_init::$12)
if((bool~) render_init::$15) goto render_init::@1
to:render_init::@2
render_init::@2: scope:[render_init] from render_init::@1
(byte) render_screen_show#1 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) render_screen_render#1 ← (byte/signed byte/word/signed word/dword/signed dword) $40
to:render_init::@return
render_init::@return: scope:[render_init] from render_init::@2
(byte) render_screen_render#9 ← phi( render_init::@2/(byte) render_screen_render#1 )
(byte) render_screen_show#9 ← phi( render_init::@2/(byte) render_screen_show#1 )
(byte) render_screen_show#2 ← (byte) render_screen_show#9
(byte) render_screen_render#2 ← (byte) render_screen_render#9
return
to:@return
render_show: scope:[render_show] from main::@6
(byte) level#86 ← phi( main::@6/(byte) level#93 )
(byte) render_screen_show#10 ← phi( main::@6/(byte) render_screen_show#18 )
(byte) render_show::d018val#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(bool~) render_show::$0 ← (byte) render_screen_show#10 == (byte/signed byte/word/signed word/dword/signed dword) 0
if((bool~) render_show::$0) goto render_show::@1
to:render_show::@3
render_show::@1: scope:[render_show] from render_show
(byte) render_screen_show#41 ← phi( render_show/(byte) render_screen_show#10 )
(byte) level#72 ← phi( render_show/(byte) level#86 )
(byte*) render_show::toD0181_screen#0 ← (byte*) PLAYFIELD_SCREEN_1#0
(byte*) render_show::toD0181_gfx#0 ← (byte*) PLAYFIELD_CHARSET#0
to:render_show::toD0181
render_show::toD0181: scope:[render_show] from render_show::@1
(byte) render_screen_show#33 ← phi( render_show::@1/(byte) render_screen_show#41 )
(byte) level#58 ← phi( render_show::@1/(byte) level#72 )
(byte*) render_show::toD0181_gfx#1 ← phi( render_show::@1/(byte*) render_show::toD0181_gfx#0 )
(byte*) render_show::toD0181_screen#1 ← phi( render_show::@1/(byte*) render_show::toD0181_screen#0 )
(word) render_show::toD0181_$0#0 ← ((word)) (byte*) render_show::toD0181_screen#1
(word) render_show::toD0181_$1#0 ← (word) render_show::toD0181_$0#0 & (word/signed word/dword/signed dword) $3fff
(word/signed dword/dword) render_show::toD0181_$2#0 ← (word) render_show::toD0181_$1#0 * (byte/signed byte/word/signed word/dword/signed dword) 4
(byte/word) render_show::toD0181_$3#0 ← > (word/signed dword/dword) render_show::toD0181_$2#0
(word) render_show::toD0181_$4#0 ← ((word)) (byte*) render_show::toD0181_gfx#1
(byte) render_show::toD0181_$5#0 ← > (word) render_show::toD0181_$4#0
(byte/signed word/word/dword/signed dword) render_show::toD0181_$6#0 ← (byte) render_show::toD0181_$5#0 / (byte/signed byte/word/signed word/dword/signed dword) 4
(byte/word/dword) render_show::toD0181_$7#0 ← (byte/signed word/word/dword/signed dword) render_show::toD0181_$6#0 & (byte/signed byte/word/signed word/dword/signed dword) $f
(byte/word/dword) render_show::toD0181_$8#0 ← (byte/word) render_show::toD0181_$3#0 | (byte/word/dword) render_show::toD0181_$7#0
(byte) render_show::toD0181_return#0 ← (byte/word/dword) render_show::toD0181_$8#0
to:render_show::toD0181_@return
render_show::toD0181_@return: scope:[render_show] from render_show::toD0181
(byte) render_screen_show#25 ← phi( render_show::toD0181/(byte) render_screen_show#33 )
(byte) level#42 ← phi( render_show::toD0181/(byte) level#58 )
(byte) render_show::toD0181_return#2 ← phi( render_show::toD0181/(byte) render_show::toD0181_return#0 )
(byte) render_show::toD0181_return#1 ← (byte) render_show::toD0181_return#2
to:render_show::@5
render_show::@5: scope:[render_show] from render_show::toD0181_@return
(byte) render_screen_show#19 ← phi( render_show::toD0181_@return/(byte) render_screen_show#25 )
(byte) level#26 ← phi( render_show::toD0181_@return/(byte) level#42 )
(byte) render_show::toD0181_return#3 ← phi( render_show::toD0181_@return/(byte) render_show::toD0181_return#1 )
(byte~) render_show::$2 ← (byte) render_show::toD0181_return#3
(byte) render_show::d018val#1 ← (byte~) render_show::$2
to:render_show::@2
render_show::@3: scope:[render_show] from render_show
(byte) render_screen_show#42 ← phi( render_show/(byte) render_screen_show#10 )
(byte) level#73 ← phi( render_show/(byte) level#86 )
(byte*) render_show::toD0182_screen#0 ← (byte*) PLAYFIELD_SCREEN_2#0
(byte*) render_show::toD0182_gfx#0 ← (byte*) PLAYFIELD_CHARSET#0
to:render_show::toD0182
render_show::toD0182: scope:[render_show] from render_show::@3
(byte) render_screen_show#34 ← phi( render_show::@3/(byte) render_screen_show#42 )
(byte) level#59 ← phi( render_show::@3/(byte) level#73 )
(byte*) render_show::toD0182_gfx#1 ← phi( render_show::@3/(byte*) render_show::toD0182_gfx#0 )
(byte*) render_show::toD0182_screen#1 ← phi( render_show::@3/(byte*) render_show::toD0182_screen#0 )
(word) render_show::toD0182_$0#0 ← ((word)) (byte*) render_show::toD0182_screen#1
(word) render_show::toD0182_$1#0 ← (word) render_show::toD0182_$0#0 & (word/signed word/dword/signed dword) $3fff
(word/signed dword/dword) render_show::toD0182_$2#0 ← (word) render_show::toD0182_$1#0 * (byte/signed byte/word/signed word/dword/signed dword) 4
(byte/word) render_show::toD0182_$3#0 ← > (word/signed dword/dword) render_show::toD0182_$2#0
(word) render_show::toD0182_$4#0 ← ((word)) (byte*) render_show::toD0182_gfx#1
(byte) render_show::toD0182_$5#0 ← > (word) render_show::toD0182_$4#0
(byte/signed word/word/dword/signed dword) render_show::toD0182_$6#0 ← (byte) render_show::toD0182_$5#0 / (byte/signed byte/word/signed word/dword/signed dword) 4
(byte/word/dword) render_show::toD0182_$7#0 ← (byte/signed word/word/dword/signed dword) render_show::toD0182_$6#0 & (byte/signed byte/word/signed word/dword/signed dword) $f
(byte/word/dword) render_show::toD0182_$8#0 ← (byte/word) render_show::toD0182_$3#0 | (byte/word/dword) render_show::toD0182_$7#0
(byte) render_show::toD0182_return#0 ← (byte/word/dword) render_show::toD0182_$8#0
to:render_show::toD0182_@return
render_show::toD0182_@return: scope:[render_show] from render_show::toD0182
(byte) render_screen_show#26 ← phi( render_show::toD0182/(byte) render_screen_show#34 )
(byte) level#43 ← phi( render_show::toD0182/(byte) level#59 )
(byte) render_show::toD0182_return#2 ← phi( render_show::toD0182/(byte) render_show::toD0182_return#0 )
(byte) render_show::toD0182_return#1 ← (byte) render_show::toD0182_return#2
to:render_show::@6
render_show::@6: scope:[render_show] from render_show::toD0182_@return
(byte) render_screen_show#20 ← phi( render_show::toD0182_@return/(byte) render_screen_show#26 )
(byte) level#27 ← phi( render_show::toD0182_@return/(byte) level#43 )
(byte) render_show::toD0182_return#3 ← phi( render_show::toD0182_@return/(byte) render_show::toD0182_return#1 )
(byte~) render_show::$1 ← (byte) render_show::toD0182_return#3
(byte) render_show::d018val#2 ← (byte~) render_show::$1
to:render_show::@2
render_show::@2: scope:[render_show] from render_show::@5 render_show::@6
(byte) render_screen_show#11 ← phi( render_show::@5/(byte) render_screen_show#19 render_show::@6/(byte) render_screen_show#20 )
(byte) level#12 ← phi( render_show::@5/(byte) level#26 render_show::@6/(byte) level#27 )
(byte) render_show::d018val#3 ← phi( render_show::@5/(byte) render_show::d018val#1 render_show::@6/(byte) render_show::d018val#2 )
*((byte*) D018#0) ← (byte) render_show::d018val#3
*((byte*) BGCOL2#0) ← *((byte[]) PIECES_COLORS_1#0 + (byte) level#12)
*((byte*) BGCOL3#0) ← *((byte[]) PIECES_COLORS_2#0 + (byte) level#12)
(byte) render_screen_showing#1 ← (byte) render_screen_show#11
to:render_show::@return
render_show::@return: scope:[render_show] from render_show::@2
(byte) render_screen_showing#6 ← phi( render_show::@2/(byte) render_screen_showing#1 )
(byte) render_screen_showing#2 ← (byte) render_screen_showing#6
return
to:@return
render_screen_swap: scope:[render_screen_swap] from main::@42
(byte) render_screen_show#12 ← phi( main::@42/(byte) render_screen_show#21 )
(byte) render_screen_render#10 ← phi( main::@42/(byte) render_screen_render#20 )
(byte) render_screen_render#3 ← (byte) render_screen_render#10 ^ (byte/signed byte/word/signed word/dword/signed dword) $40
(byte) render_screen_show#3 ← (byte) render_screen_show#12 ^ (byte/signed byte/word/signed word/dword/signed dword) $40
to:render_screen_swap::@return
render_screen_swap::@return: scope:[render_screen_swap] from render_screen_swap
(byte) render_screen_show#13 ← phi( render_screen_swap/(byte) render_screen_show#3 )
(byte) render_screen_render#11 ← phi( render_screen_swap/(byte) render_screen_render#3 )
(byte) render_screen_render#4 ← (byte) render_screen_render#11
(byte) render_screen_show#4 ← (byte) render_screen_show#13
return
to:@return
render_score: scope:[render_score] from main::@41
(byte) level_bcd#95 ← phi( main::@41/(byte) level_bcd#78 )
(word) lines_bcd#69 ← phi( main::@41/(word) lines_bcd#68 )
(dword) score_bcd#35 ← phi( main::@41/(dword) score_bcd#47 )
(byte) render_screen_render#12 ← phi( main::@41/(byte) render_screen_render#21 )
(byte*) render_score::screen#0 ← (byte*) 0
(bool~) render_score::$0 ← (byte) render_screen_render#12 == (byte/signed byte/word/signed word/dword/signed dword) 0
if((bool~) render_score::$0) goto render_score::@1
to:render_score::@3
render_score::@1: scope:[render_score] from render_score
(byte) level_bcd#87 ← phi( render_score/(byte) level_bcd#95 )
(word) lines_bcd#58 ← phi( render_score/(word) lines_bcd#69 )
(dword) score_bcd#20 ← phi( render_score/(dword) score_bcd#35 )
(byte*) render_score::screen#1 ← (byte*) PLAYFIELD_SCREEN_1#0
to:render_score::@2
render_score::@3: scope:[render_score] from render_score
(byte) level_bcd#88 ← phi( render_score/(byte) level_bcd#95 )
(word) lines_bcd#59 ← phi( render_score/(word) lines_bcd#69 )
(dword) score_bcd#21 ← phi( render_score/(dword) score_bcd#35 )
(byte*) render_score::screen#2 ← (byte*) PLAYFIELD_SCREEN_2#0
to:render_score::@2
render_score::@2: scope:[render_score] from render_score::@1 render_score::@3
(byte) level_bcd#79 ← phi( render_score::@1/(byte) level_bcd#87 render_score::@3/(byte) level_bcd#88 )
(word) lines_bcd#47 ← phi( render_score::@1/(word) lines_bcd#58 render_score::@3/(word) lines_bcd#59 )
(byte*) render_score::screen#3 ← phi( render_score::@1/(byte*) render_score::screen#1 render_score::@3/(byte*) render_score::screen#2 )
(dword) score_bcd#10 ← phi( render_score::@1/(dword) score_bcd#20 render_score::@3/(dword) score_bcd#21 )
(dword*~) render_score::$1 ← & (dword) score_bcd#10
(byte*~) render_score::$2 ← ((byte*)) (dword*~) render_score::$1
(byte*) render_score::score_bytes#0 ← (byte*~) render_score::$2
(byte/word/signed word/dword/signed dword~) render_score::$3 ← (byte/signed byte/word/signed word/dword/signed dword) $28 * (byte/signed byte/word/signed word/dword/signed dword) 5
(byte/signed word/word/dword/signed dword~) render_score::$4 ← (byte/word/signed word/dword/signed dword~) render_score::$3 + (byte/signed byte/word/signed word/dword/signed dword) $1c
(word) render_score::score_offset#0 ← (byte/signed word/word/dword/signed dword~) render_score::$4
(byte*) render_bcd::screen#0 ← (byte*) render_score::screen#3
(word) render_bcd::offset#0 ← (word) render_score::score_offset#0
(byte) render_bcd::bcd#0 ← *((byte*) render_score::score_bytes#0 + (byte/signed byte/word/signed word/dword/signed dword) 2)
(byte) render_bcd::only_low#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
call render_bcd
to:render_score::@5
render_score::@5: scope:[render_score] from render_score::@2
(byte) level_bcd#69 ← phi( render_score::@2/(byte) level_bcd#79 )
(word) lines_bcd#35 ← phi( render_score::@2/(word) lines_bcd#47 )
(byte*) render_score::score_bytes#1 ← phi( render_score::@2/(byte*) render_score::score_bytes#0 )
(byte*) render_score::screen#4 ← phi( render_score::@2/(byte*) render_score::screen#3 )
(word) render_score::score_offset#1 ← phi( render_score::@2/(word) render_score::score_offset#0 )
(word/signed dword/dword~) render_score::$6 ← (word) render_score::score_offset#1 + (byte/signed byte/word/signed word/dword/signed dword) 2
(byte*) render_bcd::screen#1 ← (byte*) render_score::screen#4
(word) render_bcd::offset#1 ← (word/signed dword/dword~) render_score::$6
(byte) render_bcd::bcd#1 ← *((byte*) render_score::score_bytes#1 + (byte/signed byte/word/signed word/dword/signed dword) 1)
(byte) render_bcd::only_low#1 ← (byte/signed byte/word/signed word/dword/signed dword) 0
call render_bcd
to:render_score::@6
render_score::@6: scope:[render_score] from render_score::@5
(byte) level_bcd#57 ← phi( render_score::@5/(byte) level_bcd#69 )
(word) lines_bcd#21 ← phi( render_score::@5/(word) lines_bcd#35 )
(byte*) render_score::score_bytes#2 ← phi( render_score::@5/(byte*) render_score::score_bytes#1 )
(byte*) render_score::screen#5 ← phi( render_score::@5/(byte*) render_score::screen#4 )
(word) render_score::score_offset#2 ← phi( render_score::@5/(word) render_score::score_offset#1 )
(word/signed dword/dword~) render_score::$8 ← (word) render_score::score_offset#2 + (byte/signed byte/word/signed word/dword/signed dword) 4
(byte*) render_bcd::screen#2 ← (byte*) render_score::screen#5
(word) render_bcd::offset#2 ← (word/signed dword/dword~) render_score::$8
(byte) render_bcd::bcd#2 ← *((byte*) render_score::score_bytes#2 + (byte/signed byte/word/signed word/dword/signed dword) 0)
(byte) render_bcd::only_low#2 ← (byte/signed byte/word/signed word/dword/signed dword) 0
call render_bcd
to:render_score::@7
render_score::@7: scope:[render_score] from render_score::@6
(byte) level_bcd#42 ← phi( render_score::@6/(byte) level_bcd#57 )
(byte*) render_score::screen#6 ← phi( render_score::@6/(byte*) render_score::screen#5 )
(word) lines_bcd#10 ← phi( render_score::@6/(word) lines_bcd#21 )
(byte/signed byte/word/signed word/dword/signed dword~) render_score::$10 ← (byte/signed byte/word/signed word/dword/signed dword) $28 * (byte/signed byte/word/signed word/dword/signed dword) 1
(byte/signed word/word/dword/signed dword/signed byte~) render_score::$11 ← (byte/signed byte/word/signed word/dword/signed dword~) render_score::$10 + (byte/signed byte/word/signed word/dword/signed dword) $16
(word) render_score::lines_offset#0 ← (byte/signed word/word/dword/signed dword/signed byte~) render_score::$11
(byte~) render_score::$12 ← > (word) lines_bcd#10
(byte*) render_bcd::screen#3 ← (byte*) render_score::screen#6
(word) render_bcd::offset#3 ← (word) render_score::lines_offset#0
(byte) render_bcd::bcd#3 ← (byte~) render_score::$12
(byte) render_bcd::only_low#3 ← (byte/signed byte/word/signed word/dword/signed dword) 1
call render_bcd
to:render_score::@8
render_score::@8: scope:[render_score] from render_score::@7
(byte) level_bcd#26 ← phi( render_score::@7/(byte) level_bcd#42 )
(byte*) render_score::screen#7 ← phi( render_score::@7/(byte*) render_score::screen#6 )
(word) lines_bcd#11 ← phi( render_score::@7/(word) lines_bcd#10 )
(word) render_score::lines_offset#1 ← phi( render_score::@7/(word) render_score::lines_offset#0 )
(word/signed dword/dword~) render_score::$14 ← (word) render_score::lines_offset#1 + (byte/signed byte/word/signed word/dword/signed dword) 1
(byte~) render_score::$15 ← < (word) lines_bcd#11
(byte*) render_bcd::screen#4 ← (byte*) render_score::screen#7
(word) render_bcd::offset#4 ← (word/signed dword/dword~) render_score::$14
(byte) render_bcd::bcd#4 ← (byte~) render_score::$15
(byte) render_bcd::only_low#4 ← (byte/signed byte/word/signed word/dword/signed dword) 0
call render_bcd
to:render_score::@9
render_score::@9: scope:[render_score] from render_score::@8
(byte) level_bcd#13 ← phi( render_score::@8/(byte) level_bcd#26 )
(byte*) render_score::screen#8 ← phi( render_score::@8/(byte*) render_score::screen#7 )
(word/signed word/dword/signed dword~) render_score::$17 ← (byte/signed byte/word/signed word/dword/signed dword) $28 * (byte/signed byte/word/signed word/dword/signed dword) $13
(word/signed dword/dword/signed word~) render_score::$18 ← (word/signed word/dword/signed dword~) render_score::$17 + (byte/signed byte/word/signed word/dword/signed dword) $1f
(word) render_score::level_offset#0 ← (word/signed dword/dword/signed word~) render_score::$18
(byte*) render_bcd::screen#5 ← (byte*) render_score::screen#8
(word) render_bcd::offset#5 ← (word) render_score::level_offset#0
(byte) render_bcd::bcd#5 ← (byte) level_bcd#13
(byte) render_bcd::only_low#5 ← (byte/signed byte/word/signed word/dword/signed dword) 0
call render_bcd
to:render_score::@10
render_score::@10: scope:[render_score] from render_score::@9
to:render_score::@return
render_score::@return: scope:[render_score] from render_score::@10
return
to:@return
render_bcd: scope:[render_bcd] from render_score::@2 render_score::@5 render_score::@6 render_score::@7 render_score::@8 render_score::@9
(byte) render_bcd::bcd#8 ← phi( render_score::@2/(byte) render_bcd::bcd#0 render_score::@5/(byte) render_bcd::bcd#1 render_score::@6/(byte) render_bcd::bcd#2 render_score::@7/(byte) render_bcd::bcd#3 render_score::@8/(byte) render_bcd::bcd#4 render_score::@9/(byte) render_bcd::bcd#5 )
(byte) render_bcd::only_low#6 ← phi( render_score::@2/(byte) render_bcd::only_low#0 render_score::@5/(byte) render_bcd::only_low#1 render_score::@6/(byte) render_bcd::only_low#2 render_score::@7/(byte) render_bcd::only_low#3 render_score::@8/(byte) render_bcd::only_low#4 render_score::@9/(byte) render_bcd::only_low#5 )
(word) render_bcd::offset#6 ← phi( render_score::@2/(word) render_bcd::offset#0 render_score::@5/(word) render_bcd::offset#1 render_score::@6/(word) render_bcd::offset#2 render_score::@7/(word) render_bcd::offset#3 render_score::@8/(word) render_bcd::offset#4 render_score::@9/(word) render_bcd::offset#5 )
(byte*) render_bcd::screen#6 ← phi( render_score::@2/(byte*) render_bcd::screen#0 render_score::@5/(byte*) render_bcd::screen#1 render_score::@6/(byte*) render_bcd::screen#2 render_score::@7/(byte*) render_bcd::screen#3 render_score::@8/(byte*) render_bcd::screen#4 render_score::@9/(byte*) render_bcd::screen#5 )
(byte) render_bcd::ZERO_CHAR#0 ← (byte/signed byte/word/signed word/dword/signed dword) $35
(byte*~) render_bcd::$0 ← (byte*) render_bcd::screen#6 + (word) render_bcd::offset#6
(byte*) render_bcd::screen_pos#0 ← (byte*~) render_bcd::$0
(bool~) render_bcd::$1 ← (byte) render_bcd::only_low#6 == (byte/signed byte/word/signed word/dword/signed dword) 0
(bool~) render_bcd::$2 ← ! (bool~) render_bcd::$1
if((bool~) render_bcd::$2) goto render_bcd::@1
to:render_bcd::@2
render_bcd::@1: scope:[render_bcd] from render_bcd render_bcd::@2
(byte*) render_bcd::screen_pos#3 ← phi( render_bcd/(byte*) render_bcd::screen_pos#0 render_bcd::@2/(byte*) render_bcd::screen_pos#2 )
(byte) render_bcd::bcd#6 ← phi( render_bcd/(byte) render_bcd::bcd#8 render_bcd::@2/(byte) render_bcd::bcd#7 )
(byte~) render_bcd::$3 ← (byte) render_bcd::bcd#6 & (byte/signed byte/word/signed word/dword/signed dword) $f
(byte~) render_bcd::$4 ← (byte) render_bcd::ZERO_CHAR#0 + (byte~) render_bcd::$3
*((byte*) render_bcd::screen_pos#3) ← (byte~) render_bcd::$4
(byte*) render_bcd::screen_pos#1 ← ++ (byte*) render_bcd::screen_pos#3
to:render_bcd::@return
render_bcd::@2: scope:[render_bcd] from render_bcd
(byte*) render_bcd::screen_pos#4 ← phi( render_bcd/(byte*) render_bcd::screen_pos#0 )
(byte) render_bcd::bcd#7 ← phi( render_bcd/(byte) render_bcd::bcd#8 )
(byte~) render_bcd::$5 ← (byte) render_bcd::bcd#7 >> (byte/signed byte/word/signed word/dword/signed dword) 4
(byte~) render_bcd::$6 ← (byte) render_bcd::ZERO_CHAR#0 + (byte~) render_bcd::$5
*((byte*) render_bcd::screen_pos#4) ← (byte~) render_bcd::$6
(byte*) render_bcd::screen_pos#2 ← ++ (byte*) render_bcd::screen_pos#4
to:render_bcd::@1
render_bcd::@return: scope:[render_bcd] from render_bcd::@1
return
to:@return
render_screen_original: scope:[render_screen_original] from render_init::@3 render_init::@4
(byte*) render_screen_original::screen#9 ← phi( render_init::@3/(byte*) render_screen_original::screen#0 render_init::@4/(byte*) render_screen_original::screen#1 )
(byte) render_screen_original::SPACE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte/signed byte/word/signed word/dword/signed dword~) render_screen_original::$0 ← (byte/signed byte/word/signed word/dword/signed dword) $20 * (byte/signed byte/word/signed word/dword/signed dword) 2
(byte*~) render_screen_original::$1 ← (byte*) PLAYFIELD_SCREEN_ORIGINAL#0 + (byte/signed byte/word/signed word/dword/signed dword~) render_screen_original::$0
(byte*) render_screen_original::oscr#0 ← (byte*~) render_screen_original::$1
(byte/signed byte/word/signed word/dword/signed dword~) render_screen_original::$2 ← (byte/signed byte/word/signed word/dword/signed dword) $20 * (byte/signed byte/word/signed word/dword/signed dword) 2
(byte*~) render_screen_original::$3 ← (byte*) PLAYFIELD_COLORS_ORIGINAL#0 + (byte/signed byte/word/signed word/dword/signed dword~) render_screen_original::$2
(byte*) render_screen_original::ocols#0 ← (byte*~) render_screen_original::$3
(byte*) render_screen_original::cols#0 ← (byte*) COLS#0
(byte) render_screen_original::y#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:render_screen_original::@1
render_screen_original::@1: scope:[render_screen_original] from render_screen_original render_screen_original::@7
(byte) render_screen_original::y#6 ← phi( render_screen_original/(byte) render_screen_original::y#0 render_screen_original::@7/(byte) render_screen_original::y#1 )
(byte*) render_screen_original::ocols#4 ← phi( render_screen_original/(byte*) render_screen_original::ocols#0 render_screen_original::@7/(byte*) render_screen_original::ocols#5 )
(byte*) render_screen_original::oscr#4 ← phi( render_screen_original/(byte*) render_screen_original::oscr#0 render_screen_original::@7/(byte*) render_screen_original::oscr#5 )
(byte*) render_screen_original::cols#7 ← phi( render_screen_original/(byte*) render_screen_original::cols#0 render_screen_original::@7/(byte*) render_screen_original::cols#8 )
(byte*) render_screen_original::screen#8 ← phi( render_screen_original/(byte*) render_screen_original::screen#9 render_screen_original::@7/(byte*) render_screen_original::screen#10 )
(byte) render_screen_original::x#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:render_screen_original::@2
render_screen_original::@2: scope:[render_screen_original] from render_screen_original::@1 render_screen_original::@2
(byte) render_screen_original::y#5 ← phi( render_screen_original::@1/(byte) render_screen_original::y#6 render_screen_original::@2/(byte) render_screen_original::y#5 )
(byte*) render_screen_original::ocols#3 ← phi( render_screen_original::@1/(byte*) render_screen_original::ocols#4 render_screen_original::@2/(byte*) render_screen_original::ocols#3 )
(byte*) render_screen_original::oscr#3 ← phi( render_screen_original::@1/(byte*) render_screen_original::oscr#4 render_screen_original::@2/(byte*) render_screen_original::oscr#3 )
(byte) render_screen_original::x#4 ← phi( render_screen_original::@1/(byte) render_screen_original::x#0 render_screen_original::@2/(byte) render_screen_original::x#1 )
(byte*) render_screen_original::cols#4 ← phi( render_screen_original::@1/(byte*) render_screen_original::cols#7 render_screen_original::@2/(byte*) render_screen_original::cols#1 )
(byte*) render_screen_original::screen#5 ← phi( render_screen_original::@1/(byte*) render_screen_original::screen#8 render_screen_original::@2/(byte*) render_screen_original::screen#2 )
*((byte*) render_screen_original::screen#5) ← (byte) render_screen_original::SPACE#0
(byte*) render_screen_original::screen#2 ← ++ (byte*) render_screen_original::screen#5
*((byte*) render_screen_original::cols#4) ← (byte) BLACK#0
(byte*) render_screen_original::cols#1 ← ++ (byte*) render_screen_original::cols#4
(byte) render_screen_original::x#1 ← ++ (byte) render_screen_original::x#4
(bool~) render_screen_original::$4 ← (byte) render_screen_original::x#1 != (byte/signed byte/word/signed word/dword/signed dword) 4
if((bool~) render_screen_original::$4) goto render_screen_original::@2
to:render_screen_original::@4
render_screen_original::@4: scope:[render_screen_original] from render_screen_original::@2 render_screen_original::@4
(byte) render_screen_original::y#4 ← phi( render_screen_original::@2/(byte) render_screen_original::y#5 render_screen_original::@4/(byte) render_screen_original::y#4 )
(byte) render_screen_original::x#5 ← phi( render_screen_original::@2/(byte) render_screen_original::x#1 render_screen_original::@4/(byte) render_screen_original::x#2 )
(byte*) render_screen_original::cols#5 ← phi( render_screen_original::@2/(byte*) render_screen_original::cols#1 render_screen_original::@4/(byte*) render_screen_original::cols#2 )
(byte*) render_screen_original::ocols#2 ← phi( render_screen_original::@2/(byte*) render_screen_original::ocols#3 render_screen_original::@4/(byte*) render_screen_original::ocols#1 )
(byte*) render_screen_original::screen#6 ← phi( render_screen_original::@2/(byte*) render_screen_original::screen#2 render_screen_original::@4/(byte*) render_screen_original::screen#3 )
(byte*) render_screen_original::oscr#2 ← phi( render_screen_original::@2/(byte*) render_screen_original::oscr#3 render_screen_original::@4/(byte*) render_screen_original::oscr#1 )
*((byte*) render_screen_original::screen#6) ← *((byte*) render_screen_original::oscr#2)
(byte*) render_screen_original::screen#3 ← ++ (byte*) render_screen_original::screen#6
(byte*) render_screen_original::oscr#1 ← ++ (byte*) render_screen_original::oscr#2
*((byte*) render_screen_original::cols#5) ← *((byte*) render_screen_original::ocols#2)
(byte*) render_screen_original::cols#2 ← ++ (byte*) render_screen_original::cols#5
(byte*) render_screen_original::ocols#1 ← ++ (byte*) render_screen_original::ocols#2
(byte) render_screen_original::x#2 ← ++ (byte) render_screen_original::x#5
(bool~) render_screen_original::$5 ← (byte) render_screen_original::x#2 != (byte/signed byte/word/signed word/dword/signed dword) $24
if((bool~) render_screen_original::$5) goto render_screen_original::@4
to:render_screen_original::@6
render_screen_original::@6: scope:[render_screen_original] from render_screen_original::@4 render_screen_original::@6
(byte*) render_screen_original::ocols#6 ← phi( render_screen_original::@4/(byte*) render_screen_original::ocols#1 render_screen_original::@6/(byte*) render_screen_original::ocols#6 )
(byte*) render_screen_original::oscr#6 ← phi( render_screen_original::@4/(byte*) render_screen_original::oscr#1 render_screen_original::@6/(byte*) render_screen_original::oscr#6 )
(byte) render_screen_original::y#3 ← phi( render_screen_original::@4/(byte) render_screen_original::y#4 render_screen_original::@6/(byte) render_screen_original::y#3 )
(byte) render_screen_original::x#6 ← phi( render_screen_original::@4/(byte) render_screen_original::x#2 render_screen_original::@6/(byte) render_screen_original::x#3 )
(byte*) render_screen_original::cols#6 ← phi( render_screen_original::@4/(byte*) render_screen_original::cols#2 render_screen_original::@6/(byte*) render_screen_original::cols#3 )
(byte*) render_screen_original::screen#7 ← phi( render_screen_original::@4/(byte*) render_screen_original::screen#3 render_screen_original::@6/(byte*) render_screen_original::screen#4 )
*((byte*) render_screen_original::screen#7) ← (byte) render_screen_original::SPACE#0
(byte*) render_screen_original::screen#4 ← ++ (byte*) render_screen_original::screen#7
*((byte*) render_screen_original::cols#6) ← (byte) BLACK#0
(byte*) render_screen_original::cols#3 ← ++ (byte*) render_screen_original::cols#6
(byte) render_screen_original::x#3 ← ++ (byte) render_screen_original::x#6
(bool~) render_screen_original::$6 ← (byte) render_screen_original::x#3 != (byte/signed byte/word/signed word/dword/signed dword) $28
if((bool~) render_screen_original::$6) goto render_screen_original::@6
to:render_screen_original::@7
render_screen_original::@7: scope:[render_screen_original] from render_screen_original::@6
(byte*) render_screen_original::ocols#5 ← phi( render_screen_original::@6/(byte*) render_screen_original::ocols#6 )
(byte*) render_screen_original::oscr#5 ← phi( render_screen_original::@6/(byte*) render_screen_original::oscr#6 )
(byte*) render_screen_original::cols#8 ← phi( render_screen_original::@6/(byte*) render_screen_original::cols#3 )
(byte*) render_screen_original::screen#10 ← phi( render_screen_original::@6/(byte*) render_screen_original::screen#4 )
(byte) render_screen_original::y#2 ← phi( render_screen_original::@6/(byte) render_screen_original::y#3 )
(byte) render_screen_original::y#1 ← (byte) render_screen_original::y#2 + rangenext(0,$18)
(bool~) render_screen_original::$7 ← (byte) render_screen_original::y#1 != rangelast(0,$18)
if((bool~) render_screen_original::$7) goto render_screen_original::@1
to:render_screen_original::@return
render_screen_original::@return: scope:[render_screen_original] from render_screen_original::@7
return
to:@return
render_playfield: scope:[render_playfield] from main::@23 main::@31
(byte) render_screen_render#22 ← phi( main::@23/(byte) render_screen_render#30 main::@31/(byte) render_screen_render#31 )
(byte/signed word/word/dword/signed dword~) render_playfield::$0 ← (byte) PLAYFIELD_COLS#0 * (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) render_playfield::i#0 ← (byte/signed word/word/dword/signed dword~) render_playfield::$0
(byte/signed word/word/dword/signed dword~) render_playfield::$1 ← (byte) PLAYFIELD_LINES#0 - (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) render_playfield::l#0 ← (byte/signed byte/word/signed word/dword/signed dword) 2
to:render_playfield::@1
render_playfield::@1: scope:[render_playfield] from render_playfield render_playfield::@3
(byte) render_playfield::i#3 ← phi( render_playfield/(byte) render_playfield::i#0 render_playfield::@3/(byte) render_playfield::i#4 )
(byte) render_screen_render#13 ← phi( render_playfield/(byte) render_screen_render#22 render_playfield::@3/(byte) render_screen_render#23 )
(byte) render_playfield::l#2 ← phi( render_playfield/(byte) render_playfield::l#0 render_playfield::@3/(byte) render_playfield::l#1 )
(byte/signed word/word/dword/signed dword~) render_playfield::$2 ← (byte) render_playfield::l#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
(byte/signed word/word/dword/signed dword~) render_playfield::$3 ← (byte) render_screen_render#13 + (byte/signed word/word/dword/signed dword~) render_playfield::$2
(byte*) render_playfield::screen_line#0 ← *((byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte/signed word/word/dword/signed dword~) render_playfield::$3)
(byte/signed word/word/dword/signed dword~) render_playfield::$4 ← (byte) PLAYFIELD_COLS#0 - (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) render_playfield::c#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:render_playfield::@2
render_playfield::@2: scope:[render_playfield] from render_playfield::@1 render_playfield::@2
(byte) render_screen_render#32 ← phi( render_playfield::@1/(byte) render_screen_render#13 render_playfield::@2/(byte) render_screen_render#32 )
(byte) render_playfield::l#4 ← phi( render_playfield::@1/(byte) render_playfield::l#2 render_playfield::@2/(byte) render_playfield::l#4 )
(byte) render_playfield::c#2 ← phi( render_playfield::@1/(byte) render_playfield::c#0 render_playfield::@2/(byte) render_playfield::c#1 )
(byte*) render_playfield::screen_line#2 ← phi( render_playfield::@1/(byte*) render_playfield::screen_line#0 render_playfield::@2/(byte*) render_playfield::screen_line#1 )
(byte) render_playfield::i#2 ← phi( render_playfield::@1/(byte) render_playfield::i#3 render_playfield::@2/(byte) render_playfield::i#1 )
*((byte*) render_playfield::screen_line#2) ← *((byte[$3]) playfield#0 + (byte) render_playfield::i#2)
(byte*) render_playfield::screen_line#1 ← ++ (byte*) render_playfield::screen_line#2
(byte) render_playfield::i#1 ← ++ (byte) render_playfield::i#2
(byte) render_playfield::c#1 ← (byte) render_playfield::c#2 + rangenext(0,render_playfield::$4)
(bool~) render_playfield::$5 ← (byte) render_playfield::c#1 != rangelast(0,render_playfield::$4)
if((bool~) render_playfield::$5) goto render_playfield::@2
to:render_playfield::@3
render_playfield::@3: scope:[render_playfield] from render_playfield::@2
(byte) render_playfield::i#4 ← phi( render_playfield::@2/(byte) render_playfield::i#1 )
(byte) render_screen_render#23 ← phi( render_playfield::@2/(byte) render_screen_render#32 )
(byte) render_playfield::l#3 ← phi( render_playfield::@2/(byte) render_playfield::l#4 )
(byte) render_playfield::l#1 ← (byte) render_playfield::l#3 + rangenext(2,render_playfield::$1)
(bool~) render_playfield::$6 ← (byte) render_playfield::l#1 != rangelast(2,render_playfield::$1)
if((bool~) render_playfield::$6) goto render_playfield::@1
to:render_playfield::@return
render_playfield::@return: scope:[render_playfield] from render_playfield::@3
return
to:@return
render_moving: scope:[render_moving] from main::@32 main::@39
(byte) current_piece_char#68 ← phi( main::@32/(byte) current_piece_char#80 main::@39/(byte) current_piece_char#84 )
(byte*) current_piece_gfx#64 ← phi( main::@32/(byte*) current_piece_gfx#81 main::@39/(byte*) current_piece_gfx#82 )
(byte) current_xpos#59 ← phi( main::@32/(byte) current_xpos#79 main::@39/(byte) current_xpos#80 )
(byte) render_screen_render#33 ← phi( main::@32/(byte) render_screen_render#36 main::@39/(byte) render_screen_render#39 )
(byte) current_ypos#13 ← phi( main::@32/(byte) current_ypos#30 main::@39/(byte) current_ypos#31 )
(byte) render_moving::i#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte/signed word/word/dword/signed dword~) render_moving::$0 ← (byte) current_ypos#13 * (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) render_moving::ypos2#0 ← (byte/signed word/word/dword/signed dword~) render_moving::$0
(byte) render_moving::l#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:render_moving::@1
render_moving::@1: scope:[render_moving] from render_moving render_moving::@3
(byte) current_piece_char#52 ← phi( render_moving/(byte) current_piece_char#68 render_moving::@3/(byte) current_piece_char#69 )
(byte) render_moving::l#5 ← phi( render_moving/(byte) render_moving::l#0 render_moving::@3/(byte) render_moving::l#1 )
(byte*) current_piece_gfx#46 ← phi( render_moving/(byte*) current_piece_gfx#64 render_moving::@3/(byte*) current_piece_gfx#65 )
(byte) render_moving::i#5 ← phi( render_moving/(byte) render_moving::i#0 render_moving::@3/(byte) render_moving::i#8 )
(byte) current_xpos#36 ← phi( render_moving/(byte) current_xpos#59 render_moving::@3/(byte) current_xpos#60 )
(byte) render_screen_render#24 ← phi( render_moving/(byte) render_screen_render#33 render_moving::@3/(byte) render_screen_render#34 )
(byte) render_moving::ypos2#2 ← phi( render_moving/(byte) render_moving::ypos2#0 render_moving::@3/(byte) render_moving::ypos2#1 )
(bool~) render_moving::$1 ← (byte) render_moving::ypos2#2 > (byte/signed byte/word/signed word/dword/signed dword) 2
if((bool~) render_moving::$1) goto render_moving::@2
to:render_moving::@8
render_moving::@2: scope:[render_moving] from render_moving::@1
(byte) render_moving::l#8 ← phi( render_moving::@1/(byte) render_moving::l#5 )
(byte) current_piece_char#37 ← phi( render_moving::@1/(byte) current_piece_char#52 )
(byte) render_moving::i#6 ← phi( render_moving::@1/(byte) render_moving::i#5 )
(byte*) current_piece_gfx#29 ← phi( render_moving::@1/(byte*) current_piece_gfx#46 )
(byte) current_xpos#16 ← phi( render_moving::@1/(byte) current_xpos#36 )
(byte) render_moving::ypos2#3 ← phi( render_moving::@1/(byte) render_moving::ypos2#2 )
(byte) render_screen_render#14 ← phi( render_moving::@1/(byte) render_screen_render#24 )
(byte~) render_moving::$2 ← (byte) render_screen_render#14 + (byte) render_moving::ypos2#3
(byte*) render_moving::screen_line#0 ← *((byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_moving::$2)
(byte) render_moving::xpos#0 ← (byte) current_xpos#16
(byte) render_moving::c#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:render_moving::@4
render_moving::@8: scope:[render_moving] from render_moving::@1
(byte) current_piece_char#85 ← phi( render_moving::@1/(byte) current_piece_char#52 )
(byte*) current_piece_gfx#83 ← phi( render_moving::@1/(byte*) current_piece_gfx#46 )
(byte) current_xpos#82 ← phi( render_moving::@1/(byte) current_xpos#36 )
(byte) render_screen_render#42 ← phi( render_moving::@1/(byte) render_screen_render#24 )
(byte) render_moving::l#4 ← phi( render_moving::@1/(byte) render_moving::l#5 )
(byte) render_moving::ypos2#6 ← phi( render_moving::@1/(byte) render_moving::ypos2#2 )
(byte) render_moving::i#3 ← phi( render_moving::@1/(byte) render_moving::i#5 )
(byte) render_moving::i#1 ← (byte) render_moving::i#3 + (byte/signed byte/word/signed word/dword/signed dword) 4
to:render_moving::@3
render_moving::@3: scope:[render_moving] from render_moving::@5 render_moving::@8
(byte) current_piece_char#69 ← phi( render_moving::@5/(byte) current_piece_char#38 render_moving::@8/(byte) current_piece_char#85 )
(byte*) current_piece_gfx#65 ← phi( render_moving::@5/(byte*) current_piece_gfx#30 render_moving::@8/(byte*) current_piece_gfx#83 )
(byte) render_moving::i#8 ← phi( render_moving::@5/(byte) render_moving::i#7 render_moving::@8/(byte) render_moving::i#1 )
(byte) current_xpos#60 ← phi( render_moving::@5/(byte) current_xpos#81 render_moving::@8/(byte) current_xpos#82 )
(byte) render_screen_render#34 ← phi( render_moving::@5/(byte) render_screen_render#41 render_moving::@8/(byte) render_screen_render#42 )
(byte) render_moving::l#2 ← phi( render_moving::@5/(byte) render_moving::l#3 render_moving::@8/(byte) render_moving::l#4 )
(byte) render_moving::ypos2#4 ← phi( render_moving::@5/(byte) render_moving::ypos2#5 render_moving::@8/(byte) render_moving::ypos2#6 )
(byte) render_moving::ypos2#1 ← (byte) render_moving::ypos2#4 + (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) render_moving::l#1 ← (byte) render_moving::l#2 + rangenext(0,3)
(bool~) render_moving::$6 ← (byte) render_moving::l#1 != rangelast(0,3)
if((bool~) render_moving::$6) goto render_moving::@1
to:render_moving::@return
render_moving::@4: scope:[render_moving] from render_moving::@2 render_moving::@5
(byte) current_xpos#98 ← phi( render_moving::@2/(byte) current_xpos#16 render_moving::@5/(byte) current_xpos#81 )
(byte) render_screen_render#46 ← phi( render_moving::@2/(byte) render_screen_render#14 render_moving::@5/(byte) render_screen_render#41 )
(byte) render_moving::l#6 ← phi( render_moving::@2/(byte) render_moving::l#8 render_moving::@5/(byte) render_moving::l#3 )
(byte) render_moving::ypos2#7 ← phi( render_moving::@2/(byte) render_moving::ypos2#3 render_moving::@5/(byte) render_moving::ypos2#5 )
(byte*) render_moving::screen_line#2 ← phi( render_moving::@2/(byte*) render_moving::screen_line#0 render_moving::@5/(byte*) render_moving::screen_line#3 )
(byte) current_piece_char#24 ← phi( render_moving::@2/(byte) current_piece_char#37 render_moving::@5/(byte) current_piece_char#38 )
(byte) render_moving::c#3 ← phi( render_moving::@2/(byte) render_moving::c#0 render_moving::@5/(byte) render_moving::c#1 )
(byte) render_moving::xpos#4 ← phi( render_moving::@2/(byte) render_moving::xpos#0 render_moving::@5/(byte) render_moving::xpos#1 )
(byte) render_moving::i#4 ← phi( render_moving::@2/(byte) render_moving::i#6 render_moving::@5/(byte) render_moving::i#7 )
(byte*) current_piece_gfx#15 ← phi( render_moving::@2/(byte*) current_piece_gfx#29 render_moving::@5/(byte*) current_piece_gfx#30 )
(byte) render_moving::current_cell#0 ← *((byte*) current_piece_gfx#15 + (byte) render_moving::i#4)
(byte) render_moving::i#2 ← ++ (byte) render_moving::i#4
(bool~) render_moving::$3 ← (byte) render_moving::current_cell#0 != (byte/signed byte/word/signed word/dword/signed dword) 0
(bool~) render_moving::$4 ← ! (bool~) render_moving::$3
if((bool~) render_moving::$4) goto render_moving::@5
to:render_moving::@6
render_moving::@5: scope:[render_moving] from render_moving::@4 render_moving::@6
(byte) current_xpos#81 ← phi( render_moving::@4/(byte) current_xpos#98 render_moving::@6/(byte) current_xpos#99 )
(byte) render_screen_render#41 ← phi( render_moving::@4/(byte) render_screen_render#46 render_moving::@6/(byte) render_screen_render#47 )
(byte*) render_moving::screen_line#3 ← phi( render_moving::@4/(byte*) render_moving::screen_line#2 render_moving::@6/(byte*) render_moving::screen_line#1 )
(byte) current_piece_char#38 ← phi( render_moving::@4/(byte) current_piece_char#24 render_moving::@6/(byte) current_piece_char#12 )
(byte) render_moving::i#7 ← phi( render_moving::@4/(byte) render_moving::i#2 render_moving::@6/(byte) render_moving::i#9 )
(byte*) current_piece_gfx#30 ← phi( render_moving::@4/(byte*) current_piece_gfx#15 render_moving::@6/(byte*) current_piece_gfx#47 )
(byte) render_moving::l#3 ← phi( render_moving::@4/(byte) render_moving::l#6 render_moving::@6/(byte) render_moving::l#7 )
(byte) render_moving::ypos2#5 ← phi( render_moving::@4/(byte) render_moving::ypos2#7 render_moving::@6/(byte) render_moving::ypos2#8 )
(byte) render_moving::c#2 ← phi( render_moving::@4/(byte) render_moving::c#3 render_moving::@6/(byte) render_moving::c#4 )
(byte) render_moving::xpos#2 ← phi( render_moving::@4/(byte) render_moving::xpos#4 render_moving::@6/(byte) render_moving::xpos#3 )
(byte) render_moving::xpos#1 ← ++ (byte) render_moving::xpos#2
(byte) render_moving::c#1 ← (byte) render_moving::c#2 + rangenext(0,3)
(bool~) render_moving::$5 ← (byte) render_moving::c#1 != rangelast(0,3)
if((bool~) render_moving::$5) goto render_moving::@4
to:render_moving::@3
render_moving::@6: scope:[render_moving] from render_moving::@4
(byte) current_xpos#99 ← phi( render_moving::@4/(byte) current_xpos#98 )
(byte) render_screen_render#47 ← phi( render_moving::@4/(byte) render_screen_render#46 )
(byte) render_moving::i#9 ← phi( render_moving::@4/(byte) render_moving::i#2 )
(byte*) current_piece_gfx#47 ← phi( render_moving::@4/(byte*) current_piece_gfx#15 )
(byte) render_moving::l#7 ← phi( render_moving::@4/(byte) render_moving::l#6 )
(byte) render_moving::ypos2#8 ← phi( render_moving::@4/(byte) render_moving::ypos2#7 )
(byte) render_moving::c#4 ← phi( render_moving::@4/(byte) render_moving::c#3 )
(byte) render_moving::xpos#3 ← phi( render_moving::@4/(byte) render_moving::xpos#4 )
(byte*) render_moving::screen_line#1 ← phi( render_moving::@4/(byte*) render_moving::screen_line#2 )
(byte) current_piece_char#12 ← phi( render_moving::@4/(byte) current_piece_char#24 )
*((byte*) render_moving::screen_line#1 + (byte) render_moving::xpos#3) ← (byte) current_piece_char#12
to:render_moving::@5
render_moving::@return: scope:[render_moving] from render_moving::@3
return
to:@return
render_next: scope:[render_next] from main::@33 main::@40
(byte) next_piece_idx#36 ← phi( main::@33/(byte) next_piece_idx#47 main::@40/(byte) next_piece_idx#48 )
(byte) render_screen_render#15 ← phi( main::@33/(byte) render_screen_render#25 main::@40/(byte) render_screen_render#26 )
(word/signed word/dword/signed dword~) render_next::$0 ← (byte/signed byte/word/signed word/dword/signed dword) $28 * (byte/signed byte/word/signed word/dword/signed dword) $c
(word/signed dword/dword/signed word~) render_next::$1 ← (word/signed word/dword/signed dword~) render_next::$0 + (byte/signed byte/word/signed word/dword/signed dword) $18
(word/signed dword/dword/signed word~) render_next::$2 ← (word/signed dword/dword/signed word~) render_next::$1 + (byte/signed byte/word/signed word/dword/signed dword) 4
(word) render_next::next_area_offset#0 ← (word/signed dword/dword/signed word~) render_next::$2
(byte*) render_next::screen_next_area#0 ← (byte*) 0
(bool~) render_next::$3 ← (byte) render_screen_render#15 == (byte/signed byte/word/signed word/dword/signed dword) 0
if((bool~) render_next::$3) goto render_next::@1
to:render_next::@3
render_next::@1: scope:[render_next] from render_next
(byte) next_piece_idx#24 ← phi( render_next/(byte) next_piece_idx#36 )
(word) render_next::next_area_offset#1 ← phi( render_next/(word) render_next::next_area_offset#0 )
(byte*~) render_next::$6 ← (byte*) PLAYFIELD_SCREEN_1#0 + (word) render_next::next_area_offset#1
(byte*) render_next::screen_next_area#1 ← (byte*~) render_next::$6
to:render_next::@2
render_next::@3: scope:[render_next] from render_next
(byte) next_piece_idx#25 ← phi( render_next/(byte) next_piece_idx#36 )
(word) render_next::next_area_offset#2 ← phi( render_next/(word) render_next::next_area_offset#0 )
(byte*~) render_next::$5 ← (byte*) PLAYFIELD_SCREEN_2#0 + (word) render_next::next_area_offset#2
(byte*) render_next::screen_next_area#2 ← (byte*~) render_next::$5
to:render_next::@2
render_next::@2: scope:[render_next] from render_next::@1 render_next::@3
(byte*) render_next::screen_next_area#11 ← phi( render_next::@1/(byte*) render_next::screen_next_area#1 render_next::@3/(byte*) render_next::screen_next_area#2 )
(byte) next_piece_idx#12 ← phi( render_next::@1/(byte) next_piece_idx#24 render_next::@3/(byte) next_piece_idx#25 )
(byte/signed word/word/dword/signed dword~) render_next::$4 ← (byte) next_piece_idx#12 * (byte/signed byte/word/signed word/dword/signed dword) 2
(byte*) render_next::next_piece_gfx#0 ← ((byte*)) *((word[]) PIECES#0 + (byte/signed word/word/dword/signed dword~) render_next::$4)
(byte) render_next::next_piece_char#0 ← *((byte[]) PIECES_NEXT_CHARS#0 + (byte) next_piece_idx#12)
(byte) render_next::l#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:render_next::@5
render_next::@5: scope:[render_next] from render_next::@11 render_next::@2
(byte) render_next::l#7 ← phi( render_next::@11/(byte) render_next::l#1 render_next::@2/(byte) render_next::l#0 )
(byte*) render_next::screen_next_area#10 ← phi( render_next::@11/(byte*) render_next::screen_next_area#4 render_next::@2/(byte*) render_next::screen_next_area#11 )
(byte) render_next::next_piece_char#3 ← phi( render_next::@11/(byte) render_next::next_piece_char#5 render_next::@2/(byte) render_next::next_piece_char#0 )
(byte*) render_next::next_piece_gfx#3 ← phi( render_next::@11/(byte*) render_next::next_piece_gfx#5 render_next::@2/(byte*) render_next::next_piece_gfx#0 )
(byte) render_next::c#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:render_next::@6
render_next::@6: scope:[render_next] from render_next::@5 render_next::@8
(byte) render_next::l#6 ← phi( render_next::@5/(byte) render_next::l#7 render_next::@8/(byte) render_next::l#3 )
(byte) render_next::c#5 ← phi( render_next::@5/(byte) render_next::c#0 render_next::@8/(byte) render_next::c#1 )
(byte*) render_next::screen_next_area#9 ← phi( render_next::@5/(byte*) render_next::screen_next_area#10 render_next::@8/(byte*) render_next::screen_next_area#3 )
(byte) render_next::next_piece_char#2 ← phi( render_next::@5/(byte) render_next::next_piece_char#3 render_next::@8/(byte) render_next::next_piece_char#4 )
(byte*) render_next::next_piece_gfx#2 ← phi( render_next::@5/(byte*) render_next::next_piece_gfx#3 render_next::@8/(byte*) render_next::next_piece_gfx#4 )
(byte) render_next::cell#0 ← *((byte*) render_next::next_piece_gfx#2)
(byte*) render_next::next_piece_gfx#1 ← ++ (byte*) render_next::next_piece_gfx#2
(bool~) render_next::$7 ← (byte) render_next::cell#0 != (byte/signed byte/word/signed word/dword/signed dword) 0
if((bool~) render_next::$7) goto render_next::@7
to:render_next::@9
render_next::@7: scope:[render_next] from render_next::@6
(byte) render_next::l#4 ← phi( render_next::@6/(byte) render_next::l#6 )
(byte*) render_next::next_piece_gfx#6 ← phi( render_next::@6/(byte*) render_next::next_piece_gfx#1 )
(byte) render_next::c#3 ← phi( render_next::@6/(byte) render_next::c#5 )
(byte*) render_next::screen_next_area#5 ← phi( render_next::@6/(byte*) render_next::screen_next_area#9 )
(byte) render_next::next_piece_char#1 ← phi( render_next::@6/(byte) render_next::next_piece_char#2 )
*((byte*) render_next::screen_next_area#5) ← (byte) render_next::next_piece_char#1
to:render_next::@8
render_next::@9: scope:[render_next] from render_next::@6
(byte) render_next::next_piece_char#6 ← phi( render_next::@6/(byte) render_next::next_piece_char#2 )
(byte) render_next::l#5 ← phi( render_next::@6/(byte) render_next::l#6 )
(byte*) render_next::next_piece_gfx#7 ← phi( render_next::@6/(byte*) render_next::next_piece_gfx#1 )
(byte) render_next::c#4 ← phi( render_next::@6/(byte) render_next::c#5 )
(byte*) render_next::screen_next_area#6 ← phi( render_next::@6/(byte*) render_next::screen_next_area#9 )
*((byte*) render_next::screen_next_area#6) ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:render_next::@8
render_next::@8: scope:[render_next] from render_next::@7 render_next::@9
(byte) render_next::next_piece_char#4 ← phi( render_next::@7/(byte) render_next::next_piece_char#1 render_next::@9/(byte) render_next::next_piece_char#6 )
(byte) render_next::l#3 ← phi( render_next::@7/(byte) render_next::l#4 render_next::@9/(byte) render_next::l#5 )
(byte*) render_next::next_piece_gfx#4 ← phi( render_next::@7/(byte*) render_next::next_piece_gfx#6 render_next::@9/(byte*) render_next::next_piece_gfx#7 )
(byte) render_next::c#2 ← phi( render_next::@7/(byte) render_next::c#3 render_next::@9/(byte) render_next::c#4 )
(byte*) render_next::screen_next_area#7 ← phi( render_next::@7/(byte*) render_next::screen_next_area#5 render_next::@9/(byte*) render_next::screen_next_area#6 )
(byte*) render_next::screen_next_area#3 ← ++ (byte*) render_next::screen_next_area#7
(byte) render_next::c#1 ← (byte) render_next::c#2 + rangenext(0,3)
(bool~) render_next::$8 ← (byte) render_next::c#1 != rangelast(0,3)
if((bool~) render_next::$8) goto render_next::@6
to:render_next::@11
render_next::@11: scope:[render_next] from render_next::@8
(byte) render_next::next_piece_char#5 ← phi( render_next::@8/(byte) render_next::next_piece_char#4 )
(byte*) render_next::next_piece_gfx#5 ← phi( render_next::@8/(byte*) render_next::next_piece_gfx#4 )
(byte) render_next::l#2 ← phi( render_next::@8/(byte) render_next::l#3 )
(byte*) render_next::screen_next_area#8 ← phi( render_next::@8/(byte*) render_next::screen_next_area#3 )
(byte*) render_next::screen_next_area#4 ← (byte*) render_next::screen_next_area#8 + (byte/signed byte/word/signed word/dword/signed dword) $24
(byte) render_next::l#1 ← (byte) render_next::l#2 + rangenext(0,3)
(bool~) render_next::$9 ← (byte) render_next::l#1 != rangelast(0,3)
if((bool~) render_next::$9) goto render_next::@5
to:render_next::@return
render_next::@return: scope:[render_next] from render_next::@11
return
to:@return
@23: scope:[] from @14
(byte) level_bcd#101 ← phi( @14/(byte) level_bcd#0 )
(byte) level#109 ← phi( @14/(byte) level#0 )
(dword) score_bcd#84 ← phi( @14/(dword) score_bcd#0 )
(word) lines_bcd#88 ← phi( @14/(word) lines_bcd#0 )
(byte) keyboard_modifiers#58 ← phi( @14/(byte) keyboard_modifiers#60 )
(byte) keyboard_events_size#76 ← phi( @14/(byte) keyboard_events_size#79 )
(byte) render_screen_showing#45 ← phi( @14/(byte) render_screen_showing#0 )
(byte) game_over#90 ← phi( @14/(byte) game_over#0 )
(byte) current_ypos#102 ← phi( @14/(byte) current_ypos#0 )
(byte) current_xpos#126 ← phi( @14/(byte) current_xpos#0 )
(byte*) current_piece_gfx#116 ← phi( @14/(byte*) current_piece_gfx#0 )
(byte) current_piece_char#104 ← phi( @14/(byte) current_piece_char#0 )
(byte) render_screen_render#62 ← phi( @14/(byte) render_screen_render#0 )
(byte) render_screen_show#60 ← phi( @14/(byte) render_screen_show#0 )
kickasm(location (byte*) PLAYFIELD_SPRITES#0) {{ .var sprites = LoadPicture("playfield-sprites.png", List().add($010101, $000000))
// Put the sprites into memory
.for(var sy=0;sy<10;sy++) {
.var sprite_gfx_y = sy*20
.for(var sx=0;sx<3;sx++) {
.for (var y=0;y<21; y++) {
.var gfx_y = sprite_gfx_y + mod(2100+y-sprite_gfx_y,21)
.for (var c=0; c<3; c++) {
.byte sprites.getSinglecolorByte(sx*3+c,gfx_y)
}
}
.byte 0
}
}
}}
to:@24
sprites_init: scope:[sprites_init] from main::@26
*((byte*) SPRITES_ENABLE#0) ← (byte/signed byte/word/signed word/dword/signed dword) $f
*((byte*) SPRITES_MC#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
*((byte*) SPRITES_EXPAND_Y#0) ← *((byte*) SPRITES_MC#0)
*((byte*) SPRITES_EXPAND_X#0) ← *((byte*) SPRITES_EXPAND_Y#0)
(byte/signed byte/word/signed word/dword/signed dword~) sprites_init::$0 ← (byte/signed byte/word/signed word/dword/signed dword) $f * (byte/signed byte/word/signed word/dword/signed dword) 8
(byte/signed word/word/dword/signed dword/signed byte~) sprites_init::$1 ← (byte/signed byte/word/signed word/dword/signed dword) $18 + (byte/signed byte/word/signed word/dword/signed dword~) sprites_init::$0
(byte) sprites_init::xpos#0 ← (byte/signed word/word/dword/signed dword/signed byte~) sprites_init::$1
(byte) sprites_init::s#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:sprites_init::@1
sprites_init::@1: scope:[sprites_init] from sprites_init sprites_init::@1
(byte) sprites_init::xpos#2 ← phi( sprites_init/(byte) sprites_init::xpos#0 sprites_init::@1/(byte) sprites_init::xpos#1 )
(byte) sprites_init::s#2 ← phi( sprites_init/(byte) sprites_init::s#0 sprites_init::@1/(byte) sprites_init::s#1 )
(byte/signed word/word/dword/signed dword~) sprites_init::$2 ← (byte) sprites_init::s#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) sprites_init::s2#0 ← (byte/signed word/word/dword/signed dword~) sprites_init::$2
*((byte*) SPRITES_XPOS#0 + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2
*((byte*) SPRITES_COLS#0 + (byte) sprites_init::s#2) ← (byte) BLACK#0
(byte/signed word/word/dword/signed dword~) sprites_init::$3 ← (byte) sprites_init::xpos#2 + (byte/signed byte/word/signed word/dword/signed dword) $18
(byte) sprites_init::xpos#1 ← (byte/signed word/word/dword/signed dword~) sprites_init::$3
(byte) sprites_init::s#1 ← (byte) sprites_init::s#2 + rangenext(0,3)
(bool~) sprites_init::$4 ← (byte) sprites_init::s#1 != rangelast(0,3)
if((bool~) sprites_init::$4) goto sprites_init::@1
to:sprites_init::@return
sprites_init::@return: scope:[sprites_init] from sprites_init::@1
return
to:@return
@24: scope:[] from @23
(byte) level_bcd#96 ← phi( @23/(byte) level_bcd#101 )
(byte) level#103 ← phi( @23/(byte) level#109 )
(dword) score_bcd#80 ← phi( @23/(dword) score_bcd#84 )
(word) lines_bcd#83 ← phi( @23/(word) lines_bcd#88 )
(byte) keyboard_modifiers#55 ← phi( @23/(byte) keyboard_modifiers#58 )
(byte) keyboard_events_size#71 ← phi( @23/(byte) keyboard_events_size#76 )
(byte) render_screen_showing#42 ← phi( @23/(byte) render_screen_showing#45 )
(byte) game_over#88 ← phi( @23/(byte) game_over#90 )
(byte) current_ypos#99 ← phi( @23/(byte) current_ypos#102 )
(byte) current_xpos#123 ← phi( @23/(byte) current_xpos#126 )
(byte*) current_piece_gfx#113 ← phi( @23/(byte*) current_piece_gfx#116 )
(byte) current_piece_char#101 ← phi( @23/(byte) current_piece_char#104 )
(byte) render_screen_render#60 ← phi( @23/(byte) render_screen_render#62 )
(byte) render_screen_show#57 ← phi( @23/(byte) render_screen_show#60 )
(byte) SPRITES_FIRST_YPOS#0 ← (byte/signed byte/word/signed word/dword/signed dword) $31
(byte/signed word/word/dword/signed dword~) $4 ← (byte) SPRITES_FIRST_YPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) $13
(byte) IRQ_RASTER_FIRST#0 ← (byte/signed word/word/dword/signed dword~) $4
(byte) irq_raster_next#0 ← (byte) IRQ_RASTER_FIRST#0
(byte/signed word/word/dword/signed dword~) $5 ← (byte) SPRITES_FIRST_YPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) $15
(byte) irq_sprite_ypos#0 ← (byte/signed word/word/dword/signed dword~) $5
(byte*) toSpritePtr1_sprite#0 ← (byte*) PLAYFIELD_SPRITES#0
to:toSpritePtr1
toSpritePtr1: scope:[] from @24
(byte) level_bcd#89 ← phi( @24/(byte) level_bcd#96 )
(byte) level#96 ← phi( @24/(byte) level#103 )
(dword) score_bcd#74 ← phi( @24/(dword) score_bcd#80 )
(word) lines_bcd#77 ← phi( @24/(word) lines_bcd#83 )
(byte) keyboard_modifiers#52 ← phi( @24/(byte) keyboard_modifiers#55 )
(byte) keyboard_events_size#67 ← phi( @24/(byte) keyboard_events_size#71 )
(byte) render_screen_showing#38 ← phi( @24/(byte) render_screen_showing#42 )
(byte) game_over#82 ← phi( @24/(byte) game_over#88 )
(byte) current_ypos#95 ← phi( @24/(byte) current_ypos#99 )
(byte) current_xpos#119 ← phi( @24/(byte) current_xpos#123 )
(byte*) current_piece_gfx#107 ← phi( @24/(byte*) current_piece_gfx#113 )
(byte) current_piece_char#94 ← phi( @24/(byte) current_piece_char#101 )
(byte) render_screen_render#57 ← phi( @24/(byte) render_screen_render#60 )
(byte) render_screen_show#54 ← phi( @24/(byte) render_screen_show#57 )
(byte) irq_raster_next#24 ← phi( @24/(byte) irq_raster_next#0 )
(byte) irq_sprite_ypos#24 ← phi( @24/(byte) irq_sprite_ypos#0 )
(byte*) toSpritePtr1_sprite#1 ← phi( @24/(byte*) toSpritePtr1_sprite#0 )
(word) toSpritePtr1_$0#0 ← ((word)) (byte*) toSpritePtr1_sprite#1
(word/signed dword/dword) toSpritePtr1_$1#0 ← (word) toSpritePtr1_$0#0 / (byte/signed byte/word/signed word/dword/signed dword) $40
(byte) toSpritePtr1_$2#0 ← ((byte)) (word/signed dword/dword) toSpritePtr1_$1#0
(byte) toSpritePtr1_return#0 ← (byte) toSpritePtr1_$2#0
to:toSpritePtr1_@return
toSpritePtr1_@return: scope:[] from toSpritePtr1
(byte) level_bcd#80 ← phi( toSpritePtr1/(byte) level_bcd#89 )
(byte) level#87 ← phi( toSpritePtr1/(byte) level#96 )
(dword) score_bcd#67 ← phi( toSpritePtr1/(dword) score_bcd#74 )
(word) lines_bcd#70 ← phi( toSpritePtr1/(word) lines_bcd#77 )
(byte) keyboard_modifiers#46 ← phi( toSpritePtr1/(byte) keyboard_modifiers#52 )
(byte) keyboard_events_size#58 ← phi( toSpritePtr1/(byte) keyboard_events_size#67 )
(byte) render_screen_showing#32 ← phi( toSpritePtr1/(byte) render_screen_showing#38 )
(byte) game_over#72 ← phi( toSpritePtr1/(byte) game_over#82 )
(byte) current_ypos#87 ← phi( toSpritePtr1/(byte) current_ypos#95 )
(byte) current_xpos#111 ← phi( toSpritePtr1/(byte) current_xpos#119 )
(byte*) current_piece_gfx#98 ← phi( toSpritePtr1/(byte*) current_piece_gfx#107 )
(byte) current_piece_char#86 ← phi( toSpritePtr1/(byte) current_piece_char#94 )
(byte) render_screen_render#52 ← phi( toSpritePtr1/(byte) render_screen_render#57 )
(byte) render_screen_show#48 ← phi( toSpritePtr1/(byte) render_screen_show#54 )
(byte) irq_raster_next#23 ← phi( toSpritePtr1/(byte) irq_raster_next#24 )
(byte) irq_sprite_ypos#22 ← phi( toSpritePtr1/(byte) irq_sprite_ypos#24 )
(byte) toSpritePtr1_return#2 ← phi( toSpritePtr1/(byte) toSpritePtr1_return#0 )
(byte) toSpritePtr1_return#1 ← (byte) toSpritePtr1_return#2
to:@39
@39: scope:[] from toSpritePtr1_@return
(byte) level_bcd#70 ← phi( toSpritePtr1_@return/(byte) level_bcd#80 )
(byte) level#74 ← phi( toSpritePtr1_@return/(byte) level#87 )
(dword) score_bcd#58 ← phi( toSpritePtr1_@return/(dword) score_bcd#67 )
(word) lines_bcd#60 ← phi( toSpritePtr1_@return/(word) lines_bcd#70 )
(byte) keyboard_modifiers#39 ← phi( toSpritePtr1_@return/(byte) keyboard_modifiers#46 )
(byte) keyboard_events_size#48 ← phi( toSpritePtr1_@return/(byte) keyboard_events_size#58 )
(byte) render_screen_showing#27 ← phi( toSpritePtr1_@return/(byte) render_screen_showing#32 )
(byte) game_over#59 ← phi( toSpritePtr1_@return/(byte) game_over#72 )
(byte) current_ypos#77 ← phi( toSpritePtr1_@return/(byte) current_ypos#87 )
(byte) current_xpos#100 ← phi( toSpritePtr1_@return/(byte) current_xpos#111 )
(byte*) current_piece_gfx#84 ← phi( toSpritePtr1_@return/(byte*) current_piece_gfx#98 )
(byte) current_piece_char#70 ← phi( toSpritePtr1_@return/(byte) current_piece_char#86 )
(byte) render_screen_render#48 ← phi( toSpritePtr1_@return/(byte) render_screen_render#52 )
(byte) render_screen_show#43 ← phi( toSpritePtr1_@return/(byte) render_screen_show#48 )
(byte) irq_raster_next#22 ← phi( toSpritePtr1_@return/(byte) irq_raster_next#23 )
(byte) irq_sprite_ypos#21 ← phi( toSpritePtr1_@return/(byte) irq_sprite_ypos#22 )
(byte) toSpritePtr1_return#3 ← phi( toSpritePtr1_@return/(byte) toSpritePtr1_return#1 )
(byte~) $6 ← (byte) toSpritePtr1_return#3
(byte/signed word/word/dword/signed dword~) $7 ← (byte~) $6 + (byte/signed byte/word/signed word/dword/signed dword) 3
(byte) irq_sprite_ptr#0 ← (byte/signed word/word/dword/signed dword~) $7
(byte) irq_cnt#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:@26
sprites_irq_init: scope:[sprites_irq_init] from main::@27
asm { sei }
*((byte*) IRQ_STATUS#0) ← (byte) IRQ_RASTER#0
asm { ldaCIA1_INTERRUPT }
*((byte*) PROCPORT_DDR#0) ← (byte) PROCPORT_DDR_MEMORY_MASK#0
*((byte*) PROCPORT#0) ← (byte) PROCPORT_RAM_IO#0
*((byte*) CIA1_INTERRUPT#0) ← (byte) CIA_INTERRUPT_CLEAR#0
*((byte*) VIC_CONTROL#0) ← *((byte*) VIC_CONTROL#0) & (byte/signed byte/word/signed word/dword/signed dword) $7f
*((byte*) RASTER#0) ← (byte) IRQ_RASTER_FIRST#0
*((byte*) IRQ_ENABLE#0) ← (byte) IRQ_RASTER#0
(void()*~) sprites_irq_init::$0 ← & interrupt(HARDWARE_CLOBBER)(void()) sprites_irq()
*((void()**) HARDWARE_IRQ#0) ← (void()*~) sprites_irq_init::$0
asm { cli }
to:sprites_irq_init::@return
sprites_irq_init::@return: scope:[sprites_irq_init] from sprites_irq_init
return
to:@return
sprites_irq: scope:[sprites_irq] from
(byte) irq_cnt#15 ← phi( @38/(byte) irq_cnt#17 )
(byte) render_screen_showing#15 ← phi( @38/(byte) render_screen_showing#14 )
(byte) irq_sprite_ptr#12 ← phi( @38/(byte) irq_sprite_ptr#14 )
(byte) irq_raster_next#5 ← phi( @38/(byte) irq_raster_next#10 )
(byte) irq_sprite_ypos#5 ← phi( @38/(byte) irq_sprite_ypos#9 )
asm { cld }
(byte) sprites_irq::ypos#0 ← (byte) irq_sprite_ypos#5
*((byte*) SPRITES_YPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte) sprites_irq::ypos#0
*((byte*) SPRITES_YPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte) sprites_irq::ypos#0
*((byte*) SPRITES_YPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 4) ← (byte) sprites_irq::ypos#0
*((byte*) SPRITES_YPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 6) ← (byte) sprites_irq::ypos#0
(byte/signed word/word/dword/signed dword~) sprites_irq::$0 ← (byte) irq_raster_next#5 + (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) sprites_irq::raster_sprite_gfx_modify#0 ← (byte/signed word/word/dword/signed dword~) sprites_irq::$0
to:sprites_irq::@11
sprites_irq::@11: scope:[sprites_irq] from sprites_irq sprites_irq::@11
(byte) irq_sprite_ypos#23 ← phi( sprites_irq/(byte) irq_sprite_ypos#5 sprites_irq::@11/(byte) irq_sprite_ypos#23 )
(byte) irq_raster_next#21 ← phi( sprites_irq/(byte) irq_raster_next#5 sprites_irq::@11/(byte) irq_raster_next#21 )
(byte) irq_cnt#13 ← phi( sprites_irq/(byte) irq_cnt#15 sprites_irq::@11/(byte) irq_cnt#13 )
(byte) render_screen_showing#11 ← phi( sprites_irq/(byte) render_screen_showing#15 sprites_irq::@11/(byte) render_screen_showing#11 )
(byte) irq_sprite_ptr#9 ← phi( sprites_irq/(byte) irq_sprite_ptr#12 sprites_irq::@11/(byte) irq_sprite_ptr#9 )
(byte) sprites_irq::raster_sprite_gfx_modify#1 ← phi( sprites_irq/(byte) sprites_irq::raster_sprite_gfx_modify#0 sprites_irq::@11/(byte) sprites_irq::raster_sprite_gfx_modify#1 )
(bool~) sprites_irq::$4 ← *((byte*) RASTER#0) < (byte) sprites_irq::raster_sprite_gfx_modify#1
if((bool~) sprites_irq::$4) goto sprites_irq::@11
to:sprites_irq::@12
sprites_irq::@12: scope:[sprites_irq] from sprites_irq::@11
(byte) irq_sprite_ypos#19 ← phi( sprites_irq::@11/(byte) irq_sprite_ypos#23 )
(byte) irq_raster_next#18 ← phi( sprites_irq::@11/(byte) irq_raster_next#21 )
(byte) irq_cnt#10 ← phi( sprites_irq::@11/(byte) irq_cnt#13 )
(byte) render_screen_showing#7 ← phi( sprites_irq::@11/(byte) render_screen_showing#11 )
(byte) irq_sprite_ptr#5 ← phi( sprites_irq::@11/(byte) irq_sprite_ptr#9 )
(byte) sprites_irq::ptr#0 ← (byte) irq_sprite_ptr#5
(bool~) sprites_irq::$1 ← (byte) render_screen_showing#7 == (byte/signed byte/word/signed word/dword/signed dword) 0
if((bool~) sprites_irq::$1) goto sprites_irq::@1
to:sprites_irq::@13
sprites_irq::@1: scope:[sprites_irq] from sprites_irq::@12
(byte) irq_sprite_ptr#15 ← phi( sprites_irq::@12/(byte) irq_sprite_ptr#5 )
(byte) irq_sprite_ypos#15 ← phi( sprites_irq::@12/(byte) irq_sprite_ypos#19 )
(byte) irq_raster_next#14 ← phi( sprites_irq::@12/(byte) irq_raster_next#18 )
(byte) irq_cnt#7 ← phi( sprites_irq::@12/(byte) irq_cnt#10 )
(byte) sprites_irq::ptr#5 ← phi( sprites_irq::@12/(byte) sprites_irq::ptr#0 )
*((byte*) PLAYFIELD_SPRITE_PTRS_1#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte) sprites_irq::ptr#5
(byte) sprites_irq::ptr#1 ← ++ (byte) sprites_irq::ptr#5
*((byte*) PLAYFIELD_SPRITE_PTRS_1#0 + (byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte) sprites_irq::ptr#1
*((byte*) PLAYFIELD_SPRITE_PTRS_1#0 + (byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte) sprites_irq::ptr#1
(byte) sprites_irq::ptr#2 ← ++ (byte) sprites_irq::ptr#1
*((byte*) PLAYFIELD_SPRITE_PTRS_1#0 + (byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte) sprites_irq::ptr#2
to:sprites_irq::@2
sprites_irq::@13: scope:[sprites_irq] from sprites_irq::@12
(byte) irq_sprite_ptr#16 ← phi( sprites_irq::@12/(byte) irq_sprite_ptr#5 )
(byte) irq_sprite_ypos#16 ← phi( sprites_irq::@12/(byte) irq_sprite_ypos#19 )
(byte) irq_raster_next#15 ← phi( sprites_irq::@12/(byte) irq_raster_next#18 )
(byte) irq_cnt#8 ← phi( sprites_irq::@12/(byte) irq_cnt#10 )
(byte) sprites_irq::ptr#6 ← phi( sprites_irq::@12/(byte) sprites_irq::ptr#0 )
*((byte*) PLAYFIELD_SPRITE_PTRS_2#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte) sprites_irq::ptr#6
(byte) sprites_irq::ptr#3 ← ++ (byte) sprites_irq::ptr#6
*((byte*) PLAYFIELD_SPRITE_PTRS_2#0 + (byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte) sprites_irq::ptr#3
*((byte*) PLAYFIELD_SPRITE_PTRS_2#0 + (byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte) sprites_irq::ptr#3
(byte) sprites_irq::ptr#4 ← ++ (byte) sprites_irq::ptr#3
*((byte*) PLAYFIELD_SPRITE_PTRS_2#0 + (byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte) sprites_irq::ptr#4
to:sprites_irq::@2
sprites_irq::@2: scope:[sprites_irq] from sprites_irq::@1 sprites_irq::@13
(byte) irq_sprite_ptr#13 ← phi( sprites_irq::@1/(byte) irq_sprite_ptr#15 sprites_irq::@13/(byte) irq_sprite_ptr#16 )
(byte) irq_sprite_ypos#12 ← phi( sprites_irq::@1/(byte) irq_sprite_ypos#15 sprites_irq::@13/(byte) irq_sprite_ypos#16 )
(byte) irq_raster_next#11 ← phi( sprites_irq::@1/(byte) irq_raster_next#14 sprites_irq::@13/(byte) irq_raster_next#15 )
(byte) irq_cnt#4 ← phi( sprites_irq::@1/(byte) irq_cnt#7 sprites_irq::@13/(byte) irq_cnt#8 )
(byte) irq_cnt#1 ← ++ (byte) irq_cnt#4
(bool~) sprites_irq::$2 ← (byte) irq_cnt#1 == (byte/signed byte/word/signed word/dword/signed dword) 9
if((bool~) sprites_irq::$2) goto sprites_irq::@3
to:sprites_irq::@7
sprites_irq::@3: scope:[sprites_irq] from sprites_irq::@2
(byte) irq_cnt#18 ← phi( sprites_irq::@2/(byte) irq_cnt#1 )
(byte) irq_raster_next#6 ← phi( sprites_irq::@2/(byte) irq_raster_next#11 )
(byte) irq_raster_next#1 ← (byte) irq_raster_next#6 + (byte/signed byte/word/signed word/dword/signed dword) $15
(byte) irq_sprite_ypos#1 ← (byte) SPRITES_FIRST_YPOS#0
(byte*) sprites_irq::toSpritePtr2_sprite#0 ← (byte*) PLAYFIELD_SPRITES#0
to:sprites_irq::toSpritePtr2
sprites_irq::toSpritePtr2: scope:[sprites_irq] from sprites_irq::@3
(byte) irq_sprite_ypos#20 ← phi( sprites_irq::@3/(byte) irq_sprite_ypos#1 )
(byte) irq_cnt#16 ← phi( sprites_irq::@3/(byte) irq_cnt#18 )
(byte) irq_raster_next#19 ← phi( sprites_irq::@3/(byte) irq_raster_next#1 )
(byte*) sprites_irq::toSpritePtr2_sprite#1 ← phi( sprites_irq::@3/(byte*) sprites_irq::toSpritePtr2_sprite#0 )
(word) sprites_irq::toSpritePtr2_$0#0 ← ((word)) (byte*) sprites_irq::toSpritePtr2_sprite#1
(word/signed dword/dword) sprites_irq::toSpritePtr2_$1#0 ← (word) sprites_irq::toSpritePtr2_$0#0 / (byte/signed byte/word/signed word/dword/signed dword) $40
(byte) sprites_irq::toSpritePtr2_$2#0 ← ((byte)) (word/signed dword/dword) sprites_irq::toSpritePtr2_$1#0
(byte) sprites_irq::toSpritePtr2_return#0 ← (byte) sprites_irq::toSpritePtr2_$2#0
to:sprites_irq::toSpritePtr2_@return
sprites_irq::toSpritePtr2_@return: scope:[sprites_irq] from sprites_irq::toSpritePtr2
(byte) irq_sprite_ypos#17 ← phi( sprites_irq::toSpritePtr2/(byte) irq_sprite_ypos#20 )
(byte) irq_cnt#14 ← phi( sprites_irq::toSpritePtr2/(byte) irq_cnt#16 )
(byte) irq_raster_next#16 ← phi( sprites_irq::toSpritePtr2/(byte) irq_raster_next#19 )
(byte) sprites_irq::toSpritePtr2_return#2 ← phi( sprites_irq::toSpritePtr2/(byte) sprites_irq::toSpritePtr2_return#0 )
(byte) sprites_irq::toSpritePtr2_return#1 ← (byte) sprites_irq::toSpritePtr2_return#2
to:sprites_irq::@15
sprites_irq::@15: scope:[sprites_irq] from sprites_irq::toSpritePtr2_@return
(byte) irq_sprite_ypos#13 ← phi( sprites_irq::toSpritePtr2_@return/(byte) irq_sprite_ypos#17 )
(byte) irq_cnt#11 ← phi( sprites_irq::toSpritePtr2_@return/(byte) irq_cnt#14 )
(byte) irq_raster_next#13 ← phi( sprites_irq::toSpritePtr2_@return/(byte) irq_raster_next#16 )
(byte) sprites_irq::toSpritePtr2_return#3 ← phi( sprites_irq::toSpritePtr2_@return/(byte) sprites_irq::toSpritePtr2_return#1 )
(byte~) sprites_irq::$5 ← (byte) sprites_irq::toSpritePtr2_return#3
(byte) irq_sprite_ptr#1 ← (byte~) sprites_irq::$5
to:sprites_irq::@6
sprites_irq::@7: scope:[sprites_irq] from sprites_irq::@2
(byte) irq_raster_next#12 ← phi( sprites_irq::@2/(byte) irq_raster_next#11 )
(byte) irq_sprite_ptr#10 ← phi( sprites_irq::@2/(byte) irq_sprite_ptr#13 )
(byte) irq_sprite_ypos#10 ← phi( sprites_irq::@2/(byte) irq_sprite_ypos#12 )
(byte) irq_cnt#5 ← phi( sprites_irq::@2/(byte) irq_cnt#1 )
(bool~) sprites_irq::$3 ← (byte) irq_cnt#5 == (byte/signed byte/word/signed word/dword/signed dword) $a
if((bool~) sprites_irq::$3) goto sprites_irq::@4
to:sprites_irq::@8
sprites_irq::@4: scope:[sprites_irq] from sprites_irq::@7
(byte) irq_sprite_ptr#6 ← phi( sprites_irq::@7/(byte) irq_sprite_ptr#10 )
(byte) irq_sprite_ypos#6 ← phi( sprites_irq::@7/(byte) irq_sprite_ypos#10 )
(byte) irq_cnt#2 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) irq_raster_next#2 ← (byte) IRQ_RASTER_FIRST#0
(byte) irq_sprite_ypos#2 ← (byte) irq_sprite_ypos#6 + (byte/signed byte/word/signed word/dword/signed dword) $15
(byte) irq_sprite_ptr#2 ← (byte) irq_sprite_ptr#6 + (byte/signed byte/word/signed word/dword/signed dword) 3
to:sprites_irq::@6
sprites_irq::@8: scope:[sprites_irq] from sprites_irq::@7
(byte) irq_cnt#12 ← phi( sprites_irq::@7/(byte) irq_cnt#5 )
(byte) irq_sprite_ptr#7 ← phi( sprites_irq::@7/(byte) irq_sprite_ptr#10 )
(byte) irq_sprite_ypos#7 ← phi( sprites_irq::@7/(byte) irq_sprite_ypos#10 )
(byte) irq_raster_next#7 ← phi( sprites_irq::@7/(byte) irq_raster_next#12 )
(byte) irq_raster_next#3 ← (byte) irq_raster_next#7 + (byte/signed byte/word/signed word/dword/signed dword) $14
(byte) irq_sprite_ypos#3 ← (byte) irq_sprite_ypos#7 + (byte/signed byte/word/signed word/dword/signed dword) $15
(byte) irq_sprite_ptr#3 ← (byte) irq_sprite_ptr#7 + (byte/signed byte/word/signed word/dword/signed dword) 3
to:sprites_irq::@6
sprites_irq::@6: scope:[sprites_irq] from sprites_irq::@15 sprites_irq::@4 sprites_irq::@8
(byte) irq_sprite_ptr#11 ← phi( sprites_irq::@15/(byte) irq_sprite_ptr#1 sprites_irq::@4/(byte) irq_sprite_ptr#2 sprites_irq::@8/(byte) irq_sprite_ptr#3 )
(byte) irq_sprite_ypos#11 ← phi( sprites_irq::@15/(byte) irq_sprite_ypos#13 sprites_irq::@4/(byte) irq_sprite_ypos#2 sprites_irq::@8/(byte) irq_sprite_ypos#3 )
(byte) irq_cnt#9 ← phi( sprites_irq::@15/(byte) irq_cnt#11 sprites_irq::@4/(byte) irq_cnt#2 sprites_irq::@8/(byte) irq_cnt#12 )
(byte) irq_raster_next#8 ← phi( sprites_irq::@15/(byte) irq_raster_next#13 sprites_irq::@4/(byte) irq_raster_next#2 sprites_irq::@8/(byte) irq_raster_next#3 )
*((byte*) RASTER#0) ← (byte) irq_raster_next#8
*((byte*) IRQ_STATUS#0) ← (byte) IRQ_RASTER#0
to:sprites_irq::@return
sprites_irq::@return: scope:[sprites_irq] from sprites_irq::@6
(byte) irq_sprite_ptr#8 ← phi( sprites_irq::@6/(byte) irq_sprite_ptr#11 )
(byte) irq_sprite_ypos#8 ← phi( sprites_irq::@6/(byte) irq_sprite_ypos#11 )
(byte) irq_raster_next#9 ← phi( sprites_irq::@6/(byte) irq_raster_next#8 )
(byte) irq_cnt#6 ← phi( sprites_irq::@6/(byte) irq_cnt#9 )
(byte) irq_cnt#3 ← (byte) irq_cnt#6
(byte) irq_raster_next#4 ← (byte) irq_raster_next#9
(byte) irq_sprite_ypos#4 ← (byte) irq_sprite_ypos#8
(byte) irq_sprite_ptr#4 ← (byte) irq_sprite_ptr#8
return
to:@return
@26: scope:[] from @39
(byte) irq_cnt#20 ← phi( @39/(byte) irq_cnt#0 )
(byte) irq_sprite_ptr#18 ← phi( @39/(byte) irq_sprite_ptr#0 )
(byte) level_bcd#63 ← phi( @39/(byte) level_bcd#70 )
(byte) level#66 ← phi( @39/(byte) level#74 )
(dword) score_bcd#53 ← phi( @39/(dword) score_bcd#58 )
(word) lines_bcd#53 ← phi( @39/(word) lines_bcd#60 )
(byte) keyboard_modifiers#34 ← phi( @39/(byte) keyboard_modifiers#39 )
(byte) keyboard_events_size#40 ← phi( @39/(byte) keyboard_events_size#48 )
(byte) render_screen_showing#21 ← phi( @39/(byte) render_screen_showing#27 )
(byte) game_over#51 ← phi( @39/(byte) game_over#59 )
(byte) current_ypos#69 ← phi( @39/(byte) current_ypos#77 )
(byte) current_xpos#88 ← phi( @39/(byte) current_xpos#100 )
(byte*) current_piece_gfx#72 ← phi( @39/(byte*) current_piece_gfx#84 )
(byte) current_piece_char#58 ← phi( @39/(byte) current_piece_char#70 )
(byte) render_screen_render#43 ← phi( @39/(byte) render_screen_render#48 )
(byte) render_screen_show#35 ← phi( @39/(byte) render_screen_show#43 )
(byte) irq_raster_next#20 ← phi( @39/(byte) irq_raster_next#22 )
(byte) irq_sprite_ypos#18 ← phi( @39/(byte) irq_sprite_ypos#21 )
(byte/signed byte/word/signed word/dword/signed dword~) $8 ← (byte/signed byte/word/signed word/dword/signed dword) 4 * (byte/signed byte/word/signed word/dword/signed dword) 4
(byte/signed word/word/dword/signed dword/signed byte~) $9 ← (byte/signed byte/word/signed word/dword/signed dword~) $8 * (byte/signed byte/word/signed word/dword/signed dword) 4
(byte[$9]) PIECE_T#0 ← { (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0 }
(byte/signed byte/word/signed word/dword/signed dword~) $10 ← (byte/signed byte/word/signed word/dword/signed dword) 4 * (byte/signed byte/word/signed word/dword/signed dword) 4
(byte/signed word/word/dword/signed dword/signed byte~) $11 ← (byte/signed byte/word/signed word/dword/signed dword~) $10 * (byte/signed byte/word/signed word/dword/signed dword) 4
(byte[$11]) PIECE_S#0 ← { (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0 }
(byte/signed byte/word/signed word/dword/signed dword~) $12 ← (byte/signed byte/word/signed word/dword/signed dword) 4 * (byte/signed byte/word/signed word/dword/signed dword) 4
(byte/signed word/word/dword/signed dword/signed byte~) $13 ← (byte/signed byte/word/signed word/dword/signed dword~) $12 * (byte/signed byte/word/signed word/dword/signed dword) 4
(byte[$13]) PIECE_Z#0 ← { (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0 }
(byte/signed byte/word/signed word/dword/signed dword~) $14 ← (byte/signed byte/word/signed word/dword/signed dword) 4 * (byte/signed byte/word/signed word/dword/signed dword) 4
(byte/signed word/word/dword/signed dword/signed byte~) $15 ← (byte/signed byte/word/signed word/dword/signed dword~) $14 * (byte/signed byte/word/signed word/dword/signed dword) 4
(byte[$15]) PIECE_L#0 ← { (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0 }
(byte/signed byte/word/signed word/dword/signed dword~) $16 ← (byte/signed byte/word/signed word/dword/signed dword) 4 * (byte/signed byte/word/signed word/dword/signed dword) 4
(byte/signed word/word/dword/signed dword/signed byte~) $17 ← (byte/signed byte/word/signed word/dword/signed dword~) $16 * (byte/signed byte/word/signed word/dword/signed dword) 4
(byte[$17]) PIECE_J#0 ← { (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0 }
(byte/signed byte/word/signed word/dword/signed dword~) $18 ← (byte/signed byte/word/signed word/dword/signed dword) 4 * (byte/signed byte/word/signed word/dword/signed dword) 4
(byte/signed word/word/dword/signed dword/signed byte~) $19 ← (byte/signed byte/word/signed word/dword/signed dword~) $18 * (byte/signed byte/word/signed word/dword/signed dword) 4
(byte[$19]) PIECE_O#0 ← { (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0 }
(byte/signed byte/word/signed word/dword/signed dword~) $20 ← (byte/signed byte/word/signed word/dword/signed dword) 4 * (byte/signed byte/word/signed word/dword/signed dword) 4
(byte/signed word/word/dword/signed dword/signed byte~) $21 ← (byte/signed byte/word/signed word/dword/signed dword~) $20 * (byte/signed byte/word/signed word/dword/signed dword) 4
(byte[$21]) PIECE_I#0 ← { (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0 }
(word~) $22 ← ((word)) (byte[$9]) PIECE_T#0
(word~) $23 ← ((word)) (byte[$11]) PIECE_S#0
(word~) $24 ← ((word)) (byte[$13]) PIECE_Z#0
(word~) $25 ← ((word)) (byte[$17]) PIECE_J#0
(word~) $26 ← ((word)) (byte[$19]) PIECE_O#0
(word~) $27 ← ((word)) (byte[$21]) PIECE_I#0
(word~) $28 ← ((word)) (byte[$15]) PIECE_L#0
(word[]) PIECES#0 ← { (word~) $22, (word~) $23, (word~) $24, (word~) $25, (word~) $26, (word~) $27, (word~) $28 }
(byte[]) PIECES_CHARS#0 ← { (byte/signed byte/word/signed word/dword/signed dword) $65, (byte/signed byte/word/signed word/dword/signed dword) $66, (byte/word/signed word/dword/signed dword) $a6, (byte/signed byte/word/signed word/dword/signed dword) $66, (byte/signed byte/word/signed word/dword/signed dword) $65, (byte/signed byte/word/signed word/dword/signed dword) $65, (byte/word/signed word/dword/signed dword) $a6 }
(byte[]) PIECES_NEXT_CHARS#0 ← { (byte/signed byte/word/signed word/dword/signed dword) $63, (byte/signed byte/word/signed word/dword/signed dword) $64, (byte/word/signed word/dword/signed dword) $a4, (byte/signed byte/word/signed word/dword/signed dword) $64, (byte/signed byte/word/signed word/dword/signed dword) $63, (byte/signed byte/word/signed word/dword/signed dword) $63, (byte/word/signed word/dword/signed dword) $a4 }
(byte[]) PIECES_START_X#0 ← { (byte/signed byte/word/signed word/dword/signed dword) 4, (byte/signed byte/word/signed word/dword/signed dword) 4, (byte/signed byte/word/signed word/dword/signed dword) 4, (byte/signed byte/word/signed word/dword/signed dword) 4, (byte/signed byte/word/signed word/dword/signed dword) 4, (byte/signed byte/word/signed word/dword/signed dword) 4, (byte/signed byte/word/signed word/dword/signed dword) 4 }
(byte[]) PIECES_START_Y#0 ← { (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1 }
(byte*[PLAYFIELD_LINES#0]) playfield_lines#0 ← { fill( PLAYFIELD_LINES#0, 0) }
(byte/signed word/word/dword/signed dword~) $29 ← (byte) PLAYFIELD_LINES#0 + (byte/signed byte/word/signed word/dword/signed dword) 1
(byte[$29]) playfield_lines_idx#0 ← { fill( $29, 0) }
(byte) next_piece_idx#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte*) current_piece#0 ← ((byte*)) (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) current_orientation#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte[]) MOVEDOWN_SLOW_SPEEDS#0 ← { (byte/signed byte/word/signed word/dword/signed dword) $30, (byte/signed byte/word/signed word/dword/signed dword) $2b, (byte/signed byte/word/signed word/dword/signed dword) $26, (byte/signed byte/word/signed word/dword/signed dword) $21, (byte/signed byte/word/signed word/dword/signed dword) $1c, (byte/signed byte/word/signed word/dword/signed dword) $17, (byte/signed byte/word/signed word/dword/signed dword) $12, (byte/signed byte/word/signed word/dword/signed dword) $d, (byte/signed byte/word/signed word/dword/signed dword) 8, (byte/signed byte/word/signed word/dword/signed dword) 6, (byte/signed byte/word/signed word/dword/signed dword) 5, (byte/signed byte/word/signed word/dword/signed dword) 5, (byte/signed byte/word/signed word/dword/signed dword) 5, (byte/signed byte/word/signed word/dword/signed dword) 4, (byte/signed byte/word/signed word/dword/signed dword) 4, (byte/signed byte/word/signed word/dword/signed dword) 4, (byte/signed byte/word/signed word/dword/signed dword) 3, (byte/signed byte/word/signed word/dword/signed dword) 3, (byte/signed byte/word/signed word/dword/signed dword) 3, (byte/signed byte/word/signed word/dword/signed dword) 2, (byte/signed byte/word/signed word/dword/signed dword) 2, (byte/signed byte/word/signed word/dword/signed dword) 2, (byte/signed byte/word/signed word/dword/signed dword) 2, (byte/signed byte/word/signed word/dword/signed dword) 2, (byte/signed byte/word/signed word/dword/signed dword) 2, (byte/signed byte/word/signed word/dword/signed dword) 2, (byte/signed byte/word/signed word/dword/signed dword) 2, (byte/signed byte/word/signed word/dword/signed dword) 2, (byte/signed byte/word/signed word/dword/signed dword) 2, (byte/signed byte/word/signed word/dword/signed dword) 1 }
(byte) current_movedown_slow#0 ← (byte/signed byte/word/signed word/dword/signed dword) $30
(byte) current_movedown_fast#0 ← (byte/signed byte/word/signed word/dword/signed dword) $a
(byte) current_movedown_counter#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(dword[]) SCORE_BASE_BCD#0 ← { (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) $40, (word/signed word/dword/signed dword) $100, (word/signed word/dword/signed dword) $300, (word/signed word/dword/signed dword) $1200 }
(dword[5]) score_add_bcd#0 ← { fill( 5, 0) }
to:@31
play_init: scope:[play_init] from main::@28
(byte) level#44 ← phi( main::@28/(byte) level#60 )
(byte) play_init::idx#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte*) play_init::pli#0 ← (byte[$3]) playfield#0
(byte/signed word/word/dword/signed dword~) play_init::$1 ← (byte) PLAYFIELD_LINES#0 - (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) play_init::j#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:play_init::@1
play_init::@1: scope:[play_init] from play_init play_init::@1
(byte) level#28 ← phi( play_init/(byte) level#44 play_init::@1/(byte) level#28 )
(byte) play_init::idx#2 ← phi( play_init/(byte) play_init::idx#0 play_init::@1/(byte) play_init::idx#1 )
(byte*) play_init::pli#2 ← phi( play_init/(byte*) play_init::pli#0 play_init::@1/(byte*) play_init::pli#1 )
(byte) play_init::j#2 ← phi( play_init/(byte) play_init::j#0 play_init::@1/(byte) play_init::j#1 )
(byte/signed word/word/dword/signed dword~) play_init::$2 ← (byte) play_init::j#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
*((byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte/signed word/word/dword/signed dword~) play_init::$2) ← (byte*) play_init::pli#2
*((byte[$29]) playfield_lines_idx#0 + (byte) play_init::j#2) ← (byte) play_init::idx#2
(byte*) play_init::pli#1 ← (byte*) play_init::pli#2 + (byte) PLAYFIELD_COLS#0
(byte) play_init::idx#1 ← (byte) play_init::idx#2 + (byte) PLAYFIELD_COLS#0
(byte) play_init::j#1 ← (byte) play_init::j#2 + rangenext(0,play_init::$1)
(bool~) play_init::$3 ← (byte) play_init::j#1 != rangelast(0,play_init::$1)
if((bool~) play_init::$3) goto play_init::@1
to:play_init::@2
play_init::@2: scope:[play_init] from play_init::@1
(byte) level#13 ← phi( play_init::@1/(byte) level#28 )
(byte~) play_init::$0 ← (byte) PLAYFIELD_COLS#0 * (byte) PLAYFIELD_LINES#0
*((byte[$29]) playfield_lines_idx#0 + (byte) PLAYFIELD_LINES#0) ← (byte~) play_init::$0
(byte) current_movedown_slow#1 ← *((byte[]) MOVEDOWN_SLOW_SPEEDS#0 + (byte) level#13)
(byte) play_init::b#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:play_init::@3
play_init::@3: scope:[play_init] from play_init::@2 play_init::@3
(byte) current_movedown_slow#29 ← phi( play_init::@2/(byte) current_movedown_slow#1 play_init::@3/(byte) current_movedown_slow#29 )
(byte) play_init::b#2 ← phi( play_init::@2/(byte) play_init::b#0 play_init::@3/(byte) play_init::b#1 )
(byte/signed word/word/dword/signed dword~) play_init::$4 ← (byte) play_init::b#2 * (byte/signed byte/word/signed word/dword/signed dword) 4
(byte) play_init::b4#0 ← (byte/signed word/word/dword/signed dword~) play_init::$4
*((dword[5]) score_add_bcd#0 + (byte) play_init::b4#0) ← *((dword[]) SCORE_BASE_BCD#0 + (byte) play_init::b4#0)
(byte) play_init::b#1 ← (byte) play_init::b#2 + rangenext(0,4)
(bool~) play_init::$5 ← (byte) play_init::b#1 != rangelast(0,4)
if((bool~) play_init::$5) goto play_init::@3
to:play_init::@return
play_init::@return: scope:[play_init] from play_init::@3
(byte) current_movedown_slow#16 ← phi( play_init::@3/(byte) current_movedown_slow#29 )
(byte) current_movedown_slow#2 ← (byte) current_movedown_slow#16
return
to:@return
play_movement: scope:[play_movement] from main::@11
(byte) next_piece_idx#26 ← phi( main::@11/(byte) next_piece_idx#33 )
(byte) game_over#23 ← phi( main::@11/(byte) game_over#32 )
(byte) current_xpos#37 ← phi( main::@11/(byte) current_xpos#56 )
(byte*) current_piece_gfx#31 ← phi( main::@11/(byte*) current_piece_gfx#43 )
(byte) current_orientation#32 ← phi( main::@11/(byte) current_orientation#47 )
(byte) current_piece_char#25 ← phi( main::@11/(byte) current_piece_char#34 )
(byte*) current_piece#24 ← phi( main::@11/(byte*) current_piece#37 )
(byte) level_bcd#27 ← phi( main::@11/(byte) level_bcd#39 )
(byte) current_movedown_slow#30 ← phi( main::@11/(byte) current_movedown_slow#44 )
(byte) level#29 ← phi( main::@11/(byte) level#39 )
(dword) score_bcd#22 ← phi( main::@11/(dword) score_bcd#32 )
(word) lines_bcd#22 ← phi( main::@11/(word) lines_bcd#32 )
(byte) current_ypos#32 ← phi( main::@11/(byte) current_ypos#47 )
(byte) current_movedown_counter#18 ← phi( main::@11/(byte) current_movedown_counter#25 )
(byte) play_movement::key_event#1 ← phi( main::@11/(byte) play_movement::key_event#0 )
(byte) play_movement::render#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) play_move_down::key_event#0 ← (byte) play_movement::key_event#1
call play_move_down
(byte) play_move_down::return#0 ← (byte) play_move_down::return#3
to:play_movement::@5
play_movement::@5: scope:[play_movement] from play_movement
(byte) play_movement::key_event#4 ← phi( play_movement/(byte) play_movement::key_event#1 )
(byte) play_movement::render#4 ← phi( play_movement/(byte) play_movement::render#0 )
(byte) next_piece_idx#13 ← phi( play_movement/(byte) next_piece_idx#4 )
(byte) game_over#12 ← phi( play_movement/(byte) game_over#4 )
(byte) current_xpos#17 ← phi( play_movement/(byte) current_xpos#5 )
(byte*) current_piece_gfx#16 ← phi( play_movement/(byte*) current_piece_gfx#5 )
(byte) current_orientation#15 ← phi( play_movement/(byte) current_orientation#5 )
(byte) current_piece_char#13 ← phi( play_movement/(byte) current_piece_char#4 )
(byte*) current_piece#12 ← phi( play_movement/(byte*) current_piece#4 )
(byte) level_bcd#14 ← phi( play_movement/(byte) level_bcd#4 )
(byte) current_movedown_slow#17 ← phi( play_movement/(byte) current_movedown_slow#6 )
(byte) level#14 ← phi( play_movement/(byte) level#4 )
(dword) score_bcd#11 ← phi( play_movement/(dword) score_bcd#4 )
(word) lines_bcd#12 ← phi( play_movement/(word) lines_bcd#4 )
(byte) current_ypos#14 ← phi( play_movement/(byte) current_ypos#5 )
(byte) current_movedown_counter#9 ← phi( play_movement/(byte) current_movedown_counter#5 )
(byte) play_move_down::return#4 ← phi( play_movement/(byte) play_move_down::return#0 )
(byte~) play_movement::$0 ← (byte) play_move_down::return#4
(byte) current_movedown_counter#1 ← (byte) current_movedown_counter#9
(byte) current_ypos#1 ← (byte) current_ypos#14
(word) lines_bcd#1 ← (word) lines_bcd#12
(dword) score_bcd#1 ← (dword) score_bcd#11
(byte) level#1 ← (byte) level#14
(byte) current_movedown_slow#3 ← (byte) current_movedown_slow#17
(byte) level_bcd#1 ← (byte) level_bcd#14
(byte*) current_piece#1 ← (byte*) current_piece#12
(byte) current_piece_char#1 ← (byte) current_piece_char#13
(byte) current_orientation#1 ← (byte) current_orientation#15
(byte*) current_piece_gfx#1 ← (byte*) current_piece_gfx#16
(byte) current_xpos#1 ← (byte) current_xpos#17
(byte) game_over#1 ← (byte) game_over#12
(byte) next_piece_idx#1 ← (byte) next_piece_idx#13
(byte) play_movement::render#1 ← (byte) play_movement::render#4 + (byte~) play_movement::$0
(bool~) play_movement::$1 ← (byte) game_over#1 != (byte/signed byte/word/signed word/dword/signed dword) 0
(bool~) play_movement::$2 ← ! (bool~) play_movement::$1
if((bool~) play_movement::$2) goto play_movement::@1
to:play_movement::@2
play_movement::@1: scope:[play_movement] from play_movement::@5
(byte) next_piece_idx#49 ← phi( play_movement::@5/(byte) next_piece_idx#1 )
(byte) game_over#46 ← phi( play_movement::@5/(byte) game_over#1 )
(byte) current_piece_char#53 ← phi( play_movement::@5/(byte) current_piece_char#1 )
(byte*) current_piece#55 ← phi( play_movement::@5/(byte*) current_piece#1 )
(byte) level_bcd#58 ← phi( play_movement::@5/(byte) level_bcd#1 )
(byte) current_movedown_slow#63 ← phi( play_movement::@5/(byte) current_movedown_slow#3 )
(byte) level#61 ← phi( play_movement::@5/(byte) level#1 )
(dword) score_bcd#48 ← phi( play_movement::@5/(dword) score_bcd#1 )
(word) lines_bcd#48 ← phi( play_movement::@5/(word) lines_bcd#1 )
(byte) current_movedown_counter#36 ← phi( play_movement::@5/(byte) current_movedown_counter#1 )
(byte) current_ypos#54 ← phi( play_movement::@5/(byte) current_ypos#1 )
(byte*) current_piece_gfx#48 ← phi( play_movement::@5/(byte*) current_piece_gfx#1 )
(byte) current_orientation#50 ← phi( play_movement::@5/(byte) current_orientation#1 )
(byte) play_movement::render#8 ← phi( play_movement::@5/(byte) play_movement::render#1 )
(byte) current_xpos#38 ← phi( play_movement::@5/(byte) current_xpos#1 )
(byte) play_movement::key_event#2 ← phi( play_movement::@5/(byte) play_movement::key_event#4 )
(byte) play_move_leftright::key_event#0 ← (byte) play_movement::key_event#2
call play_move_leftright
(byte) play_move_leftright::return#0 ← (byte) play_move_leftright::return#2
to:play_movement::@6
play_movement::@6: scope:[play_movement] from play_movement::@1
(byte) next_piece_idx#37 ← phi( play_movement::@1/(byte) next_piece_idx#49 )
(byte) game_over#35 ← phi( play_movement::@1/(byte) game_over#46 )
(byte) current_piece_char#39 ← phi( play_movement::@1/(byte) current_piece_char#53 )
(byte*) current_piece#40 ← phi( play_movement::@1/(byte*) current_piece#55 )
(byte) level_bcd#43 ← phi( play_movement::@1/(byte) level_bcd#58 )
(byte) current_movedown_slow#47 ← phi( play_movement::@1/(byte) current_movedown_slow#63 )
(byte) level#45 ← phi( play_movement::@1/(byte) level#61 )
(dword) score_bcd#36 ← phi( play_movement::@1/(dword) score_bcd#48 )
(word) lines_bcd#36 ← phi( play_movement::@1/(word) lines_bcd#48 )
(byte) current_ypos#50 ← phi( play_movement::@1/(byte) current_ypos#54 )
(byte) current_movedown_counter#28 ← phi( play_movement::@1/(byte) current_movedown_counter#36 )
(byte*) current_piece_gfx#32 ← phi( play_movement::@1/(byte*) current_piece_gfx#48 )
(byte) current_orientation#33 ← phi( play_movement::@1/(byte) current_orientation#50 )
(byte) play_movement::key_event#3 ← phi( play_movement::@1/(byte) play_movement::key_event#2 )
(byte) play_movement::render#5 ← phi( play_movement::@1/(byte) play_movement::render#8 )
(byte) current_xpos#18 ← phi( play_movement::@1/(byte) current_xpos#7 )
(byte) play_move_leftright::return#5 ← phi( play_movement::@1/(byte) play_move_leftright::return#0 )
(byte~) play_movement::$3 ← (byte) play_move_leftright::return#5
(byte) current_xpos#2 ← (byte) current_xpos#18
(byte) play_movement::render#2 ← (byte) play_movement::render#5 + (byte~) play_movement::$3
(byte) play_move_rotate::key_event#0 ← (byte) play_movement::key_event#3
call play_move_rotate
(byte) play_move_rotate::return#0 ← (byte) play_move_rotate::return#2
to:play_movement::@7
play_movement::@7: scope:[play_movement] from play_movement::@6
(byte) next_piece_idx#28 ← phi( play_movement::@6/(byte) next_piece_idx#37 )
(byte) game_over#25 ← phi( play_movement::@6/(byte) game_over#35 )
(byte) current_xpos#40 ← phi( play_movement::@6/(byte) current_xpos#2 )
(byte) current_piece_char#27 ← phi( play_movement::@6/(byte) current_piece_char#39 )
(byte*) current_piece#26 ← phi( play_movement::@6/(byte*) current_piece#40 )
(byte) level_bcd#29 ← phi( play_movement::@6/(byte) level_bcd#43 )
(byte) current_movedown_slow#32 ← phi( play_movement::@6/(byte) current_movedown_slow#47 )
(byte) level#31 ← phi( play_movement::@6/(byte) level#45 )
(dword) score_bcd#24 ← phi( play_movement::@6/(dword) score_bcd#36 )
(word) lines_bcd#24 ← phi( play_movement::@6/(word) lines_bcd#36 )
(byte) current_ypos#34 ← phi( play_movement::@6/(byte) current_ypos#50 )
(byte) current_movedown_counter#20 ← phi( play_movement::@6/(byte) current_movedown_counter#28 )
(byte) play_movement::render#6 ← phi( play_movement::@6/(byte) play_movement::render#2 )
(byte*) current_piece_gfx#17 ← phi( play_movement::@6/(byte*) current_piece_gfx#6 )
(byte) current_orientation#16 ← phi( play_movement::@6/(byte) current_orientation#6 )
(byte) play_move_rotate::return#5 ← phi( play_movement::@6/(byte) play_move_rotate::return#0 )
(byte~) play_movement::$4 ← (byte) play_move_rotate::return#5
(byte) current_orientation#2 ← (byte) current_orientation#16
(byte*) current_piece_gfx#2 ← (byte*) current_piece_gfx#17
(byte) play_movement::render#3 ← (byte) play_movement::render#6 + (byte~) play_movement::$4
(byte) play_movement::return#0 ← (byte) play_movement::render#3
to:play_movement::@return
play_movement::@2: scope:[play_movement] from play_movement::@5
(byte) next_piece_idx#27 ← phi( play_movement::@5/(byte) next_piece_idx#1 )
(byte) game_over#24 ← phi( play_movement::@5/(byte) game_over#1 )
(byte) current_xpos#39 ← phi( play_movement::@5/(byte) current_xpos#1 )
(byte*) current_piece_gfx#33 ← phi( play_movement::@5/(byte*) current_piece_gfx#1 )
(byte) current_orientation#34 ← phi( play_movement::@5/(byte) current_orientation#1 )
(byte) current_piece_char#26 ← phi( play_movement::@5/(byte) current_piece_char#1 )
(byte*) current_piece#25 ← phi( play_movement::@5/(byte*) current_piece#1 )
(byte) level_bcd#28 ← phi( play_movement::@5/(byte) level_bcd#1 )
(byte) current_movedown_slow#31 ← phi( play_movement::@5/(byte) current_movedown_slow#3 )
(byte) level#30 ← phi( play_movement::@5/(byte) level#1 )
(dword) score_bcd#23 ← phi( play_movement::@5/(dword) score_bcd#1 )
(word) lines_bcd#23 ← phi( play_movement::@5/(word) lines_bcd#1 )
(byte) current_ypos#33 ← phi( play_movement::@5/(byte) current_ypos#1 )
(byte) current_movedown_counter#19 ← phi( play_movement::@5/(byte) current_movedown_counter#1 )
(byte) play_movement::render#7 ← phi( play_movement::@5/(byte) play_movement::render#1 )
(byte) play_movement::return#1 ← (byte) play_movement::render#7
to:play_movement::@return
play_movement::@return: scope:[play_movement] from play_movement::@2 play_movement::@7
(byte) next_piece_idx#14 ← phi( play_movement::@2/(byte) next_piece_idx#27 play_movement::@7/(byte) next_piece_idx#28 )
(byte) game_over#13 ← phi( play_movement::@2/(byte) game_over#24 play_movement::@7/(byte) game_over#25 )
(byte) current_xpos#19 ← phi( play_movement::@2/(byte) current_xpos#39 play_movement::@7/(byte) current_xpos#40 )
(byte*) current_piece_gfx#18 ← phi( play_movement::@2/(byte*) current_piece_gfx#33 play_movement::@7/(byte*) current_piece_gfx#2 )
(byte) current_orientation#17 ← phi( play_movement::@2/(byte) current_orientation#34 play_movement::@7/(byte) current_orientation#2 )
(byte) current_piece_char#14 ← phi( play_movement::@2/(byte) current_piece_char#26 play_movement::@7/(byte) current_piece_char#27 )
(byte*) current_piece#13 ← phi( play_movement::@2/(byte*) current_piece#25 play_movement::@7/(byte*) current_piece#26 )
(byte) level_bcd#15 ← phi( play_movement::@2/(byte) level_bcd#28 play_movement::@7/(byte) level_bcd#29 )
(byte) current_movedown_slow#18 ← phi( play_movement::@2/(byte) current_movedown_slow#31 play_movement::@7/(byte) current_movedown_slow#32 )
(byte) level#15 ← phi( play_movement::@2/(byte) level#30 play_movement::@7/(byte) level#31 )
(dword) score_bcd#12 ← phi( play_movement::@2/(dword) score_bcd#23 play_movement::@7/(dword) score_bcd#24 )
(word) lines_bcd#13 ← phi( play_movement::@2/(word) lines_bcd#23 play_movement::@7/(word) lines_bcd#24 )
(byte) current_ypos#15 ← phi( play_movement::@2/(byte) current_ypos#33 play_movement::@7/(byte) current_ypos#34 )
(byte) current_movedown_counter#10 ← phi( play_movement::@2/(byte) current_movedown_counter#19 play_movement::@7/(byte) current_movedown_counter#20 )
(byte) play_movement::return#4 ← phi( play_movement::@2/(byte) play_movement::return#1 play_movement::@7/(byte) play_movement::return#0 )
(byte) play_movement::return#2 ← (byte) play_movement::return#4
(byte) current_movedown_counter#2 ← (byte) current_movedown_counter#10
(byte) current_ypos#2 ← (byte) current_ypos#15
(word) lines_bcd#2 ← (word) lines_bcd#13
(dword) score_bcd#2 ← (dword) score_bcd#12
(byte) level#2 ← (byte) level#15
(byte) current_movedown_slow#4 ← (byte) current_movedown_slow#18
(byte) level_bcd#2 ← (byte) level_bcd#15
(byte*) current_piece#2 ← (byte*) current_piece#13
(byte) current_piece_char#2 ← (byte) current_piece_char#14
(byte) current_orientation#3 ← (byte) current_orientation#17
(byte*) current_piece_gfx#3 ← (byte*) current_piece_gfx#18
(byte) current_xpos#3 ← (byte) current_xpos#19
(byte) game_over#2 ← (byte) game_over#13
(byte) next_piece_idx#2 ← (byte) next_piece_idx#14
return
to:@return
play_move_down: scope:[play_move_down] from play_movement
(byte) next_piece_idx#75 ← phi( play_movement/(byte) next_piece_idx#26 )
(byte) game_over#83 ← phi( play_movement/(byte) game_over#23 )
(byte*) current_piece_gfx#108 ← phi( play_movement/(byte*) current_piece_gfx#31 )
(byte) current_piece_char#95 ← phi( play_movement/(byte) current_piece_char#25 )
(byte*) current_piece#88 ← phi( play_movement/(byte*) current_piece#24 )
(byte) level_bcd#90 ← phi( play_movement/(byte) level_bcd#27 )
(byte) level#97 ← phi( play_movement/(byte) level#29 )
(dword) score_bcd#75 ← phi( play_movement/(dword) score_bcd#22 )
(word) lines_bcd#78 ← phi( play_movement/(word) lines_bcd#22 )
(byte) current_orientation#87 ← phi( play_movement/(byte) current_orientation#32 )
(byte) current_xpos#112 ← phi( play_movement/(byte) current_xpos#37 )
(byte) current_ypos#88 ← phi( play_movement/(byte) current_ypos#32 )
(byte) current_movedown_slow#64 ← phi( play_movement/(byte) current_movedown_slow#30 )
(byte) play_move_down::key_event#1 ← phi( play_movement/(byte) play_move_down::key_event#0 )
(byte) current_movedown_counter#11 ← phi( play_movement/(byte) current_movedown_counter#18 )
(byte) current_movedown_counter#3 ← ++ (byte) current_movedown_counter#11
(byte) play_move_down::movedown#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(bool~) play_move_down::$0 ← (byte) play_move_down::key_event#1 == (byte) KEY_SPACE#0
(bool~) play_move_down::$1 ← ! (bool~) play_move_down::$0
if((bool~) play_move_down::$1) goto play_move_down::@1
to:play_move_down::@5
play_move_down::@1: scope:[play_move_down] from play_move_down play_move_down::@5
(byte) next_piece_idx#69 ← phi( play_move_down/(byte) next_piece_idx#75 play_move_down::@5/(byte) next_piece_idx#76 )
(byte) game_over#73 ← phi( play_move_down/(byte) game_over#83 play_move_down::@5/(byte) game_over#84 )
(byte*) current_piece_gfx#99 ← phi( play_move_down/(byte*) current_piece_gfx#108 play_move_down::@5/(byte*) current_piece_gfx#109 )
(byte) current_piece_char#87 ← phi( play_move_down/(byte) current_piece_char#95 play_move_down::@5/(byte) current_piece_char#96 )
(byte*) current_piece#81 ← phi( play_move_down/(byte*) current_piece#88 play_move_down::@5/(byte*) current_piece#89 )
(byte) level_bcd#81 ← phi( play_move_down/(byte) level_bcd#90 play_move_down::@5/(byte) level_bcd#91 )
(byte) level#88 ← phi( play_move_down/(byte) level#97 play_move_down::@5/(byte) level#98 )
(dword) score_bcd#68 ← phi( play_move_down/(dword) score_bcd#75 play_move_down::@5/(dword) score_bcd#76 )
(word) lines_bcd#71 ← phi( play_move_down/(word) lines_bcd#78 play_move_down::@5/(word) lines_bcd#79 )
(byte) current_orientation#76 ← phi( play_move_down/(byte) current_orientation#87 play_move_down::@5/(byte) current_orientation#88 )
(byte) current_xpos#101 ← phi( play_move_down/(byte) current_xpos#112 play_move_down::@5/(byte) current_xpos#113 )
(byte) current_ypos#78 ← phi( play_move_down/(byte) current_ypos#88 play_move_down::@5/(byte) current_ypos#89 )
(byte) play_move_down::movedown#12 ← phi( play_move_down/(byte) play_move_down::movedown#0 play_move_down::@5/(byte) play_move_down::movedown#1 )
(byte) current_movedown_slow#48 ← phi( play_move_down/(byte) current_movedown_slow#64 play_move_down::@5/(byte) current_movedown_slow#65 )
(byte) current_movedown_counter#29 ← phi( play_move_down/(byte) current_movedown_counter#3 play_move_down::@5/(byte) current_movedown_counter#37 )
(byte) keyboard_event_pressed::keycode#4 ← (byte) KEY_SPACE#0
call keyboard_event_pressed
(byte) keyboard_event_pressed::return#6 ← (byte) keyboard_event_pressed::return#5
to:play_move_down::@17
play_move_down::@17: scope:[play_move_down] from play_move_down::@1
(byte) next_piece_idx#59 ← phi( play_move_down::@1/(byte) next_piece_idx#69 )
(byte) game_over#61 ← phi( play_move_down::@1/(byte) game_over#73 )
(byte*) current_piece_gfx#86 ← phi( play_move_down::@1/(byte*) current_piece_gfx#99 )
(byte) current_piece_char#72 ← phi( play_move_down::@1/(byte) current_piece_char#87 )
(byte*) current_piece#70 ← phi( play_move_down::@1/(byte*) current_piece#81 )
(byte) level_bcd#72 ← phi( play_move_down::@1/(byte) level_bcd#81 )
(byte) level#76 ← phi( play_move_down::@1/(byte) level#88 )
(dword) score_bcd#60 ← phi( play_move_down::@1/(dword) score_bcd#68 )
(word) lines_bcd#62 ← phi( play_move_down::@1/(word) lines_bcd#71 )
(byte) current_orientation#64 ← phi( play_move_down::@1/(byte) current_orientation#76 )
(byte) current_xpos#84 ← phi( play_move_down::@1/(byte) current_xpos#101 )
(byte) current_ypos#66 ← phi( play_move_down::@1/(byte) current_ypos#78 )
(byte) play_move_down::movedown#11 ← phi( play_move_down::@1/(byte) play_move_down::movedown#12 )
(byte) current_movedown_slow#34 ← phi( play_move_down::@1/(byte) current_movedown_slow#48 )
(byte) current_movedown_counter#22 ← phi( play_move_down::@1/(byte) current_movedown_counter#29 )
(byte) keyboard_event_pressed::return#12 ← phi( play_move_down::@1/(byte) keyboard_event_pressed::return#6 )
(byte~) play_move_down::$2 ← (byte) keyboard_event_pressed::return#12
(bool~) play_move_down::$3 ← (byte~) play_move_down::$2 != (byte/signed byte/word/signed word/dword/signed dword) 0
(bool~) play_move_down::$4 ← ! (bool~) play_move_down::$3
if((bool~) play_move_down::$4) goto play_move_down::@2
to:play_move_down::@6
play_move_down::@5: scope:[play_move_down] from play_move_down
(byte) next_piece_idx#76 ← phi( play_move_down/(byte) next_piece_idx#75 )
(byte) game_over#84 ← phi( play_move_down/(byte) game_over#83 )
(byte*) current_piece_gfx#109 ← phi( play_move_down/(byte*) current_piece_gfx#108 )
(byte) current_piece_char#96 ← phi( play_move_down/(byte) current_piece_char#95 )
(byte*) current_piece#89 ← phi( play_move_down/(byte*) current_piece#88 )
(byte) level_bcd#91 ← phi( play_move_down/(byte) level_bcd#90 )
(byte) level#98 ← phi( play_move_down/(byte) level#97 )
(dword) score_bcd#76 ← phi( play_move_down/(dword) score_bcd#75 )
(word) lines_bcd#79 ← phi( play_move_down/(word) lines_bcd#78 )
(byte) current_orientation#88 ← phi( play_move_down/(byte) current_orientation#87 )
(byte) current_xpos#113 ← phi( play_move_down/(byte) current_xpos#112 )
(byte) current_ypos#89 ← phi( play_move_down/(byte) current_ypos#88 )
(byte) current_movedown_slow#65 ← phi( play_move_down/(byte) current_movedown_slow#64 )
(byte) current_movedown_counter#37 ← phi( play_move_down/(byte) current_movedown_counter#3 )
(byte) play_move_down::movedown#4 ← phi( play_move_down/(byte) play_move_down::movedown#0 )
(byte) play_move_down::movedown#1 ← ++ (byte) play_move_down::movedown#4
to:play_move_down::@1
play_move_down::@2: scope:[play_move_down] from play_move_down::@13 play_move_down::@17 play_move_down::@7
(byte) next_piece_idx#50 ← phi( play_move_down::@13/(byte) next_piece_idx#58 play_move_down::@17/(byte) next_piece_idx#59 play_move_down::@7/(byte) next_piece_idx#60 )
(byte) game_over#47 ← phi( play_move_down::@13/(byte) game_over#60 play_move_down::@17/(byte) game_over#61 play_move_down::@7/(byte) game_over#62 )
(byte*) current_piece_gfx#66 ← phi( play_move_down::@13/(byte*) current_piece_gfx#85 play_move_down::@17/(byte*) current_piece_gfx#86 play_move_down::@7/(byte*) current_piece_gfx#87 )
(byte) current_piece_char#54 ← phi( play_move_down::@13/(byte) current_piece_char#71 play_move_down::@17/(byte) current_piece_char#72 play_move_down::@7/(byte) current_piece_char#73 )
(byte*) current_piece#56 ← phi( play_move_down::@13/(byte*) current_piece#69 play_move_down::@17/(byte*) current_piece#70 play_move_down::@7/(byte*) current_piece#71 )
(byte) level_bcd#59 ← phi( play_move_down::@13/(byte) level_bcd#71 play_move_down::@17/(byte) level_bcd#72 play_move_down::@7/(byte) level_bcd#73 )
(byte) level#62 ← phi( play_move_down::@13/(byte) level#75 play_move_down::@17/(byte) level#76 play_move_down::@7/(byte) level#77 )
(dword) score_bcd#49 ← phi( play_move_down::@13/(dword) score_bcd#59 play_move_down::@17/(dword) score_bcd#60 play_move_down::@7/(dword) score_bcd#61 )
(word) lines_bcd#49 ← phi( play_move_down::@13/(word) lines_bcd#61 play_move_down::@17/(word) lines_bcd#62 play_move_down::@7/(word) lines_bcd#63 )
(byte) current_orientation#51 ← phi( play_move_down::@13/(byte) current_orientation#63 play_move_down::@17/(byte) current_orientation#64 play_move_down::@7/(byte) current_orientation#65 )
(byte) current_xpos#61 ← phi( play_move_down::@13/(byte) current_xpos#83 play_move_down::@17/(byte) current_xpos#84 play_move_down::@7/(byte) current_xpos#85 )
(byte) current_ypos#51 ← phi( play_move_down::@13/(byte) current_ypos#65 play_move_down::@17/(byte) current_ypos#66 play_move_down::@7/(byte) current_ypos#67 )
(byte) play_move_down::movedown#9 ← phi( play_move_down::@13/(byte) play_move_down::movedown#10 play_move_down::@17/(byte) play_move_down::movedown#11 play_move_down::@7/(byte) play_move_down::movedown#2 )
(byte) current_movedown_slow#19 ← phi( play_move_down::@13/(byte) current_movedown_slow#33 play_move_down::@17/(byte) current_movedown_slow#34 play_move_down::@7/(byte) current_movedown_slow#35 )
(byte) current_movedown_counter#12 ← phi( play_move_down::@13/(byte) current_movedown_counter#21 play_move_down::@17/(byte) current_movedown_counter#22 play_move_down::@7/(byte) current_movedown_counter#23 )
(bool~) play_move_down::$5 ← (byte) current_movedown_counter#12 >= (byte) current_movedown_slow#19
(bool~) play_move_down::$6 ← ! (bool~) play_move_down::$5
if((bool~) play_move_down::$6) goto play_move_down::@3
to:play_move_down::@8
play_move_down::@6: scope:[play_move_down] from play_move_down::@17
(byte) next_piece_idx#70 ← phi( play_move_down::@17/(byte) next_piece_idx#59 )
(byte) game_over#74 ← phi( play_move_down::@17/(byte) game_over#61 )
(byte*) current_piece_gfx#100 ← phi( play_move_down::@17/(byte*) current_piece_gfx#86 )
(byte) current_piece_char#88 ← phi( play_move_down::@17/(byte) current_piece_char#72 )
(byte*) current_piece#82 ← phi( play_move_down::@17/(byte*) current_piece#70 )
(byte) level_bcd#82 ← phi( play_move_down::@17/(byte) level_bcd#72 )
(byte) level#89 ← phi( play_move_down::@17/(byte) level#76 )
(dword) score_bcd#69 ← phi( play_move_down::@17/(dword) score_bcd#60 )
(word) lines_bcd#72 ← phi( play_move_down::@17/(word) lines_bcd#62 )
(byte) current_orientation#77 ← phi( play_move_down::@17/(byte) current_orientation#64 )
(byte) current_xpos#102 ← phi( play_move_down::@17/(byte) current_xpos#84 )
(byte) current_ypos#79 ← phi( play_move_down::@17/(byte) current_ypos#66 )
(byte) current_movedown_slow#49 ← phi( play_move_down::@17/(byte) current_movedown_slow#34 )
(byte) play_move_down::movedown#8 ← phi( play_move_down::@17/(byte) play_move_down::movedown#11 )
(byte) current_movedown_counter#13 ← phi( play_move_down::@17/(byte) current_movedown_counter#22 )
(bool~) play_move_down::$9 ← (byte) current_movedown_counter#13 >= (byte) current_movedown_fast#0
(bool~) play_move_down::$10 ← ! (bool~) play_move_down::$9
if((bool~) play_move_down::$10) goto play_move_down::@13
to:play_move_down::@7
play_move_down::@13: scope:[play_move_down] from play_move_down::@6
(byte) next_piece_idx#58 ← phi( play_move_down::@6/(byte) next_piece_idx#70 )
(byte) game_over#60 ← phi( play_move_down::@6/(byte) game_over#74 )
(byte*) current_piece_gfx#85 ← phi( play_move_down::@6/(byte*) current_piece_gfx#100 )
(byte) current_piece_char#71 ← phi( play_move_down::@6/(byte) current_piece_char#88 )
(byte*) current_piece#69 ← phi( play_move_down::@6/(byte*) current_piece#82 )
(byte) level_bcd#71 ← phi( play_move_down::@6/(byte) level_bcd#82 )
(byte) level#75 ← phi( play_move_down::@6/(byte) level#89 )
(dword) score_bcd#59 ← phi( play_move_down::@6/(dword) score_bcd#69 )
(word) lines_bcd#61 ← phi( play_move_down::@6/(word) lines_bcd#72 )
(byte) current_orientation#63 ← phi( play_move_down::@6/(byte) current_orientation#77 )
(byte) current_xpos#83 ← phi( play_move_down::@6/(byte) current_xpos#102 )
(byte) current_ypos#65 ← phi( play_move_down::@6/(byte) current_ypos#79 )
(byte) play_move_down::movedown#10 ← phi( play_move_down::@6/(byte) play_move_down::movedown#8 )
(byte) current_movedown_slow#33 ← phi( play_move_down::@6/(byte) current_movedown_slow#49 )
(byte) current_movedown_counter#21 ← phi( play_move_down::@6/(byte) current_movedown_counter#13 )
to:play_move_down::@2
play_move_down::@7: scope:[play_move_down] from play_move_down::@6
(byte) next_piece_idx#60 ← phi( play_move_down::@6/(byte) next_piece_idx#70 )
(byte) game_over#62 ← phi( play_move_down::@6/(byte) game_over#74 )
(byte*) current_piece_gfx#87 ← phi( play_move_down::@6/(byte*) current_piece_gfx#100 )
(byte) current_piece_char#73 ← phi( play_move_down::@6/(byte) current_piece_char#88 )
(byte*) current_piece#71 ← phi( play_move_down::@6/(byte*) current_piece#82 )
(byte) level_bcd#73 ← phi( play_move_down::@6/(byte) level_bcd#82 )
(byte) level#77 ← phi( play_move_down::@6/(byte) level#89 )
(dword) score_bcd#61 ← phi( play_move_down::@6/(dword) score_bcd#69 )
(word) lines_bcd#63 ← phi( play_move_down::@6/(word) lines_bcd#72 )
(byte) current_orientation#65 ← phi( play_move_down::@6/(byte) current_orientation#77 )
(byte) current_xpos#85 ← phi( play_move_down::@6/(byte) current_xpos#102 )
(byte) current_ypos#67 ← phi( play_move_down::@6/(byte) current_ypos#79 )
(byte) current_movedown_slow#35 ← phi( play_move_down::@6/(byte) current_movedown_slow#49 )
(byte) current_movedown_counter#23 ← phi( play_move_down::@6/(byte) current_movedown_counter#13 )
(byte) play_move_down::movedown#5 ← phi( play_move_down::@6/(byte) play_move_down::movedown#8 )
(byte) play_move_down::movedown#2 ← ++ (byte) play_move_down::movedown#5
to:play_move_down::@2
play_move_down::@3: scope:[play_move_down] from play_move_down::@2 play_move_down::@8
(byte) next_piece_idx#38 ← phi( play_move_down::@2/(byte) next_piece_idx#50 play_move_down::@8/(byte) next_piece_idx#51 )
(byte) game_over#36 ← phi( play_move_down::@2/(byte) game_over#47 play_move_down::@8/(byte) game_over#48 )
(byte*) current_piece_gfx#49 ← phi( play_move_down::@2/(byte*) current_piece_gfx#66 play_move_down::@8/(byte*) current_piece_gfx#67 )
(byte) current_piece_char#40 ← phi( play_move_down::@2/(byte) current_piece_char#54 play_move_down::@8/(byte) current_piece_char#55 )
(byte*) current_piece#41 ← phi( play_move_down::@2/(byte*) current_piece#56 play_move_down::@8/(byte*) current_piece#57 )
(byte) level_bcd#44 ← phi( play_move_down::@2/(byte) level_bcd#59 play_move_down::@8/(byte) level_bcd#60 )
(byte) current_movedown_slow#50 ← phi( play_move_down::@2/(byte) current_movedown_slow#19 play_move_down::@8/(byte) current_movedown_slow#66 )
(byte) level#46 ← phi( play_move_down::@2/(byte) level#62 play_move_down::@8/(byte) level#63 )
(dword) score_bcd#37 ← phi( play_move_down::@2/(dword) score_bcd#49 play_move_down::@8/(dword) score_bcd#50 )
(word) lines_bcd#37 ← phi( play_move_down::@2/(word) lines_bcd#49 play_move_down::@8/(word) lines_bcd#50 )
(byte) current_movedown_counter#30 ← phi( play_move_down::@2/(byte) current_movedown_counter#12 play_move_down::@8/(byte) current_movedown_counter#38 )
(byte) current_orientation#35 ← phi( play_move_down::@2/(byte) current_orientation#51 play_move_down::@8/(byte) current_orientation#52 )
(byte) current_xpos#41 ← phi( play_move_down::@2/(byte) current_xpos#61 play_move_down::@8/(byte) current_xpos#62 )
(byte) current_ypos#35 ← phi( play_move_down::@2/(byte) current_ypos#51 play_move_down::@8/(byte) current_ypos#52 )
(byte) play_move_down::movedown#6 ← phi( play_move_down::@2/(byte) play_move_down::movedown#9 play_move_down::@8/(byte) play_move_down::movedown#3 )
(bool~) play_move_down::$7 ← (byte) play_move_down::movedown#6 != (byte/signed byte/word/signed word/dword/signed dword) 0
(bool~) play_move_down::$8 ← ! (bool~) play_move_down::$7
if((bool~) play_move_down::$8) goto play_move_down::@4
to:play_move_down::@9
play_move_down::@8: scope:[play_move_down] from play_move_down::@2
(byte) next_piece_idx#51 ← phi( play_move_down::@2/(byte) next_piece_idx#50 )
(byte) game_over#48 ← phi( play_move_down::@2/(byte) game_over#47 )
(byte*) current_piece_gfx#67 ← phi( play_move_down::@2/(byte*) current_piece_gfx#66 )
(byte) current_piece_char#55 ← phi( play_move_down::@2/(byte) current_piece_char#54 )
(byte*) current_piece#57 ← phi( play_move_down::@2/(byte*) current_piece#56 )
(byte) level_bcd#60 ← phi( play_move_down::@2/(byte) level_bcd#59 )
(byte) current_movedown_slow#66 ← phi( play_move_down::@2/(byte) current_movedown_slow#19 )
(byte) level#63 ← phi( play_move_down::@2/(byte) level#62 )
(dword) score_bcd#50 ← phi( play_move_down::@2/(dword) score_bcd#49 )
(word) lines_bcd#50 ← phi( play_move_down::@2/(word) lines_bcd#49 )
(byte) current_movedown_counter#38 ← phi( play_move_down::@2/(byte) current_movedown_counter#12 )
(byte) current_orientation#52 ← phi( play_move_down::@2/(byte) current_orientation#51 )
(byte) current_xpos#62 ← phi( play_move_down::@2/(byte) current_xpos#61 )
(byte) current_ypos#52 ← phi( play_move_down::@2/(byte) current_ypos#51 )
(byte) play_move_down::movedown#7 ← phi( play_move_down::@2/(byte) play_move_down::movedown#9 )
(byte) play_move_down::movedown#3 ← ++ (byte) play_move_down::movedown#7
to:play_move_down::@3
play_move_down::@4: scope:[play_move_down] from play_move_down::@3
(byte) next_piece_idx#31 ← phi( play_move_down::@3/(byte) next_piece_idx#38 )
(byte) game_over#28 ← phi( play_move_down::@3/(byte) game_over#36 )
(byte) current_xpos#44 ← phi( play_move_down::@3/(byte) current_xpos#41 )
(byte*) current_piece_gfx#36 ← phi( play_move_down::@3/(byte*) current_piece_gfx#49 )
(byte) current_orientation#38 ← phi( play_move_down::@3/(byte) current_orientation#35 )
(byte) current_piece_char#30 ← phi( play_move_down::@3/(byte) current_piece_char#40 )
(byte*) current_piece#29 ← phi( play_move_down::@3/(byte*) current_piece#41 )
(byte) level_bcd#32 ← phi( play_move_down::@3/(byte) level_bcd#44 )
(byte) current_movedown_slow#38 ← phi( play_move_down::@3/(byte) current_movedown_slow#50 )
(byte) level#34 ← phi( play_move_down::@3/(byte) level#46 )
(dword) score_bcd#27 ← phi( play_move_down::@3/(dword) score_bcd#37 )
(word) lines_bcd#27 ← phi( play_move_down::@3/(word) lines_bcd#37 )
(byte) current_ypos#39 ← phi( play_move_down::@3/(byte) current_ypos#35 )
(byte) current_movedown_counter#24 ← phi( play_move_down::@3/(byte) current_movedown_counter#30 )
(byte) play_move_down::return#1 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:play_move_down::@return
play_move_down::@9: scope:[play_move_down] from play_move_down::@3
(byte) next_piece_idx#61 ← phi( play_move_down::@3/(byte) next_piece_idx#38 )
(byte) game_over#63 ← phi( play_move_down::@3/(byte) game_over#36 )
(byte*) current_piece_gfx#88 ← phi( play_move_down::@3/(byte*) current_piece_gfx#49 )
(byte) current_piece_char#74 ← phi( play_move_down::@3/(byte) current_piece_char#40 )
(byte) level_bcd#74 ← phi( play_move_down::@3/(byte) level_bcd#44 )
(byte) current_movedown_slow#75 ← phi( play_move_down::@3/(byte) current_movedown_slow#50 )
(byte) level#78 ← phi( play_move_down::@3/(byte) level#46 )
(dword) score_bcd#62 ← phi( play_move_down::@3/(dword) score_bcd#37 )
(word) lines_bcd#64 ← phi( play_move_down::@3/(word) lines_bcd#37 )
(byte*) current_piece#31 ← phi( play_move_down::@3/(byte*) current_piece#41 )
(byte) current_orientation#18 ← phi( play_move_down::@3/(byte) current_orientation#35 )
(byte) current_xpos#20 ← phi( play_move_down::@3/(byte) current_xpos#41 )
(byte) current_ypos#16 ← phi( play_move_down::@3/(byte) current_ypos#35 )
(byte/signed word/word/dword/signed dword~) play_move_down::$11 ← (byte) current_ypos#16 + (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) play_collision::xpos#0 ← (byte) current_xpos#20
(byte) play_collision::ypos#0 ← (byte/signed word/word/dword/signed dword~) play_move_down::$11
(byte) play_collision::orientation#0 ← (byte) current_orientation#18
call play_collision
(byte) play_collision::return#0 ← (byte) play_collision::return#5
to:play_move_down::@18
play_move_down::@18: scope:[play_move_down] from play_move_down::@9
(byte) next_piece_idx#52 ← phi( play_move_down::@9/(byte) next_piece_idx#61 )
(byte) game_over#49 ← phi( play_move_down::@9/(byte) game_over#63 )
(byte) current_xpos#86 ← phi( play_move_down::@9/(byte) current_xpos#20 )
(byte*) current_piece_gfx#68 ← phi( play_move_down::@9/(byte*) current_piece_gfx#88 )
(byte) current_orientation#66 ← phi( play_move_down::@9/(byte) current_orientation#18 )
(byte) current_piece_char#56 ← phi( play_move_down::@9/(byte) current_piece_char#74 )
(byte*) current_piece#58 ← phi( play_move_down::@9/(byte*) current_piece#31 )
(byte) level_bcd#61 ← phi( play_move_down::@9/(byte) level_bcd#74 )
(byte) current_movedown_slow#67 ← phi( play_move_down::@9/(byte) current_movedown_slow#75 )
(byte) level#64 ← phi( play_move_down::@9/(byte) level#78 )
(dword) score_bcd#51 ← phi( play_move_down::@9/(dword) score_bcd#62 )
(word) lines_bcd#51 ← phi( play_move_down::@9/(word) lines_bcd#64 )
(byte) current_ypos#36 ← phi( play_move_down::@9/(byte) current_ypos#16 )
(byte) play_collision::return#11 ← phi( play_move_down::@9/(byte) play_collision::return#0 )
(byte~) play_move_down::$12 ← (byte) play_collision::return#11
(bool~) play_move_down::$13 ← (byte~) play_move_down::$12 == (byte) COLLISION_NONE#0
if((bool~) play_move_down::$13) goto play_move_down::@14
to:play_move_down::@10
play_move_down::@14: scope:[play_move_down] from play_move_down::@18
(byte) next_piece_idx#40 ← phi( play_move_down::@18/(byte) next_piece_idx#52 )
(byte) game_over#38 ← phi( play_move_down::@18/(byte) game_over#49 )
(byte) current_xpos#64 ← phi( play_move_down::@18/(byte) current_xpos#86 )
(byte*) current_piece_gfx#51 ← phi( play_move_down::@18/(byte*) current_piece_gfx#68 )
(byte) current_orientation#54 ← phi( play_move_down::@18/(byte) current_orientation#66 )
(byte) current_piece_char#42 ← phi( play_move_down::@18/(byte) current_piece_char#56 )
(byte*) current_piece#43 ← phi( play_move_down::@18/(byte*) current_piece#58 )
(byte) level_bcd#46 ← phi( play_move_down::@18/(byte) level_bcd#61 )
(byte) current_movedown_slow#52 ← phi( play_move_down::@18/(byte) current_movedown_slow#67 )
(byte) level#48 ← phi( play_move_down::@18/(byte) level#64 )
(dword) score_bcd#39 ← phi( play_move_down::@18/(dword) score_bcd#51 )
(word) lines_bcd#39 ← phi( play_move_down::@18/(word) lines_bcd#51 )
(byte) current_ypos#17 ← phi( play_move_down::@18/(byte) current_ypos#36 )
(byte) current_ypos#3 ← ++ (byte) current_ypos#17
to:play_move_down::@15
play_move_down::@10: scope:[play_move_down] from play_move_down::@18
(byte) next_piece_idx#62 ← phi( play_move_down::@18/(byte) next_piece_idx#52 )
(byte) game_over#64 ← phi( play_move_down::@18/(byte) game_over#49 )
(byte) current_orientation#78 ← phi( play_move_down::@18/(byte) current_orientation#66 )
(byte) current_piece_char#75 ← phi( play_move_down::@18/(byte) current_piece_char#56 )
(byte*) current_piece#72 ← phi( play_move_down::@18/(byte*) current_piece#58 )
(byte*) current_piece_gfx#73 ← phi( play_move_down::@18/(byte*) current_piece_gfx#68 )
(byte) level_bcd#62 ← phi( play_move_down::@18/(byte) level_bcd#61 )
(byte) current_movedown_slow#68 ← phi( play_move_down::@18/(byte) current_movedown_slow#67 )
(byte) level#65 ← phi( play_move_down::@18/(byte) level#64 )
(dword) score_bcd#52 ← phi( play_move_down::@18/(dword) score_bcd#51 )
(word) lines_bcd#52 ← phi( play_move_down::@18/(word) lines_bcd#51 )
(byte) current_xpos#70 ← phi( play_move_down::@18/(byte) current_xpos#86 )
(byte) current_ypos#44 ← phi( play_move_down::@18/(byte) current_ypos#36 )
call play_lock_current
to:play_move_down::@19
play_move_down::@19: scope:[play_move_down] from play_move_down::@10
(byte) next_piece_idx#53 ← phi( play_move_down::@10/(byte) next_piece_idx#62 )
(byte) game_over#50 ← phi( play_move_down::@10/(byte) game_over#64 )
(byte) current_ypos#68 ← phi( play_move_down::@10/(byte) current_ypos#44 )
(byte) current_xpos#87 ← phi( play_move_down::@10/(byte) current_xpos#70 )
(byte*) current_piece_gfx#69 ← phi( play_move_down::@10/(byte*) current_piece_gfx#73 )
(byte) current_orientation#67 ← phi( play_move_down::@10/(byte) current_orientation#78 )
(byte) current_piece_char#57 ← phi( play_move_down::@10/(byte) current_piece_char#75 )
(byte*) current_piece#59 ← phi( play_move_down::@10/(byte*) current_piece#72 )
(byte) level_bcd#45 ← phi( play_move_down::@10/(byte) level_bcd#62 )
(byte) current_movedown_slow#51 ← phi( play_move_down::@10/(byte) current_movedown_slow#68 )
(byte) level#47 ← phi( play_move_down::@10/(byte) level#65 )
(dword) score_bcd#38 ← phi( play_move_down::@10/(dword) score_bcd#52 )
(word) lines_bcd#38 ← phi( play_move_down::@10/(word) lines_bcd#52 )
call play_remove_lines
(byte) play_remove_lines::return#0 ← (byte) play_remove_lines::return#2
to:play_move_down::@20
play_move_down::@20: scope:[play_move_down] from play_move_down::@19
(byte) next_piece_idx#39 ← phi( play_move_down::@19/(byte) next_piece_idx#53 )
(byte) game_over#37 ← phi( play_move_down::@19/(byte) game_over#50 )
(byte) current_ypos#53 ← phi( play_move_down::@19/(byte) current_ypos#68 )
(byte) current_xpos#63 ← phi( play_move_down::@19/(byte) current_xpos#87 )
(byte*) current_piece_gfx#50 ← phi( play_move_down::@19/(byte*) current_piece_gfx#69 )
(byte) current_orientation#53 ← phi( play_move_down::@19/(byte) current_orientation#67 )
(byte) current_piece_char#41 ← phi( play_move_down::@19/(byte) current_piece_char#57 )
(byte*) current_piece#42 ← phi( play_move_down::@19/(byte*) current_piece#59 )
(byte) level_bcd#30 ← phi( play_move_down::@19/(byte) level_bcd#45 )
(byte) current_movedown_slow#36 ← phi( play_move_down::@19/(byte) current_movedown_slow#51 )
(byte) level#32 ← phi( play_move_down::@19/(byte) level#47 )
(dword) score_bcd#25 ← phi( play_move_down::@19/(dword) score_bcd#38 )
(word) lines_bcd#25 ← phi( play_move_down::@19/(word) lines_bcd#38 )
(byte) play_remove_lines::return#3 ← phi( play_move_down::@19/(byte) play_remove_lines::return#0 )
(byte~) play_move_down::$15 ← (byte) play_remove_lines::return#3
(byte) play_move_down::removed#0 ← (byte~) play_move_down::$15
(byte) play_update_score::removed#0 ← (byte) play_move_down::removed#0
call play_update_score
to:play_move_down::@21
play_move_down::@21: scope:[play_move_down] from play_move_down::@20
(byte) next_piece_idx#29 ← phi( play_move_down::@20/(byte) next_piece_idx#39 )
(byte) game_over#26 ← phi( play_move_down::@20/(byte) game_over#37 )
(byte) current_ypos#37 ← phi( play_move_down::@20/(byte) current_ypos#53 )
(byte) current_xpos#42 ← phi( play_move_down::@20/(byte) current_xpos#63 )
(byte*) current_piece_gfx#34 ← phi( play_move_down::@20/(byte*) current_piece_gfx#50 )
(byte) current_orientation#36 ← phi( play_move_down::@20/(byte) current_orientation#53 )
(byte) current_piece_char#28 ← phi( play_move_down::@20/(byte) current_piece_char#41 )
(byte*) current_piece#27 ← phi( play_move_down::@20/(byte*) current_piece#42 )
(byte) level_bcd#16 ← phi( play_move_down::@20/(byte) level_bcd#6 )
(byte) current_movedown_slow#20 ← phi( play_move_down::@20/(byte) current_movedown_slow#8 )
(byte) level#16 ← phi( play_move_down::@20/(byte) level#6 )
(dword) score_bcd#13 ← phi( play_move_down::@20/(dword) score_bcd#6 )
(word) lines_bcd#14 ← phi( play_move_down::@20/(word) lines_bcd#6 )
(word) lines_bcd#3 ← (word) lines_bcd#14
(dword) score_bcd#3 ← (dword) score_bcd#13
(byte) level#3 ← (byte) level#16
(byte) current_movedown_slow#5 ← (byte) current_movedown_slow#20
(byte) level_bcd#3 ← (byte) level_bcd#16
call play_spawn_current
to:play_move_down::@22
play_move_down::@22: scope:[play_move_down] from play_move_down::@21
(byte) level_bcd#47 ← phi( play_move_down::@21/(byte) level_bcd#3 )
(byte) current_movedown_slow#53 ← phi( play_move_down::@21/(byte) current_movedown_slow#5 )
(byte) level#49 ← phi( play_move_down::@21/(byte) level#3 )
(dword) score_bcd#40 ← phi( play_move_down::@21/(dword) score_bcd#3 )
(word) lines_bcd#40 ← phi( play_move_down::@21/(word) lines_bcd#3 )
(byte) next_piece_idx#15 ← phi( play_move_down::@21/(byte) next_piece_idx#6 )
(byte) game_over#14 ← phi( play_move_down::@21/(byte) game_over#6 )
(byte) current_ypos#18 ← phi( play_move_down::@21/(byte) current_ypos#7 )
(byte) current_xpos#21 ← phi( play_move_down::@21/(byte) current_xpos#10 )
(byte*) current_piece_gfx#19 ← phi( play_move_down::@21/(byte*) current_piece_gfx#9 )
(byte) current_orientation#19 ← phi( play_move_down::@21/(byte) current_orientation#9 )
(byte) current_piece_char#15 ← phi( play_move_down::@21/(byte) current_piece_char#6 )
(byte*) current_piece#14 ← phi( play_move_down::@21/(byte*) current_piece#6 )
(byte*) current_piece#3 ← (byte*) current_piece#14
(byte) current_piece_char#3 ← (byte) current_piece_char#15
(byte) current_orientation#4 ← (byte) current_orientation#19
(byte*) current_piece_gfx#4 ← (byte*) current_piece_gfx#19
(byte) current_xpos#4 ← (byte) current_xpos#21
(byte) current_ypos#4 ← (byte) current_ypos#18
(byte) game_over#3 ← (byte) game_over#14
(byte) next_piece_idx#3 ← (byte) next_piece_idx#15
to:play_move_down::@15
play_move_down::@15: scope:[play_move_down] from play_move_down::@14 play_move_down::@22
(byte) next_piece_idx#30 ← phi( play_move_down::@14/(byte) next_piece_idx#40 play_move_down::@22/(byte) next_piece_idx#3 )
(byte) game_over#27 ← phi( play_move_down::@14/(byte) game_over#38 play_move_down::@22/(byte) game_over#3 )
(byte) current_xpos#43 ← phi( play_move_down::@14/(byte) current_xpos#64 play_move_down::@22/(byte) current_xpos#4 )
(byte*) current_piece_gfx#35 ← phi( play_move_down::@14/(byte*) current_piece_gfx#51 play_move_down::@22/(byte*) current_piece_gfx#4 )
(byte) current_orientation#37 ← phi( play_move_down::@14/(byte) current_orientation#54 play_move_down::@22/(byte) current_orientation#4 )
(byte) current_piece_char#29 ← phi( play_move_down::@14/(byte) current_piece_char#42 play_move_down::@22/(byte) current_piece_char#3 )
(byte*) current_piece#28 ← phi( play_move_down::@14/(byte*) current_piece#43 play_move_down::@22/(byte*) current_piece#3 )
(byte) level_bcd#31 ← phi( play_move_down::@14/(byte) level_bcd#46 play_move_down::@22/(byte) level_bcd#47 )
(byte) current_movedown_slow#37 ← phi( play_move_down::@14/(byte) current_movedown_slow#52 play_move_down::@22/(byte) current_movedown_slow#53 )
(byte) level#33 ← phi( play_move_down::@14/(byte) level#48 play_move_down::@22/(byte) level#49 )
(dword) score_bcd#26 ← phi( play_move_down::@14/(dword) score_bcd#39 play_move_down::@22/(dword) score_bcd#40 )
(word) lines_bcd#26 ← phi( play_move_down::@14/(word) lines_bcd#39 play_move_down::@22/(word) lines_bcd#40 )
(byte) current_ypos#38 ← phi( play_move_down::@14/(byte) current_ypos#3 play_move_down::@22/(byte) current_ypos#4 )
(byte) current_movedown_counter#4 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) play_move_down::return#2 ← (byte/signed byte/word/signed word/dword/signed dword) 1
to:play_move_down::@return
play_move_down::@return: scope:[play_move_down] from play_move_down::@15 play_move_down::@4
(byte) next_piece_idx#16 ← phi( play_move_down::@15/(byte) next_piece_idx#30 play_move_down::@4/(byte) next_piece_idx#31 )
(byte) game_over#15 ← phi( play_move_down::@15/(byte) game_over#27 play_move_down::@4/(byte) game_over#28 )
(byte) current_xpos#22 ← phi( play_move_down::@15/(byte) current_xpos#43 play_move_down::@4/(byte) current_xpos#44 )
(byte*) current_piece_gfx#20 ← phi( play_move_down::@15/(byte*) current_piece_gfx#35 play_move_down::@4/(byte*) current_piece_gfx#36 )
(byte) current_orientation#20 ← phi( play_move_down::@15/(byte) current_orientation#37 play_move_down::@4/(byte) current_orientation#38 )
(byte) current_piece_char#16 ← phi( play_move_down::@15/(byte) current_piece_char#29 play_move_down::@4/(byte) current_piece_char#30 )
(byte*) current_piece#15 ← phi( play_move_down::@15/(byte*) current_piece#28 play_move_down::@4/(byte*) current_piece#29 )
(byte) level_bcd#17 ← phi( play_move_down::@15/(byte) level_bcd#31 play_move_down::@4/(byte) level_bcd#32 )
(byte) current_movedown_slow#21 ← phi( play_move_down::@15/(byte) current_movedown_slow#37 play_move_down::@4/(byte) current_movedown_slow#38 )
(byte) level#17 ← phi( play_move_down::@15/(byte) level#33 play_move_down::@4/(byte) level#34 )
(dword) score_bcd#14 ← phi( play_move_down::@15/(dword) score_bcd#26 play_move_down::@4/(dword) score_bcd#27 )
(word) lines_bcd#15 ← phi( play_move_down::@15/(word) lines_bcd#26 play_move_down::@4/(word) lines_bcd#27 )
(byte) current_ypos#19 ← phi( play_move_down::@15/(byte) current_ypos#38 play_move_down::@4/(byte) current_ypos#39 )
(byte) current_movedown_counter#14 ← phi( play_move_down::@15/(byte) current_movedown_counter#4 play_move_down::@4/(byte) current_movedown_counter#24 )
(byte) play_move_down::return#5 ← phi( play_move_down::@15/(byte) play_move_down::return#2 play_move_down::@4/(byte) play_move_down::return#1 )
(byte) play_move_down::return#3 ← (byte) play_move_down::return#5
(byte) current_movedown_counter#5 ← (byte) current_movedown_counter#14
(byte) current_ypos#5 ← (byte) current_ypos#19
(word) lines_bcd#4 ← (word) lines_bcd#15
(dword) score_bcd#4 ← (dword) score_bcd#14
(byte) level#4 ← (byte) level#17
(byte) current_movedown_slow#6 ← (byte) current_movedown_slow#21
(byte) level_bcd#4 ← (byte) level_bcd#17
(byte*) current_piece#4 ← (byte*) current_piece#15
(byte) current_piece_char#4 ← (byte) current_piece_char#16
(byte) current_orientation#5 ← (byte) current_orientation#20
(byte*) current_piece_gfx#5 ← (byte*) current_piece_gfx#20
(byte) current_xpos#5 ← (byte) current_xpos#22
(byte) game_over#4 ← (byte) game_over#15
(byte) next_piece_idx#4 ← (byte) next_piece_idx#16
return
to:@return
play_move_leftright: scope:[play_move_leftright] from play_movement::@1
(byte*) current_piece#44 ← phi( play_movement::@1/(byte*) current_piece#55 )
(byte) current_orientation#39 ← phi( play_movement::@1/(byte) current_orientation#50 )
(byte) current_ypos#40 ← phi( play_movement::@1/(byte) current_ypos#54 )
(byte) current_xpos#45 ← phi( play_movement::@1/(byte) current_xpos#38 )
(byte) play_move_leftright::key_event#1 ← phi( play_movement::@1/(byte) play_move_leftright::key_event#0 )
(bool~) play_move_leftright::$0 ← (byte) play_move_leftright::key_event#1 == (byte) KEY_COMMA#0
if((bool~) play_move_leftright::$0) goto play_move_leftright::@1
to:play_move_leftright::@4
play_move_leftright::@1: scope:[play_move_leftright] from play_move_leftright
(byte*) current_piece#32 ← phi( play_move_leftright/(byte*) current_piece#44 )
(byte) current_orientation#21 ← phi( play_move_leftright/(byte) current_orientation#39 )
(byte) current_ypos#20 ← phi( play_move_leftright/(byte) current_ypos#40 )
(byte) current_xpos#23 ← phi( play_move_leftright/(byte) current_xpos#45 )
(byte/signed word/word/dword/signed dword~) play_move_leftright::$7 ← (byte) current_xpos#23 - (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) play_collision::xpos#1 ← (byte/signed word/word/dword/signed dword~) play_move_leftright::$7
(byte) play_collision::ypos#1 ← (byte) current_ypos#20
(byte) play_collision::orientation#1 ← (byte) current_orientation#21
call play_collision
(byte) play_collision::return#1 ← (byte) play_collision::return#5
to:play_move_leftright::@14
play_move_leftright::@14: scope:[play_move_leftright] from play_move_leftright::@1
(byte) current_xpos#49 ← phi( play_move_leftright::@1/(byte) current_xpos#23 )
(byte) play_collision::return#12 ← phi( play_move_leftright::@1/(byte) play_collision::return#1 )
(byte~) play_move_leftright::$8 ← (byte) play_collision::return#12
(bool~) play_move_leftright::$9 ← (byte~) play_move_leftright::$8 == (byte) COLLISION_NONE#0
(bool~) play_move_leftright::$10 ← ! (bool~) play_move_leftright::$9
if((bool~) play_move_leftright::$10) goto play_move_leftright::@13
to:play_move_leftright::@9
play_move_leftright::@4: scope:[play_move_leftright] from play_move_leftright
(byte*) current_piece#45 ← phi( play_move_leftright/(byte*) current_piece#44 )
(byte) current_orientation#40 ← phi( play_move_leftright/(byte) current_orientation#39 )
(byte) current_ypos#41 ← phi( play_move_leftright/(byte) current_ypos#40 )
(byte) current_xpos#46 ← phi( play_move_leftright/(byte) current_xpos#45 )
(byte) play_move_leftright::key_event#2 ← phi( play_move_leftright/(byte) play_move_leftright::key_event#1 )
(bool~) play_move_leftright::$1 ← (byte) play_move_leftright::key_event#2 == (byte) KEY_DOT#0
(bool~) play_move_leftright::$2 ← ! (bool~) play_move_leftright::$1
if((bool~) play_move_leftright::$2) goto play_move_leftright::@2
to:play_move_leftright::@5
play_move_leftright::@2: scope:[play_move_leftright] from play_move_leftright::@4
(byte) current_xpos#67 ← phi( play_move_leftright::@4/(byte) current_xpos#46 )
to:play_move_leftright::@3
play_move_leftright::@5: scope:[play_move_leftright] from play_move_leftright::@4
(byte*) current_piece#33 ← phi( play_move_leftright::@4/(byte*) current_piece#45 )
(byte) current_orientation#22 ← phi( play_move_leftright::@4/(byte) current_orientation#40 )
(byte) current_ypos#21 ← phi( play_move_leftright::@4/(byte) current_ypos#41 )
(byte) current_xpos#24 ← phi( play_move_leftright::@4/(byte) current_xpos#46 )
(byte/signed word/word/dword/signed dword~) play_move_leftright::$3 ← (byte) current_xpos#24 + (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) play_collision::xpos#2 ← (byte/signed word/word/dword/signed dword~) play_move_leftright::$3
(byte) play_collision::ypos#2 ← (byte) current_ypos#21
(byte) play_collision::orientation#2 ← (byte) current_orientation#22
call play_collision
(byte) play_collision::return#2 ← (byte) play_collision::return#5
to:play_move_leftright::@15
play_move_leftright::@15: scope:[play_move_leftright] from play_move_leftright::@5
(byte) current_xpos#47 ← phi( play_move_leftright::@5/(byte) current_xpos#24 )
(byte) play_collision::return#13 ← phi( play_move_leftright::@5/(byte) play_collision::return#2 )
(byte~) play_move_leftright::$4 ← (byte) play_collision::return#13
(bool~) play_move_leftright::$5 ← (byte~) play_move_leftright::$4 == (byte) COLLISION_NONE#0
(bool~) play_move_leftright::$6 ← ! (bool~) play_move_leftright::$5
if((bool~) play_move_leftright::$6) goto play_move_leftright::@12
to:play_move_leftright::@6
play_move_leftright::@12: scope:[play_move_leftright] from play_move_leftright::@15
(byte) current_xpos#65 ← phi( play_move_leftright::@15/(byte) current_xpos#47 )
to:play_move_leftright::@3
play_move_leftright::@6: scope:[play_move_leftright] from play_move_leftright::@15
(byte) current_xpos#25 ← phi( play_move_leftright::@15/(byte) current_xpos#47 )
(byte) current_xpos#6 ← ++ (byte) current_xpos#25
(byte) play_move_leftright::return#1 ← (byte/signed byte/word/signed word/dword/signed dword) 1
to:play_move_leftright::@return
play_move_leftright::@return: scope:[play_move_leftright] from play_move_leftright::@3 play_move_leftright::@6 play_move_leftright::@9
(byte) current_xpos#26 ← phi( play_move_leftright::@3/(byte) current_xpos#48 play_move_leftright::@6/(byte) current_xpos#6 play_move_leftright::@9/(byte) current_xpos#8 )
(byte) play_move_leftright::return#6 ← phi( play_move_leftright::@3/(byte) play_move_leftright::return#3 play_move_leftright::@6/(byte) play_move_leftright::return#1 play_move_leftright::@9/(byte) play_move_leftright::return#4 )
(byte) play_move_leftright::return#2 ← (byte) play_move_leftright::return#6
(byte) current_xpos#7 ← (byte) current_xpos#26
return
to:@return
play_move_leftright::@3: scope:[play_move_leftright] from play_move_leftright::@12 play_move_leftright::@13 play_move_leftright::@2
(byte) current_xpos#48 ← phi( play_move_leftright::@12/(byte) current_xpos#65 play_move_leftright::@13/(byte) current_xpos#66 play_move_leftright::@2/(byte) current_xpos#67 )
(byte) play_move_leftright::return#3 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:play_move_leftright::@return
play_move_leftright::@13: scope:[play_move_leftright] from play_move_leftright::@14
(byte) current_xpos#66 ← phi( play_move_leftright::@14/(byte) current_xpos#49 )
to:play_move_leftright::@3
play_move_leftright::@9: scope:[play_move_leftright] from play_move_leftright::@14
(byte) current_xpos#27 ← phi( play_move_leftright::@14/(byte) current_xpos#49 )
(byte) current_xpos#8 ← -- (byte) current_xpos#27
(byte) play_move_leftright::return#4 ← (byte/signed byte/word/signed word/dword/signed dword) 1
to:play_move_leftright::@return
play_move_rotate: scope:[play_move_rotate] from play_movement::@6
(byte*) current_piece_gfx#70 ← phi( play_movement::@6/(byte*) current_piece_gfx#32 )
(byte*) current_piece#60 ← phi( play_movement::@6/(byte*) current_piece#40 )
(byte) current_ypos#55 ← phi( play_movement::@6/(byte) current_ypos#50 )
(byte) current_xpos#68 ← phi( play_movement::@6/(byte) current_xpos#2 )
(byte) current_orientation#41 ← phi( play_movement::@6/(byte) current_orientation#33 )
(byte) play_move_rotate::key_event#1 ← phi( play_movement::@6/(byte) play_move_rotate::key_event#0 )
(byte) play_move_rotate::orientation#0 ← (byte/word/signed word/dword/signed dword) $80
(bool~) play_move_rotate::$0 ← (byte) play_move_rotate::key_event#1 == (byte) KEY_Z#0
if((bool~) play_move_rotate::$0) goto play_move_rotate::@1
to:play_move_rotate::@6
play_move_rotate::@1: scope:[play_move_rotate] from play_move_rotate
(byte*) current_piece_gfx#89 ← phi( play_move_rotate/(byte*) current_piece_gfx#70 )
(byte*) current_piece#46 ← phi( play_move_rotate/(byte*) current_piece#60 )
(byte) current_ypos#42 ← phi( play_move_rotate/(byte) current_ypos#55 )
(byte) current_xpos#50 ← phi( play_move_rotate/(byte) current_xpos#68 )
(byte) current_orientation#23 ← phi( play_move_rotate/(byte) current_orientation#41 )
(byte/signed word/word/dword/signed dword~) play_move_rotate::$7 ← (byte) current_orientation#23 - (byte/signed byte/word/signed word/dword/signed dword) $10
(byte/word/dword~) play_move_rotate::$8 ← (byte/signed word/word/dword/signed dword~) play_move_rotate::$7 & (byte/signed byte/word/signed word/dword/signed dword) $3f
(byte) play_move_rotate::orientation#1 ← (byte/word/dword~) play_move_rotate::$8
to:play_move_rotate::@4
play_move_rotate::@6: scope:[play_move_rotate] from play_move_rotate
(byte*) current_piece#61 ← phi( play_move_rotate/(byte*) current_piece#60 )
(byte*) current_piece_gfx#52 ← phi( play_move_rotate/(byte*) current_piece_gfx#70 )
(byte) current_ypos#56 ← phi( play_move_rotate/(byte) current_ypos#55 )
(byte) current_xpos#69 ← phi( play_move_rotate/(byte) current_xpos#68 )
(byte) current_orientation#42 ← phi( play_move_rotate/(byte) current_orientation#41 )
(byte) play_move_rotate::key_event#2 ← phi( play_move_rotate/(byte) play_move_rotate::key_event#1 )
(bool~) play_move_rotate::$1 ← (byte) play_move_rotate::key_event#2 == (byte) KEY_X#0
if((bool~) play_move_rotate::$1) goto play_move_rotate::@2
to:play_move_rotate::@7
play_move_rotate::@2: scope:[play_move_rotate] from play_move_rotate::@6
(byte*) current_piece_gfx#90 ← phi( play_move_rotate::@6/(byte*) current_piece_gfx#52 )
(byte*) current_piece#47 ← phi( play_move_rotate::@6/(byte*) current_piece#61 )
(byte) current_ypos#43 ← phi( play_move_rotate::@6/(byte) current_ypos#56 )
(byte) current_xpos#51 ← phi( play_move_rotate::@6/(byte) current_xpos#69 )
(byte) current_orientation#24 ← phi( play_move_rotate::@6/(byte) current_orientation#42 )
(byte/signed word/word/dword/signed dword~) play_move_rotate::$5 ← (byte) current_orientation#24 + (byte/signed byte/word/signed word/dword/signed dword) $10
(byte/word/dword~) play_move_rotate::$6 ← (byte/signed word/word/dword/signed dword~) play_move_rotate::$5 & (byte/signed byte/word/signed word/dword/signed dword) $3f
(byte) play_move_rotate::orientation#2 ← (byte/word/dword~) play_move_rotate::$6
to:play_move_rotate::@4
play_move_rotate::@7: scope:[play_move_rotate] from play_move_rotate::@6
(byte*) current_piece_gfx#38 ← phi( play_move_rotate::@6/(byte*) current_piece_gfx#52 )
(byte) current_orientation#44 ← phi( play_move_rotate::@6/(byte) current_orientation#42 )
(byte) play_move_rotate::return#1 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:play_move_rotate::@return
play_move_rotate::@return: scope:[play_move_rotate] from play_move_rotate::@11 play_move_rotate::@5 play_move_rotate::@7
(byte*) current_piece_gfx#21 ← phi( play_move_rotate::@11/(byte*) current_piece_gfx#7 play_move_rotate::@5/(byte*) current_piece_gfx#37 play_move_rotate::@7/(byte*) current_piece_gfx#38 )
(byte) current_orientation#25 ← phi( play_move_rotate::@11/(byte) current_orientation#7 play_move_rotate::@5/(byte) current_orientation#43 play_move_rotate::@7/(byte) current_orientation#44 )
(byte) play_move_rotate::return#6 ← phi( play_move_rotate::@11/(byte) play_move_rotate::return#4 play_move_rotate::@5/(byte) play_move_rotate::return#3 play_move_rotate::@7/(byte) play_move_rotate::return#1 )
(byte) play_move_rotate::return#2 ← (byte) play_move_rotate::return#6
(byte) current_orientation#6 ← (byte) current_orientation#25
(byte*) current_piece_gfx#6 ← (byte*) current_piece_gfx#21
return
to:@return
play_move_rotate::@4: scope:[play_move_rotate] from play_move_rotate::@1 play_move_rotate::@2
(byte*) current_piece_gfx#71 ← phi( play_move_rotate::@1/(byte*) current_piece_gfx#89 play_move_rotate::@2/(byte*) current_piece_gfx#90 )
(byte) current_orientation#68 ← phi( play_move_rotate::@1/(byte) current_orientation#23 play_move_rotate::@2/(byte) current_orientation#24 )
(byte*) current_piece#34 ← phi( play_move_rotate::@1/(byte*) current_piece#46 play_move_rotate::@2/(byte*) current_piece#47 )
(byte) play_move_rotate::orientation#3 ← phi( play_move_rotate::@1/(byte) play_move_rotate::orientation#1 play_move_rotate::@2/(byte) play_move_rotate::orientation#2 )
(byte) current_ypos#22 ← phi( play_move_rotate::@1/(byte) current_ypos#42 play_move_rotate::@2/(byte) current_ypos#43 )
(byte) current_xpos#28 ← phi( play_move_rotate::@1/(byte) current_xpos#50 play_move_rotate::@2/(byte) current_xpos#51 )
(byte) play_collision::xpos#3 ← (byte) current_xpos#28
(byte) play_collision::ypos#3 ← (byte) current_ypos#22
(byte) play_collision::orientation#3 ← (byte) play_move_rotate::orientation#3
call play_collision
(byte) play_collision::return#3 ← (byte) play_collision::return#5
to:play_move_rotate::@14
play_move_rotate::@14: scope:[play_move_rotate] from play_move_rotate::@4
(byte*) current_piece_gfx#53 ← phi( play_move_rotate::@4/(byte*) current_piece_gfx#71 )
(byte) current_orientation#55 ← phi( play_move_rotate::@4/(byte) current_orientation#68 )
(byte*) current_piece#30 ← phi( play_move_rotate::@4/(byte*) current_piece#34 )
(byte) play_move_rotate::orientation#5 ← phi( play_move_rotate::@4/(byte) play_move_rotate::orientation#3 )
(byte) play_collision::return#14 ← phi( play_move_rotate::@4/(byte) play_collision::return#3 )
(byte~) play_move_rotate::$2 ← (byte) play_collision::return#14
(bool~) play_move_rotate::$3 ← (byte~) play_move_rotate::$2 == (byte) COLLISION_NONE#0
(bool~) play_move_rotate::$4 ← ! (bool~) play_move_rotate::$3
if((bool~) play_move_rotate::$4) goto play_move_rotate::@5
to:play_move_rotate::@11
play_move_rotate::@5: scope:[play_move_rotate] from play_move_rotate::@14
(byte*) current_piece_gfx#37 ← phi( play_move_rotate::@14/(byte*) current_piece_gfx#53 )
(byte) current_orientation#43 ← phi( play_move_rotate::@14/(byte) current_orientation#55 )
(byte) play_move_rotate::return#3 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:play_move_rotate::@return
play_move_rotate::@11: scope:[play_move_rotate] from play_move_rotate::@14
(byte*) current_piece#16 ← phi( play_move_rotate::@14/(byte*) current_piece#30 )
(byte) play_move_rotate::orientation#4 ← phi( play_move_rotate::@14/(byte) play_move_rotate::orientation#5 )
(byte) current_orientation#7 ← (byte) play_move_rotate::orientation#4
(byte*~) play_move_rotate::$9 ← (byte*) current_piece#16 + (byte) current_orientation#7
(byte*) current_piece_gfx#7 ← (byte*~) play_move_rotate::$9
(byte) play_move_rotate::return#4 ← (byte/signed byte/word/signed word/dword/signed dword) 1
to:play_move_rotate::@return
@31: scope:[] from @26
(byte) irq_cnt#19 ← phi( @26/(byte) irq_cnt#20 )
(byte) irq_sprite_ptr#17 ← phi( @26/(byte) irq_sprite_ptr#18 )
(byte) level_bcd#56 ← phi( @26/(byte) level_bcd#63 )
(byte) level#57 ← phi( @26/(byte) level#66 )
(dword) score_bcd#46 ← phi( @26/(dword) score_bcd#53 )
(word) lines_bcd#46 ← phi( @26/(word) lines_bcd#53 )
(byte) current_movedown_counter#35 ← phi( @26/(byte) current_movedown_counter#0 )
(byte) keyboard_modifiers#33 ← phi( @26/(byte) keyboard_modifiers#34 )
(byte) keyboard_events_size#36 ← phi( @26/(byte) keyboard_events_size#40 )
(byte) render_screen_showing#20 ← phi( @26/(byte) render_screen_showing#21 )
(byte) next_piece_idx#46 ← phi( @26/(byte) next_piece_idx#0 )
(byte) game_over#45 ← phi( @26/(byte) game_over#51 )
(byte) current_ypos#64 ← phi( @26/(byte) current_ypos#69 )
(byte) current_xpos#78 ← phi( @26/(byte) current_xpos#88 )
(byte*) current_piece_gfx#63 ← phi( @26/(byte*) current_piece_gfx#72 )
(byte) current_orientation#62 ← phi( @26/(byte) current_orientation#0 )
(byte) current_piece_char#51 ← phi( @26/(byte) current_piece_char#58 )
(byte*) current_piece#54 ← phi( @26/(byte*) current_piece#0 )
(byte) current_movedown_slow#62 ← phi( @26/(byte) current_movedown_slow#0 )
(byte) render_screen_render#40 ← phi( @26/(byte) render_screen_render#43 )
(byte) render_screen_show#32 ← phi( @26/(byte) render_screen_show#35 )
(byte) irq_raster_next#17 ← phi( @26/(byte) irq_raster_next#20 )
(byte) irq_sprite_ypos#14 ← phi( @26/(byte) irq_sprite_ypos#18 )
(byte) COLLISION_NONE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) COLLISION_PLAYFIELD#0 ← (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) COLLISION_BOTTOM#0 ← (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) COLLISION_LEFT#0 ← (byte/signed byte/word/signed word/dword/signed dword) 4
(byte) COLLISION_RIGHT#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8
to:@38
play_collision: scope:[play_collision] from play_move_down::@9 play_move_leftright::@1 play_move_leftright::@5 play_move_rotate::@4 play_spawn_current
(byte) play_collision::xpos#6 ← phi( play_move_down::@9/(byte) play_collision::xpos#0 play_move_leftright::@1/(byte) play_collision::xpos#1 play_move_leftright::@5/(byte) play_collision::xpos#2 play_move_rotate::@4/(byte) play_collision::xpos#3 play_spawn_current/(byte) play_collision::xpos#4 )
(byte) play_collision::ypos#5 ← phi( play_move_down::@9/(byte) play_collision::ypos#0 play_move_leftright::@1/(byte) play_collision::ypos#1 play_move_leftright::@5/(byte) play_collision::ypos#2 play_move_rotate::@4/(byte) play_collision::ypos#3 play_spawn_current/(byte) play_collision::ypos#4 )
(byte) play_collision::orientation#5 ← phi( play_move_down::@9/(byte) play_collision::orientation#0 play_move_leftright::@1/(byte) play_collision::orientation#1 play_move_leftright::@5/(byte) play_collision::orientation#2 play_move_rotate::@4/(byte) play_collision::orientation#3 play_spawn_current/(byte) play_collision::orientation#4 )
(byte*) current_piece#17 ← phi( play_move_down::@9/(byte*) current_piece#31 play_move_leftright::@1/(byte*) current_piece#32 play_move_leftright::@5/(byte*) current_piece#33 play_move_rotate::@4/(byte*) current_piece#34 play_spawn_current/(byte*) current_piece#5 )
(byte*~) play_collision::$0 ← (byte*) current_piece#17 + (byte) play_collision::orientation#5
(byte*) play_collision::piece_gfx#0 ← (byte*~) play_collision::$0
(byte) play_collision::i#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte/signed word/word/dword/signed dword~) play_collision::$1 ← (byte) play_collision::ypos#5 * (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) play_collision::ypos2#0 ← (byte/signed word/word/dword/signed dword~) play_collision::$1
(byte) play_collision::l#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:play_collision::@1
play_collision::@1: scope:[play_collision] from play_collision play_collision::@17
(byte) play_collision::l#6 ← phi( play_collision/(byte) play_collision::l#0 play_collision::@17/(byte) play_collision::l#1 )
(byte) play_collision::i#3 ← phi( play_collision/(byte) play_collision::i#0 play_collision::@17/(byte) play_collision::i#5 )
(byte*) play_collision::piece_gfx#2 ← phi( play_collision/(byte*) play_collision::piece_gfx#0 play_collision::@17/(byte*) play_collision::piece_gfx#4 )
(byte) play_collision::xpos#5 ← phi( play_collision/(byte) play_collision::xpos#6 play_collision::@17/(byte) play_collision::xpos#7 )
(byte) play_collision::ypos2#2 ← phi( play_collision/(byte) play_collision::ypos2#0 play_collision::@17/(byte) play_collision::ypos2#1 )
(byte*) play_collision::playfield_line#0 ← *((byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte) play_collision::ypos2#2)
(byte) play_collision::col#0 ← (byte) play_collision::xpos#5
(byte) play_collision::c#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:play_collision::@2
play_collision::@2: scope:[play_collision] from play_collision::@1 play_collision::@3
(byte*) play_collision::playfield_line#5 ← phi( play_collision::@1/(byte*) play_collision::playfield_line#0 play_collision::@3/(byte*) play_collision::playfield_line#6 )
(byte) play_collision::xpos#9 ← phi( play_collision::@1/(byte) play_collision::xpos#5 play_collision::@3/(byte) play_collision::xpos#8 )
(byte) play_collision::l#4 ← phi( play_collision::@1/(byte) play_collision::l#6 play_collision::@3/(byte) play_collision::l#3 )
(byte) play_collision::ypos2#5 ← phi( play_collision::@1/(byte) play_collision::ypos2#2 play_collision::@3/(byte) play_collision::ypos2#6 )
(byte) play_collision::c#3 ← phi( play_collision::@1/(byte) play_collision::c#0 play_collision::@3/(byte) play_collision::c#1 )
(byte) play_collision::col#6 ← phi( play_collision::@1/(byte) play_collision::col#0 play_collision::@3/(byte) play_collision::col#1 )
(byte) play_collision::i#2 ← phi( play_collision::@1/(byte) play_collision::i#3 play_collision::@3/(byte) play_collision::i#4 )
(byte*) play_collision::piece_gfx#1 ← phi( play_collision::@1/(byte*) play_collision::piece_gfx#2 play_collision::@3/(byte*) play_collision::piece_gfx#3 )
(bool~) play_collision::$2 ← *((byte*) play_collision::piece_gfx#1 + (byte) play_collision::i#2) != (byte/signed byte/word/signed word/dword/signed dword) 0
(bool~) play_collision::$3 ← ! (bool~) play_collision::$2
(byte) play_collision::i#1 ← ++ (byte) play_collision::i#2
if((bool~) play_collision::$3) goto play_collision::@3
to:play_collision::@14
play_collision::@3: scope:[play_collision] from play_collision::@2 play_collision::@7
(byte*) play_collision::playfield_line#6 ← phi( play_collision::@2/(byte*) play_collision::playfield_line#5 play_collision::@7/(byte*) play_collision::playfield_line#7 )
(byte) play_collision::xpos#8 ← phi( play_collision::@2/(byte) play_collision::xpos#9 play_collision::@7/(byte) play_collision::xpos#10 )
(byte) play_collision::l#3 ← phi( play_collision::@2/(byte) play_collision::l#4 play_collision::@7/(byte) play_collision::l#5 )
(byte) play_collision::ypos2#6 ← phi( play_collision::@2/(byte) play_collision::ypos2#5 play_collision::@7/(byte) play_collision::ypos2#7 )
(byte) play_collision::i#4 ← phi( play_collision::@2/(byte) play_collision::i#1 play_collision::@7/(byte) play_collision::i#6 )
(byte*) play_collision::piece_gfx#3 ← phi( play_collision::@2/(byte*) play_collision::piece_gfx#1 play_collision::@7/(byte*) play_collision::piece_gfx#5 )
(byte) play_collision::c#2 ← phi( play_collision::@2/(byte) play_collision::c#3 play_collision::@7/(byte) play_collision::c#4 )
(byte) play_collision::col#2 ← phi( play_collision::@2/(byte) play_collision::col#6 play_collision::@7/(byte) play_collision::col#7 )
(byte) play_collision::col#1 ← ++ (byte) play_collision::col#2
(byte) play_collision::c#1 ← (byte) play_collision::c#2 + rangenext(0,3)
(bool~) play_collision::$14 ← (byte) play_collision::c#1 != rangelast(0,3)
if((bool~) play_collision::$14) goto play_collision::@2
to:play_collision::@17
play_collision::@14: scope:[play_collision] from play_collision::@2
(byte) play_collision::xpos#14 ← phi( play_collision::@2/(byte) play_collision::xpos#9 )
(byte) play_collision::l#10 ← phi( play_collision::@2/(byte) play_collision::l#4 )
(byte) play_collision::i#10 ← phi( play_collision::@2/(byte) play_collision::i#1 )
(byte*) play_collision::piece_gfx#9 ← phi( play_collision::@2/(byte*) play_collision::piece_gfx#1 )
(byte) play_collision::c#8 ← phi( play_collision::@2/(byte) play_collision::c#3 )
(byte*) play_collision::playfield_line#4 ← phi( play_collision::@2/(byte*) play_collision::playfield_line#5 )
(byte) play_collision::col#8 ← phi( play_collision::@2/(byte) play_collision::col#6 )
(byte) play_collision::ypos2#3 ← phi( play_collision::@2/(byte) play_collision::ypos2#5 )
(byte/signed word/word/dword/signed dword~) play_collision::$4 ← (byte/signed byte/word/signed word/dword/signed dword) 2 * (byte) PLAYFIELD_LINES#0
(bool~) play_collision::$5 ← (byte) play_collision::ypos2#3 >= (byte/signed word/word/dword/signed dword~) play_collision::$4
(bool~) play_collision::$6 ← ! (bool~) play_collision::$5
if((bool~) play_collision::$6) goto play_collision::@4
to:play_collision::@15
play_collision::@4: scope:[play_collision] from play_collision::@14
(byte) play_collision::xpos#13 ← phi( play_collision::@14/(byte) play_collision::xpos#14 )
(byte) play_collision::l#9 ← phi( play_collision::@14/(byte) play_collision::l#10 )
(byte) play_collision::ypos2#10 ← phi( play_collision::@14/(byte) play_collision::ypos2#3 )
(byte) play_collision::i#9 ← phi( play_collision::@14/(byte) play_collision::i#10 )
(byte*) play_collision::piece_gfx#8 ← phi( play_collision::@14/(byte*) play_collision::piece_gfx#9 )
(byte) play_collision::c#7 ← phi( play_collision::@14/(byte) play_collision::c#8 )
(byte*) play_collision::playfield_line#3 ← phi( play_collision::@14/(byte*) play_collision::playfield_line#4 )
(byte) play_collision::col#3 ← phi( play_collision::@14/(byte) play_collision::col#8 )
(byte~) play_collision::$7 ← (byte) play_collision::col#3 & (byte/word/signed word/dword/signed dword) $80
(bool~) play_collision::$8 ← (byte~) play_collision::$7 != (byte/signed byte/word/signed word/dword/signed dword) 0
(bool~) play_collision::$9 ← ! (bool~) play_collision::$8
if((bool~) play_collision::$9) goto play_collision::@5
to:play_collision::@8
play_collision::@15: scope:[play_collision] from play_collision::@14
(byte) play_collision::return#4 ← (byte) COLLISION_BOTTOM#0
to:play_collision::@return
play_collision::@return: scope:[play_collision] from play_collision::@10 play_collision::@12 play_collision::@15 play_collision::@18 play_collision::@8
(byte) play_collision::return#15 ← phi( play_collision::@10/(byte) play_collision::return#7 play_collision::@12/(byte) play_collision::return#8 play_collision::@15/(byte) play_collision::return#4 play_collision::@18/(byte) play_collision::return#9 play_collision::@8/(byte) play_collision::return#6 )
(byte) play_collision::return#5 ← (byte) play_collision::return#15
return
to:@return
play_collision::@5: scope:[play_collision] from play_collision::@4
(byte) play_collision::xpos#12 ← phi( play_collision::@4/(byte) play_collision::xpos#13 )
(byte) play_collision::l#8 ← phi( play_collision::@4/(byte) play_collision::l#9 )
(byte) play_collision::ypos2#9 ← phi( play_collision::@4/(byte) play_collision::ypos2#10 )
(byte) play_collision::i#8 ← phi( play_collision::@4/(byte) play_collision::i#9 )
(byte*) play_collision::piece_gfx#7 ← phi( play_collision::@4/(byte*) play_collision::piece_gfx#8 )
(byte) play_collision::c#6 ← phi( play_collision::@4/(byte) play_collision::c#7 )
(byte*) play_collision::playfield_line#2 ← phi( play_collision::@4/(byte*) play_collision::playfield_line#3 )
(byte) play_collision::col#4 ← phi( play_collision::@4/(byte) play_collision::col#3 )
(bool~) play_collision::$10 ← (byte) play_collision::col#4 >= (byte) PLAYFIELD_COLS#0
(bool~) play_collision::$11 ← ! (bool~) play_collision::$10
if((bool~) play_collision::$11) goto play_collision::@6
to:play_collision::@10
play_collision::@8: scope:[play_collision] from play_collision::@4
(byte) play_collision::return#6 ← (byte) COLLISION_LEFT#0
to:play_collision::@return
play_collision::@6: scope:[play_collision] from play_collision::@5
(byte) play_collision::xpos#11 ← phi( play_collision::@5/(byte) play_collision::xpos#12 )
(byte) play_collision::l#7 ← phi( play_collision::@5/(byte) play_collision::l#8 )
(byte) play_collision::ypos2#8 ← phi( play_collision::@5/(byte) play_collision::ypos2#9 )
(byte) play_collision::i#7 ← phi( play_collision::@5/(byte) play_collision::i#8 )
(byte*) play_collision::piece_gfx#6 ← phi( play_collision::@5/(byte*) play_collision::piece_gfx#7 )
(byte) play_collision::c#5 ← phi( play_collision::@5/(byte) play_collision::c#6 )
(byte) play_collision::col#5 ← phi( play_collision::@5/(byte) play_collision::col#4 )
(byte*) play_collision::playfield_line#1 ← phi( play_collision::@5/(byte*) play_collision::playfield_line#2 )
(bool~) play_collision::$12 ← *((byte*) play_collision::playfield_line#1 + (byte) play_collision::col#5) != (byte/signed byte/word/signed word/dword/signed dword) 0
(bool~) play_collision::$13 ← ! (bool~) play_collision::$12
if((bool~) play_collision::$13) goto play_collision::@7
to:play_collision::@12
play_collision::@10: scope:[play_collision] from play_collision::@5
(byte) play_collision::return#7 ← (byte) COLLISION_RIGHT#0
to:play_collision::@return
play_collision::@7: scope:[play_collision] from play_collision::@6
(byte*) play_collision::playfield_line#7 ← phi( play_collision::@6/(byte*) play_collision::playfield_line#1 )
(byte) play_collision::xpos#10 ← phi( play_collision::@6/(byte) play_collision::xpos#11 )
(byte) play_collision::l#5 ← phi( play_collision::@6/(byte) play_collision::l#7 )
(byte) play_collision::ypos2#7 ← phi( play_collision::@6/(byte) play_collision::ypos2#8 )
(byte) play_collision::i#6 ← phi( play_collision::@6/(byte) play_collision::i#7 )
(byte*) play_collision::piece_gfx#5 ← phi( play_collision::@6/(byte*) play_collision::piece_gfx#6 )
(byte) play_collision::c#4 ← phi( play_collision::@6/(byte) play_collision::c#5 )
(byte) play_collision::col#7 ← phi( play_collision::@6/(byte) play_collision::col#5 )
to:play_collision::@3
play_collision::@12: scope:[play_collision] from play_collision::@6
(byte) play_collision::return#8 ← (byte) COLLISION_PLAYFIELD#0
to:play_collision::@return
play_collision::@17: scope:[play_collision] from play_collision::@3
(byte) play_collision::i#5 ← phi( play_collision::@3/(byte) play_collision::i#4 )
(byte*) play_collision::piece_gfx#4 ← phi( play_collision::@3/(byte*) play_collision::piece_gfx#3 )
(byte) play_collision::xpos#7 ← phi( play_collision::@3/(byte) play_collision::xpos#8 )
(byte) play_collision::l#2 ← phi( play_collision::@3/(byte) play_collision::l#3 )
(byte) play_collision::ypos2#4 ← phi( play_collision::@3/(byte) play_collision::ypos2#6 )
(byte) play_collision::ypos2#1 ← (byte) play_collision::ypos2#4 + (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) play_collision::l#1 ← (byte) play_collision::l#2 + rangenext(0,3)
(bool~) play_collision::$15 ← (byte) play_collision::l#1 != rangelast(0,3)
if((bool~) play_collision::$15) goto play_collision::@1
to:play_collision::@18
play_collision::@18: scope:[play_collision] from play_collision::@17
(byte) play_collision::return#9 ← (byte) COLLISION_NONE#0
to:play_collision::@return
play_lock_current: scope:[play_lock_current] from play_move_down::@10
(byte) current_piece_char#59 ← phi( play_move_down::@10/(byte) current_piece_char#75 )
(byte*) current_piece_gfx#54 ← phi( play_move_down::@10/(byte*) current_piece_gfx#73 )
(byte) current_xpos#52 ← phi( play_move_down::@10/(byte) current_xpos#70 )
(byte) current_ypos#23 ← phi( play_move_down::@10/(byte) current_ypos#44 )
(byte) play_lock_current::i#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte/signed word/word/dword/signed dword~) play_lock_current::$0 ← (byte) current_ypos#23 * (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) play_lock_current::ypos2#0 ← (byte/signed word/word/dword/signed dword~) play_lock_current::$0
(byte) play_lock_current::l#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:play_lock_current::@1
play_lock_current::@1: scope:[play_lock_current] from play_lock_current play_lock_current::@5
(byte) play_lock_current::l#6 ← phi( play_lock_current/(byte) play_lock_current::l#0 play_lock_current::@5/(byte) play_lock_current::l#1 )
(byte) current_piece_char#43 ← phi( play_lock_current/(byte) current_piece_char#59 play_lock_current::@5/(byte) current_piece_char#60 )
(byte) play_lock_current::i#3 ← phi( play_lock_current/(byte) play_lock_current::i#0 play_lock_current::@5/(byte) play_lock_current::i#5 )
(byte*) current_piece_gfx#39 ← phi( play_lock_current/(byte*) current_piece_gfx#54 play_lock_current::@5/(byte*) current_piece_gfx#55 )
(byte) current_xpos#29 ← phi( play_lock_current/(byte) current_xpos#52 play_lock_current::@5/(byte) current_xpos#53 )
(byte) play_lock_current::ypos2#2 ← phi( play_lock_current/(byte) play_lock_current::ypos2#0 play_lock_current::@5/(byte) play_lock_current::ypos2#1 )
(byte*) play_lock_current::playfield_line#0 ← *((byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte) play_lock_current::ypos2#2)
(byte) play_lock_current::col#0 ← (byte) current_xpos#29
(byte) play_lock_current::c#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:play_lock_current::@2
play_lock_current::@2: scope:[play_lock_current] from play_lock_current::@1 play_lock_current::@3
(byte) current_xpos#89 ← phi( play_lock_current::@1/(byte) current_xpos#29 play_lock_current::@3/(byte) current_xpos#71 )
(byte) play_lock_current::l#4 ← phi( play_lock_current::@1/(byte) play_lock_current::l#6 play_lock_current::@3/(byte) play_lock_current::l#3 )
(byte) play_lock_current::ypos2#5 ← phi( play_lock_current::@1/(byte) play_lock_current::ypos2#2 play_lock_current::@3/(byte) play_lock_current::ypos2#4 )
(byte*) play_lock_current::playfield_line#2 ← phi( play_lock_current::@1/(byte*) play_lock_current::playfield_line#0 play_lock_current::@3/(byte*) play_lock_current::playfield_line#3 )
(byte) current_piece_char#31 ← phi( play_lock_current::@1/(byte) current_piece_char#43 play_lock_current::@3/(byte) current_piece_char#44 )
(byte) play_lock_current::c#3 ← phi( play_lock_current::@1/(byte) play_lock_current::c#0 play_lock_current::@3/(byte) play_lock_current::c#1 )
(byte) play_lock_current::col#4 ← phi( play_lock_current::@1/(byte) play_lock_current::col#0 play_lock_current::@3/(byte) play_lock_current::col#1 )
(byte) play_lock_current::i#2 ← phi( play_lock_current::@1/(byte) play_lock_current::i#3 play_lock_current::@3/(byte) play_lock_current::i#4 )
(byte*) current_piece_gfx#22 ← phi( play_lock_current::@1/(byte*) current_piece_gfx#39 play_lock_current::@3/(byte*) current_piece_gfx#40 )
(bool~) play_lock_current::$1 ← *((byte*) current_piece_gfx#22 + (byte) play_lock_current::i#2) != (byte/signed byte/word/signed word/dword/signed dword) 0
(bool~) play_lock_current::$2 ← ! (bool~) play_lock_current::$1
(byte) play_lock_current::i#1 ← ++ (byte) play_lock_current::i#2
if((bool~) play_lock_current::$2) goto play_lock_current::@3
to:play_lock_current::@4
play_lock_current::@3: scope:[play_lock_current] from play_lock_current::@2 play_lock_current::@4
(byte) current_xpos#71 ← phi( play_lock_current::@2/(byte) current_xpos#89 play_lock_current::@4/(byte) current_xpos#90 )
(byte*) play_lock_current::playfield_line#3 ← phi( play_lock_current::@2/(byte*) play_lock_current::playfield_line#2 play_lock_current::@4/(byte*) play_lock_current::playfield_line#1 )
(byte) current_piece_char#44 ← phi( play_lock_current::@2/(byte) current_piece_char#31 play_lock_current::@4/(byte) current_piece_char#17 )
(byte) play_lock_current::l#3 ← phi( play_lock_current::@2/(byte) play_lock_current::l#4 play_lock_current::@4/(byte) play_lock_current::l#5 )
(byte) play_lock_current::ypos2#4 ← phi( play_lock_current::@2/(byte) play_lock_current::ypos2#5 play_lock_current::@4/(byte) play_lock_current::ypos2#6 )
(byte) play_lock_current::i#4 ← phi( play_lock_current::@2/(byte) play_lock_current::i#1 play_lock_current::@4/(byte) play_lock_current::i#6 )
(byte*) current_piece_gfx#40 ← phi( play_lock_current::@2/(byte*) current_piece_gfx#22 play_lock_current::@4/(byte*) current_piece_gfx#56 )
(byte) play_lock_current::c#2 ← phi( play_lock_current::@2/(byte) play_lock_current::c#3 play_lock_current::@4/(byte) play_lock_current::c#4 )
(byte) play_lock_current::col#2 ← phi( play_lock_current::@2/(byte) play_lock_current::col#4 play_lock_current::@4/(byte) play_lock_current::col#3 )
(byte) play_lock_current::col#1 ← ++ (byte) play_lock_current::col#2
(byte) play_lock_current::c#1 ← (byte) play_lock_current::c#2 + rangenext(0,3)
(bool~) play_lock_current::$3 ← (byte) play_lock_current::c#1 != rangelast(0,3)
if((bool~) play_lock_current::$3) goto play_lock_current::@2
to:play_lock_current::@5
play_lock_current::@4: scope:[play_lock_current] from play_lock_current::@2
(byte) current_xpos#90 ← phi( play_lock_current::@2/(byte) current_xpos#89 )
(byte) play_lock_current::l#5 ← phi( play_lock_current::@2/(byte) play_lock_current::l#4 )
(byte) play_lock_current::ypos2#6 ← phi( play_lock_current::@2/(byte) play_lock_current::ypos2#5 )
(byte) play_lock_current::i#6 ← phi( play_lock_current::@2/(byte) play_lock_current::i#1 )
(byte*) current_piece_gfx#56 ← phi( play_lock_current::@2/(byte*) current_piece_gfx#22 )
(byte) play_lock_current::c#4 ← phi( play_lock_current::@2/(byte) play_lock_current::c#3 )
(byte) play_lock_current::col#3 ← phi( play_lock_current::@2/(byte) play_lock_current::col#4 )
(byte*) play_lock_current::playfield_line#1 ← phi( play_lock_current::@2/(byte*) play_lock_current::playfield_line#2 )
(byte) current_piece_char#17 ← phi( play_lock_current::@2/(byte) current_piece_char#31 )
*((byte*) play_lock_current::playfield_line#1 + (byte) play_lock_current::col#3) ← (byte) current_piece_char#17
to:play_lock_current::@3
play_lock_current::@5: scope:[play_lock_current] from play_lock_current::@3
(byte) current_piece_char#60 ← phi( play_lock_current::@3/(byte) current_piece_char#44 )
(byte) play_lock_current::i#5 ← phi( play_lock_current::@3/(byte) play_lock_current::i#4 )
(byte*) current_piece_gfx#55 ← phi( play_lock_current::@3/(byte*) current_piece_gfx#40 )
(byte) current_xpos#53 ← phi( play_lock_current::@3/(byte) current_xpos#71 )
(byte) play_lock_current::l#2 ← phi( play_lock_current::@3/(byte) play_lock_current::l#3 )
(byte) play_lock_current::ypos2#3 ← phi( play_lock_current::@3/(byte) play_lock_current::ypos2#4 )
(byte) play_lock_current::ypos2#1 ← (byte) play_lock_current::ypos2#3 + (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) play_lock_current::l#1 ← (byte) play_lock_current::l#2 + rangenext(0,3)
(bool~) play_lock_current::$4 ← (byte) play_lock_current::l#1 != rangelast(0,3)
if((bool~) play_lock_current::$4) goto play_lock_current::@1
to:play_lock_current::@return
play_lock_current::@return: scope:[play_lock_current] from play_lock_current::@5
return
to:@return
play_spawn_current: scope:[play_spawn_current] from main::@29 main::@30 play_move_down::@21
(byte) game_over#75 ← phi( main::@29/(byte) game_over#30 main::@30/(byte) game_over#7 play_move_down::@21/(byte) game_over#26 )
(byte) next_piece_idx#17 ← phi( main::@29/(byte) next_piece_idx#32 main::@30/(byte) next_piece_idx#7 play_move_down::@21/(byte) next_piece_idx#29 )
(byte) play_spawn_current::current_piece_idx#0 ← (byte) next_piece_idx#17
(byte/signed word/word/dword/signed dword~) play_spawn_current::$0 ← (byte) play_spawn_current::current_piece_idx#0 * (byte/signed byte/word/signed word/dword/signed dword) 2
(byte*) current_piece#5 ← ((byte*)) *((word[]) PIECES#0 + (byte/signed word/word/dword/signed dword~) play_spawn_current::$0)
(byte) current_piece_char#5 ← *((byte[]) PIECES_CHARS#0 + (byte) play_spawn_current::current_piece_idx#0)
(byte) current_orientation#8 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte*~) play_spawn_current::$1 ← (byte*) current_piece#5 + (byte) current_orientation#8
(byte*) current_piece_gfx#8 ← (byte*~) play_spawn_current::$1
(byte) current_xpos#9 ← *((byte[]) PIECES_START_X#0 + (byte) play_spawn_current::current_piece_idx#0)
(byte) current_ypos#6 ← *((byte[]) PIECES_START_Y#0 + (byte) play_spawn_current::current_piece_idx#0)
(byte) play_collision::xpos#4 ← (byte) current_xpos#9
(byte) play_collision::ypos#4 ← (byte) current_ypos#6
(byte) play_collision::orientation#4 ← (byte) current_orientation#8
call play_collision
(byte) play_collision::return#10 ← (byte) play_collision::return#5
to:play_spawn_current::@10
play_spawn_current::@10: scope:[play_spawn_current] from play_spawn_current
(byte) game_over#65 ← phi( play_spawn_current/(byte) game_over#75 )
(byte) current_ypos#80 ← phi( play_spawn_current/(byte) current_ypos#6 )
(byte) current_xpos#103 ← phi( play_spawn_current/(byte) current_xpos#9 )
(byte*) current_piece_gfx#91 ← phi( play_spawn_current/(byte*) current_piece_gfx#8 )
(byte) current_orientation#79 ← phi( play_spawn_current/(byte) current_orientation#8 )
(byte) current_piece_char#76 ← phi( play_spawn_current/(byte) current_piece_char#5 )
(byte*) current_piece#73 ← phi( play_spawn_current/(byte*) current_piece#5 )
(byte) play_collision::return#16 ← phi( play_spawn_current/(byte) play_collision::return#10 )
(byte~) play_spawn_current::$2 ← (byte) play_collision::return#16
(bool~) play_spawn_current::$3 ← (byte~) play_spawn_current::$2 == (byte) COLLISION_PLAYFIELD#0
(bool~) play_spawn_current::$4 ← ! (bool~) play_spawn_current::$3
if((bool~) play_spawn_current::$4) goto play_spawn_current::@1
to:play_spawn_current::@2
play_spawn_current::@1: scope:[play_spawn_current] from play_spawn_current::@10 play_spawn_current::@2
(byte) game_over#52 ← phi( play_spawn_current::@10/(byte) game_over#65 play_spawn_current::@2/(byte) game_over#5 )
(byte) current_ypos#70 ← phi( play_spawn_current::@10/(byte) current_ypos#80 play_spawn_current::@2/(byte) current_ypos#81 )
(byte) current_xpos#91 ← phi( play_spawn_current::@10/(byte) current_xpos#103 play_spawn_current::@2/(byte) current_xpos#104 )
(byte*) current_piece_gfx#74 ← phi( play_spawn_current::@10/(byte*) current_piece_gfx#91 play_spawn_current::@2/(byte*) current_piece_gfx#92 )
(byte) current_orientation#69 ← phi( play_spawn_current::@10/(byte) current_orientation#79 play_spawn_current::@2/(byte) current_orientation#80 )
(byte) current_piece_char#61 ← phi( play_spawn_current::@10/(byte) current_piece_char#76 play_spawn_current::@2/(byte) current_piece_char#77 )
(byte*) current_piece#62 ← phi( play_spawn_current::@10/(byte*) current_piece#73 play_spawn_current::@2/(byte*) current_piece#74 )
(byte) play_spawn_current::piece_idx#0 ← (byte/signed byte/word/signed word/dword/signed dword) 7
to:play_spawn_current::@3
play_spawn_current::@2: scope:[play_spawn_current] from play_spawn_current::@10
(byte) current_ypos#81 ← phi( play_spawn_current::@10/(byte) current_ypos#80 )
(byte) current_xpos#104 ← phi( play_spawn_current::@10/(byte) current_xpos#103 )
(byte*) current_piece_gfx#92 ← phi( play_spawn_current::@10/(byte*) current_piece_gfx#91 )
(byte) current_orientation#80 ← phi( play_spawn_current::@10/(byte) current_orientation#79 )
(byte) current_piece_char#77 ← phi( play_spawn_current::@10/(byte) current_piece_char#76 )
(byte*) current_piece#74 ← phi( play_spawn_current::@10/(byte*) current_piece#73 )
(byte) game_over#5 ← (byte/signed byte/word/signed word/dword/signed dword) 1
to:play_spawn_current::@1
play_spawn_current::@3: scope:[play_spawn_current] from play_spawn_current::@1 play_spawn_current::@9
(byte) game_over#39 ← phi( play_spawn_current::@1/(byte) game_over#52 play_spawn_current::@9/(byte) game_over#53 )
(byte) current_ypos#57 ← phi( play_spawn_current::@1/(byte) current_ypos#70 play_spawn_current::@9/(byte) current_ypos#71 )
(byte) current_xpos#72 ← phi( play_spawn_current::@1/(byte) current_xpos#91 play_spawn_current::@9/(byte) current_xpos#92 )
(byte*) current_piece_gfx#57 ← phi( play_spawn_current::@1/(byte*) current_piece_gfx#74 play_spawn_current::@9/(byte*) current_piece_gfx#75 )
(byte) current_orientation#56 ← phi( play_spawn_current::@1/(byte) current_orientation#69 play_spawn_current::@9/(byte) current_orientation#70 )
(byte) current_piece_char#45 ← phi( play_spawn_current::@1/(byte) current_piece_char#61 play_spawn_current::@9/(byte) current_piece_char#62 )
(byte*) current_piece#48 ← phi( play_spawn_current::@1/(byte*) current_piece#62 play_spawn_current::@9/(byte*) current_piece#63 )
(byte) play_spawn_current::piece_idx#2 ← phi( play_spawn_current::@1/(byte) play_spawn_current::piece_idx#0 play_spawn_current::@9/(byte) play_spawn_current::piece_idx#1 )
(bool~) play_spawn_current::$5 ← (byte) play_spawn_current::piece_idx#2 == (byte/signed byte/word/signed word/dword/signed dword) 7
if((bool~) play_spawn_current::$5) goto play_spawn_current::@4
to:play_spawn_current::@5
play_spawn_current::@4: scope:[play_spawn_current] from play_spawn_current::@3
(byte) game_over#85 ← phi( play_spawn_current::@3/(byte) game_over#39 )
(byte) current_ypos#96 ← phi( play_spawn_current::@3/(byte) current_ypos#57 )
(byte) current_xpos#120 ← phi( play_spawn_current::@3/(byte) current_xpos#72 )
(byte*) current_piece_gfx#110 ← phi( play_spawn_current::@3/(byte*) current_piece_gfx#57 )
(byte) current_orientation#94 ← phi( play_spawn_current::@3/(byte) current_orientation#56 )
(byte) current_piece_char#97 ← phi( play_spawn_current::@3/(byte) current_piece_char#45 )
(byte*) current_piece#90 ← phi( play_spawn_current::@3/(byte*) current_piece#48 )
to:play_spawn_current::sid_rnd1
play_spawn_current::sid_rnd1: scope:[play_spawn_current] from play_spawn_current::@4
(byte) game_over#76 ← phi( play_spawn_current::@4/(byte) game_over#85 )
(byte) current_ypos#90 ← phi( play_spawn_current::@4/(byte) current_ypos#96 )
(byte) current_xpos#114 ← phi( play_spawn_current::@4/(byte) current_xpos#120 )
(byte*) current_piece_gfx#101 ← phi( play_spawn_current::@4/(byte*) current_piece_gfx#110 )
(byte) current_orientation#89 ← phi( play_spawn_current::@4/(byte) current_orientation#94 )
(byte) current_piece_char#89 ← phi( play_spawn_current::@4/(byte) current_piece_char#97 )
(byte*) current_piece#83 ← phi( play_spawn_current::@4/(byte*) current_piece#90 )
(byte) play_spawn_current::sid_rnd1_return#0 ← *((byte*) SID_VOICE3_OSC#0)
to:play_spawn_current::sid_rnd1_@return
play_spawn_current::sid_rnd1_@return: scope:[play_spawn_current] from play_spawn_current::sid_rnd1
(byte) game_over#66 ← phi( play_spawn_current::sid_rnd1/(byte) game_over#76 )
(byte) current_ypos#82 ← phi( play_spawn_current::sid_rnd1/(byte) current_ypos#90 )
(byte) current_xpos#105 ← phi( play_spawn_current::sid_rnd1/(byte) current_xpos#114 )
(byte*) current_piece_gfx#93 ← phi( play_spawn_current::sid_rnd1/(byte*) current_piece_gfx#101 )
(byte) current_orientation#81 ← phi( play_spawn_current::sid_rnd1/(byte) current_orientation#89 )
(byte) current_piece_char#78 ← phi( play_spawn_current::sid_rnd1/(byte) current_piece_char#89 )
(byte*) current_piece#75 ← phi( play_spawn_current::sid_rnd1/(byte*) current_piece#83 )
(byte) play_spawn_current::sid_rnd1_return#2 ← phi( play_spawn_current::sid_rnd1/(byte) play_spawn_current::sid_rnd1_return#0 )
(byte) play_spawn_current::sid_rnd1_return#1 ← (byte) play_spawn_current::sid_rnd1_return#2
to:play_spawn_current::@9
play_spawn_current::@9: scope:[play_spawn_current] from play_spawn_current::sid_rnd1_@return
(byte) game_over#53 ← phi( play_spawn_current::sid_rnd1_@return/(byte) game_over#66 )
(byte) current_ypos#71 ← phi( play_spawn_current::sid_rnd1_@return/(byte) current_ypos#82 )
(byte) current_xpos#92 ← phi( play_spawn_current::sid_rnd1_@return/(byte) current_xpos#105 )
(byte*) current_piece_gfx#75 ← phi( play_spawn_current::sid_rnd1_@return/(byte*) current_piece_gfx#93 )
(byte) current_orientation#70 ← phi( play_spawn_current::sid_rnd1_@return/(byte) current_orientation#81 )
(byte) current_piece_char#62 ← phi( play_spawn_current::sid_rnd1_@return/(byte) current_piece_char#78 )
(byte*) current_piece#63 ← phi( play_spawn_current::sid_rnd1_@return/(byte*) current_piece#75 )
(byte) play_spawn_current::sid_rnd1_return#3 ← phi( play_spawn_current::sid_rnd1_@return/(byte) play_spawn_current::sid_rnd1_return#1 )
(byte~) play_spawn_current::$6 ← (byte) play_spawn_current::sid_rnd1_return#3
(byte~) play_spawn_current::$7 ← (byte~) play_spawn_current::$6 & (byte/signed byte/word/signed word/dword/signed dword) 7
(byte) play_spawn_current::piece_idx#1 ← (byte~) play_spawn_current::$7
to:play_spawn_current::@3
play_spawn_current::@5: scope:[play_spawn_current] from play_spawn_current::@3
(byte) game_over#29 ← phi( play_spawn_current::@3/(byte) game_over#39 )
(byte) current_ypos#45 ← phi( play_spawn_current::@3/(byte) current_ypos#57 )
(byte) current_xpos#54 ← phi( play_spawn_current::@3/(byte) current_xpos#72 )
(byte*) current_piece_gfx#41 ← phi( play_spawn_current::@3/(byte*) current_piece_gfx#57 )
(byte) current_orientation#45 ← phi( play_spawn_current::@3/(byte) current_orientation#56 )
(byte) current_piece_char#32 ← phi( play_spawn_current::@3/(byte) current_piece_char#45 )
(byte*) current_piece#35 ← phi( play_spawn_current::@3/(byte*) current_piece#48 )
(byte) play_spawn_current::piece_idx#3 ← phi( play_spawn_current::@3/(byte) play_spawn_current::piece_idx#2 )
(byte) next_piece_idx#5 ← (byte) play_spawn_current::piece_idx#3
to:play_spawn_current::@return
play_spawn_current::@return: scope:[play_spawn_current] from play_spawn_current::@5
(byte) next_piece_idx#18 ← phi( play_spawn_current::@5/(byte) next_piece_idx#5 )
(byte) game_over#16 ← phi( play_spawn_current::@5/(byte) game_over#29 )
(byte) current_ypos#24 ← phi( play_spawn_current::@5/(byte) current_ypos#45 )
(byte) current_xpos#30 ← phi( play_spawn_current::@5/(byte) current_xpos#54 )
(byte*) current_piece_gfx#23 ← phi( play_spawn_current::@5/(byte*) current_piece_gfx#41 )
(byte) current_orientation#26 ← phi( play_spawn_current::@5/(byte) current_orientation#45 )
(byte) current_piece_char#18 ← phi( play_spawn_current::@5/(byte) current_piece_char#32 )
(byte*) current_piece#18 ← phi( play_spawn_current::@5/(byte*) current_piece#35 )
(byte*) current_piece#6 ← (byte*) current_piece#18
(byte) current_piece_char#6 ← (byte) current_piece_char#18
(byte) current_orientation#9 ← (byte) current_orientation#26
(byte*) current_piece_gfx#9 ← (byte*) current_piece_gfx#23
(byte) current_xpos#10 ← (byte) current_xpos#30
(byte) current_ypos#7 ← (byte) current_ypos#24
(byte) game_over#6 ← (byte) game_over#16
(byte) next_piece_idx#6 ← (byte) next_piece_idx#18
return
to:@return
play_remove_lines: scope:[play_remove_lines] from play_move_down::@19
(byte~) play_remove_lines::$0 ← (byte) PLAYFIELD_LINES#0 * (byte) PLAYFIELD_COLS#0
(byte/signed word/word/dword/signed dword~) play_remove_lines::$1 ← (byte~) play_remove_lines::$0 - (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) play_remove_lines::r#0 ← (byte/signed word/word/dword/signed dword~) play_remove_lines::$1
(byte~) play_remove_lines::$2 ← (byte) PLAYFIELD_LINES#0 * (byte) PLAYFIELD_COLS#0
(byte/signed word/word/dword/signed dword~) play_remove_lines::$3 ← (byte~) play_remove_lines::$2 - (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) play_remove_lines::w#0 ← (byte/signed word/word/dword/signed dword~) play_remove_lines::$3
(byte) play_remove_lines::removed#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte/signed word/word/dword/signed dword~) play_remove_lines::$4 ← (byte) PLAYFIELD_LINES#0 - (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) play_remove_lines::y#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:play_remove_lines::@1
play_remove_lines::@1: scope:[play_remove_lines] from play_remove_lines play_remove_lines::@7
(byte) play_remove_lines::removed#11 ← phi( play_remove_lines/(byte) play_remove_lines::removed#0 play_remove_lines::@7/(byte) play_remove_lines::removed#8 )
(byte) play_remove_lines::y#8 ← phi( play_remove_lines/(byte) play_remove_lines::y#0 play_remove_lines::@7/(byte) play_remove_lines::y#1 )
(byte) play_remove_lines::w#12 ← phi( play_remove_lines/(byte) play_remove_lines::w#0 play_remove_lines::@7/(byte) play_remove_lines::w#11 )
(byte) play_remove_lines::r#3 ← phi( play_remove_lines/(byte) play_remove_lines::r#0 play_remove_lines::@7/(byte) play_remove_lines::r#5 )
(byte) play_remove_lines::full#0 ← (byte/signed byte/word/signed word/dword/signed dword) 1
(byte/signed word/word/dword/signed dword~) play_remove_lines::$5 ← (byte) PLAYFIELD_COLS#0 - (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) play_remove_lines::x#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:play_remove_lines::@2
play_remove_lines::@2: scope:[play_remove_lines] from play_remove_lines::@1 play_remove_lines::@3
(byte) play_remove_lines::removed#9 ← phi( play_remove_lines::@1/(byte) play_remove_lines::removed#11 play_remove_lines::@3/(byte) play_remove_lines::removed#6 )
(byte) play_remove_lines::y#6 ← phi( play_remove_lines::@1/(byte) play_remove_lines::y#8 play_remove_lines::@3/(byte) play_remove_lines::y#5 )
(byte) play_remove_lines::full#4 ← phi( play_remove_lines::@1/(byte) play_remove_lines::full#0 play_remove_lines::@3/(byte) play_remove_lines::full#3 )
(byte) play_remove_lines::x#3 ← phi( play_remove_lines::@1/(byte) play_remove_lines::x#0 play_remove_lines::@3/(byte) play_remove_lines::x#1 )
(byte) play_remove_lines::w#8 ← phi( play_remove_lines::@1/(byte) play_remove_lines::w#12 play_remove_lines::@3/(byte) play_remove_lines::w#1 )
(byte) play_remove_lines::r#2 ← phi( play_remove_lines::@1/(byte) play_remove_lines::r#3 play_remove_lines::@3/(byte) play_remove_lines::r#4 )
(byte) play_remove_lines::c#0 ← *((byte[$3]) playfield#0 + (byte) play_remove_lines::r#2)
(byte) play_remove_lines::r#1 ← -- (byte) play_remove_lines::r#2
(bool~) play_remove_lines::$6 ← (byte) play_remove_lines::c#0 == (byte/signed byte/word/signed word/dword/signed dword) 0
(bool~) play_remove_lines::$7 ← ! (bool~) play_remove_lines::$6
if((bool~) play_remove_lines::$7) goto play_remove_lines::@3
to:play_remove_lines::@4
play_remove_lines::@3: scope:[play_remove_lines] from play_remove_lines::@2 play_remove_lines::@4
(byte) play_remove_lines::removed#6 ← phi( play_remove_lines::@2/(byte) play_remove_lines::removed#9 play_remove_lines::@4/(byte) play_remove_lines::removed#10 )
(byte) play_remove_lines::y#5 ← phi( play_remove_lines::@2/(byte) play_remove_lines::y#6 play_remove_lines::@4/(byte) play_remove_lines::y#7 )
(byte) play_remove_lines::full#3 ← phi( play_remove_lines::@2/(byte) play_remove_lines::full#4 play_remove_lines::@4/(byte) play_remove_lines::full#1 )
(byte) play_remove_lines::r#4 ← phi( play_remove_lines::@2/(byte) play_remove_lines::r#1 play_remove_lines::@4/(byte) play_remove_lines::r#6 )
(byte) play_remove_lines::x#2 ← phi( play_remove_lines::@2/(byte) play_remove_lines::x#3 play_remove_lines::@4/(byte) play_remove_lines::x#4 )
(byte) play_remove_lines::w#4 ← phi( play_remove_lines::@2/(byte) play_remove_lines::w#8 play_remove_lines::@4/(byte) play_remove_lines::w#9 )
(byte) play_remove_lines::c#1 ← phi( play_remove_lines::@2/(byte) play_remove_lines::c#0 play_remove_lines::@4/(byte) play_remove_lines::c#2 )
*((byte[$3]) playfield#0 + (byte) play_remove_lines::w#4) ← (byte) play_remove_lines::c#1
(byte) play_remove_lines::w#1 ← -- (byte) play_remove_lines::w#4
(byte) play_remove_lines::x#1 ← (byte) play_remove_lines::x#2 + rangenext(0,play_remove_lines::$5)
(bool~) play_remove_lines::$8 ← (byte) play_remove_lines::x#1 != rangelast(0,play_remove_lines::$5)
if((bool~) play_remove_lines::$8) goto play_remove_lines::@2
to:play_remove_lines::@5
play_remove_lines::@4: scope:[play_remove_lines] from play_remove_lines::@2
(byte) play_remove_lines::removed#10 ← phi( play_remove_lines::@2/(byte) play_remove_lines::removed#9 )
(byte) play_remove_lines::y#7 ← phi( play_remove_lines::@2/(byte) play_remove_lines::y#6 )
(byte) play_remove_lines::r#6 ← phi( play_remove_lines::@2/(byte) play_remove_lines::r#1 )
(byte) play_remove_lines::x#4 ← phi( play_remove_lines::@2/(byte) play_remove_lines::x#3 )
(byte) play_remove_lines::w#9 ← phi( play_remove_lines::@2/(byte) play_remove_lines::w#8 )
(byte) play_remove_lines::c#2 ← phi( play_remove_lines::@2/(byte) play_remove_lines::c#0 )
(byte) play_remove_lines::full#1 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:play_remove_lines::@3
play_remove_lines::@5: scope:[play_remove_lines] from play_remove_lines::@3
(byte) play_remove_lines::r#7 ← phi( play_remove_lines::@3/(byte) play_remove_lines::r#4 )
(byte) play_remove_lines::removed#4 ← phi( play_remove_lines::@3/(byte) play_remove_lines::removed#6 )
(byte) play_remove_lines::w#10 ← phi( play_remove_lines::@3/(byte) play_remove_lines::w#1 )
(byte) play_remove_lines::y#3 ← phi( play_remove_lines::@3/(byte) play_remove_lines::y#5 )
(byte) play_remove_lines::full#2 ← phi( play_remove_lines::@3/(byte) play_remove_lines::full#3 )
(bool~) play_remove_lines::$9 ← (byte) play_remove_lines::full#2 == (byte/signed byte/word/signed word/dword/signed dword) 1
(bool~) play_remove_lines::$10 ← ! (bool~) play_remove_lines::$9
if((bool~) play_remove_lines::$10) goto play_remove_lines::@7
to:play_remove_lines::@6
play_remove_lines::@7: scope:[play_remove_lines] from play_remove_lines::@5 play_remove_lines::@6
(byte) play_remove_lines::removed#8 ← phi( play_remove_lines::@5/(byte) play_remove_lines::removed#4 play_remove_lines::@6/(byte) play_remove_lines::removed#1 )
(byte) play_remove_lines::r#5 ← phi( play_remove_lines::@5/(byte) play_remove_lines::r#7 play_remove_lines::@6/(byte) play_remove_lines::r#8 )
(byte) play_remove_lines::w#11 ← phi( play_remove_lines::@5/(byte) play_remove_lines::w#10 play_remove_lines::@6/(byte) play_remove_lines::w#2 )
(byte) play_remove_lines::y#2 ← phi( play_remove_lines::@5/(byte) play_remove_lines::y#3 play_remove_lines::@6/(byte) play_remove_lines::y#4 )
(byte) play_remove_lines::y#1 ← (byte) play_remove_lines::y#2 + rangenext(0,play_remove_lines::$4)
(bool~) play_remove_lines::$12 ← (byte) play_remove_lines::y#1 != rangelast(0,play_remove_lines::$4)
if((bool~) play_remove_lines::$12) goto play_remove_lines::@1
to:play_remove_lines::@9
play_remove_lines::@6: scope:[play_remove_lines] from play_remove_lines::@5
(byte) play_remove_lines::r#8 ← phi( play_remove_lines::@5/(byte) play_remove_lines::r#7 )
(byte) play_remove_lines::y#4 ← phi( play_remove_lines::@5/(byte) play_remove_lines::y#3 )
(byte) play_remove_lines::removed#2 ← phi( play_remove_lines::@5/(byte) play_remove_lines::removed#4 )
(byte) play_remove_lines::w#5 ← phi( play_remove_lines::@5/(byte) play_remove_lines::w#10 )
(byte~) play_remove_lines::$11 ← (byte) play_remove_lines::w#5 + (byte) PLAYFIELD_COLS#0
(byte) play_remove_lines::w#2 ← (byte~) play_remove_lines::$11
(byte) play_remove_lines::removed#1 ← ++ (byte) play_remove_lines::removed#2
to:play_remove_lines::@7
play_remove_lines::@9: scope:[play_remove_lines] from play_remove_lines::@10 play_remove_lines::@7
(byte) play_remove_lines::removed#5 ← phi( play_remove_lines::@10/(byte) play_remove_lines::removed#7 play_remove_lines::@7/(byte) play_remove_lines::removed#8 )
(byte) play_remove_lines::w#6 ← phi( play_remove_lines::@10/(byte) play_remove_lines::w#3 play_remove_lines::@7/(byte) play_remove_lines::w#11 )
(bool~) play_remove_lines::$13 ← (byte) play_remove_lines::w#6 != (byte/word/signed word/dword/signed dword) $ff
if((bool~) play_remove_lines::$13) goto play_remove_lines::@10
to:play_remove_lines::@11
play_remove_lines::@10: scope:[play_remove_lines] from play_remove_lines::@9
(byte) play_remove_lines::removed#7 ← phi( play_remove_lines::@9/(byte) play_remove_lines::removed#5 )
(byte) play_remove_lines::w#7 ← phi( play_remove_lines::@9/(byte) play_remove_lines::w#6 )
*((byte[$3]) playfield#0 + (byte) play_remove_lines::w#7) ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) play_remove_lines::w#3 ← -- (byte) play_remove_lines::w#7
to:play_remove_lines::@9
play_remove_lines::@11: scope:[play_remove_lines] from play_remove_lines::@9
(byte) play_remove_lines::removed#3 ← phi( play_remove_lines::@9/(byte) play_remove_lines::removed#5 )
(byte) play_remove_lines::return#1 ← (byte) play_remove_lines::removed#3
to:play_remove_lines::@return
play_remove_lines::@return: scope:[play_remove_lines] from play_remove_lines::@11
(byte) play_remove_lines::return#4 ← phi( play_remove_lines::@11/(byte) play_remove_lines::return#1 )
(byte) play_remove_lines::return#2 ← (byte) play_remove_lines::return#4
return
to:@return
play_update_score: scope:[play_update_score] from play_move_down::@20
(byte) level_bcd#48 ← phi( play_move_down::@20/(byte) level_bcd#30 )
(byte) current_movedown_slow#54 ← phi( play_move_down::@20/(byte) current_movedown_slow#36 )
(byte) level#50 ← phi( play_move_down::@20/(byte) level#32 )
(dword) score_bcd#28 ← phi( play_move_down::@20/(dword) score_bcd#25 )
(word) lines_bcd#28 ← phi( play_move_down::@20/(word) lines_bcd#25 )
(byte) play_update_score::removed#1 ← phi( play_move_down::@20/(byte) play_update_score::removed#0 )
(bool~) play_update_score::$0 ← (byte) play_update_score::removed#1 != (byte/signed byte/word/signed word/dword/signed dword) 0
(bool~) play_update_score::$1 ← ! (bool~) play_update_score::$0
if((bool~) play_update_score::$1) goto play_update_score::@1
to:play_update_score::@2
play_update_score::@1: scope:[play_update_score] from play_update_score
(byte) level_bcd#34 ← phi( play_update_score/(byte) level_bcd#48 )
(byte) current_movedown_slow#40 ← phi( play_update_score/(byte) current_movedown_slow#54 )
(byte) level#36 ← phi( play_update_score/(byte) level#50 )
(dword) score_bcd#29 ← phi( play_update_score/(dword) score_bcd#28 )
(word) lines_bcd#29 ← phi( play_update_score/(word) lines_bcd#28 )
to:play_update_score::@return
play_update_score::@2: scope:[play_update_score] from play_update_score
(byte) level_bcd#49 ← phi( play_update_score/(byte) level_bcd#48 )
(byte) current_movedown_slow#55 ← phi( play_update_score/(byte) current_movedown_slow#54 )
(byte) level#51 ← phi( play_update_score/(byte) level#50 )
(dword) score_bcd#15 ← phi( play_update_score/(dword) score_bcd#28 )
(byte) play_update_score::removed#2 ← phi( play_update_score/(byte) play_update_score::removed#1 )
(word) lines_bcd#16 ← phi( play_update_score/(word) lines_bcd#28 )
(byte~) play_update_score::$2 ← < (word) lines_bcd#16
(byte~) play_update_score::$3 ← (byte~) play_update_score::$2 & (byte/word/signed word/dword/signed dword) $f0
(byte) play_update_score::lines_before#0 ← (byte~) play_update_score::$3
(byte/signed word/word/dword/signed dword~) play_update_score::$4 ← (byte) play_update_score::removed#2 * (byte/signed byte/word/signed word/dword/signed dword) 4
(dword) play_update_score::add_bcd#0 ← *((dword[5]) score_add_bcd#0 + (byte/signed word/word/dword/signed dword~) play_update_score::$4)
asm { sed }
(word) lines_bcd#5 ← (word) lines_bcd#16 + (byte) play_update_score::removed#2
(dword) score_bcd#5 ← (dword) score_bcd#15 + (dword) play_update_score::add_bcd#0
asm { cld }
(byte~) play_update_score::$5 ← < (word) lines_bcd#5
(byte~) play_update_score::$6 ← (byte~) play_update_score::$5 & (byte/word/signed word/dword/signed dword) $f0
(byte) play_update_score::lines_after#0 ← (byte~) play_update_score::$6
(bool~) play_update_score::$7 ← (byte) play_update_score::lines_before#0 != (byte) play_update_score::lines_after#0
(bool~) play_update_score::$8 ← ! (bool~) play_update_score::$7
if((bool~) play_update_score::$8) goto play_update_score::@4
to:play_update_score::@3
play_update_score::@4: scope:[play_update_score] from play_update_score::@2
(byte) level_bcd#35 ← phi( play_update_score::@2/(byte) level_bcd#49 )
(byte) current_movedown_slow#41 ← phi( play_update_score::@2/(byte) current_movedown_slow#55 )
(byte) level#37 ← phi( play_update_score::@2/(byte) level#51 )
(dword) score_bcd#30 ← phi( play_update_score::@2/(dword) score_bcd#5 )
(word) lines_bcd#30 ← phi( play_update_score::@2/(word) lines_bcd#5 )
to:play_update_score::@return
play_update_score::@3: scope:[play_update_score] from play_update_score::@2
(dword) score_bcd#41 ← phi( play_update_score::@2/(dword) score_bcd#5 )
(word) lines_bcd#41 ← phi( play_update_score::@2/(word) lines_bcd#5 )
(byte) level_bcd#33 ← phi( play_update_score::@2/(byte) level_bcd#49 )
(byte) current_movedown_slow#39 ← phi( play_update_score::@2/(byte) current_movedown_slow#55 )
(byte) level#35 ← phi( play_update_score::@2/(byte) level#51 )
call play_increase_level
to:play_update_score::@5
play_update_score::@5: scope:[play_update_score] from play_update_score::@3
(dword) score_bcd#31 ← phi( play_update_score::@3/(dword) score_bcd#41 )
(word) lines_bcd#31 ← phi( play_update_score::@3/(word) lines_bcd#41 )
(byte) level_bcd#18 ← phi( play_update_score::@3/(byte) level_bcd#9 )
(byte) current_movedown_slow#22 ← phi( play_update_score::@3/(byte) current_movedown_slow#11 )
(byte) level#18 ← phi( play_update_score::@3/(byte) level#8 )
(byte) level#5 ← (byte) level#18
(byte) current_movedown_slow#7 ← (byte) current_movedown_slow#22
(byte) level_bcd#5 ← (byte) level_bcd#18
to:play_update_score::@return
play_update_score::@return: scope:[play_update_score] from play_update_score::@1 play_update_score::@4 play_update_score::@5
(byte) level_bcd#19 ← phi( play_update_score::@1/(byte) level_bcd#34 play_update_score::@4/(byte) level_bcd#35 play_update_score::@5/(byte) level_bcd#5 )
(byte) current_movedown_slow#23 ← phi( play_update_score::@1/(byte) current_movedown_slow#40 play_update_score::@4/(byte) current_movedown_slow#41 play_update_score::@5/(byte) current_movedown_slow#7 )
(byte) level#19 ← phi( play_update_score::@1/(byte) level#36 play_update_score::@4/(byte) level#37 play_update_score::@5/(byte) level#5 )
(dword) score_bcd#16 ← phi( play_update_score::@1/(dword) score_bcd#29 play_update_score::@4/(dword) score_bcd#30 play_update_score::@5/(dword) score_bcd#31 )
(word) lines_bcd#17 ← phi( play_update_score::@1/(word) lines_bcd#29 play_update_score::@4/(word) lines_bcd#30 play_update_score::@5/(word) lines_bcd#31 )
(word) lines_bcd#6 ← (word) lines_bcd#17
(dword) score_bcd#6 ← (dword) score_bcd#16
(byte) level#6 ← (byte) level#19
(byte) current_movedown_slow#8 ← (byte) current_movedown_slow#23
(byte) level_bcd#6 ← (byte) level_bcd#19
return
to:@return
play_increase_level: scope:[play_increase_level] from play_update_score::@3
(byte) level_bcd#50 ← phi( play_update_score::@3/(byte) level_bcd#33 )
(byte) level#20 ← phi( play_update_score::@3/(byte) level#35 )
(byte) level#7 ← ++ (byte) level#20
(bool~) play_increase_level::$0 ← (byte) level#7 > (byte/signed byte/word/signed word/dword/signed dword) $1d
if((bool~) play_increase_level::$0) goto play_increase_level::@1
to:play_increase_level::@4
play_increase_level::@1: scope:[play_increase_level] from play_increase_level
(byte) level#90 ← phi( play_increase_level/(byte) level#7 )
(byte) level_bcd#36 ← phi( play_increase_level/(byte) level_bcd#50 )
(byte) current_movedown_slow#9 ← (byte/signed byte/word/signed word/dword/signed dword) 1
to:play_increase_level::@2
play_increase_level::@4: scope:[play_increase_level] from play_increase_level
(byte) level_bcd#37 ← phi( play_increase_level/(byte) level_bcd#50 )
(byte) level#21 ← phi( play_increase_level/(byte) level#7 )
(byte) current_movedown_slow#10 ← *((byte[]) MOVEDOWN_SLOW_SPEEDS#0 + (byte) level#21)
to:play_increase_level::@2
play_increase_level::@2: scope:[play_increase_level] from play_increase_level::@1 play_increase_level::@4
(byte) current_movedown_slow#76 ← phi( play_increase_level::@1/(byte) current_movedown_slow#9 play_increase_level::@4/(byte) current_movedown_slow#10 )
(byte) level#79 ← phi( play_increase_level::@1/(byte) level#90 play_increase_level::@4/(byte) level#21 )
(byte) level_bcd#20 ← phi( play_increase_level::@1/(byte) level_bcd#36 play_increase_level::@4/(byte) level_bcd#37 )
(byte) level_bcd#7 ← ++ (byte) level_bcd#20
(byte~) play_increase_level::$1 ← (byte) level_bcd#7 & (byte/signed byte/word/signed word/dword/signed dword) $f
(bool~) play_increase_level::$2 ← (byte~) play_increase_level::$1 == (byte/signed byte/word/signed word/dword/signed dword) $a
(bool~) play_increase_level::$3 ← ! (bool~) play_increase_level::$2
if((bool~) play_increase_level::$3) goto play_increase_level::@3
to:play_increase_level::@6
play_increase_level::@3: scope:[play_increase_level] from play_increase_level::@2 play_increase_level::@6
(byte) level_bcd#64 ← phi( play_increase_level::@2/(byte) level_bcd#7 play_increase_level::@6/(byte) level_bcd#8 )
(byte) current_movedown_slow#69 ← phi( play_increase_level::@2/(byte) current_movedown_slow#76 play_increase_level::@6/(byte) current_movedown_slow#77 )
(byte) level#67 ← phi( play_increase_level::@2/(byte) level#79 play_increase_level::@6/(byte) level#80 )
asm { sed }
(byte) play_increase_level::b#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:play_increase_level::@7
play_increase_level::@6: scope:[play_increase_level] from play_increase_level::@2
(byte) current_movedown_slow#77 ← phi( play_increase_level::@2/(byte) current_movedown_slow#76 )
(byte) level#80 ← phi( play_increase_level::@2/(byte) level#79 )
(byte) level_bcd#21 ← phi( play_increase_level::@2/(byte) level_bcd#7 )
(byte) level_bcd#8 ← (byte) level_bcd#21 + (byte/signed byte/word/signed word/dword/signed dword) 6
to:play_increase_level::@3
play_increase_level::@7: scope:[play_increase_level] from play_increase_level::@3 play_increase_level::@7
(byte) level_bcd#51 ← phi( play_increase_level::@3/(byte) level_bcd#64 play_increase_level::@7/(byte) level_bcd#51 )
(byte) current_movedown_slow#56 ← phi( play_increase_level::@3/(byte) current_movedown_slow#69 play_increase_level::@7/(byte) current_movedown_slow#56 )
(byte) level#52 ← phi( play_increase_level::@3/(byte) level#67 play_increase_level::@7/(byte) level#52 )
(byte) play_increase_level::b#2 ← phi( play_increase_level::@3/(byte) play_increase_level::b#0 play_increase_level::@7/(byte) play_increase_level::b#1 )
(byte/signed word/word/dword/signed dword~) play_increase_level::$4 ← (byte) play_increase_level::b#2 * (byte/signed byte/word/signed word/dword/signed dword) 4
(byte) play_increase_level::b4#0 ← (byte/signed word/word/dword/signed dword~) play_increase_level::$4
*((dword[5]) score_add_bcd#0 + (byte) play_increase_level::b4#0) ← *((dword[5]) score_add_bcd#0 + (byte) play_increase_level::b4#0) + *((dword[]) SCORE_BASE_BCD#0 + (byte) play_increase_level::b4#0)
(byte) play_increase_level::b#1 ← (byte) play_increase_level::b#2 + rangenext(0,4)
(bool~) play_increase_level::$5 ← (byte) play_increase_level::b#1 != rangelast(0,4)
if((bool~) play_increase_level::$5) goto play_increase_level::@7
to:play_increase_level::@8
play_increase_level::@8: scope:[play_increase_level] from play_increase_level::@7
(byte) level_bcd#38 ← phi( play_increase_level::@7/(byte) level_bcd#51 )
(byte) current_movedown_slow#42 ← phi( play_increase_level::@7/(byte) current_movedown_slow#56 )
(byte) level#38 ← phi( play_increase_level::@7/(byte) level#52 )
asm { cld }
to:play_increase_level::@return
play_increase_level::@return: scope:[play_increase_level] from play_increase_level::@8
(byte) level_bcd#22 ← phi( play_increase_level::@8/(byte) level_bcd#38 )
(byte) current_movedown_slow#24 ← phi( play_increase_level::@8/(byte) current_movedown_slow#42 )
(byte) level#22 ← phi( play_increase_level::@8/(byte) level#38 )
(byte) level#8 ← (byte) level#22
(byte) current_movedown_slow#11 ← (byte) current_movedown_slow#24
(byte) level_bcd#9 ← (byte) level_bcd#22
return
to:@return
main: scope:[main] from @38
(byte) level_bcd#106 ← phi( @38/(byte) level_bcd#41 )
(dword) score_bcd#89 ← phi( @38/(dword) score_bcd#34 )
(word) lines_bcd#93 ← phi( @38/(word) lines_bcd#34 )
(byte) current_movedown_counter#62 ← phi( @38/(byte) current_movedown_counter#27 )
(byte) keyboard_modifiers#65 ← phi( @38/(byte) keyboard_modifiers#25 )
(byte) keyboard_events_size#84 ← phi( @38/(byte) keyboard_events_size#28 )
(byte) render_screen_showing#50 ← phi( @38/(byte) render_screen_showing#14 )
(byte) level#104 ← phi( @38/(byte) level#41 )
(byte) game_over#86 ← phi( @38/(byte) game_over#34 )
(byte) current_ypos#97 ← phi( @38/(byte) current_ypos#49 )
(byte) current_xpos#121 ← phi( @38/(byte) current_xpos#58 )
(byte*) current_piece_gfx#111 ← phi( @38/(byte*) current_piece_gfx#45 )
(byte) current_orientation#95 ← phi( @38/(byte) current_orientation#49 )
(byte) current_piece_char#98 ← phi( @38/(byte) current_piece_char#36 )
(byte*) current_piece#91 ← phi( @38/(byte*) current_piece#39 )
(byte) next_piece_idx#77 ← phi( @38/(byte) next_piece_idx#35 )
(byte) current_movedown_slow#83 ← phi( @38/(byte) current_movedown_slow#46 )
(byte) render_screen_render#35 ← phi( @38/(byte) render_screen_render#29 )
(byte) render_screen_show#27 ← phi( @38/(byte) render_screen_show#24 )
call sid_rnd_init
to:main::@25
main::@25: scope:[main] from main
(byte) level_bcd#105 ← phi( main/(byte) level_bcd#106 )
(dword) score_bcd#88 ← phi( main/(dword) score_bcd#89 )
(word) lines_bcd#92 ← phi( main/(word) lines_bcd#93 )
(byte) current_movedown_counter#61 ← phi( main/(byte) current_movedown_counter#62 )
(byte) keyboard_modifiers#64 ← phi( main/(byte) keyboard_modifiers#65 )
(byte) keyboard_events_size#83 ← phi( main/(byte) keyboard_events_size#84 )
(byte) render_screen_showing#49 ← phi( main/(byte) render_screen_showing#50 )
(byte) level#99 ← phi( main/(byte) level#104 )
(byte) game_over#77 ← phi( main/(byte) game_over#86 )
(byte) current_ypos#91 ← phi( main/(byte) current_ypos#97 )
(byte) current_xpos#115 ← phi( main/(byte) current_xpos#121 )
(byte*) current_piece_gfx#102 ← phi( main/(byte*) current_piece_gfx#111 )
(byte) current_orientation#90 ← phi( main/(byte) current_orientation#95 )
(byte) current_piece_char#90 ← phi( main/(byte) current_piece_char#98 )
(byte*) current_piece#84 ← phi( main/(byte*) current_piece#91 )
(byte) next_piece_idx#71 ← phi( main/(byte) next_piece_idx#77 )
(byte) current_movedown_slow#78 ← phi( main/(byte) current_movedown_slow#83 )
(byte) render_screen_render#27 ← phi( main/(byte) render_screen_render#35 )
(byte) render_screen_show#22 ← phi( main/(byte) render_screen_show#27 )
asm { sei }
call render_init
to:main::@26
main::@26: scope:[main] from main::@25
(byte) level_bcd#104 ← phi( main::@25/(byte) level_bcd#105 )
(dword) score_bcd#87 ← phi( main::@25/(dword) score_bcd#88 )
(word) lines_bcd#91 ← phi( main::@25/(word) lines_bcd#92 )
(byte) current_movedown_counter#60 ← phi( main::@25/(byte) current_movedown_counter#61 )
(byte) keyboard_modifiers#63 ← phi( main::@25/(byte) keyboard_modifiers#64 )
(byte) keyboard_events_size#82 ← phi( main::@25/(byte) keyboard_events_size#83 )
(byte) render_screen_showing#48 ← phi( main::@25/(byte) render_screen_showing#49 )
(byte) level#91 ← phi( main::@25/(byte) level#99 )
(byte) game_over#67 ← phi( main::@25/(byte) game_over#77 )
(byte) current_ypos#83 ← phi( main::@25/(byte) current_ypos#91 )
(byte) current_xpos#106 ← phi( main::@25/(byte) current_xpos#115 )
(byte*) current_piece_gfx#94 ← phi( main::@25/(byte*) current_piece_gfx#102 )
(byte) current_orientation#82 ← phi( main::@25/(byte) current_orientation#90 )
(byte) current_piece_char#79 ← phi( main::@25/(byte) current_piece_char#90 )
(byte*) current_piece#76 ← phi( main::@25/(byte*) current_piece#84 )
(byte) next_piece_idx#63 ← phi( main::@25/(byte) next_piece_idx#71 )
(byte) current_movedown_slow#70 ← phi( main::@25/(byte) current_movedown_slow#78 )
(byte) render_screen_render#16 ← phi( main::@25/(byte) render_screen_render#2 )
(byte) render_screen_show#14 ← phi( main::@25/(byte) render_screen_show#2 )
(byte) render_screen_show#5 ← (byte) render_screen_show#14
(byte) render_screen_render#5 ← (byte) render_screen_render#16
call sprites_init
to:main::@27
main::@27: scope:[main] from main::@26
(byte) level_bcd#103 ← phi( main::@26/(byte) level_bcd#104 )
(dword) score_bcd#86 ← phi( main::@26/(dword) score_bcd#87 )
(word) lines_bcd#90 ← phi( main::@26/(word) lines_bcd#91 )
(byte) current_movedown_counter#59 ← phi( main::@26/(byte) current_movedown_counter#60 )
(byte) keyboard_modifiers#61 ← phi( main::@26/(byte) keyboard_modifiers#63 )
(byte) keyboard_events_size#80 ← phi( main::@26/(byte) keyboard_events_size#82 )
(byte) render_screen_showing#47 ← phi( main::@26/(byte) render_screen_showing#48 )
(byte) render_screen_show#62 ← phi( main::@26/(byte) render_screen_show#5 )
(byte) render_screen_render#58 ← phi( main::@26/(byte) render_screen_render#5 )
(byte) level#81 ← phi( main::@26/(byte) level#91 )
(byte) game_over#54 ← phi( main::@26/(byte) game_over#67 )
(byte) current_ypos#72 ← phi( main::@26/(byte) current_ypos#83 )
(byte) current_xpos#93 ← phi( main::@26/(byte) current_xpos#106 )
(byte*) current_piece_gfx#76 ← phi( main::@26/(byte*) current_piece_gfx#94 )
(byte) current_orientation#71 ← phi( main::@26/(byte) current_orientation#82 )
(byte) current_piece_char#63 ← phi( main::@26/(byte) current_piece_char#79 )
(byte*) current_piece#64 ← phi( main::@26/(byte*) current_piece#76 )
(byte) next_piece_idx#54 ← phi( main::@26/(byte) next_piece_idx#63 )
(byte) current_movedown_slow#57 ← phi( main::@26/(byte) current_movedown_slow#70 )
call sprites_irq_init
to:main::@28
main::@28: scope:[main] from main::@27
(byte) level_bcd#102 ← phi( main::@27/(byte) level_bcd#103 )
(dword) score_bcd#85 ← phi( main::@27/(dword) score_bcd#86 )
(word) lines_bcd#89 ← phi( main::@27/(word) lines_bcd#90 )
(byte) current_movedown_counter#58 ← phi( main::@27/(byte) current_movedown_counter#59 )
(byte) keyboard_modifiers#59 ← phi( main::@27/(byte) keyboard_modifiers#61 )
(byte) keyboard_events_size#77 ← phi( main::@27/(byte) keyboard_events_size#80 )
(byte) render_screen_showing#46 ← phi( main::@27/(byte) render_screen_showing#47 )
(byte) render_screen_show#61 ← phi( main::@27/(byte) render_screen_show#62 )
(byte) render_screen_render#53 ← phi( main::@27/(byte) render_screen_render#58 )
(byte) level#60 ← phi( main::@27/(byte) level#81 )
(byte) game_over#40 ← phi( main::@27/(byte) game_over#54 )
(byte) current_ypos#58 ← phi( main::@27/(byte) current_ypos#72 )
(byte) current_xpos#73 ← phi( main::@27/(byte) current_xpos#93 )
(byte*) current_piece_gfx#58 ← phi( main::@27/(byte*) current_piece_gfx#76 )
(byte) current_orientation#57 ← phi( main::@27/(byte) current_orientation#71 )
(byte) current_piece_char#46 ← phi( main::@27/(byte) current_piece_char#63 )
(byte*) current_piece#49 ← phi( main::@27/(byte*) current_piece#64 )
(byte) next_piece_idx#41 ← phi( main::@27/(byte) next_piece_idx#54 )
(byte) current_movedown_slow#43 ← phi( main::@27/(byte) current_movedown_slow#57 )
call play_init
to:main::@29
main::@29: scope:[main] from main::@28
(byte) level_bcd#97 ← phi( main::@28/(byte) level_bcd#102 )
(byte) level#105 ← phi( main::@28/(byte) level#60 )
(dword) score_bcd#81 ← phi( main::@28/(dword) score_bcd#85 )
(word) lines_bcd#84 ← phi( main::@28/(word) lines_bcd#89 )
(byte) current_movedown_counter#54 ← phi( main::@28/(byte) current_movedown_counter#58 )
(byte) keyboard_modifiers#56 ← phi( main::@28/(byte) keyboard_modifiers#59 )
(byte) keyboard_events_size#72 ← phi( main::@28/(byte) keyboard_events_size#77 )
(byte) render_screen_showing#43 ← phi( main::@28/(byte) render_screen_showing#46 )
(byte) render_screen_show#58 ← phi( main::@28/(byte) render_screen_show#61 )
(byte) render_screen_render#49 ← phi( main::@28/(byte) render_screen_render#53 )
(byte) game_over#30 ← phi( main::@28/(byte) game_over#40 )
(byte) current_ypos#46 ← phi( main::@28/(byte) current_ypos#58 )
(byte) current_xpos#55 ← phi( main::@28/(byte) current_xpos#73 )
(byte*) current_piece_gfx#42 ← phi( main::@28/(byte*) current_piece_gfx#58 )
(byte) current_orientation#46 ← phi( main::@28/(byte) current_orientation#57 )
(byte) current_piece_char#33 ← phi( main::@28/(byte) current_piece_char#46 )
(byte*) current_piece#36 ← phi( main::@28/(byte*) current_piece#49 )
(byte) next_piece_idx#32 ← phi( main::@28/(byte) next_piece_idx#41 )
(byte) current_movedown_slow#25 ← phi( main::@28/(byte) current_movedown_slow#2 )
(byte) current_movedown_slow#12 ← (byte) current_movedown_slow#25
call play_spawn_current
to:main::@30
main::@30: scope:[main] from main::@29
(byte) level_bcd#92 ← phi( main::@29/(byte) level_bcd#97 )
(byte) level#100 ← phi( main::@29/(byte) level#105 )
(dword) score_bcd#77 ← phi( main::@29/(dword) score_bcd#81 )
(word) lines_bcd#80 ← phi( main::@29/(word) lines_bcd#84 )
(byte) current_movedown_counter#51 ← phi( main::@29/(byte) current_movedown_counter#54 )
(byte) keyboard_modifiers#53 ← phi( main::@29/(byte) keyboard_modifiers#56 )
(byte) keyboard_events_size#68 ← phi( main::@29/(byte) keyboard_events_size#72 )
(byte) render_screen_showing#39 ← phi( main::@29/(byte) render_screen_showing#43 )
(byte) current_movedown_slow#88 ← phi( main::@29/(byte) current_movedown_slow#12 )
(byte) render_screen_show#55 ← phi( main::@29/(byte) render_screen_show#58 )
(byte) render_screen_render#44 ← phi( main::@29/(byte) render_screen_render#49 )
(byte) next_piece_idx#19 ← phi( main::@29/(byte) next_piece_idx#6 )
(byte) game_over#17 ← phi( main::@29/(byte) game_over#6 )
(byte) current_ypos#25 ← phi( main::@29/(byte) current_ypos#7 )
(byte) current_xpos#31 ← phi( main::@29/(byte) current_xpos#10 )
(byte*) current_piece_gfx#24 ← phi( main::@29/(byte*) current_piece_gfx#9 )
(byte) current_orientation#27 ← phi( main::@29/(byte) current_orientation#9 )
(byte) current_piece_char#19 ← phi( main::@29/(byte) current_piece_char#6 )
(byte*) current_piece#19 ← phi( main::@29/(byte*) current_piece#6 )
(byte*) current_piece#7 ← (byte*) current_piece#19
(byte) current_piece_char#7 ← (byte) current_piece_char#19
(byte) current_orientation#10 ← (byte) current_orientation#27
(byte*) current_piece_gfx#10 ← (byte*) current_piece_gfx#24
(byte) current_xpos#11 ← (byte) current_xpos#31
(byte) current_ypos#8 ← (byte) current_ypos#25
(byte) game_over#7 ← (byte) game_over#17
(byte) next_piece_idx#7 ← (byte) next_piece_idx#19
call play_spawn_current
to:main::@31
main::@31: scope:[main] from main::@30
(byte) level_bcd#83 ← phi( main::@30/(byte) level_bcd#92 )
(byte) level#92 ← phi( main::@30/(byte) level#100 )
(dword) score_bcd#70 ← phi( main::@30/(dword) score_bcd#77 )
(word) lines_bcd#73 ← phi( main::@30/(word) lines_bcd#80 )
(byte) current_movedown_counter#47 ← phi( main::@30/(byte) current_movedown_counter#51 )
(byte) keyboard_modifiers#47 ← phi( main::@30/(byte) keyboard_modifiers#53 )
(byte) keyboard_events_size#59 ← phi( main::@30/(byte) keyboard_events_size#68 )
(byte) render_screen_showing#33 ← phi( main::@30/(byte) render_screen_showing#39 )
(byte) current_movedown_slow#84 ← phi( main::@30/(byte) current_movedown_slow#88 )
(byte) render_screen_show#49 ← phi( main::@30/(byte) render_screen_show#55 )
(byte) render_screen_render#31 ← phi( main::@30/(byte) render_screen_render#44 )
(byte) next_piece_idx#20 ← phi( main::@30/(byte) next_piece_idx#6 )
(byte) game_over#18 ← phi( main::@30/(byte) game_over#6 )
(byte) current_ypos#26 ← phi( main::@30/(byte) current_ypos#7 )
(byte) current_xpos#32 ← phi( main::@30/(byte) current_xpos#10 )
(byte*) current_piece_gfx#25 ← phi( main::@30/(byte*) current_piece_gfx#9 )
(byte) current_orientation#28 ← phi( main::@30/(byte) current_orientation#9 )
(byte) current_piece_char#20 ← phi( main::@30/(byte) current_piece_char#6 )
(byte*) current_piece#20 ← phi( main::@30/(byte*) current_piece#6 )
(byte*) current_piece#8 ← (byte*) current_piece#20
(byte) current_piece_char#8 ← (byte) current_piece_char#20
(byte) current_orientation#11 ← (byte) current_orientation#28
(byte*) current_piece_gfx#11 ← (byte*) current_piece_gfx#25
(byte) current_xpos#12 ← (byte) current_xpos#32
(byte) current_ypos#9 ← (byte) current_ypos#26
(byte) game_over#8 ← (byte) game_over#18
(byte) next_piece_idx#8 ← (byte) next_piece_idx#20
call render_playfield
to:main::@32
main::@32: scope:[main] from main::@31
(byte) level_bcd#75 ← phi( main::@31/(byte) level_bcd#83 )
(byte) level#82 ← phi( main::@31/(byte) level#92 )
(dword) score_bcd#63 ← phi( main::@31/(dword) score_bcd#70 )
(word) lines_bcd#65 ← phi( main::@31/(word) lines_bcd#73 )
(byte) current_movedown_counter#43 ← phi( main::@31/(byte) current_movedown_counter#47 )
(byte) keyboard_modifiers#40 ← phi( main::@31/(byte) keyboard_modifiers#47 )
(byte) keyboard_events_size#49 ← phi( main::@31/(byte) keyboard_events_size#59 )
(byte) render_screen_showing#28 ← phi( main::@31/(byte) render_screen_showing#33 )
(byte) game_over#68 ← phi( main::@31/(byte) game_over#8 )
(byte) current_orientation#83 ← phi( main::@31/(byte) current_orientation#11 )
(byte) current_piece_char#80 ← phi( main::@31/(byte) current_piece_char#8 )
(byte*) current_piece#77 ← phi( main::@31/(byte*) current_piece#8 )
(byte) current_movedown_slow#79 ← phi( main::@31/(byte) current_movedown_slow#84 )
(byte) render_screen_show#44 ← phi( main::@31/(byte) render_screen_show#49 )
(byte) next_piece_idx#64 ← phi( main::@31/(byte) next_piece_idx#8 )
(byte*) current_piece_gfx#81 ← phi( main::@31/(byte*) current_piece_gfx#11 )
(byte) current_xpos#79 ← phi( main::@31/(byte) current_xpos#12 )
(byte) render_screen_render#36 ← phi( main::@31/(byte) render_screen_render#31 )
(byte) current_ypos#30 ← phi( main::@31/(byte) current_ypos#9 )
call render_moving
to:main::@33
main::@33: scope:[main] from main::@32
(byte) level_bcd#65 ← phi( main::@32/(byte) level_bcd#75 )
(byte) level#68 ← phi( main::@32/(byte) level#82 )
(dword) score_bcd#54 ← phi( main::@32/(dword) score_bcd#63 )
(word) lines_bcd#54 ← phi( main::@32/(word) lines_bcd#65 )
(byte) current_movedown_counter#39 ← phi( main::@32/(byte) current_movedown_counter#43 )
(byte) keyboard_modifiers#35 ← phi( main::@32/(byte) keyboard_modifiers#40 )
(byte) keyboard_events_size#41 ← phi( main::@32/(byte) keyboard_events_size#49 )
(byte) render_screen_showing#22 ← phi( main::@32/(byte) render_screen_showing#28 )
(byte) game_over#55 ← phi( main::@32/(byte) game_over#68 )
(byte) current_ypos#73 ← phi( main::@32/(byte) current_ypos#30 )
(byte) current_xpos#94 ← phi( main::@32/(byte) current_xpos#79 )
(byte*) current_piece_gfx#77 ← phi( main::@32/(byte*) current_piece_gfx#81 )
(byte) current_orientation#72 ← phi( main::@32/(byte) current_orientation#83 )
(byte) current_piece_char#64 ← phi( main::@32/(byte) current_piece_char#80 )
(byte*) current_piece#65 ← phi( main::@32/(byte*) current_piece#77 )
(byte) current_movedown_slow#71 ← phi( main::@32/(byte) current_movedown_slow#79 )
(byte) render_screen_show#36 ← phi( main::@32/(byte) render_screen_show#44 )
(byte) next_piece_idx#47 ← phi( main::@32/(byte) next_piece_idx#64 )
(byte) render_screen_render#25 ← phi( main::@32/(byte) render_screen_render#36 )
call render_next
to:main::@34
main::@34: scope:[main] from main::@33
(byte) level_bcd#53 ← phi( main::@33/(byte) level_bcd#65 )
(byte) level#54 ← phi( main::@33/(byte) level#68 )
(dword) score_bcd#43 ← phi( main::@33/(dword) score_bcd#54 )
(word) lines_bcd#43 ← phi( main::@33/(word) lines_bcd#54 )
(byte) current_movedown_counter#32 ← phi( main::@33/(byte) current_movedown_counter#39 )
(byte) keyboard_modifiers#30 ← phi( main::@33/(byte) keyboard_modifiers#35 )
(byte) keyboard_events_size#33 ← phi( main::@33/(byte) keyboard_events_size#41 )
(byte) render_screen_showing#17 ← phi( main::@33/(byte) render_screen_showing#22 )
(byte) next_piece_idx#43 ← phi( main::@33/(byte) next_piece_idx#47 )
(byte) game_over#42 ← phi( main::@33/(byte) game_over#55 )
(byte) current_ypos#60 ← phi( main::@33/(byte) current_ypos#73 )
(byte) current_xpos#75 ← phi( main::@33/(byte) current_xpos#94 )
(byte*) current_piece_gfx#60 ← phi( main::@33/(byte*) current_piece_gfx#77 )
(byte) current_orientation#59 ← phi( main::@33/(byte) current_orientation#72 )
(byte) current_piece_char#48 ← phi( main::@33/(byte) current_piece_char#64 )
(byte*) current_piece#51 ← phi( main::@33/(byte*) current_piece#65 )
(byte) current_movedown_slow#59 ← phi( main::@33/(byte) current_movedown_slow#71 )
(byte) render_screen_render#38 ← phi( main::@33/(byte) render_screen_render#25 )
(byte) render_screen_show#29 ← phi( main::@33/(byte) render_screen_show#36 )
to:main::@1
main::@1: scope:[main] from main::@20 main::@34 main::@43
(byte) level_bcd#40 ← phi( main::@20/(byte) level_bcd#52 main::@34/(byte) level_bcd#53 main::@43/(byte) level_bcd#54 )
(byte) level#40 ← phi( main::@20/(byte) level#53 main::@34/(byte) level#54 main::@43/(byte) level#55 )
(dword) score_bcd#33 ← phi( main::@20/(dword) score_bcd#42 main::@34/(dword) score_bcd#43 main::@43/(dword) score_bcd#44 )
(word) lines_bcd#33 ← phi( main::@20/(word) lines_bcd#42 main::@34/(word) lines_bcd#43 main::@43/(word) lines_bcd#44 )
(byte) current_movedown_counter#26 ← phi( main::@20/(byte) current_movedown_counter#31 main::@34/(byte) current_movedown_counter#32 main::@43/(byte) current_movedown_counter#33 )
(byte) keyboard_modifiers#24 ← phi( main::@20/(byte) keyboard_modifiers#29 main::@34/(byte) keyboard_modifiers#30 main::@43/(byte) keyboard_modifiers#31 )
(byte) keyboard_events_size#27 ← phi( main::@20/(byte) keyboard_events_size#32 main::@34/(byte) keyboard_events_size#33 main::@43/(byte) keyboard_events_size#34 )
(byte) render_screen_showing#13 ← phi( main::@20/(byte) render_screen_showing#16 main::@34/(byte) render_screen_showing#17 main::@43/(byte) render_screen_showing#18 )
(byte) next_piece_idx#34 ← phi( main::@20/(byte) next_piece_idx#42 main::@34/(byte) next_piece_idx#43 main::@43/(byte) next_piece_idx#44 )
(byte) game_over#33 ← phi( main::@20/(byte) game_over#41 main::@34/(byte) game_over#42 main::@43/(byte) game_over#43 )
(byte) current_ypos#48 ← phi( main::@20/(byte) current_ypos#59 main::@34/(byte) current_ypos#60 main::@43/(byte) current_ypos#61 )
(byte) current_xpos#57 ← phi( main::@20/(byte) current_xpos#74 main::@34/(byte) current_xpos#75 main::@43/(byte) current_xpos#76 )
(byte*) current_piece_gfx#44 ← phi( main::@20/(byte*) current_piece_gfx#59 main::@34/(byte*) current_piece_gfx#60 main::@43/(byte*) current_piece_gfx#61 )
(byte) current_orientation#48 ← phi( main::@20/(byte) current_orientation#58 main::@34/(byte) current_orientation#59 main::@43/(byte) current_orientation#60 )
(byte) current_piece_char#35 ← phi( main::@20/(byte) current_piece_char#47 main::@34/(byte) current_piece_char#48 main::@43/(byte) current_piece_char#49 )
(byte*) current_piece#38 ← phi( main::@20/(byte*) current_piece#50 main::@34/(byte*) current_piece#51 main::@43/(byte*) current_piece#52 )
(byte) current_movedown_slow#45 ← phi( main::@20/(byte) current_movedown_slow#58 main::@34/(byte) current_movedown_slow#59 main::@43/(byte) current_movedown_slow#60 )
(byte) render_screen_render#28 ← phi( main::@20/(byte) render_screen_render#37 main::@34/(byte) render_screen_render#38 main::@43/(byte) render_screen_render#6 )
(byte) render_screen_show#23 ← phi( main::@20/(byte) render_screen_show#28 main::@34/(byte) render_screen_show#29 main::@43/(byte) render_screen_show#6 )
if(true) goto main::@2
to:main::@return
main::@2: scope:[main] from main::@1
(byte) render_screen_render#65 ← phi( main::@1/(byte) render_screen_render#28 )
(byte) next_piece_idx#79 ← phi( main::@1/(byte) next_piece_idx#34 )
(byte) current_xpos#124 ← phi( main::@1/(byte) current_xpos#57 )
(byte*) current_piece_gfx#114 ← phi( main::@1/(byte*) current_piece_gfx#44 )
(byte) current_orientation#98 ← phi( main::@1/(byte) current_orientation#48 )
(byte) current_piece_char#102 ← phi( main::@1/(byte) current_piece_char#35 )
(byte*) current_piece#94 ← phi( main::@1/(byte*) current_piece#38 )
(byte) level_bcd#98 ← phi( main::@1/(byte) level_bcd#40 )
(byte) current_movedown_slow#91 ← phi( main::@1/(byte) current_movedown_slow#45 )
(byte) level#106 ← phi( main::@1/(byte) level#40 )
(dword) score_bcd#82 ← phi( main::@1/(dword) score_bcd#33 )
(word) lines_bcd#85 ← phi( main::@1/(word) lines_bcd#33 )
(byte) current_ypos#100 ← phi( main::@1/(byte) current_ypos#48 )
(byte) current_movedown_counter#55 ← phi( main::@1/(byte) current_movedown_counter#26 )
(byte) game_over#78 ← phi( main::@1/(byte) game_over#33 )
(byte) keyboard_modifiers#41 ← phi( main::@1/(byte) keyboard_modifiers#24 )
(byte) keyboard_events_size#50 ← phi( main::@1/(byte) keyboard_events_size#27 )
(byte) render_screen_showing#23 ← phi( main::@1/(byte) render_screen_showing#13 )
(byte) render_screen_show#37 ← phi( main::@1/(byte) render_screen_show#23 )
to:main::@4
main::@4: scope:[main] from main::@2 main::@5
(byte) render_screen_render#64 ← phi( main::@2/(byte) render_screen_render#65 main::@5/(byte) render_screen_render#66 )
(byte) next_piece_idx#78 ← phi( main::@2/(byte) next_piece_idx#79 main::@5/(byte) next_piece_idx#80 )
(byte) current_xpos#122 ← phi( main::@2/(byte) current_xpos#124 main::@5/(byte) current_xpos#125 )
(byte*) current_piece_gfx#112 ← phi( main::@2/(byte*) current_piece_gfx#114 main::@5/(byte*) current_piece_gfx#115 )
(byte) current_orientation#96 ← phi( main::@2/(byte) current_orientation#98 main::@5/(byte) current_orientation#99 )
(byte) current_piece_char#99 ← phi( main::@2/(byte) current_piece_char#102 main::@5/(byte) current_piece_char#103 )
(byte*) current_piece#92 ← phi( main::@2/(byte*) current_piece#94 main::@5/(byte*) current_piece#95 )
(byte) level_bcd#93 ← phi( main::@2/(byte) level_bcd#98 main::@5/(byte) level_bcd#99 )
(byte) current_movedown_slow#89 ← phi( main::@2/(byte) current_movedown_slow#91 main::@5/(byte) current_movedown_slow#92 )
(byte) level#101 ← phi( main::@2/(byte) level#106 main::@5/(byte) level#107 )
(dword) score_bcd#78 ← phi( main::@2/(dword) score_bcd#82 main::@5/(dword) score_bcd#83 )
(word) lines_bcd#81 ← phi( main::@2/(word) lines_bcd#85 main::@5/(word) lines_bcd#86 )
(byte) current_ypos#98 ← phi( main::@2/(byte) current_ypos#100 main::@5/(byte) current_ypos#101 )
(byte) current_movedown_counter#52 ← phi( main::@2/(byte) current_movedown_counter#55 main::@5/(byte) current_movedown_counter#56 )
(byte) game_over#69 ← phi( main::@2/(byte) game_over#78 main::@5/(byte) game_over#79 )
(byte) keyboard_modifiers#36 ← phi( main::@2/(byte) keyboard_modifiers#41 main::@5/(byte) keyboard_modifiers#42 )
(byte) keyboard_events_size#42 ← phi( main::@2/(byte) keyboard_events_size#50 main::@5/(byte) keyboard_events_size#51 )
(byte) render_screen_showing#19 ← phi( main::@2/(byte) render_screen_showing#23 main::@5/(byte) render_screen_showing#24 )
(byte) render_screen_show#30 ← phi( main::@2/(byte) render_screen_show#37 main::@5/(byte) render_screen_show#38 )
(bool~) main::$10 ← *((byte*) RASTER#0) != (byte/word/signed word/dword/signed dword) $ff
if((bool~) main::$10) goto main::@5
to:main::@6
main::@5: scope:[main] from main::@4
(byte) render_screen_render#66 ← phi( main::@4/(byte) render_screen_render#64 )
(byte) next_piece_idx#80 ← phi( main::@4/(byte) next_piece_idx#78 )
(byte) current_xpos#125 ← phi( main::@4/(byte) current_xpos#122 )
(byte*) current_piece_gfx#115 ← phi( main::@4/(byte*) current_piece_gfx#112 )
(byte) current_orientation#99 ← phi( main::@4/(byte) current_orientation#96 )
(byte) current_piece_char#103 ← phi( main::@4/(byte) current_piece_char#99 )
(byte*) current_piece#95 ← phi( main::@4/(byte*) current_piece#92 )
(byte) level_bcd#99 ← phi( main::@4/(byte) level_bcd#93 )
(byte) current_movedown_slow#92 ← phi( main::@4/(byte) current_movedown_slow#89 )
(byte) level#107 ← phi( main::@4/(byte) level#101 )
(dword) score_bcd#83 ← phi( main::@4/(dword) score_bcd#78 )
(word) lines_bcd#86 ← phi( main::@4/(word) lines_bcd#81 )
(byte) current_ypos#101 ← phi( main::@4/(byte) current_ypos#98 )
(byte) current_movedown_counter#56 ← phi( main::@4/(byte) current_movedown_counter#52 )
(byte) game_over#79 ← phi( main::@4/(byte) game_over#69 )
(byte) keyboard_modifiers#42 ← phi( main::@4/(byte) keyboard_modifiers#36 )
(byte) keyboard_events_size#51 ← phi( main::@4/(byte) keyboard_events_size#42 )
(byte) render_screen_showing#24 ← phi( main::@4/(byte) render_screen_showing#19 )
(byte) render_screen_show#38 ← phi( main::@4/(byte) render_screen_show#30 )
to:main::@4
main::@6: scope:[main] from main::@4
(byte) render_screen_render#63 ← phi( main::@4/(byte) render_screen_render#64 )
(byte) next_piece_idx#72 ← phi( main::@4/(byte) next_piece_idx#78 )
(byte) current_xpos#116 ← phi( main::@4/(byte) current_xpos#122 )
(byte*) current_piece_gfx#103 ← phi( main::@4/(byte*) current_piece_gfx#112 )
(byte) current_orientation#91 ← phi( main::@4/(byte) current_orientation#96 )
(byte) current_piece_char#91 ← phi( main::@4/(byte) current_piece_char#99 )
(byte*) current_piece#85 ← phi( main::@4/(byte*) current_piece#92 )
(byte) level_bcd#84 ← phi( main::@4/(byte) level_bcd#93 )
(byte) current_movedown_slow#85 ← phi( main::@4/(byte) current_movedown_slow#89 )
(byte) level#93 ← phi( main::@4/(byte) level#101 )
(dword) score_bcd#71 ← phi( main::@4/(dword) score_bcd#78 )
(word) lines_bcd#74 ← phi( main::@4/(word) lines_bcd#81 )
(byte) current_ypos#92 ← phi( main::@4/(byte) current_ypos#98 )
(byte) current_movedown_counter#48 ← phi( main::@4/(byte) current_movedown_counter#52 )
(byte) game_over#56 ← phi( main::@4/(byte) game_over#69 )
(byte) keyboard_modifiers#32 ← phi( main::@4/(byte) keyboard_modifiers#36 )
(byte) keyboard_events_size#35 ← phi( main::@4/(byte) keyboard_events_size#42 )
(byte) render_screen_showing#12 ← phi( main::@4/(byte) render_screen_showing#19 )
(byte) render_screen_show#18 ← phi( main::@4/(byte) render_screen_show#30 )
call render_show
to:main::@35
main::@35: scope:[main] from main::@6
(byte) render_screen_render#61 ← phi( main::@6/(byte) render_screen_render#63 )
(byte) render_screen_show#59 ← phi( main::@6/(byte) render_screen_show#18 )
(byte) next_piece_idx#65 ← phi( main::@6/(byte) next_piece_idx#72 )
(byte) current_xpos#107 ← phi( main::@6/(byte) current_xpos#116 )
(byte*) current_piece_gfx#95 ← phi( main::@6/(byte*) current_piece_gfx#103 )
(byte) current_orientation#84 ← phi( main::@6/(byte) current_orientation#91 )
(byte) current_piece_char#81 ← phi( main::@6/(byte) current_piece_char#91 )
(byte*) current_piece#78 ← phi( main::@6/(byte*) current_piece#85 )
(byte) level_bcd#76 ← phi( main::@6/(byte) level_bcd#84 )
(byte) current_movedown_slow#80 ← phi( main::@6/(byte) current_movedown_slow#85 )
(byte) level#83 ← phi( main::@6/(byte) level#93 )
(dword) score_bcd#64 ← phi( main::@6/(dword) score_bcd#71 )
(word) lines_bcd#66 ← phi( main::@6/(word) lines_bcd#74 )
(byte) current_ypos#84 ← phi( main::@6/(byte) current_ypos#92 )
(byte) current_movedown_counter#44 ← phi( main::@6/(byte) current_movedown_counter#48 )
(byte) game_over#44 ← phi( main::@6/(byte) game_over#56 )
(byte) keyboard_modifiers#23 ← phi( main::@6/(byte) keyboard_modifiers#32 )
(byte) keyboard_events_size#26 ← phi( main::@6/(byte) keyboard_events_size#35 )
(byte) render_screen_showing#8 ← phi( main::@6/(byte) render_screen_showing#2 )
(byte) render_screen_showing#3 ← (byte) render_screen_showing#8
call keyboard_event_scan
to:main::@36
main::@36: scope:[main] from main::@35
(byte) render_screen_showing#40 ← phi( main::@35/(byte) render_screen_showing#3 )
(byte) render_screen_render#59 ← phi( main::@35/(byte) render_screen_render#61 )
(byte) render_screen_show#56 ← phi( main::@35/(byte) render_screen_show#59 )
(byte) next_piece_idx#55 ← phi( main::@35/(byte) next_piece_idx#65 )
(byte) current_xpos#95 ← phi( main::@35/(byte) current_xpos#107 )
(byte*) current_piece_gfx#78 ← phi( main::@35/(byte*) current_piece_gfx#95 )
(byte) current_orientation#73 ← phi( main::@35/(byte) current_orientation#84 )
(byte) current_piece_char#65 ← phi( main::@35/(byte) current_piece_char#81 )
(byte*) current_piece#66 ← phi( main::@35/(byte*) current_piece#78 )
(byte) level_bcd#66 ← phi( main::@35/(byte) level_bcd#76 )
(byte) current_movedown_slow#72 ← phi( main::@35/(byte) current_movedown_slow#80 )
(byte) level#69 ← phi( main::@35/(byte) level#83 )
(dword) score_bcd#55 ← phi( main::@35/(dword) score_bcd#64 )
(word) lines_bcd#55 ← phi( main::@35/(word) lines_bcd#66 )
(byte) current_ypos#74 ← phi( main::@35/(byte) current_ypos#84 )
(byte) current_movedown_counter#40 ← phi( main::@35/(byte) current_movedown_counter#44 )
(byte) game_over#31 ← phi( main::@35/(byte) game_over#44 )
(byte) keyboard_modifiers#15 ← phi( main::@35/(byte) keyboard_modifiers#6 )
(byte) keyboard_events_size#17 ← phi( main::@35/(byte) keyboard_events_size#3 )
(byte) keyboard_events_size#6 ← (byte) keyboard_events_size#17
(byte) keyboard_modifiers#7 ← (byte) keyboard_modifiers#15
call keyboard_event_get
(byte) keyboard_event_get::return#3 ← (byte) keyboard_event_get::return#2
to:main::@37
main::@37: scope:[main] from main::@36
(byte) keyboard_modifiers#50 ← phi( main::@36/(byte) keyboard_modifiers#7 )
(byte) render_screen_showing#36 ← phi( main::@36/(byte) render_screen_showing#40 )
(byte) render_screen_render#56 ← phi( main::@36/(byte) render_screen_render#59 )
(byte) render_screen_show#52 ← phi( main::@36/(byte) render_screen_show#56 )
(byte) next_piece_idx#45 ← phi( main::@36/(byte) next_piece_idx#55 )
(byte) current_xpos#77 ← phi( main::@36/(byte) current_xpos#95 )
(byte*) current_piece_gfx#62 ← phi( main::@36/(byte*) current_piece_gfx#78 )
(byte) current_orientation#61 ← phi( main::@36/(byte) current_orientation#73 )
(byte) current_piece_char#50 ← phi( main::@36/(byte) current_piece_char#65 )
(byte*) current_piece#53 ← phi( main::@36/(byte*) current_piece#66 )
(byte) level_bcd#55 ← phi( main::@36/(byte) level_bcd#66 )
(byte) current_movedown_slow#61 ← phi( main::@36/(byte) current_movedown_slow#72 )
(byte) level#56 ← phi( main::@36/(byte) level#69 )
(dword) score_bcd#45 ← phi( main::@36/(dword) score_bcd#55 )
(word) lines_bcd#45 ← phi( main::@36/(word) lines_bcd#55 )
(byte) current_ypos#62 ← phi( main::@36/(byte) current_ypos#74 )
(byte) current_movedown_counter#34 ← phi( main::@36/(byte) current_movedown_counter#40 )
(byte) game_over#19 ← phi( main::@36/(byte) game_over#31 )
(byte) keyboard_events_size#18 ← phi( main::@36/(byte) keyboard_events_size#5 )
(byte) keyboard_event_get::return#5 ← phi( main::@36/(byte) keyboard_event_get::return#3 )
(byte~) main::$13 ← (byte) keyboard_event_get::return#5
(byte) keyboard_events_size#7 ← (byte) keyboard_events_size#18
(byte) main::key_event#0 ← (byte~) main::$13
(byte) main::render#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(bool~) main::$14 ← (byte) game_over#19 == (byte/signed byte/word/signed word/dword/signed dword) 0
if((bool~) main::$14) goto main::@11
to:main::@12
main::@11: scope:[main] from main::@37
(byte) keyboard_modifiers#48 ← phi( main::@37/(byte) keyboard_modifiers#50 )
(byte) keyboard_events_size#60 ← phi( main::@37/(byte) keyboard_events_size#7 )
(byte) render_screen_showing#34 ← phi( main::@37/(byte) render_screen_showing#36 )
(byte) render_screen_render#54 ← phi( main::@37/(byte) render_screen_render#56 )
(byte) render_screen_show#50 ← phi( main::@37/(byte) render_screen_show#52 )
(byte) next_piece_idx#33 ← phi( main::@37/(byte) next_piece_idx#45 )
(byte) game_over#32 ← phi( main::@37/(byte) game_over#19 )
(byte) current_xpos#56 ← phi( main::@37/(byte) current_xpos#77 )
(byte*) current_piece_gfx#43 ← phi( main::@37/(byte*) current_piece_gfx#62 )
(byte) current_orientation#47 ← phi( main::@37/(byte) current_orientation#61 )
(byte) current_piece_char#34 ← phi( main::@37/(byte) current_piece_char#50 )
(byte*) current_piece#37 ← phi( main::@37/(byte*) current_piece#53 )
(byte) level_bcd#39 ← phi( main::@37/(byte) level_bcd#55 )
(byte) current_movedown_slow#44 ← phi( main::@37/(byte) current_movedown_slow#61 )
(byte) level#39 ← phi( main::@37/(byte) level#56 )
(dword) score_bcd#32 ← phi( main::@37/(dword) score_bcd#45 )
(word) lines_bcd#32 ← phi( main::@37/(word) lines_bcd#45 )
(byte) current_ypos#47 ← phi( main::@37/(byte) current_ypos#62 )
(byte) current_movedown_counter#25 ← phi( main::@37/(byte) current_movedown_counter#34 )
(byte) main::key_event#1 ← phi( main::@37/(byte) main::key_event#0 )
(byte) play_movement::key_event#0 ← (byte) main::key_event#1
call play_movement
(byte) play_movement::return#3 ← (byte) play_movement::return#2
to:main::@38
main::@38: scope:[main] from main::@11
(byte) keyboard_modifiers#44 ← phi( main::@11/(byte) keyboard_modifiers#48 )
(byte) keyboard_events_size#53 ← phi( main::@11/(byte) keyboard_events_size#60 )
(byte) render_screen_showing#30 ← phi( main::@11/(byte) render_screen_showing#34 )
(byte) render_screen_render#51 ← phi( main::@11/(byte) render_screen_render#54 )
(byte) render_screen_show#46 ← phi( main::@11/(byte) render_screen_show#50 )
(byte) next_piece_idx#21 ← phi( main::@11/(byte) next_piece_idx#2 )
(byte) game_over#20 ← phi( main::@11/(byte) game_over#2 )
(byte) current_xpos#33 ← phi( main::@11/(byte) current_xpos#3 )
(byte*) current_piece_gfx#26 ← phi( main::@11/(byte*) current_piece_gfx#3 )
(byte) current_orientation#29 ← phi( main::@11/(byte) current_orientation#3 )
(byte) current_piece_char#21 ← phi( main::@11/(byte) current_piece_char#2 )
(byte*) current_piece#21 ← phi( main::@11/(byte*) current_piece#2 )
(byte) level_bcd#23 ← phi( main::@11/(byte) level_bcd#2 )
(byte) current_movedown_slow#26 ← phi( main::@11/(byte) current_movedown_slow#4 )
(byte) level#23 ← phi( main::@11/(byte) level#2 )
(dword) score_bcd#17 ← phi( main::@11/(dword) score_bcd#2 )
(word) lines_bcd#18 ← phi( main::@11/(word) lines_bcd#2 )
(byte) current_ypos#27 ← phi( main::@11/(byte) current_ypos#2 )
(byte) current_movedown_counter#15 ← phi( main::@11/(byte) current_movedown_counter#2 )
(byte) play_movement::return#5 ← phi( main::@11/(byte) play_movement::return#3 )
(byte~) main::$15 ← (byte) play_movement::return#5
(byte) current_movedown_counter#6 ← (byte) current_movedown_counter#15
(byte) current_ypos#10 ← (byte) current_ypos#27
(word) lines_bcd#7 ← (word) lines_bcd#18
(dword) score_bcd#7 ← (dword) score_bcd#17
(byte) level#9 ← (byte) level#23
(byte) current_movedown_slow#13 ← (byte) current_movedown_slow#26
(byte) level_bcd#10 ← (byte) level_bcd#23
(byte*) current_piece#9 ← (byte*) current_piece#21
(byte) current_piece_char#9 ← (byte) current_piece_char#21
(byte) current_orientation#12 ← (byte) current_orientation#29
(byte*) current_piece_gfx#12 ← (byte*) current_piece_gfx#26
(byte) current_xpos#13 ← (byte) current_xpos#33
(byte) game_over#9 ← (byte) game_over#20
(byte) next_piece_idx#9 ← (byte) next_piece_idx#21
(byte) main::render#1 ← (byte~) main::$15
to:main::@19
main::@12: scope:[main] from main::@13 main::@37
(byte) level_bcd#77 ← phi( main::@13/(byte) level_bcd#85 main::@37/(byte) level_bcd#55 )
(byte) level#84 ← phi( main::@13/(byte) level#94 main::@37/(byte) level#56 )
(dword) score_bcd#65 ← phi( main::@13/(dword) score_bcd#72 main::@37/(dword) score_bcd#45 )
(word) lines_bcd#67 ← phi( main::@13/(word) lines_bcd#75 main::@37/(word) lines_bcd#45 )
(byte) current_movedown_counter#45 ← phi( main::@13/(byte) current_movedown_counter#49 main::@37/(byte) current_movedown_counter#34 )
(byte) keyboard_modifiers#43 ← phi( main::@13/(byte) keyboard_modifiers#49 main::@37/(byte) keyboard_modifiers#50 )
(byte) keyboard_events_size#52 ← phi( main::@13/(byte) keyboard_events_size#61 main::@37/(byte) keyboard_events_size#7 )
(byte) render_screen_showing#29 ← phi( main::@13/(byte) render_screen_showing#35 main::@37/(byte) render_screen_showing#36 )
(byte) next_piece_idx#66 ← phi( main::@13/(byte) next_piece_idx#73 main::@37/(byte) next_piece_idx#45 )
(byte) game_over#70 ← phi( main::@13/(byte) game_over#80 main::@37/(byte) game_over#19 )
(byte) current_ypos#85 ← phi( main::@13/(byte) current_ypos#93 main::@37/(byte) current_ypos#62 )
(byte) current_xpos#108 ← phi( main::@13/(byte) current_xpos#117 main::@37/(byte) current_xpos#77 )
(byte*) current_piece_gfx#96 ← phi( main::@13/(byte*) current_piece_gfx#104 main::@37/(byte*) current_piece_gfx#62 )
(byte) current_orientation#85 ← phi( main::@13/(byte) current_orientation#92 main::@37/(byte) current_orientation#61 )
(byte) current_piece_char#82 ← phi( main::@13/(byte) current_piece_char#92 main::@37/(byte) current_piece_char#50 )
(byte*) current_piece#79 ← phi( main::@13/(byte*) current_piece#86 main::@37/(byte*) current_piece#53 )
(byte) current_movedown_slow#81 ← phi( main::@13/(byte) current_movedown_slow#86 main::@37/(byte) current_movedown_slow#61 )
(byte) render_screen_render#50 ← phi( main::@13/(byte) render_screen_render#55 main::@37/(byte) render_screen_render#56 )
(byte) render_screen_show#45 ← phi( main::@13/(byte) render_screen_show#51 main::@37/(byte) render_screen_show#52 )
(byte) main::render#3 ← phi( main::@13/(byte) main::render#4 main::@37/(byte) main::render#0 )
if(true) goto main::@13
to:main::@19
main::@13: scope:[main] from main::@12
(byte) level_bcd#85 ← phi( main::@12/(byte) level_bcd#77 )
(byte) level#94 ← phi( main::@12/(byte) level#84 )
(dword) score_bcd#72 ← phi( main::@12/(dword) score_bcd#65 )
(word) lines_bcd#75 ← phi( main::@12/(word) lines_bcd#67 )
(byte) current_movedown_counter#49 ← phi( main::@12/(byte) current_movedown_counter#45 )
(byte) keyboard_modifiers#49 ← phi( main::@12/(byte) keyboard_modifiers#43 )
(byte) keyboard_events_size#61 ← phi( main::@12/(byte) keyboard_events_size#52 )
(byte) render_screen_showing#35 ← phi( main::@12/(byte) render_screen_showing#29 )
(byte) next_piece_idx#73 ← phi( main::@12/(byte) next_piece_idx#66 )
(byte) game_over#80 ← phi( main::@12/(byte) game_over#70 )
(byte) current_ypos#93 ← phi( main::@12/(byte) current_ypos#85 )
(byte) current_xpos#117 ← phi( main::@12/(byte) current_xpos#108 )
(byte*) current_piece_gfx#104 ← phi( main::@12/(byte*) current_piece_gfx#96 )
(byte) current_orientation#92 ← phi( main::@12/(byte) current_orientation#85 )
(byte) current_piece_char#92 ← phi( main::@12/(byte) current_piece_char#82 )
(byte*) current_piece#86 ← phi( main::@12/(byte*) current_piece#79 )
(byte) current_movedown_slow#86 ← phi( main::@12/(byte) current_movedown_slow#81 )
(byte) render_screen_render#55 ← phi( main::@12/(byte) render_screen_render#50 )
(byte) render_screen_show#51 ← phi( main::@12/(byte) render_screen_show#45 )
(byte) main::render#4 ← phi( main::@12/(byte) main::render#3 )
*((byte*) BORDERCOL#0) ← ++ *((byte*) BORDERCOL#0)
to:main::@12
main::@19: scope:[main] from main::@12 main::@38
(byte) level_bcd#67 ← phi( main::@12/(byte) level_bcd#77 main::@38/(byte) level_bcd#10 )
(byte) level#70 ← phi( main::@12/(byte) level#84 main::@38/(byte) level#9 )
(dword) score_bcd#56 ← phi( main::@12/(dword) score_bcd#65 main::@38/(dword) score_bcd#7 )
(word) lines_bcd#56 ← phi( main::@12/(word) lines_bcd#67 main::@38/(word) lines_bcd#7 )
(byte) current_movedown_counter#41 ← phi( main::@12/(byte) current_movedown_counter#45 main::@38/(byte) current_movedown_counter#6 )
(byte) keyboard_modifiers#37 ← phi( main::@12/(byte) keyboard_modifiers#43 main::@38/(byte) keyboard_modifiers#44 )
(byte) keyboard_events_size#43 ← phi( main::@12/(byte) keyboard_events_size#52 main::@38/(byte) keyboard_events_size#53 )
(byte) render_screen_showing#25 ← phi( main::@12/(byte) render_screen_showing#29 main::@38/(byte) render_screen_showing#30 )
(byte) next_piece_idx#56 ← phi( main::@12/(byte) next_piece_idx#66 main::@38/(byte) next_piece_idx#9 )
(byte) game_over#57 ← phi( main::@12/(byte) game_over#70 main::@38/(byte) game_over#9 )
(byte) current_ypos#75 ← phi( main::@12/(byte) current_ypos#85 main::@38/(byte) current_ypos#10 )
(byte) current_xpos#96 ← phi( main::@12/(byte) current_xpos#108 main::@38/(byte) current_xpos#13 )
(byte*) current_piece_gfx#79 ← phi( main::@12/(byte*) current_piece_gfx#96 main::@38/(byte*) current_piece_gfx#12 )
(byte) current_orientation#74 ← phi( main::@12/(byte) current_orientation#85 main::@38/(byte) current_orientation#12 )
(byte) current_piece_char#66 ← phi( main::@12/(byte) current_piece_char#82 main::@38/(byte) current_piece_char#9 )
(byte*) current_piece#67 ← phi( main::@12/(byte*) current_piece#79 main::@38/(byte*) current_piece#9 )
(byte) current_movedown_slow#73 ← phi( main::@12/(byte) current_movedown_slow#81 main::@38/(byte) current_movedown_slow#13 )
(byte) render_screen_render#45 ← phi( main::@12/(byte) render_screen_render#50 main::@38/(byte) render_screen_render#51 )
(byte) render_screen_show#39 ← phi( main::@12/(byte) render_screen_show#45 main::@38/(byte) render_screen_show#46 )
(byte) main::render#2 ← phi( main::@12/(byte) main::render#3 main::@38/(byte) main::render#1 )
(bool~) main::$16 ← (byte) main::render#2 != (byte/signed byte/word/signed word/dword/signed dword) 0
(bool~) main::$17 ← ! (bool~) main::$16
if((bool~) main::$17) goto main::@20
to:main::@23
main::@20: scope:[main] from main::@19
(byte) level_bcd#52 ← phi( main::@19/(byte) level_bcd#67 )
(byte) level#53 ← phi( main::@19/(byte) level#70 )
(dword) score_bcd#42 ← phi( main::@19/(dword) score_bcd#56 )
(word) lines_bcd#42 ← phi( main::@19/(word) lines_bcd#56 )
(byte) current_movedown_counter#31 ← phi( main::@19/(byte) current_movedown_counter#41 )
(byte) keyboard_modifiers#29 ← phi( main::@19/(byte) keyboard_modifiers#37 )
(byte) keyboard_events_size#32 ← phi( main::@19/(byte) keyboard_events_size#43 )
(byte) render_screen_showing#16 ← phi( main::@19/(byte) render_screen_showing#25 )
(byte) next_piece_idx#42 ← phi( main::@19/(byte) next_piece_idx#56 )
(byte) game_over#41 ← phi( main::@19/(byte) game_over#57 )
(byte) current_ypos#59 ← phi( main::@19/(byte) current_ypos#75 )
(byte) current_xpos#74 ← phi( main::@19/(byte) current_xpos#96 )
(byte*) current_piece_gfx#59 ← phi( main::@19/(byte*) current_piece_gfx#79 )
(byte) current_orientation#58 ← phi( main::@19/(byte) current_orientation#74 )
(byte) current_piece_char#47 ← phi( main::@19/(byte) current_piece_char#66 )
(byte*) current_piece#50 ← phi( main::@19/(byte*) current_piece#67 )
(byte) current_movedown_slow#58 ← phi( main::@19/(byte) current_movedown_slow#73 )
(byte) render_screen_render#37 ← phi( main::@19/(byte) render_screen_render#45 )
(byte) render_screen_show#28 ← phi( main::@19/(byte) render_screen_show#39 )
to:main::@1
main::@23: scope:[main] from main::@19
(byte) level_bcd#100 ← phi( main::@19/(byte) level_bcd#67 )
(byte) level#108 ← phi( main::@19/(byte) level#70 )
(word) lines_bcd#87 ← phi( main::@19/(word) lines_bcd#56 )
(byte) current_movedown_counter#57 ← phi( main::@19/(byte) current_movedown_counter#41 )
(byte) keyboard_modifiers#57 ← phi( main::@19/(byte) keyboard_modifiers#37 )
(byte) keyboard_events_size#73 ← phi( main::@19/(byte) keyboard_events_size#43 )
(byte) render_screen_showing#44 ← phi( main::@19/(byte) render_screen_showing#25 )
(byte) game_over#89 ← phi( main::@19/(byte) game_over#57 )
(byte) current_orientation#100 ← phi( main::@19/(byte) current_orientation#74 )
(byte*) current_piece#96 ← phi( main::@19/(byte*) current_piece#67 )
(byte) current_movedown_slow#93 ← phi( main::@19/(byte) current_movedown_slow#73 )
(dword) score_bcd#79 ← phi( main::@19/(dword) score_bcd#56 )
(byte) current_piece_char#100 ← phi( main::@19/(byte) current_piece_char#66 )
(byte) render_screen_show#53 ← phi( main::@19/(byte) render_screen_show#39 )
(byte) next_piece_idx#74 ← phi( main::@19/(byte) next_piece_idx#56 )
(byte*) current_piece_gfx#105 ← phi( main::@19/(byte*) current_piece_gfx#79 )
(byte) current_xpos#109 ← phi( main::@19/(byte) current_xpos#96 )
(byte) current_ypos#63 ← phi( main::@19/(byte) current_ypos#75 )
(byte) render_screen_render#30 ← phi( main::@19/(byte) render_screen_render#45 )
call render_playfield
to:main::@39
main::@39: scope:[main] from main::@23
(byte) level_bcd#94 ← phi( main::@23/(byte) level_bcd#100 )
(byte) level#102 ← phi( main::@23/(byte) level#108 )
(word) lines_bcd#82 ← phi( main::@23/(word) lines_bcd#87 )
(byte) current_movedown_counter#53 ← phi( main::@23/(byte) current_movedown_counter#57 )
(byte) keyboard_modifiers#54 ← phi( main::@23/(byte) keyboard_modifiers#57 )
(byte) keyboard_events_size#69 ← phi( main::@23/(byte) keyboard_events_size#73 )
(byte) render_screen_showing#41 ← phi( main::@23/(byte) render_screen_showing#44 )
(byte) game_over#87 ← phi( main::@23/(byte) game_over#89 )
(byte) current_orientation#97 ← phi( main::@23/(byte) current_orientation#100 )
(byte*) current_piece#93 ← phi( main::@23/(byte*) current_piece#96 )
(byte) current_movedown_slow#90 ← phi( main::@23/(byte) current_movedown_slow#93 )
(dword) score_bcd#73 ← phi( main::@23/(dword) score_bcd#79 )
(byte) current_piece_char#84 ← phi( main::@23/(byte) current_piece_char#100 )
(byte) render_screen_show#47 ← phi( main::@23/(byte) render_screen_show#53 )
(byte) next_piece_idx#67 ← phi( main::@23/(byte) next_piece_idx#74 )
(byte*) current_piece_gfx#82 ← phi( main::@23/(byte*) current_piece_gfx#105 )
(byte) current_xpos#80 ← phi( main::@23/(byte) current_xpos#109 )
(byte) render_screen_render#39 ← phi( main::@23/(byte) render_screen_render#30 )
(byte) current_ypos#31 ← phi( main::@23/(byte) current_ypos#63 )
call render_moving
to:main::@40
main::@40: scope:[main] from main::@39
(byte) level_bcd#86 ← phi( main::@39/(byte) level_bcd#94 )
(byte) level#95 ← phi( main::@39/(byte) level#102 )
(word) lines_bcd#76 ← phi( main::@39/(word) lines_bcd#82 )
(byte) current_movedown_counter#50 ← phi( main::@39/(byte) current_movedown_counter#53 )
(byte) keyboard_modifiers#51 ← phi( main::@39/(byte) keyboard_modifiers#54 )
(byte) keyboard_events_size#62 ← phi( main::@39/(byte) keyboard_events_size#69 )
(byte) render_screen_showing#37 ← phi( main::@39/(byte) render_screen_showing#41 )
(byte) game_over#81 ← phi( main::@39/(byte) game_over#87 )
(byte) current_ypos#94 ← phi( main::@39/(byte) current_ypos#31 )
(byte) current_xpos#118 ← phi( main::@39/(byte) current_xpos#80 )
(byte*) current_piece_gfx#106 ← phi( main::@39/(byte*) current_piece_gfx#82 )
(byte) current_orientation#93 ← phi( main::@39/(byte) current_orientation#97 )
(byte) current_piece_char#93 ← phi( main::@39/(byte) current_piece_char#84 )
(byte*) current_piece#87 ← phi( main::@39/(byte*) current_piece#93 )
(byte) current_movedown_slow#87 ← phi( main::@39/(byte) current_movedown_slow#90 )
(dword) score_bcd#66 ← phi( main::@39/(dword) score_bcd#73 )
(byte) render_screen_show#40 ← phi( main::@39/(byte) render_screen_show#47 )
(byte) next_piece_idx#48 ← phi( main::@39/(byte) next_piece_idx#67 )
(byte) render_screen_render#26 ← phi( main::@39/(byte) render_screen_render#39 )
call render_next
to:main::@41
main::@41: scope:[main] from main::@40
(byte) level_bcd#78 ← phi( main::@40/(byte) level_bcd#86 )
(byte) level#85 ← phi( main::@40/(byte) level#95 )
(word) lines_bcd#68 ← phi( main::@40/(word) lines_bcd#76 )
(byte) current_movedown_counter#46 ← phi( main::@40/(byte) current_movedown_counter#50 )
(byte) keyboard_modifiers#45 ← phi( main::@40/(byte) keyboard_modifiers#51 )
(byte) keyboard_events_size#54 ← phi( main::@40/(byte) keyboard_events_size#62 )
(byte) render_screen_showing#31 ← phi( main::@40/(byte) render_screen_showing#37 )
(byte) next_piece_idx#68 ← phi( main::@40/(byte) next_piece_idx#48 )
(byte) game_over#71 ← phi( main::@40/(byte) game_over#81 )
(byte) current_ypos#86 ← phi( main::@40/(byte) current_ypos#94 )
(byte) current_xpos#110 ← phi( main::@40/(byte) current_xpos#118 )
(byte*) current_piece_gfx#97 ← phi( main::@40/(byte*) current_piece_gfx#106 )
(byte) current_orientation#86 ← phi( main::@40/(byte) current_orientation#93 )
(byte) current_piece_char#83 ← phi( main::@40/(byte) current_piece_char#93 )
(byte*) current_piece#80 ← phi( main::@40/(byte*) current_piece#87 )
(byte) current_movedown_slow#82 ← phi( main::@40/(byte) current_movedown_slow#87 )
(dword) score_bcd#47 ← phi( main::@40/(dword) score_bcd#66 )
(byte) render_screen_show#31 ← phi( main::@40/(byte) render_screen_show#40 )
(byte) render_screen_render#21 ← phi( main::@40/(byte) render_screen_render#26 )
call render_score
to:main::@42
main::@42: scope:[main] from main::@41
(byte) level_bcd#68 ← phi( main::@41/(byte) level_bcd#78 )
(byte) level#71 ← phi( main::@41/(byte) level#85 )
(dword) score_bcd#57 ← phi( main::@41/(dword) score_bcd#47 )
(word) lines_bcd#57 ← phi( main::@41/(word) lines_bcd#68 )
(byte) current_movedown_counter#42 ← phi( main::@41/(byte) current_movedown_counter#46 )
(byte) keyboard_modifiers#38 ← phi( main::@41/(byte) keyboard_modifiers#45 )
(byte) keyboard_events_size#44 ← phi( main::@41/(byte) keyboard_events_size#54 )
(byte) render_screen_showing#26 ← phi( main::@41/(byte) render_screen_showing#31 )
(byte) next_piece_idx#57 ← phi( main::@41/(byte) next_piece_idx#68 )
(byte) game_over#58 ← phi( main::@41/(byte) game_over#71 )
(byte) current_ypos#76 ← phi( main::@41/(byte) current_ypos#86 )
(byte) current_xpos#97 ← phi( main::@41/(byte) current_xpos#110 )
(byte*) current_piece_gfx#80 ← phi( main::@41/(byte*) current_piece_gfx#97 )
(byte) current_orientation#75 ← phi( main::@41/(byte) current_orientation#86 )
(byte) current_piece_char#67 ← phi( main::@41/(byte) current_piece_char#83 )
(byte*) current_piece#68 ← phi( main::@41/(byte*) current_piece#80 )
(byte) current_movedown_slow#74 ← phi( main::@41/(byte) current_movedown_slow#82 )
(byte) render_screen_show#21 ← phi( main::@41/(byte) render_screen_show#31 )
(byte) render_screen_render#20 ← phi( main::@41/(byte) render_screen_render#21 )
call render_screen_swap
to:main::@43
main::@43: scope:[main] from main::@42
(byte) level_bcd#54 ← phi( main::@42/(byte) level_bcd#68 )
(byte) level#55 ← phi( main::@42/(byte) level#71 )
(dword) score_bcd#44 ← phi( main::@42/(dword) score_bcd#57 )
(word) lines_bcd#44 ← phi( main::@42/(word) lines_bcd#57 )
(byte) current_movedown_counter#33 ← phi( main::@42/(byte) current_movedown_counter#42 )
(byte) keyboard_modifiers#31 ← phi( main::@42/(byte) keyboard_modifiers#38 )
(byte) keyboard_events_size#34 ← phi( main::@42/(byte) keyboard_events_size#44 )
(byte) render_screen_showing#18 ← phi( main::@42/(byte) render_screen_showing#26 )
(byte) next_piece_idx#44 ← phi( main::@42/(byte) next_piece_idx#57 )
(byte) game_over#43 ← phi( main::@42/(byte) game_over#58 )
(byte) current_ypos#61 ← phi( main::@42/(byte) current_ypos#76 )
(byte) current_xpos#76 ← phi( main::@42/(byte) current_xpos#97 )
(byte*) current_piece_gfx#61 ← phi( main::@42/(byte*) current_piece_gfx#80 )
(byte) current_orientation#60 ← phi( main::@42/(byte) current_orientation#75 )
(byte) current_piece_char#49 ← phi( main::@42/(byte) current_piece_char#67 )
(byte*) current_piece#52 ← phi( main::@42/(byte*) current_piece#68 )
(byte) current_movedown_slow#60 ← phi( main::@42/(byte) current_movedown_slow#74 )
(byte) render_screen_show#15 ← phi( main::@42/(byte) render_screen_show#4 )
(byte) render_screen_render#17 ← phi( main::@42/(byte) render_screen_render#4 )
(byte) render_screen_render#6 ← (byte) render_screen_render#17
(byte) render_screen_show#6 ← (byte) render_screen_show#15
to:main::@1
main::@return: scope:[main] from main::@1
(byte) level_bcd#24 ← phi( main::@1/(byte) level_bcd#40 )
(byte) level#24 ← phi( main::@1/(byte) level#40 )
(dword) score_bcd#18 ← phi( main::@1/(dword) score_bcd#33 )
(word) lines_bcd#19 ← phi( main::@1/(word) lines_bcd#33 )
(byte) current_movedown_counter#16 ← phi( main::@1/(byte) current_movedown_counter#26 )
(byte) keyboard_modifiers#16 ← phi( main::@1/(byte) keyboard_modifiers#24 )
(byte) keyboard_events_size#19 ← phi( main::@1/(byte) keyboard_events_size#27 )
(byte) render_screen_showing#9 ← phi( main::@1/(byte) render_screen_showing#13 )
(byte) next_piece_idx#22 ← phi( main::@1/(byte) next_piece_idx#34 )
(byte) game_over#21 ← phi( main::@1/(byte) game_over#33 )
(byte) current_ypos#28 ← phi( main::@1/(byte) current_ypos#48 )
(byte) current_xpos#34 ← phi( main::@1/(byte) current_xpos#57 )
(byte*) current_piece_gfx#27 ← phi( main::@1/(byte*) current_piece_gfx#44 )
(byte) current_orientation#30 ← phi( main::@1/(byte) current_orientation#48 )
(byte) current_piece_char#22 ← phi( main::@1/(byte) current_piece_char#35 )
(byte*) current_piece#22 ← phi( main::@1/(byte*) current_piece#38 )
(byte) current_movedown_slow#27 ← phi( main::@1/(byte) current_movedown_slow#45 )
(byte) render_screen_render#18 ← phi( main::@1/(byte) render_screen_render#28 )
(byte) render_screen_show#16 ← phi( main::@1/(byte) render_screen_show#23 )
(byte) render_screen_show#7 ← (byte) render_screen_show#16
(byte) render_screen_render#7 ← (byte) render_screen_render#18
(byte) current_movedown_slow#14 ← (byte) current_movedown_slow#27
(byte*) current_piece#10 ← (byte*) current_piece#22
(byte) current_piece_char#10 ← (byte) current_piece_char#22
(byte) current_orientation#13 ← (byte) current_orientation#30
(byte*) current_piece_gfx#13 ← (byte*) current_piece_gfx#27
(byte) current_xpos#14 ← (byte) current_xpos#34
(byte) current_ypos#11 ← (byte) current_ypos#28
(byte) game_over#10 ← (byte) game_over#21
(byte) next_piece_idx#10 ← (byte) next_piece_idx#22
(byte) render_screen_showing#4 ← (byte) render_screen_showing#9
(byte) keyboard_events_size#8 ← (byte) keyboard_events_size#19
(byte) keyboard_modifiers#8 ← (byte) keyboard_modifiers#16
(byte) current_movedown_counter#7 ← (byte) current_movedown_counter#16
(word) lines_bcd#8 ← (word) lines_bcd#19
(dword) score_bcd#8 ← (dword) score_bcd#18
(byte) level#10 ← (byte) level#24
(byte) level_bcd#11 ← (byte) level_bcd#24
return
to:@return
@38: scope:[] from @31
(byte) irq_cnt#17 ← phi( @31/(byte) irq_cnt#19 )
(byte) irq_sprite_ptr#14 ← phi( @31/(byte) irq_sprite_ptr#17 )
(byte) level_bcd#41 ← phi( @31/(byte) level_bcd#56 )
(byte) level#41 ← phi( @31/(byte) level#57 )
(dword) score_bcd#34 ← phi( @31/(dword) score_bcd#46 )
(word) lines_bcd#34 ← phi( @31/(word) lines_bcd#46 )
(byte) current_movedown_counter#27 ← phi( @31/(byte) current_movedown_counter#35 )
(byte) keyboard_modifiers#25 ← phi( @31/(byte) keyboard_modifiers#33 )
(byte) keyboard_events_size#28 ← phi( @31/(byte) keyboard_events_size#36 )
(byte) render_screen_showing#14 ← phi( @31/(byte) render_screen_showing#20 )
(byte) next_piece_idx#35 ← phi( @31/(byte) next_piece_idx#46 )
(byte) game_over#34 ← phi( @31/(byte) game_over#45 )
(byte) current_ypos#49 ← phi( @31/(byte) current_ypos#64 )
(byte) current_xpos#58 ← phi( @31/(byte) current_xpos#78 )
(byte*) current_piece_gfx#45 ← phi( @31/(byte*) current_piece_gfx#63 )
(byte) current_orientation#49 ← phi( @31/(byte) current_orientation#62 )
(byte) current_piece_char#36 ← phi( @31/(byte) current_piece_char#51 )
(byte*) current_piece#39 ← phi( @31/(byte*) current_piece#54 )
(byte) current_movedown_slow#46 ← phi( @31/(byte) current_movedown_slow#62 )
(byte) render_screen_render#29 ← phi( @31/(byte) render_screen_render#40 )
(byte) render_screen_show#24 ← phi( @31/(byte) render_screen_show#32 )
(byte) irq_raster_next#10 ← phi( @31/(byte) irq_raster_next#17 )
(byte) irq_sprite_ypos#9 ← phi( @31/(byte) irq_sprite_ypos#14 )
call main
to:@40
@40: scope:[] from @38
(byte) level_bcd#25 ← phi( @38/(byte) level_bcd#11 )
(byte) level#25 ← phi( @38/(byte) level#10 )
(dword) score_bcd#19 ← phi( @38/(dword) score_bcd#8 )
(word) lines_bcd#20 ← phi( @38/(word) lines_bcd#8 )
(byte) current_movedown_counter#17 ← phi( @38/(byte) current_movedown_counter#7 )
(byte) keyboard_modifiers#17 ← phi( @38/(byte) keyboard_modifiers#8 )
(byte) keyboard_events_size#20 ← phi( @38/(byte) keyboard_events_size#8 )
(byte) render_screen_showing#10 ← phi( @38/(byte) render_screen_showing#4 )
(byte) next_piece_idx#23 ← phi( @38/(byte) next_piece_idx#10 )
(byte) game_over#22 ← phi( @38/(byte) game_over#10 )
(byte) current_ypos#29 ← phi( @38/(byte) current_ypos#11 )
(byte) current_xpos#35 ← phi( @38/(byte) current_xpos#14 )
(byte*) current_piece_gfx#28 ← phi( @38/(byte*) current_piece_gfx#13 )
(byte) current_orientation#31 ← phi( @38/(byte) current_orientation#13 )
(byte) current_piece_char#23 ← phi( @38/(byte) current_piece_char#10 )
(byte*) current_piece#23 ← phi( @38/(byte*) current_piece#10 )
(byte) current_movedown_slow#28 ← phi( @38/(byte) current_movedown_slow#14 )
(byte) render_screen_render#19 ← phi( @38/(byte) render_screen_render#7 )
(byte) render_screen_show#17 ← phi( @38/(byte) render_screen_show#7 )
(byte) render_screen_show#8 ← (byte) render_screen_show#17
(byte) render_screen_render#8 ← (byte) render_screen_render#19
(byte) current_movedown_slow#15 ← (byte) current_movedown_slow#28
(byte*) current_piece#11 ← (byte*) current_piece#23
(byte) current_piece_char#11 ← (byte) current_piece_char#23
(byte) current_orientation#14 ← (byte) current_orientation#31
(byte*) current_piece_gfx#14 ← (byte*) current_piece_gfx#28
(byte) current_xpos#15 ← (byte) current_xpos#35
(byte) current_ypos#12 ← (byte) current_ypos#29
(byte) game_over#11 ← (byte) game_over#22
(byte) next_piece_idx#11 ← (byte) next_piece_idx#23
(byte) render_screen_showing#5 ← (byte) render_screen_showing#10
(byte) keyboard_events_size#9 ← (byte) keyboard_events_size#20
(byte) keyboard_modifiers#9 ← (byte) keyboard_modifiers#17
(byte) current_movedown_counter#8 ← (byte) current_movedown_counter#17
(word) lines_bcd#9 ← (word) lines_bcd#20
(dword) score_bcd#9 ← (dword) score_bcd#19
(byte) level#11 ← (byte) level#25
(byte) level_bcd#12 ← (byte) level_bcd#25
to:@end
@end: scope:[] from @40
SYMBOL TABLE SSA
(byte*~) $1
(byte/signed byte/word/signed word/dword/signed dword~) $10
(byte/signed word/word/dword/signed dword/signed byte~) $11
(byte/signed byte/word/signed word/dword/signed dword~) $12
(byte/signed word/word/dword/signed dword/signed byte~) $13
(byte/signed byte/word/signed word/dword/signed dword~) $14
(byte/signed word/word/dword/signed dword/signed byte~) $15
(byte/signed byte/word/signed word/dword/signed dword~) $16
(byte/signed word/word/dword/signed dword/signed byte~) $17
(byte/signed byte/word/signed word/dword/signed dword~) $18
(byte/signed word/word/dword/signed dword/signed byte~) $19
(byte*~) $2
(byte/signed byte/word/signed word/dword/signed dword~) $20
(byte/signed word/word/dword/signed dword/signed byte~) $21
(word~) $22
(word~) $23
(word~) $24
(word~) $25
(word~) $26
(word~) $27
(word~) $28
(byte/signed word/word/dword/signed dword~) $29
(byte~) $3
(byte/signed word/word/dword/signed dword~) $4
(byte/signed word/word/dword/signed dword~) $5
(byte~) $6
(byte/signed word/word/dword/signed dword~) $7
(byte/signed byte/word/signed word/dword/signed dword~) $8
(byte/signed word/word/dword/signed dword/signed byte~) $9
(label) @12
(label) @14
(label) @23
(label) @24
(label) @26
(label) @31
(label) @38
(label) @39
(label) @40
(label) @5
(label) @9
(label) @begin
(label) @end
(byte*) BGCOL1
(byte*) BGCOL1#0
(byte*) BGCOL2
(byte*) BGCOL2#0
(byte*) BGCOL3
(byte*) BGCOL3#0
(byte*) BGCOL4
(byte*) BGCOL4#0
(byte) BLACK
(byte) BLACK#0
(byte) BLUE
(byte) BLUE#0
(byte*) BORDERCOL
(byte*) BORDERCOL#0
(byte*) CIA1_INTERRUPT
(byte*) CIA1_INTERRUPT#0
(byte*) CIA1_PORT_A
(byte*) CIA1_PORT_A#0
(byte*) CIA1_PORT_B
(byte*) CIA1_PORT_B#0
(byte*) CIA2_PORT_A
(byte*) CIA2_PORT_A#0
(byte*) CIA2_PORT_A_DDR
(byte*) CIA2_PORT_A_DDR#0
(byte) CIA_INTERRUPT_CLEAR
(byte) CIA_INTERRUPT_CLEAR#0
(byte) COLLISION_BOTTOM
(byte) COLLISION_BOTTOM#0
(byte) COLLISION_LEFT
(byte) COLLISION_LEFT#0
(byte) COLLISION_NONE
(byte) COLLISION_NONE#0
(byte) COLLISION_PLAYFIELD
(byte) COLLISION_PLAYFIELD#0
(byte) COLLISION_RIGHT
(byte) COLLISION_RIGHT#0
(byte*) COLS
(byte*) COLS#0
(byte) CYAN
(byte) CYAN#0
(byte*) D011
(byte*) D011#0
(byte*) D018
(byte*) D018#0
(byte) DARK_GREY
(byte) DARK_GREY#0
(byte) GREEN
(byte) GREEN#0
(byte) GREY
(byte) GREY#0
(void()**) HARDWARE_IRQ
(void()**) HARDWARE_IRQ#0
(byte*) IRQ_ENABLE
(byte*) IRQ_ENABLE#0
(byte) IRQ_RASTER
(byte) IRQ_RASTER#0
(byte) IRQ_RASTER_FIRST
(byte) IRQ_RASTER_FIRST#0
(byte*) IRQ_STATUS
(byte*) IRQ_STATUS#0
(byte) KEY_COMMA
(byte) KEY_COMMA#0
(byte) KEY_COMMODORE
(byte) KEY_COMMODORE#0
(byte) KEY_CTRL
(byte) KEY_CTRL#0
(byte) KEY_DOT
(byte) KEY_DOT#0
(byte) KEY_LSHIFT
(byte) KEY_LSHIFT#0
(byte) KEY_MODIFIER_COMMODORE
(byte) KEY_MODIFIER_COMMODORE#0
(byte) KEY_MODIFIER_CTRL
(byte) KEY_MODIFIER_CTRL#0
(byte) KEY_MODIFIER_LSHIFT
(byte) KEY_MODIFIER_LSHIFT#0
(byte) KEY_MODIFIER_RSHIFT
(byte) KEY_MODIFIER_RSHIFT#0
(byte) KEY_RSHIFT
(byte) KEY_RSHIFT#0
(byte) KEY_SPACE
(byte) KEY_SPACE#0
(byte) KEY_X
(byte) KEY_X#0
(byte) KEY_Z
(byte) KEY_Z#0
(byte) LIGHT_BLUE
(byte) LIGHT_BLUE#0
(byte) LIGHT_GREEN
(byte) LIGHT_GREEN#0
(byte[]) MOVEDOWN_SLOW_SPEEDS
(byte[]) MOVEDOWN_SLOW_SPEEDS#0
(byte) ORANGE
(byte) ORANGE#0
(word[]) PIECES
(word[]) PIECES#0
(byte[]) PIECES_CHARS
(byte[]) PIECES_CHARS#0
(byte[]) PIECES_COLORS_1
(byte[]) PIECES_COLORS_1#0
(byte[]) PIECES_COLORS_2
(byte[]) PIECES_COLORS_2#0
(byte[]) PIECES_NEXT_CHARS
(byte[]) PIECES_NEXT_CHARS#0
(byte[]) PIECES_START_X
(byte[]) PIECES_START_X#0
(byte[]) PIECES_START_Y
(byte[]) PIECES_START_Y#0
(byte[$21]) PIECE_I
(byte[$21]) PIECE_I#0
(byte[$17]) PIECE_J
(byte[$17]) PIECE_J#0
(byte[$15]) PIECE_L
(byte[$15]) PIECE_L#0
(byte[$19]) PIECE_O
(byte[$19]) PIECE_O#0
(byte[$11]) PIECE_S
(byte[$11]) PIECE_S#0
(byte[$9]) PIECE_T
(byte[$9]) PIECE_T#0
(byte[$13]) PIECE_Z
(byte[$13]) PIECE_Z#0
(byte) PINK
(byte) PINK#0
(byte*) PLAYFIELD_CHARSET
(byte*) PLAYFIELD_CHARSET#0
(byte*) PLAYFIELD_COLORS_ORIGINAL
(byte*) PLAYFIELD_COLORS_ORIGINAL#0
(byte) PLAYFIELD_COLS
(byte) PLAYFIELD_COLS#0
(byte) PLAYFIELD_LINES
(byte) PLAYFIELD_LINES#0
(byte*) PLAYFIELD_SCREEN_1
(byte*) PLAYFIELD_SCREEN_1#0
(byte*) PLAYFIELD_SCREEN_2
(byte*) PLAYFIELD_SCREEN_2#0
(byte*) PLAYFIELD_SCREEN_ORIGINAL
(byte*) PLAYFIELD_SCREEN_ORIGINAL#0
(byte*) PLAYFIELD_SPRITES
(byte*) PLAYFIELD_SPRITES#0
(byte*) PLAYFIELD_SPRITE_PTRS_1
(byte*) PLAYFIELD_SPRITE_PTRS_1#0
(byte*) PLAYFIELD_SPRITE_PTRS_2
(byte*) PLAYFIELD_SPRITE_PTRS_2#0
(byte*) PROCPORT
(byte*) PROCPORT#0
(byte*) PROCPORT_DDR
(byte*) PROCPORT_DDR#0
(byte) PROCPORT_DDR_MEMORY_MASK
(byte) PROCPORT_DDR_MEMORY_MASK#0
(byte) PROCPORT_RAM_IO
(byte) PROCPORT_RAM_IO#0
(byte) PURPLE
(byte) PURPLE#0
(byte*) RASTER
(byte*) RASTER#0
(byte) RED
(byte) RED#0
(dword[]) SCORE_BASE_BCD
(dword[]) SCORE_BASE_BCD#0
(byte) SID_CONTROL_NOISE
(byte) SID_CONTROL_NOISE#0
(byte*) SID_VOICE3_CONTROL
(byte*) SID_VOICE3_CONTROL#0
(word*) SID_VOICE3_FREQ
(word*) SID_VOICE3_FREQ#0
(byte*) SID_VOICE3_OSC
(byte*) SID_VOICE3_OSC#0
(byte*) SPRITES_COLS
(byte*) SPRITES_COLS#0
(byte*) SPRITES_ENABLE
(byte*) SPRITES_ENABLE#0
(byte*) SPRITES_EXPAND_X
(byte*) SPRITES_EXPAND_X#0
(byte*) SPRITES_EXPAND_Y
(byte*) SPRITES_EXPAND_Y#0
(byte) SPRITES_FIRST_YPOS
(byte) SPRITES_FIRST_YPOS#0
(byte*) SPRITES_MC
(byte*) SPRITES_MC#0
(byte*) SPRITES_XPOS
(byte*) SPRITES_XPOS#0
(byte*) SPRITES_YPOS
(byte*) SPRITES_YPOS#0
(word) SPRITE_PTRS
(word) SPRITE_PTRS#0
(byte*) VIC_CONTROL
(byte*) VIC_CONTROL#0
(byte) VIC_DEN
(byte) VIC_DEN#0
(byte) VIC_ECM
(byte) VIC_ECM#0
(byte) VIC_RSEL
(byte) VIC_RSEL#0
(byte) current_movedown_counter
(byte) current_movedown_counter#0
(byte) current_movedown_counter#1
(byte) current_movedown_counter#10
(byte) current_movedown_counter#11
(byte) current_movedown_counter#12
(byte) current_movedown_counter#13
(byte) current_movedown_counter#14
(byte) current_movedown_counter#15
(byte) current_movedown_counter#16
(byte) current_movedown_counter#17
(byte) current_movedown_counter#18
(byte) current_movedown_counter#19
(byte) current_movedown_counter#2
(byte) current_movedown_counter#20
(byte) current_movedown_counter#21
(byte) current_movedown_counter#22
(byte) current_movedown_counter#23
(byte) current_movedown_counter#24
(byte) current_movedown_counter#25
(byte) current_movedown_counter#26
(byte) current_movedown_counter#27
(byte) current_movedown_counter#28
(byte) current_movedown_counter#29
(byte) current_movedown_counter#3
(byte) current_movedown_counter#30
(byte) current_movedown_counter#31
(byte) current_movedown_counter#32
(byte) current_movedown_counter#33
(byte) current_movedown_counter#34
(byte) current_movedown_counter#35
(byte) current_movedown_counter#36
(byte) current_movedown_counter#37
(byte) current_movedown_counter#38
(byte) current_movedown_counter#39
(byte) current_movedown_counter#4
(byte) current_movedown_counter#40
(byte) current_movedown_counter#41
(byte) current_movedown_counter#42
(byte) current_movedown_counter#43
(byte) current_movedown_counter#44
(byte) current_movedown_counter#45
(byte) current_movedown_counter#46
(byte) current_movedown_counter#47
(byte) current_movedown_counter#48
(byte) current_movedown_counter#49
(byte) current_movedown_counter#5
(byte) current_movedown_counter#50
(byte) current_movedown_counter#51
(byte) current_movedown_counter#52
(byte) current_movedown_counter#53
(byte) current_movedown_counter#54
(byte) current_movedown_counter#55
(byte) current_movedown_counter#56
(byte) current_movedown_counter#57
(byte) current_movedown_counter#58
(byte) current_movedown_counter#59
(byte) current_movedown_counter#6
(byte) current_movedown_counter#60
(byte) current_movedown_counter#61
(byte) current_movedown_counter#62
(byte) current_movedown_counter#7
(byte) current_movedown_counter#8
(byte) current_movedown_counter#9
(byte) current_movedown_fast
(byte) current_movedown_fast#0
(byte) current_movedown_slow
(byte) current_movedown_slow#0
(byte) current_movedown_slow#1
(byte) current_movedown_slow#10
(byte) current_movedown_slow#11
(byte) current_movedown_slow#12
(byte) current_movedown_slow#13
(byte) current_movedown_slow#14
(byte) current_movedown_slow#15
(byte) current_movedown_slow#16
(byte) current_movedown_slow#17
(byte) current_movedown_slow#18
(byte) current_movedown_slow#19
(byte) current_movedown_slow#2
(byte) current_movedown_slow#20
(byte) current_movedown_slow#21
(byte) current_movedown_slow#22
(byte) current_movedown_slow#23
(byte) current_movedown_slow#24
(byte) current_movedown_slow#25
(byte) current_movedown_slow#26
(byte) current_movedown_slow#27
(byte) current_movedown_slow#28
(byte) current_movedown_slow#29
(byte) current_movedown_slow#3
(byte) current_movedown_slow#30
(byte) current_movedown_slow#31
(byte) current_movedown_slow#32
(byte) current_movedown_slow#33
(byte) current_movedown_slow#34
(byte) current_movedown_slow#35
(byte) current_movedown_slow#36
(byte) current_movedown_slow#37
(byte) current_movedown_slow#38
(byte) current_movedown_slow#39
(byte) current_movedown_slow#4
(byte) current_movedown_slow#40
(byte) current_movedown_slow#41
(byte) current_movedown_slow#42
(byte) current_movedown_slow#43
(byte) current_movedown_slow#44
(byte) current_movedown_slow#45
(byte) current_movedown_slow#46
(byte) current_movedown_slow#47
(byte) current_movedown_slow#48
(byte) current_movedown_slow#49
(byte) current_movedown_slow#5
(byte) current_movedown_slow#50
(byte) current_movedown_slow#51
(byte) current_movedown_slow#52
(byte) current_movedown_slow#53
(byte) current_movedown_slow#54
(byte) current_movedown_slow#55
(byte) current_movedown_slow#56
(byte) current_movedown_slow#57
(byte) current_movedown_slow#58
(byte) current_movedown_slow#59
(byte) current_movedown_slow#6
(byte) current_movedown_slow#60
(byte) current_movedown_slow#61
(byte) current_movedown_slow#62
(byte) current_movedown_slow#63
(byte) current_movedown_slow#64
(byte) current_movedown_slow#65
(byte) current_movedown_slow#66
(byte) current_movedown_slow#67
(byte) current_movedown_slow#68
(byte) current_movedown_slow#69
(byte) current_movedown_slow#7
(byte) current_movedown_slow#70
(byte) current_movedown_slow#71
(byte) current_movedown_slow#72
(byte) current_movedown_slow#73
(byte) current_movedown_slow#74
(byte) current_movedown_slow#75
(byte) current_movedown_slow#76
(byte) current_movedown_slow#77
(byte) current_movedown_slow#78
(byte) current_movedown_slow#79
(byte) current_movedown_slow#8
(byte) current_movedown_slow#80
(byte) current_movedown_slow#81
(byte) current_movedown_slow#82
(byte) current_movedown_slow#83
(byte) current_movedown_slow#84
(byte) current_movedown_slow#85
(byte) current_movedown_slow#86
(byte) current_movedown_slow#87
(byte) current_movedown_slow#88
(byte) current_movedown_slow#89
(byte) current_movedown_slow#9
(byte) current_movedown_slow#90
(byte) current_movedown_slow#91
(byte) current_movedown_slow#92
(byte) current_movedown_slow#93
(byte) current_orientation
(byte) current_orientation#0
(byte) current_orientation#1
(byte) current_orientation#10
(byte) current_orientation#100
(byte) current_orientation#11
(byte) current_orientation#12
(byte) current_orientation#13
(byte) current_orientation#14
(byte) current_orientation#15
(byte) current_orientation#16
(byte) current_orientation#17
(byte) current_orientation#18
(byte) current_orientation#19
(byte) current_orientation#2
(byte) current_orientation#20
(byte) current_orientation#21
(byte) current_orientation#22
(byte) current_orientation#23
(byte) current_orientation#24
(byte) current_orientation#25
(byte) current_orientation#26
(byte) current_orientation#27
(byte) current_orientation#28
(byte) current_orientation#29
(byte) current_orientation#3
(byte) current_orientation#30
(byte) current_orientation#31
(byte) current_orientation#32
(byte) current_orientation#33
(byte) current_orientation#34
(byte) current_orientation#35
(byte) current_orientation#36
(byte) current_orientation#37
(byte) current_orientation#38
(byte) current_orientation#39
(byte) current_orientation#4
(byte) current_orientation#40
(byte) current_orientation#41
(byte) current_orientation#42
(byte) current_orientation#43
(byte) current_orientation#44
(byte) current_orientation#45
(byte) current_orientation#46
(byte) current_orientation#47
(byte) current_orientation#48
(byte) current_orientation#49
(byte) current_orientation#5
(byte) current_orientation#50
(byte) current_orientation#51
(byte) current_orientation#52
(byte) current_orientation#53
(byte) current_orientation#54
(byte) current_orientation#55
(byte) current_orientation#56
(byte) current_orientation#57
(byte) current_orientation#58
(byte) current_orientation#59
(byte) current_orientation#6
(byte) current_orientation#60
(byte) current_orientation#61
(byte) current_orientation#62
(byte) current_orientation#63
(byte) current_orientation#64
(byte) current_orientation#65
(byte) current_orientation#66
(byte) current_orientation#67
(byte) current_orientation#68
(byte) current_orientation#69
(byte) current_orientation#7
(byte) current_orientation#70
(byte) current_orientation#71
(byte) current_orientation#72
(byte) current_orientation#73
(byte) current_orientation#74
(byte) current_orientation#75
(byte) current_orientation#76
(byte) current_orientation#77
(byte) current_orientation#78
(byte) current_orientation#79
(byte) current_orientation#8
(byte) current_orientation#80
(byte) current_orientation#81
(byte) current_orientation#82
(byte) current_orientation#83
(byte) current_orientation#84
(byte) current_orientation#85
(byte) current_orientation#86
(byte) current_orientation#87
(byte) current_orientation#88
(byte) current_orientation#89
(byte) current_orientation#9
(byte) current_orientation#90
(byte) current_orientation#91
(byte) current_orientation#92
(byte) current_orientation#93
(byte) current_orientation#94
(byte) current_orientation#95
(byte) current_orientation#96
(byte) current_orientation#97
(byte) current_orientation#98
(byte) current_orientation#99
(byte*) current_piece
(byte*) current_piece#0
(byte*) current_piece#1
(byte*) current_piece#10
(byte*) current_piece#11
(byte*) current_piece#12
(byte*) current_piece#13
(byte*) current_piece#14
(byte*) current_piece#15
(byte*) current_piece#16
(byte*) current_piece#17
(byte*) current_piece#18
(byte*) current_piece#19
(byte*) current_piece#2
(byte*) current_piece#20
(byte*) current_piece#21
(byte*) current_piece#22
(byte*) current_piece#23
(byte*) current_piece#24
(byte*) current_piece#25
(byte*) current_piece#26
(byte*) current_piece#27
(byte*) current_piece#28
(byte*) current_piece#29
(byte*) current_piece#3
(byte*) current_piece#30
(byte*) current_piece#31
(byte*) current_piece#32
(byte*) current_piece#33
(byte*) current_piece#34
(byte*) current_piece#35
(byte*) current_piece#36
(byte*) current_piece#37
(byte*) current_piece#38
(byte*) current_piece#39
(byte*) current_piece#4
(byte*) current_piece#40
(byte*) current_piece#41
(byte*) current_piece#42
(byte*) current_piece#43
(byte*) current_piece#44
(byte*) current_piece#45
(byte*) current_piece#46
(byte*) current_piece#47
(byte*) current_piece#48
(byte*) current_piece#49
(byte*) current_piece#5
(byte*) current_piece#50
(byte*) current_piece#51
(byte*) current_piece#52
(byte*) current_piece#53
(byte*) current_piece#54
(byte*) current_piece#55
(byte*) current_piece#56
(byte*) current_piece#57
(byte*) current_piece#58
(byte*) current_piece#59
(byte*) current_piece#6
(byte*) current_piece#60
(byte*) current_piece#61
(byte*) current_piece#62
(byte*) current_piece#63
(byte*) current_piece#64
(byte*) current_piece#65
(byte*) current_piece#66
(byte*) current_piece#67
(byte*) current_piece#68
(byte*) current_piece#69
(byte*) current_piece#7
(byte*) current_piece#70
(byte*) current_piece#71
(byte*) current_piece#72
(byte*) current_piece#73
(byte*) current_piece#74
(byte*) current_piece#75
(byte*) current_piece#76
(byte*) current_piece#77
(byte*) current_piece#78
(byte*) current_piece#79
(byte*) current_piece#8
(byte*) current_piece#80
(byte*) current_piece#81
(byte*) current_piece#82
(byte*) current_piece#83
(byte*) current_piece#84
(byte*) current_piece#85
(byte*) current_piece#86
(byte*) current_piece#87
(byte*) current_piece#88
(byte*) current_piece#89
(byte*) current_piece#9
(byte*) current_piece#90
(byte*) current_piece#91
(byte*) current_piece#92
(byte*) current_piece#93
(byte*) current_piece#94
(byte*) current_piece#95
(byte*) current_piece#96
(byte) current_piece_char
(byte) current_piece_char#0
(byte) current_piece_char#1
(byte) current_piece_char#10
(byte) current_piece_char#100
(byte) current_piece_char#101
(byte) current_piece_char#102
(byte) current_piece_char#103
(byte) current_piece_char#104
(byte) current_piece_char#11
(byte) current_piece_char#12
(byte) current_piece_char#13
(byte) current_piece_char#14
(byte) current_piece_char#15
(byte) current_piece_char#16
(byte) current_piece_char#17
(byte) current_piece_char#18
(byte) current_piece_char#19
(byte) current_piece_char#2
(byte) current_piece_char#20
(byte) current_piece_char#21
(byte) current_piece_char#22
(byte) current_piece_char#23
(byte) current_piece_char#24
(byte) current_piece_char#25
(byte) current_piece_char#26
(byte) current_piece_char#27
(byte) current_piece_char#28
(byte) current_piece_char#29
(byte) current_piece_char#3
(byte) current_piece_char#30
(byte) current_piece_char#31
(byte) current_piece_char#32
(byte) current_piece_char#33
(byte) current_piece_char#34
(byte) current_piece_char#35
(byte) current_piece_char#36
(byte) current_piece_char#37
(byte) current_piece_char#38
(byte) current_piece_char#39
(byte) current_piece_char#4
(byte) current_piece_char#40
(byte) current_piece_char#41
(byte) current_piece_char#42
(byte) current_piece_char#43
(byte) current_piece_char#44
(byte) current_piece_char#45
(byte) current_piece_char#46
(byte) current_piece_char#47
(byte) current_piece_char#48
(byte) current_piece_char#49
(byte) current_piece_char#5
(byte) current_piece_char#50
(byte) current_piece_char#51
(byte) current_piece_char#52
(byte) current_piece_char#53
(byte) current_piece_char#54
(byte) current_piece_char#55
(byte) current_piece_char#56
(byte) current_piece_char#57
(byte) current_piece_char#58
(byte) current_piece_char#59
(byte) current_piece_char#6
(byte) current_piece_char#60
(byte) current_piece_char#61
(byte) current_piece_char#62
(byte) current_piece_char#63
(byte) current_piece_char#64
(byte) current_piece_char#65
(byte) current_piece_char#66
(byte) current_piece_char#67
(byte) current_piece_char#68
(byte) current_piece_char#69
(byte) current_piece_char#7
(byte) current_piece_char#70
(byte) current_piece_char#71
(byte) current_piece_char#72
(byte) current_piece_char#73
(byte) current_piece_char#74
(byte) current_piece_char#75
(byte) current_piece_char#76
(byte) current_piece_char#77
(byte) current_piece_char#78
(byte) current_piece_char#79
(byte) current_piece_char#8
(byte) current_piece_char#80
(byte) current_piece_char#81
(byte) current_piece_char#82
(byte) current_piece_char#83
(byte) current_piece_char#84
(byte) current_piece_char#85
(byte) current_piece_char#86
(byte) current_piece_char#87
(byte) current_piece_char#88
(byte) current_piece_char#89
(byte) current_piece_char#9
(byte) current_piece_char#90
(byte) current_piece_char#91
(byte) current_piece_char#92
(byte) current_piece_char#93
(byte) current_piece_char#94
(byte) current_piece_char#95
(byte) current_piece_char#96
(byte) current_piece_char#97
(byte) current_piece_char#98
(byte) current_piece_char#99
(byte*) current_piece_gfx
(byte*) current_piece_gfx#0
(byte*) current_piece_gfx#1
(byte*) current_piece_gfx#10
(byte*) current_piece_gfx#100
(byte*) current_piece_gfx#101
(byte*) current_piece_gfx#102
(byte*) current_piece_gfx#103
(byte*) current_piece_gfx#104
(byte*) current_piece_gfx#105
(byte*) current_piece_gfx#106
(byte*) current_piece_gfx#107
(byte*) current_piece_gfx#108
(byte*) current_piece_gfx#109
(byte*) current_piece_gfx#11
(byte*) current_piece_gfx#110
(byte*) current_piece_gfx#111
(byte*) current_piece_gfx#112
(byte*) current_piece_gfx#113
(byte*) current_piece_gfx#114
(byte*) current_piece_gfx#115
(byte*) current_piece_gfx#116
(byte*) current_piece_gfx#12
(byte*) current_piece_gfx#13
(byte*) current_piece_gfx#14
(byte*) current_piece_gfx#15
(byte*) current_piece_gfx#16
(byte*) current_piece_gfx#17
(byte*) current_piece_gfx#18
(byte*) current_piece_gfx#19
(byte*) current_piece_gfx#2
(byte*) current_piece_gfx#20
(byte*) current_piece_gfx#21
(byte*) current_piece_gfx#22
(byte*) current_piece_gfx#23
(byte*) current_piece_gfx#24
(byte*) current_piece_gfx#25
(byte*) current_piece_gfx#26
(byte*) current_piece_gfx#27
(byte*) current_piece_gfx#28
(byte*) current_piece_gfx#29
(byte*) current_piece_gfx#3
(byte*) current_piece_gfx#30
(byte*) current_piece_gfx#31
(byte*) current_piece_gfx#32
(byte*) current_piece_gfx#33
(byte*) current_piece_gfx#34
(byte*) current_piece_gfx#35
(byte*) current_piece_gfx#36
(byte*) current_piece_gfx#37
(byte*) current_piece_gfx#38
(byte*) current_piece_gfx#39
(byte*) current_piece_gfx#4
(byte*) current_piece_gfx#40
(byte*) current_piece_gfx#41
(byte*) current_piece_gfx#42
(byte*) current_piece_gfx#43
(byte*) current_piece_gfx#44
(byte*) current_piece_gfx#45
(byte*) current_piece_gfx#46
(byte*) current_piece_gfx#47
(byte*) current_piece_gfx#48
(byte*) current_piece_gfx#49
(byte*) current_piece_gfx#5
(byte*) current_piece_gfx#50
(byte*) current_piece_gfx#51
(byte*) current_piece_gfx#52
(byte*) current_piece_gfx#53
(byte*) current_piece_gfx#54
(byte*) current_piece_gfx#55
(byte*) current_piece_gfx#56
(byte*) current_piece_gfx#57
(byte*) current_piece_gfx#58
(byte*) current_piece_gfx#59
(byte*) current_piece_gfx#6
(byte*) current_piece_gfx#60
(byte*) current_piece_gfx#61
(byte*) current_piece_gfx#62
(byte*) current_piece_gfx#63
(byte*) current_piece_gfx#64
(byte*) current_piece_gfx#65
(byte*) current_piece_gfx#66
(byte*) current_piece_gfx#67
(byte*) current_piece_gfx#68
(byte*) current_piece_gfx#69
(byte*) current_piece_gfx#7
(byte*) current_piece_gfx#70
(byte*) current_piece_gfx#71
(byte*) current_piece_gfx#72
(byte*) current_piece_gfx#73
(byte*) current_piece_gfx#74
(byte*) current_piece_gfx#75
(byte*) current_piece_gfx#76
(byte*) current_piece_gfx#77
(byte*) current_piece_gfx#78
(byte*) current_piece_gfx#79
(byte*) current_piece_gfx#8
(byte*) current_piece_gfx#80
(byte*) current_piece_gfx#81
(byte*) current_piece_gfx#82
(byte*) current_piece_gfx#83
(byte*) current_piece_gfx#84
(byte*) current_piece_gfx#85
(byte*) current_piece_gfx#86
(byte*) current_piece_gfx#87
(byte*) current_piece_gfx#88
(byte*) current_piece_gfx#89
(byte*) current_piece_gfx#9
(byte*) current_piece_gfx#90
(byte*) current_piece_gfx#91
(byte*) current_piece_gfx#92
(byte*) current_piece_gfx#93
(byte*) current_piece_gfx#94
(byte*) current_piece_gfx#95
(byte*) current_piece_gfx#96
(byte*) current_piece_gfx#97
(byte*) current_piece_gfx#98
(byte*) current_piece_gfx#99
(byte) current_xpos
(byte) current_xpos#0
(byte) current_xpos#1
(byte) current_xpos#10
(byte) current_xpos#100
(byte) current_xpos#101
(byte) current_xpos#102
(byte) current_xpos#103
(byte) current_xpos#104
(byte) current_xpos#105
(byte) current_xpos#106
(byte) current_xpos#107
(byte) current_xpos#108
(byte) current_xpos#109
(byte) current_xpos#11
(byte) current_xpos#110
(byte) current_xpos#111
(byte) current_xpos#112
(byte) current_xpos#113
(byte) current_xpos#114
(byte) current_xpos#115
(byte) current_xpos#116
(byte) current_xpos#117
(byte) current_xpos#118
(byte) current_xpos#119
(byte) current_xpos#12
(byte) current_xpos#120
(byte) current_xpos#121
(byte) current_xpos#122
(byte) current_xpos#123
(byte) current_xpos#124
(byte) current_xpos#125
(byte) current_xpos#126
(byte) current_xpos#13
(byte) current_xpos#14
(byte) current_xpos#15
(byte) current_xpos#16
(byte) current_xpos#17
(byte) current_xpos#18
(byte) current_xpos#19
(byte) current_xpos#2
(byte) current_xpos#20
(byte) current_xpos#21
(byte) current_xpos#22
(byte) current_xpos#23
(byte) current_xpos#24
(byte) current_xpos#25
(byte) current_xpos#26
(byte) current_xpos#27
(byte) current_xpos#28
(byte) current_xpos#29
(byte) current_xpos#3
(byte) current_xpos#30
(byte) current_xpos#31
(byte) current_xpos#32
(byte) current_xpos#33
(byte) current_xpos#34
(byte) current_xpos#35
(byte) current_xpos#36
(byte) current_xpos#37
(byte) current_xpos#38
(byte) current_xpos#39
(byte) current_xpos#4
(byte) current_xpos#40
(byte) current_xpos#41
(byte) current_xpos#42
(byte) current_xpos#43
(byte) current_xpos#44
(byte) current_xpos#45
(byte) current_xpos#46
(byte) current_xpos#47
(byte) current_xpos#48
(byte) current_xpos#49
(byte) current_xpos#5
(byte) current_xpos#50
(byte) current_xpos#51
(byte) current_xpos#52
(byte) current_xpos#53
(byte) current_xpos#54
(byte) current_xpos#55
(byte) current_xpos#56
(byte) current_xpos#57
(byte) current_xpos#58
(byte) current_xpos#59
(byte) current_xpos#6
(byte) current_xpos#60
(byte) current_xpos#61
(byte) current_xpos#62
(byte) current_xpos#63
(byte) current_xpos#64
(byte) current_xpos#65
(byte) current_xpos#66
(byte) current_xpos#67
(byte) current_xpos#68
(byte) current_xpos#69
(byte) current_xpos#7
(byte) current_xpos#70
(byte) current_xpos#71
(byte) current_xpos#72
(byte) current_xpos#73
(byte) current_xpos#74
(byte) current_xpos#75
(byte) current_xpos#76
(byte) current_xpos#77
(byte) current_xpos#78
(byte) current_xpos#79
(byte) current_xpos#8
(byte) current_xpos#80
(byte) current_xpos#81
(byte) current_xpos#82
(byte) current_xpos#83
(byte) current_xpos#84
(byte) current_xpos#85
(byte) current_xpos#86
(byte) current_xpos#87
(byte) current_xpos#88
(byte) current_xpos#89
(byte) current_xpos#9
(byte) current_xpos#90
(byte) current_xpos#91
(byte) current_xpos#92
(byte) current_xpos#93
(byte) current_xpos#94
(byte) current_xpos#95
(byte) current_xpos#96
(byte) current_xpos#97
(byte) current_xpos#98
(byte) current_xpos#99
(byte) current_ypos
(byte) current_ypos#0
(byte) current_ypos#1
(byte) current_ypos#10
(byte) current_ypos#100
(byte) current_ypos#101
(byte) current_ypos#102
(byte) current_ypos#11
(byte) current_ypos#12
(byte) current_ypos#13
(byte) current_ypos#14
(byte) current_ypos#15
(byte) current_ypos#16
(byte) current_ypos#17
(byte) current_ypos#18
(byte) current_ypos#19
(byte) current_ypos#2
(byte) current_ypos#20
(byte) current_ypos#21
(byte) current_ypos#22
(byte) current_ypos#23
(byte) current_ypos#24
(byte) current_ypos#25
(byte) current_ypos#26
(byte) current_ypos#27
(byte) current_ypos#28
(byte) current_ypos#29
(byte) current_ypos#3
(byte) current_ypos#30
(byte) current_ypos#31
(byte) current_ypos#32
(byte) current_ypos#33
(byte) current_ypos#34
(byte) current_ypos#35
(byte) current_ypos#36
(byte) current_ypos#37
(byte) current_ypos#38
(byte) current_ypos#39
(byte) current_ypos#4
(byte) current_ypos#40
(byte) current_ypos#41
(byte) current_ypos#42
(byte) current_ypos#43
(byte) current_ypos#44
(byte) current_ypos#45
(byte) current_ypos#46
(byte) current_ypos#47
(byte) current_ypos#48
(byte) current_ypos#49
(byte) current_ypos#5
(byte) current_ypos#50
(byte) current_ypos#51
(byte) current_ypos#52
(byte) current_ypos#53
(byte) current_ypos#54
(byte) current_ypos#55
(byte) current_ypos#56
(byte) current_ypos#57
(byte) current_ypos#58
(byte) current_ypos#59
(byte) current_ypos#6
(byte) current_ypos#60
(byte) current_ypos#61
(byte) current_ypos#62
(byte) current_ypos#63
(byte) current_ypos#64
(byte) current_ypos#65
(byte) current_ypos#66
(byte) current_ypos#67
(byte) current_ypos#68
(byte) current_ypos#69
(byte) current_ypos#7
(byte) current_ypos#70
(byte) current_ypos#71
(byte) current_ypos#72
(byte) current_ypos#73
(byte) current_ypos#74
(byte) current_ypos#75
(byte) current_ypos#76
(byte) current_ypos#77
(byte) current_ypos#78
(byte) current_ypos#79
(byte) current_ypos#8
(byte) current_ypos#80
(byte) current_ypos#81
(byte) current_ypos#82
(byte) current_ypos#83
(byte) current_ypos#84
(byte) current_ypos#85
(byte) current_ypos#86
(byte) current_ypos#87
(byte) current_ypos#88
(byte) current_ypos#89
(byte) current_ypos#9
(byte) current_ypos#90
(byte) current_ypos#91
(byte) current_ypos#92
(byte) current_ypos#93
(byte) current_ypos#94
(byte) current_ypos#95
(byte) current_ypos#96
(byte) current_ypos#97
(byte) current_ypos#98
(byte) current_ypos#99
(byte) game_over
(byte) game_over#0
(byte) game_over#1
(byte) game_over#10
(byte) game_over#11
(byte) game_over#12
(byte) game_over#13
(byte) game_over#14
(byte) game_over#15
(byte) game_over#16
(byte) game_over#17
(byte) game_over#18
(byte) game_over#19
(byte) game_over#2
(byte) game_over#20
(byte) game_over#21
(byte) game_over#22
(byte) game_over#23
(byte) game_over#24
(byte) game_over#25
(byte) game_over#26
(byte) game_over#27
(byte) game_over#28
(byte) game_over#29
(byte) game_over#3
(byte) game_over#30
(byte) game_over#31
(byte) game_over#32
(byte) game_over#33
(byte) game_over#34
(byte) game_over#35
(byte) game_over#36
(byte) game_over#37
(byte) game_over#38
(byte) game_over#39
(byte) game_over#4
(byte) game_over#40
(byte) game_over#41
(byte) game_over#42
(byte) game_over#43
(byte) game_over#44
(byte) game_over#45
(byte) game_over#46
(byte) game_over#47
(byte) game_over#48
(byte) game_over#49
(byte) game_over#5
(byte) game_over#50
(byte) game_over#51
(byte) game_over#52
(byte) game_over#53
(byte) game_over#54
(byte) game_over#55
(byte) game_over#56
(byte) game_over#57
(byte) game_over#58
(byte) game_over#59
(byte) game_over#6
(byte) game_over#60
(byte) game_over#61
(byte) game_over#62
(byte) game_over#63
(byte) game_over#64
(byte) game_over#65
(byte) game_over#66
(byte) game_over#67
(byte) game_over#68
(byte) game_over#69
(byte) game_over#7
(byte) game_over#70
(byte) game_over#71
(byte) game_over#72
(byte) game_over#73
(byte) game_over#74
(byte) game_over#75
(byte) game_over#76
(byte) game_over#77
(byte) game_over#78
(byte) game_over#79
(byte) game_over#8
(byte) game_over#80
(byte) game_over#81
(byte) game_over#82
(byte) game_over#83
(byte) game_over#84
(byte) game_over#85
(byte) game_over#86
(byte) game_over#87
(byte) game_over#88
(byte) game_over#89
(byte) game_over#9
(byte) game_over#90
(byte) irq_cnt
(byte) irq_cnt#0
(byte) irq_cnt#1
(byte) irq_cnt#10
(byte) irq_cnt#11
(byte) irq_cnt#12
(byte) irq_cnt#13
(byte) irq_cnt#14
(byte) irq_cnt#15
(byte) irq_cnt#16
(byte) irq_cnt#17
(byte) irq_cnt#18
(byte) irq_cnt#19
(byte) irq_cnt#2
(byte) irq_cnt#20
(byte) irq_cnt#3
(byte) irq_cnt#4
(byte) irq_cnt#5
(byte) irq_cnt#6
(byte) irq_cnt#7
(byte) irq_cnt#8
(byte) irq_cnt#9
(byte) irq_raster_next
(byte) irq_raster_next#0
(byte) irq_raster_next#1
(byte) irq_raster_next#10
(byte) irq_raster_next#11
(byte) irq_raster_next#12
(byte) irq_raster_next#13
(byte) irq_raster_next#14
(byte) irq_raster_next#15
(byte) irq_raster_next#16
(byte) irq_raster_next#17
(byte) irq_raster_next#18
(byte) irq_raster_next#19
(byte) irq_raster_next#2
(byte) irq_raster_next#20
(byte) irq_raster_next#21
(byte) irq_raster_next#22
(byte) irq_raster_next#23
(byte) irq_raster_next#24
(byte) irq_raster_next#3
(byte) irq_raster_next#4
(byte) irq_raster_next#5
(byte) irq_raster_next#6
(byte) irq_raster_next#7
(byte) irq_raster_next#8
(byte) irq_raster_next#9
(byte) irq_sprite_ptr
(byte) irq_sprite_ptr#0
(byte) irq_sprite_ptr#1
(byte) irq_sprite_ptr#10
(byte) irq_sprite_ptr#11
(byte) irq_sprite_ptr#12
(byte) irq_sprite_ptr#13
(byte) irq_sprite_ptr#14
(byte) irq_sprite_ptr#15
(byte) irq_sprite_ptr#16
(byte) irq_sprite_ptr#17
(byte) irq_sprite_ptr#18
(byte) irq_sprite_ptr#2
(byte) irq_sprite_ptr#3
(byte) irq_sprite_ptr#4
(byte) irq_sprite_ptr#5
(byte) irq_sprite_ptr#6
(byte) irq_sprite_ptr#7
(byte) irq_sprite_ptr#8
(byte) irq_sprite_ptr#9
(byte) irq_sprite_ypos
(byte) irq_sprite_ypos#0
(byte) irq_sprite_ypos#1
(byte) irq_sprite_ypos#10
(byte) irq_sprite_ypos#11
(byte) irq_sprite_ypos#12
(byte) irq_sprite_ypos#13
(byte) irq_sprite_ypos#14
(byte) irq_sprite_ypos#15
(byte) irq_sprite_ypos#16
(byte) irq_sprite_ypos#17
(byte) irq_sprite_ypos#18
(byte) irq_sprite_ypos#19
(byte) irq_sprite_ypos#2
(byte) irq_sprite_ypos#20
(byte) irq_sprite_ypos#21
(byte) irq_sprite_ypos#22
(byte) irq_sprite_ypos#23
(byte) irq_sprite_ypos#24
(byte) irq_sprite_ypos#3
(byte) irq_sprite_ypos#4
(byte) irq_sprite_ypos#5
(byte) irq_sprite_ypos#6
(byte) irq_sprite_ypos#7
(byte) irq_sprite_ypos#8
(byte) irq_sprite_ypos#9
(byte()) keyboard_event_get()
(bool~) keyboard_event_get::$0
(label) keyboard_event_get::@1
(label) keyboard_event_get::@3
(label) keyboard_event_get::@return
(byte) keyboard_event_get::return
(byte) keyboard_event_get::return#0
(byte) keyboard_event_get::return#1
(byte) keyboard_event_get::return#2
(byte) keyboard_event_get::return#3
(byte) keyboard_event_get::return#4
(byte) keyboard_event_get::return#5
(byte()) keyboard_event_pressed((byte) keyboard_event_pressed::keycode)
(byte~) keyboard_event_pressed::$0
(byte~) keyboard_event_pressed::$1
(byte~) keyboard_event_pressed::$2
(label) keyboard_event_pressed::@return
(byte) keyboard_event_pressed::keycode
(byte) keyboard_event_pressed::keycode#0
(byte) keyboard_event_pressed::keycode#1
(byte) keyboard_event_pressed::keycode#2
(byte) keyboard_event_pressed::keycode#3
(byte) keyboard_event_pressed::keycode#4
(byte) keyboard_event_pressed::keycode#5
(byte) keyboard_event_pressed::return
(byte) keyboard_event_pressed::return#0
(byte) keyboard_event_pressed::return#1
(byte) keyboard_event_pressed::return#10
(byte) keyboard_event_pressed::return#11
(byte) keyboard_event_pressed::return#12
(byte) keyboard_event_pressed::return#2
(byte) keyboard_event_pressed::return#3
(byte) keyboard_event_pressed::return#4
(byte) keyboard_event_pressed::return#5
(byte) keyboard_event_pressed::return#6
(byte) keyboard_event_pressed::return#7
(byte) keyboard_event_pressed::return#8
(byte) keyboard_event_pressed::return#9
(byte) keyboard_event_pressed::row_bits
(byte) keyboard_event_pressed::row_bits#0
(void()) keyboard_event_scan()
(byte~) keyboard_event_scan::$0
(bool~) keyboard_event_scan::$1
(bool~) keyboard_event_scan::$10
(bool~) keyboard_event_scan::$11
(byte~) keyboard_event_scan::$12
(bool~) keyboard_event_scan::$13
(byte/signed word/word/dword/signed dword~) keyboard_event_scan::$14
(byte~) keyboard_event_scan::$15
(byte~) keyboard_event_scan::$16
(bool~) keyboard_event_scan::$17
(bool~) keyboard_event_scan::$18
(bool~) keyboard_event_scan::$19
(bool~) keyboard_event_scan::$2
(bool~) keyboard_event_scan::$20
(byte~) keyboard_event_scan::$21
(bool~) keyboard_event_scan::$22
(byte/word/dword~) keyboard_event_scan::$23
(bool~) keyboard_event_scan::$24
(bool~) keyboard_event_scan::$25
(byte~) keyboard_event_scan::$26
(byte~) keyboard_event_scan::$27
(byte~) keyboard_event_scan::$28
(byte~) keyboard_event_scan::$29
(byte~) keyboard_event_scan::$3
(bool~) keyboard_event_scan::$4
(bool~) keyboard_event_scan::$5
(byte~) keyboard_event_scan::$6
(bool~) keyboard_event_scan::$7
(bool~) keyboard_event_scan::$8
(byte~) keyboard_event_scan::$9
(label) keyboard_event_scan::@1
(label) keyboard_event_scan::@10
(label) keyboard_event_scan::@11
(label) keyboard_event_scan::@12
(label) keyboard_event_scan::@13
(label) keyboard_event_scan::@14
(label) keyboard_event_scan::@16
(label) keyboard_event_scan::@17
(label) keyboard_event_scan::@18
(label) keyboard_event_scan::@2
(label) keyboard_event_scan::@20
(label) keyboard_event_scan::@21
(label) keyboard_event_scan::@23
(label) keyboard_event_scan::@24
(label) keyboard_event_scan::@25
(label) keyboard_event_scan::@26
(label) keyboard_event_scan::@27
(label) keyboard_event_scan::@28
(label) keyboard_event_scan::@29
(label) keyboard_event_scan::@3
(label) keyboard_event_scan::@4
(label) keyboard_event_scan::@5
(label) keyboard_event_scan::@6
(label) keyboard_event_scan::@7
(label) keyboard_event_scan::@8
(label) keyboard_event_scan::@9
(label) keyboard_event_scan::@return
(byte) keyboard_event_scan::col
(byte) keyboard_event_scan::col#0
(byte) keyboard_event_scan::col#1
(byte) keyboard_event_scan::col#2
(byte) keyboard_event_scan::col#3
(byte) keyboard_event_scan::col#4
(byte) keyboard_event_scan::col#5
(byte) keyboard_event_scan::col#6
(byte) keyboard_event_scan::col#7
(byte) keyboard_event_scan::col#8
(byte) keyboard_event_scan::event_type
(byte) keyboard_event_scan::event_type#0
(byte) keyboard_event_scan::keycode
(byte) keyboard_event_scan::keycode#0
(byte) keyboard_event_scan::keycode#1
(byte) keyboard_event_scan::keycode#10
(byte) keyboard_event_scan::keycode#11
(byte) keyboard_event_scan::keycode#12
(byte) keyboard_event_scan::keycode#13
(byte) keyboard_event_scan::keycode#14
(byte) keyboard_event_scan::keycode#15
(byte) keyboard_event_scan::keycode#2
(byte) keyboard_event_scan::keycode#3
(byte) keyboard_event_scan::keycode#4
(byte) keyboard_event_scan::keycode#5
(byte) keyboard_event_scan::keycode#6
(byte) keyboard_event_scan::keycode#7
(byte) keyboard_event_scan::keycode#8
(byte) keyboard_event_scan::keycode#9
(byte) keyboard_event_scan::row
(byte) keyboard_event_scan::row#0
(byte) keyboard_event_scan::row#1
(byte) keyboard_event_scan::row#10
(byte) keyboard_event_scan::row#11
(byte) keyboard_event_scan::row#12
(byte) keyboard_event_scan::row#13
(byte) keyboard_event_scan::row#14
(byte) keyboard_event_scan::row#2
(byte) keyboard_event_scan::row#3
(byte) keyboard_event_scan::row#4
(byte) keyboard_event_scan::row#5
(byte) keyboard_event_scan::row#6
(byte) keyboard_event_scan::row#7
(byte) keyboard_event_scan::row#8
(byte) keyboard_event_scan::row#9
(byte) keyboard_event_scan::row_scan
(byte) keyboard_event_scan::row_scan#0
(byte) keyboard_event_scan::row_scan#1
(byte) keyboard_event_scan::row_scan#2
(byte) keyboard_event_scan::row_scan#3
(byte) keyboard_event_scan::row_scan#4
(byte) keyboard_event_scan::row_scan#5
(byte) keyboard_event_scan::row_scan#6
(byte) keyboard_event_scan::row_scan#7
(byte) keyboard_event_scan::row_scan#8
(byte) keyboard_event_scan::row_scan#9
(byte[8]) keyboard_events
(byte[8]) keyboard_events#0
(byte) keyboard_events_size
(byte) keyboard_events_size#0
(byte) keyboard_events_size#1
(byte) keyboard_events_size#10
(byte) keyboard_events_size#11
(byte) keyboard_events_size#12
(byte) keyboard_events_size#13
(byte) keyboard_events_size#14
(byte) keyboard_events_size#15
(byte) keyboard_events_size#16
(byte) keyboard_events_size#17
(byte) keyboard_events_size#18
(byte) keyboard_events_size#19
(byte) keyboard_events_size#2
(byte) keyboard_events_size#20
(byte) keyboard_events_size#21
(byte) keyboard_events_size#22
(byte) keyboard_events_size#23
(byte) keyboard_events_size#24
(byte) keyboard_events_size#25
(byte) keyboard_events_size#26
(byte) keyboard_events_size#27
(byte) keyboard_events_size#28
(byte) keyboard_events_size#29
(byte) keyboard_events_size#3
(byte) keyboard_events_size#30
(byte) keyboard_events_size#31
(byte) keyboard_events_size#32
(byte) keyboard_events_size#33
(byte) keyboard_events_size#34
(byte) keyboard_events_size#35
(byte) keyboard_events_size#36
(byte) keyboard_events_size#37
(byte) keyboard_events_size#38
(byte) keyboard_events_size#39
(byte) keyboard_events_size#4
(byte) keyboard_events_size#40
(byte) keyboard_events_size#41
(byte) keyboard_events_size#42
(byte) keyboard_events_size#43
(byte) keyboard_events_size#44
(byte) keyboard_events_size#45
(byte) keyboard_events_size#46
(byte) keyboard_events_size#47
(byte) keyboard_events_size#48
(byte) keyboard_events_size#49
(byte) keyboard_events_size#5
(byte) keyboard_events_size#50
(byte) keyboard_events_size#51
(byte) keyboard_events_size#52
(byte) keyboard_events_size#53
(byte) keyboard_events_size#54
(byte) keyboard_events_size#55
(byte) keyboard_events_size#56
(byte) keyboard_events_size#57
(byte) keyboard_events_size#58
(byte) keyboard_events_size#59
(byte) keyboard_events_size#6
(byte) keyboard_events_size#60
(byte) keyboard_events_size#61
(byte) keyboard_events_size#62
(byte) keyboard_events_size#63
(byte) keyboard_events_size#64
(byte) keyboard_events_size#65
(byte) keyboard_events_size#66
(byte) keyboard_events_size#67
(byte) keyboard_events_size#68
(byte) keyboard_events_size#69
(byte) keyboard_events_size#7
(byte) keyboard_events_size#70
(byte) keyboard_events_size#71
(byte) keyboard_events_size#72
(byte) keyboard_events_size#73
(byte) keyboard_events_size#74
(byte) keyboard_events_size#75
(byte) keyboard_events_size#76
(byte) keyboard_events_size#77
(byte) keyboard_events_size#78
(byte) keyboard_events_size#79
(byte) keyboard_events_size#8
(byte) keyboard_events_size#80
(byte) keyboard_events_size#81
(byte) keyboard_events_size#82
(byte) keyboard_events_size#83
(byte) keyboard_events_size#84
(byte) keyboard_events_size#9
(byte[8]) keyboard_matrix_col_bitmask
(byte[8]) keyboard_matrix_col_bitmask#0
(byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid)
(byte~) keyboard_matrix_read::$0
(label) keyboard_matrix_read::@return
(byte) keyboard_matrix_read::return
(byte) keyboard_matrix_read::return#0
(byte) keyboard_matrix_read::return#1
(byte) keyboard_matrix_read::return#2
(byte) keyboard_matrix_read::return#3
(byte) keyboard_matrix_read::return#4
(byte) keyboard_matrix_read::row_pressed_bits
(byte) keyboard_matrix_read::row_pressed_bits#0
(byte) keyboard_matrix_read::rowid
(byte) keyboard_matrix_read::rowid#0
(byte) keyboard_matrix_read::rowid#1
(byte[8]) keyboard_matrix_row_bitmask
(byte[8]) keyboard_matrix_row_bitmask#0
(byte) keyboard_modifiers
(byte) keyboard_modifiers#0
(byte) keyboard_modifiers#1
(byte) keyboard_modifiers#10
(byte) keyboard_modifiers#11
(byte) keyboard_modifiers#12
(byte) keyboard_modifiers#13
(byte) keyboard_modifiers#14
(byte) keyboard_modifiers#15
(byte) keyboard_modifiers#16
(byte) keyboard_modifiers#17
(byte) keyboard_modifiers#18
(byte) keyboard_modifiers#19
(byte) keyboard_modifiers#2
(byte) keyboard_modifiers#20
(byte) keyboard_modifiers#21
(byte) keyboard_modifiers#22
(byte) keyboard_modifiers#23
(byte) keyboard_modifiers#24
(byte) keyboard_modifiers#25
(byte) keyboard_modifiers#26
(byte) keyboard_modifiers#27
(byte) keyboard_modifiers#28
(byte) keyboard_modifiers#29
(byte) keyboard_modifiers#3
(byte) keyboard_modifiers#30
(byte) keyboard_modifiers#31
(byte) keyboard_modifiers#32
(byte) keyboard_modifiers#33
(byte) keyboard_modifiers#34
(byte) keyboard_modifiers#35
(byte) keyboard_modifiers#36
(byte) keyboard_modifiers#37
(byte) keyboard_modifiers#38
(byte) keyboard_modifiers#39
(byte) keyboard_modifiers#4
(byte) keyboard_modifiers#40
(byte) keyboard_modifiers#41
(byte) keyboard_modifiers#42
(byte) keyboard_modifiers#43
(byte) keyboard_modifiers#44
(byte) keyboard_modifiers#45
(byte) keyboard_modifiers#46
(byte) keyboard_modifiers#47
(byte) keyboard_modifiers#48
(byte) keyboard_modifiers#49
(byte) keyboard_modifiers#5
(byte) keyboard_modifiers#50
(byte) keyboard_modifiers#51
(byte) keyboard_modifiers#52
(byte) keyboard_modifiers#53
(byte) keyboard_modifiers#54
(byte) keyboard_modifiers#55
(byte) keyboard_modifiers#56
(byte) keyboard_modifiers#57
(byte) keyboard_modifiers#58
(byte) keyboard_modifiers#59
(byte) keyboard_modifiers#6
(byte) keyboard_modifiers#60
(byte) keyboard_modifiers#61
(byte) keyboard_modifiers#62
(byte) keyboard_modifiers#63
(byte) keyboard_modifiers#64
(byte) keyboard_modifiers#65
(byte) keyboard_modifiers#7
(byte) keyboard_modifiers#8
(byte) keyboard_modifiers#9
(byte[8]) keyboard_scan_values
(byte[8]) keyboard_scan_values#0
(byte) level
(byte) level#0
(byte) level#1
(byte) level#10
(byte) level#100
(byte) level#101
(byte) level#102
(byte) level#103
(byte) level#104
(byte) level#105
(byte) level#106
(byte) level#107
(byte) level#108
(byte) level#109
(byte) level#11
(byte) level#12
(byte) level#13
(byte) level#14
(byte) level#15
(byte) level#16
(byte) level#17
(byte) level#18
(byte) level#19
(byte) level#2
(byte) level#20
(byte) level#21
(byte) level#22
(byte) level#23
(byte) level#24
(byte) level#25
(byte) level#26
(byte) level#27
(byte) level#28
(byte) level#29
(byte) level#3
(byte) level#30
(byte) level#31
(byte) level#32
(byte) level#33
(byte) level#34
(byte) level#35
(byte) level#36
(byte) level#37
(byte) level#38
(byte) level#39
(byte) level#4
(byte) level#40
(byte) level#41
(byte) level#42
(byte) level#43
(byte) level#44
(byte) level#45
(byte) level#46
(byte) level#47
(byte) level#48
(byte) level#49
(byte) level#5
(byte) level#50
(byte) level#51
(byte) level#52
(byte) level#53
(byte) level#54
(byte) level#55
(byte) level#56
(byte) level#57
(byte) level#58
(byte) level#59
(byte) level#6
(byte) level#60
(byte) level#61
(byte) level#62
(byte) level#63
(byte) level#64
(byte) level#65
(byte) level#66
(byte) level#67
(byte) level#68
(byte) level#69
(byte) level#7
(byte) level#70
(byte) level#71
(byte) level#72
(byte) level#73
(byte) level#74
(byte) level#75
(byte) level#76
(byte) level#77
(byte) level#78
(byte) level#79
(byte) level#8
(byte) level#80
(byte) level#81
(byte) level#82
(byte) level#83
(byte) level#84
(byte) level#85
(byte) level#86
(byte) level#87
(byte) level#88
(byte) level#89
(byte) level#9
(byte) level#90
(byte) level#91
(byte) level#92
(byte) level#93
(byte) level#94
(byte) level#95
(byte) level#96
(byte) level#97
(byte) level#98
(byte) level#99
(byte) level_bcd
(byte) level_bcd#0
(byte) level_bcd#1
(byte) level_bcd#10
(byte) level_bcd#100
(byte) level_bcd#101
(byte) level_bcd#102
(byte) level_bcd#103
(byte) level_bcd#104
(byte) level_bcd#105
(byte) level_bcd#106
(byte) level_bcd#11
(byte) level_bcd#12
(byte) level_bcd#13
(byte) level_bcd#14
(byte) level_bcd#15
(byte) level_bcd#16
(byte) level_bcd#17
(byte) level_bcd#18
(byte) level_bcd#19
(byte) level_bcd#2
(byte) level_bcd#20
(byte) level_bcd#21
(byte) level_bcd#22
(byte) level_bcd#23
(byte) level_bcd#24
(byte) level_bcd#25
(byte) level_bcd#26
(byte) level_bcd#27
(byte) level_bcd#28
(byte) level_bcd#29
(byte) level_bcd#3
(byte) level_bcd#30
(byte) level_bcd#31
(byte) level_bcd#32
(byte) level_bcd#33
(byte) level_bcd#34
(byte) level_bcd#35
(byte) level_bcd#36
(byte) level_bcd#37
(byte) level_bcd#38
(byte) level_bcd#39
(byte) level_bcd#4
(byte) level_bcd#40
(byte) level_bcd#41
(byte) level_bcd#42
(byte) level_bcd#43
(byte) level_bcd#44
(byte) level_bcd#45
(byte) level_bcd#46
(byte) level_bcd#47
(byte) level_bcd#48
(byte) level_bcd#49
(byte) level_bcd#5
(byte) level_bcd#50
(byte) level_bcd#51
(byte) level_bcd#52
(byte) level_bcd#53
(byte) level_bcd#54
(byte) level_bcd#55
(byte) level_bcd#56
(byte) level_bcd#57
(byte) level_bcd#58
(byte) level_bcd#59
(byte) level_bcd#6
(byte) level_bcd#60
(byte) level_bcd#61
(byte) level_bcd#62
(byte) level_bcd#63
(byte) level_bcd#64
(byte) level_bcd#65
(byte) level_bcd#66
(byte) level_bcd#67
(byte) level_bcd#68
(byte) level_bcd#69
(byte) level_bcd#7
(byte) level_bcd#70
(byte) level_bcd#71
(byte) level_bcd#72
(byte) level_bcd#73
(byte) level_bcd#74
(byte) level_bcd#75
(byte) level_bcd#76
(byte) level_bcd#77
(byte) level_bcd#78
(byte) level_bcd#79
(byte) level_bcd#8
(byte) level_bcd#80
(byte) level_bcd#81
(byte) level_bcd#82
(byte) level_bcd#83
(byte) level_bcd#84
(byte) level_bcd#85
(byte) level_bcd#86
(byte) level_bcd#87
(byte) level_bcd#88
(byte) level_bcd#89
(byte) level_bcd#9
(byte) level_bcd#90
(byte) level_bcd#91
(byte) level_bcd#92
(byte) level_bcd#93
(byte) level_bcd#94
(byte) level_bcd#95
(byte) level_bcd#96
(byte) level_bcd#97
(byte) level_bcd#98
(byte) level_bcd#99
(word) lines_bcd
(word) lines_bcd#0
(word) lines_bcd#1
(word) lines_bcd#10
(word) lines_bcd#11
(word) lines_bcd#12
(word) lines_bcd#13
(word) lines_bcd#14
(word) lines_bcd#15
(word) lines_bcd#16
(word) lines_bcd#17
(word) lines_bcd#18
(word) lines_bcd#19
(word) lines_bcd#2
(word) lines_bcd#20
(word) lines_bcd#21
(word) lines_bcd#22
(word) lines_bcd#23
(word) lines_bcd#24
(word) lines_bcd#25
(word) lines_bcd#26
(word) lines_bcd#27
(word) lines_bcd#28
(word) lines_bcd#29
(word) lines_bcd#3
(word) lines_bcd#30
(word) lines_bcd#31
(word) lines_bcd#32
(word) lines_bcd#33
(word) lines_bcd#34
(word) lines_bcd#35
(word) lines_bcd#36
(word) lines_bcd#37
(word) lines_bcd#38
(word) lines_bcd#39
(word) lines_bcd#4
(word) lines_bcd#40
(word) lines_bcd#41
(word) lines_bcd#42
(word) lines_bcd#43
(word) lines_bcd#44
(word) lines_bcd#45
(word) lines_bcd#46
(word) lines_bcd#47
(word) lines_bcd#48
(word) lines_bcd#49
(word) lines_bcd#5
(word) lines_bcd#50
(word) lines_bcd#51
(word) lines_bcd#52
(word) lines_bcd#53
(word) lines_bcd#54
(word) lines_bcd#55
(word) lines_bcd#56
(word) lines_bcd#57
(word) lines_bcd#58
(word) lines_bcd#59
(word) lines_bcd#6
(word) lines_bcd#60
(word) lines_bcd#61
(word) lines_bcd#62
(word) lines_bcd#63
(word) lines_bcd#64
(word) lines_bcd#65
(word) lines_bcd#66
(word) lines_bcd#67
(word) lines_bcd#68
(word) lines_bcd#69
(word) lines_bcd#7
(word) lines_bcd#70
(word) lines_bcd#71
(word) lines_bcd#72
(word) lines_bcd#73
(word) lines_bcd#74
(word) lines_bcd#75
(word) lines_bcd#76
(word) lines_bcd#77
(word) lines_bcd#78
(word) lines_bcd#79
(word) lines_bcd#8
(word) lines_bcd#80
(word) lines_bcd#81
(word) lines_bcd#82
(word) lines_bcd#83
(word) lines_bcd#84
(word) lines_bcd#85
(word) lines_bcd#86
(word) lines_bcd#87
(word) lines_bcd#88
(word) lines_bcd#89
(word) lines_bcd#9
(word) lines_bcd#90
(word) lines_bcd#91
(word) lines_bcd#92
(word) lines_bcd#93
(void()) main()
(bool~) main::$10
(byte~) main::$13
(bool~) main::$14
(byte~) main::$15
(bool~) main::$16
(bool~) main::$17
(label) main::@1
(label) main::@11
(label) main::@12
(label) main::@13
(label) main::@19
(label) main::@2
(label) main::@20
(label) main::@23
(label) main::@25
(label) main::@26
(label) main::@27
(label) main::@28
(label) main::@29
(label) main::@30
(label) main::@31
(label) main::@32
(label) main::@33
(label) main::@34
(label) main::@35
(label) main::@36
(label) main::@37
(label) main::@38
(label) main::@39
(label) main::@4
(label) main::@40
(label) main::@41
(label) main::@42
(label) main::@43
(label) main::@5
(label) main::@6
(label) main::@return
(byte) main::key_event
(byte) main::key_event#0
(byte) main::key_event#1
(byte) main::render
(byte) main::render#0
(byte) main::render#1
(byte) main::render#2
(byte) main::render#3
(byte) main::render#4
(byte) next_piece_idx
(byte) next_piece_idx#0
(byte) next_piece_idx#1
(byte) next_piece_idx#10
(byte) next_piece_idx#11
(byte) next_piece_idx#12
(byte) next_piece_idx#13
(byte) next_piece_idx#14
(byte) next_piece_idx#15
(byte) next_piece_idx#16
(byte) next_piece_idx#17
(byte) next_piece_idx#18
(byte) next_piece_idx#19
(byte) next_piece_idx#2
(byte) next_piece_idx#20
(byte) next_piece_idx#21
(byte) next_piece_idx#22
(byte) next_piece_idx#23
(byte) next_piece_idx#24
(byte) next_piece_idx#25
(byte) next_piece_idx#26
(byte) next_piece_idx#27
(byte) next_piece_idx#28
(byte) next_piece_idx#29
(byte) next_piece_idx#3
(byte) next_piece_idx#30
(byte) next_piece_idx#31
(byte) next_piece_idx#32
(byte) next_piece_idx#33
(byte) next_piece_idx#34
(byte) next_piece_idx#35
(byte) next_piece_idx#36
(byte) next_piece_idx#37
(byte) next_piece_idx#38
(byte) next_piece_idx#39
(byte) next_piece_idx#4
(byte) next_piece_idx#40
(byte) next_piece_idx#41
(byte) next_piece_idx#42
(byte) next_piece_idx#43
(byte) next_piece_idx#44
(byte) next_piece_idx#45
(byte) next_piece_idx#46
(byte) next_piece_idx#47
(byte) next_piece_idx#48
(byte) next_piece_idx#49
(byte) next_piece_idx#5
(byte) next_piece_idx#50
(byte) next_piece_idx#51
(byte) next_piece_idx#52
(byte) next_piece_idx#53
(byte) next_piece_idx#54
(byte) next_piece_idx#55
(byte) next_piece_idx#56
(byte) next_piece_idx#57
(byte) next_piece_idx#58
(byte) next_piece_idx#59
(byte) next_piece_idx#6
(byte) next_piece_idx#60
(byte) next_piece_idx#61
(byte) next_piece_idx#62
(byte) next_piece_idx#63
(byte) next_piece_idx#64
(byte) next_piece_idx#65
(byte) next_piece_idx#66
(byte) next_piece_idx#67
(byte) next_piece_idx#68
(byte) next_piece_idx#69
(byte) next_piece_idx#7
(byte) next_piece_idx#70
(byte) next_piece_idx#71
(byte) next_piece_idx#72
(byte) next_piece_idx#73
(byte) next_piece_idx#74
(byte) next_piece_idx#75
(byte) next_piece_idx#76
(byte) next_piece_idx#77
(byte) next_piece_idx#78
(byte) next_piece_idx#79
(byte) next_piece_idx#8
(byte) next_piece_idx#80
(byte) next_piece_idx#9
(byte()) play_collision((byte) play_collision::xpos , (byte) play_collision::ypos , (byte) play_collision::orientation)
(byte*~) play_collision::$0
(byte/signed word/word/dword/signed dword~) play_collision::$1
(bool~) play_collision::$10
(bool~) play_collision::$11
(bool~) play_collision::$12
(bool~) play_collision::$13
(bool~) play_collision::$14
(bool~) play_collision::$15
(bool~) play_collision::$2
(bool~) play_collision::$3
(byte/signed word/word/dword/signed dword~) play_collision::$4
(bool~) play_collision::$5
(bool~) play_collision::$6
(byte~) play_collision::$7
(bool~) play_collision::$8
(bool~) play_collision::$9
(label) play_collision::@1
(label) play_collision::@10
(label) play_collision::@12
(label) play_collision::@14
(label) play_collision::@15
(label) play_collision::@17
(label) play_collision::@18
(label) play_collision::@2
(label) play_collision::@3
(label) play_collision::@4
(label) play_collision::@5
(label) play_collision::@6
(label) play_collision::@7
(label) play_collision::@8
(label) play_collision::@return
(byte) play_collision::c
(byte) play_collision::c#0
(byte) play_collision::c#1
(byte) play_collision::c#2
(byte) play_collision::c#3
(byte) play_collision::c#4
(byte) play_collision::c#5
(byte) play_collision::c#6
(byte) play_collision::c#7
(byte) play_collision::c#8
(byte) play_collision::col
(byte) play_collision::col#0
(byte) play_collision::col#1
(byte) play_collision::col#2
(byte) play_collision::col#3
(byte) play_collision::col#4
(byte) play_collision::col#5
(byte) play_collision::col#6
(byte) play_collision::col#7
(byte) play_collision::col#8
(byte) play_collision::i
(byte) play_collision::i#0
(byte) play_collision::i#1
(byte) play_collision::i#10
(byte) play_collision::i#2
(byte) play_collision::i#3
(byte) play_collision::i#4
(byte) play_collision::i#5
(byte) play_collision::i#6
(byte) play_collision::i#7
(byte) play_collision::i#8
(byte) play_collision::i#9
(byte) play_collision::l
(byte) play_collision::l#0
(byte) play_collision::l#1
(byte) play_collision::l#10
(byte) play_collision::l#2
(byte) play_collision::l#3
(byte) play_collision::l#4
(byte) play_collision::l#5
(byte) play_collision::l#6
(byte) play_collision::l#7
(byte) play_collision::l#8
(byte) play_collision::l#9
(byte) play_collision::orientation
(byte) play_collision::orientation#0
(byte) play_collision::orientation#1
(byte) play_collision::orientation#2
(byte) play_collision::orientation#3
(byte) play_collision::orientation#4
(byte) play_collision::orientation#5
(byte*) play_collision::piece_gfx
(byte*) play_collision::piece_gfx#0
(byte*) play_collision::piece_gfx#1
(byte*) play_collision::piece_gfx#2
(byte*) play_collision::piece_gfx#3
(byte*) play_collision::piece_gfx#4
(byte*) play_collision::piece_gfx#5
(byte*) play_collision::piece_gfx#6
(byte*) play_collision::piece_gfx#7
(byte*) play_collision::piece_gfx#8
(byte*) play_collision::piece_gfx#9
(byte*) play_collision::playfield_line
(byte*) play_collision::playfield_line#0
(byte*) play_collision::playfield_line#1
(byte*) play_collision::playfield_line#2
(byte*) play_collision::playfield_line#3
(byte*) play_collision::playfield_line#4
(byte*) play_collision::playfield_line#5
(byte*) play_collision::playfield_line#6
(byte*) play_collision::playfield_line#7
(byte) play_collision::return
(byte) play_collision::return#0
(byte) play_collision::return#1
(byte) play_collision::return#10
(byte) play_collision::return#11
(byte) play_collision::return#12
(byte) play_collision::return#13
(byte) play_collision::return#14
(byte) play_collision::return#15
(byte) play_collision::return#16
(byte) play_collision::return#2
(byte) play_collision::return#3
(byte) play_collision::return#4
(byte) play_collision::return#5
(byte) play_collision::return#6
(byte) play_collision::return#7
(byte) play_collision::return#8
(byte) play_collision::return#9
(byte) play_collision::xpos
(byte) play_collision::xpos#0
(byte) play_collision::xpos#1
(byte) play_collision::xpos#10
(byte) play_collision::xpos#11
(byte) play_collision::xpos#12
(byte) play_collision::xpos#13
(byte) play_collision::xpos#14
(byte) play_collision::xpos#2
(byte) play_collision::xpos#3
(byte) play_collision::xpos#4
(byte) play_collision::xpos#5
(byte) play_collision::xpos#6
(byte) play_collision::xpos#7
(byte) play_collision::xpos#8
(byte) play_collision::xpos#9
(byte) play_collision::ypos
(byte) play_collision::ypos#0
(byte) play_collision::ypos#1
(byte) play_collision::ypos#2
(byte) play_collision::ypos#3
(byte) play_collision::ypos#4
(byte) play_collision::ypos#5
(byte) play_collision::ypos2
(byte) play_collision::ypos2#0
(byte) play_collision::ypos2#1
(byte) play_collision::ypos2#10
(byte) play_collision::ypos2#2
(byte) play_collision::ypos2#3
(byte) play_collision::ypos2#4
(byte) play_collision::ypos2#5
(byte) play_collision::ypos2#6
(byte) play_collision::ypos2#7
(byte) play_collision::ypos2#8
(byte) play_collision::ypos2#9
(void()) play_increase_level()
(bool~) play_increase_level::$0
(byte~) play_increase_level::$1
(bool~) play_increase_level::$2
(bool~) play_increase_level::$3
(byte/signed word/word/dword/signed dword~) play_increase_level::$4
(bool~) play_increase_level::$5
(label) play_increase_level::@1
(label) play_increase_level::@2
(label) play_increase_level::@3
(label) play_increase_level::@4
(label) play_increase_level::@6
(label) play_increase_level::@7
(label) play_increase_level::@8
(label) play_increase_level::@return
(byte) play_increase_level::b
(byte) play_increase_level::b#0
(byte) play_increase_level::b#1
(byte) play_increase_level::b#2
(byte) play_increase_level::b4
(byte) play_increase_level::b4#0
(void()) play_init()
(byte~) play_init::$0
(byte/signed word/word/dword/signed dword~) play_init::$1
(byte/signed word/word/dword/signed dword~) play_init::$2
(bool~) play_init::$3
(byte/signed word/word/dword/signed dword~) play_init::$4
(bool~) play_init::$5
(label) play_init::@1
(label) play_init::@2
(label) play_init::@3
(label) play_init::@return
(byte) play_init::b
(byte) play_init::b#0
(byte) play_init::b#1
(byte) play_init::b#2
(byte) play_init::b4
(byte) play_init::b4#0
(byte) play_init::idx
(byte) play_init::idx#0
(byte) play_init::idx#1
(byte) play_init::idx#2
(byte) play_init::j
(byte) play_init::j#0
(byte) play_init::j#1
(byte) play_init::j#2
(byte*) play_init::pli
(byte*) play_init::pli#0
(byte*) play_init::pli#1
(byte*) play_init::pli#2
(void()) play_lock_current()
(byte/signed word/word/dword/signed dword~) play_lock_current::$0
(bool~) play_lock_current::$1
(bool~) play_lock_current::$2
(bool~) play_lock_current::$3
(bool~) play_lock_current::$4
(label) play_lock_current::@1
(label) play_lock_current::@2
(label) play_lock_current::@3
(label) play_lock_current::@4
(label) play_lock_current::@5
(label) play_lock_current::@return
(byte) play_lock_current::c
(byte) play_lock_current::c#0
(byte) play_lock_current::c#1
(byte) play_lock_current::c#2
(byte) play_lock_current::c#3
(byte) play_lock_current::c#4
(byte) play_lock_current::col
(byte) play_lock_current::col#0
(byte) play_lock_current::col#1
(byte) play_lock_current::col#2
(byte) play_lock_current::col#3
(byte) play_lock_current::col#4
(byte) play_lock_current::i
(byte) play_lock_current::i#0
(byte) play_lock_current::i#1
(byte) play_lock_current::i#2
(byte) play_lock_current::i#3
(byte) play_lock_current::i#4
(byte) play_lock_current::i#5
(byte) play_lock_current::i#6
(byte) play_lock_current::l
(byte) play_lock_current::l#0
(byte) play_lock_current::l#1
(byte) play_lock_current::l#2
(byte) play_lock_current::l#3
(byte) play_lock_current::l#4
(byte) play_lock_current::l#5
(byte) play_lock_current::l#6
(byte*) play_lock_current::playfield_line
(byte*) play_lock_current::playfield_line#0
(byte*) play_lock_current::playfield_line#1
(byte*) play_lock_current::playfield_line#2
(byte*) play_lock_current::playfield_line#3
(byte) play_lock_current::ypos2
(byte) play_lock_current::ypos2#0
(byte) play_lock_current::ypos2#1
(byte) play_lock_current::ypos2#2
(byte) play_lock_current::ypos2#3
(byte) play_lock_current::ypos2#4
(byte) play_lock_current::ypos2#5
(byte) play_lock_current::ypos2#6
(byte()) play_move_down((byte) play_move_down::key_event)
(bool~) play_move_down::$0
(bool~) play_move_down::$1
(bool~) play_move_down::$10
(byte/signed word/word/dword/signed dword~) play_move_down::$11
(byte~) play_move_down::$12
(bool~) play_move_down::$13
(byte~) play_move_down::$15
(byte~) play_move_down::$2
(bool~) play_move_down::$3
(bool~) play_move_down::$4
(bool~) play_move_down::$5
(bool~) play_move_down::$6
(bool~) play_move_down::$7
(bool~) play_move_down::$8
(bool~) play_move_down::$9
(label) play_move_down::@1
(label) play_move_down::@10
(label) play_move_down::@13
(label) play_move_down::@14
(label) play_move_down::@15
(label) play_move_down::@17
(label) play_move_down::@18
(label) play_move_down::@19
(label) play_move_down::@2
(label) play_move_down::@20
(label) play_move_down::@21
(label) play_move_down::@22
(label) play_move_down::@3
(label) play_move_down::@4
(label) play_move_down::@5
(label) play_move_down::@6
(label) play_move_down::@7
(label) play_move_down::@8
(label) play_move_down::@9
(label) play_move_down::@return
(byte) play_move_down::key_event
(byte) play_move_down::key_event#0
(byte) play_move_down::key_event#1
(byte) play_move_down::movedown
(byte) play_move_down::movedown#0
(byte) play_move_down::movedown#1
(byte) play_move_down::movedown#10
(byte) play_move_down::movedown#11
(byte) play_move_down::movedown#12
(byte) play_move_down::movedown#2
(byte) play_move_down::movedown#3
(byte) play_move_down::movedown#4
(byte) play_move_down::movedown#5
(byte) play_move_down::movedown#6
(byte) play_move_down::movedown#7
(byte) play_move_down::movedown#8
(byte) play_move_down::movedown#9
(byte) play_move_down::removed
(byte) play_move_down::removed#0
(byte) play_move_down::return
(byte) play_move_down::return#0
(byte) play_move_down::return#1
(byte) play_move_down::return#2
(byte) play_move_down::return#3
(byte) play_move_down::return#4
(byte) play_move_down::return#5
(byte()) play_move_leftright((byte) play_move_leftright::key_event)
(bool~) play_move_leftright::$0
(bool~) play_move_leftright::$1
(bool~) play_move_leftright::$10
(bool~) play_move_leftright::$2
(byte/signed word/word/dword/signed dword~) play_move_leftright::$3
(byte~) play_move_leftright::$4
(bool~) play_move_leftright::$5
(bool~) play_move_leftright::$6
(byte/signed word/word/dword/signed dword~) play_move_leftright::$7
(byte~) play_move_leftright::$8
(bool~) play_move_leftright::$9
(label) play_move_leftright::@1
(label) play_move_leftright::@12
(label) play_move_leftright::@13
(label) play_move_leftright::@14
(label) play_move_leftright::@15
(label) play_move_leftright::@2
(label) play_move_leftright::@3
(label) play_move_leftright::@4
(label) play_move_leftright::@5
(label) play_move_leftright::@6
(label) play_move_leftright::@9
(label) play_move_leftright::@return
(byte) play_move_leftright::key_event
(byte) play_move_leftright::key_event#0
(byte) play_move_leftright::key_event#1
(byte) play_move_leftright::key_event#2
(byte) play_move_leftright::return
(byte) play_move_leftright::return#0
(byte) play_move_leftright::return#1
(byte) play_move_leftright::return#2
(byte) play_move_leftright::return#3
(byte) play_move_leftright::return#4
(byte) play_move_leftright::return#5
(byte) play_move_leftright::return#6
(byte()) play_move_rotate((byte) play_move_rotate::key_event)
(bool~) play_move_rotate::$0
(bool~) play_move_rotate::$1
(byte~) play_move_rotate::$2
(bool~) play_move_rotate::$3
(bool~) play_move_rotate::$4
(byte/signed word/word/dword/signed dword~) play_move_rotate::$5
(byte/word/dword~) play_move_rotate::$6
(byte/signed word/word/dword/signed dword~) play_move_rotate::$7
(byte/word/dword~) play_move_rotate::$8
(byte*~) play_move_rotate::$9
(label) play_move_rotate::@1
(label) play_move_rotate::@11
(label) play_move_rotate::@14
(label) play_move_rotate::@2
(label) play_move_rotate::@4
(label) play_move_rotate::@5
(label) play_move_rotate::@6
(label) play_move_rotate::@7
(label) play_move_rotate::@return
(byte) play_move_rotate::key_event
(byte) play_move_rotate::key_event#0
(byte) play_move_rotate::key_event#1
(byte) play_move_rotate::key_event#2
(byte) play_move_rotate::orientation
(byte) play_move_rotate::orientation#0
(byte) play_move_rotate::orientation#1
(byte) play_move_rotate::orientation#2
(byte) play_move_rotate::orientation#3
(byte) play_move_rotate::orientation#4
(byte) play_move_rotate::orientation#5
(byte) play_move_rotate::return
(byte) play_move_rotate::return#0
(byte) play_move_rotate::return#1
(byte) play_move_rotate::return#2
(byte) play_move_rotate::return#3
(byte) play_move_rotate::return#4
(byte) play_move_rotate::return#5
(byte) play_move_rotate::return#6
(byte()) play_movement((byte) play_movement::key_event)
(byte~) play_movement::$0
(bool~) play_movement::$1
(bool~) play_movement::$2
(byte~) play_movement::$3
(byte~) play_movement::$4
(label) play_movement::@1
(label) play_movement::@2
(label) play_movement::@5
(label) play_movement::@6
(label) play_movement::@7
(label) play_movement::@return
(byte) play_movement::key_event
(byte) play_movement::key_event#0
(byte) play_movement::key_event#1
(byte) play_movement::key_event#2
(byte) play_movement::key_event#3
(byte) play_movement::key_event#4
(byte) play_movement::render
(byte) play_movement::render#0
(byte) play_movement::render#1
(byte) play_movement::render#2
(byte) play_movement::render#3
(byte) play_movement::render#4
(byte) play_movement::render#5
(byte) play_movement::render#6
(byte) play_movement::render#7
(byte) play_movement::render#8
(byte) play_movement::return
(byte) play_movement::return#0
(byte) play_movement::return#1
(byte) play_movement::return#2
(byte) play_movement::return#3
(byte) play_movement::return#4
(byte) play_movement::return#5
(byte()) play_remove_lines()
(byte~) play_remove_lines::$0
(byte/signed word/word/dword/signed dword~) play_remove_lines::$1
(bool~) play_remove_lines::$10
(byte~) play_remove_lines::$11
(bool~) play_remove_lines::$12
(bool~) play_remove_lines::$13
(byte~) play_remove_lines::$2
(byte/signed word/word/dword/signed dword~) play_remove_lines::$3
(byte/signed word/word/dword/signed dword~) play_remove_lines::$4
(byte/signed word/word/dword/signed dword~) play_remove_lines::$5
(bool~) play_remove_lines::$6
(bool~) play_remove_lines::$7
(bool~) play_remove_lines::$8
(bool~) play_remove_lines::$9
(label) play_remove_lines::@1
(label) play_remove_lines::@10
(label) play_remove_lines::@11
(label) play_remove_lines::@2
(label) play_remove_lines::@3
(label) play_remove_lines::@4
(label) play_remove_lines::@5
(label) play_remove_lines::@6
(label) play_remove_lines::@7
(label) play_remove_lines::@9
(label) play_remove_lines::@return
(byte) play_remove_lines::c
(byte) play_remove_lines::c#0
(byte) play_remove_lines::c#1
(byte) play_remove_lines::c#2
(byte) play_remove_lines::full
(byte) play_remove_lines::full#0
(byte) play_remove_lines::full#1
(byte) play_remove_lines::full#2
(byte) play_remove_lines::full#3
(byte) play_remove_lines::full#4
(byte) play_remove_lines::r
(byte) play_remove_lines::r#0
(byte) play_remove_lines::r#1
(byte) play_remove_lines::r#2
(byte) play_remove_lines::r#3
(byte) play_remove_lines::r#4
(byte) play_remove_lines::r#5
(byte) play_remove_lines::r#6
(byte) play_remove_lines::r#7
(byte) play_remove_lines::r#8
(byte) play_remove_lines::removed
(byte) play_remove_lines::removed#0
(byte) play_remove_lines::removed#1
(byte) play_remove_lines::removed#10
(byte) play_remove_lines::removed#11
(byte) play_remove_lines::removed#2
(byte) play_remove_lines::removed#3
(byte) play_remove_lines::removed#4
(byte) play_remove_lines::removed#5
(byte) play_remove_lines::removed#6
(byte) play_remove_lines::removed#7
(byte) play_remove_lines::removed#8
(byte) play_remove_lines::removed#9
(byte) play_remove_lines::return
(byte) play_remove_lines::return#0
(byte) play_remove_lines::return#1
(byte) play_remove_lines::return#2
(byte) play_remove_lines::return#3
(byte) play_remove_lines::return#4
(byte) play_remove_lines::w
(byte) play_remove_lines::w#0
(byte) play_remove_lines::w#1
(byte) play_remove_lines::w#10
(byte) play_remove_lines::w#11
(byte) play_remove_lines::w#12
(byte) play_remove_lines::w#2
(byte) play_remove_lines::w#3
(byte) play_remove_lines::w#4
(byte) play_remove_lines::w#5
(byte) play_remove_lines::w#6
(byte) play_remove_lines::w#7
(byte) play_remove_lines::w#8
(byte) play_remove_lines::w#9
(byte) play_remove_lines::x
(byte) play_remove_lines::x#0
(byte) play_remove_lines::x#1
(byte) play_remove_lines::x#2
(byte) play_remove_lines::x#3
(byte) play_remove_lines::x#4
(byte) play_remove_lines::y
(byte) play_remove_lines::y#0
(byte) play_remove_lines::y#1
(byte) play_remove_lines::y#2
(byte) play_remove_lines::y#3
(byte) play_remove_lines::y#4
(byte) play_remove_lines::y#5
(byte) play_remove_lines::y#6
(byte) play_remove_lines::y#7
(byte) play_remove_lines::y#8
(void()) play_spawn_current()
(byte/signed word/word/dword/signed dword~) play_spawn_current::$0
(byte*~) play_spawn_current::$1
(byte~) play_spawn_current::$2
(bool~) play_spawn_current::$3
(bool~) play_spawn_current::$4
(bool~) play_spawn_current::$5
(byte~) play_spawn_current::$6
(byte~) play_spawn_current::$7
(label) play_spawn_current::@1
(label) play_spawn_current::@10
(label) play_spawn_current::@2
(label) play_spawn_current::@3
(label) play_spawn_current::@4
(label) play_spawn_current::@5
(label) play_spawn_current::@9
(label) play_spawn_current::@return
(byte) play_spawn_current::current_piece_idx
(byte) play_spawn_current::current_piece_idx#0
(byte) play_spawn_current::piece_idx
(byte) play_spawn_current::piece_idx#0
(byte) play_spawn_current::piece_idx#1
(byte) play_spawn_current::piece_idx#2
(byte) play_spawn_current::piece_idx#3
(label) play_spawn_current::sid_rnd1
(label) play_spawn_current::sid_rnd1_@return
(byte) play_spawn_current::sid_rnd1_return
(byte) play_spawn_current::sid_rnd1_return#0
(byte) play_spawn_current::sid_rnd1_return#1
(byte) play_spawn_current::sid_rnd1_return#2
(byte) play_spawn_current::sid_rnd1_return#3
(void()) play_update_score((byte) play_update_score::removed)
(bool~) play_update_score::$0
(bool~) play_update_score::$1
(byte~) play_update_score::$2
(byte~) play_update_score::$3
(byte/signed word/word/dword/signed dword~) play_update_score::$4
(byte~) play_update_score::$5
(byte~) play_update_score::$6
(bool~) play_update_score::$7
(bool~) play_update_score::$8
(label) play_update_score::@1
(label) play_update_score::@2
(label) play_update_score::@3
(label) play_update_score::@4
(label) play_update_score::@5
(label) play_update_score::@return
(dword) play_update_score::add_bcd
(dword) play_update_score::add_bcd#0
(byte) play_update_score::lines_after
(byte) play_update_score::lines_after#0
(byte) play_update_score::lines_before
(byte) play_update_score::lines_before#0
(byte) play_update_score::removed
(byte) play_update_score::removed#0
(byte) play_update_score::removed#1
(byte) play_update_score::removed#2
(byte[$3]) playfield
(byte[$3]) playfield#0
(byte*[PLAYFIELD_LINES#0]) playfield_lines
(byte*[PLAYFIELD_LINES#0]) playfield_lines#0
(byte[$29]) playfield_lines_idx
(byte[$29]) playfield_lines_idx#0
(void()) render_bcd((byte*) render_bcd::screen , (word) render_bcd::offset , (byte) render_bcd::bcd , (byte) render_bcd::only_low)
(byte*~) render_bcd::$0
(bool~) render_bcd::$1
(bool~) render_bcd::$2
(byte~) render_bcd::$3
(byte~) render_bcd::$4
(byte~) render_bcd::$5
(byte~) render_bcd::$6
(label) render_bcd::@1
(label) render_bcd::@2
(label) render_bcd::@return
(byte) render_bcd::ZERO_CHAR
(byte) render_bcd::ZERO_CHAR#0
(byte) render_bcd::bcd
(byte) render_bcd::bcd#0
(byte) render_bcd::bcd#1
(byte) render_bcd::bcd#2
(byte) render_bcd::bcd#3
(byte) render_bcd::bcd#4
(byte) render_bcd::bcd#5
(byte) render_bcd::bcd#6
(byte) render_bcd::bcd#7
(byte) render_bcd::bcd#8
(word) render_bcd::offset
(word) render_bcd::offset#0
(word) render_bcd::offset#1
(word) render_bcd::offset#2
(word) render_bcd::offset#3
(word) render_bcd::offset#4
(word) render_bcd::offset#5
(word) render_bcd::offset#6
(byte) render_bcd::only_low
(byte) render_bcd::only_low#0
(byte) render_bcd::only_low#1
(byte) render_bcd::only_low#2
(byte) render_bcd::only_low#3
(byte) render_bcd::only_low#4
(byte) render_bcd::only_low#5
(byte) render_bcd::only_low#6
(byte*) render_bcd::screen
(byte*) render_bcd::screen#0
(byte*) render_bcd::screen#1
(byte*) render_bcd::screen#2
(byte*) render_bcd::screen#3
(byte*) render_bcd::screen#4
(byte*) render_bcd::screen#5
(byte*) render_bcd::screen#6
(byte*) render_bcd::screen_pos
(byte*) render_bcd::screen_pos#0
(byte*) render_bcd::screen_pos#1
(byte*) render_bcd::screen_pos#2
(byte*) render_bcd::screen_pos#3
(byte*) render_bcd::screen_pos#4
(void()) render_init()
(byte~) render_init::$1
(byte*~) render_init::$10
(byte*~) render_init::$11
(byte/signed word/word/dword/signed dword~) render_init::$12
(byte/signed word/word/dword/signed dword~) render_init::$13
(byte/signed word/word/dword/signed dword~) render_init::$14
(bool~) render_init::$15
(byte~) render_init::$2
(byte/word/dword~) render_init::$3
(byte/signed byte/word/signed word/dword/signed dword~) render_init::$6
(byte*~) render_init::$7
(byte*~) render_init::$8
(byte/signed byte/word/signed word/dword/signed dword~) render_init::$9
(label) render_init::@1
(label) render_init::@2
(label) render_init::@3
(label) render_init::@4
(label) render_init::@5
(label) render_init::@return
(byte) render_init::i
(byte) render_init::i#0
(byte) render_init::i#1
(byte) render_init::i#2
(byte*) render_init::li_1
(byte*) render_init::li_1#0
(byte*) render_init::li_1#1
(byte*) render_init::li_1#2
(byte*) render_init::li_2
(byte*) render_init::li_2#0
(byte*) render_init::li_2#1
(byte*) render_init::li_2#2
(label) render_init::vicSelectGfxBank1
(byte~) render_init::vicSelectGfxBank1_$0
(byte) render_init::vicSelectGfxBank1_$0#0
(label) render_init::vicSelectGfxBank1_@1
(byte*) render_init::vicSelectGfxBank1_gfx
(byte*) render_init::vicSelectGfxBank1_gfx#0
(byte*) render_init::vicSelectGfxBank1_gfx#1
(label) render_init::vicSelectGfxBank1_toDd001
(word~) render_init::vicSelectGfxBank1_toDd001_$0
(word) render_init::vicSelectGfxBank1_toDd001_$0#0
(byte~) render_init::vicSelectGfxBank1_toDd001_$1
(byte) render_init::vicSelectGfxBank1_toDd001_$1#0
(byte/signed word/word/dword/signed dword~) render_init::vicSelectGfxBank1_toDd001_$2
(byte/signed word/word/dword/signed dword) render_init::vicSelectGfxBank1_toDd001_$2#0
(byte/word/dword~) render_init::vicSelectGfxBank1_toDd001_$3
(byte/word/dword) render_init::vicSelectGfxBank1_toDd001_$3#0
(label) render_init::vicSelectGfxBank1_toDd001_@return
(byte*) render_init::vicSelectGfxBank1_toDd001_gfx
(byte*) render_init::vicSelectGfxBank1_toDd001_gfx#0
(byte*) render_init::vicSelectGfxBank1_toDd001_gfx#1
(byte) render_init::vicSelectGfxBank1_toDd001_return
(byte) render_init::vicSelectGfxBank1_toDd001_return#0
(byte) render_init::vicSelectGfxBank1_toDd001_return#1
(byte) render_init::vicSelectGfxBank1_toDd001_return#2
(byte) render_init::vicSelectGfxBank1_toDd001_return#3
(void()) render_moving()
(byte/signed word/word/dword/signed dword~) render_moving::$0
(bool~) render_moving::$1
(byte~) render_moving::$2
(bool~) render_moving::$3
(bool~) render_moving::$4
(bool~) render_moving::$5
(bool~) render_moving::$6
(label) render_moving::@1
(label) render_moving::@2
(label) render_moving::@3
(label) render_moving::@4
(label) render_moving::@5
(label) render_moving::@6
(label) render_moving::@8
(label) render_moving::@return
(byte) render_moving::c
(byte) render_moving::c#0
(byte) render_moving::c#1
(byte) render_moving::c#2
(byte) render_moving::c#3
(byte) render_moving::c#4
(byte) render_moving::current_cell
(byte) render_moving::current_cell#0
(byte) render_moving::i
(byte) render_moving::i#0
(byte) render_moving::i#1
(byte) render_moving::i#2
(byte) render_moving::i#3
(byte) render_moving::i#4
(byte) render_moving::i#5
(byte) render_moving::i#6
(byte) render_moving::i#7
(byte) render_moving::i#8
(byte) render_moving::i#9
(byte) render_moving::l
(byte) render_moving::l#0
(byte) render_moving::l#1
(byte) render_moving::l#2
(byte) render_moving::l#3
(byte) render_moving::l#4
(byte) render_moving::l#5
(byte) render_moving::l#6
(byte) render_moving::l#7
(byte) render_moving::l#8
(byte*) render_moving::screen_line
(byte*) render_moving::screen_line#0
(byte*) render_moving::screen_line#1
(byte*) render_moving::screen_line#2
(byte*) render_moving::screen_line#3
(byte) render_moving::xpos
(byte) render_moving::xpos#0
(byte) render_moving::xpos#1
(byte) render_moving::xpos#2
(byte) render_moving::xpos#3
(byte) render_moving::xpos#4
(byte) render_moving::ypos2
(byte) render_moving::ypos2#0
(byte) render_moving::ypos2#1
(byte) render_moving::ypos2#2
(byte) render_moving::ypos2#3
(byte) render_moving::ypos2#4
(byte) render_moving::ypos2#5
(byte) render_moving::ypos2#6
(byte) render_moving::ypos2#7
(byte) render_moving::ypos2#8
(void()) render_next()
(word/signed word/dword/signed dword~) render_next::$0
(word/signed dword/dword/signed word~) render_next::$1
(word/signed dword/dword/signed word~) render_next::$2
(bool~) render_next::$3
(byte/signed word/word/dword/signed dword~) render_next::$4
(byte*~) render_next::$5
(byte*~) render_next::$6
(bool~) render_next::$7
(bool~) render_next::$8
(bool~) render_next::$9
(label) render_next::@1
(label) render_next::@11
(label) render_next::@2
(label) render_next::@3
(label) render_next::@5
(label) render_next::@6
(label) render_next::@7
(label) render_next::@8
(label) render_next::@9
(label) render_next::@return
(byte) render_next::c
(byte) render_next::c#0
(byte) render_next::c#1
(byte) render_next::c#2
(byte) render_next::c#3
(byte) render_next::c#4
(byte) render_next::c#5
(byte) render_next::cell
(byte) render_next::cell#0
(byte) render_next::l
(byte) render_next::l#0
(byte) render_next::l#1
(byte) render_next::l#2
(byte) render_next::l#3
(byte) render_next::l#4
(byte) render_next::l#5
(byte) render_next::l#6
(byte) render_next::l#7
(word) render_next::next_area_offset
(word) render_next::next_area_offset#0
(word) render_next::next_area_offset#1
(word) render_next::next_area_offset#2
(byte) render_next::next_piece_char
(byte) render_next::next_piece_char#0
(byte) render_next::next_piece_char#1
(byte) render_next::next_piece_char#2
(byte) render_next::next_piece_char#3
(byte) render_next::next_piece_char#4
(byte) render_next::next_piece_char#5
(byte) render_next::next_piece_char#6
(byte*) render_next::next_piece_gfx
(byte*) render_next::next_piece_gfx#0
(byte*) render_next::next_piece_gfx#1
(byte*) render_next::next_piece_gfx#2
(byte*) render_next::next_piece_gfx#3
(byte*) render_next::next_piece_gfx#4
(byte*) render_next::next_piece_gfx#5
(byte*) render_next::next_piece_gfx#6
(byte*) render_next::next_piece_gfx#7
(byte*) render_next::screen_next_area
(byte*) render_next::screen_next_area#0
(byte*) render_next::screen_next_area#1
(byte*) render_next::screen_next_area#10
(byte*) render_next::screen_next_area#11
(byte*) render_next::screen_next_area#2
(byte*) render_next::screen_next_area#3
(byte*) render_next::screen_next_area#4
(byte*) render_next::screen_next_area#5
(byte*) render_next::screen_next_area#6
(byte*) render_next::screen_next_area#7
(byte*) render_next::screen_next_area#8
(byte*) render_next::screen_next_area#9
(void()) render_playfield()
(byte/signed word/word/dword/signed dword~) render_playfield::$0
(byte/signed word/word/dword/signed dword~) render_playfield::$1
(byte/signed word/word/dword/signed dword~) render_playfield::$2
(byte/signed word/word/dword/signed dword~) render_playfield::$3
(byte/signed word/word/dword/signed dword~) render_playfield::$4
(bool~) render_playfield::$5
(bool~) render_playfield::$6
(label) render_playfield::@1
(label) render_playfield::@2
(label) render_playfield::@3
(label) render_playfield::@return
(byte) render_playfield::c
(byte) render_playfield::c#0
(byte) render_playfield::c#1
(byte) render_playfield::c#2
(byte) render_playfield::i
(byte) render_playfield::i#0
(byte) render_playfield::i#1
(byte) render_playfield::i#2
(byte) render_playfield::i#3
(byte) render_playfield::i#4
(byte) render_playfield::l
(byte) render_playfield::l#0
(byte) render_playfield::l#1
(byte) render_playfield::l#2
(byte) render_playfield::l#3
(byte) render_playfield::l#4
(byte*) render_playfield::screen_line
(byte*) render_playfield::screen_line#0
(byte*) render_playfield::screen_line#1
(byte*) render_playfield::screen_line#2
(void()) render_score()
(bool~) render_score::$0
(dword*~) render_score::$1
(byte/signed byte/word/signed word/dword/signed dword~) render_score::$10
(byte/signed word/word/dword/signed dword/signed byte~) render_score::$11
(byte~) render_score::$12
(word/signed dword/dword~) render_score::$14
(byte~) render_score::$15
(word/signed word/dword/signed dword~) render_score::$17
(word/signed dword/dword/signed word~) render_score::$18
(byte*~) render_score::$2
(byte/word/signed word/dword/signed dword~) render_score::$3
(byte/signed word/word/dword/signed dword~) render_score::$4
(word/signed dword/dword~) render_score::$6
(word/signed dword/dword~) render_score::$8
(label) render_score::@1
(label) render_score::@10
(label) render_score::@2
(label) render_score::@3
(label) render_score::@5
(label) render_score::@6
(label) render_score::@7
(label) render_score::@8
(label) render_score::@9
(label) render_score::@return
(word) render_score::level_offset
(word) render_score::level_offset#0
(word) render_score::lines_offset
(word) render_score::lines_offset#0
(word) render_score::lines_offset#1
(byte*) render_score::score_bytes
(byte*) render_score::score_bytes#0
(byte*) render_score::score_bytes#1
(byte*) render_score::score_bytes#2
(word) render_score::score_offset
(word) render_score::score_offset#0
(word) render_score::score_offset#1
(word) render_score::score_offset#2
(byte*) render_score::screen
(byte*) render_score::screen#0
(byte*) render_score::screen#1
(byte*) render_score::screen#2
(byte*) render_score::screen#3
(byte*) render_score::screen#4
(byte*) render_score::screen#5
(byte*) render_score::screen#6
(byte*) render_score::screen#7
(byte*) render_score::screen#8
(void()) render_screen_original((byte*) render_screen_original::screen)
(byte/signed byte/word/signed word/dword/signed dword~) render_screen_original::$0
(byte*~) render_screen_original::$1
(byte/signed byte/word/signed word/dword/signed dword~) render_screen_original::$2
(byte*~) render_screen_original::$3
(bool~) render_screen_original::$4
(bool~) render_screen_original::$5
(bool~) render_screen_original::$6
(bool~) render_screen_original::$7
(label) render_screen_original::@1
(label) render_screen_original::@2
(label) render_screen_original::@4
(label) render_screen_original::@6
(label) render_screen_original::@7
(label) render_screen_original::@return
(byte) render_screen_original::SPACE
(byte) render_screen_original::SPACE#0
(byte*) render_screen_original::cols
(byte*) render_screen_original::cols#0
(byte*) render_screen_original::cols#1
(byte*) render_screen_original::cols#2
(byte*) render_screen_original::cols#3
(byte*) render_screen_original::cols#4
(byte*) render_screen_original::cols#5
(byte*) render_screen_original::cols#6
(byte*) render_screen_original::cols#7
(byte*) render_screen_original::cols#8
(byte*) render_screen_original::ocols
(byte*) render_screen_original::ocols#0
(byte*) render_screen_original::ocols#1
(byte*) render_screen_original::ocols#2
(byte*) render_screen_original::ocols#3
(byte*) render_screen_original::ocols#4
(byte*) render_screen_original::ocols#5
(byte*) render_screen_original::ocols#6
(byte*) render_screen_original::oscr
(byte*) render_screen_original::oscr#0
(byte*) render_screen_original::oscr#1
(byte*) render_screen_original::oscr#2
(byte*) render_screen_original::oscr#3
(byte*) render_screen_original::oscr#4
(byte*) render_screen_original::oscr#5
(byte*) render_screen_original::oscr#6
(byte*) render_screen_original::screen
(byte*) render_screen_original::screen#0
(byte*) render_screen_original::screen#1
(byte*) render_screen_original::screen#10
(byte*) render_screen_original::screen#2
(byte*) render_screen_original::screen#3
(byte*) render_screen_original::screen#4
(byte*) render_screen_original::screen#5
(byte*) render_screen_original::screen#6
(byte*) render_screen_original::screen#7
(byte*) render_screen_original::screen#8
(byte*) render_screen_original::screen#9
(byte) render_screen_original::x
(byte) render_screen_original::x#0
(byte) render_screen_original::x#1
(byte) render_screen_original::x#2
(byte) render_screen_original::x#3
(byte) render_screen_original::x#4
(byte) render_screen_original::x#5
(byte) render_screen_original::x#6
(byte) render_screen_original::y
(byte) render_screen_original::y#0
(byte) render_screen_original::y#1
(byte) render_screen_original::y#2
(byte) render_screen_original::y#3
(byte) render_screen_original::y#4
(byte) render_screen_original::y#5
(byte) render_screen_original::y#6
(byte) render_screen_render
(byte) render_screen_render#0
(byte) render_screen_render#1
(byte) render_screen_render#10
(byte) render_screen_render#11
(byte) render_screen_render#12
(byte) render_screen_render#13
(byte) render_screen_render#14
(byte) render_screen_render#15
(byte) render_screen_render#16
(byte) render_screen_render#17
(byte) render_screen_render#18
(byte) render_screen_render#19
(byte) render_screen_render#2
(byte) render_screen_render#20
(byte) render_screen_render#21
(byte) render_screen_render#22
(byte) render_screen_render#23
(byte) render_screen_render#24
(byte) render_screen_render#25
(byte) render_screen_render#26
(byte) render_screen_render#27
(byte) render_screen_render#28
(byte) render_screen_render#29
(byte) render_screen_render#3
(byte) render_screen_render#30
(byte) render_screen_render#31
(byte) render_screen_render#32
(byte) render_screen_render#33
(byte) render_screen_render#34
(byte) render_screen_render#35
(byte) render_screen_render#36
(byte) render_screen_render#37
(byte) render_screen_render#38
(byte) render_screen_render#39
(byte) render_screen_render#4
(byte) render_screen_render#40
(byte) render_screen_render#41
(byte) render_screen_render#42
(byte) render_screen_render#43
(byte) render_screen_render#44
(byte) render_screen_render#45
(byte) render_screen_render#46
(byte) render_screen_render#47
(byte) render_screen_render#48
(byte) render_screen_render#49
(byte) render_screen_render#5
(byte) render_screen_render#50
(byte) render_screen_render#51
(byte) render_screen_render#52
(byte) render_screen_render#53
(byte) render_screen_render#54
(byte) render_screen_render#55
(byte) render_screen_render#56
(byte) render_screen_render#57
(byte) render_screen_render#58
(byte) render_screen_render#59
(byte) render_screen_render#6
(byte) render_screen_render#60
(byte) render_screen_render#61
(byte) render_screen_render#62
(byte) render_screen_render#63
(byte) render_screen_render#64
(byte) render_screen_render#65
(byte) render_screen_render#66
(byte) render_screen_render#7
(byte) render_screen_render#8
(byte) render_screen_render#9
(byte) render_screen_show
(byte) render_screen_show#0
(byte) render_screen_show#1
(byte) render_screen_show#10
(byte) render_screen_show#11
(byte) render_screen_show#12
(byte) render_screen_show#13
(byte) render_screen_show#14
(byte) render_screen_show#15
(byte) render_screen_show#16
(byte) render_screen_show#17
(byte) render_screen_show#18
(byte) render_screen_show#19
(byte) render_screen_show#2
(byte) render_screen_show#20
(byte) render_screen_show#21
(byte) render_screen_show#22
(byte) render_screen_show#23
(byte) render_screen_show#24
(byte) render_screen_show#25
(byte) render_screen_show#26
(byte) render_screen_show#27
(byte) render_screen_show#28
(byte) render_screen_show#29
(byte) render_screen_show#3
(byte) render_screen_show#30
(byte) render_screen_show#31
(byte) render_screen_show#32
(byte) render_screen_show#33
(byte) render_screen_show#34
(byte) render_screen_show#35
(byte) render_screen_show#36
(byte) render_screen_show#37
(byte) render_screen_show#38
(byte) render_screen_show#39
(byte) render_screen_show#4
(byte) render_screen_show#40
(byte) render_screen_show#41
(byte) render_screen_show#42
(byte) render_screen_show#43
(byte) render_screen_show#44
(byte) render_screen_show#45
(byte) render_screen_show#46
(byte) render_screen_show#47
(byte) render_screen_show#48
(byte) render_screen_show#49
(byte) render_screen_show#5
(byte) render_screen_show#50
(byte) render_screen_show#51
(byte) render_screen_show#52
(byte) render_screen_show#53
(byte) render_screen_show#54
(byte) render_screen_show#55
(byte) render_screen_show#56
(byte) render_screen_show#57
(byte) render_screen_show#58
(byte) render_screen_show#59
(byte) render_screen_show#6
(byte) render_screen_show#60
(byte) render_screen_show#61
(byte) render_screen_show#62
(byte) render_screen_show#7
(byte) render_screen_show#8
(byte) render_screen_show#9
(byte) render_screen_showing
(byte) render_screen_showing#0
(byte) render_screen_showing#1
(byte) render_screen_showing#10
(byte) render_screen_showing#11
(byte) render_screen_showing#12
(byte) render_screen_showing#13
(byte) render_screen_showing#14
(byte) render_screen_showing#15
(byte) render_screen_showing#16
(byte) render_screen_showing#17
(byte) render_screen_showing#18
(byte) render_screen_showing#19
(byte) render_screen_showing#2
(byte) render_screen_showing#20
(byte) render_screen_showing#21
(byte) render_screen_showing#22
(byte) render_screen_showing#23
(byte) render_screen_showing#24
(byte) render_screen_showing#25
(byte) render_screen_showing#26
(byte) render_screen_showing#27
(byte) render_screen_showing#28
(byte) render_screen_showing#29
(byte) render_screen_showing#3
(byte) render_screen_showing#30
(byte) render_screen_showing#31
(byte) render_screen_showing#32
(byte) render_screen_showing#33
(byte) render_screen_showing#34
(byte) render_screen_showing#35
(byte) render_screen_showing#36
(byte) render_screen_showing#37
(byte) render_screen_showing#38
(byte) render_screen_showing#39
(byte) render_screen_showing#4
(byte) render_screen_showing#40
(byte) render_screen_showing#41
(byte) render_screen_showing#42
(byte) render_screen_showing#43
(byte) render_screen_showing#44
(byte) render_screen_showing#45
(byte) render_screen_showing#46
(byte) render_screen_showing#47
(byte) render_screen_showing#48
(byte) render_screen_showing#49
(byte) render_screen_showing#5
(byte) render_screen_showing#50
(byte) render_screen_showing#6
(byte) render_screen_showing#7
(byte) render_screen_showing#8
(byte) render_screen_showing#9
(void()) render_screen_swap()
(label) render_screen_swap::@return
(void()) render_show()
(bool~) render_show::$0
(byte~) render_show::$1
(byte~) render_show::$2
(label) render_show::@1
(label) render_show::@2
(label) render_show::@3
(label) render_show::@5
(label) render_show::@6
(label) render_show::@return
(byte) render_show::d018val
(byte) render_show::d018val#0
(byte) render_show::d018val#1
(byte) render_show::d018val#2
(byte) render_show::d018val#3
(label) render_show::toD0181
(word~) render_show::toD0181_$0
(word) render_show::toD0181_$0#0
(word~) render_show::toD0181_$1
(word) render_show::toD0181_$1#0
(word/signed dword/dword~) render_show::toD0181_$2
(word/signed dword/dword) render_show::toD0181_$2#0
(byte/word~) render_show::toD0181_$3
(byte/word) render_show::toD0181_$3#0
(word~) render_show::toD0181_$4
(word) render_show::toD0181_$4#0
(byte~) render_show::toD0181_$5
(byte) render_show::toD0181_$5#0
(byte/signed word/word/dword/signed dword~) render_show::toD0181_$6
(byte/signed word/word/dword/signed dword) render_show::toD0181_$6#0
(byte/word/dword~) render_show::toD0181_$7
(byte/word/dword) render_show::toD0181_$7#0
(byte/word/dword~) render_show::toD0181_$8
(byte/word/dword) render_show::toD0181_$8#0
(label) render_show::toD0181_@return
(byte*) render_show::toD0181_gfx
(byte*) render_show::toD0181_gfx#0
(byte*) render_show::toD0181_gfx#1
(byte) render_show::toD0181_return
(byte) render_show::toD0181_return#0
(byte) render_show::toD0181_return#1
(byte) render_show::toD0181_return#2
(byte) render_show::toD0181_return#3
(byte*) render_show::toD0181_screen
(byte*) render_show::toD0181_screen#0
(byte*) render_show::toD0181_screen#1
(label) render_show::toD0182
(word~) render_show::toD0182_$0
(word) render_show::toD0182_$0#0
(word~) render_show::toD0182_$1
(word) render_show::toD0182_$1#0
(word/signed dword/dword~) render_show::toD0182_$2
(word/signed dword/dword) render_show::toD0182_$2#0
(byte/word~) render_show::toD0182_$3
(byte/word) render_show::toD0182_$3#0
(word~) render_show::toD0182_$4
(word) render_show::toD0182_$4#0
(byte~) render_show::toD0182_$5
(byte) render_show::toD0182_$5#0
(byte/signed word/word/dword/signed dword~) render_show::toD0182_$6
(byte/signed word/word/dword/signed dword) render_show::toD0182_$6#0
(byte/word/dword~) render_show::toD0182_$7
(byte/word/dword) render_show::toD0182_$7#0
(byte/word/dword~) render_show::toD0182_$8
(byte/word/dword) render_show::toD0182_$8#0
(label) render_show::toD0182_@return
(byte*) render_show::toD0182_gfx
(byte*) render_show::toD0182_gfx#0
(byte*) render_show::toD0182_gfx#1
(byte) render_show::toD0182_return
(byte) render_show::toD0182_return#0
(byte) render_show::toD0182_return#1
(byte) render_show::toD0182_return#2
(byte) render_show::toD0182_return#3
(byte*) render_show::toD0182_screen
(byte*) render_show::toD0182_screen#0
(byte*) render_show::toD0182_screen#1
(dword[5]) score_add_bcd
(dword[5]) score_add_bcd#0
(dword) score_bcd
(dword) score_bcd#0
(dword) score_bcd#1
(dword) score_bcd#10
(dword) score_bcd#11
(dword) score_bcd#12
(dword) score_bcd#13
(dword) score_bcd#14
(dword) score_bcd#15
(dword) score_bcd#16
(dword) score_bcd#17
(dword) score_bcd#18
(dword) score_bcd#19
(dword) score_bcd#2
(dword) score_bcd#20
(dword) score_bcd#21
(dword) score_bcd#22
(dword) score_bcd#23
(dword) score_bcd#24
(dword) score_bcd#25
(dword) score_bcd#26
(dword) score_bcd#27
(dword) score_bcd#28
(dword) score_bcd#29
(dword) score_bcd#3
(dword) score_bcd#30
(dword) score_bcd#31
(dword) score_bcd#32
(dword) score_bcd#33
(dword) score_bcd#34
(dword) score_bcd#35
(dword) score_bcd#36
(dword) score_bcd#37
(dword) score_bcd#38
(dword) score_bcd#39
(dword) score_bcd#4
(dword) score_bcd#40
(dword) score_bcd#41
(dword) score_bcd#42
(dword) score_bcd#43
(dword) score_bcd#44
(dword) score_bcd#45
(dword) score_bcd#46
(dword) score_bcd#47
(dword) score_bcd#48
(dword) score_bcd#49
(dword) score_bcd#5
(dword) score_bcd#50
(dword) score_bcd#51
(dword) score_bcd#52
(dword) score_bcd#53
(dword) score_bcd#54
(dword) score_bcd#55
(dword) score_bcd#56
(dword) score_bcd#57
(dword) score_bcd#58
(dword) score_bcd#59
(dword) score_bcd#6
(dword) score_bcd#60
(dword) score_bcd#61
(dword) score_bcd#62
(dword) score_bcd#63
(dword) score_bcd#64
(dword) score_bcd#65
(dword) score_bcd#66
(dword) score_bcd#67
(dword) score_bcd#68
(dword) score_bcd#69
(dword) score_bcd#7
(dword) score_bcd#70
(dword) score_bcd#71
(dword) score_bcd#72
(dword) score_bcd#73
(dword) score_bcd#74
(dword) score_bcd#75
(dword) score_bcd#76
(dword) score_bcd#77
(dword) score_bcd#78
(dword) score_bcd#79
(dword) score_bcd#8
(dword) score_bcd#80
(dword) score_bcd#81
(dword) score_bcd#82
(dword) score_bcd#83
(dword) score_bcd#84
(dword) score_bcd#85
(dword) score_bcd#86
(dword) score_bcd#87
(dword) score_bcd#88
(dword) score_bcd#89
(dword) score_bcd#9
(byte*[PLAYFIELD_LINES#0]) screen_lines_1
(byte*[PLAYFIELD_LINES#0]) screen_lines_1#0
(byte*[PLAYFIELD_LINES#0]) screen_lines_2
(byte*[PLAYFIELD_LINES#0]) screen_lines_2#0
(void()) sid_rnd_init()
(label) sid_rnd_init::@return
(void()) sprites_init()
(byte/signed byte/word/signed word/dword/signed dword~) sprites_init::$0
(byte/signed word/word/dword/signed dword/signed byte~) sprites_init::$1
(byte/signed word/word/dword/signed dword~) sprites_init::$2
(byte/signed word/word/dword/signed dword~) sprites_init::$3
(bool~) sprites_init::$4
(label) sprites_init::@1
(label) sprites_init::@return
(byte) sprites_init::s
(byte) sprites_init::s#0
(byte) sprites_init::s#1
(byte) sprites_init::s#2
(byte) sprites_init::s2
(byte) sprites_init::s2#0
(byte) sprites_init::xpos
(byte) sprites_init::xpos#0
(byte) sprites_init::xpos#1
(byte) sprites_init::xpos#2
interrupt(HARDWARE_CLOBBER)(void()) sprites_irq()
(byte/signed word/word/dword/signed dword~) sprites_irq::$0
(bool~) sprites_irq::$1
(bool~) sprites_irq::$2
(bool~) sprites_irq::$3
(bool~) sprites_irq::$4
(byte~) sprites_irq::$5
(label) sprites_irq::@1
(label) sprites_irq::@11
(label) sprites_irq::@12
(label) sprites_irq::@13
(label) sprites_irq::@15
(label) sprites_irq::@2
(label) sprites_irq::@3
(label) sprites_irq::@4
(label) sprites_irq::@6
(label) sprites_irq::@7
(label) sprites_irq::@8
(label) sprites_irq::@return
(byte) sprites_irq::ptr
(byte) sprites_irq::ptr#0
(byte) sprites_irq::ptr#1
(byte) sprites_irq::ptr#2
(byte) sprites_irq::ptr#3
(byte) sprites_irq::ptr#4
(byte) sprites_irq::ptr#5
(byte) sprites_irq::ptr#6
(byte) sprites_irq::raster_sprite_gfx_modify
(byte) sprites_irq::raster_sprite_gfx_modify#0
(byte) sprites_irq::raster_sprite_gfx_modify#1
(label) sprites_irq::toSpritePtr2
(word~) sprites_irq::toSpritePtr2_$0
(word) sprites_irq::toSpritePtr2_$0#0
(word/signed dword/dword~) sprites_irq::toSpritePtr2_$1
(word/signed dword/dword) sprites_irq::toSpritePtr2_$1#0
(byte~) sprites_irq::toSpritePtr2_$2
(byte) sprites_irq::toSpritePtr2_$2#0
(label) sprites_irq::toSpritePtr2_@return
(byte) sprites_irq::toSpritePtr2_return
(byte) sprites_irq::toSpritePtr2_return#0
(byte) sprites_irq::toSpritePtr2_return#1
(byte) sprites_irq::toSpritePtr2_return#2
(byte) sprites_irq::toSpritePtr2_return#3
(byte*) sprites_irq::toSpritePtr2_sprite
(byte*) sprites_irq::toSpritePtr2_sprite#0
(byte*) sprites_irq::toSpritePtr2_sprite#1
(byte) sprites_irq::ypos
(byte) sprites_irq::ypos#0
(void()) sprites_irq_init()
(void()*~) sprites_irq_init::$0
(label) sprites_irq_init::@return
(label) toSpritePtr1
(word~) toSpritePtr1_$0
(word) toSpritePtr1_$0#0
(word/signed dword/dword~) toSpritePtr1_$1
(word/signed dword/dword) toSpritePtr1_$1#0
(byte~) toSpritePtr1_$2
(byte) toSpritePtr1_$2#0
(label) toSpritePtr1_@return
(byte) toSpritePtr1_return
(byte) toSpritePtr1_return#0
(byte) toSpritePtr1_return#1
(byte) toSpritePtr1_return#2
(byte) toSpritePtr1_return#3
(byte*) toSpritePtr1_sprite
(byte*) toSpritePtr1_sprite#0
(byte*) toSpritePtr1_sprite#1
Culled Empty Block (label) render_score::@10
Successful SSA optimization Pass2CullEmptyBlocks
Inversing boolean not [99] (bool~) keyboard_event_scan::$18 ← (byte~) keyboard_event_scan::$16 == (byte/signed byte/word/signed word/dword/signed dword) 0 from [98] (bool~) keyboard_event_scan::$17 ← (byte~) keyboard_event_scan::$16 != (byte/signed byte/word/signed word/dword/signed dword) 0
Inversing boolean not [108] (bool~) keyboard_event_scan::$20 ← (byte) keyboard_events_size#10 == (byte/signed byte/word/signed word/dword/signed dword) 8 from [107] (bool~) keyboard_event_scan::$19 ← (byte) keyboard_events_size#10 != (byte/signed byte/word/signed word/dword/signed dword) 8
Inversing boolean not [133] (bool~) keyboard_event_scan::$2 ← (byte~) keyboard_event_scan::$0 == (byte/signed byte/word/signed word/dword/signed dword) 0 from [132] (bool~) keyboard_event_scan::$1 ← (byte~) keyboard_event_scan::$0 != (byte/signed byte/word/signed word/dword/signed dword) 0
Inversing boolean not [142] (bool~) keyboard_event_scan::$5 ← (byte~) keyboard_event_scan::$3 == (byte/signed byte/word/signed word/dword/signed dword) 0 from [141] (bool~) keyboard_event_scan::$4 ← (byte~) keyboard_event_scan::$3 != (byte/signed byte/word/signed word/dword/signed dword) 0
Inversing boolean not [154] (bool~) keyboard_event_scan::$8 ← (byte~) keyboard_event_scan::$6 == (byte/signed byte/word/signed word/dword/signed dword) 0 from [153] (bool~) keyboard_event_scan::$7 ← (byte~) keyboard_event_scan::$6 != (byte/signed byte/word/signed word/dword/signed dword) 0
Inversing boolean not [166] (bool~) keyboard_event_scan::$11 ← (byte~) keyboard_event_scan::$9 == (byte/signed byte/word/signed word/dword/signed dword) 0 from [165] (bool~) keyboard_event_scan::$10 ← (byte~) keyboard_event_scan::$9 != (byte/signed byte/word/signed word/dword/signed dword) 0
Inversing boolean not [420] (bool~) render_bcd::$2 ← (byte) render_bcd::only_low#6 != (byte/signed byte/word/signed word/dword/signed dword) 0 from [419] (bool~) render_bcd::$1 ← (byte) render_bcd::only_low#6 == (byte/signed byte/word/signed word/dword/signed dword) 0
Inversing boolean not [523] (bool~) render_moving::$4 ← (byte) render_moving::current_cell#0 == (byte/signed byte/word/signed word/dword/signed dword) 0 from [522] (bool~) render_moving::$3 ← (byte) render_moving::current_cell#0 != (byte/signed byte/word/signed word/dword/signed dword) 0
Inversing boolean not [795] (bool~) play_movement::$2 ← (byte) game_over#1 == (byte/signed byte/word/signed word/dword/signed dword) 0 from [794] (bool~) play_movement::$1 ← (byte) game_over#1 != (byte/signed byte/word/signed word/dword/signed dword) 0
Inversing boolean not [837] (bool~) play_move_down::$1 ← (byte) play_move_down::key_event#1 != (byte) KEY_SPACE#0 from [836] (bool~) play_move_down::$0 ← (byte) play_move_down::key_event#1 == (byte) KEY_SPACE#0
Inversing boolean not [846] (bool~) play_move_down::$4 ← (byte~) play_move_down::$2 == (byte/signed byte/word/signed word/dword/signed dword) 0 from [845] (bool~) play_move_down::$3 ← (byte~) play_move_down::$2 != (byte/signed byte/word/signed word/dword/signed dword) 0
Inversing boolean not [852] (bool~) play_move_down::$6 ← (byte) current_movedown_counter#12 < (byte) current_movedown_slow#19 from [851] (bool~) play_move_down::$5 ← (byte) current_movedown_counter#12 >= (byte) current_movedown_slow#19
Inversing boolean not [856] (bool~) play_move_down::$10 ← (byte) current_movedown_counter#13 < (byte) current_movedown_fast#0 from [855] (bool~) play_move_down::$9 ← (byte) current_movedown_counter#13 >= (byte) current_movedown_fast#0
Inversing boolean not [863] (bool~) play_move_down::$8 ← (byte) play_move_down::movedown#6 == (byte/signed byte/word/signed word/dword/signed dword) 0 from [862] (bool~) play_move_down::$7 ← (byte) play_move_down::movedown#6 != (byte/signed byte/word/signed word/dword/signed dword) 0
Inversing boolean not [941] (bool~) play_move_leftright::$10 ← (byte~) play_move_leftright::$8 != (byte) COLLISION_NONE#0 from [940] (bool~) play_move_leftright::$9 ← (byte~) play_move_leftright::$8 == (byte) COLLISION_NONE#0
Inversing boolean not [945] (bool~) play_move_leftright::$2 ← (byte) play_move_leftright::key_event#2 != (byte) KEY_DOT#0 from [944] (bool~) play_move_leftright::$1 ← (byte) play_move_leftright::key_event#2 == (byte) KEY_DOT#0
Inversing boolean not [958] (bool~) play_move_leftright::$6 ← (byte~) play_move_leftright::$4 != (byte) COLLISION_NONE#0 from [957] (bool~) play_move_leftright::$5 ← (byte~) play_move_leftright::$4 == (byte) COLLISION_NONE#0
Inversing boolean not [1005] (bool~) play_move_rotate::$4 ← (byte~) play_move_rotate::$2 != (byte) COLLISION_NONE#0 from [1004] (bool~) play_move_rotate::$3 ← (byte~) play_move_rotate::$2 == (byte) COLLISION_NONE#0
Inversing boolean not [1033] (bool~) play_collision::$3 ← *((byte*) play_collision::piece_gfx#1 + (byte) play_collision::i#2) == (byte/signed byte/word/signed word/dword/signed dword) 0 from [1032] (bool~) play_collision::$2 ← *((byte*) play_collision::piece_gfx#1 + (byte) play_collision::i#2) != (byte/signed byte/word/signed word/dword/signed dword) 0
Inversing boolean not [1044] (bool~) play_collision::$6 ← (byte) play_collision::ypos2#3 < (byte/signed word/word/dword/signed dword~) play_collision::$4 from [1043] (bool~) play_collision::$5 ← (byte) play_collision::ypos2#3 >= (byte/signed word/word/dword/signed dword~) play_collision::$4
Inversing boolean not [1049] (bool~) play_collision::$9 ← (byte~) play_collision::$7 == (byte/signed byte/word/signed word/dword/signed dword) 0 from [1048] (bool~) play_collision::$8 ← (byte~) play_collision::$7 != (byte/signed byte/word/signed word/dword/signed dword) 0
Inversing boolean not [1057] (bool~) play_collision::$11 ← (byte) play_collision::col#4 < (byte) PLAYFIELD_COLS#0 from [1056] (bool~) play_collision::$10 ← (byte) play_collision::col#4 >= (byte) PLAYFIELD_COLS#0
Inversing boolean not [1062] (bool~) play_collision::$13 ← *((byte*) play_collision::playfield_line#1 + (byte) play_collision::col#5) == (byte/signed byte/word/signed word/dword/signed dword) 0 from [1061] (bool~) play_collision::$12 ← *((byte*) play_collision::playfield_line#1 + (byte) play_collision::col#5) != (byte/signed byte/word/signed word/dword/signed dword) 0
Inversing boolean not [1084] (bool~) play_lock_current::$2 ← *((byte*) current_piece_gfx#22 + (byte) play_lock_current::i#2) == (byte/signed byte/word/signed word/dword/signed dword) 0 from [1083] (bool~) play_lock_current::$1 ← *((byte*) current_piece_gfx#22 + (byte) play_lock_current::i#2) != (byte/signed byte/word/signed word/dword/signed dword) 0
Inversing boolean not [1118] (bool~) play_spawn_current::$4 ← (byte~) play_spawn_current::$2 != (byte) COLLISION_PLAYFIELD#0 from [1117] (bool~) play_spawn_current::$3 ← (byte~) play_spawn_current::$2 == (byte) COLLISION_PLAYFIELD#0
Inversing boolean not [1165] (bool~) play_remove_lines::$7 ← (byte) play_remove_lines::c#0 != (byte/signed byte/word/signed word/dword/signed dword) 0 from [1164] (bool~) play_remove_lines::$6 ← (byte) play_remove_lines::c#0 == (byte/signed byte/word/signed word/dword/signed dword) 0
Inversing boolean not [1177] (bool~) play_remove_lines::$10 ← (byte) play_remove_lines::full#2 != (byte/signed byte/word/signed word/dword/signed dword) 1 from [1176] (bool~) play_remove_lines::$9 ← (byte) play_remove_lines::full#2 == (byte/signed byte/word/signed word/dword/signed dword) 1
Inversing boolean not [1200] (bool~) play_update_score::$1 ← (byte) play_update_score::removed#1 == (byte/signed byte/word/signed word/dword/signed dword) 0 from [1199] (bool~) play_update_score::$0 ← (byte) play_update_score::removed#1 != (byte/signed byte/word/signed word/dword/signed dword) 0
Inversing boolean not [1217] (bool~) play_update_score::$8 ← (byte) play_update_score::lines_before#0 == (byte) play_update_score::lines_after#0 from [1216] (bool~) play_update_score::$7 ← (byte) play_update_score::lines_before#0 != (byte) play_update_score::lines_after#0
Inversing boolean not [1245] (bool~) play_increase_level::$3 ← (byte~) play_increase_level::$1 != (byte/signed byte/word/signed word/dword/signed dword) $a from [1244] (bool~) play_increase_level::$2 ← (byte~) play_increase_level::$1 == (byte/signed byte/word/signed word/dword/signed dword) $a
Inversing boolean not [1358] (bool~) main::$17 ← (byte) main::render#2 == (byte/signed byte/word/signed word/dword/signed dword) 0 from [1357] (bool~) main::$16 ← (byte) main::render#2 != (byte/signed byte/word/signed word/dword/signed dword) 0
Successful SSA optimization Pass2UnaryNotSimplification
Alias candidate removed (volatile)(byte) render_screen_showing#1 = (byte) render_screen_show#11 (byte) render_screen_showing#6 (byte) render_screen_showing#2
Alias candidate removed (volatile)(byte) IRQ_RASTER_FIRST#0 = (byte/signed word/word/dword/signed dword~) $4 (byte) irq_raster_next#0 (byte) irq_raster_next#24 (byte) irq_raster_next#23 (byte) irq_raster_next#22 (byte) irq_raster_next#20 (byte) irq_raster_next#17 (byte) irq_raster_next#10
Alias candidate removed (volatile)(byte) irq_sprite_ypos#0 = (byte/signed word/word/dword/signed dword~) $5 (byte) irq_sprite_ypos#24 (byte) irq_sprite_ypos#22 (byte) irq_sprite_ypos#21 (byte) irq_sprite_ypos#18 (byte) irq_sprite_ypos#14 (byte) irq_sprite_ypos#9
Alias candidate removed (volatile)(byte) irq_sprite_ptr#0 = (byte/signed word/word/dword/signed dword~) $7 (byte) irq_sprite_ptr#18 (byte) irq_sprite_ptr#17 (byte) irq_sprite_ptr#14
Alias candidate removed (volatile)(byte) sprites_irq::raster_sprite_gfx_modify#0 = (byte/signed word/word/dword/signed dword~) sprites_irq::$0
Alias candidate removed (volatile)(byte) sprites_irq::toSpritePtr2_return#0 = (byte) sprites_irq::toSpritePtr2_$2#0 (byte) sprites_irq::toSpritePtr2_return#2 (byte) sprites_irq::toSpritePtr2_return#1 (byte) sprites_irq::toSpritePtr2_return#3 (byte~) sprites_irq::$5 (byte) irq_sprite_ptr#1
Alias (byte) keyboard_matrix_read::return#0 = (byte) keyboard_matrix_read::row_pressed_bits#0 (byte~) keyboard_matrix_read::$0 (byte) keyboard_matrix_read::return#3 (byte) keyboard_matrix_read::return#1
Alias (byte) keyboard_matrix_read::return#2 = (byte) keyboard_matrix_read::return#4
Alias (byte) keyboard_event_scan::row#2 = (byte) keyboard_event_scan::row#3 (byte) keyboard_event_scan::row#9 (byte) keyboard_event_scan::row#7
Alias (byte) keyboard_event_scan::keycode#11 = (byte) keyboard_event_scan::keycode#7 (byte) keyboard_event_scan::keycode#12 (byte) keyboard_event_scan::keycode#3
Alias (byte) keyboard_events_size#30 = (byte) keyboard_events_size#37 (byte) keyboard_events_size#45 (byte) keyboard_events_size#64
Alias (byte) keyboard_event_scan::row_scan#0 = (byte~) keyboard_event_scan::$12 (byte) keyboard_event_scan::row_scan#5
Alias (byte) keyboard_event_scan::keycode#1 = (byte/signed word/word/dword/signed dword~) keyboard_event_scan::$14
Alias (byte) keyboard_events_size#10 = (byte) keyboard_events_size#21 (byte) keyboard_events_size#38 (byte) keyboard_events_size#22 (byte) keyboard_events_size#11 (byte) keyboard_events_size#12
Alias (byte) keyboard_event_scan::row_scan#1 = (byte) keyboard_event_scan::row_scan#6 (byte) keyboard_event_scan::row_scan#7 (byte) keyboard_event_scan::row_scan#2 (byte) keyboard_event_scan::row_scan#8 (byte) keyboard_event_scan::row_scan#9
Alias (byte) keyboard_event_scan::col#2 = (byte) keyboard_event_scan::col#8 (byte) keyboard_event_scan::col#5 (byte) keyboard_event_scan::col#4 (byte) keyboard_event_scan::col#6 (byte) keyboard_event_scan::col#7
Alias (byte) keyboard_event_scan::keycode#10 = (byte) keyboard_event_scan::keycode#13 (byte) keyboard_event_scan::keycode#8 (byte) keyboard_event_scan::keycode#9 (byte) keyboard_event_scan::keycode#5 (byte) keyboard_event_scan::keycode#6
Alias (byte) keyboard_event_scan::row#10 = (byte) keyboard_event_scan::row#13 (byte) keyboard_event_scan::row#5 (byte) keyboard_event_scan::row#14 (byte) keyboard_event_scan::row#11 (byte) keyboard_event_scan::row#12
Alias (byte) keyboard_event_scan::event_type#0 = (byte~) keyboard_event_scan::$21
Alias (byte) keyboard_event_scan::row_scan#3 = (byte) keyboard_event_scan::row_scan#4
Alias (byte) keyboard_event_scan::row#6 = (byte) keyboard_event_scan::row#8
Alias (byte) keyboard_event_scan::keycode#15 = (byte) keyboard_event_scan::keycode#2
Alias (byte) keyboard_events_size#29 = (byte) keyboard_events_size#63
Alias (byte) keyboard_events_size#56 = (byte) keyboard_events_size#78 (byte) keyboard_events_size#75 (byte) keyboard_events_size#74
Alias (byte) keyboard_event_pressed::return#0 = (byte) keyboard_event_pressed::return#7
Alias (byte) keyboard_modifiers#1 = (byte) keyboard_modifiers#18 (byte) keyboard_modifiers#10
Alias (byte) keyboard_event_pressed::return#1 = (byte) keyboard_event_pressed::return#8
Alias (byte) keyboard_modifiers#11 = (byte) keyboard_modifiers#19 (byte) keyboard_modifiers#26
Alias (byte) keyboard_events_size#65 = (byte) keyboard_events_size#70 (byte) keyboard_events_size#66
Alias (byte) keyboard_modifiers#2 = (byte~) keyboard_event_scan::$26
Alias (byte) keyboard_event_pressed::return#2 = (byte) keyboard_event_pressed::return#9
Alias (byte) keyboard_modifiers#12 = (byte) keyboard_modifiers#20 (byte) keyboard_modifiers#27
Alias (byte) keyboard_events_size#46 = (byte) keyboard_events_size#57 (byte) keyboard_events_size#47
Alias (byte) keyboard_modifiers#3 = (byte~) keyboard_event_scan::$27
Alias (byte) keyboard_event_pressed::return#10 = (byte) keyboard_event_pressed::return#3
Alias (byte) keyboard_modifiers#13 = (byte) keyboard_modifiers#21 (byte) keyboard_modifiers#28 (byte) keyboard_modifiers#22
Alias (byte) keyboard_events_size#23 = (byte) keyboard_events_size#31 (byte) keyboard_events_size#39 (byte) keyboard_events_size#24
Alias (byte) keyboard_modifiers#4 = (byte~) keyboard_event_scan::$28
Alias (byte) keyboard_modifiers#5 = (byte~) keyboard_event_scan::$29
Alias (byte) keyboard_events_size#13 = (byte) keyboard_events_size#3
Alias (byte) keyboard_modifiers#14 = (byte) keyboard_modifiers#6
Alias (byte) keyboard_event_pressed::return#11 = (byte) keyboard_event_pressed::return#4 (byte~) keyboard_event_pressed::$2 (byte) keyboard_event_pressed::return#5
Alias (byte) keyboard_events_size#14 = (byte) keyboard_events_size#25 (byte) keyboard_events_size#15
Alias (byte) keyboard_event_get::return#2 = (byte) keyboard_event_get::return#4
Alias (byte) keyboard_events_size#16 = (byte) keyboard_events_size#5
Alias (byte) keyboard_events_size#0 = (byte) keyboard_events_size#81 (byte) keyboard_events_size#79 (byte) keyboard_events_size#76 (byte) keyboard_events_size#71 (byte) keyboard_events_size#67 (byte) keyboard_events_size#58 (byte) keyboard_events_size#48 (byte) keyboard_events_size#40 (byte) keyboard_events_size#36 (byte) keyboard_events_size#28
Alias (byte) keyboard_modifiers#0 = (byte) keyboard_modifiers#62 (byte) keyboard_modifiers#60 (byte) keyboard_modifiers#58 (byte) keyboard_modifiers#55 (byte) keyboard_modifiers#52 (byte) keyboard_modifiers#46 (byte) keyboard_modifiers#39 (byte) keyboard_modifiers#34 (byte) keyboard_modifiers#33 (byte) keyboard_modifiers#25
Alias (byte*) PLAYFIELD_SPRITE_PTRS_1#0 = (byte*~) $1
Alias (byte*) PLAYFIELD_SPRITE_PTRS_2#0 = (byte*~) $2
Alias (byte*) render_init::vicSelectGfxBank1_gfx#0 = (byte*) render_init::vicSelectGfxBank1_gfx#1 (byte*) render_init::vicSelectGfxBank1_toDd001_gfx#0 (byte*) render_init::vicSelectGfxBank1_toDd001_gfx#1
Alias (byte) render_init::vicSelectGfxBank1_toDd001_return#0 = (byte/word/dword) render_init::vicSelectGfxBank1_toDd001_$3#0 (byte) render_init::vicSelectGfxBank1_toDd001_return#2 (byte) render_init::vicSelectGfxBank1_toDd001_return#1 (byte) render_init::vicSelectGfxBank1_toDd001_return#3 (byte) render_init::vicSelectGfxBank1_$0#0
Alias (byte*) render_init::li_1#0 = (byte*~) render_init::$8
Alias (byte*) render_init::li_2#0 = (byte*~) render_init::$11
Alias (byte) render_screen_show#1 = (byte) render_screen_show#9 (byte) render_screen_show#2
Alias (byte) render_screen_render#1 = (byte) render_screen_render#9 (byte) render_screen_render#2
Alias (byte) level#26 = (byte) level#72 (byte) level#86 (byte) level#58 (byte) level#42 (byte) level#73 (byte) level#59 (byte) level#43 (byte) level#27
Alias (byte) render_screen_show#10 = (byte) render_screen_show#41 (byte) render_screen_show#33 (byte) render_screen_show#25 (byte) render_screen_show#19 (byte) render_screen_show#42 (byte) render_screen_show#34 (byte) render_screen_show#26 (byte) render_screen_show#20
Alias (byte*) render_show::toD0181_screen#0 = (byte*) render_show::toD0181_screen#1
Alias (byte*) render_show::toD0181_gfx#0 = (byte*) render_show::toD0181_gfx#1
Alias (byte) render_show::toD0181_return#0 = (byte/word/dword) render_show::toD0181_$8#0 (byte) render_show::toD0181_return#2 (byte) render_show::toD0181_return#1 (byte) render_show::toD0181_return#3 (byte~) render_show::$2 (byte) render_show::d018val#1
Alias (byte*) render_show::toD0182_screen#0 = (byte*) render_show::toD0182_screen#1
Alias (byte*) render_show::toD0182_gfx#0 = (byte*) render_show::toD0182_gfx#1
Alias (byte) render_show::toD0182_return#0 = (byte/word/dword) render_show::toD0182_$8#0 (byte) render_show::toD0182_return#2 (byte) render_show::toD0182_return#1 (byte) render_show::toD0182_return#3 (byte~) render_show::$1 (byte) render_show::d018val#2
Alias (byte) render_screen_render#11 = (byte) render_screen_render#3 (byte) render_screen_render#4
Alias (byte) render_screen_show#13 = (byte) render_screen_show#3 (byte) render_screen_show#4
Alias (dword) score_bcd#20 = (dword) score_bcd#35 (dword) score_bcd#21
Alias (word) lines_bcd#58 = (word) lines_bcd#69 (word) lines_bcd#59
Alias (byte) level_bcd#87 = (byte) level_bcd#95 (byte) level_bcd#88
Alias (byte*) render_score::score_bytes#0 = (byte*~) render_score::$2 (byte*) render_score::score_bytes#1 (byte*) render_score::score_bytes#2
Alias (word) render_score::score_offset#0 = (byte/signed word/word/dword/signed dword~) render_score::$4 (word) render_score::score_offset#1 (word) render_score::score_offset#2
Alias (byte*) render_score::screen#3 = (byte*) render_score::screen#4 (byte*) render_score::screen#5 (byte*) render_score::screen#6 (byte*) render_score::screen#7 (byte*) render_score::screen#8
Alias (word) lines_bcd#10 = (word) lines_bcd#35 (word) lines_bcd#47 (word) lines_bcd#21 (word) lines_bcd#11
Alias (byte) level_bcd#13 = (byte) level_bcd#69 (byte) level_bcd#79 (byte) level_bcd#57 (byte) level_bcd#42 (byte) level_bcd#26
Alias (word) render_bcd::offset#1 = (word/signed dword/dword~) render_score::$6
Alias (word) render_bcd::offset#2 = (word/signed dword/dword~) render_score::$8
Alias (word) render_score::lines_offset#0 = (byte/signed word/word/dword/signed dword/signed byte~) render_score::$11 (word) render_score::lines_offset#1
Alias (byte) render_bcd::bcd#3 = (byte~) render_score::$12
Alias (word) render_bcd::offset#4 = (word/signed dword/dword~) render_score::$14
Alias (byte) render_bcd::bcd#4 = (byte~) render_score::$15
Alias (word) render_score::level_offset#0 = (word/signed dword/dword/signed word~) render_score::$18
Alias (byte*) render_bcd::screen_pos#0 = (byte*~) render_bcd::$0 (byte*) render_bcd::screen_pos#4
Alias (byte) render_bcd::bcd#7 = (byte) render_bcd::bcd#8
Alias (byte*) render_screen_original::oscr#0 = (byte*~) render_screen_original::$1
Alias (byte*) render_screen_original::ocols#0 = (byte*~) render_screen_original::$3
Alias (byte) render_screen_original::y#2 = (byte) render_screen_original::y#3
Alias (byte*) render_screen_original::screen#10 = (byte*) render_screen_original::screen#4
Alias (byte*) render_screen_original::cols#3 = (byte*) render_screen_original::cols#8
Alias (byte*) render_screen_original::oscr#5 = (byte*) render_screen_original::oscr#6
Alias (byte*) render_screen_original::ocols#5 = (byte*) render_screen_original::ocols#6
Alias (byte) render_playfield::i#0 = (byte/signed word/word/dword/signed dword~) render_playfield::$0
Alias (byte) render_playfield::l#3 = (byte) render_playfield::l#4
Alias (byte) render_screen_render#23 = (byte) render_screen_render#32
Alias (byte) render_playfield::i#1 = (byte) render_playfield::i#4
Alias (byte) render_moving::ypos2#0 = (byte/signed word/word/dword/signed dword~) render_moving::$0
Alias (byte) render_screen_render#14 = (byte) render_screen_render#24 (byte) render_screen_render#42
Alias (byte) render_moving::ypos2#2 = (byte) render_moving::ypos2#3 (byte) render_moving::ypos2#6
Alias (byte) current_xpos#16 = (byte) current_xpos#36 (byte) current_xpos#82
Alias (byte*) current_piece_gfx#29 = (byte*) current_piece_gfx#46 (byte*) current_piece_gfx#83
Alias (byte) render_moving::i#3 = (byte) render_moving::i#6 (byte) render_moving::i#5
Alias (byte) current_piece_char#37 = (byte) current_piece_char#52 (byte) current_piece_char#85
Alias (byte) render_moving::l#4 = (byte) render_moving::l#8 (byte) render_moving::l#5
Alias (byte) current_piece_char#12 = (byte) current_piece_char#24
Alias (byte*) render_moving::screen_line#1 = (byte*) render_moving::screen_line#2
Alias (byte) render_moving::xpos#3 = (byte) render_moving::xpos#4
Alias (byte) render_moving::c#3 = (byte) render_moving::c#4
Alias (byte) render_moving::ypos2#7 = (byte) render_moving::ypos2#8
Alias (byte) render_moving::l#6 = (byte) render_moving::l#7
Alias (byte*) current_piece_gfx#15 = (byte*) current_piece_gfx#47
Alias (byte) render_moving::i#2 = (byte) render_moving::i#9
Alias (byte) render_screen_render#46 = (byte) render_screen_render#47
Alias (byte) current_xpos#98 = (byte) current_xpos#99
Alias (word) render_next::next_area_offset#0 = (word/signed dword/dword/signed word~) render_next::$2 (word) render_next::next_area_offset#1 (word) render_next::next_area_offset#2
Alias (byte) next_piece_idx#24 = (byte) next_piece_idx#36 (byte) next_piece_idx#25
Alias (byte*) render_next::screen_next_area#1 = (byte*~) render_next::$6
Alias (byte*) render_next::screen_next_area#2 = (byte*~) render_next::$5
Alias (byte) render_next::next_piece_char#1 = (byte) render_next::next_piece_char#2 (byte) render_next::next_piece_char#6
Alias (byte*) render_next::screen_next_area#5 = (byte*) render_next::screen_next_area#9 (byte*) render_next::screen_next_area#6
Alias (byte) render_next::c#3 = (byte) render_next::c#5 (byte) render_next::c#4
Alias (byte*) render_next::next_piece_gfx#1 = (byte*) render_next::next_piece_gfx#6 (byte*) render_next::next_piece_gfx#7
Alias (byte) render_next::l#4 = (byte) render_next::l#6 (byte) render_next::l#5
Alias (byte*) render_next::screen_next_area#3 = (byte*) render_next::screen_next_area#8
Alias (byte) render_next::l#2 = (byte) render_next::l#3
Alias (byte*) render_next::next_piece_gfx#4 = (byte*) render_next::next_piece_gfx#5
Alias (byte) render_next::next_piece_char#4 = (byte) render_next::next_piece_char#5
Alias (byte) render_screen_show#0 = (byte) render_screen_show#60 (byte) render_screen_show#57 (byte) render_screen_show#54 (byte) render_screen_show#48 (byte) render_screen_show#43 (byte) render_screen_show#35 (byte) render_screen_show#32 (byte) render_screen_show#24
Alias (byte) render_screen_render#0 = (byte) render_screen_render#62 (byte) render_screen_render#60 (byte) render_screen_render#57 (byte) render_screen_render#52 (byte) render_screen_render#48 (byte) render_screen_render#43 (byte) render_screen_render#40 (byte) render_screen_render#29
Alias (byte) current_piece_char#0 = (byte) current_piece_char#104 (byte) current_piece_char#101 (byte) current_piece_char#94 (byte) current_piece_char#86 (byte) current_piece_char#70 (byte) current_piece_char#58 (byte) current_piece_char#51 (byte) current_piece_char#36
Alias (byte*) current_piece_gfx#0 = (byte*) current_piece_gfx#116 (byte*) current_piece_gfx#113 (byte*) current_piece_gfx#107 (byte*) current_piece_gfx#98 (byte*) current_piece_gfx#84 (byte*) current_piece_gfx#72 (byte*) current_piece_gfx#63 (byte*) current_piece_gfx#45
Alias (byte) current_xpos#0 = (byte) current_xpos#126 (byte) current_xpos#123 (byte) current_xpos#119 (byte) current_xpos#111 (byte) current_xpos#100 (byte) current_xpos#88 (byte) current_xpos#78 (byte) current_xpos#58
Alias (byte) current_ypos#0 = (byte) current_ypos#102 (byte) current_ypos#99 (byte) current_ypos#95 (byte) current_ypos#87 (byte) current_ypos#77 (byte) current_ypos#69 (byte) current_ypos#64 (byte) current_ypos#49
Alias (byte) game_over#0 = (byte) game_over#90 (byte) game_over#88 (byte) game_over#82 (byte) game_over#72 (byte) game_over#59 (byte) game_over#51 (byte) game_over#45 (byte) game_over#34
Alias (byte) render_screen_showing#0 = (byte) render_screen_showing#45 (byte) render_screen_showing#42 (byte) render_screen_showing#38 (byte) render_screen_showing#32 (byte) render_screen_showing#27 (byte) render_screen_showing#21 (byte) render_screen_showing#20 (byte) render_screen_showing#14
Alias (word) lines_bcd#0 = (word) lines_bcd#88 (word) lines_bcd#83 (word) lines_bcd#77 (word) lines_bcd#70 (word) lines_bcd#60 (word) lines_bcd#53 (word) lines_bcd#46 (word) lines_bcd#34
Alias (dword) score_bcd#0 = (dword) score_bcd#84 (dword) score_bcd#80 (dword) score_bcd#74 (dword) score_bcd#67 (dword) score_bcd#58 (dword) score_bcd#53 (dword) score_bcd#46 (dword) score_bcd#34
Alias (byte) level#0 = (byte) level#109 (byte) level#103 (byte) level#96 (byte) level#87 (byte) level#74 (byte) level#66 (byte) level#57 (byte) level#41
Alias (byte) level_bcd#0 = (byte) level_bcd#101 (byte) level_bcd#96 (byte) level_bcd#89 (byte) level_bcd#80 (byte) level_bcd#70 (byte) level_bcd#63 (byte) level_bcd#56 (byte) level_bcd#41
Alias (byte) sprites_init::xpos#0 = (byte/signed word/word/dword/signed dword/signed byte~) sprites_init::$1
Alias (byte) sprites_init::s2#0 = (byte/signed word/word/dword/signed dword~) sprites_init::$2
Alias (byte) sprites_init::xpos#1 = (byte/signed word/word/dword/signed dword~) sprites_init::$3
Alias (byte*) PLAYFIELD_SPRITES#0 = (byte*) toSpritePtr1_sprite#0 (byte*) toSpritePtr1_sprite#1
Alias (byte) toSpritePtr1_return#0 = (byte) toSpritePtr1_$2#0 (byte) toSpritePtr1_return#2 (byte) toSpritePtr1_return#1 (byte) toSpritePtr1_return#3 (byte~) $6
Alias (byte) irq_sprite_ptr#15 = (byte) irq_sprite_ptr#5 (byte) irq_sprite_ptr#9 (byte) irq_sprite_ptr#16
Alias (byte) render_screen_showing#11 = (byte) render_screen_showing#7
Alias (byte) irq_cnt#10 = (byte) irq_cnt#13 (byte) irq_cnt#7 (byte) irq_cnt#8
Alias (byte) irq_raster_next#14 = (byte) irq_raster_next#18 (byte) irq_raster_next#21 (byte) irq_raster_next#15
Alias (byte) irq_sprite_ypos#15 = (byte) irq_sprite_ypos#19 (byte) irq_sprite_ypos#23 (byte) irq_sprite_ypos#16
Alias (byte) sprites_irq::ptr#0 = (byte) sprites_irq::ptr#5 (byte) sprites_irq::ptr#6
Alias (byte) irq_raster_next#11 = (byte) irq_raster_next#6 (byte) irq_raster_next#12 (byte) irq_raster_next#7
Alias (byte) irq_cnt#1 = (byte) irq_cnt#18 (byte) irq_cnt#16 (byte) irq_cnt#14 (byte) irq_cnt#11 (byte) irq_cnt#5 (byte) irq_cnt#12
Alias (byte*) sprites_irq::toSpritePtr2_sprite#0 = (byte*) sprites_irq::toSpritePtr2_sprite#1
Alias (byte) irq_raster_next#1 = (byte) irq_raster_next#19 (byte) irq_raster_next#16 (byte) irq_raster_next#13
Alias (byte) irq_sprite_ypos#1 = (byte) irq_sprite_ypos#20 (byte) irq_sprite_ypos#17 (byte) irq_sprite_ypos#13
Alias (byte) irq_sprite_ypos#10 = (byte) irq_sprite_ypos#12 (byte) irq_sprite_ypos#6 (byte) irq_sprite_ypos#7
Alias (byte) irq_sprite_ptr#10 = (byte) irq_sprite_ptr#13 (byte) irq_sprite_ptr#6 (byte) irq_sprite_ptr#7
Alias (byte) irq_cnt#3 = (byte) irq_cnt#6 (byte) irq_cnt#9
Alias (byte) irq_raster_next#4 = (byte) irq_raster_next#9 (byte) irq_raster_next#8
Alias (byte) irq_sprite_ypos#11 = (byte) irq_sprite_ypos#8 (byte) irq_sprite_ypos#4
Alias (byte) irq_sprite_ptr#11 = (byte) irq_sprite_ptr#8 (byte) irq_sprite_ptr#4
Alias (byte) irq_cnt#0 = (byte) irq_cnt#20 (byte) irq_cnt#19 (byte) irq_cnt#17
Alias (byte) level#13 = (byte) level#28
Alias (byte) play_init::b4#0 = (byte/signed word/word/dword/signed dword~) play_init::$4
Alias (byte) current_movedown_slow#16 = (byte) current_movedown_slow#29 (byte) current_movedown_slow#2
Alias (byte) play_move_down::return#0 = (byte) play_move_down::return#4
Alias (byte) play_movement::render#0 = (byte) play_movement::render#4
Alias (byte) play_movement::key_event#1 = (byte) play_movement::key_event#4 (byte) play_movement::key_event#2 (byte) play_movement::key_event#3
Alias (byte) current_movedown_counter#1 = (byte) current_movedown_counter#9 (byte) current_movedown_counter#36 (byte) current_movedown_counter#28 (byte) current_movedown_counter#20 (byte) current_movedown_counter#19
Alias (byte) current_ypos#1 = (byte) current_ypos#14 (byte) current_ypos#54 (byte) current_ypos#50 (byte) current_ypos#34 (byte) current_ypos#33
Alias (word) lines_bcd#1 = (word) lines_bcd#12 (word) lines_bcd#48 (word) lines_bcd#36 (word) lines_bcd#24 (word) lines_bcd#23
Alias (dword) score_bcd#1 = (dword) score_bcd#11 (dword) score_bcd#48 (dword) score_bcd#36 (dword) score_bcd#24 (dword) score_bcd#23
Alias (byte) level#1 = (byte) level#14 (byte) level#61 (byte) level#45 (byte) level#31 (byte) level#30
Alias (byte) current_movedown_slow#17 = (byte) current_movedown_slow#3 (byte) current_movedown_slow#63 (byte) current_movedown_slow#47 (byte) current_movedown_slow#32 (byte) current_movedown_slow#31
Alias (byte) level_bcd#1 = (byte) level_bcd#14 (byte) level_bcd#58 (byte) level_bcd#43 (byte) level_bcd#29 (byte) level_bcd#28
Alias (byte*) current_piece#1 = (byte*) current_piece#12 (byte*) current_piece#55 (byte*) current_piece#40 (byte*) current_piece#26 (byte*) current_piece#25
Alias (byte) current_piece_char#1 = (byte) current_piece_char#13 (byte) current_piece_char#53 (byte) current_piece_char#39 (byte) current_piece_char#27 (byte) current_piece_char#26
Alias (byte) current_orientation#1 = (byte) current_orientation#15 (byte) current_orientation#50 (byte) current_orientation#33 (byte) current_orientation#34
Alias (byte*) current_piece_gfx#1 = (byte*) current_piece_gfx#16 (byte*) current_piece_gfx#48 (byte*) current_piece_gfx#32 (byte*) current_piece_gfx#33
Alias (byte) current_xpos#1 = (byte) current_xpos#17 (byte) current_xpos#38 (byte) current_xpos#39
Alias (byte) game_over#1 = (byte) game_over#12 (byte) game_over#46 (byte) game_over#35 (byte) game_over#25 (byte) game_over#24
Alias (byte) next_piece_idx#1 = (byte) next_piece_idx#13 (byte) next_piece_idx#49 (byte) next_piece_idx#37 (byte) next_piece_idx#28 (byte) next_piece_idx#27
Alias (byte) play_movement::render#1 = (byte) play_movement::render#8 (byte) play_movement::render#5 (byte) play_movement::render#7 (byte) play_movement::return#1
Alias (byte) play_move_leftright::return#0 = (byte) play_move_leftright::return#5
Alias (byte) current_xpos#18 = (byte) current_xpos#2 (byte) current_xpos#40
Alias (byte) play_move_rotate::return#0 = (byte) play_move_rotate::return#5
Alias (byte) play_movement::render#2 = (byte) play_movement::render#6
Alias (byte) current_orientation#16 = (byte) current_orientation#2
Alias (byte*) current_piece_gfx#17 = (byte*) current_piece_gfx#2
Alias (byte) play_movement::return#0 = (byte) play_movement::render#3
Alias (byte) play_movement::return#2 = (byte) play_movement::return#4
Alias (byte) current_movedown_counter#10 = (byte) current_movedown_counter#2
Alias (byte) current_ypos#15 = (byte) current_ypos#2
Alias (word) lines_bcd#13 = (word) lines_bcd#2
Alias (dword) score_bcd#12 = (dword) score_bcd#2
Alias (byte) level#15 = (byte) level#2
Alias (byte) current_movedown_slow#18 = (byte) current_movedown_slow#4
Alias (byte) level_bcd#15 = (byte) level_bcd#2
Alias (byte*) current_piece#13 = (byte*) current_piece#2
Alias (byte) current_piece_char#14 = (byte) current_piece_char#2
Alias (byte) current_orientation#17 = (byte) current_orientation#3
Alias (byte*) current_piece_gfx#18 = (byte*) current_piece_gfx#3
Alias (byte) current_xpos#19 = (byte) current_xpos#3
Alias (byte) game_over#13 = (byte) game_over#2
Alias (byte) next_piece_idx#14 = (byte) next_piece_idx#2
Alias (byte) keyboard_event_pressed::return#12 = (byte) keyboard_event_pressed::return#6
Alias (byte) current_movedown_counter#13 = (byte) current_movedown_counter#22 (byte) current_movedown_counter#29 (byte) current_movedown_counter#21 (byte) current_movedown_counter#23
Alias (byte) current_movedown_slow#33 = (byte) current_movedown_slow#34 (byte) current_movedown_slow#48 (byte) current_movedown_slow#49 (byte) current_movedown_slow#35
Alias (byte) play_move_down::movedown#10 = (byte) play_move_down::movedown#11 (byte) play_move_down::movedown#12 (byte) play_move_down::movedown#8 (byte) play_move_down::movedown#5
Alias (byte) current_ypos#65 = (byte) current_ypos#66 (byte) current_ypos#78 (byte) current_ypos#79 (byte) current_ypos#67
Alias (byte) current_xpos#101 = (byte) current_xpos#84 (byte) current_xpos#102 (byte) current_xpos#83 (byte) current_xpos#85
Alias (byte) current_orientation#63 = (byte) current_orientation#64 (byte) current_orientation#76 (byte) current_orientation#77 (byte) current_orientation#65
Alias (word) lines_bcd#61 = (word) lines_bcd#62 (word) lines_bcd#71 (word) lines_bcd#72 (word) lines_bcd#63
Alias (dword) score_bcd#59 = (dword) score_bcd#60 (dword) score_bcd#68 (dword) score_bcd#69 (dword) score_bcd#61
Alias (byte) level#75 = (byte) level#76 (byte) level#88 (byte) level#89 (byte) level#77
Alias (byte) level_bcd#71 = (byte) level_bcd#72 (byte) level_bcd#81 (byte) level_bcd#82 (byte) level_bcd#73
Alias (byte*) current_piece#69 = (byte*) current_piece#70 (byte*) current_piece#81 (byte*) current_piece#82 (byte*) current_piece#71
Alias (byte) current_piece_char#71 = (byte) current_piece_char#72 (byte) current_piece_char#87 (byte) current_piece_char#88 (byte) current_piece_char#73
Alias (byte*) current_piece_gfx#100 = (byte*) current_piece_gfx#86 (byte*) current_piece_gfx#99 (byte*) current_piece_gfx#85 (byte*) current_piece_gfx#87
Alias (byte) game_over#60 = (byte) game_over#61 (byte) game_over#73 (byte) game_over#74 (byte) game_over#62
Alias (byte) next_piece_idx#58 = (byte) next_piece_idx#59 (byte) next_piece_idx#69 (byte) next_piece_idx#70 (byte) next_piece_idx#60
Alias (byte) play_move_down::movedown#0 = (byte) play_move_down::movedown#4
Alias (byte) current_movedown_counter#3 = (byte) current_movedown_counter#37
Alias (byte) current_movedown_slow#64 = (byte) current_movedown_slow#65
Alias (byte) current_ypos#88 = (byte) current_ypos#89
Alias (byte) current_xpos#112 = (byte) current_xpos#113
Alias (byte) current_orientation#87 = (byte) current_orientation#88
Alias (word) lines_bcd#78 = (word) lines_bcd#79
Alias (dword) score_bcd#75 = (dword) score_bcd#76
Alias (byte) level#97 = (byte) level#98
Alias (byte) level_bcd#90 = (byte) level_bcd#91
Alias (byte*) current_piece#88 = (byte*) current_piece#89
Alias (byte) current_piece_char#95 = (byte) current_piece_char#96
Alias (byte*) current_piece_gfx#108 = (byte*) current_piece_gfx#109
Alias (byte) game_over#83 = (byte) game_over#84
Alias (byte) next_piece_idx#75 = (byte) next_piece_idx#76
Alias (byte) play_move_down::movedown#7 = (byte) play_move_down::movedown#9
Alias (byte) current_ypos#51 = (byte) current_ypos#52
Alias (byte) current_xpos#61 = (byte) current_xpos#62
Alias (byte) current_orientation#51 = (byte) current_orientation#52
Alias (byte) current_movedown_counter#12 = (byte) current_movedown_counter#38
Alias (word) lines_bcd#49 = (word) lines_bcd#50
Alias (dword) score_bcd#49 = (dword) score_bcd#50
Alias (byte) level#62 = (byte) level#63
Alias (byte) current_movedown_slow#19 = (byte) current_movedown_slow#66
Alias (byte) level_bcd#59 = (byte) level_bcd#60
Alias (byte*) current_piece#56 = (byte*) current_piece#57
Alias (byte) current_piece_char#54 = (byte) current_piece_char#55
Alias (byte*) current_piece_gfx#66 = (byte*) current_piece_gfx#67
Alias (byte) game_over#47 = (byte) game_over#48
Alias (byte) next_piece_idx#50 = (byte) next_piece_idx#51
Alias (byte) current_movedown_counter#24 = (byte) current_movedown_counter#30
Alias (byte) current_ypos#16 = (byte) current_ypos#39 (byte) current_ypos#35 (byte) current_ypos#36 (byte) current_ypos#17 (byte) current_ypos#44 (byte) current_ypos#68 (byte) current_ypos#53 (byte) current_ypos#37
Alias (word) lines_bcd#25 = (word) lines_bcd#27 (word) lines_bcd#37 (word) lines_bcd#64 (word) lines_bcd#51 (word) lines_bcd#39 (word) lines_bcd#52 (word) lines_bcd#38
Alias (dword) score_bcd#25 = (dword) score_bcd#27 (dword) score_bcd#37 (dword) score_bcd#62 (dword) score_bcd#51 (dword) score_bcd#39 (dword) score_bcd#52 (dword) score_bcd#38
Alias (byte) level#32 = (byte) level#34 (byte) level#46 (byte) level#78 (byte) level#64 (byte) level#48 (byte) level#65 (byte) level#47
Alias (byte) current_movedown_slow#36 = (byte) current_movedown_slow#38 (byte) current_movedown_slow#50 (byte) current_movedown_slow#75 (byte) current_movedown_slow#67 (byte) current_movedown_slow#52 (byte) current_movedown_slow#68 (byte) current_movedown_slow#51
Alias (byte) level_bcd#30 = (byte) level_bcd#32 (byte) level_bcd#44 (byte) level_bcd#74 (byte) level_bcd#61 (byte) level_bcd#46 (byte) level_bcd#62 (byte) level_bcd#45
Alias (byte*) current_piece#27 = (byte*) current_piece#29 (byte*) current_piece#41 (byte*) current_piece#31 (byte*) current_piece#58 (byte*) current_piece#43 (byte*) current_piece#72 (byte*) current_piece#59 (byte*) current_piece#42
Alias (byte) current_piece_char#28 = (byte) current_piece_char#30 (byte) current_piece_char#40 (byte) current_piece_char#74 (byte) current_piece_char#56 (byte) current_piece_char#42 (byte) current_piece_char#75 (byte) current_piece_char#57 (byte) current_piece_char#41
Alias (byte) current_orientation#18 = (byte) current_orientation#38 (byte) current_orientation#35 (byte) current_orientation#66 (byte) current_orientation#54 (byte) current_orientation#78 (byte) current_orientation#67 (byte) current_orientation#53 (byte) current_orientation#36
Alias (byte*) current_piece_gfx#34 = (byte*) current_piece_gfx#36 (byte*) current_piece_gfx#49 (byte*) current_piece_gfx#88 (byte*) current_piece_gfx#68 (byte*) current_piece_gfx#51 (byte*) current_piece_gfx#73 (byte*) current_piece_gfx#69 (byte*) current_piece_gfx#50
Alias (byte) current_xpos#20 = (byte) current_xpos#44 (byte) current_xpos#41 (byte) current_xpos#86 (byte) current_xpos#64 (byte) current_xpos#70 (byte) current_xpos#87 (byte) current_xpos#63 (byte) current_xpos#42
Alias (byte) game_over#26 = (byte) game_over#28 (byte) game_over#36 (byte) game_over#63 (byte) game_over#49 (byte) game_over#38 (byte) game_over#64 (byte) game_over#50 (byte) game_over#37
Alias (byte) next_piece_idx#29 = (byte) next_piece_idx#31 (byte) next_piece_idx#38 (byte) next_piece_idx#61 (byte) next_piece_idx#52 (byte) next_piece_idx#40 (byte) next_piece_idx#62 (byte) next_piece_idx#53 (byte) next_piece_idx#39
Alias (byte) play_collision::ypos#0 = (byte/signed word/word/dword/signed dword~) play_move_down::$11
Alias (byte) play_collision::return#0 = (byte) play_collision::return#11
Alias (byte) play_remove_lines::return#0 = (byte) play_remove_lines::return#3
Alias (byte) play_move_down::removed#0 = (byte~) play_move_down::$15
Alias (word) lines_bcd#14 = (word) lines_bcd#3 (word) lines_bcd#40
Alias (dword) score_bcd#13 = (dword) score_bcd#3 (dword) score_bcd#40
Alias (byte) level#16 = (byte) level#3 (byte) level#49
Alias (byte) current_movedown_slow#20 = (byte) current_movedown_slow#5 (byte) current_movedown_slow#53
Alias (byte) level_bcd#16 = (byte) level_bcd#3 (byte) level_bcd#47
Alias (byte*) current_piece#14 = (byte*) current_piece#3
Alias (byte) current_piece_char#15 = (byte) current_piece_char#3
Alias (byte) current_orientation#19 = (byte) current_orientation#4
Alias (byte*) current_piece_gfx#19 = (byte*) current_piece_gfx#4
Alias (byte) current_xpos#21 = (byte) current_xpos#4
Alias (byte) current_ypos#18 = (byte) current_ypos#4
Alias (byte) game_over#14 = (byte) game_over#3
Alias (byte) next_piece_idx#15 = (byte) next_piece_idx#3
Alias (byte) play_move_down::return#3 = (byte) play_move_down::return#5
Alias (byte) current_movedown_counter#14 = (byte) current_movedown_counter#5
Alias (byte) current_ypos#19 = (byte) current_ypos#5
Alias (word) lines_bcd#15 = (word) lines_bcd#4
Alias (dword) score_bcd#14 = (dword) score_bcd#4
Alias (byte) level#17 = (byte) level#4
Alias (byte) current_movedown_slow#21 = (byte) current_movedown_slow#6
Alias (byte) level_bcd#17 = (byte) level_bcd#4
Alias (byte*) current_piece#15 = (byte*) current_piece#4
Alias (byte) current_piece_char#16 = (byte) current_piece_char#4
Alias (byte) current_orientation#20 = (byte) current_orientation#5
Alias (byte*) current_piece_gfx#20 = (byte*) current_piece_gfx#5
Alias (byte) current_xpos#22 = (byte) current_xpos#5
Alias (byte) game_over#15 = (byte) game_over#4
Alias (byte) next_piece_idx#16 = (byte) next_piece_idx#4
Alias (byte) current_xpos#23 = (byte) current_xpos#45 (byte) current_xpos#49 (byte) current_xpos#46 (byte) current_xpos#67 (byte) current_xpos#24 (byte) current_xpos#47 (byte) current_xpos#65 (byte) current_xpos#25 (byte) current_xpos#66 (byte) current_xpos#27
Alias (byte) current_ypos#20 = (byte) current_ypos#40 (byte) current_ypos#41 (byte) current_ypos#21
Alias (byte) current_orientation#21 = (byte) current_orientation#39 (byte) current_orientation#40 (byte) current_orientation#22
Alias (byte*) current_piece#32 = (byte*) current_piece#44 (byte*) current_piece#45 (byte*) current_piece#33
Alias (byte) play_collision::xpos#1 = (byte/signed word/word/dword/signed dword~) play_move_leftright::$7
Alias (byte) play_collision::return#1 = (byte) play_collision::return#12
Alias (byte) play_move_leftright::key_event#1 = (byte) play_move_leftright::key_event#2
Alias (byte) play_collision::xpos#2 = (byte/signed word/word/dword/signed dword~) play_move_leftright::$3
Alias (byte) play_collision::return#13 = (byte) play_collision::return#2
Alias (byte) play_move_leftright::return#2 = (byte) play_move_leftright::return#6
Alias (byte) current_xpos#26 = (byte) current_xpos#7
Alias (byte) current_orientation#23 = (byte) current_orientation#41 (byte) current_orientation#42 (byte) current_orientation#24 (byte) current_orientation#44
Alias (byte) current_xpos#50 = (byte) current_xpos#68 (byte) current_xpos#69 (byte) current_xpos#51
Alias (byte) current_ypos#42 = (byte) current_ypos#55 (byte) current_ypos#56 (byte) current_ypos#43
Alias (byte*) current_piece#46 = (byte*) current_piece#60 (byte*) current_piece#61 (byte*) current_piece#47
Alias (byte*) current_piece_gfx#38 = (byte*) current_piece_gfx#89 (byte*) current_piece_gfx#70 (byte*) current_piece_gfx#52 (byte*) current_piece_gfx#90
Alias (byte) play_move_rotate::orientation#1 = (byte/word/dword~) play_move_rotate::$8
Alias (byte) play_move_rotate::key_event#1 = (byte) play_move_rotate::key_event#2
Alias (byte) play_move_rotate::orientation#2 = (byte/word/dword~) play_move_rotate::$6
Alias (byte) play_move_rotate::return#2 = (byte) play_move_rotate::return#6
Alias (byte) current_orientation#25 = (byte) current_orientation#6
Alias (byte*) current_piece_gfx#21 = (byte*) current_piece_gfx#6
Alias (byte) play_collision::return#14 = (byte) play_collision::return#3
Alias (byte) play_move_rotate::orientation#3 = (byte) play_move_rotate::orientation#5 (byte) play_move_rotate::orientation#4
Alias (byte*) current_piece#16 = (byte*) current_piece#30 (byte*) current_piece#34
Alias (byte) current_orientation#43 = (byte) current_orientation#55 (byte) current_orientation#68
Alias (byte*) current_piece_gfx#37 = (byte*) current_piece_gfx#53 (byte*) current_piece_gfx#71
Alias (byte*) current_piece_gfx#7 = (byte*~) play_move_rotate::$9
Alias (byte) current_movedown_slow#0 = (byte) current_movedown_slow#62 (byte) current_movedown_slow#46
Alias (byte*) current_piece#0 = (byte*) current_piece#54 (byte*) current_piece#39
Alias (byte) current_orientation#0 = (byte) current_orientation#62 (byte) current_orientation#49
Alias (byte) next_piece_idx#0 = (byte) next_piece_idx#46 (byte) next_piece_idx#35
Alias (byte) current_movedown_counter#0 = (byte) current_movedown_counter#35 (byte) current_movedown_counter#27
Alias (byte*) play_collision::piece_gfx#0 = (byte*~) play_collision::$0
Alias (byte) play_collision::ypos2#0 = (byte/signed word/word/dword/signed dword~) play_collision::$1
Alias (byte) play_collision::col#0 = (byte) play_collision::xpos#5
Alias (byte) play_collision::ypos2#10 = (byte) play_collision::ypos2#3 (byte) play_collision::ypos2#5 (byte) play_collision::ypos2#9 (byte) play_collision::ypos2#8 (byte) play_collision::ypos2#7
Alias (byte) play_collision::col#3 = (byte) play_collision::col#8 (byte) play_collision::col#6 (byte) play_collision::col#4 (byte) play_collision::col#5 (byte) play_collision::col#7
Alias (byte*) play_collision::playfield_line#1 = (byte*) play_collision::playfield_line#4 (byte*) play_collision::playfield_line#5 (byte*) play_collision::playfield_line#3 (byte*) play_collision::playfield_line#2 (byte*) play_collision::playfield_line#7
Alias (byte) play_collision::c#3 = (byte) play_collision::c#8 (byte) play_collision::c#7 (byte) play_collision::c#6 (byte) play_collision::c#5 (byte) play_collision::c#4
Alias (byte*) play_collision::piece_gfx#1 = (byte*) play_collision::piece_gfx#9 (byte*) play_collision::piece_gfx#8 (byte*) play_collision::piece_gfx#7 (byte*) play_collision::piece_gfx#6 (byte*) play_collision::piece_gfx#5
Alias (byte) play_collision::i#1 = (byte) play_collision::i#10 (byte) play_collision::i#9 (byte) play_collision::i#8 (byte) play_collision::i#7 (byte) play_collision::i#6
Alias (byte) play_collision::l#10 = (byte) play_collision::l#4 (byte) play_collision::l#9 (byte) play_collision::l#8 (byte) play_collision::l#7 (byte) play_collision::l#5
Alias (byte) play_collision::xpos#10 = (byte) play_collision::xpos#14 (byte) play_collision::xpos#9 (byte) play_collision::xpos#13 (byte) play_collision::xpos#12 (byte) play_collision::xpos#11
Alias (byte) play_collision::return#15 = (byte) play_collision::return#5
Alias (byte) play_collision::ypos2#4 = (byte) play_collision::ypos2#6
Alias (byte) play_collision::l#2 = (byte) play_collision::l#3
Alias (byte) play_collision::xpos#7 = (byte) play_collision::xpos#8
Alias (byte*) play_collision::piece_gfx#3 = (byte*) play_collision::piece_gfx#4
Alias (byte) play_collision::i#4 = (byte) play_collision::i#5
Alias (byte) play_lock_current::ypos2#0 = (byte/signed word/word/dword/signed dword~) play_lock_current::$0
Alias (byte) current_piece_char#17 = (byte) current_piece_char#31
Alias (byte*) play_lock_current::playfield_line#1 = (byte*) play_lock_current::playfield_line#2
Alias (byte) play_lock_current::col#3 = (byte) play_lock_current::col#4
Alias (byte) play_lock_current::c#3 = (byte) play_lock_current::c#4
Alias (byte*) current_piece_gfx#22 = (byte*) current_piece_gfx#56
Alias (byte) play_lock_current::i#1 = (byte) play_lock_current::i#6
Alias (byte) play_lock_current::ypos2#5 = (byte) play_lock_current::ypos2#6
Alias (byte) play_lock_current::l#4 = (byte) play_lock_current::l#5
Alias (byte) current_xpos#89 = (byte) current_xpos#90
Alias (byte) play_lock_current::ypos2#3 = (byte) play_lock_current::ypos2#4
Alias (byte) play_lock_current::l#2 = (byte) play_lock_current::l#3
Alias (byte) current_xpos#53 = (byte) current_xpos#71
Alias (byte*) current_piece_gfx#40 = (byte*) current_piece_gfx#55
Alias (byte) play_lock_current::i#4 = (byte) play_lock_current::i#5
Alias (byte) current_piece_char#44 = (byte) current_piece_char#60
Alias (byte*) current_piece_gfx#8 = (byte*~) play_spawn_current::$1 (byte*) current_piece_gfx#91 (byte*) current_piece_gfx#92
Alias (byte) play_collision::return#10 = (byte) play_collision::return#16
Alias (byte*) current_piece#5 = (byte*) current_piece#73 (byte*) current_piece#74
Alias (byte) current_piece_char#5 = (byte) current_piece_char#76 (byte) current_piece_char#77
Alias (byte) current_orientation#79 = (byte) current_orientation#8 (byte) current_orientation#80
Alias (byte) current_xpos#103 = (byte) current_xpos#9 (byte) current_xpos#104
Alias (byte) current_ypos#6 = (byte) current_ypos#80 (byte) current_ypos#81
Alias (byte) game_over#65 = (byte) game_over#75
Alias (byte*) current_piece#18 = (byte*) current_piece#90 (byte*) current_piece#48 (byte*) current_piece#83 (byte*) current_piece#75 (byte*) current_piece#63 (byte*) current_piece#35 (byte*) current_piece#6
Alias (byte) current_piece_char#18 = (byte) current_piece_char#97 (byte) current_piece_char#45 (byte) current_piece_char#89 (byte) current_piece_char#78 (byte) current_piece_char#62 (byte) current_piece_char#32 (byte) current_piece_char#6
Alias (byte) current_orientation#26 = (byte) current_orientation#94 (byte) current_orientation#56 (byte) current_orientation#89 (byte) current_orientation#81 (byte) current_orientation#70 (byte) current_orientation#45 (byte) current_orientation#9
Alias (byte*) current_piece_gfx#101 = (byte*) current_piece_gfx#110 (byte*) current_piece_gfx#57 (byte*) current_piece_gfx#93 (byte*) current_piece_gfx#75 (byte*) current_piece_gfx#41 (byte*) current_piece_gfx#23 (byte*) current_piece_gfx#9
Alias (byte) current_xpos#10 = (byte) current_xpos#120 (byte) current_xpos#72 (byte) current_xpos#114 (byte) current_xpos#105 (byte) current_xpos#92 (byte) current_xpos#54 (byte) current_xpos#30
Alias (byte) current_ypos#24 = (byte) current_ypos#96 (byte) current_ypos#57 (byte) current_ypos#90 (byte) current_ypos#82 (byte) current_ypos#71 (byte) current_ypos#45 (byte) current_ypos#7
Alias (byte) game_over#16 = (byte) game_over#85 (byte) game_over#39 (byte) game_over#76 (byte) game_over#66 (byte) game_over#53 (byte) game_over#29 (byte) game_over#6
Alias (byte) play_spawn_current::sid_rnd1_return#0 = (byte) play_spawn_current::sid_rnd1_return#2 (byte) play_spawn_current::sid_rnd1_return#1 (byte) play_spawn_current::sid_rnd1_return#3 (byte~) play_spawn_current::$6
Alias (byte) play_spawn_current::piece_idx#1 = (byte~) play_spawn_current::$7
Alias (byte) play_spawn_current::piece_idx#2 = (byte) play_spawn_current::piece_idx#3
Alias (byte) next_piece_idx#18 = (byte) next_piece_idx#5 (byte) next_piece_idx#6
Alias (byte) play_remove_lines::r#0 = (byte/signed word/word/dword/signed dword~) play_remove_lines::$1
Alias (byte) play_remove_lines::w#0 = (byte/signed word/word/dword/signed dword~) play_remove_lines::$3
Alias (byte) play_remove_lines::c#0 = (byte) play_remove_lines::c#2
Alias (byte) play_remove_lines::w#8 = (byte) play_remove_lines::w#9
Alias (byte) play_remove_lines::x#3 = (byte) play_remove_lines::x#4
Alias (byte) play_remove_lines::r#1 = (byte) play_remove_lines::r#6
Alias (byte) play_remove_lines::y#6 = (byte) play_remove_lines::y#7
Alias (byte) play_remove_lines::removed#10 = (byte) play_remove_lines::removed#9
Alias (byte) play_remove_lines::full#2 = (byte) play_remove_lines::full#3
Alias (byte) play_remove_lines::y#3 = (byte) play_remove_lines::y#5 (byte) play_remove_lines::y#4
Alias (byte) play_remove_lines::w#1 = (byte) play_remove_lines::w#10 (byte) play_remove_lines::w#5
Alias (byte) play_remove_lines::removed#2 = (byte) play_remove_lines::removed#4 (byte) play_remove_lines::removed#6
Alias (byte) play_remove_lines::r#4 = (byte) play_remove_lines::r#7 (byte) play_remove_lines::r#8
Alias (byte) play_remove_lines::w#2 = (byte~) play_remove_lines::$11
Alias (byte) play_remove_lines::w#6 = (byte) play_remove_lines::w#7
Alias (byte) play_remove_lines::removed#3 = (byte) play_remove_lines::removed#7 (byte) play_remove_lines::removed#5 (byte) play_remove_lines::return#1 (byte) play_remove_lines::return#4 (byte) play_remove_lines::return#2
Alias (word) lines_bcd#16 = (word) lines_bcd#29 (word) lines_bcd#28
Alias (dword) score_bcd#15 = (dword) score_bcd#29 (dword) score_bcd#28
Alias (byte) level#35 = (byte) level#36 (byte) level#50 (byte) level#51 (byte) level#37
Alias (byte) current_movedown_slow#39 = (byte) current_movedown_slow#40 (byte) current_movedown_slow#54 (byte) current_movedown_slow#55 (byte) current_movedown_slow#41
Alias (byte) level_bcd#33 = (byte) level_bcd#34 (byte) level_bcd#48 (byte) level_bcd#49 (byte) level_bcd#35
Alias (byte) play_update_score::removed#1 = (byte) play_update_score::removed#2
Alias (byte) play_update_score::lines_before#0 = (byte~) play_update_score::$3
Alias (byte) play_update_score::lines_after#0 = (byte~) play_update_score::$6
Alias (word) lines_bcd#30 = (word) lines_bcd#5 (word) lines_bcd#41 (word) lines_bcd#31
Alias (dword) score_bcd#30 = (dword) score_bcd#5 (dword) score_bcd#41 (dword) score_bcd#31
Alias (byte) level#18 = (byte) level#5
Alias (byte) current_movedown_slow#22 = (byte) current_movedown_slow#7
Alias (byte) level_bcd#18 = (byte) level_bcd#5
Alias (word) lines_bcd#17 = (word) lines_bcd#6
Alias (dword) score_bcd#16 = (dword) score_bcd#6
Alias (byte) level#19 = (byte) level#6
Alias (byte) current_movedown_slow#23 = (byte) current_movedown_slow#8
Alias (byte) level_bcd#19 = (byte) level_bcd#6
Alias (byte) level_bcd#36 = (byte) level_bcd#50 (byte) level_bcd#37
Alias (byte) level#21 = (byte) level#90 (byte) level#7
Alias (byte) level_bcd#21 = (byte) level_bcd#7
Alias (byte) level#79 = (byte) level#80
Alias (byte) current_movedown_slow#76 = (byte) current_movedown_slow#77
Alias (byte) play_increase_level::b4#0 = (byte/signed word/word/dword/signed dword~) play_increase_level::$4
Alias (byte) level#22 = (byte) level#38 (byte) level#52 (byte) level#8
Alias (byte) current_movedown_slow#11 = (byte) current_movedown_slow#42 (byte) current_movedown_slow#56 (byte) current_movedown_slow#24
Alias (byte) level_bcd#22 = (byte) level_bcd#38 (byte) level_bcd#51 (byte) level_bcd#9
Alias (byte) render_screen_show#22 = (byte) render_screen_show#27
Alias (byte) render_screen_render#27 = (byte) render_screen_render#35
Alias (byte) current_movedown_slow#43 = (byte) current_movedown_slow#78 (byte) current_movedown_slow#83 (byte) current_movedown_slow#70 (byte) current_movedown_slow#57
Alias (byte) next_piece_idx#32 = (byte) next_piece_idx#71 (byte) next_piece_idx#77 (byte) next_piece_idx#63 (byte) next_piece_idx#54 (byte) next_piece_idx#41
Alias (byte*) current_piece#36 = (byte*) current_piece#84 (byte*) current_piece#91 (byte*) current_piece#76 (byte*) current_piece#64 (byte*) current_piece#49
Alias (byte) current_piece_char#33 = (byte) current_piece_char#90 (byte) current_piece_char#98 (byte) current_piece_char#79 (byte) current_piece_char#63 (byte) current_piece_char#46
Alias (byte) current_orientation#46 = (byte) current_orientation#90 (byte) current_orientation#95 (byte) current_orientation#82 (byte) current_orientation#71 (byte) current_orientation#57
Alias (byte*) current_piece_gfx#102 = (byte*) current_piece_gfx#111 (byte*) current_piece_gfx#94 (byte*) current_piece_gfx#76 (byte*) current_piece_gfx#58 (byte*) current_piece_gfx#42
Alias (byte) current_xpos#106 = (byte) current_xpos#115 (byte) current_xpos#121 (byte) current_xpos#93 (byte) current_xpos#73 (byte) current_xpos#55
Alias (byte) current_ypos#46 = (byte) current_ypos#91 (byte) current_ypos#97 (byte) current_ypos#83 (byte) current_ypos#72 (byte) current_ypos#58
Alias (byte) game_over#30 = (byte) game_over#77 (byte) game_over#86 (byte) game_over#67 (byte) game_over#54 (byte) game_over#40
Alias (byte) level#100 = (byte) level#99 (byte) level#104 (byte) level#91 (byte) level#81 (byte) level#60 (byte) level#105 (byte) level#92 (byte) level#82 (byte) level#68 (byte) level#54
Alias (byte) render_screen_showing#17 = (byte) render_screen_showing#49 (byte) render_screen_showing#50 (byte) render_screen_showing#48 (byte) render_screen_showing#47 (byte) render_screen_showing#46 (byte) render_screen_showing#43 (byte) render_screen_showing#39 (byte) render_screen_showing#33 (byte) render_screen_showing#28 (byte) render_screen_showing#22
Alias (byte) keyboard_events_size#33 = (byte) keyboard_events_size#83 (byte) keyboard_events_size#84 (byte) keyboard_events_size#82 (byte) keyboard_events_size#80 (byte) keyboard_events_size#77 (byte) keyboard_events_size#72 (byte) keyboard_events_size#68 (byte) keyboard_events_size#59 (byte) keyboard_events_size#49 (byte) keyboard_events_size#41
Alias (byte) keyboard_modifiers#30 = (byte) keyboard_modifiers#64 (byte) keyboard_modifiers#65 (byte) keyboard_modifiers#63 (byte) keyboard_modifiers#61 (byte) keyboard_modifiers#59 (byte) keyboard_modifiers#56 (byte) keyboard_modifiers#53 (byte) keyboard_modifiers#47 (byte) keyboard_modifiers#40 (byte) keyboard_modifiers#35
Alias (byte) current_movedown_counter#32 = (byte) current_movedown_counter#61 (byte) current_movedown_counter#62 (byte) current_movedown_counter#60 (byte) current_movedown_counter#59 (byte) current_movedown_counter#58 (byte) current_movedown_counter#54 (byte) current_movedown_counter#51 (byte) current_movedown_counter#47 (byte) current_movedown_counter#43 (byte) current_movedown_counter#39
Alias (word) lines_bcd#43 = (word) lines_bcd#92 (word) lines_bcd#93 (word) lines_bcd#91 (word) lines_bcd#90 (word) lines_bcd#89 (word) lines_bcd#84 (word) lines_bcd#80 (word) lines_bcd#73 (word) lines_bcd#65 (word) lines_bcd#54
Alias (dword) score_bcd#43 = (dword) score_bcd#88 (dword) score_bcd#89 (dword) score_bcd#87 (dword) score_bcd#86 (dword) score_bcd#85 (dword) score_bcd#81 (dword) score_bcd#77 (dword) score_bcd#70 (dword) score_bcd#63 (dword) score_bcd#54
Alias (byte) level_bcd#102 = (byte) level_bcd#105 (byte) level_bcd#106 (byte) level_bcd#104 (byte) level_bcd#103 (byte) level_bcd#97 (byte) level_bcd#92 (byte) level_bcd#83 (byte) level_bcd#75 (byte) level_bcd#65 (byte) level_bcd#53
Alias (byte) render_screen_show#14 = (byte) render_screen_show#5 (byte) render_screen_show#62 (byte) render_screen_show#61 (byte) render_screen_show#58 (byte) render_screen_show#55 (byte) render_screen_show#49 (byte) render_screen_show#44 (byte) render_screen_show#36 (byte) render_screen_show#29
Alias (byte) render_screen_render#16 = (byte) render_screen_render#5 (byte) render_screen_render#58 (byte) render_screen_render#53 (byte) render_screen_render#49 (byte) render_screen_render#44 (byte) render_screen_render#31 (byte) render_screen_render#36 (byte) render_screen_render#25 (byte) render_screen_render#38
Alias (byte) current_movedown_slow#12 = (byte) current_movedown_slow#25 (byte) current_movedown_slow#88 (byte) current_movedown_slow#84 (byte) current_movedown_slow#79 (byte) current_movedown_slow#71 (byte) current_movedown_slow#59
Alias (byte*) current_piece#19 = (byte*) current_piece#7
Alias (byte) current_piece_char#19 = (byte) current_piece_char#7
Alias (byte) current_orientation#10 = (byte) current_orientation#27
Alias (byte*) current_piece_gfx#10 = (byte*) current_piece_gfx#24
Alias (byte) current_xpos#11 = (byte) current_xpos#31
Alias (byte) current_ypos#25 = (byte) current_ypos#8
Alias (byte) game_over#17 = (byte) game_over#7
Alias (byte) next_piece_idx#19 = (byte) next_piece_idx#7
Alias (byte*) current_piece#20 = (byte*) current_piece#8 (byte*) current_piece#77 (byte*) current_piece#65 (byte*) current_piece#51
Alias (byte) current_piece_char#20 = (byte) current_piece_char#8 (byte) current_piece_char#80 (byte) current_piece_char#64 (byte) current_piece_char#48
Alias (byte) current_orientation#11 = (byte) current_orientation#28 (byte) current_orientation#83 (byte) current_orientation#72 (byte) current_orientation#59
Alias (byte*) current_piece_gfx#11 = (byte*) current_piece_gfx#25 (byte*) current_piece_gfx#81 (byte*) current_piece_gfx#77 (byte*) current_piece_gfx#60
Alias (byte) current_xpos#12 = (byte) current_xpos#32 (byte) current_xpos#79 (byte) current_xpos#94 (byte) current_xpos#75
Alias (byte) current_ypos#26 = (byte) current_ypos#9 (byte) current_ypos#30 (byte) current_ypos#73 (byte) current_ypos#60
Alias (byte) game_over#18 = (byte) game_over#8 (byte) game_over#68 (byte) game_over#55 (byte) game_over#42
Alias (byte) next_piece_idx#20 = (byte) next_piece_idx#8 (byte) next_piece_idx#64 (byte) next_piece_idx#47 (byte) next_piece_idx#43
Alias (byte) render_screen_show#16 = (byte) render_screen_show#37 (byte) render_screen_show#23 (byte) render_screen_show#7
Alias (byte) render_screen_showing#13 = (byte) render_screen_showing#23 (byte) render_screen_showing#9 (byte) render_screen_showing#4
Alias (byte) keyboard_events_size#19 = (byte) keyboard_events_size#50 (byte) keyboard_events_size#27 (byte) keyboard_events_size#8
Alias (byte) keyboard_modifiers#16 = (byte) keyboard_modifiers#41 (byte) keyboard_modifiers#24 (byte) keyboard_modifiers#8
Alias (byte) game_over#10 = (byte) game_over#78 (byte) game_over#33 (byte) game_over#21
Alias (byte) current_movedown_counter#16 = (byte) current_movedown_counter#55 (byte) current_movedown_counter#26 (byte) current_movedown_counter#7
Alias (byte) current_ypos#100 = (byte) current_ypos#48 (byte) current_ypos#28 (byte) current_ypos#11
Alias (word) lines_bcd#19 = (word) lines_bcd#85 (word) lines_bcd#33 (word) lines_bcd#8
Alias (dword) score_bcd#18 = (dword) score_bcd#82 (dword) score_bcd#33 (dword) score_bcd#8
Alias (byte) level#10 = (byte) level#106 (byte) level#40 (byte) level#24
Alias (byte) current_movedown_slow#14 = (byte) current_movedown_slow#91 (byte) current_movedown_slow#45 (byte) current_movedown_slow#27
Alias (byte) level_bcd#11 = (byte) level_bcd#98 (byte) level_bcd#40 (byte) level_bcd#24
Alias (byte*) current_piece#10 = (byte*) current_piece#94 (byte*) current_piece#38 (byte*) current_piece#22
Alias (byte) current_piece_char#10 = (byte) current_piece_char#102 (byte) current_piece_char#35 (byte) current_piece_char#22
Alias (byte) current_orientation#13 = (byte) current_orientation#98 (byte) current_orientation#48 (byte) current_orientation#30
Alias (byte*) current_piece_gfx#114 = (byte*) current_piece_gfx#44 (byte*) current_piece_gfx#27 (byte*) current_piece_gfx#13
Alias (byte) current_xpos#124 = (byte) current_xpos#57 (byte) current_xpos#34 (byte) current_xpos#14
Alias (byte) next_piece_idx#10 = (byte) next_piece_idx#79 (byte) next_piece_idx#34 (byte) next_piece_idx#22
Alias (byte) render_screen_render#18 = (byte) render_screen_render#65 (byte) render_screen_render#28 (byte) render_screen_render#7
Alias (byte) render_screen_show#18 = (byte) render_screen_show#38 (byte) render_screen_show#30 (byte) render_screen_show#59 (byte) render_screen_show#56 (byte) render_screen_show#52 (byte) render_screen_show#50 (byte) render_screen_show#46
Alias (byte) render_screen_showing#12 = (byte) render_screen_showing#24 (byte) render_screen_showing#19
Alias (byte) keyboard_events_size#26 = (byte) keyboard_events_size#51 (byte) keyboard_events_size#42 (byte) keyboard_events_size#35
Alias (byte) keyboard_modifiers#23 = (byte) keyboard_modifiers#42 (byte) keyboard_modifiers#36 (byte) keyboard_modifiers#32
Alias (byte) game_over#19 = (byte) game_over#79 (byte) game_over#69 (byte) game_over#56 (byte) game_over#44 (byte) game_over#31 (byte) game_over#32
Alias (byte) current_movedown_counter#25 = (byte) current_movedown_counter#56 (byte) current_movedown_counter#52 (byte) current_movedown_counter#48 (byte) current_movedown_counter#44 (byte) current_movedown_counter#40 (byte) current_movedown_counter#34
Alias (byte) current_ypos#101 = (byte) current_ypos#98 (byte) current_ypos#92 (byte) current_ypos#84 (byte) current_ypos#74 (byte) current_ypos#62 (byte) current_ypos#47
Alias (word) lines_bcd#32 = (word) lines_bcd#86 (word) lines_bcd#81 (word) lines_bcd#74 (word) lines_bcd#66 (word) lines_bcd#55 (word) lines_bcd#45
Alias (dword) score_bcd#32 = (dword) score_bcd#83 (dword) score_bcd#78 (dword) score_bcd#71 (dword) score_bcd#64 (dword) score_bcd#55 (dword) score_bcd#45
Alias (byte) level#101 = (byte) level#107 (byte) level#93 (byte) level#83 (byte) level#69 (byte) level#56 (byte) level#39
Alias (byte) current_movedown_slow#44 = (byte) current_movedown_slow#92 (byte) current_movedown_slow#89 (byte) current_movedown_slow#85 (byte) current_movedown_slow#80 (byte) current_movedown_slow#72 (byte) current_movedown_slow#61
Alias (byte) level_bcd#39 = (byte) level_bcd#99 (byte) level_bcd#93 (byte) level_bcd#84 (byte) level_bcd#76 (byte) level_bcd#66 (byte) level_bcd#55
Alias (byte*) current_piece#37 = (byte*) current_piece#95 (byte*) current_piece#92 (byte*) current_piece#85 (byte*) current_piece#78 (byte*) current_piece#66 (byte*) current_piece#53
Alias (byte) current_piece_char#103 = (byte) current_piece_char#99 (byte) current_piece_char#91 (byte) current_piece_char#81 (byte) current_piece_char#65 (byte) current_piece_char#50 (byte) current_piece_char#34
Alias (byte) current_orientation#47 = (byte) current_orientation#99 (byte) current_orientation#96 (byte) current_orientation#91 (byte) current_orientation#84 (byte) current_orientation#73 (byte) current_orientation#61
Alias (byte*) current_piece_gfx#103 = (byte*) current_piece_gfx#115 (byte*) current_piece_gfx#112 (byte*) current_piece_gfx#95 (byte*) current_piece_gfx#78 (byte*) current_piece_gfx#62 (byte*) current_piece_gfx#43
Alias (byte) current_xpos#107 = (byte) current_xpos#125 (byte) current_xpos#122 (byte) current_xpos#116 (byte) current_xpos#95 (byte) current_xpos#77 (byte) current_xpos#56
Alias (byte) next_piece_idx#33 = (byte) next_piece_idx#80 (byte) next_piece_idx#78 (byte) next_piece_idx#72 (byte) next_piece_idx#65 (byte) next_piece_idx#55 (byte) next_piece_idx#45
Alias (byte) render_screen_render#51 = (byte) render_screen_render#66 (byte) render_screen_render#64 (byte) render_screen_render#63 (byte) render_screen_render#61 (byte) render_screen_render#59 (byte) render_screen_render#56 (byte) render_screen_render#54
Alias (byte) render_screen_showing#3 = (byte) render_screen_showing#8 (byte) render_screen_showing#40 (byte) render_screen_showing#36 (byte) render_screen_showing#34 (byte) render_screen_showing#30
Alias (byte) keyboard_events_size#17 = (byte) keyboard_events_size#6
Alias (byte) keyboard_modifiers#15 = (byte) keyboard_modifiers#7 (byte) keyboard_modifiers#50 (byte) keyboard_modifiers#48 (byte) keyboard_modifiers#44
Alias (byte) keyboard_event_get::return#3 = (byte) keyboard_event_get::return#5
Alias (byte) keyboard_events_size#18 = (byte) keyboard_events_size#7 (byte) keyboard_events_size#60 (byte) keyboard_events_size#53
Alias (byte) main::key_event#0 = (byte~) main::$13 (byte) main::key_event#1
Alias (byte) play_movement::return#3 = (byte) play_movement::return#5
Alias (byte) current_movedown_counter#15 = (byte) current_movedown_counter#6
Alias (byte) current_ypos#10 = (byte) current_ypos#27
Alias (word) lines_bcd#18 = (word) lines_bcd#7
Alias (dword) score_bcd#17 = (dword) score_bcd#7
Alias (byte) level#23 = (byte) level#9
Alias (byte) current_movedown_slow#13 = (byte) current_movedown_slow#26
Alias (byte) level_bcd#10 = (byte) level_bcd#23
Alias (byte*) current_piece#21 = (byte*) current_piece#9
Alias (byte) current_piece_char#21 = (byte) current_piece_char#9
Alias (byte) current_orientation#12 = (byte) current_orientation#29
Alias (byte*) current_piece_gfx#12 = (byte*) current_piece_gfx#26
Alias (byte) current_xpos#13 = (byte) current_xpos#33
Alias (byte) game_over#20 = (byte) game_over#9
Alias (byte) next_piece_idx#21 = (byte) next_piece_idx#9
Alias (byte) main::render#1 = (byte~) main::$15
Alias (byte) main::render#3 = (byte) main::render#4
Alias (byte) render_screen_show#45 = (byte) render_screen_show#51
Alias (byte) render_screen_render#50 = (byte) render_screen_render#55
Alias (byte) current_movedown_slow#81 = (byte) current_movedown_slow#86
Alias (byte*) current_piece#79 = (byte*) current_piece#86
Alias (byte) current_piece_char#82 = (byte) current_piece_char#92
Alias (byte) current_orientation#85 = (byte) current_orientation#92
Alias (byte*) current_piece_gfx#104 = (byte*) current_piece_gfx#96
Alias (byte) current_xpos#108 = (byte) current_xpos#117
Alias (byte) current_ypos#85 = (byte) current_ypos#93
Alias (byte) game_over#70 = (byte) game_over#80
Alias (byte) next_piece_idx#66 = (byte) next_piece_idx#73
Alias (byte) render_screen_showing#29 = (byte) render_screen_showing#35
Alias (byte) keyboard_events_size#52 = (byte) keyboard_events_size#61
Alias (byte) keyboard_modifiers#43 = (byte) keyboard_modifiers#49
Alias (byte) current_movedown_counter#45 = (byte) current_movedown_counter#49
Alias (word) lines_bcd#67 = (word) lines_bcd#75
Alias (dword) score_bcd#65 = (dword) score_bcd#72
Alias (byte) level#84 = (byte) level#94
Alias (byte) level_bcd#77 = (byte) level_bcd#85
Alias (byte) render_screen_show#21 = (byte) render_screen_show#28 (byte) render_screen_show#39 (byte) render_screen_show#53 (byte) render_screen_show#47 (byte) render_screen_show#40 (byte) render_screen_show#31
Alias (byte) render_screen_render#20 = (byte) render_screen_render#37 (byte) render_screen_render#45 (byte) render_screen_render#30 (byte) render_screen_render#39 (byte) render_screen_render#26 (byte) render_screen_render#21
Alias (byte) current_movedown_slow#58 = (byte) current_movedown_slow#73 (byte) current_movedown_slow#93 (byte) current_movedown_slow#90 (byte) current_movedown_slow#87 (byte) current_movedown_slow#82 (byte) current_movedown_slow#74 (byte) current_movedown_slow#60
Alias (byte*) current_piece#50 = (byte*) current_piece#67 (byte*) current_piece#96 (byte*) current_piece#93 (byte*) current_piece#87 (byte*) current_piece#80 (byte*) current_piece#68 (byte*) current_piece#52
Alias (byte) current_piece_char#100 = (byte) current_piece_char#47 (byte) current_piece_char#66 (byte) current_piece_char#84 (byte) current_piece_char#93 (byte) current_piece_char#83 (byte) current_piece_char#67 (byte) current_piece_char#49
Alias (byte) current_orientation#100 = (byte) current_orientation#58 (byte) current_orientation#74 (byte) current_orientation#97 (byte) current_orientation#93 (byte) current_orientation#86 (byte) current_orientation#75 (byte) current_orientation#60
Alias (byte*) current_piece_gfx#105 = (byte*) current_piece_gfx#59 (byte*) current_piece_gfx#79 (byte*) current_piece_gfx#82 (byte*) current_piece_gfx#106 (byte*) current_piece_gfx#97 (byte*) current_piece_gfx#80 (byte*) current_piece_gfx#61
Alias (byte) current_xpos#109 = (byte) current_xpos#74 (byte) current_xpos#96 (byte) current_xpos#80 (byte) current_xpos#118 (byte) current_xpos#110 (byte) current_xpos#97 (byte) current_xpos#76
Alias (byte) current_ypos#31 = (byte) current_ypos#59 (byte) current_ypos#75 (byte) current_ypos#63 (byte) current_ypos#94 (byte) current_ypos#86 (byte) current_ypos#76 (byte) current_ypos#61
Alias (byte) game_over#41 = (byte) game_over#57 (byte) game_over#89 (byte) game_over#87 (byte) game_over#81 (byte) game_over#71 (byte) game_over#58 (byte) game_over#43
Alias (byte) next_piece_idx#42 = (byte) next_piece_idx#56 (byte) next_piece_idx#74 (byte) next_piece_idx#67 (byte) next_piece_idx#48 (byte) next_piece_idx#68 (byte) next_piece_idx#57 (byte) next_piece_idx#44
Alias (byte) render_screen_showing#16 = (byte) render_screen_showing#25 (byte) render_screen_showing#44 (byte) render_screen_showing#41 (byte) render_screen_showing#37 (byte) render_screen_showing#31 (byte) render_screen_showing#26 (byte) render_screen_showing#18
Alias (byte) keyboard_events_size#32 = (byte) keyboard_events_size#43 (byte) keyboard_events_size#73 (byte) keyboard_events_size#69 (byte) keyboard_events_size#62 (byte) keyboard_events_size#54 (byte) keyboard_events_size#44 (byte) keyboard_events_size#34
Alias (byte) keyboard_modifiers#29 = (byte) keyboard_modifiers#37 (byte) keyboard_modifiers#57 (byte) keyboard_modifiers#54 (byte) keyboard_modifiers#51 (byte) keyboard_modifiers#45 (byte) keyboard_modifiers#38 (byte) keyboard_modifiers#31
Alias (byte) current_movedown_counter#31 = (byte) current_movedown_counter#41 (byte) current_movedown_counter#57 (byte) current_movedown_counter#53 (byte) current_movedown_counter#50 (byte) current_movedown_counter#46 (byte) current_movedown_counter#42 (byte) current_movedown_counter#33
Alias (word) lines_bcd#42 = (word) lines_bcd#56 (word) lines_bcd#87 (word) lines_bcd#82 (word) lines_bcd#76 (word) lines_bcd#68 (word) lines_bcd#57 (word) lines_bcd#44
Alias (dword) score_bcd#42 = (dword) score_bcd#56 (dword) score_bcd#79 (dword) score_bcd#73 (dword) score_bcd#66 (dword) score_bcd#47 (dword) score_bcd#57 (dword) score_bcd#44
Alias (byte) level#102 = (byte) level#53 (byte) level#70 (byte) level#108 (byte) level#95 (byte) level#85 (byte) level#71 (byte) level#55
Alias (byte) level_bcd#100 = (byte) level_bcd#52 (byte) level_bcd#67 (byte) level_bcd#94 (byte) level_bcd#86 (byte) level_bcd#78 (byte) level_bcd#68 (byte) level_bcd#54
Alias (byte) render_screen_render#17 = (byte) render_screen_render#6
Alias (byte) render_screen_show#15 = (byte) render_screen_show#6
Alias (byte) render_screen_show#17 = (byte) render_screen_show#8
Alias (byte) render_screen_render#19 = (byte) render_screen_render#8
Alias (byte) current_movedown_slow#15 = (byte) current_movedown_slow#28
Alias (byte*) current_piece#11 = (byte*) current_piece#23
Alias (byte) current_piece_char#11 = (byte) current_piece_char#23
Alias (byte) current_orientation#14 = (byte) current_orientation#31
Alias (byte*) current_piece_gfx#14 = (byte*) current_piece_gfx#28
Alias (byte) current_xpos#15 = (byte) current_xpos#35
Alias (byte) current_ypos#12 = (byte) current_ypos#29
Alias (byte) game_over#11 = (byte) game_over#22
Alias (byte) next_piece_idx#11 = (byte) next_piece_idx#23
Alias (byte) render_screen_showing#10 = (byte) render_screen_showing#5
Alias (byte) keyboard_events_size#20 = (byte) keyboard_events_size#9
Alias (byte) keyboard_modifiers#17 = (byte) keyboard_modifiers#9
Alias (byte) current_movedown_counter#17 = (byte) current_movedown_counter#8
Alias (word) lines_bcd#20 = (word) lines_bcd#9
Alias (dword) score_bcd#19 = (dword) score_bcd#9
Alias (byte) level#11 = (byte) level#25
Alias (byte) level_bcd#12 = (byte) level_bcd#25
Successful SSA optimization Pass2AliasElimination
Alias candidate removed (volatile)(byte) render_screen_showing#1 = (byte) render_screen_show#11 (byte) render_screen_show#10 (byte) render_screen_showing#6 (byte) render_screen_showing#2
Alias candidate removed (volatile)(byte) IRQ_RASTER_FIRST#0 = (byte/signed word/word/dword/signed dword~) $4 (byte) irq_raster_next#0 (byte) irq_raster_next#24 (byte) irq_raster_next#23 (byte) irq_raster_next#22 (byte) irq_raster_next#20 (byte) irq_raster_next#17 (byte) irq_raster_next#10
Alias candidate removed (volatile)(byte) irq_sprite_ypos#0 = (byte/signed word/word/dword/signed dword~) $5 (byte) irq_sprite_ypos#24 (byte) irq_sprite_ypos#22 (byte) irq_sprite_ypos#21 (byte) irq_sprite_ypos#18 (byte) irq_sprite_ypos#14 (byte) irq_sprite_ypos#9
Alias candidate removed (volatile)(byte) irq_sprite_ptr#0 = (byte/signed word/word/dword/signed dword~) $7 (byte) irq_sprite_ptr#18 (byte) irq_sprite_ptr#17 (byte) irq_sprite_ptr#14
Alias candidate removed (volatile)(byte) sprites_irq::raster_sprite_gfx_modify#0 = (byte/signed word/word/dword/signed dword~) sprites_irq::$0
Alias candidate removed (volatile)(byte) sprites_irq::toSpritePtr2_return#0 = (byte) sprites_irq::toSpritePtr2_$2#0 (byte) sprites_irq::toSpritePtr2_return#2 (byte) sprites_irq::toSpritePtr2_return#1 (byte) sprites_irq::toSpritePtr2_return#3 (byte~) sprites_irq::$5 (byte) irq_sprite_ptr#1
Alias (byte) keyboard_event_scan::keycode#10 = (byte) keyboard_event_scan::keycode#4
Alias (byte) keyboard_event_scan::col#2 = (byte) keyboard_event_scan::col#3
Alias (byte) keyboard_event_scan::row_scan#1 = (byte) keyboard_event_scan::row_scan#3
Alias (byte) keyboard_event_scan::row#10 = (byte) keyboard_event_scan::row#6
Alias (byte) keyboard_events_size#13 = (byte) keyboard_events_size#65 (byte) keyboard_events_size#56 (byte) keyboard_events_size#46 (byte) keyboard_events_size#23
Alias (byte) level#12 = (byte) level#26
Alias (dword) score_bcd#10 = (dword) score_bcd#20
Alias (word) lines_bcd#10 = (word) lines_bcd#58
Alias (byte) level_bcd#13 = (byte) level_bcd#87
Alias (byte) render_bcd::bcd#6 = (byte) render_bcd::bcd#7
Alias (byte) render_moving::xpos#2 = (byte) render_moving::xpos#3
Alias (byte) render_moving::c#2 = (byte) render_moving::c#3
Alias (byte) render_moving::ypos2#5 = (byte) render_moving::ypos2#7
Alias (byte) render_moving::l#3 = (byte) render_moving::l#6
Alias (byte*) current_piece_gfx#15 = (byte*) current_piece_gfx#30
Alias (byte) render_moving::i#2 = (byte) render_moving::i#7
Alias (byte) current_piece_char#12 = (byte) current_piece_char#38
Alias (byte*) render_moving::screen_line#1 = (byte*) render_moving::screen_line#3
Alias (byte) render_screen_render#41 = (byte) render_screen_render#46
Alias (byte) current_xpos#81 = (byte) current_xpos#98
Alias (byte) next_piece_idx#12 = (byte) next_piece_idx#24
Alias (byte*) render_next::screen_next_area#5 = (byte*) render_next::screen_next_area#7
Alias (byte) render_next::c#2 = (byte) render_next::c#3
Alias (byte*) render_next::next_piece_gfx#1 = (byte*) render_next::next_piece_gfx#4
Alias (byte) render_next::l#2 = (byte) render_next::l#4
Alias (byte) render_next::next_piece_char#1 = (byte) render_next::next_piece_char#4
Alias (byte) irq_cnt#10 = (byte) irq_cnt#4
Alias (byte) irq_raster_next#11 = (byte) irq_raster_next#14
Alias (byte) irq_sprite_ypos#10 = (byte) irq_sprite_ypos#15
Alias (byte) irq_sprite_ptr#10 = (byte) irq_sprite_ptr#15
Alias (byte) current_movedown_counter#1 = (byte) current_movedown_counter#10
Alias (byte) current_ypos#1 = (byte) current_ypos#15
Alias (word) lines_bcd#1 = (word) lines_bcd#13
Alias (dword) score_bcd#1 = (dword) score_bcd#12
Alias (byte) level#1 = (byte) level#15
Alias (byte) current_movedown_slow#17 = (byte) current_movedown_slow#18
Alias (byte) level_bcd#1 = (byte) level_bcd#15
Alias (byte*) current_piece#1 = (byte*) current_piece#13
Alias (byte) current_piece_char#1 = (byte) current_piece_char#14
Alias (byte) game_over#1 = (byte) game_over#13
Alias (byte) next_piece_idx#1 = (byte) next_piece_idx#14
Alias (byte) current_movedown_counter#12 = (byte) current_movedown_counter#13 (byte) current_movedown_counter#3 (byte) current_movedown_counter#24
Alias (byte) current_movedown_slow#19 = (byte) current_movedown_slow#33 (byte) current_movedown_slow#64 (byte) current_movedown_slow#36
Alias (byte) current_ypos#16 = (byte) current_ypos#65 (byte) current_ypos#88 (byte) current_ypos#51
Alias (byte) current_xpos#101 = (byte) current_xpos#112 (byte) current_xpos#61 (byte) current_xpos#20
Alias (byte) current_orientation#18 = (byte) current_orientation#63 (byte) current_orientation#87 (byte) current_orientation#51
Alias (word) lines_bcd#25 = (word) lines_bcd#61 (word) lines_bcd#78 (word) lines_bcd#49
Alias (dword) score_bcd#25 = (dword) score_bcd#59 (dword) score_bcd#75 (dword) score_bcd#49
Alias (byte) level#32 = (byte) level#75 (byte) level#97 (byte) level#62
Alias (byte) level_bcd#30 = (byte) level_bcd#71 (byte) level_bcd#90 (byte) level_bcd#59
Alias (byte*) current_piece#27 = (byte*) current_piece#69 (byte*) current_piece#88 (byte*) current_piece#56
Alias (byte) current_piece_char#28 = (byte) current_piece_char#71 (byte) current_piece_char#95 (byte) current_piece_char#54
Alias (byte*) current_piece_gfx#100 = (byte*) current_piece_gfx#108 (byte*) current_piece_gfx#66 (byte*) current_piece_gfx#34
Alias (byte) game_over#26 = (byte) game_over#60 (byte) game_over#83 (byte) game_over#47
Alias (byte) next_piece_idx#29 = (byte) next_piece_idx#58 (byte) next_piece_idx#75 (byte) next_piece_idx#50
Alias (byte) current_xpos#23 = (byte) current_xpos#48
Alias (byte) current_xpos#28 = (byte) current_xpos#50
Alias (byte) current_ypos#22 = (byte) current_ypos#42
Alias (byte*) current_piece#16 = (byte*) current_piece#46
Alias (byte) current_orientation#23 = (byte) current_orientation#43
Alias (byte*) current_piece_gfx#37 = (byte*) current_piece_gfx#38
Alias (byte) play_collision::col#2 = (byte) play_collision::col#3
Alias (byte) play_collision::c#2 = (byte) play_collision::c#3
Alias (byte*) play_collision::piece_gfx#1 = (byte*) play_collision::piece_gfx#3
Alias (byte) play_collision::i#1 = (byte) play_collision::i#4
Alias (byte) play_collision::ypos2#10 = (byte) play_collision::ypos2#4
Alias (byte) play_collision::l#10 = (byte) play_collision::l#2
Alias (byte) play_collision::xpos#10 = (byte) play_collision::xpos#7
Alias (byte*) play_collision::playfield_line#1 = (byte*) play_collision::playfield_line#6
Alias (byte) play_lock_current::col#2 = (byte) play_lock_current::col#3
Alias (byte) play_lock_current::c#2 = (byte) play_lock_current::c#3
Alias (byte*) current_piece_gfx#22 = (byte*) current_piece_gfx#40
Alias (byte) play_lock_current::i#1 = (byte) play_lock_current::i#4
Alias (byte) play_lock_current::ypos2#3 = (byte) play_lock_current::ypos2#5
Alias (byte) play_lock_current::l#2 = (byte) play_lock_current::l#4
Alias (byte) current_piece_char#17 = (byte) current_piece_char#44
Alias (byte*) play_lock_current::playfield_line#1 = (byte*) play_lock_current::playfield_line#3
Alias (byte) current_xpos#53 = (byte) current_xpos#89
Alias (byte*) current_piece#5 = (byte*) current_piece#62
Alias (byte) current_piece_char#5 = (byte) current_piece_char#61
Alias (byte) current_orientation#69 = (byte) current_orientation#79
Alias (byte*) current_piece_gfx#74 = (byte*) current_piece_gfx#8
Alias (byte) current_xpos#103 = (byte) current_xpos#91
Alias (byte) current_ypos#6 = (byte) current_ypos#70
Alias (byte) play_remove_lines::c#0 = (byte) play_remove_lines::c#1
Alias (byte) play_remove_lines::w#4 = (byte) play_remove_lines::w#8
Alias (byte) play_remove_lines::x#2 = (byte) play_remove_lines::x#3
Alias (byte) play_remove_lines::r#1 = (byte) play_remove_lines::r#4 (byte) play_remove_lines::r#5
Alias (byte) play_remove_lines::y#2 = (byte) play_remove_lines::y#3 (byte) play_remove_lines::y#6
Alias (byte) play_remove_lines::removed#10 = (byte) play_remove_lines::removed#2
Alias (byte) level_bcd#20 = (byte) level_bcd#36
Alias (byte) level#21 = (byte) level#79 (byte) level#67
Alias (byte) current_movedown_slow#69 = (byte) current_movedown_slow#76
Successful SSA optimization Pass2AliasElimination
Alias candidate removed (volatile)(byte) render_screen_showing#1 = (byte) render_screen_show#11 (byte) render_screen_show#10 (byte) render_screen_showing#6 (byte) render_screen_showing#2
Alias candidate removed (volatile)(byte) IRQ_RASTER_FIRST#0 = (byte/signed word/word/dword/signed dword~) $4 (byte) irq_raster_next#0 (byte) irq_raster_next#24 (byte) irq_raster_next#23 (byte) irq_raster_next#22 (byte) irq_raster_next#20 (byte) irq_raster_next#17 (byte) irq_raster_next#10
Alias candidate removed (volatile)(byte) irq_sprite_ypos#0 = (byte/signed word/word/dword/signed dword~) $5 (byte) irq_sprite_ypos#24 (byte) irq_sprite_ypos#22 (byte) irq_sprite_ypos#21 (byte) irq_sprite_ypos#18 (byte) irq_sprite_ypos#14 (byte) irq_sprite_ypos#9
Alias candidate removed (volatile)(byte) irq_sprite_ptr#0 = (byte/signed word/word/dword/signed dword~) $7 (byte) irq_sprite_ptr#18 (byte) irq_sprite_ptr#17 (byte) irq_sprite_ptr#14
Alias candidate removed (volatile)(byte) sprites_irq::raster_sprite_gfx_modify#0 = (byte/signed word/word/dword/signed dword~) sprites_irq::$0
Alias candidate removed (volatile)(byte) sprites_irq::toSpritePtr2_return#0 = (byte) sprites_irq::toSpritePtr2_$2#0 (byte) sprites_irq::toSpritePtr2_return#2 (byte) sprites_irq::toSpritePtr2_return#1 (byte) sprites_irq::toSpritePtr2_return#3 (byte~) sprites_irq::$5 (byte) irq_sprite_ptr#1
Self Phi Eliminated (byte) keyboard_event_scan::row_scan#1
Self Phi Eliminated (byte) keyboard_event_scan::row#10
Self Phi Eliminated (byte*) render_screen_original::oscr#3
Self Phi Eliminated (byte*) render_screen_original::ocols#3
Self Phi Eliminated (byte) render_screen_original::y#5
Self Phi Eliminated (byte) render_screen_original::y#4
Self Phi Eliminated (byte) render_screen_original::y#2
Self Phi Eliminated (byte*) render_screen_original::oscr#5
Self Phi Eliminated (byte*) render_screen_original::ocols#5
Self Phi Eliminated (byte) render_playfield::l#3
Self Phi Eliminated (byte) render_screen_render#23
Self Phi Eliminated (byte*) current_piece_gfx#15
Self Phi Eliminated (byte) current_piece_char#12
Self Phi Eliminated (byte*) render_moving::screen_line#1
Self Phi Eliminated (byte) render_moving::ypos2#5
Self Phi Eliminated (byte) render_moving::l#3
Self Phi Eliminated (byte) render_screen_render#41
Self Phi Eliminated (byte) current_xpos#81
Self Phi Eliminated (byte) render_next::next_piece_char#1
Self Phi Eliminated (byte) render_next::l#2
Self Phi Eliminated (byte) sprites_irq::raster_sprite_gfx_modify#1
Self Phi Eliminated (byte) irq_sprite_ptr#10
Self Phi Eliminated (byte) render_screen_showing#11
Self Phi Eliminated (byte) irq_cnt#10
Self Phi Eliminated (byte) irq_raster_next#11
Self Phi Eliminated (byte) irq_sprite_ypos#10
Self Phi Eliminated (byte) level#13
Self Phi Eliminated (byte) current_movedown_slow#16
Self Phi Eliminated (byte*) play_collision::piece_gfx#1
Self Phi Eliminated (byte) play_collision::ypos2#10
Self Phi Eliminated (byte) play_collision::l#10
Self Phi Eliminated (byte) play_collision::xpos#10
Self Phi Eliminated (byte*) play_collision::playfield_line#1
Self Phi Eliminated (byte*) current_piece_gfx#22
Self Phi Eliminated (byte) current_piece_char#17
Self Phi Eliminated (byte*) play_lock_current::playfield_line#1
Self Phi Eliminated (byte) play_lock_current::ypos2#3
Self Phi Eliminated (byte) play_lock_current::l#2
Self Phi Eliminated (byte) current_xpos#53
Self Phi Eliminated (byte*) current_piece#18
Self Phi Eliminated (byte) current_piece_char#18
Self Phi Eliminated (byte) current_orientation#26
Self Phi Eliminated (byte*) current_piece_gfx#101
Self Phi Eliminated (byte) current_xpos#10
Self Phi Eliminated (byte) current_ypos#24
Self Phi Eliminated (byte) game_over#16
Self Phi Eliminated (byte) play_remove_lines::y#2
Self Phi Eliminated (byte) play_remove_lines::removed#10
Self Phi Eliminated (byte) play_remove_lines::removed#3
Self Phi Eliminated (byte) level#22
Self Phi Eliminated (byte) current_movedown_slow#11
Self Phi Eliminated (byte) level_bcd#22
Self Phi Eliminated (byte) render_screen_show#18
Self Phi Eliminated (byte) render_screen_showing#12
Self Phi Eliminated (byte) keyboard_events_size#26
Self Phi Eliminated (byte) keyboard_modifiers#23
Self Phi Eliminated (byte) game_over#19
Self Phi Eliminated (byte) current_movedown_counter#25
Self Phi Eliminated (byte) current_ypos#101
Self Phi Eliminated (word) lines_bcd#32
Self Phi Eliminated (dword) score_bcd#32
Self Phi Eliminated (byte) level#101
Self Phi Eliminated (byte) current_movedown_slow#44
Self Phi Eliminated (byte) level_bcd#39
Self Phi Eliminated (byte*) current_piece#37
Self Phi Eliminated (byte) current_piece_char#103
Self Phi Eliminated (byte) current_orientation#47
Self Phi Eliminated (byte*) current_piece_gfx#103
Self Phi Eliminated (byte) current_xpos#107
Self Phi Eliminated (byte) next_piece_idx#33
Self Phi Eliminated (byte) render_screen_render#51
Self Phi Eliminated (byte) main::render#3
Self Phi Eliminated (byte) render_screen_show#45
Self Phi Eliminated (byte) render_screen_render#50
Self Phi Eliminated (byte) current_movedown_slow#81
Self Phi Eliminated (byte*) current_piece#79
Self Phi Eliminated (byte) current_piece_char#82
Self Phi Eliminated (byte) current_orientation#85
Self Phi Eliminated (byte*) current_piece_gfx#104
Self Phi Eliminated (byte) current_xpos#108
Self Phi Eliminated (byte) current_ypos#85
Self Phi Eliminated (byte) game_over#70
Self Phi Eliminated (byte) next_piece_idx#66
Self Phi Eliminated (byte) render_screen_showing#29
Self Phi Eliminated (byte) keyboard_events_size#52
Self Phi Eliminated (byte) keyboard_modifiers#43
Self Phi Eliminated (byte) current_movedown_counter#45
Self Phi Eliminated (word) lines_bcd#67
Self Phi Eliminated (dword) score_bcd#65
Self Phi Eliminated (byte) level#84
Self Phi Eliminated (byte) level_bcd#77
Successful SSA optimization Pass2SelfPhiElimination
Redundant Phi (byte) keyboard_matrix_read::rowid#1 (byte) keyboard_matrix_read::rowid#0
Redundant Phi (byte) keyboard_events_size#55 (byte) keyboard_events_size#26
Redundant Phi (byte) keyboard_event_scan::row_scan#1 (byte) keyboard_event_scan::row_scan#0
Redundant Phi (byte) keyboard_event_scan::row#10 (byte) keyboard_event_scan::row#2
Redundant Phi (byte) keyboard_events_size#14 (byte) keyboard_events_size#17
Redundant Phi (byte) render_screen_show#10 (byte) render_screen_show#18
Redundant Phi (byte) level#12 (byte) level#101
Redundant Phi (byte) render_screen_show#11 (byte) render_screen_show#10
Redundant Phi (byte) render_screen_showing#6 (byte) render_screen_showing#1
Redundant Phi (byte) render_screen_render#10 (byte) render_screen_render#20
Redundant Phi (byte) render_screen_show#12 (byte) render_screen_show#21
Redundant Phi (byte) render_screen_render#12 (byte) render_screen_render#20
Redundant Phi (dword) score_bcd#10 (dword) score_bcd#42
Redundant Phi (word) lines_bcd#10 (word) lines_bcd#42
Redundant Phi (byte) level_bcd#13 (byte) level_bcd#100
Redundant Phi (byte*) render_screen_original::oscr#3 (byte*) render_screen_original::oscr#4
Redundant Phi (byte*) render_screen_original::ocols#3 (byte*) render_screen_original::ocols#4
Redundant Phi (byte) render_screen_original::y#5 (byte) render_screen_original::y#6
Redundant Phi (byte) render_screen_original::y#4 (byte) render_screen_original::y#5
Redundant Phi (byte) render_screen_original::y#2 (byte) render_screen_original::y#4
Redundant Phi (byte*) render_screen_original::oscr#5 (byte*) render_screen_original::oscr#1
Redundant Phi (byte*) render_screen_original::ocols#5 (byte*) render_screen_original::ocols#1
Redundant Phi (byte) render_playfield::l#3 (byte) render_playfield::l#2
Redundant Phi (byte) render_screen_render#23 (byte) render_screen_render#13
Redundant Phi (byte*) current_piece_gfx#15 (byte*) current_piece_gfx#29
Redundant Phi (byte) current_piece_char#12 (byte) current_piece_char#37
Redundant Phi (byte*) render_moving::screen_line#1 (byte*) render_moving::screen_line#0
Redundant Phi (byte) render_moving::ypos2#5 (byte) render_moving::ypos2#2
Redundant Phi (byte) render_moving::l#3 (byte) render_moving::l#4
Redundant Phi (byte) render_screen_render#41 (byte) render_screen_render#14
Redundant Phi (byte) current_xpos#81 (byte) current_xpos#16
Redundant Phi (byte) render_next::next_piece_char#1 (byte) render_next::next_piece_char#3
Redundant Phi (byte) render_next::l#2 (byte) render_next::l#7
Redundant Phi (byte) irq_sprite_ypos#24 (byte) irq_sprite_ypos#0
Redundant Phi (byte) irq_raster_next#24 (byte) irq_raster_next#0
Redundant Phi (byte) irq_sprite_ypos#22 (byte) irq_sprite_ypos#24
Redundant Phi (byte) irq_raster_next#23 (byte) irq_raster_next#24
Redundant Phi (byte) irq_sprite_ypos#21 (byte) irq_sprite_ypos#22
Redundant Phi (byte) irq_raster_next#22 (byte) irq_raster_next#23
Redundant Phi (byte) irq_sprite_ypos#5 (byte) irq_sprite_ypos#9
Redundant Phi (byte) irq_raster_next#5 (byte) irq_raster_next#10
Redundant Phi (byte) irq_sprite_ptr#12 (byte) irq_sprite_ptr#14
Redundant Phi (byte) render_screen_showing#15 (byte) render_screen_showing#0
Redundant Phi (byte) irq_cnt#15 (byte) irq_cnt#0
Redundant Phi (byte) sprites_irq::raster_sprite_gfx_modify#1 (byte) sprites_irq::raster_sprite_gfx_modify#0
Redundant Phi (byte) irq_sprite_ptr#10 (byte) irq_sprite_ptr#12
Redundant Phi (byte) render_screen_showing#11 (byte) render_screen_showing#15
Redundant Phi (byte) irq_cnt#10 (byte) irq_cnt#15
Redundant Phi (byte) irq_raster_next#11 (byte) irq_raster_next#5
Redundant Phi (byte) irq_sprite_ypos#10 (byte) irq_sprite_ypos#5
Redundant Phi (byte) sprites_irq::toSpritePtr2_return#2 (byte) sprites_irq::toSpritePtr2_return#0
Redundant Phi (byte) sprites_irq::toSpritePtr2_return#3 (byte) sprites_irq::toSpritePtr2_return#1
Redundant Phi (byte) irq_sprite_ypos#18 (byte) irq_sprite_ypos#21
Redundant Phi (byte) irq_raster_next#20 (byte) irq_raster_next#22
Redundant Phi (byte) irq_sprite_ptr#18 (byte) irq_sprite_ptr#0
Redundant Phi (byte) level#44 (byte) level#100
Redundant Phi (byte) level#13 (byte) level#44
Redundant Phi (byte) current_movedown_slow#16 (byte) current_movedown_slow#1
Redundant Phi (byte) play_movement::key_event#1 (byte) play_movement::key_event#0
Redundant Phi (byte) current_movedown_counter#18 (byte) current_movedown_counter#25
Redundant Phi (byte) current_ypos#32 (byte) current_ypos#101
Redundant Phi (word) lines_bcd#22 (word) lines_bcd#32
Redundant Phi (dword) score_bcd#22 (dword) score_bcd#32
Redundant Phi (byte) level#29 (byte) level#101
Redundant Phi (byte) current_movedown_slow#30 (byte) current_movedown_slow#44
Redundant Phi (byte) level_bcd#27 (byte) level_bcd#39
Redundant Phi (byte*) current_piece#24 (byte*) current_piece#37
Redundant Phi (byte) current_piece_char#25 (byte) current_piece_char#103
Redundant Phi (byte) current_orientation#32 (byte) current_orientation#47
Redundant Phi (byte*) current_piece_gfx#31 (byte*) current_piece_gfx#103
Redundant Phi (byte) current_xpos#37 (byte) current_xpos#107
Redundant Phi (byte) game_over#23 (byte) game_over#19
Redundant Phi (byte) next_piece_idx#26 (byte) next_piece_idx#33
Redundant Phi (byte) current_movedown_counter#1 (byte) current_movedown_counter#14
Redundant Phi (byte) current_ypos#1 (byte) current_ypos#19
Redundant Phi (word) lines_bcd#1 (word) lines_bcd#15
Redundant Phi (dword) score_bcd#1 (dword) score_bcd#14
Redundant Phi (byte) level#1 (byte) level#17
Redundant Phi (byte) current_movedown_slow#17 (byte) current_movedown_slow#21
Redundant Phi (byte) level_bcd#1 (byte) level_bcd#17
Redundant Phi (byte*) current_piece#1 (byte*) current_piece#15
Redundant Phi (byte) current_piece_char#1 (byte) current_piece_char#16
Redundant Phi (byte) current_orientation#1 (byte) current_orientation#20
Redundant Phi (byte*) current_piece_gfx#1 (byte*) current_piece_gfx#20
Redundant Phi (byte) current_xpos#1 (byte) current_xpos#22
Redundant Phi (byte) game_over#1 (byte) game_over#15
Redundant Phi (byte) next_piece_idx#1 (byte) next_piece_idx#16
Redundant Phi (byte) current_xpos#18 (byte) current_xpos#26
Redundant Phi (byte) current_orientation#16 (byte) current_orientation#25
Redundant Phi (byte*) current_piece_gfx#17 (byte*) current_piece_gfx#21
Redundant Phi (byte) current_movedown_counter#11 (byte) current_movedown_counter#18
Redundant Phi (byte) play_move_down::key_event#1 (byte) play_move_down::key_event#0
Redundant Phi (byte) current_movedown_slow#19 (byte) current_movedown_slow#30
Redundant Phi (byte) current_ypos#16 (byte) current_ypos#32
Redundant Phi (byte) current_xpos#101 (byte) current_xpos#37
Redundant Phi (byte) current_orientation#18 (byte) current_orientation#32
Redundant Phi (word) lines_bcd#25 (word) lines_bcd#22
Redundant Phi (dword) score_bcd#25 (dword) score_bcd#22
Redundant Phi (byte) level#32 (byte) level#29
Redundant Phi (byte) level_bcd#30 (byte) level_bcd#27
Redundant Phi (byte*) current_piece#27 (byte*) current_piece#24
Redundant Phi (byte) current_piece_char#28 (byte) current_piece_char#25
Redundant Phi (byte*) current_piece_gfx#100 (byte*) current_piece_gfx#31
Redundant Phi (byte) game_over#26 (byte) game_over#23
Redundant Phi (byte) next_piece_idx#29 (byte) next_piece_idx#26
Redundant Phi (word) lines_bcd#14 (word) lines_bcd#17
Redundant Phi (dword) score_bcd#13 (dword) score_bcd#16
Redundant Phi (byte) level#16 (byte) level#19
Redundant Phi (byte) current_movedown_slow#20 (byte) current_movedown_slow#23
Redundant Phi (byte) level_bcd#16 (byte) level_bcd#19
Redundant Phi (byte*) current_piece#14 (byte*) current_piece#18
Redundant Phi (byte) current_piece_char#15 (byte) current_piece_char#18
Redundant Phi (byte) current_orientation#19 (byte) current_orientation#26
Redundant Phi (byte*) current_piece_gfx#19 (byte*) current_piece_gfx#101
Redundant Phi (byte) current_xpos#21 (byte) current_xpos#10
Redundant Phi (byte) current_ypos#18 (byte) current_ypos#24
Redundant Phi (byte) game_over#14 (byte) game_over#16
Redundant Phi (byte) next_piece_idx#15 (byte) next_piece_idx#18
Redundant Phi (byte) play_move_leftright::key_event#1 (byte) play_move_leftright::key_event#0
Redundant Phi (byte) current_xpos#23 (byte) current_xpos#1
Redundant Phi (byte) current_ypos#20 (byte) current_ypos#1
Redundant Phi (byte) current_orientation#21 (byte) current_orientation#1
Redundant Phi (byte*) current_piece#32 (byte*) current_piece#1
Redundant Phi (byte) play_move_rotate::key_event#1 (byte) play_move_rotate::key_event#0
Redundant Phi (byte) current_orientation#23 (byte) current_orientation#1
Redundant Phi (byte) current_xpos#28 (byte) current_xpos#18
Redundant Phi (byte) current_ypos#22 (byte) current_ypos#1
Redundant Phi (byte*) current_piece#16 (byte*) current_piece#1
Redundant Phi (byte*) current_piece_gfx#37 (byte*) current_piece_gfx#1
Redundant Phi (byte) irq_sprite_ypos#14 (byte) irq_sprite_ypos#18
Redundant Phi (byte) irq_raster_next#17 (byte) irq_raster_next#20
Redundant Phi (byte) irq_sprite_ptr#17 (byte) irq_sprite_ptr#18
Redundant Phi (byte*) play_collision::piece_gfx#1 (byte*) play_collision::piece_gfx#2
Redundant Phi (byte) play_collision::ypos2#10 (byte) play_collision::ypos2#2
Redundant Phi (byte) play_collision::l#10 (byte) play_collision::l#6
Redundant Phi (byte) play_collision::xpos#10 (byte) play_collision::col#0
Redundant Phi (byte*) play_collision::playfield_line#1 (byte*) play_collision::playfield_line#0
Redundant Phi (byte) current_ypos#23 (byte) current_ypos#16
Redundant Phi (byte) current_xpos#52 (byte) current_xpos#101
Redundant Phi (byte*) current_piece_gfx#54 (byte*) current_piece_gfx#100
Redundant Phi (byte) current_piece_char#59 (byte) current_piece_char#28
Redundant Phi (byte*) current_piece_gfx#22 (byte*) current_piece_gfx#39
Redundant Phi (byte) current_piece_char#17 (byte) current_piece_char#43
Redundant Phi (byte*) play_lock_current::playfield_line#1 (byte*) play_lock_current::playfield_line#0
Redundant Phi (byte) play_lock_current::ypos2#3 (byte) play_lock_current::ypos2#2
Redundant Phi (byte) play_lock_current::l#2 (byte) play_lock_current::l#6
Redundant Phi (byte) current_xpos#53 (byte) current_xpos#29
Redundant Phi (byte*) current_piece#18 (byte*) current_piece#5
Redundant Phi (byte) current_piece_char#18 (byte) current_piece_char#5
Redundant Phi (byte) current_orientation#26 (byte) current_orientation#69
Redundant Phi (byte*) current_piece_gfx#101 (byte*) current_piece_gfx#74
Redundant Phi (byte) current_xpos#10 (byte) current_xpos#103
Redundant Phi (byte) current_ypos#24 (byte) current_ypos#6
Redundant Phi (byte) game_over#16 (byte) game_over#52
Redundant Phi (byte) play_remove_lines::y#2 (byte) play_remove_lines::y#8
Redundant Phi (byte) play_remove_lines::removed#10 (byte) play_remove_lines::removed#11
Redundant Phi (byte) play_remove_lines::removed#3 (byte) play_remove_lines::removed#8
Redundant Phi (byte) play_update_score::removed#1 (byte) play_update_score::removed#0
Redundant Phi (word) lines_bcd#16 (word) lines_bcd#25
Redundant Phi (dword) score_bcd#15 (dword) score_bcd#25
Redundant Phi (byte) level#35 (byte) level#32
Redundant Phi (byte) current_movedown_slow#39 (byte) current_movedown_slow#19
Redundant Phi (byte) level_bcd#33 (byte) level_bcd#30
Redundant Phi (byte) level#18 (byte) level#22
Redundant Phi (byte) current_movedown_slow#22 (byte) current_movedown_slow#11
Redundant Phi (byte) level_bcd#18 (byte) level_bcd#22
Redundant Phi (byte) level#20 (byte) level#35
Redundant Phi (byte) level_bcd#20 (byte) level_bcd#33
Redundant Phi (byte) level#22 (byte) level#21
Redundant Phi (byte) current_movedown_slow#11 (byte) current_movedown_slow#69
Redundant Phi (byte) level_bcd#22 (byte) level_bcd#64
Redundant Phi (byte) render_screen_show#22 (byte) render_screen_show#0
Redundant Phi (byte) render_screen_render#27 (byte) render_screen_render#0
Redundant Phi (byte) current_movedown_slow#43 (byte) current_movedown_slow#0
Redundant Phi (byte) next_piece_idx#32 (byte) next_piece_idx#0
Redundant Phi (byte*) current_piece#36 (byte*) current_piece#0
Redundant Phi (byte) current_piece_char#33 (byte) current_piece_char#0
Redundant Phi (byte) current_orientation#46 (byte) current_orientation#0
Redundant Phi (byte*) current_piece_gfx#102 (byte*) current_piece_gfx#0
Redundant Phi (byte) current_xpos#106 (byte) current_xpos#0
Redundant Phi (byte) current_ypos#46 (byte) current_ypos#0
Redundant Phi (byte) game_over#30 (byte) game_over#0
Redundant Phi (byte) level#100 (byte) level#0
Redundant Phi (byte) render_screen_showing#17 (byte) render_screen_showing#0
Redundant Phi (byte) keyboard_events_size#33 (byte) keyboard_events_size#0
Redundant Phi (byte) keyboard_modifiers#30 (byte) keyboard_modifiers#0
Redundant Phi (byte) current_movedown_counter#32 (byte) current_movedown_counter#0
Redundant Phi (word) lines_bcd#43 (word) lines_bcd#0
Redundant Phi (dword) score_bcd#43 (dword) score_bcd#0
Redundant Phi (byte) level_bcd#102 (byte) level_bcd#0
Redundant Phi (byte) render_screen_show#14 (byte) render_screen_show#1
Redundant Phi (byte) render_screen_render#16 (byte) render_screen_render#1
Redundant Phi (byte) current_movedown_slow#12 (byte) current_movedown_slow#16
Redundant Phi (byte*) current_piece#19 (byte*) current_piece#18
Redundant Phi (byte) current_piece_char#19 (byte) current_piece_char#18
Redundant Phi (byte) current_orientation#10 (byte) current_orientation#26
Redundant Phi (byte*) current_piece_gfx#10 (byte*) current_piece_gfx#101
Redundant Phi (byte) current_xpos#11 (byte) current_xpos#10
Redundant Phi (byte) current_ypos#25 (byte) current_ypos#24
Redundant Phi (byte) game_over#17 (byte) game_over#16
Redundant Phi (byte) next_piece_idx#19 (byte) next_piece_idx#18
Redundant Phi (byte*) current_piece#20 (byte*) current_piece#18
Redundant Phi (byte) current_piece_char#20 (byte) current_piece_char#18
Redundant Phi (byte) current_orientation#11 (byte) current_orientation#26
Redundant Phi (byte*) current_piece_gfx#11 (byte*) current_piece_gfx#101
Redundant Phi (byte) current_xpos#12 (byte) current_xpos#10
Redundant Phi (byte) current_ypos#26 (byte) current_ypos#24
Redundant Phi (byte) game_over#18 (byte) game_over#16
Redundant Phi (byte) next_piece_idx#20 (byte) next_piece_idx#18
Redundant Phi (byte) render_screen_show#18 (byte) render_screen_show#16
Redundant Phi (byte) render_screen_showing#12 (byte) render_screen_showing#13
Redundant Phi (byte) keyboard_events_size#26 (byte) keyboard_events_size#19
Redundant Phi (byte) keyboard_modifiers#23 (byte) keyboard_modifiers#16
Redundant Phi (byte) game_over#19 (byte) game_over#10
Redundant Phi (byte) current_movedown_counter#25 (byte) current_movedown_counter#16
Redundant Phi (byte) current_ypos#101 (byte) current_ypos#100
Redundant Phi (word) lines_bcd#32 (word) lines_bcd#19
Redundant Phi (dword) score_bcd#32 (dword) score_bcd#18
Redundant Phi (byte) level#101 (byte) level#10
Redundant Phi (byte) current_movedown_slow#44 (byte) current_movedown_slow#14
Redundant Phi (byte) level_bcd#39 (byte) level_bcd#11
Redundant Phi (byte*) current_piece#37 (byte*) current_piece#10
Redundant Phi (byte) current_piece_char#103 (byte) current_piece_char#10
Redundant Phi (byte) current_orientation#47 (byte) current_orientation#13
Redundant Phi (byte*) current_piece_gfx#103 (byte*) current_piece_gfx#114
Redundant Phi (byte) current_xpos#107 (byte) current_xpos#124
Redundant Phi (byte) next_piece_idx#33 (byte) next_piece_idx#10
Redundant Phi (byte) render_screen_render#51 (byte) render_screen_render#18
Redundant Phi (byte) render_screen_showing#3 (byte) render_screen_showing#2
Redundant Phi (byte) keyboard_events_size#17 (byte) keyboard_events_size#13
Redundant Phi (byte) keyboard_modifiers#15 (byte) keyboard_modifiers#14
Redundant Phi (byte) keyboard_events_size#18 (byte) keyboard_events_size#16
Redundant Phi (byte) current_movedown_counter#15 (byte) current_movedown_counter#1
Redundant Phi (byte) current_ypos#10 (byte) current_ypos#1
Redundant Phi (word) lines_bcd#18 (word) lines_bcd#1
Redundant Phi (dword) score_bcd#17 (dword) score_bcd#1
Redundant Phi (byte) level#23 (byte) level#1
Redundant Phi (byte) current_movedown_slow#13 (byte) current_movedown_slow#17
Redundant Phi (byte) level_bcd#10 (byte) level_bcd#1
Redundant Phi (byte*) current_piece#21 (byte*) current_piece#1
Redundant Phi (byte) current_piece_char#21 (byte) current_piece_char#1
Redundant Phi (byte) current_orientation#12 (byte) current_orientation#17
Redundant Phi (byte*) current_piece_gfx#12 (byte*) current_piece_gfx#18
Redundant Phi (byte) current_xpos#13 (byte) current_xpos#19
Redundant Phi (byte) game_over#20 (byte) game_over#1
Redundant Phi (byte) next_piece_idx#21 (byte) next_piece_idx#1
Redundant Phi (byte) main::render#3 (byte) main::render#0
Redundant Phi (byte) render_screen_show#45 (byte) render_screen_show#18
Redundant Phi (byte) render_screen_render#50 (byte) render_screen_render#51
Redundant Phi (byte) current_movedown_slow#81 (byte) current_movedown_slow#44
Redundant Phi (byte*) current_piece#79 (byte*) current_piece#37
Redundant Phi (byte) current_piece_char#82 (byte) current_piece_char#103
Redundant Phi (byte) current_orientation#85 (byte) current_orientation#47
Redundant Phi (byte*) current_piece_gfx#104 (byte*) current_piece_gfx#103
Redundant Phi (byte) current_xpos#108 (byte) current_xpos#107
Redundant Phi (byte) current_ypos#85 (byte) current_ypos#101
Redundant Phi (byte) game_over#70 (byte) game_over#19
Redundant Phi (byte) next_piece_idx#66 (byte) next_piece_idx#33
Redundant Phi (byte) render_screen_showing#29 (byte) render_screen_showing#3
Redundant Phi (byte) keyboard_events_size#52 (byte) keyboard_events_size#18
Redundant Phi (byte) keyboard_modifiers#43 (byte) keyboard_modifiers#15
Redundant Phi (byte) current_movedown_counter#45 (byte) current_movedown_counter#25
Redundant Phi (word) lines_bcd#67 (word) lines_bcd#32
Redundant Phi (dword) score_bcd#65 (dword) score_bcd#32
Redundant Phi (byte) level#84 (byte) level#101
Redundant Phi (byte) level_bcd#77 (byte) level_bcd#39
Redundant Phi (byte) render_screen_render#17 (byte) render_screen_render#11
Redundant Phi (byte) render_screen_show#15 (byte) render_screen_show#13
Redundant Phi (byte) irq_sprite_ypos#9 (byte) irq_sprite_ypos#14
Redundant Phi (byte) irq_raster_next#10 (byte) irq_raster_next#17
Redundant Phi (byte) irq_sprite_ptr#14 (byte) irq_sprite_ptr#17
Redundant Phi (byte) render_screen_show#17 (byte) render_screen_show#16
Redundant Phi (byte) render_screen_render#19 (byte) render_screen_render#18
Redundant Phi (byte) current_movedown_slow#15 (byte) current_movedown_slow#14
Redundant Phi (byte*) current_piece#11 (byte*) current_piece#10
Redundant Phi (byte) current_piece_char#11 (byte) current_piece_char#10
Redundant Phi (byte) current_orientation#14 (byte) current_orientation#13
Redundant Phi (byte*) current_piece_gfx#14 (byte*) current_piece_gfx#114
Redundant Phi (byte) current_xpos#15 (byte) current_xpos#124
Redundant Phi (byte) current_ypos#12 (byte) current_ypos#100
Redundant Phi (byte) game_over#11 (byte) game_over#10
Redundant Phi (byte) next_piece_idx#11 (byte) next_piece_idx#10
Redundant Phi (byte) render_screen_showing#10 (byte) render_screen_showing#13
Redundant Phi (byte) keyboard_events_size#20 (byte) keyboard_events_size#19
Redundant Phi (byte) keyboard_modifiers#17 (byte) keyboard_modifiers#16
Redundant Phi (byte) current_movedown_counter#17 (byte) current_movedown_counter#16
Redundant Phi (word) lines_bcd#20 (word) lines_bcd#19
Redundant Phi (dword) score_bcd#19 (dword) score_bcd#18
Redundant Phi (byte) level#11 (byte) level#10
Redundant Phi (byte) level_bcd#12 (byte) level_bcd#11
Successful SSA optimization Pass2RedundantPhiElimination
Redundant Phi (byte) keyboard_event_scan::row#4 (byte) keyboard_event_scan::row#2
Redundant Phi (byte) render_moving::ypos2#4 (byte) render_moving::ypos2#2
Redundant Phi (byte) render_moving::l#2 (byte) render_moving::l#4
Redundant Phi (byte) render_screen_render#34 (byte) render_screen_render#14
Redundant Phi (byte) current_xpos#60 (byte) current_xpos#16
Redundant Phi (byte*) current_piece_gfx#65 (byte*) current_piece_gfx#29
Redundant Phi (byte) current_piece_char#69 (byte) current_piece_char#37
Redundant Phi (byte) render_screen_show#21 (byte) render_screen_show#16
Redundant Phi (byte) render_screen_render#20 (byte) render_screen_render#18
Redundant Phi (byte) render_screen_showing#16 (byte) render_screen_showing#2
Redundant Phi (byte) keyboard_events_size#32 (byte) keyboard_events_size#16
Redundant Phi (byte) keyboard_modifiers#29 (byte) keyboard_modifiers#14
Successful SSA optimization Pass2RedundantPhiElimination
Simple Condition (bool~) keyboard_event_scan::$13 [85] if((byte) keyboard_event_scan::row_scan#0!=*((byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2)) goto keyboard_event_scan::@9
Simple Condition (bool~) keyboard_event_scan::$25 [94] if((byte) keyboard_event_scan::row#1!=rangelast(0,7)) goto keyboard_event_scan::@8
Simple Condition (bool~) keyboard_event_scan::$18 [100] if((byte~) keyboard_event_scan::$16==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@12
Simple Condition (bool~) keyboard_event_scan::$24 [105] if((byte) keyboard_event_scan::col#1!=rangelast(0,7)) goto keyboard_event_scan::@11
Simple Condition (bool~) keyboard_event_scan::$20 [109] if((byte) keyboard_events_size#10==(byte/signed byte/word/signed word/dword/signed dword) 8) goto keyboard_event_scan::@13
Simple Condition (bool~) keyboard_event_scan::$22 [115] if((byte) keyboard_event_scan::event_type#0==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@14
Simple Condition (bool~) keyboard_event_scan::$2 [134] if((byte~) keyboard_event_scan::$0==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@1
Simple Condition (bool~) keyboard_event_scan::$5 [143] if((byte~) keyboard_event_scan::$3==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@2
Simple Condition (bool~) keyboard_event_scan::$8 [155] if((byte~) keyboard_event_scan::$6==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@3
Simple Condition (bool~) keyboard_event_scan::$11 [167] if((byte~) keyboard_event_scan::$9==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@4
Simple Condition (bool~) keyboard_event_get::$0 [190] if((byte) keyboard_events_size#13==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_get::@1
Simple Condition (bool~) render_init::$15 [289] if((byte) render_init::i#1!=rangelast(0,render_init::$12)) goto render_init::@1
Simple Condition (bool~) render_show::$0 [299] if((byte) render_screen_show#16==(byte/signed byte/word/signed word/dword/signed dword) 0) goto render_show::@1
Simple Condition (bool~) render_score::$0 [356] if((byte) render_screen_render#18==(byte/signed byte/word/signed word/dword/signed dword) 0) goto render_score::@1
Simple Condition (bool~) render_bcd::$2 [421] if((byte) render_bcd::only_low#6!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto render_bcd::@1
Simple Condition (bool~) render_screen_original::$4 [452] if((byte) render_screen_original::x#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto render_screen_original::@2
Simple Condition (bool~) render_screen_original::$5 [462] if((byte) render_screen_original::x#2!=(byte/signed byte/word/signed word/dword/signed dword) $24) goto render_screen_original::@4
Simple Condition (bool~) render_screen_original::$6 [470] if((byte) render_screen_original::x#3!=(byte/signed byte/word/signed word/dword/signed dword) $28) goto render_screen_original::@6
Simple Condition (bool~) render_screen_original::$7 [474] if((byte) render_screen_original::y#1!=rangelast(0,$18)) goto render_screen_original::@1
Simple Condition (bool~) render_playfield::$5 [493] if((byte) render_playfield::c#1!=rangelast(0,render_playfield::$4)) goto render_playfield::@2
Simple Condition (bool~) render_playfield::$6 [497] if((byte) render_playfield::l#1!=rangelast(2,render_playfield::$1)) goto render_playfield::@1
Simple Condition (bool~) render_moving::$1 [506] if((byte) render_moving::ypos2#2>(byte/signed byte/word/signed word/dword/signed dword) 2) goto render_moving::@2
Simple Condition (bool~) render_moving::$6 [518] if((byte) render_moving::l#1!=rangelast(0,3)) goto render_moving::@1
Simple Condition (bool~) render_moving::$4 [524] if((byte) render_moving::current_cell#0==(byte/signed byte/word/signed word/dword/signed dword) 0) goto render_moving::@5
Simple Condition (bool~) render_moving::$5 [529] if((byte) render_moving::c#1!=rangelast(0,3)) goto render_moving::@4
Simple Condition (bool~) render_next::$3 [540] if((byte) render_screen_render#15==(byte/signed byte/word/signed word/dword/signed dword) 0) goto render_next::@1
Simple Condition (bool~) render_next::$7 [558] if((byte) render_next::cell#0!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto render_next::@7
Simple Condition (bool~) render_next::$8 [567] if((byte) render_next::c#1!=rangelast(0,3)) goto render_next::@6
Simple Condition (bool~) render_next::$9 [572] if((byte) render_next::l#1!=rangelast(0,3)) goto render_next::@5
Simple Condition (bool~) sprites_init::$4 [593] if((byte) sprites_init::s#1!=rangelast(0,3)) goto sprites_init::@1
Simple Condition (bool~) sprites_irq::$4 [639] if(*((byte*) RASTER#0)<(byte) sprites_irq::raster_sprite_gfx_modify#0) goto sprites_irq::@11
Simple Condition (bool~) sprites_irq::$1 [643] if((byte) render_screen_showing#0==(byte/signed byte/word/signed word/dword/signed dword) 0) goto sprites_irq::@1
Simple Condition (bool~) sprites_irq::$2 [661] if((byte) irq_cnt#1==(byte/signed byte/word/signed word/dword/signed dword) 9) goto sprites_irq::@3
Simple Condition (bool~) sprites_irq::$3 [678] if((byte) irq_cnt#1==(byte/signed byte/word/signed word/dword/signed dword) $a) goto sprites_irq::@4
Simple Condition (bool~) play_init::$3 [756] if((byte) play_init::j#1!=rangelast(0,play_init::$1)) goto play_init::@1
Simple Condition (bool~) play_init::$5 [768] if((byte) play_init::b#1!=rangelast(0,4)) goto play_init::@3
Simple Condition (bool~) play_movement::$2 [796] if((byte) game_over#15==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_movement::@1
Simple Condition (bool~) play_move_down::$1 [838] if((byte) play_move_down::key_event#0!=(byte) KEY_SPACE#0) goto play_move_down::@1
Simple Condition (bool~) play_move_down::$4 [847] if((byte~) play_move_down::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_move_down::@2
Simple Condition (bool~) play_move_down::$6 [853] if((byte) current_movedown_counter#12<(byte) current_movedown_slow#14) goto play_move_down::@3
Simple Condition (bool~) play_move_down::$10 [857] if((byte) current_movedown_counter#12<(byte) current_movedown_fast#0) goto play_move_down::@13
Simple Condition (bool~) play_move_down::$8 [864] if((byte) play_move_down::movedown#6==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_move_down::@4
Simple Condition (bool~) play_move_down::$13 [879] if((byte~) play_move_down::$12==(byte) COLLISION_NONE#0) goto play_move_down::@14
Simple Condition (bool~) play_move_leftright::$0 [930] if((byte) play_move_leftright::key_event#0==(byte) KEY_COMMA#0) goto play_move_leftright::@1
Simple Condition (bool~) play_move_leftright::$10 [942] if((byte~) play_move_leftright::$8!=(byte) COLLISION_NONE#0) goto play_move_leftright::@13
Simple Condition (bool~) play_move_leftright::$2 [946] if((byte) play_move_leftright::key_event#0!=(byte) KEY_DOT#0) goto play_move_leftright::@2
Simple Condition (bool~) play_move_leftright::$6 [959] if((byte~) play_move_leftright::$4!=(byte) COLLISION_NONE#0) goto play_move_leftright::@12
Simple Condition (bool~) play_move_rotate::$0 [977] if((byte) play_move_rotate::key_event#0==(byte) KEY_Z#0) goto play_move_rotate::@1
Simple Condition (bool~) play_move_rotate::$1 [984] if((byte) play_move_rotate::key_event#0==(byte) KEY_X#0) goto play_move_rotate::@2
Simple Condition (bool~) play_move_rotate::$4 [1006] if((byte~) play_move_rotate::$2!=(byte) COLLISION_NONE#0) goto play_move_rotate::@5
Simple Condition (bool~) play_collision::$3 [1035] if(*((byte*) play_collision::piece_gfx#2 + (byte) play_collision::i#2)==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_collision::@3
Simple Condition (bool~) play_collision::$14 [1040] if((byte) play_collision::c#1!=rangelast(0,3)) goto play_collision::@2
Simple Condition (bool~) play_collision::$6 [1045] if((byte) play_collision::ypos2#2<(byte/signed word/word/dword/signed dword~) play_collision::$4) goto play_collision::@4
Simple Condition (bool~) play_collision::$9 [1050] if((byte~) play_collision::$7==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_collision::@5
Simple Condition (bool~) play_collision::$11 [1058] if((byte) play_collision::col#2<(byte) PLAYFIELD_COLS#0) goto play_collision::@6
Simple Condition (bool~) play_collision::$13 [1063] if(*((byte*) play_collision::playfield_line#0 + (byte) play_collision::col#2)==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_collision::@7
Simple Condition (bool~) play_collision::$15 [1071] if((byte) play_collision::l#1!=rangelast(0,3)) goto play_collision::@1
Simple Condition (bool~) play_lock_current::$2 [1086] if(*((byte*) current_piece_gfx#39 + (byte) play_lock_current::i#2)==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_lock_current::@3
Simple Condition (bool~) play_lock_current::$3 [1091] if((byte) play_lock_current::c#1!=rangelast(0,3)) goto play_lock_current::@2
Simple Condition (bool~) play_lock_current::$4 [1098] if((byte) play_lock_current::l#1!=rangelast(0,3)) goto play_lock_current::@1
Simple Condition (bool~) play_spawn_current::$4 [1119] if((byte~) play_spawn_current::$2!=(byte) COLLISION_PLAYFIELD#0) goto play_spawn_current::@1
Simple Condition (bool~) play_spawn_current::$5 [1126] if((byte) play_spawn_current::piece_idx#2==(byte/signed byte/word/signed word/dword/signed dword) 7) goto play_spawn_current::@4
Simple Condition (bool~) play_remove_lines::$7 [1166] if((byte) play_remove_lines::c#0!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_remove_lines::@3
Simple Condition (bool~) play_remove_lines::$8 [1172] if((byte) play_remove_lines::x#1!=rangelast(0,play_remove_lines::$5)) goto play_remove_lines::@2
Simple Condition (bool~) play_remove_lines::$10 [1178] if((byte) play_remove_lines::full#2!=(byte/signed byte/word/signed word/dword/signed dword) 1) goto play_remove_lines::@7
Simple Condition (bool~) play_remove_lines::$12 [1182] if((byte) play_remove_lines::y#1!=rangelast(0,play_remove_lines::$4)) goto play_remove_lines::@1
Simple Condition (bool~) play_remove_lines::$13 [1189] if((byte) play_remove_lines::w#6!=(byte/word/signed word/dword/signed dword) $ff) goto play_remove_lines::@10
Simple Condition (bool~) play_update_score::$1 [1201] if((byte) play_update_score::removed#0==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_update_score::@1
Simple Condition (bool~) play_update_score::$8 [1218] if((byte) play_update_score::lines_before#0==(byte) play_update_score::lines_after#0) goto play_update_score::@4
Simple Condition (bool~) play_increase_level::$0 [1236] if((byte) level#21>(byte/signed byte/word/signed word/dword/signed dword) $1d) goto play_increase_level::@1
Simple Condition (bool~) play_increase_level::$3 [1246] if((byte~) play_increase_level::$1!=(byte/signed byte/word/signed word/dword/signed dword) $a) goto play_increase_level::@3
Simple Condition (bool~) play_increase_level::$5 [1258] if((byte) play_increase_level::b#1!=rangelast(0,4)) goto play_increase_level::@7
Simple Condition (bool~) main::$10 [1312] if(*((byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) $ff) goto main::@5
Simple Condition (bool~) main::$14 [1330] if((byte) game_over#10==(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@11
Simple Condition (bool~) main::$17 [1359] if((byte) main::render#2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@20
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte*) PROCPORT_DDR#0 = ((byte*))0
Constant (const byte) PROCPORT_DDR_MEMORY_MASK#0 = 7
Constant (const byte*) PROCPORT#0 = ((byte*))1
Constant (const byte) PROCPORT_RAM_IO#0 = $35
Constant (const word) SPRITE_PTRS#0 = $3f8
Constant (const byte*) SPRITES_XPOS#0 = ((byte*))$d000
Constant (const byte*) SPRITES_YPOS#0 = ((byte*))$d001
Constant (const byte*) RASTER#0 = ((byte*))$d012
Constant (const byte*) SPRITES_ENABLE#0 = ((byte*))$d015
Constant (const byte*) SPRITES_EXPAND_Y#0 = ((byte*))$d017
Constant (const byte*) SPRITES_MC#0 = ((byte*))$d01c
Constant (const byte*) SPRITES_EXPAND_X#0 = ((byte*))$d01d
Constant (const byte*) BORDERCOL#0 = ((byte*))$d020
Constant (const byte*) BGCOL1#0 = ((byte*))$d021
Constant (const byte*) BGCOL2#0 = ((byte*))$d022
Constant (const byte*) BGCOL3#0 = ((byte*))$d023
Constant (const byte*) BGCOL4#0 = ((byte*))$d024
Constant (const byte*) SPRITES_COLS#0 = ((byte*))$d027
Constant (const byte*) VIC_CONTROL#0 = ((byte*))$d011
Constant (const byte*) D011#0 = ((byte*))$d011
Constant (const byte) VIC_ECM#0 = $40
Constant (const byte) VIC_DEN#0 = $10
Constant (const byte) VIC_RSEL#0 = 8
Constant (const byte*) D018#0 = ((byte*))$d018
Constant (const byte*) IRQ_STATUS#0 = ((byte*))$d019
Constant (const byte*) IRQ_ENABLE#0 = ((byte*))$d01a
Constant (const byte) IRQ_RASTER#0 = 1
Constant (const byte*) COLS#0 = ((byte*))$d800
Constant (const byte*) CIA1_PORT_A#0 = ((byte*))$dc00
Constant (const byte*) CIA1_PORT_B#0 = ((byte*))$dc01
Constant (const byte*) CIA1_INTERRUPT#0 = ((byte*))$dc0d
Constant (const byte) CIA_INTERRUPT_CLEAR#0 = $7f
Constant (const byte*) CIA2_PORT_A#0 = ((byte*))$dd00
Constant (const byte*) CIA2_PORT_A_DDR#0 = ((byte*))$dd02
Constant (const void()**) HARDWARE_IRQ#0 = ((void()**))$fffe
Constant (const byte) BLACK#0 = 0
Constant (const byte) RED#0 = 2
Constant (const byte) CYAN#0 = 3
Constant (const byte) PURPLE#0 = 4
Constant (const byte) GREEN#0 = 5
Constant (const byte) BLUE#0 = 6
Constant (const byte) ORANGE#0 = 8
Constant (const byte) PINK#0 = $a
Constant (const byte) DARK_GREY#0 = $b
Constant (const byte) GREY#0 = $c
Constant (const byte) LIGHT_GREEN#0 = $d
Constant (const byte) LIGHT_BLUE#0 = $e
Constant (const byte) KEY_Z#0 = $c
Constant (const byte) KEY_LSHIFT#0 = $f
Constant (const byte) KEY_X#0 = $17
Constant (const byte) KEY_DOT#0 = $2c
Constant (const byte) KEY_COMMA#0 = $2f
Constant (const byte) KEY_RSHIFT#0 = $34
Constant (const byte) KEY_CTRL#0 = $3a
Constant (const byte) KEY_SPACE#0 = $3c
Constant (const byte) KEY_COMMODORE#0 = $3d
Constant (const byte[8]) keyboard_matrix_row_bitmask#0 = { $fe, $fd, $fb, $f7, $ef, $df, $bf, $7f }
Constant (const byte[8]) keyboard_matrix_col_bitmask#0 = { 1, 2, 4, 8, $10, $20, $40, $80 }
Constant (const byte[8]) keyboard_events#0 = { fill( 8, 0) }
Constant (const byte) keyboard_events_size#0 = 0
Constant (const byte) keyboard_modifiers#0 = 0
Constant (const byte) KEY_MODIFIER_LSHIFT#0 = 1
Constant (const byte) KEY_MODIFIER_RSHIFT#0 = 2
Constant (const byte) KEY_MODIFIER_CTRL#0 = 4
Constant (const byte) KEY_MODIFIER_COMMODORE#0 = 8
Constant (const byte[8]) keyboard_scan_values#0 = { fill( 8, 0) }
Constant (const byte) keyboard_event_scan::keycode#0 = 0
Constant (const byte) keyboard_event_scan::row#0 = 0
Constant (const byte) keyboard_event_scan::col#0 = 0
Constant (const byte) keyboard_modifiers#1 = 0
Constant (const byte) keyboard_event_get::return#0 = $ff
Constant (const word*) SID_VOICE3_FREQ#0 = ((word*))$d40e
Constant (const byte*) SID_VOICE3_CONTROL#0 = ((byte*))$d412
Constant (const byte) SID_CONTROL_NOISE#0 = $80
Constant (const byte*) SID_VOICE3_OSC#0 = ((byte*))$d41b
Constant (const byte*) PLAYFIELD_SCREEN_1#0 = ((byte*))$400
Constant (const byte*) PLAYFIELD_SCREEN_2#0 = ((byte*))$2c00
Constant (const byte*) PLAYFIELD_SCREEN_ORIGINAL#0 = ((byte*))$1800
Constant (const byte*) PLAYFIELD_COLORS_ORIGINAL#0 = ((byte*))$1c00
Constant (const byte*) PLAYFIELD_SPRITES#0 = ((byte*))$2000
Constant (const byte*) PLAYFIELD_CHARSET#0 = ((byte*))$2800
Constant (const byte) PLAYFIELD_LINES#0 = $16
Constant (const byte) PLAYFIELD_COLS#0 = $a
Constant (const byte*) current_piece_gfx#0 = 0
Constant (const byte) current_piece_char#0 = 0
Constant (const byte) current_xpos#0 = 0
Constant (const byte) current_ypos#0 = 0
Constant (const byte) render_screen_render#0 = $40
Constant (const byte) render_screen_show#0 = 0
Constant (const dword) score_bcd#0 = 0
Constant (const word) lines_bcd#0 = 0
Constant (const byte) level_bcd#0 = 0
Constant (const byte) level#0 = 0
Constant (const byte) game_over#0 = 0
Constant (const byte/signed byte/word/signed word/dword/signed dword) render_init::$6 = 2*$28
Constant (const byte/signed byte/word/signed word/dword/signed dword) render_init::$9 = 2*$28
Constant (const byte) render_init::i#0 = 0
Constant (const byte) render_screen_show#1 = 0
Constant (const byte) render_screen_render#1 = $40
Constant (const byte) render_show::d018val#0 = 0
Constant (const byte*) render_score::screen#0 = 0
Constant (const dword*) render_score::$1 = &score_bcd#42
Constant (const byte/word/signed word/dword/signed dword) render_score::$3 = $28*5
Constant (const byte) render_bcd::only_low#0 = 0
Constant (const byte) render_bcd::only_low#1 = 0
Constant (const byte) render_bcd::only_low#2 = 0
Constant (const byte/signed byte/word/signed word/dword/signed dword) render_score::$10 = $28*1
Constant (const byte) render_bcd::only_low#3 = 1
Constant (const byte) render_bcd::only_low#4 = 0
Constant (const word/signed word/dword/signed dword) render_score::$17 = $28*$13
Constant (const byte) render_bcd::only_low#5 = 0
Constant (const byte) render_bcd::ZERO_CHAR#0 = $35
Constant (const byte) render_screen_original::SPACE#0 = 0
Constant (const byte/signed byte/word/signed word/dword/signed dword) render_screen_original::$0 = $20*2
Constant (const byte/signed byte/word/signed word/dword/signed dword) render_screen_original::$2 = $20*2
Constant (const byte) render_screen_original::y#0 = 0
Constant (const byte) render_screen_original::x#0 = 0
Constant (const byte) render_playfield::l#0 = 2
Constant (const byte) render_playfield::c#0 = 0
Constant (const byte) render_moving::i#0 = 0
Constant (const byte) render_moving::l#0 = 0
Constant (const byte) render_moving::c#0 = 0
Constant (const word/signed word/dword/signed dword) render_next::$0 = $28*$c
Constant (const byte*) render_next::screen_next_area#0 = 0
Constant (const byte) render_next::l#0 = 0
Constant (const byte) render_next::c#0 = 0
Constant (const byte/signed byte/word/signed word/dword/signed dword) sprites_init::$0 = $f*8
Constant (const byte) sprites_init::s#0 = 0
Constant (const byte) SPRITES_FIRST_YPOS#0 = $31
Constant (const void()*) sprites_irq_init::$0 = &sprites_irq
Constant (const byte/signed byte/word/signed word/dword/signed dword) $8 = 4*4
Constant (const byte[$9]) PIECE_T#0 = { 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 }
Constant (const byte/signed byte/word/signed word/dword/signed dword) $10 = 4*4
Constant (const byte[$11]) PIECE_S#0 = { 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 }
Constant (const byte/signed byte/word/signed word/dword/signed dword) $12 = 4*4
Constant (const byte[$13]) PIECE_Z#0 = { 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 }
Constant (const byte/signed byte/word/signed word/dword/signed dword) $14 = 4*4
Constant (const byte[$15]) PIECE_L#0 = { 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }
Constant (const byte/signed byte/word/signed word/dword/signed dword) $16 = 4*4
Constant (const byte[$17]) PIECE_J#0 = { 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 }
Constant (const byte/signed byte/word/signed word/dword/signed dword) $18 = 4*4
Constant (const byte[$19]) PIECE_O#0 = { 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0 }
Constant (const byte/signed byte/word/signed word/dword/signed dword) $20 = 4*4
Constant (const byte[$21]) PIECE_I#0 = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0 }
Constant (const byte[]) PIECES_CHARS#0 = { $65, $66, $a6, $66, $65, $65, $a6 }
Constant (const byte[]) PIECES_NEXT_CHARS#0 = { $63, $64, $a4, $64, $63, $63, $a4 }
Constant (const byte[]) PIECES_START_X#0 = { 4, 4, 4, 4, 4, 4, 4 }
Constant (const byte[]) PIECES_START_Y#0 = { 1, 1, 1, 1, 1, 0, 1 }
Constant (const byte) next_piece_idx#0 = 0
Constant (const byte*) current_piece#0 = ((byte*))0
Constant (const byte) current_orientation#0 = 0
Constant (const byte[]) MOVEDOWN_SLOW_SPEEDS#0 = { $30, $2b, $26, $21, $1c, $17, $12, $d, 8, 6, 5, 5, 5, 4, 4, 4, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1 }
Constant (const byte) current_movedown_slow#0 = $30
Constant (const byte) current_movedown_fast#0 = $a
Constant (const byte) current_movedown_counter#0 = 0
Constant (const dword[]) SCORE_BASE_BCD#0 = { 0, $40, $100, $300, $1200 }
Constant (const dword[5]) score_add_bcd#0 = { fill( 5, 0) }
Constant (const byte) play_init::idx#0 = 0
Constant (const byte) play_init::j#0 = 0
Constant (const byte) play_init::b#0 = 0
Constant (const byte) play_movement::render#0 = 0
Constant (const byte) play_move_down::movedown#0 = 0
Constant (const byte) play_move_down::return#1 = 0
Constant (const byte) current_movedown_counter#4 = 0
Constant (const byte) play_move_down::return#2 = 1
Constant (const byte) play_move_leftright::return#1 = 1
Constant (const byte) play_move_leftright::return#3 = 0
Constant (const byte) play_move_leftright::return#4 = 1
Constant (const byte) play_move_rotate::orientation#0 = $80
Constant (const byte) play_move_rotate::return#1 = 0
Constant (const byte) play_move_rotate::return#3 = 0
Constant (const byte) play_move_rotate::return#4 = 1
Constant (const byte) COLLISION_NONE#0 = 0
Constant (const byte) COLLISION_PLAYFIELD#0 = 1
Constant (const byte) COLLISION_BOTTOM#0 = 2
Constant (const byte) COLLISION_LEFT#0 = 4
Constant (const byte) COLLISION_RIGHT#0 = 8
Constant (const byte) play_collision::i#0 = 0
Constant (const byte) play_collision::l#0 = 0
Constant (const byte) play_collision::c#0 = 0
Constant (const byte) play_lock_current::i#0 = 0
Constant (const byte) play_lock_current::l#0 = 0
Constant (const byte) play_lock_current::c#0 = 0
Constant (const byte) current_orientation#69 = 0
Constant (const byte) play_spawn_current::piece_idx#0 = 7
Constant (const byte) game_over#5 = 1
Constant (const byte) play_remove_lines::removed#0 = 0
Constant (const byte) play_remove_lines::y#0 = 0
Constant (const byte) play_remove_lines::full#0 = 1
Constant (const byte) play_remove_lines::x#0 = 0
Constant (const byte) play_remove_lines::full#1 = 0
Constant (const byte) current_movedown_slow#9 = 1
Constant (const byte) play_increase_level::b#0 = 0
Constant (const byte) main::render#0 = 0
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte) keyboard_event_pressed::keycode#0 = KEY_LSHIFT#0
Constant (const byte) keyboard_event_pressed::keycode#1 = KEY_RSHIFT#0
Constant (const byte) keyboard_modifiers#2 = keyboard_modifiers#1|KEY_MODIFIER_LSHIFT#0
Constant (const byte) keyboard_event_pressed::keycode#2 = KEY_CTRL#0
Constant (const byte) keyboard_event_pressed::keycode#3 = KEY_COMMODORE#0
Constant (const byte*) PLAYFIELD_SPRITE_PTRS_1#0 = PLAYFIELD_SCREEN_1#0+SPRITE_PTRS#0
Constant (const byte*) PLAYFIELD_SPRITE_PTRS_2#0 = PLAYFIELD_SCREEN_2#0+SPRITE_PTRS#0
Constant (const byte) $3 = PLAYFIELD_LINES#0*PLAYFIELD_COLS#0
Constant (const byte[]) PIECES_COLORS_1#0 = { BLUE#0, GREEN#0, PURPLE#0, BLUE#0, RED#0, LIGHT_GREEN#0, RED#0, BLUE#0, LIGHT_BLUE#0, RED#0, BLUE#0, GREEN#0, PURPLE#0, BLUE#0, RED#0, LIGHT_GREEN#0, RED#0, BLUE#0, LIGHT_BLUE#0, RED#0, BLUE#0, GREEN#0, PURPLE#0, BLUE#0, RED#0, LIGHT_GREEN#0, RED#0, BLUE#0, LIGHT_BLUE#0, RED#0 }
Constant (const byte[]) PIECES_COLORS_2#0 = { CYAN#0, LIGHT_GREEN#0, PINK#0, LIGHT_GREEN#0, LIGHT_GREEN#0, LIGHT_BLUE#0, DARK_GREY#0, PURPLE#0, RED#0, ORANGE#0, CYAN#0, LIGHT_GREEN#0, PINK#0, LIGHT_GREEN#0, LIGHT_GREEN#0, LIGHT_BLUE#0, DARK_GREY#0, PURPLE#0, RED#0, ORANGE#0, CYAN#0, LIGHT_GREEN#0, PINK#0, LIGHT_GREEN#0, LIGHT_GREEN#0, LIGHT_BLUE#0, DARK_GREY#0, PURPLE#0, RED#0, ORANGE#0 }
Constant (const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 = { fill( PLAYFIELD_LINES#0, 0) }
Constant (const byte*[PLAYFIELD_LINES#0]) screen_lines_2#0 = { fill( PLAYFIELD_LINES#0, 0) }
Constant (const byte*) render_init::vicSelectGfxBank1_gfx#0 = PLAYFIELD_CHARSET#0
Constant (const byte) render_init::$1 = VIC_ECM#0|VIC_DEN#0
Constant (const byte*) render_screen_original::screen#0 = PLAYFIELD_SCREEN_1#0
Constant (const byte*) render_screen_original::screen#1 = PLAYFIELD_SCREEN_2#0
Constant (const byte*) render_init::$7 = PLAYFIELD_SCREEN_1#0+render_init::$6
Constant (const byte*) render_init::$10 = PLAYFIELD_SCREEN_2#0+render_init::$9
Constant (const byte/signed word/word/dword/signed dword) render_init::$12 = PLAYFIELD_LINES#0-1
Constant (const byte*) render_show::toD0181_screen#0 = PLAYFIELD_SCREEN_1#0
Constant (const byte*) render_show::toD0181_gfx#0 = PLAYFIELD_CHARSET#0
Constant (const byte*) render_show::toD0182_screen#0 = PLAYFIELD_SCREEN_2#0
Constant (const byte*) render_show::toD0182_gfx#0 = PLAYFIELD_CHARSET#0
Constant (const byte*) render_score::screen#1 = PLAYFIELD_SCREEN_1#0
Constant (const byte*) render_score::screen#2 = PLAYFIELD_SCREEN_2#0
Constant (const byte*) render_score::score_bytes#0 = ((byte*))render_score::$1
Constant (const word) render_score::score_offset#0 = render_score::$3+$1c
Constant (const word) render_score::lines_offset#0 = render_score::$10+$16
Constant (const word) render_score::level_offset#0 = render_score::$17+$1f
Constant (const byte*) render_screen_original::oscr#0 = PLAYFIELD_SCREEN_ORIGINAL#0+render_screen_original::$0
Constant (const byte*) render_screen_original::ocols#0 = PLAYFIELD_COLORS_ORIGINAL#0+render_screen_original::$2
Constant (const byte*) render_screen_original::cols#0 = COLS#0
Constant (const byte) render_playfield::i#0 = PLAYFIELD_COLS#0*2
Constant (const byte/signed word/word/dword/signed dword) render_playfield::$1 = PLAYFIELD_LINES#0-1
Constant (const byte/signed word/word/dword/signed dword) render_playfield::$4 = PLAYFIELD_COLS#0-1
Constant (const word/signed dword/dword/signed word) render_next::$1 = render_next::$0+$18
Constant (const byte) sprites_init::xpos#0 = $18+sprites_init::$0
Constant (const byte/signed word/word/dword/signed dword) $4 = SPRITES_FIRST_YPOS#0+$13
Constant (const byte/signed word/word/dword/signed dword) $5 = SPRITES_FIRST_YPOS#0+$15
Constant (const word) toSpritePtr1_$0#0 = ((word))PLAYFIELD_SPRITES#0
Constant (const byte*) sprites_irq::toSpritePtr2_sprite#0 = PLAYFIELD_SPRITES#0
Constant (const byte/signed word/word/dword/signed dword/signed byte) $9 = $8*4
Constant (const byte/signed word/word/dword/signed dword/signed byte) $11 = $10*4
Constant (const byte/signed word/word/dword/signed dword/signed byte) $13 = $12*4
Constant (const byte/signed word/word/dword/signed dword/signed byte) $15 = $14*4
Constant (const byte/signed word/word/dword/signed dword/signed byte) $17 = $16*4
Constant (const byte/signed word/word/dword/signed dword/signed byte) $19 = $18*4
Constant (const byte/signed word/word/dword/signed dword/signed byte) $21 = $20*4
Constant (const word) $22 = ((word))PIECE_T#0
Constant (const word) $23 = ((word))PIECE_S#0
Constant (const word) $24 = ((word))PIECE_Z#0
Constant (const word) $25 = ((word))PIECE_J#0
Constant (const word) $26 = ((word))PIECE_O#0
Constant (const word) $27 = ((word))PIECE_I#0
Constant (const word) $28 = ((word))PIECE_L#0
Constant (const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 = { fill( PLAYFIELD_LINES#0, 0) }
Constant (const byte/signed word/word/dword/signed dword) $29 = PLAYFIELD_LINES#0+1
Constant (const byte/signed word/word/dword/signed dword) play_init::$1 = PLAYFIELD_LINES#0-1
Constant (const byte) play_init::$0 = PLAYFIELD_COLS#0*PLAYFIELD_LINES#0
Constant (const byte) keyboard_event_pressed::keycode#4 = KEY_SPACE#0
Constant (const byte) play_move_down::movedown#1 = ++play_move_down::movedown#0
Constant (const byte/signed word/word/dword/signed dword) play_collision::$4 = 2*PLAYFIELD_LINES#0
Constant (const byte) play_collision::return#4 = COLLISION_BOTTOM#0
Constant (const byte) play_collision::return#6 = COLLISION_LEFT#0
Constant (const byte) play_collision::return#7 = COLLISION_RIGHT#0
Constant (const byte) play_collision::return#8 = COLLISION_PLAYFIELD#0
Constant (const byte) play_collision::return#9 = COLLISION_NONE#0
Constant (const byte) play_collision::orientation#4 = current_orientation#69
Constant (const byte) play_remove_lines::$0 = PLAYFIELD_LINES#0*PLAYFIELD_COLS#0
Constant (const byte) play_remove_lines::$2 = PLAYFIELD_LINES#0*PLAYFIELD_COLS#0
Constant (const byte/signed word/word/dword/signed dword) play_remove_lines::$4 = PLAYFIELD_LINES#0-1
Constant (const byte/signed word/word/dword/signed dword) play_remove_lines::$5 = PLAYFIELD_COLS#0-1
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte[$3]) playfield#0 = { fill( $3, 0) }
Constant (const word) render_init::vicSelectGfxBank1_toDd001_$0#0 = ((word))render_init::vicSelectGfxBank1_gfx#0
Constant (const byte) render_init::$2 = render_init::$1|VIC_RSEL#0
Constant (const byte*) render_init::li_1#0 = render_init::$7+$10
Constant (const byte*) render_init::li_2#0 = render_init::$10+$10
Constant (const word) render_show::toD0181_$0#0 = ((word))render_show::toD0181_screen#0
Constant (const word) render_show::toD0181_$4#0 = ((word))render_show::toD0181_gfx#0
Constant (const word) render_show::toD0182_$0#0 = ((word))render_show::toD0182_screen#0
Constant (const word) render_show::toD0182_$4#0 = ((word))render_show::toD0182_gfx#0
Constant (const word) render_bcd::offset#0 = render_score::score_offset#0
Constant (const word) render_bcd::offset#1 = render_score::score_offset#0+2
Constant (const word) render_bcd::offset#2 = render_score::score_offset#0+4
Constant (const word) render_bcd::offset#3 = render_score::lines_offset#0
Constant (const word) render_bcd::offset#4 = render_score::lines_offset#0+1
Constant (const word) render_bcd::offset#5 = render_score::level_offset#0
Constant (const word) render_next::next_area_offset#0 = render_next::$1+4
Constant (const byte) IRQ_RASTER_FIRST#0 = $4
Constant (const word/signed dword/dword) toSpritePtr1_$1#0 = toSpritePtr1_$0#0/$40
Constant (const word) sprites_irq::toSpritePtr2_$0#0 = ((word))sprites_irq::toSpritePtr2_sprite#0
Constant (const word[]) PIECES#0 = { $22, $23, $24, $25, $26, $27, $28 }
Constant (const byte[$29]) playfield_lines_idx#0 = { fill( $29, 0) }
Constant (const byte) play_remove_lines::r#0 = play_remove_lines::$0-1
Constant (const byte) play_remove_lines::w#0 = play_remove_lines::$2-1
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte) render_init::vicSelectGfxBank1_toDd001_$1#0 = >render_init::vicSelectGfxBank1_toDd001_$0#0
Constant (const byte/word/dword) render_init::$3 = render_init::$2|3
Constant (const word) render_show::toD0181_$1#0 = render_show::toD0181_$0#0&$3fff
Constant (const byte) render_show::toD0181_$5#0 = >render_show::toD0181_$4#0
Constant (const word) render_show::toD0182_$1#0 = render_show::toD0182_$0#0&$3fff
Constant (const byte) render_show::toD0182_$5#0 = >render_show::toD0182_$4#0
Constant (const byte*) render_next::screen_next_area#1 = PLAYFIELD_SCREEN_1#0+render_next::next_area_offset#0
Constant (const byte*) render_next::screen_next_area#2 = PLAYFIELD_SCREEN_2#0+render_next::next_area_offset#0
Constant (const byte) toSpritePtr1_return#0 = ((byte))toSpritePtr1_$1#0
Constant (const word/signed dword/dword) sprites_irq::toSpritePtr2_$1#0 = sprites_irq::toSpritePtr2_$0#0/$40
Constant (const byte*) play_init::pli#0 = playfield#0
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte/signed word/word/dword/signed dword) render_init::vicSelectGfxBank1_toDd001_$2#0 = render_init::vicSelectGfxBank1_toDd001_$1#0/$40
Constant (const word/signed dword/dword) render_show::toD0181_$2#0 = render_show::toD0181_$1#0*4
Constant (const byte/signed word/word/dword/signed dword) render_show::toD0181_$6#0 = render_show::toD0181_$5#0/4
Constant (const word/signed dword/dword) render_show::toD0182_$2#0 = render_show::toD0182_$1#0*4
Constant (const byte/signed word/word/dword/signed dword) render_show::toD0182_$6#0 = render_show::toD0182_$5#0/4
Constant (const byte/signed word/word/dword/signed dword) $7 = toSpritePtr1_return#0+3
Constant (const byte) sprites_irq::toSpritePtr2_$2#0 = ((byte))sprites_irq::toSpritePtr2_$1#0
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 = 3^render_init::vicSelectGfxBank1_toDd001_$2#0
Constant (const byte/word) render_show::toD0181_$3#0 = >render_show::toD0181_$2#0
Constant (const byte/word/dword) render_show::toD0181_$7#0 = render_show::toD0181_$6#0&$f
Constant (const byte/word) render_show::toD0182_$3#0 = >render_show::toD0182_$2#0
Constant (const byte/word/dword) render_show::toD0182_$7#0 = render_show::toD0182_$6#0&$f
Constant (const byte) sprites_irq::toSpritePtr2_return#0 = sprites_irq::toSpritePtr2_$2#0
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte) render_show::toD0181_return#0 = render_show::toD0181_$3#0|render_show::toD0181_$7#0
Constant (const byte) render_show::toD0182_return#0 = render_show::toD0182_$3#0|render_show::toD0182_$7#0
Constant (const byte) sprites_irq::toSpritePtr2_return#1 = sprites_irq::toSpritePtr2_return#0
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte) sprites_irq::$5 = sprites_irq::toSpritePtr2_return#1
Successful SSA optimization Pass2ConstantIdentification
Consolidated array index constant in *(PIECES_COLORS_1#0+0)
Consolidated array index constant in *(PIECES_COLORS_2#0+0)
Consolidated array index constant in *(render_score::score_bytes#0+2)
Consolidated array index constant in *(render_score::score_bytes#0+1)
Consolidated array index constant in *(render_score::score_bytes#0+0)
Consolidated array index constant in *(SPRITES_YPOS#0+0)
Consolidated array index constant in *(SPRITES_YPOS#0+2)
Consolidated array index constant in *(SPRITES_YPOS#0+4)
Consolidated array index constant in *(SPRITES_YPOS#0+6)
Consolidated array index constant in *(PLAYFIELD_SPRITE_PTRS_1#0+0)
Consolidated array index constant in *(PLAYFIELD_SPRITE_PTRS_1#0+1)
Consolidated array index constant in *(PLAYFIELD_SPRITE_PTRS_1#0+2)
Consolidated array index constant in *(PLAYFIELD_SPRITE_PTRS_1#0+3)
Consolidated array index constant in *(PLAYFIELD_SPRITE_PTRS_2#0+0)
Consolidated array index constant in *(PLAYFIELD_SPRITE_PTRS_2#0+1)
Consolidated array index constant in *(PLAYFIELD_SPRITE_PTRS_2#0+2)
Consolidated array index constant in *(PLAYFIELD_SPRITE_PTRS_2#0+3)
Consolidated array index constant in *(playfield_lines_idx#0+PLAYFIELD_LINES#0)
Consolidated array index constant in *(MOVEDOWN_SLOW_SPEEDS#0+level#0)
Removed zero-constant in assignment play_movement::render#1
Removed zero-constant in assignment current_piece_gfx#74
Successful SSA optimization Pass2ConstantAdditionElimination
if() condition always true - replacing block destination [515] if(true) goto main::@2
Removing PHI-reference to removed block (main::@12) in block main::@19
Removing PHI-reference to removed block (main::@12) in block main::@19
Removing PHI-reference to removed block (main::@12) in block main::@19
Removing PHI-reference to removed block (main::@12) in block main::@19
Removing PHI-reference to removed block (main::@12) in block main::@19
Removing PHI-reference to removed block (main::@12) in block main::@19
Removing PHI-reference to removed block (main::@12) in block main::@19
Removing PHI-reference to removed block (main::@12) in block main::@19
Removing PHI-reference to removed block (main::@12) in block main::@19
Removing PHI-reference to removed block (main::@12) in block main::@19
Removing PHI-reference to removed block (main::@12) in block main::@19
Removing PHI-reference to removed block (main::@12) in block main::@19
Removing PHI-reference to removed block (main::@12) in block main::@19
Removing PHI-reference to removed block (main::@12) in block main::@19
Removing PHI-reference to removed block (main::@12) in block main::@19
if() condition always true - replacing block destination [527] if(true) goto main::@13
Successful SSA optimization Pass2ConstantIfs
Successful SSA optimization PassNEliminateUnusedVars
Successful SSA optimization PassNEliminateUnusedVars
Successful SSA optimization PassNEliminateUnusedVars
Successful SSA optimization PassNEliminateUnusedVars
Successful SSA optimization PassNEliminateUnusedVars
Successful SSA optimization PassNEliminateUnusedVars
Successful SSA optimization PassNEliminateUnusedVars
Successful SSA optimization PassNEliminateUnusedVars
Successful SSA optimization PassNEliminateUnusedVars
Successful SSA optimization PassNEliminateUnusedVars
Eliminating Noop Cast (byte*) render_next::next_piece_gfx#0 ← ((byte*)) *((const word[]) PIECES#0 + (byte/signed word/word/dword/signed dword~) render_next::$4)
Eliminating Noop Cast (byte*) current_piece#5 ← ((byte*)) *((const word[]) PIECES#0 + (byte/signed word/word/dword/signed dword~) play_spawn_current::$0)
Successful SSA optimization Pass2NopCastElimination
Removing unused block main::@return
Successful SSA optimization Pass2EliminateUnusedBlocks
Resolved ranged next value keyboard_event_scan::row#1 ← ++ keyboard_event_scan::row#2 to ++
Resolved ranged comparison value if(keyboard_event_scan::row#1!=rangelast(0,7)) goto keyboard_event_scan::@8 to (byte/signed byte/word/signed word/dword/signed dword) 8
Resolved ranged next value keyboard_event_scan::col#1 ← ++ keyboard_event_scan::col#2 to ++
Resolved ranged comparison value if(keyboard_event_scan::col#1!=rangelast(0,7)) goto keyboard_event_scan::@11 to (byte/signed byte/word/signed word/dword/signed dword) 8
Resolved ranged next value render_init::i#1 ← ++ render_init::i#2 to ++
Resolved ranged comparison value if(render_init::i#1!=rangelast(0,render_init::$12)) goto render_init::@1 to (const byte/signed word/word/dword/signed dword) render_init::$12+(byte/signed byte/word/signed word/dword/signed dword) 1
Resolved ranged next value render_screen_original::y#1 ← ++ render_screen_original::y#6 to ++
Resolved ranged comparison value if(render_screen_original::y#1!=rangelast(0,$18)) goto render_screen_original::@1 to (byte/signed byte/word/signed word/dword/signed dword) $19
Resolved ranged next value render_playfield::c#1 ← ++ render_playfield::c#2 to ++
Resolved ranged comparison value if(render_playfield::c#1!=rangelast(0,render_playfield::$4)) goto render_playfield::@2 to (const byte/signed word/word/dword/signed dword) render_playfield::$4+(byte/signed byte/word/signed word/dword/signed dword) 1
Resolved ranged next value render_playfield::l#1 ← ++ render_playfield::l#2 to ++
Resolved ranged comparison value if(render_playfield::l#1!=rangelast(2,render_playfield::$1)) goto render_playfield::@1 to (const byte/signed word/word/dword/signed dword) render_playfield::$1+(byte/signed byte/word/signed word/dword/signed dword) 1
Resolved ranged next value render_moving::l#1 ← ++ render_moving::l#4 to ++
Resolved ranged comparison value if(render_moving::l#1!=rangelast(0,3)) goto render_moving::@1 to (byte/signed byte/word/signed word/dword/signed dword) 4
Resolved ranged next value render_moving::c#1 ← ++ render_moving::c#2 to ++
Resolved ranged comparison value if(render_moving::c#1!=rangelast(0,3)) goto render_moving::@4 to (byte/signed byte/word/signed word/dword/signed dword) 4
Resolved ranged next value render_next::c#1 ← ++ render_next::c#2 to ++
Resolved ranged comparison value if(render_next::c#1!=rangelast(0,3)) goto render_next::@6 to (byte/signed byte/word/signed word/dword/signed dword) 4
Resolved ranged next value render_next::l#1 ← ++ render_next::l#7 to ++
Resolved ranged comparison value if(render_next::l#1!=rangelast(0,3)) goto render_next::@5 to (byte/signed byte/word/signed word/dword/signed dword) 4
Resolved ranged next value sprites_init::s#1 ← ++ sprites_init::s#2 to ++
Resolved ranged comparison value if(sprites_init::s#1!=rangelast(0,3)) goto sprites_init::@1 to (byte/signed byte/word/signed word/dword/signed dword) 4
Resolved ranged next value play_init::j#1 ← ++ play_init::j#2 to ++
Resolved ranged comparison value if(play_init::j#1!=rangelast(0,play_init::$1)) goto play_init::@1 to (const byte/signed word/word/dword/signed dword) play_init::$1+(byte/signed byte/word/signed word/dword/signed dword) 1
Resolved ranged next value play_init::b#1 ← ++ play_init::b#2 to ++
Resolved ranged comparison value if(play_init::b#1!=rangelast(0,4)) goto play_init::@3 to (byte/signed byte/word/signed word/dword/signed dword) 5
Resolved ranged next value play_collision::c#1 ← ++ play_collision::c#2 to ++
Resolved ranged comparison value if(play_collision::c#1!=rangelast(0,3)) goto play_collision::@2 to (byte/signed byte/word/signed word/dword/signed dword) 4
Resolved ranged next value play_collision::l#1 ← ++ play_collision::l#6 to ++
Resolved ranged comparison value if(play_collision::l#1!=rangelast(0,3)) goto play_collision::@1 to (byte/signed byte/word/signed word/dword/signed dword) 4
Resolved ranged next value play_lock_current::c#1 ← ++ play_lock_current::c#2 to ++
Resolved ranged comparison value if(play_lock_current::c#1!=rangelast(0,3)) goto play_lock_current::@2 to (byte/signed byte/word/signed word/dword/signed dword) 4
Resolved ranged next value play_lock_current::l#1 ← ++ play_lock_current::l#6 to ++
Resolved ranged comparison value if(play_lock_current::l#1!=rangelast(0,3)) goto play_lock_current::@1 to (byte/signed byte/word/signed word/dword/signed dword) 4
Resolved ranged next value play_remove_lines::x#1 ← ++ play_remove_lines::x#2 to ++
Resolved ranged comparison value if(play_remove_lines::x#1!=rangelast(0,play_remove_lines::$5)) goto play_remove_lines::@2 to (const byte/signed word/word/dword/signed dword) play_remove_lines::$5+(byte/signed byte/word/signed word/dword/signed dword) 1
Resolved ranged next value play_remove_lines::y#1 ← ++ play_remove_lines::y#8 to ++
Resolved ranged comparison value if(play_remove_lines::y#1!=rangelast(0,play_remove_lines::$4)) goto play_remove_lines::@1 to (const byte/signed word/word/dword/signed dword) play_remove_lines::$4+(byte/signed byte/word/signed word/dword/signed dword) 1
Resolved ranged next value play_increase_level::b#1 ← ++ play_increase_level::b#2 to ++
Resolved ranged comparison value if(play_increase_level::b#1!=rangelast(0,4)) goto play_increase_level::@7 to (byte/signed byte/word/signed word/dword/signed dword) 5
Rewriting conditional comparison if((byte) render_moving::ypos2#2>(byte/signed byte/word/signed word/dword/signed dword) 2) goto render_moving::@2
Rewriting conditional comparison if((byte) level#21>(byte/signed byte/word/signed word/dword/signed dword) $1d) goto play_increase_level::@1
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) render_init::$13 ← (byte) render_init::i#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) render_init::$14 ← (byte) render_init::i#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) render_playfield::$2 ← (byte) render_playfield::l#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
Rewriting multiplication to use shift (byte) render_moving::ypos2#0 ← (byte) current_ypos#13 * (byte/signed byte/word/signed word/dword/signed dword) 2
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) render_next::$4 ← (byte) next_piece_idx#12 * (byte/signed byte/word/signed word/dword/signed dword) 2
Rewriting multiplication to use shift (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) play_init::$2 ← (byte) play_init::j#2 * (byte/signed byte/word/signed word/dword/signed dword) 2
Rewriting multiplication to use shift (byte) play_init::b4#0 ← (byte) play_init::b#2 * (byte/signed byte/word/signed word/dword/signed dword) 4
Rewriting multiplication to use shift (byte) play_collision::ypos2#0 ← (byte) play_collision::ypos#5 * (byte/signed byte/word/signed word/dword/signed dword) 2
Rewriting multiplication to use shift (byte) play_lock_current::ypos2#0 ← (byte) current_ypos#100 * (byte/signed byte/word/signed word/dword/signed dword) 2
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) play_spawn_current::$0 ← (byte) play_spawn_current::current_piece_idx#0 * (byte/signed byte/word/signed word/dword/signed dword) 2
Rewriting multiplication to use shift (byte/signed word/word/dword/signed dword~) play_update_score::$4 ← (byte) play_update_score::removed#0 * (byte/signed byte/word/signed word/dword/signed dword) 4
Rewriting multiplication to use shift (byte) play_increase_level::b4#0 ← (byte) play_increase_level::b#2 * (byte/signed byte/word/signed word/dword/signed dword) 4
Successful SSA optimization Pass2MultiplyToShiftRewriting
Culled Empty Block (label) @5
Culled Empty Block (label) @9
Culled Empty Block (label) keyboard_event_scan::@9
Culled Empty Block (label) keyboard_event_scan::@13
Culled Empty Block (label) keyboard_event_scan::@4
Culled Empty Block (label) keyboard_event_get::@1
Culled Empty Block (label) @12
Culled Empty Block (label) render_init::vicSelectGfxBank1_toDd001_@return
Culled Empty Block (label) render_init::@5
Culled Empty Block (label) render_init::@2
Culled Empty Block (label) render_show::@1
Culled Empty Block (label) render_show::toD0181_@return
Culled Empty Block (label) render_show::@5
Culled Empty Block (label) render_show::@3
Culled Empty Block (label) render_show::toD0182_@return
Culled Empty Block (label) render_show::@6
Culled Empty Block (label) render_score::@1
Culled Empty Block (label) render_next::@1
Culled Empty Block (label) toSpritePtr1_@return
Culled Empty Block (label) sprites_irq::toSpritePtr2_@return
Culled Empty Block (label) @26
Culled Empty Block (label) play_movement::@2
Culled Empty Block (label) play_move_down::@13
Culled Empty Block (label) play_move_down::@4
Culled Empty Block (label) play_move_down::@22
Culled Empty Block (label) play_move_leftright::@2
Culled Empty Block (label) play_move_leftright::@12
Culled Empty Block (label) play_move_leftright::@3
Culled Empty Block (label) play_move_leftright::@13
Culled Empty Block (label) play_move_rotate::@7
Culled Empty Block (label) play_move_rotate::@5
Culled Empty Block (label) @31
Culled Empty Block (label) play_collision::@15
Culled Empty Block (label) play_collision::@8
Culled Empty Block (label) play_collision::@10
Culled Empty Block (label) play_collision::@7
Culled Empty Block (label) play_collision::@12
Culled Empty Block (label) play_collision::@18
Culled Empty Block (label) play_spawn_current::@4
Culled Empty Block (label) play_spawn_current::sid_rnd1_@return
Culled Empty Block (label) play_remove_lines::@11
Culled Empty Block (label) play_update_score::@1
Culled Empty Block (label) play_update_score::@4
Culled Empty Block (label) play_update_score::@5
Culled Empty Block (label) play_increase_level::@1
Culled Empty Block (label) main::@34
Culled Empty Block (label) main::@2
Culled Empty Block (label) main::@5
Culled Empty Block (label) main::@12
Culled Empty Block (label) main::@20
Culled Empty Block (label) main::@43
Culled Empty Block (label) @40
Successful SSA optimization Pass2CullEmptyBlocks
Alias candidate removed (volatile)(byte) sprites_irq::raster_sprite_gfx_modify#0 = (byte/signed word/word/dword/signed dword~) sprites_irq::$0
Alias (byte) render_screen_showing#1 = (byte) render_screen_showing#2
Alias (byte) play_movement::render#1 = (byte~) play_movement::$0
Alias (byte) main::render#1 = (byte) main::render#2
Successful SSA optimization Pass2AliasElimination
Alias candidate removed (volatile)(byte) sprites_irq::raster_sprite_gfx_modify#0 = (byte/signed word/word/dword/signed dword~) sprites_irq::$0
Self Phi Eliminated (byte) render_screen_render#13
Self Phi Eliminated (byte) render_screen_render#14
Self Phi Eliminated (byte) current_xpos#16
Self Phi Eliminated (byte*) current_piece_gfx#29
Self Phi Eliminated (byte) current_piece_char#37
Self Phi Eliminated (byte) render_next::next_piece_char#3
Self Phi Eliminated (byte) play_collision::col#0
Self Phi Eliminated (byte*) play_collision::piece_gfx#2
Self Phi Eliminated (byte) current_xpos#29
Self Phi Eliminated (byte*) current_piece_gfx#39
Self Phi Eliminated (byte) current_piece_char#43
Self Phi Eliminated (byte) render_screen_show#16
Self Phi Eliminated (byte) render_screen_render#18
Successful SSA optimization Pass2SelfPhiElimination
Redundant Phi (byte) render_screen_render#13 (byte) render_screen_render#22
Redundant Phi (byte) render_screen_render#14 (byte) render_screen_render#33
Redundant Phi (byte) current_xpos#16 (byte) current_xpos#59
Redundant Phi (byte*) current_piece_gfx#29 (byte*) current_piece_gfx#64
Redundant Phi (byte) current_piece_char#37 (byte) current_piece_char#68
Redundant Phi (byte) render_next::next_piece_char#3 (byte) render_next::next_piece_char#0
Redundant Phi (byte) play_collision::col#0 (byte) play_collision::xpos#6
Redundant Phi (byte*) play_collision::piece_gfx#2 (byte*) play_collision::piece_gfx#0
Redundant Phi (byte) current_xpos#29 (byte) current_xpos#124
Redundant Phi (byte*) current_piece_gfx#39 (byte*) current_piece_gfx#114
Redundant Phi (byte) current_piece_char#43 (byte) current_piece_char#10
Redundant Phi (byte) current_movedown_slow#58 (byte) current_movedown_slow#21
Redundant Phi (byte*) current_piece#50 (byte*) current_piece#15
Redundant Phi (byte) current_piece_char#100 (byte) current_piece_char#16
Redundant Phi (byte) current_orientation#100 (byte) current_orientation#17
Redundant Phi (byte*) current_piece_gfx#105 (byte*) current_piece_gfx#18
Redundant Phi (byte) current_xpos#109 (byte) current_xpos#19
Redundant Phi (byte) current_ypos#31 (byte) current_ypos#19
Redundant Phi (byte) game_over#41 (byte) game_over#15
Redundant Phi (byte) next_piece_idx#42 (byte) next_piece_idx#16
Redundant Phi (byte) current_movedown_counter#31 (byte) current_movedown_counter#14
Redundant Phi (word) lines_bcd#42 (word) lines_bcd#15
Redundant Phi (dword) score_bcd#42 (dword) score_bcd#14
Redundant Phi (byte) level#102 (byte) level#17
Redundant Phi (byte) level_bcd#100 (byte) level_bcd#17
Successful SSA optimization Pass2RedundantPhiElimination
Inferred type updated to byte in [76] (byte/signed word/word/dword/signed dword~) render_init::$13 ← (byte) render_init::i#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
Inferred type updated to byte in [78] (byte/signed word/word/dword/signed dword~) render_init::$14 ← (byte) render_init::i#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
Inferred type updated to byte in [158] (byte/signed word/word/dword/signed dword~) render_playfield::$2 ← (byte) render_playfield::l#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
Inferred type updated to byte in [159] (byte/signed word/word/dword/signed dword~) render_playfield::$3 ← (byte) render_screen_render#22 + (byte~) render_playfield::$2
Inferred type updated to byte in [194] (byte/signed word/word/dword/signed dword~) render_next::$4 ← (byte) next_piece_idx#12 << (byte/signed byte/word/signed word/dword/signed dword) 1
Inferred type updated to byte in [280] (byte/signed word/word/dword/signed dword~) play_init::$2 ← (byte) play_init::j#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
Inferred type updated to byte in [420] (byte/signed word/word/dword/signed dword~) play_spawn_current::$0 ← (byte) play_spawn_current::current_piece_idx#0 << (byte/signed byte/word/signed word/dword/signed dword) 1
Inferred type updated to byte in [462] (byte/signed word/word/dword/signed dword~) play_update_score::$4 ← (byte) play_update_score::removed#0 << (byte/signed byte/word/signed word/dword/signed dword) 2
Alias candidate removed (volatile)(byte) sprites_irq::raster_sprite_gfx_modify#0 = (byte/signed word/word/dword/signed dword~) sprites_irq::$0
Inlining constant with var siblings (const byte) keyboard_event_scan::keycode#0
Inlining constant with var siblings (const byte) keyboard_event_scan::row#0
Inlining constant with var siblings (const byte) keyboard_event_scan::col#0
Inlining constant with var siblings (const byte) keyboard_event_pressed::keycode#0
Inlining constant with var siblings (const byte) keyboard_event_pressed::keycode#1
Inlining constant with var siblings (const byte) keyboard_event_pressed::keycode#2
Inlining constant with var siblings (const byte) keyboard_event_pressed::keycode#3
Inlining constant with var siblings (const byte) keyboard_event_pressed::keycode#4
Inlining constant with var siblings (const byte) keyboard_event_get::return#0
Inlining constant with var siblings (const byte) render_init::i#0
Inlining constant with var siblings (const byte*) render_init::li_1#0
Inlining constant with var siblings (const byte*) render_init::li_2#0
Inlining constant with var siblings (const byte*) render_score::screen#1
Inlining constant with var siblings (const byte*) render_score::screen#2
Inlining constant with var siblings (const byte) render_bcd::only_low#0
Inlining constant with var siblings (const byte) render_bcd::only_low#1
Inlining constant with var siblings (const byte) render_bcd::only_low#2
Inlining constant with var siblings (const byte) render_bcd::only_low#3
Inlining constant with var siblings (const byte) render_bcd::only_low#4
Inlining constant with var siblings (const byte) render_bcd::only_low#5
Inlining constant with var siblings (const word) render_bcd::offset#0
Inlining constant with var siblings (const word) render_bcd::offset#1
Inlining constant with var siblings (const word) render_bcd::offset#2
Inlining constant with var siblings (const word) render_bcd::offset#3
Inlining constant with var siblings (const word) render_bcd::offset#4
Inlining constant with var siblings (const word) render_bcd::offset#5
Inlining constant with var siblings (const byte) render_screen_original::y#0
Inlining constant with var siblings (const byte) render_screen_original::x#0
Inlining constant with var siblings (const byte*) render_screen_original::screen#0
Inlining constant with var siblings (const byte*) render_screen_original::screen#1
Inlining constant with var siblings (const byte*) render_screen_original::oscr#0
Inlining constant with var siblings (const byte*) render_screen_original::ocols#0
Inlining constant with var siblings (const byte*) render_screen_original::cols#0
Inlining constant with var siblings (const byte) render_playfield::l#0
Inlining constant with var siblings (const byte) render_playfield::c#0
Inlining constant with var siblings (const byte) render_playfield::i#0
Inlining constant with var siblings (const byte) render_moving::i#0
Inlining constant with var siblings (const byte) render_moving::l#0
Inlining constant with var siblings (const byte) render_moving::c#0
Inlining constant with var siblings (const byte) render_next::l#0
Inlining constant with var siblings (const byte) render_next::c#0
Inlining constant with var siblings (const byte*) render_next::screen_next_area#1
Inlining constant with var siblings (const byte*) render_next::screen_next_area#2
Inlining constant with var siblings (const byte) sprites_init::s#0
Inlining constant with var siblings (const byte) sprites_init::xpos#0
Inlining constant with different constant siblings (const byte) sprites_irq::toSpritePtr2_return#1
Inlining constant with var siblings (const byte) play_init::idx#0
Inlining constant with var siblings (const byte) play_init::j#0
Inlining constant with var siblings (const byte) play_init::b#0
Inlining constant with var siblings (const byte*) play_init::pli#0
Inlining constant with var siblings (const byte) play_move_down::movedown#0
Inlining constant with var siblings (const byte) play_move_down::return#1
Inlining constant with var siblings (const byte) play_move_down::return#2
Inlining constant with var siblings (const byte) play_move_down::movedown#1
Inlining constant with var siblings (const byte) play_move_leftright::return#1
Inlining constant with var siblings (const byte) play_move_leftright::return#3
Inlining constant with var siblings (const byte) play_move_leftright::return#4
Inlining constant with var siblings (const byte) play_move_rotate::return#1
Inlining constant with var siblings (const byte) play_move_rotate::return#3
Inlining constant with var siblings (const byte) play_move_rotate::return#4
Inlining constant with var siblings (const byte) play_collision::i#0
Inlining constant with var siblings (const byte) play_collision::l#0
Inlining constant with var siblings (const byte) play_collision::c#0
Inlining constant with var siblings (const byte) play_collision::return#4
Inlining constant with var siblings (const byte) play_collision::return#6
Inlining constant with var siblings (const byte) play_collision::return#7
Inlining constant with var siblings (const byte) play_collision::return#8
Inlining constant with var siblings (const byte) play_collision::return#9
Inlining constant with var siblings (const byte) play_collision::orientation#4
Inlining constant with var siblings (const byte) play_lock_current::i#0
Inlining constant with var siblings (const byte) play_lock_current::l#0
Inlining constant with var siblings (const byte) play_lock_current::c#0
Inlining constant with var siblings (const byte) play_spawn_current::piece_idx#0
Inlining constant with var siblings (const byte) play_remove_lines::removed#0
Inlining constant with var siblings (const byte) play_remove_lines::y#0
Inlining constant with var siblings (const byte) play_remove_lines::full#0
Inlining constant with var siblings (const byte) play_remove_lines::x#0
Inlining constant with var siblings (const byte) play_remove_lines::full#1
Inlining constant with var siblings (const byte) play_remove_lines::r#0
Inlining constant with var siblings (const byte) play_remove_lines::w#0
Inlining constant with var siblings (const byte) play_increase_level::b#0
Inlining constant with var siblings (const byte) keyboard_events_size#0
Inlining constant with var siblings (const dword) score_bcd#0
Inlining constant with var siblings (const word) lines_bcd#0
Inlining constant with var siblings (const byte) level_bcd#0
Inlining constant with var siblings (const byte) level#0
Inlining constant with var siblings (const byte) game_over#0
Inlining constant with var siblings (const byte) render_screen_show#1
Inlining constant with var siblings (const byte) render_screen_render#1
Inlining constant with var siblings (const byte) next_piece_idx#0
Inlining constant with var siblings (const byte) current_movedown_counter#0
Inlining constant with var siblings (const byte) current_movedown_counter#4
Inlining constant with var siblings (const byte) current_orientation#69
Inlining constant with var siblings (const byte) game_over#5
Inlining constant with var siblings (const byte) current_movedown_slow#9
Constant inlined play_remove_lines::x#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_show::toD0181_$7#0 = >((word))(const byte*) PLAYFIELD_CHARSET#0/(byte/signed byte/word/signed word/dword/signed dword) 4&(byte/signed byte/word/signed word/dword/signed dword) $f
Constant inlined play_init::pli#0 = (const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0
Constant inlined play_move_rotate::return#1 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined play_move_rotate::return#4 = (byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined play_move_rotate::return#3 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined current_movedown_counter#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_score::$17 = (byte/signed byte/word/signed word/dword/signed dword) $28*(byte/signed byte/word/signed word/dword/signed dword) $13
Constant inlined current_movedown_counter#4 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_screen_original::screen#1 = (const byte*) PLAYFIELD_SCREEN_2#0
Constant inlined render_screen_original::screen#0 = (const byte*) PLAYFIELD_SCREEN_1#0
Constant inlined render_screen_original::y#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined current_movedown_slow#9 = (byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined render_show::toD0182_$7#0 = >((word))(const byte*) PLAYFIELD_CHARSET#0/(byte/signed byte/word/signed word/dword/signed dword) 4&(byte/signed byte/word/signed word/dword/signed dword) $f
Constant inlined render_playfield::i#0 = (const byte) PLAYFIELD_COLS#0*(byte/signed byte/word/signed word/dword/signed dword) 2
Constant inlined play_collision::$4 = (byte/signed byte/word/signed word/dword/signed dword) 2*(const byte) PLAYFIELD_LINES#0
Constant inlined render_show::toD0182_$2#0 = ((word))(const byte*) PLAYFIELD_SCREEN_2#0&(word/signed word/dword/signed dword) $3fff*(byte/signed byte/word/signed word/dword/signed dword) 4
Constant inlined render_init::vicSelectGfxBank1_toDd001_$1#0 = >((word))(const byte*) PLAYFIELD_CHARSET#0
Constant inlined render_init::$12 = (const byte) PLAYFIELD_LINES#0-(byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined render_init::$10 = (const byte*) PLAYFIELD_SCREEN_2#0+(byte/signed byte/word/signed word/dword/signed dword) 2*(byte/signed byte/word/signed word/dword/signed dword) $28
Constant inlined play_remove_lines::$0 = (const byte) PLAYFIELD_LINES#0*(const byte) PLAYFIELD_COLS#0
Constant inlined play_remove_lines::$2 = (const byte) PLAYFIELD_LINES#0*(const byte) PLAYFIELD_COLS#0
Constant inlined play_collision::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined play_remove_lines::$4 = (const byte) PLAYFIELD_LINES#0-(byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined render_bcd::offset#0 = (const word) render_score::score_offset#0
Constant inlined current_orientation#69 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_bcd::offset#1 = (const word) render_score::score_offset#0+(byte/signed byte/word/signed word/dword/signed dword) 2
Constant inlined render_screen_original::$0 = (byte/signed byte/word/signed word/dword/signed dword) $20*(byte/signed byte/word/signed word/dword/signed dword) 2
Constant inlined sprites_irq::toSpritePtr2_$0#0 = ((word))(const byte*) PLAYFIELD_SPRITES#0
Constant inlined render_bcd::offset#4 = (const word) render_score::lines_offset#0+(byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined render_bcd::offset#5 = (const word) render_score::level_offset#0
Constant inlined render_bcd::offset#2 = (const word) render_score::score_offset#0+(byte/signed byte/word/signed word/dword/signed dword) 4
Constant inlined render_bcd::offset#3 = (const word) render_score::lines_offset#0
Constant inlined toSpritePtr1_$1#0 = ((word))(const byte*) PLAYFIELD_SPRITES#0/(byte/signed byte/word/signed word/dword/signed dword) $40
Constant inlined render_show::toD0182_gfx#0 = (const byte*) PLAYFIELD_CHARSET#0
Constant inlined render_show::toD0181_$3#0 = >((word))(const byte*) PLAYFIELD_SCREEN_1#0&(word/signed word/dword/signed dword) $3fff*(byte/signed byte/word/signed word/dword/signed dword) 4
Constant inlined render_screen_original::$2 = (byte/signed byte/word/signed word/dword/signed dword) $20*(byte/signed byte/word/signed word/dword/signed dword) 2
Constant inlined render_init::$9 = (byte/signed byte/word/signed word/dword/signed dword) 2*(byte/signed byte/word/signed word/dword/signed dword) $28
Constant inlined play_lock_current::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined play_remove_lines::y#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_init::$7 = (const byte*) PLAYFIELD_SCREEN_1#0+(byte/signed byte/word/signed word/dword/signed dword) 2*(byte/signed byte/word/signed word/dword/signed dword) $28
Constant inlined render_next::screen_next_area#1 = (const byte*) PLAYFIELD_SCREEN_1#0+(const word) render_next::next_area_offset#0
Constant inlined $10 = (byte/signed byte/word/signed word/dword/signed dword) 4*(byte/signed byte/word/signed word/dword/signed dword) 4
Constant inlined render_next::screen_next_area#2 = (const byte*) PLAYFIELD_SCREEN_2#0+(const word) render_next::next_area_offset#0
Constant inlined $11 = (byte/signed byte/word/signed word/dword/signed dword) 4*(byte/signed byte/word/signed word/dword/signed dword) 4*(byte/signed byte/word/signed word/dword/signed dword) 4
Constant inlined render_init::$6 = (byte/signed byte/word/signed word/dword/signed dword) 2*(byte/signed byte/word/signed word/dword/signed dword) $28
Constant inlined $12 = (byte/signed byte/word/signed word/dword/signed dword) 4*(byte/signed byte/word/signed word/dword/signed dword) 4
Constant inlined keyboard_event_scan::col#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined lines_bcd#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_init::$3 = (const byte) VIC_ECM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte/signed byte/word/signed word/dword/signed dword) 3
Constant inlined $13 = (byte/signed byte/word/signed word/dword/signed dword) 4*(byte/signed byte/word/signed word/dword/signed dword) 4*(byte/signed byte/word/signed word/dword/signed dword) 4
Constant inlined $14 = (byte/signed byte/word/signed word/dword/signed dword) 4*(byte/signed byte/word/signed word/dword/signed dword) 4
Constant inlined render_init::$1 = (const byte) VIC_ECM#0|(const byte) VIC_DEN#0
Constant inlined $15 = (byte/signed byte/word/signed word/dword/signed dword) 4*(byte/signed byte/word/signed word/dword/signed dword) 4*(byte/signed byte/word/signed word/dword/signed dword) 4
Constant inlined render_init::$2 = (const byte) VIC_ECM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0
Constant inlined sprites_irq::$5 = (const byte) sprites_irq::toSpritePtr2_return#0
Constant inlined $16 = (byte/signed byte/word/signed word/dword/signed dword) 4*(byte/signed byte/word/signed word/dword/signed dword) 4
Constant inlined $17 = (byte/signed byte/word/signed word/dword/signed dword) 4*(byte/signed byte/word/signed word/dword/signed dword) 4*(byte/signed byte/word/signed word/dword/signed dword) 4
Constant inlined $18 = (byte/signed byte/word/signed word/dword/signed dword) 4*(byte/signed byte/word/signed word/dword/signed dword) 4
Constant inlined $19 = (byte/signed byte/word/signed word/dword/signed dword) 4*(byte/signed byte/word/signed word/dword/signed dword) 4*(byte/signed byte/word/signed word/dword/signed dword) 4
Constant inlined render_show::toD0181_screen#0 = (const byte*) PLAYFIELD_SCREEN_1#0
Constant inlined render_playfield::l#0 = (byte/signed byte/word/signed word/dword/signed dword) 2
Constant inlined render_moving::c#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_show::toD0182_$6#0 = >((word))(const byte*) PLAYFIELD_CHARSET#0/(byte/signed byte/word/signed word/dword/signed dword) 4
Constant inlined render_screen_original::x#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_bcd::only_low#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_bcd::only_low#1 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined $20 = (byte/signed byte/word/signed word/dword/signed dword) 4*(byte/signed byte/word/signed word/dword/signed dword) 4
Constant inlined render_bcd::only_low#2 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_show::toD0182_$5#0 = >((word))(const byte*) PLAYFIELD_CHARSET#0
Constant inlined $21 = (byte/signed byte/word/signed word/dword/signed dword) 4*(byte/signed byte/word/signed word/dword/signed dword) 4*(byte/signed byte/word/signed word/dword/signed dword) 4
Constant inlined keyboard_event_pressed::keycode#4 = (const byte) KEY_SPACE#0
Constant inlined render_bcd::only_low#3 = (byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined $22 = ((word))(const byte[4*4*4]) PIECE_T#0
Constant inlined render_bcd::only_low#4 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_init::vicSelectGfxBank1_toDd001_$2#0 = >((word))(const byte*) PLAYFIELD_CHARSET#0/(byte/signed byte/word/signed word/dword/signed dword) $40
Constant inlined $23 = ((word))(const byte[4*4*4]) PIECE_S#0
Constant inlined render_bcd::only_low#5 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined $24 = ((word))(const byte[4*4*4]) PIECE_Z#0
Constant inlined render_show::toD0182_$1#0 = ((word))(const byte*) PLAYFIELD_SCREEN_2#0&(word/signed word/dword/signed dword) $3fff
Constant inlined sprites_irq_init::$0 = &interrupt(HARDWARE_CLOBBER)(void()) sprites_irq()
Constant inlined $25 = ((word))(const byte[4*4*4]) PIECE_J#0
Constant inlined $26 = ((word))(const byte[4*4*4]) PIECE_O#0
Constant inlined $27 = ((word))(const byte[4*4*4]) PIECE_I#0
Constant inlined game_over#5 = (byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined $28 = ((word))(const byte[4*4*4]) PIECE_L#0
Constant inlined $29 = (const byte) PLAYFIELD_LINES#0+(byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined keyboard_event_pressed::keycode#3 = (const byte) KEY_COMMODORE#0
Constant inlined keyboard_event_pressed::keycode#2 = (const byte) KEY_CTRL#0
Constant inlined render_init::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined keyboard_event_pressed::keycode#1 = (const byte) KEY_RSHIFT#0
Constant inlined keyboard_event_pressed::keycode#0 = (const byte) KEY_LSHIFT#0
Constant inlined sprites_irq::toSpritePtr2_$1#0 = ((word))(const byte*) PLAYFIELD_SPRITES#0/(byte/signed byte/word/signed word/dword/signed dword) $40
Constant inlined play_collision::return#7 = (const byte) COLLISION_RIGHT#0
Constant inlined play_collision::return#6 = (const byte) COLLISION_LEFT#0
Constant inlined play_init::$1 = (const byte) PLAYFIELD_LINES#0-(byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined play_collision::return#4 = (const byte) COLLISION_BOTTOM#0
Constant inlined play_move_down::return#2 = (byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined play_move_down::return#1 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined game_over#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_init::vicSelectGfxBank1_gfx#0 = (const byte*) PLAYFIELD_CHARSET#0
Constant inlined play_collision::return#9 = (const byte) COLLISION_NONE#0
Constant inlined play_collision::return#8 = (const byte) COLLISION_PLAYFIELD#0
Constant inlined render_show::toD0181_$4#0 = ((word))(const byte*) PLAYFIELD_CHARSET#0
Constant inlined toSpritePtr1_$0#0 = ((word))(const byte*) PLAYFIELD_SPRITES#0
Constant inlined render_show::toD0181_$0#0 = ((word))(const byte*) PLAYFIELD_SCREEN_1#0
Constant inlined play_init::$0 = (const byte) PLAYFIELD_COLS#0*(const byte) PLAYFIELD_LINES#0
Constant inlined keyboard_events_size#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_next::l#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined play_remove_lines::r#0 = (const byte) PLAYFIELD_LINES#0*(const byte) PLAYFIELD_COLS#0-(byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined render_show::toD0181_$5#0 = >((word))(const byte*) PLAYFIELD_CHARSET#0
Constant inlined render_screen_render#1 = (byte/signed byte/word/signed word/dword/signed dword) $40
Constant inlined sprites_init::xpos#0 = (byte/signed byte/word/signed word/dword/signed dword) $18+(byte/signed byte/word/signed word/dword/signed dword) $f*(byte/signed byte/word/signed word/dword/signed dword) 8
Constant inlined $3 = (const byte) PLAYFIELD_LINES#0*(const byte) PLAYFIELD_COLS#0
Constant inlined play_lock_current::l#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined $4 = (const byte) IRQ_RASTER_FIRST#0
Constant inlined $5 = (const byte) SPRITES_FIRST_YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) $15
Constant inlined render_show::toD0181_gfx#0 = (const byte*) PLAYFIELD_CHARSET#0
Constant inlined $7 = (const byte) toSpritePtr1_return#0+(byte/signed byte/word/signed word/dword/signed dword) 3
Constant inlined $8 = (byte/signed byte/word/signed word/dword/signed dword) 4*(byte/signed byte/word/signed word/dword/signed dword) 4
Constant inlined $9 = (byte/signed byte/word/signed word/dword/signed dword) 4*(byte/signed byte/word/signed word/dword/signed dword) 4*(byte/signed byte/word/signed word/dword/signed dword) 4
Constant inlined render_playfield::c#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined score_bcd#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined play_spawn_current::piece_idx#0 = (byte/signed byte/word/signed word/dword/signed dword) 7
Constant inlined play_remove_lines::removed#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined play_remove_lines::full#1 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined play_remove_lines::full#0 = (byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined sprites_init::s#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_show::toD0182_$4#0 = ((word))(const byte*) PLAYFIELD_CHARSET#0
Constant inlined render_moving::l#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined play_move_leftright::return#1 = (byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined render_show::toD0182_$0#0 = ((word))(const byte*) PLAYFIELD_SCREEN_2#0
Constant inlined play_move_leftright::return#4 = (byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined play_move_leftright::return#3 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined next_piece_idx#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined keyboard_event_scan::keycode#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined play_collision::c#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined sprites_irq::toSpritePtr2_$2#0 = (const byte) sprites_irq::toSpritePtr2_return#0
Constant inlined render_show::toD0181_$1#0 = ((word))(const byte*) PLAYFIELD_SCREEN_1#0&(word/signed word/dword/signed dword) $3fff
Constant inlined sprites_init::$0 = (byte/signed byte/word/signed word/dword/signed dword) $f*(byte/signed byte/word/signed word/dword/signed dword) 8
Constant inlined render_init::li_2#0 = (const byte*) PLAYFIELD_SCREEN_2#0+(byte/signed byte/word/signed word/dword/signed dword) 2*(byte/signed byte/word/signed word/dword/signed dword) $28+(byte/signed byte/word/signed word/dword/signed dword) $10
Constant inlined play_move_down::movedown#1 = ++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined play_move_down::movedown#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined play_remove_lines::w#0 = (const byte) PLAYFIELD_LINES#0*(const byte) PLAYFIELD_COLS#0-(byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined play_init::j#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_screen_original::ocols#0 = (const byte*) PLAYFIELD_COLORS_ORIGINAL#0+(byte/signed byte/word/signed word/dword/signed dword) $20*(byte/signed byte/word/signed word/dword/signed dword) 2
Constant inlined render_show::toD0181_$6#0 = >((word))(const byte*) PLAYFIELD_CHARSET#0/(byte/signed byte/word/signed word/dword/signed dword) 4
Constant inlined play_lock_current::c#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined sprites_irq::toSpritePtr2_return#1 = (const byte) sprites_irq::toSpritePtr2_return#0
Constant inlined keyboard_event_scan::row#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_playfield::$1 = (const byte) PLAYFIELD_LINES#0-(byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined play_init::b#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_next::c#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_playfield::$4 = (const byte) PLAYFIELD_COLS#0-(byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined play_remove_lines::$5 = (const byte) PLAYFIELD_COLS#0-(byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined level_bcd#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined level#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined play_init::idx#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_next::$1 = (byte/signed byte/word/signed word/dword/signed dword) $28*(byte/signed byte/word/signed word/dword/signed dword) $c+(byte/signed byte/word/signed word/dword/signed dword) $18
Constant inlined render_next::$0 = (byte/signed byte/word/signed word/dword/signed dword) $28*(byte/signed byte/word/signed word/dword/signed dword) $c
Constant inlined play_collision::orientation#4 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_moving::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_show::toD0182_$3#0 = >((word))(const byte*) PLAYFIELD_SCREEN_2#0&(word/signed word/dword/signed dword) $3fff*(byte/signed byte/word/signed word/dword/signed dword) 4
Constant inlined render_init::vicSelectGfxBank1_toDd001_$0#0 = ((word))(const byte*) PLAYFIELD_CHARSET#0
Constant inlined render_show::toD0182_screen#0 = (const byte*) PLAYFIELD_SCREEN_2#0
Constant inlined render_screen_original::oscr#0 = (const byte*) PLAYFIELD_SCREEN_ORIGINAL#0+(byte/signed byte/word/signed word/dword/signed dword) $20*(byte/signed byte/word/signed word/dword/signed dword) 2
Constant inlined render_score::screen#1 = (const byte*) PLAYFIELD_SCREEN_1#0
Constant inlined play_increase_level::b#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_screen_show#1 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_score::screen#2 = (const byte*) PLAYFIELD_SCREEN_2#0
Constant inlined sprites_irq::toSpritePtr2_sprite#0 = (const byte*) PLAYFIELD_SPRITES#0
Constant inlined render_score::$3 = (byte/signed byte/word/signed word/dword/signed dword) $28*(byte/signed byte/word/signed word/dword/signed dword) 5
Constant inlined render_score::$10 = (byte/signed byte/word/signed word/dword/signed dword) $28*(byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined play_collision::l#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_show::toD0181_$2#0 = ((word))(const byte*) PLAYFIELD_SCREEN_1#0&(word/signed word/dword/signed dword) $3fff*(byte/signed byte/word/signed word/dword/signed dword) 4
Constant inlined keyboard_event_get::return#0 = (byte/word/signed word/dword/signed dword) $ff
Constant inlined render_init::li_1#0 = (const byte*) PLAYFIELD_SCREEN_1#0+(byte/signed byte/word/signed word/dword/signed dword) 2*(byte/signed byte/word/signed word/dword/signed dword) $28+(byte/signed byte/word/signed word/dword/signed dword) $10
Constant inlined render_score::$1 = &(dword) score_bcd#14
Constant inlined render_screen_original::cols#0 = (const byte*) COLS#0
Successful SSA optimization Pass2ConstantInlining
Simplifying constant plus zero PIECES_COLORS_1#0+0
Simplifying constant plus zero PIECES_COLORS_2#0+0
Simplifying constant plus zero render_score::score_bytes#0+0
Simplifying constant plus zero SPRITES_YPOS#0+0
Simplifying constant plus zero PLAYFIELD_SPRITE_PTRS_1#0+0
Simplifying constant plus zero PLAYFIELD_SPRITE_PTRS_2#0+0
Simplifying constant plus zero MOVEDOWN_SLOW_SPEEDS#0+0
Simplifying constant integer increment ++0
Successful SSA optimization Pass2ConstantSimplification
Added new block during phi lifting main::@44(between main::@19 and main::@1)
Added new block during phi lifting render_bcd::@3(between render_bcd and render_bcd::@1)
Added new block during phi lifting render_next::@13(between render_next::@11 and render_next::@5)
Added new block during phi lifting render_next::@14(between render_next::@8 and render_next::@6)
Added new block during phi lifting render_moving::@11(between render_moving::@3 and render_moving::@1)
Added new block during phi lifting render_moving::@12(between render_moving::@5 and render_moving::@3)
Added new block during phi lifting render_moving::@13(between render_moving::@5 and render_moving::@4)
Added new block during phi lifting render_playfield::@5(between render_playfield::@3 and render_playfield::@1)
Added new block during phi lifting render_playfield::@6(between render_playfield::@2 and render_playfield::@2)
Added new block during phi lifting play_movement::@8(between play_movement::@5 and play_movement::@return)
Added new block during phi lifting play_move_rotate::@15(between play_move_rotate::@14 and play_move_rotate::@return)
Added new block during phi lifting play_move_rotate::@16(between play_move_rotate::@6 and play_move_rotate::@return)
Fixing phi predecessor for play_move_rotate::return#2 to new block ( play_move_rotate::@14 -> play_move_rotate::@15 ) during phi lifting.
Fixing phi predecessor for play_move_rotate::return#2 to new block ( play_move_rotate::@6 -> play_move_rotate::@16 ) during phi lifting.
Added new block during phi lifting play_collision::@20(between play_collision::@17 and play_collision::@1)
Added new block during phi lifting play_collision::@21(between play_collision::@3 and play_collision::@2)
Added new block during phi lifting play_move_leftright::@16(between play_move_leftright::@14 and play_move_leftright::@return)
Added new block during phi lifting play_move_leftright::@17(between play_move_leftright::@15 and play_move_leftright::@return)
Added new block during phi lifting play_move_leftright::@18(between play_move_leftright::@4 and play_move_leftright::@return)
Fixing phi predecessor for play_move_leftright::return#2 to new block ( play_move_leftright::@14 -> play_move_leftright::@16 ) during phi lifting.
Fixing phi predecessor for play_move_leftright::return#2 to new block ( play_move_leftright::@15 -> play_move_leftright::@17 ) during phi lifting.
Fixing phi predecessor for play_move_leftright::return#2 to new block ( play_move_leftright::@4 -> play_move_leftright::@18 ) during phi lifting.
Added new block during phi lifting play_move_down::@23(between play_move_down::@6 and play_move_down::@2)
Added new block during phi lifting play_move_down::@24(between play_move_down::@17 and play_move_down::@2)
Added new block during phi lifting play_move_down::@25(between play_move_down::@2 and play_move_down::@3)
Added new block during phi lifting play_move_down::@26(between play_move_down::@3 and play_move_down::@return)
Fixing phi predecessor for play_move_down::return#3 to new block ( play_move_down::@3 -> play_move_down::@26 ) during phi lifting.
Added new block during phi lifting play_spawn_current::@11(between play_spawn_current::@10 and play_spawn_current::@1)
Added new block during phi lifting play_update_score::@6(between play_update_score and play_update_score::@return)
Added new block during phi lifting play_update_score::@7(between play_update_score::@2 and play_update_score::@return)
Added new block during phi lifting play_increase_level::@9(between play_increase_level::@2 and play_increase_level::@3)
Added new block during phi lifting play_increase_level::@10(between play_increase_level::@7 and play_increase_level::@7)
Added new block during phi lifting play_remove_lines::@16(between play_remove_lines::@7 and play_remove_lines::@1)
Added new block during phi lifting play_remove_lines::@17(between play_remove_lines::@3 and play_remove_lines::@2)
Added new block during phi lifting play_remove_lines::@18(between play_remove_lines::@2 and play_remove_lines::@3)
Added new block during phi lifting play_remove_lines::@19(between play_remove_lines::@5 and play_remove_lines::@7)
Added new block during phi lifting play_remove_lines::@20(between play_remove_lines::@7 and play_remove_lines::@9)
Added new block during phi lifting play_lock_current::@7(between play_lock_current::@5 and play_lock_current::@1)
Added new block during phi lifting play_lock_current::@8(between play_lock_current::@3 and play_lock_current::@2)
Added new block during phi lifting keyboard_event_get::@7(between keyboard_event_get and keyboard_event_get::@return)
Fixing phi predecessor for keyboard_event_get::return#2 to new block ( keyboard_event_get -> keyboard_event_get::@7 ) during phi lifting.
Added new block during phi lifting keyboard_event_scan::@30(between keyboard_event_scan::@10 and keyboard_event_scan::@8)
Added new block during phi lifting keyboard_event_scan::@31(between keyboard_event_scan::@12 and keyboard_event_scan::@11)
Added new block during phi lifting keyboard_event_scan::@32(between keyboard_event_scan::@25 and keyboard_event_scan::@11)
Fixing phi predecessor for keyboard_event_scan::col#2 to new block ( keyboard_event_scan::@25 -> keyboard_event_scan::@32 ) during phi lifting.
Added new block during phi lifting keyboard_event_scan::@33(between keyboard_event_scan::@11 and keyboard_event_scan::@12)
Added new block during phi lifting keyboard_event_scan::@34(between keyboard_event_scan::@16 and keyboard_event_scan::@12)
Added new block during phi lifting play_init::@5(between play_init::@1 and play_init::@1)
Added new block during phi lifting play_init::@6(between play_init::@3 and play_init::@3)
Added new block during phi lifting sprites_init::@3(between sprites_init::@1 and sprites_init::@1)
Added new block during phi lifting render_init::@6(between render_init::@1 and render_init::@1)
Added new block during phi lifting render_screen_original::@9(between render_screen_original::@7 and render_screen_original::@1)
Added new block during phi lifting render_screen_original::@10(between render_screen_original::@2 and render_screen_original::@2)
Added new block during phi lifting render_screen_original::@11(between render_screen_original::@2 and render_screen_original::@4)
Added new block during phi lifting render_screen_original::@12(between render_screen_original::@4 and render_screen_original::@4)
Added new block during phi lifting render_screen_original::@13(between render_screen_original::@4 and render_screen_original::@6)
Added new block during phi lifting render_screen_original::@14(between render_screen_original::@6 and render_screen_original::@6)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of toSpritePtr1
Adding NOP phi() at start of @38
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@26
Adding NOP phi() at start of main::@27
Adding NOP phi() at start of main::@28
Adding NOP phi() at start of main::@29
Adding NOP phi() at start of main::@31
Adding NOP phi() at start of main::@6
Adding NOP phi() at start of main::@35
Adding NOP phi() at start of main::@36
Adding NOP phi() at start of main::@41
Adding NOP phi() at start of main::@42
Adding NOP phi() at start of render_score::@3
Adding NOP phi() at start of render_next::@3
Adding NOP phi() at start of play_move_down::@5
Adding NOP phi() at start of play_move_down::@10
Adding NOP phi() at start of play_move_down::@19
Adding NOP phi() at start of play_spawn_current::@2
Adding NOP phi() at start of play_update_score::@3
Adding NOP phi() at start of play_remove_lines
Adding NOP phi() at start of play_remove_lines::@4
Adding NOP phi() at start of keyboard_event_scan::@23
Adding NOP phi() at start of keyboard_event_scan::@24
Adding NOP phi() at start of keyboard_event_scan::@1
Adding NOP phi() at start of keyboard_event_scan::@5
Adding NOP phi() at start of keyboard_event_scan::@2
Adding NOP phi() at start of keyboard_event_scan::@6
Adding NOP phi() at start of keyboard_event_scan::@3
Adding NOP phi() at start of keyboard_event_scan::@7
Adding NOP phi() at start of render_show::toD0182
Adding NOP phi() at start of render_show::toD0181
Adding NOP phi() at start of play_init
Adding NOP phi() at start of render_init
Adding NOP phi() at start of render_init::vicSelectGfxBank1_toDd001
Adding NOP phi() at start of render_init::@4
Adding NOP phi() at start of sprites_irq::toSpritePtr2
CALL GRAPH
Calls in [] to main:12
Calls in [main] to sid_rnd_init:15 render_init:17 sprites_init:19 sprites_irq_init:21 play_init:23 play_spawn_current:25 play_spawn_current:28 render_playfield:30 render_moving:35 render_next:37 render_show:49 keyboard_event_scan:51 keyboard_event_get:53 play_movement:59 render_playfield:64 render_moving:70 render_next:73 render_score:75 render_screen_swap:77
Calls in [render_score] to render_bcd:120 render_bcd:125 render_bcd:130 render_bcd:135 render_bcd:140 render_bcd:145
Calls in [play_movement] to play_move_down:245 play_move_leftright:256 play_move_rotate:261
Calls in [play_move_rotate] to play_collision:286
Calls in [play_move_leftright] to play_collision:338 play_collision:355
Calls in [play_move_down] to keyboard_event_pressed:366 play_collision:386 play_lock_current:391 play_remove_lines:393 play_update_score:397 play_spawn_current:400
Calls in [play_spawn_current] to play_collision:472
Calls in [play_update_score] to play_increase_level:499
Calls in [keyboard_event_scan] to keyboard_matrix_read:619 keyboard_event_pressed:630 keyboard_event_pressed:636 keyboard_event_pressed:642 keyboard_event_pressed:648
Calls in [render_init] to render_screen_original:754 render_screen_original:756
Created 172 initial phi equivalence classes
Coalesced [26] next_piece_idx#90 ← next_piece_idx#18
Coalesced [27] game_over#98 ← game_over#52
Not coalescing [31] current_ypos#106 ← current_ypos#6
Not coalescing [32] current_xpos#130 ← current_xpos#103
Not coalescing [33] current_piece_gfx#120 ← current_piece_gfx#74
Not coalescing [34] current_piece_char#108 ← current_piece_char#5
Not coalescing [36] next_piece_idx#84 ← next_piece_idx#18
Coalesced [38] current_movedown_slow#95 ← current_movedown_slow#1
Coalesced [40] current_piece_char#106 ← current_piece_char#5
Coalesced [41] current_piece_gfx#118 ← current_piece_gfx#74
Coalesced [42] current_xpos#128 ← current_xpos#103
Coalesced [43] current_ypos#104 ← current_ypos#6
Coalesced [44] game_over#92 ← game_over#52
Coalesced [45] next_piece_idx#82 ← next_piece_idx#18
Not coalescing [63] render_screen_render#70 ← render_screen_render#18
Not coalescing [65] current_ypos#107 ← current_ypos#19
Not coalescing [66] render_screen_render#69 ← render_screen_render#18
Not coalescing [67] current_xpos#131 ← current_xpos#19
Not coalescing [68] current_piece_gfx#121 ← current_piece_gfx#18
Not coalescing [69] current_piece_char#109 ← current_piece_char#16
Not coalescing [71] render_screen_render#68 ← render_screen_render#18
Not coalescing [72] next_piece_idx#85 ← next_piece_idx#16
Coalesced [78] render_screen_show#63 ← render_screen_show#13
Coalesced [79] render_screen_render#67 ← render_screen_render#11
Coalesced [80] current_movedown_slow#96 ← current_movedown_slow#21
Coalesced [81] current_piece#99 ← current_piece#15
Coalesced [82] current_piece_char#107 ← current_piece_char#16
Coalesced [83] current_orientation#102 ← current_orientation#17
Coalesced [84] current_piece_gfx#119 ← current_piece_gfx#18
Coalesced [85] current_xpos#129 ← current_xpos#19
Coalesced [86] current_ypos#105 ← current_ypos#19
Coalesced [87] game_over#93 ← game_over#15
Coalesced [88] next_piece_idx#83 ← next_piece_idx#16
Coalesced [89] keyboard_events_size#86 ← keyboard_events_size#16
Coalesced [90] current_movedown_counter#64 ← current_movedown_counter#14
Coalesced [91] lines_bcd#95 ← lines_bcd#15
Coalesced [92] score_bcd#91 ← score_bcd#14
Coalesced [93] level#111 ← level#17
Coalesced [94] level_bcd#108 ← level_bcd#17
Coalesced (already) [95] current_movedown_slow#94 ← current_movedown_slow#21
Coalesced (already) [96] current_piece#97 ← current_piece#15
Coalesced (already) [97] current_piece_char#105 ← current_piece_char#16
Coalesced (already) [98] current_orientation#101 ← current_orientation#17
Coalesced (already) [99] current_piece_gfx#117 ← current_piece_gfx#18
Coalesced (already) [100] current_xpos#127 ← current_xpos#19
Coalesced (already) [101] current_ypos#103 ← current_ypos#19
Coalesced (already) [102] game_over#91 ← game_over#15
Coalesced (already) [103] next_piece_idx#81 ← next_piece_idx#16
Coalesced (already) [104] keyboard_events_size#85 ← keyboard_events_size#16
Coalesced (already) [105] current_movedown_counter#63 ← current_movedown_counter#14
Coalesced (already) [106] lines_bcd#94 ← lines_bcd#15
Coalesced (already) [107] score_bcd#90 ← score_bcd#14
Coalesced (already) [108] level#110 ← level#17
Coalesced (already) [109] level_bcd#107 ← level_bcd#17
Coalesced [118] render_bcd::screen#7 ← render_bcd::screen#0
Coalesced [119] render_bcd::bcd#9 ← render_bcd::bcd#0
Coalesced [123] render_bcd::screen#8 ← render_bcd::screen#1
Coalesced [124] render_bcd::bcd#10 ← render_bcd::bcd#1
Coalesced [128] render_bcd::screen#9 ← render_bcd::screen#2
Coalesced [129] render_bcd::bcd#11 ← render_bcd::bcd#2
Coalesced [133] render_bcd::screen#10 ← render_bcd::screen#3
Coalesced [134] render_bcd::bcd#12 ← render_bcd::bcd#3
Coalesced [138] render_bcd::screen#11 ← render_bcd::screen#4
Coalesced [139] render_bcd::bcd#13 ← render_bcd::bcd#4
Coalesced [143] render_bcd::screen#12 ← render_bcd::screen#5
Coalesced [144] render_bcd::bcd#14 ← render_bcd::bcd#5
Coalesced [154] render_bcd::screen_pos#6 ← render_bcd::screen_pos#2
Coalesced [160] render_bcd::screen_pos#5 ← render_bcd::screen_pos#0
Coalesced [168] render_next::screen_next_area#13 ← render_next::screen_next_area#11
Coalesced [170] render_next::next_piece_gfx#10 ← render_next::next_piece_gfx#3
Coalesced [171] render_next::screen_next_area#14 ← render_next::screen_next_area#10
Coalesced [184] render_next::next_piece_gfx#8 ← render_next::next_piece_gfx#1
Coalesced [185] render_next::screen_next_area#12 ← render_next::screen_next_area#4
Coalesced [186] render_next::l#8 ← render_next::l#1
Coalesced (already) [187] render_next::next_piece_gfx#11 ← render_next::next_piece_gfx#1
Coalesced [188] render_next::screen_next_area#15 ← render_next::screen_next_area#3
Coalesced [189] render_next::c#6 ← render_next::c#1
Coalesced [193] render_moving::ypos2#9 ← render_moving::ypos2#0
Coalesced [197] render_moving::i#12 ← render_moving::i#1
Coalesced [203] render_moving::ypos2#10 ← render_moving::ypos2#1
Coalesced [204] render_moving::i#10 ← render_moving::i#8
Coalesced [205] render_moving::l#9 ← render_moving::l#1
Coalesced [209] render_moving::i#13 ← render_moving::i#3
Coalesced [210] render_moving::xpos#5 ← render_moving::xpos#0
Coalesced [219] render_moving::i#11 ← render_moving::i#2
Coalesced (already) [220] render_moving::i#14 ← render_moving::i#2
Coalesced [221] render_moving::xpos#6 ← render_moving::xpos#1
Coalesced [222] render_moving::c#5 ← render_moving::c#1
Coalesced [228] render_playfield::i#6 ← render_playfield::i#3
Coalesced [229] render_playfield::screen_line#3 ← render_playfield::screen_line#0
Coalesced [239] render_playfield::l#5 ← render_playfield::l#1
Coalesced [240] render_playfield::i#5 ← render_playfield::i#1
Coalesced (already) [241] render_playfield::i#7 ← render_playfield::i#1
Coalesced [242] render_playfield::screen_line#4 ← render_playfield::screen_line#1
Coalesced [243] render_playfield::c#3 ← render_playfield::c#1
Coalesced [249] play_movement::return#6 ← play_movement::render#1
Coalesced [250] current_orientation#103 ← current_orientation#20
Coalesced [251] current_piece_gfx#122 ← current_piece_gfx#20
Coalesced [252] current_xpos#132 ← current_xpos#22
Coalesced [265] play_movement::return#7 ← play_movement::return#0
Coalesced [266] current_orientation#104 ← current_orientation#25
Coalesced [267] current_piece_gfx#123 ← current_piece_gfx#21
Coalesced [268] current_xpos#133 ← current_xpos#26
Coalesced (already) [271] current_orientation#107 ← current_orientation#20
Coalesced (already) [272] current_piece_gfx#126 ← current_piece_gfx#20
Coalesced [277] play_move_rotate::orientation#7 ← play_move_rotate::orientation#2
Not coalescing [282] current_piece#103 ← current_piece#15
Coalesced [283] play_collision::orientation#9 ← play_collision::orientation#3
Coalesced [284] play_collision::ypos#9 ← play_collision::ypos#3
Coalesced [285] play_collision::xpos#18 ← play_collision::xpos#3
Coalesced [292] current_orientation#105 ← current_orientation#7
Coalesced [293] current_piece_gfx#124 ← current_piece_gfx#7
Coalesced (already) [294] current_orientation#106 ← current_orientation#20
Coalesced (already) [295] current_piece_gfx#125 ← current_piece_gfx#20
Coalesced [298] play_move_rotate::orientation#6 ← play_move_rotate::orientation#1
Coalesced [302] play_collision::ypos2#11 ← play_collision::ypos2#0
Coalesced [305] play_collision::i#12 ← play_collision::i#3
Not coalescing [306] play_collision::col#9 ← play_collision::xpos#6
Coalesced [323] play_collision::ypos2#12 ← play_collision::ypos2#1
Not coalescing [324] play_collision::i#11 ← play_collision::i#1
Coalesced [325] play_collision::l#11 ← play_collision::l#1
Not coalescing [326] play_collision::i#13 ← play_collision::i#1
Coalesced [327] play_collision::col#10 ← play_collision::col#1
Coalesced [328] play_collision::c#9 ← play_collision::c#1
Not coalescing [334] current_piece#102 ← current_piece#15
Coalesced [335] play_collision::orientation#8 ← play_collision::orientation#2
Coalesced [336] play_collision::ypos#8 ← play_collision::ypos#2
Coalesced [337] play_collision::xpos#17 ← play_collision::xpos#2
Coalesced [343] current_xpos#135 ← current_xpos#6
Coalesced (already) [346] current_xpos#137 ← current_xpos#22
Coalesced (already) [347] current_xpos#138 ← current_xpos#22
Not coalescing [351] current_piece#101 ← current_piece#15
Coalesced [352] play_collision::orientation#7 ← play_collision::orientation#1
Coalesced [353] play_collision::ypos#7 ← play_collision::ypos#1
Coalesced [354] play_collision::xpos#16 ← play_collision::xpos#1
Coalesced [360] current_xpos#136 ← current_xpos#8
Coalesced (already) [361] current_xpos#134 ← current_xpos#22
Coalesced [372] play_move_down::movedown#15 ← play_move_down::movedown#2
Coalesced [376] play_move_down::movedown#17 ← play_move_down::movedown#3
Not coalescing [382] current_piece#100 ← current_piece#10
Coalesced [383] play_collision::orientation#6 ← play_collision::orientation#0
Coalesced [384] play_collision::ypos#6 ← play_collision::ypos#0
Coalesced [385] play_collision::xpos#15 ← play_collision::xpos#0
Coalesced (already) [398] next_piece_idx#91 ← next_piece_idx#10
Coalesced (already) [399] game_over#99 ← game_over#10
Coalesced [401] current_ypos#109 ← current_ypos#6
Coalesced [402] lines_bcd#97 ← lines_bcd#17
Coalesced [403] score_bcd#93 ← score_bcd#16
Coalesced [404] level#113 ← level#19
Coalesced [405] current_movedown_slow#98 ← current_movedown_slow#23
Coalesced [406] level_bcd#110 ← level_bcd#19
Coalesced [408] current_piece_char#111 ← current_piece_char#5
Coalesced [409] current_piece_gfx#128 ← current_piece_gfx#74
Coalesced [410] current_xpos#140 ← current_xpos#103
Coalesced [411] game_over#95 ← game_over#52
Coalesced [412] next_piece_idx#87 ← next_piece_idx#18
Coalesced (already) [414] current_ypos#110 ← current_ypos#38
Coalesced [415] lines_bcd#98 ← lines_bcd#26
Coalesced [416] score_bcd#94 ← score_bcd#26
Coalesced [417] level#114 ← level#33
Coalesced [418] current_movedown_slow#99 ← current_movedown_slow#37
Coalesced [419] level_bcd#111 ← level_bcd#31
Coalesced [420] current_piece#107 ← current_piece#28
Coalesced (already) [421] current_piece_char#112 ← current_piece_char#29
Coalesced [422] current_orientation#109 ← current_orientation#37
Coalesced (already) [423] current_piece_gfx#129 ← current_piece_gfx#35
Coalesced (already) [424] current_xpos#141 ← current_xpos#43
Coalesced (already) [425] game_over#96 ← game_over#27
Coalesced (already) [426] next_piece_idx#88 ← next_piece_idx#30
Coalesced [430] current_ypos#108 ← current_ypos#3
Coalesced (already) [431] lines_bcd#96 ← lines_bcd#19
Coalesced (already) [432] score_bcd#92 ← score_bcd#18
Coalesced (already) [433] level#112 ← level#10
Coalesced (already) [434] current_movedown_slow#97 ← current_movedown_slow#14
Coalesced (already) [435] level_bcd#109 ← level_bcd#11
Coalesced (already) [436] current_piece#105 ← current_piece#10
Coalesced (already) [437] current_piece_char#110 ← current_piece_char#10
Coalesced (already) [438] current_orientation#108 ← current_orientation#13
Coalesced (already) [439] current_piece_gfx#127 ← current_piece_gfx#114
Coalesced (already) [440] current_xpos#139 ← current_xpos#124
Coalesced (already) [441] game_over#94 ← game_over#10
Coalesced (already) [442] next_piece_idx#86 ← next_piece_idx#10
Coalesced [443] current_movedown_counter#65 ← current_movedown_counter#12
Coalesced (already) [444] current_ypos#111 ← current_ypos#100
Coalesced (already) [445] lines_bcd#99 ← lines_bcd#19
Coalesced (already) [446] score_bcd#95 ← score_bcd#18
Coalesced (already) [447] level#115 ← level#10
Coalesced (already) [448] current_movedown_slow#100 ← current_movedown_slow#14
Coalesced (already) [449] level_bcd#112 ← level_bcd#11
Coalesced (already) [450] current_piece#108 ← current_piece#10
Coalesced (already) [451] current_piece_char#113 ← current_piece_char#10
Coalesced (already) [452] current_orientation#110 ← current_orientation#13
Coalesced (already) [453] current_piece_gfx#130 ← current_piece_gfx#114
Coalesced (already) [454] current_xpos#142 ← current_xpos#124
Coalesced (already) [455] game_over#97 ← game_over#10
Coalesced (already) [456] next_piece_idx#89 ← next_piece_idx#10
Coalesced [457] play_move_down::movedown#16 ← play_move_down::movedown#7
Coalesced [458] play_move_down::movedown#13 ← play_move_down::movedown#10
Coalesced (already) [459] play_move_down::movedown#14 ← play_move_down::movedown#10
Coalesced [470] play_collision::ypos#10 ← play_collision::ypos#4
Coalesced [471] play_collision::xpos#19 ← play_collision::xpos#4
Coalesced [480] next_piece_idx#18 ← play_spawn_current::piece_idx#2
Coalesced [484] play_spawn_current::piece_idx#4 ← play_spawn_current::piece_idx#1
Coalesced (already) [485] game_over#100 ← game_over#65
Coalesced [500] lines_bcd#102 ← lines_bcd#30
Coalesced [501] score_bcd#98 ← score_bcd#30
Coalesced [502] level#118 ← level#21
Coalesced [503] current_movedown_slow#103 ← current_movedown_slow#69
Coalesced [504] level_bcd#115 ← level_bcd#64
Coalesced (already) [507] lines_bcd#101 ← lines_bcd#30
Coalesced (already) [508] score_bcd#97 ← score_bcd#30
Coalesced (already) [509] level#117 ← level#10
Coalesced (already) [510] current_movedown_slow#102 ← current_movedown_slow#14
Coalesced (already) [511] level_bcd#114 ← level_bcd#11
Coalesced (already) [512] lines_bcd#100 ← lines_bcd#19
Coalesced (already) [513] score_bcd#96 ← score_bcd#18
Coalesced (already) [514] level#116 ← level#10
Coalesced (already) [515] current_movedown_slow#101 ← current_movedown_slow#14
Coalesced (already) [516] level_bcd#113 ← level_bcd#11
Coalesced [520] current_movedown_slow#104 ← current_movedown_slow#10
Coalesced [526] level_bcd#117 ← level_bcd#8
Coalesced [536] play_increase_level::b#3 ← play_increase_level::b#1
Coalesced [537] level_bcd#116 ← level_bcd#21
Coalesced [540] play_remove_lines::r#10 ← play_remove_lines::r#3
Coalesced [541] play_remove_lines::w#14 ← play_remove_lines::w#12
Coalesced [555] play_remove_lines::w#17 ← play_remove_lines::w#2
Coalesced [556] play_remove_lines::removed#14 ← play_remove_lines::removed#1
Coalesced [560] play_remove_lines::w#19 ← play_remove_lines::w#11
Coalesced [566] play_remove_lines::w#18 ← play_remove_lines::w#3
Coalesced [567] play_remove_lines::r#9 ← play_remove_lines::r#1
Coalesced [568] play_remove_lines::w#13 ← play_remove_lines::w#11
Coalesced [569] play_remove_lines::y#9 ← play_remove_lines::y#1
Coalesced [570] play_remove_lines::removed#12 ← play_remove_lines::removed#8
Coalesced [571] play_remove_lines::w#16 ← play_remove_lines::w#1
Coalesced (already) [572] play_remove_lines::removed#13 ← play_remove_lines::removed#11
Coalesced (already) [573] play_remove_lines::r#11 ← play_remove_lines::r#1
Coalesced (already) [574] play_remove_lines::w#15 ← play_remove_lines::w#1
Coalesced [575] play_remove_lines::x#5 ← play_remove_lines::x#1
Coalesced [576] play_remove_lines::full#5 ← play_remove_lines::full#2
Coalesced (already) [577] play_remove_lines::full#6 ← play_remove_lines::full#4
Coalesced [579] play_lock_current::ypos2#7 ← play_lock_current::ypos2#0
Coalesced [583] play_lock_current::i#8 ← play_lock_current::i#3
Coalesced [584] play_lock_current::col#5 ← play_lock_current::col#0
Coalesced [596] play_lock_current::ypos2#8 ← play_lock_current::ypos2#1
Not coalescing [597] play_lock_current::i#7 ← play_lock_current::i#1
Coalesced [598] play_lock_current::l#7 ← play_lock_current::l#1
Not coalescing [599] play_lock_current::i#9 ← play_lock_current::i#1
Coalesced [600] play_lock_current::col#6 ← play_lock_current::col#1
Coalesced [601] play_lock_current::c#5 ← play_lock_current::c#1
Coalesced [611] keyboard_event_get::return#6 ← keyboard_event_get::return#1
Coalesced [612] keyboard_events_size#88 ← keyboard_events_size#4
Coalesced [615] keyboard_events_size#87 ← keyboard_events_size#13
Coalesced [616] keyboard_events_size#89 ← keyboard_events_size#19
Coalesced [624] keyboard_event_scan::keycode#18 ← keyboard_event_scan::keycode#1
Coalesced (already) [625] keyboard_events_size#92 ← keyboard_events_size#30
Coalesced [654] keyboard_event_scan::row#15 ← keyboard_event_scan::row#1
Coalesced [655] keyboard_event_scan::keycode#16 ← keyboard_event_scan::keycode#14
Coalesced (already) [656] keyboard_events_size#90 ← keyboard_events_size#13
Coalesced [657] keyboard_event_scan::keycode#20 ← keyboard_event_scan::keycode#11
Coalesced [658] keyboard_events_size#94 ← keyboard_events_size#30
Coalesced [668] keyboard_events_size#98 ← keyboard_events_size#2
Coalesced [674] keyboard_event_scan::keycode#17 ← keyboard_event_scan::keycode#15
Coalesced [675] keyboard_events_size#91 ← keyboard_events_size#29
Coalesced [676] keyboard_event_scan::col#9 ← keyboard_event_scan::col#1
Coalesced (already) [677] keyboard_event_scan::keycode#19 ← keyboard_event_scan::keycode#15
Coalesced (already) [678] keyboard_events_size#93 ← keyboard_events_size#29
Coalesced [682] keyboard_events_size#97 ← keyboard_events_size#1
Coalesced (already) [683] keyboard_events_size#96 ← keyboard_events_size#10
Coalesced (already) [684] keyboard_events_size#95 ← keyboard_events_size#10
Coalesced [714] play_init::b#3 ← play_init::b#1
Coalesced [715] play_init::j#3 ← play_init::j#1
Coalesced [716] play_init::pli#3 ← play_init::pli#1
Coalesced [717] play_init::idx#3 ← play_init::idx#1
Coalesced [742] sprites_init::s#3 ← sprites_init::s#1
Coalesced [743] sprites_init::xpos#3 ← sprites_init::xpos#1
Coalesced [767] render_init::i#3 ← render_init::i#1
Coalesced [768] render_init::li_1#3 ← render_init::li_1#1
Coalesced [769] render_init::li_2#3 ← render_init::li_2#1
Coalesced [771] render_screen_original::screen#11 ← render_screen_original::screen#9
Coalesced [773] render_screen_original::screen#13 ← render_screen_original::screen#8
Coalesced [774] render_screen_original::cols#10 ← render_screen_original::cols#7
Coalesced [782] render_screen_original::oscr#8 ← render_screen_original::oscr#4
Coalesced [783] render_screen_original::screen#15 ← render_screen_original::screen#2
Coalesced [784] render_screen_original::ocols#8 ← render_screen_original::ocols#4
Coalesced [785] render_screen_original::cols#12 ← render_screen_original::cols#1
Coalesced [786] render_screen_original::x#8 ← render_screen_original::x#1
Coalesced [796] render_screen_original::screen#17 ← render_screen_original::screen#3
Coalesced [797] render_screen_original::cols#14 ← render_screen_original::cols#2
Coalesced [798] render_screen_original::x#10 ← render_screen_original::x#2
Coalesced [809] render_screen_original::screen#12 ← render_screen_original::screen#10
Coalesced [810] render_screen_original::cols#9 ← render_screen_original::cols#3
Coalesced [811] render_screen_original::oscr#7 ← render_screen_original::oscr#1
Coalesced [812] render_screen_original::ocols#7 ← render_screen_original::ocols#1
Coalesced [813] render_screen_original::y#7 ← render_screen_original::y#1
Coalesced [814] render_screen_original::screen#18 ← render_screen_original::screen#10
Coalesced [815] render_screen_original::cols#15 ← render_screen_original::cols#3
Coalesced [816] render_screen_original::x#11 ← render_screen_original::x#3
Coalesced (already) [817] render_screen_original::oscr#9 ← render_screen_original::oscr#1
Coalesced [818] render_screen_original::screen#16 ← render_screen_original::screen#3
Coalesced (already) [819] render_screen_original::ocols#9 ← render_screen_original::ocols#1
Coalesced [820] render_screen_original::cols#13 ← render_screen_original::cols#2
Coalesced [821] render_screen_original::x#9 ← render_screen_original::x#2
Coalesced (already) [822] render_screen_original::screen#14 ← render_screen_original::screen#2
Coalesced (already) [823] render_screen_original::cols#11 ← render_screen_original::cols#1
Coalesced [824] render_screen_original::x#7 ← render_screen_original::x#1
Coalesced [851] irq_raster_next#27 ← irq_raster_next#3
Coalesced [860] irq_raster_next#26 ← irq_raster_next#2
Coalesced [865] irq_raster_next#25 ← irq_raster_next#1
Coalesced down to 96 phi equivalence classes
Culled Empty Block (label) main::@44
Culled Empty Block (label) render_bcd::@3
Culled Empty Block (label) render_next::@13
Culled Empty Block (label) render_next::@14
Culled Empty Block (label) render_moving::@11
Culled Empty Block (label) render_moving::@12
Culled Empty Block (label) render_moving::@13
Culled Empty Block (label) render_playfield::@5
Culled Empty Block (label) render_playfield::@6
Culled Empty Block (label) play_movement::@8
Culled Empty Block (label) play_move_rotate::@16
Culled Empty Block (label) play_move_rotate::@15
Culled Empty Block (label) play_move_leftright::@17
Culled Empty Block (label) play_move_leftright::@18
Culled Empty Block (label) play_move_leftright::@16
Culled Empty Block (label) play_move_down::@26
Culled Empty Block (label) play_move_down::@25
Culled Empty Block (label) play_move_down::@23
Culled Empty Block (label) play_move_down::@24
Culled Empty Block (label) play_spawn_current::@2
Culled Empty Block (label) play_spawn_current::@5
Culled Empty Block (label) play_update_score::@7
Culled Empty Block (label) play_update_score::@6
Culled Empty Block (label) play_increase_level::@10
Culled Empty Block (label) play_increase_level::@9
Culled Empty Block (label) play_remove_lines::@4
Culled Empty Block (label) play_remove_lines::@20
Culled Empty Block (label) play_remove_lines::@16
Culled Empty Block (label) play_remove_lines::@19
Culled Empty Block (label) play_remove_lines::@17
Culled Empty Block (label) keyboard_event_get::@7
Culled Empty Block (label) keyboard_event_scan::@30
Culled Empty Block (label) keyboard_event_scan::@32
Culled Empty Block (label) keyboard_event_scan::@31
Culled Empty Block (label) keyboard_event_scan::@34
Culled Empty Block (label) keyboard_event_scan::@33
Culled Empty Block (label) play_init::@6
Culled Empty Block (label) play_init::@5
Culled Empty Block (label) sprites_init::@3
Culled Empty Block (label) render_init::@6
Culled Empty Block (label) render_screen_original::@11
Culled Empty Block (label) render_screen_original::@13
Culled Empty Block (label) render_screen_original::@9
Culled Empty Block (label) render_screen_original::@14
Culled Empty Block (label) render_screen_original::@12
Culled Empty Block (label) render_screen_original::@10
Renumbering block @14 to @1
Renumbering block @23 to @2
Renumbering block @24 to @3
Renumbering block @38 to @4
Renumbering block @39 to @5
Renumbering block keyboard_event_scan::@5 to keyboard_event_scan::@4
Renumbering block keyboard_event_scan::@6 to keyboard_event_scan::@5
Renumbering block keyboard_event_scan::@7 to keyboard_event_scan::@6
Renumbering block keyboard_event_scan::@8 to keyboard_event_scan::@7
Renumbering block keyboard_event_scan::@10 to keyboard_event_scan::@8
Renumbering block keyboard_event_scan::@11 to keyboard_event_scan::@9
Renumbering block keyboard_event_scan::@12 to keyboard_event_scan::@10
Renumbering block keyboard_event_scan::@14 to keyboard_event_scan::@11
Renumbering block keyboard_event_scan::@16 to keyboard_event_scan::@12
Renumbering block keyboard_event_scan::@17 to keyboard_event_scan::@13
Renumbering block keyboard_event_scan::@18 to keyboard_event_scan::@14
Renumbering block keyboard_event_scan::@20 to keyboard_event_scan::@15
Renumbering block keyboard_event_scan::@21 to keyboard_event_scan::@16
Renumbering block keyboard_event_scan::@23 to keyboard_event_scan::@17
Renumbering block keyboard_event_scan::@24 to keyboard_event_scan::@18
Renumbering block keyboard_event_scan::@25 to keyboard_event_scan::@19
Renumbering block keyboard_event_scan::@26 to keyboard_event_scan::@20
Renumbering block keyboard_event_scan::@27 to keyboard_event_scan::@21
Renumbering block keyboard_event_scan::@28 to keyboard_event_scan::@22
Renumbering block keyboard_event_scan::@29 to keyboard_event_scan::@23
Renumbering block keyboard_event_get::@3 to keyboard_event_get::@1
Renumbering block render_init::@3 to render_init::@2
Renumbering block render_init::@4 to render_init::@3
Renumbering block render_show::@2 to render_show::@1
Renumbering block render_score::@2 to render_score::@1
Renumbering block render_score::@3 to render_score::@2
Renumbering block render_score::@5 to render_score::@3
Renumbering block render_score::@6 to render_score::@4
Renumbering block render_score::@7 to render_score::@5
Renumbering block render_score::@8 to render_score::@6
Renumbering block render_score::@9 to render_score::@7
Renumbering block render_screen_original::@4 to render_screen_original::@3
Renumbering block render_screen_original::@6 to render_screen_original::@4
Renumbering block render_screen_original::@7 to render_screen_original::@5
Renumbering block render_moving::@8 to render_moving::@7
Renumbering block render_next::@2 to render_next::@1
Renumbering block render_next::@3 to render_next::@2
Renumbering block render_next::@5 to render_next::@3
Renumbering block render_next::@6 to render_next::@4
Renumbering block render_next::@7 to render_next::@5
Renumbering block render_next::@8 to render_next::@6
Renumbering block render_next::@9 to render_next::@7
Renumbering block render_next::@11 to render_next::@8
Renumbering block sprites_irq::@6 to sprites_irq::@5
Renumbering block sprites_irq::@7 to sprites_irq::@6
Renumbering block sprites_irq::@8 to sprites_irq::@7
Renumbering block sprites_irq::@11 to sprites_irq::@8
Renumbering block sprites_irq::@12 to sprites_irq::@9
Renumbering block sprites_irq::@13 to sprites_irq::@10
Renumbering block sprites_irq::@15 to sprites_irq::@11
Renumbering block play_movement::@5 to play_movement::@2
Renumbering block play_movement::@6 to play_movement::@3
Renumbering block play_movement::@7 to play_movement::@4
Renumbering block play_move_down::@5 to play_move_down::@4
Renumbering block play_move_down::@6 to play_move_down::@5
Renumbering block play_move_down::@7 to play_move_down::@6
Renumbering block play_move_down::@8 to play_move_down::@7
Renumbering block play_move_down::@9 to play_move_down::@8
Renumbering block play_move_down::@10 to play_move_down::@9
Renumbering block play_move_down::@14 to play_move_down::@10
Renumbering block play_move_down::@15 to play_move_down::@11
Renumbering block play_move_down::@17 to play_move_down::@12
Renumbering block play_move_down::@18 to play_move_down::@13
Renumbering block play_move_down::@19 to play_move_down::@14
Renumbering block play_move_down::@20 to play_move_down::@15
Renumbering block play_move_down::@21 to play_move_down::@16
Renumbering block play_move_leftright::@4 to play_move_leftright::@2
Renumbering block play_move_leftright::@5 to play_move_leftright::@3
Renumbering block play_move_leftright::@6 to play_move_leftright::@4
Renumbering block play_move_leftright::@9 to play_move_leftright::@5
Renumbering block play_move_leftright::@14 to play_move_leftright::@6
Renumbering block play_move_leftright::@15 to play_move_leftright::@7
Renumbering block play_move_rotate::@4 to play_move_rotate::@3
Renumbering block play_move_rotate::@6 to play_move_rotate::@4
Renumbering block play_move_rotate::@11 to play_move_rotate::@5
Renumbering block play_move_rotate::@14 to play_move_rotate::@6
Renumbering block play_collision::@14 to play_collision::@7
Renumbering block play_collision::@17 to play_collision::@8
Renumbering block play_collision::@20 to play_collision::@9
Renumbering block play_collision::@21 to play_collision::@10
Renumbering block play_lock_current::@7 to play_lock_current::@6
Renumbering block play_lock_current::@8 to play_lock_current::@7
Renumbering block play_spawn_current::@3 to play_spawn_current::@2
Renumbering block play_spawn_current::@9 to play_spawn_current::@3
Renumbering block play_spawn_current::@10 to play_spawn_current::@4
Renumbering block play_spawn_current::@11 to play_spawn_current::@5
Renumbering block play_remove_lines::@5 to play_remove_lines::@4
Renumbering block play_remove_lines::@6 to play_remove_lines::@5
Renumbering block play_remove_lines::@7 to play_remove_lines::@6
Renumbering block play_remove_lines::@9 to play_remove_lines::@7
Renumbering block play_remove_lines::@10 to play_remove_lines::@8
Renumbering block play_remove_lines::@18 to play_remove_lines::@9
Renumbering block play_update_score::@2 to play_update_score::@1
Renumbering block play_update_score::@3 to play_update_score::@2
Renumbering block play_increase_level::@2 to play_increase_level::@1
Renumbering block play_increase_level::@3 to play_increase_level::@2
Renumbering block play_increase_level::@4 to play_increase_level::@3
Renumbering block play_increase_level::@6 to play_increase_level::@4
Renumbering block play_increase_level::@7 to play_increase_level::@5
Renumbering block play_increase_level::@8 to play_increase_level::@6
Renumbering block main::@4 to main::@2
Renumbering block main::@6 to main::@3
Renumbering block main::@11 to main::@4
Renumbering block main::@13 to main::@5
Renumbering block main::@19 to main::@6
Renumbering block main::@23 to main::@7
Renumbering block main::@25 to main::@8
Renumbering block main::@26 to main::@9
Renumbering block main::@27 to main::@10
Renumbering block main::@28 to main::@11
Renumbering block main::@29 to main::@12
Renumbering block main::@30 to main::@13
Renumbering block main::@31 to main::@14
Renumbering block main::@32 to main::@15
Renumbering block main::@33 to main::@16
Renumbering block main::@35 to main::@17
Renumbering block main::@36 to main::@18
Renumbering block main::@37 to main::@19
Renumbering block main::@38 to main::@20
Renumbering block main::@39 to main::@21
Renumbering block main::@40 to main::@22
Renumbering block main::@41 to main::@23
Renumbering block main::@42 to main::@24
Adding NOP phi() at start of @begin
Adding NOP phi() at start of toSpritePtr1
Adding NOP phi() at start of @4
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@9
Adding NOP phi() at start of main::@10
Adding NOP phi() at start of main::@11
Adding NOP phi() at start of main::@12
Adding NOP phi() at start of main::@13
Adding NOP phi() at start of main::@14
Adding NOP phi() at start of main::@3
Adding NOP phi() at start of main::@17
Adding NOP phi() at start of main::@18
Adding NOP phi() at start of main::@23
Adding NOP phi() at start of main::@24
Adding NOP phi() at start of render_score::@2
Adding NOP phi() at start of render_next::@2
Adding NOP phi() at start of play_move_down::@4
Adding NOP phi() at start of play_move_down::@9
Adding NOP phi() at start of play_move_down::@14
Adding NOP phi() at start of play_move_down::@16
Adding NOP phi() at start of play_spawn_current::@5
Adding NOP phi() at start of play_update_score::@2
Adding NOP phi() at start of play_remove_lines
Adding NOP phi() at start of play_remove_lines::@9
Adding NOP phi() at start of keyboard_event_scan
Adding NOP phi() at start of keyboard_event_scan::@17
Adding NOP phi() at start of keyboard_event_scan::@18
Adding NOP phi() at start of keyboard_event_scan::@1
Adding NOP phi() at start of keyboard_event_scan::@4
Adding NOP phi() at start of keyboard_event_scan::@2
Adding NOP phi() at start of keyboard_event_scan::@5
Adding NOP phi() at start of keyboard_event_scan::@3
Adding NOP phi() at start of keyboard_event_scan::@6
Adding NOP phi() at start of render_show::toD0182
Adding NOP phi() at start of render_show::toD0181
Adding NOP phi() at start of play_init
Adding NOP phi() at start of render_init
Adding NOP phi() at start of render_init::vicSelectGfxBank1_toDd001
Adding NOP phi() at start of render_init::@3
Adding NOP phi() at start of sprites_irq::toSpritePtr2
FINAL CONTROL FLOW GRAPH
@begin: scope:[] from
[0] phi()
to:@1
@1: scope:[] from @begin
[1] (byte) render_screen_showing#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
kickasm(location (const byte*) PLAYFIELD_CHARSET#0) {{ .fill 8,$00 // Place a filled char at the start of the charset
.import binary "playfield-screen.imap"
}}
kickasm(location (const byte*) PLAYFIELD_SCREEN_ORIGINAL#0) {{ // Load chars for the screen
.var screen = LoadBinary("playfield-screen.iscr")
// Load extended colors for the screen
.var extended = LoadBinary("playfield-extended.col")
// screen.get(i)+1 because the charset is loaded into PLAYFIELD_CHARSET+8
// extended.get(i)-1 because the extended colors are 1-based (1/2/3/4)
// <<6 to move extended colors to the upper 2 bits
.fill screen.getSize(), ( (screen.get(i)+1) | (extended.get(i)-1)<<6 )
}}
kickasm(location (const byte*) PLAYFIELD_COLORS_ORIGINAL#0) {{ .import binary "playfield-screen.col"
}}
to:@2
@2: scope:[] from @1
kickasm(location (const byte*) PLAYFIELD_SPRITES#0) {{ .var sprites = LoadPicture("playfield-sprites.png", List().add($010101, $000000))
// Put the sprites into memory
.for(var sy=0;sy<10;sy++) {
.var sprite_gfx_y = sy*20
.for(var sx=0;sx<3;sx++) {
.for (var y=0;y<21; y++) {
.var gfx_y = sprite_gfx_y + mod(2100+y-sprite_gfx_y,21)
.for (var c=0; c<3; c++) {
.byte sprites.getSinglecolorByte(sx*3+c,gfx_y)
}
}
.byte 0
}
}
}}
to:@3
@3: scope:[] from @2
[6] (byte) irq_raster_next#0 ← (const byte) IRQ_RASTER_FIRST#0
[7] (byte) irq_sprite_ypos#0 ← (const byte) SPRITES_FIRST_YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) $15
to:toSpritePtr1
toSpritePtr1: scope:[] from @3
[8] phi()
to:@5
@5: scope:[] from toSpritePtr1
[9] (byte) irq_sprite_ptr#0 ← (const byte) toSpritePtr1_return#0+(byte/signed byte/word/signed word/dword/signed dword) 3
[10] (byte) irq_cnt#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:@4
@4: scope:[] from @5
[11] phi()
[12] call main
to:@end
@end: scope:[] from @4
[13] phi()
main: scope:[main] from @4
[14] phi()
[15] call sid_rnd_init
to:main::@8
main::@8: scope:[main] from main
asm { sei }
[17] call render_init
to:main::@9
main::@9: scope:[main] from main::@8
[18] phi()
[19] call sprites_init
to:main::@10
main::@10: scope:[main] from main::@9
[20] phi()
[21] call sprites_irq_init
to:main::@11
main::@11: scope:[main] from main::@10
[22] phi()
[23] call play_init
to:main::@12
main::@12: scope:[main] from main::@11
[24] phi()
[25] call play_spawn_current
to:main::@13
main::@13: scope:[main] from main::@12
[26] phi()
[27] call play_spawn_current
to:main::@14
main::@14: scope:[main] from main::@13
[28] phi()
[29] call render_playfield
to:main::@15
main::@15: scope:[main] from main::@14
[30] (byte~) current_ypos#106 ← (byte) current_ypos#6
[31] (byte~) current_xpos#130 ← (byte) current_xpos#103
[32] (byte*~) current_piece_gfx#120 ← (byte*) current_piece_gfx#74
[33] (byte~) current_piece_char#108 ← (byte) current_piece_char#5
[34] call render_moving
to:main::@16
main::@16: scope:[main] from main::@15
[35] (byte~) next_piece_idx#84 ← (byte) play_spawn_current::piece_idx#2
[36] call render_next
[37] (byte*~) current_piece#98 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$0)
to:main::@1
main::@1: scope:[main] from main::@16 main::@24 main::@6
[38] (byte) level_bcd#11 ← phi( main::@6/(byte) level_bcd#17 main::@16/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@24/(byte) level_bcd#17 )
[38] (byte) level#10 ← phi( main::@6/(byte) level#17 main::@16/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@24/(byte) level#17 )
[38] (dword) score_bcd#18 ← phi( main::@6/(dword) score_bcd#14 main::@16/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@24/(dword) score_bcd#14 )
[38] (word) lines_bcd#19 ← phi( main::@6/(word) lines_bcd#15 main::@16/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@24/(word) lines_bcd#15 )
[38] (byte) current_movedown_counter#16 ← phi( main::@6/(byte) current_movedown_counter#14 main::@16/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@24/(byte) current_movedown_counter#14 )
[38] (byte) keyboard_events_size#19 ← phi( main::@6/(byte) keyboard_events_size#16 main::@16/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@24/(byte) keyboard_events_size#16 )
[38] (byte) next_piece_idx#10 ← phi( main::@6/(byte) next_piece_idx#16 main::@16/(byte) play_spawn_current::piece_idx#2 main::@24/(byte) next_piece_idx#16 )
[38] (byte) game_over#10 ← phi( main::@6/(byte) game_over#15 main::@16/(byte) game_over#52 main::@24/(byte) game_over#15 )
[38] (byte) current_ypos#100 ← phi( main::@6/(byte) current_ypos#19 main::@16/(byte) current_ypos#6 main::@24/(byte) current_ypos#19 )
[38] (byte) current_xpos#124 ← phi( main::@6/(byte) current_xpos#19 main::@16/(byte) current_xpos#103 main::@24/(byte) current_xpos#19 )
[38] (byte*) current_piece_gfx#114 ← phi( main::@6/(byte*) current_piece_gfx#18 main::@16/(byte*) current_piece_gfx#74 main::@24/(byte*) current_piece_gfx#18 )
[38] (byte) current_orientation#13 ← phi( main::@6/(byte) current_orientation#17 main::@16/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@24/(byte) current_orientation#17 )
[38] (byte) current_piece_char#10 ← phi( main::@6/(byte) current_piece_char#16 main::@16/(byte) current_piece_char#5 main::@24/(byte) current_piece_char#16 )
[38] (byte*) current_piece#10 ← phi( main::@6/(byte*) current_piece#15 main::@16/(byte*~) current_piece#98 main::@24/(byte*) current_piece#15 )
[38] (byte) current_movedown_slow#14 ← phi( main::@6/(byte) current_movedown_slow#21 main::@16/(byte) current_movedown_slow#1 main::@24/(byte) current_movedown_slow#21 )
[38] (byte) render_screen_render#18 ← phi( main::@16/(byte/signed byte/word/signed word/dword/signed dword) $40 main::@24/(byte) render_screen_render#11 )
[38] (byte) render_screen_show#16 ← phi( main::@16/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@24/(byte) render_screen_show#13 )
to:main::@2
main::@2: scope:[main] from main::@1 main::@2
[39] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) $ff) goto main::@2
to:main::@3
main::@3: scope:[main] from main::@2
[40] phi()
[41] call render_show
to:main::@17
main::@17: scope:[main] from main::@3
[42] phi()
[43] call keyboard_event_scan
to:main::@18
main::@18: scope:[main] from main::@17
[44] phi()
[45] call keyboard_event_get
[46] (byte) keyboard_event_get::return#3 ← (byte) keyboard_event_get::return#2
to:main::@19
main::@19: scope:[main] from main::@18
[47] (byte) main::key_event#0 ← (byte) keyboard_event_get::return#3
[48] if((byte) game_over#10==(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@4
to:main::@5
main::@5: scope:[main] from main::@19 main::@5
[49] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0)
to:main::@5
main::@4: scope:[main] from main::@19
[50] (byte) play_movement::key_event#0 ← (byte) main::key_event#0
[51] call play_movement
[52] (byte) play_movement::return#3 ← (byte) play_movement::return#2
to:main::@20
main::@20: scope:[main] from main::@4
[53] (byte) main::render#1 ← (byte) play_movement::return#3
to:main::@6
main::@6: scope:[main] from main::@20
[54] if((byte) main::render#1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@1
to:main::@7
main::@7: scope:[main] from main::@6
[55] (byte~) render_screen_render#70 ← (byte) render_screen_render#18
[56] call render_playfield
to:main::@21
main::@21: scope:[main] from main::@7
[57] (byte~) current_ypos#107 ← (byte) current_ypos#19
[58] (byte~) render_screen_render#69 ← (byte) render_screen_render#18
[59] (byte~) current_xpos#131 ← (byte) current_xpos#19
[60] (byte*~) current_piece_gfx#121 ← (byte*) current_piece_gfx#18
[61] (byte~) current_piece_char#109 ← (byte) current_piece_char#16
[62] call render_moving
to:main::@22
main::@22: scope:[main] from main::@21
[63] (byte~) render_screen_render#68 ← (byte) render_screen_render#18
[64] (byte~) next_piece_idx#85 ← (byte) next_piece_idx#16
[65] call render_next
to:main::@23
main::@23: scope:[main] from main::@22
[66] phi()
[67] call render_score
to:main::@24
main::@24: scope:[main] from main::@23
[68] phi()
[69] call render_screen_swap
to:main::@1
render_screen_swap: scope:[render_screen_swap] from main::@24
[70] (byte) render_screen_render#11 ← (byte) render_screen_render#18 ^ (byte/signed byte/word/signed word/dword/signed dword) $40
[71] (byte) render_screen_show#13 ← (byte) render_screen_show#16 ^ (byte/signed byte/word/signed word/dword/signed dword) $40
to:render_screen_swap::@return
render_screen_swap::@return: scope:[render_screen_swap] from render_screen_swap
[72] return
to:@return
render_score: scope:[render_score] from main::@23
[73] if((byte) render_screen_render#18==(byte/signed byte/word/signed word/dword/signed dword) 0) goto render_score::@1
to:render_score::@2
render_score::@2: scope:[render_score] from render_score
[74] phi()
to:render_score::@1
render_score::@1: scope:[render_score] from render_score render_score::@2
[75] (byte*) render_score::screen#3 ← phi( render_score/(const byte*) PLAYFIELD_SCREEN_1#0 render_score::@2/(const byte*) PLAYFIELD_SCREEN_2#0 )
[76] (byte*) render_bcd::screen#0 ← (byte*) render_score::screen#3
[77] (byte) render_bcd::bcd#0 ← *((const byte*) render_score::score_bytes#0+(byte/signed byte/word/signed word/dword/signed dword) 2)
[78] call render_bcd
to:render_score::@3
render_score::@3: scope:[render_score] from render_score::@1
[79] (byte*) render_bcd::screen#1 ← (byte*) render_score::screen#3
[80] (byte) render_bcd::bcd#1 ← *((const byte*) render_score::score_bytes#0+(byte/signed byte/word/signed word/dword/signed dword) 1)
[81] call render_bcd
to:render_score::@4
render_score::@4: scope:[render_score] from render_score::@3
[82] (byte*) render_bcd::screen#2 ← (byte*) render_score::screen#3
[83] (byte) render_bcd::bcd#2 ← *((const byte*) render_score::score_bytes#0)
[84] call render_bcd
to:render_score::@5
render_score::@5: scope:[render_score] from render_score::@4
[85] (byte) render_bcd::bcd#3 ← > (word) lines_bcd#15
[86] (byte*) render_bcd::screen#3 ← (byte*) render_score::screen#3
[87] call render_bcd
to:render_score::@6
render_score::@6: scope:[render_score] from render_score::@5
[88] (byte) render_bcd::bcd#4 ← < (word) lines_bcd#15
[89] (byte*) render_bcd::screen#4 ← (byte*) render_score::screen#3
[90] call render_bcd
to:render_score::@7
render_score::@7: scope:[render_score] from render_score::@6
[91] (byte*) render_bcd::screen#5 ← (byte*) render_score::screen#3
[92] (byte) render_bcd::bcd#5 ← (byte) level_bcd#17
[93] call render_bcd
to:render_score::@return
render_score::@return: scope:[render_score] from render_score::@7
[94] return
to:@return
render_bcd: scope:[render_bcd] from render_score::@1 render_score::@3 render_score::@4 render_score::@5 render_score::@6 render_score::@7
[95] (byte) render_bcd::bcd#6 ← phi( render_score::@1/(byte) render_bcd::bcd#0 render_score::@3/(byte) render_bcd::bcd#1 render_score::@4/(byte) render_bcd::bcd#2 render_score::@5/(byte) render_bcd::bcd#3 render_score::@6/(byte) render_bcd::bcd#4 render_score::@7/(byte) render_bcd::bcd#5 )
[95] (byte) render_bcd::only_low#6 ← phi( render_score::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 render_score::@3/(byte/signed byte/word/signed word/dword/signed dword) 0 render_score::@4/(byte/signed byte/word/signed word/dword/signed dword) 0 render_score::@5/(byte/signed byte/word/signed word/dword/signed dword) 1 render_score::@6/(byte/signed byte/word/signed word/dword/signed dword) 0 render_score::@7/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[95] (word) render_bcd::offset#6 ← phi( render_score::@1/(const word) render_score::score_offset#0 render_score::@3/(const word) render_score::score_offset#0+(byte/signed byte/word/signed word/dword/signed dword) 2 render_score::@4/(const word) render_score::score_offset#0+(byte/signed byte/word/signed word/dword/signed dword) 4 render_score::@5/(const word) render_score::lines_offset#0 render_score::@6/(const word) render_score::lines_offset#0+(byte/signed byte/word/signed word/dword/signed dword) 1 render_score::@7/(const word) render_score::level_offset#0 )
[95] (byte*) render_bcd::screen#6 ← phi( render_score::@1/(byte*) render_bcd::screen#0 render_score::@3/(byte*) render_bcd::screen#1 render_score::@4/(byte*) render_bcd::screen#2 render_score::@5/(byte*) render_bcd::screen#3 render_score::@6/(byte*) render_bcd::screen#4 render_score::@7/(byte*) render_bcd::screen#5 )
[96] (byte*) render_bcd::screen_pos#0 ← (byte*) render_bcd::screen#6 + (word) render_bcd::offset#6
[97] if((byte) render_bcd::only_low#6!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto render_bcd::@1
to:render_bcd::@2
render_bcd::@2: scope:[render_bcd] from render_bcd
[98] (byte~) render_bcd::$5 ← (byte) render_bcd::bcd#6 >> (byte/signed byte/word/signed word/dword/signed dword) 4
[99] (byte~) render_bcd::$6 ← (const byte) render_bcd::ZERO_CHAR#0 + (byte~) render_bcd::$5
[100] *((byte*) render_bcd::screen_pos#0) ← (byte~) render_bcd::$6
[101] (byte*) render_bcd::screen_pos#2 ← ++ (byte*) render_bcd::screen_pos#0
to:render_bcd::@1
render_bcd::@1: scope:[render_bcd] from render_bcd render_bcd::@2
[102] (byte*) render_bcd::screen_pos#3 ← phi( render_bcd/(byte*) render_bcd::screen_pos#0 render_bcd::@2/(byte*) render_bcd::screen_pos#2 )
[103] (byte~) render_bcd::$3 ← (byte) render_bcd::bcd#6 & (byte/signed byte/word/signed word/dword/signed dword) $f
[104] (byte~) render_bcd::$4 ← (const byte) render_bcd::ZERO_CHAR#0 + (byte~) render_bcd::$3
[105] *((byte*) render_bcd::screen_pos#3) ← (byte~) render_bcd::$4
to:render_bcd::@return
render_bcd::@return: scope:[render_bcd] from render_bcd::@1
[106] return
to:@return
render_next: scope:[render_next] from main::@16 main::@22
[107] (byte) next_piece_idx#12 ← phi( main::@16/(byte~) next_piece_idx#84 main::@22/(byte~) next_piece_idx#85 )
[107] (byte) render_screen_render#15 ← phi( main::@16/(byte/signed byte/word/signed word/dword/signed dword) $40 main::@22/(byte~) render_screen_render#68 )
[108] if((byte) render_screen_render#15==(byte/signed byte/word/signed word/dword/signed dword) 0) goto render_next::@1
to:render_next::@2
render_next::@2: scope:[render_next] from render_next
[109] phi()
to:render_next::@1
render_next::@1: scope:[render_next] from render_next render_next::@2
[110] (byte*) render_next::screen_next_area#11 ← phi( render_next/(const byte*) PLAYFIELD_SCREEN_1#0+(const word) render_next::next_area_offset#0 render_next::@2/(const byte*) PLAYFIELD_SCREEN_2#0+(const word) render_next::next_area_offset#0 )
[111] (byte~) render_next::$4 ← (byte) next_piece_idx#12 << (byte/signed byte/word/signed word/dword/signed dword) 1
[112] (byte) render_next::next_piece_char#0 ← *((const byte[]) PIECES_NEXT_CHARS#0 + (byte) next_piece_idx#12)
[113] (byte*~) render_next::next_piece_gfx#9 ← (byte*)*((const word[]) PIECES#0 + (byte~) render_next::$4)
to:render_next::@3
render_next::@3: scope:[render_next] from render_next::@1 render_next::@8
[114] (byte) render_next::l#7 ← phi( render_next::@8/(byte) render_next::l#1 render_next::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[114] (byte*) render_next::screen_next_area#10 ← phi( render_next::@8/(byte*) render_next::screen_next_area#4 render_next::@1/(byte*) render_next::screen_next_area#11 )
[114] (byte*) render_next::next_piece_gfx#3 ← phi( render_next::@8/(byte*) render_next::next_piece_gfx#1 render_next::@1/(byte*~) render_next::next_piece_gfx#9 )
to:render_next::@4
render_next::@4: scope:[render_next] from render_next::@3 render_next::@6
[115] (byte) render_next::c#2 ← phi( render_next::@3/(byte/signed byte/word/signed word/dword/signed dword) 0 render_next::@6/(byte) render_next::c#1 )
[115] (byte*) render_next::screen_next_area#5 ← phi( render_next::@3/(byte*) render_next::screen_next_area#10 render_next::@6/(byte*) render_next::screen_next_area#3 )
[115] (byte*) render_next::next_piece_gfx#2 ← phi( render_next::@3/(byte*) render_next::next_piece_gfx#3 render_next::@6/(byte*) render_next::next_piece_gfx#1 )
[116] (byte) render_next::cell#0 ← *((byte*) render_next::next_piece_gfx#2)
[117] (byte*) render_next::next_piece_gfx#1 ← ++ (byte*) render_next::next_piece_gfx#2
[118] if((byte) render_next::cell#0!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto render_next::@5
to:render_next::@7
render_next::@7: scope:[render_next] from render_next::@4
[119] *((byte*) render_next::screen_next_area#5) ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:render_next::@6
render_next::@6: scope:[render_next] from render_next::@5 render_next::@7
[120] (byte*) render_next::screen_next_area#3 ← ++ (byte*) render_next::screen_next_area#5
[121] (byte) render_next::c#1 ← ++ (byte) render_next::c#2
[122] if((byte) render_next::c#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto render_next::@4
to:render_next::@8
render_next::@8: scope:[render_next] from render_next::@6
[123] (byte*) render_next::screen_next_area#4 ← (byte*) render_next::screen_next_area#3 + (byte/signed byte/word/signed word/dword/signed dword) $24
[124] (byte) render_next::l#1 ← ++ (byte) render_next::l#7
[125] if((byte) render_next::l#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto render_next::@3
to:render_next::@return
render_next::@return: scope:[render_next] from render_next::@8
[126] return
to:@return
render_next::@5: scope:[render_next] from render_next::@4
[127] *((byte*) render_next::screen_next_area#5) ← (byte) render_next::next_piece_char#0
to:render_next::@6
render_moving: scope:[render_moving] from main::@15 main::@21
[128] (byte) current_piece_char#68 ← phi( main::@15/(byte~) current_piece_char#108 main::@21/(byte~) current_piece_char#109 )
[128] (byte*) current_piece_gfx#64 ← phi( main::@15/(byte*~) current_piece_gfx#120 main::@21/(byte*~) current_piece_gfx#121 )
[128] (byte) current_xpos#59 ← phi( main::@15/(byte~) current_xpos#130 main::@21/(byte~) current_xpos#131 )
[128] (byte) render_screen_render#33 ← phi( main::@15/(byte/signed byte/word/signed word/dword/signed dword) $40 main::@21/(byte~) render_screen_render#69 )
[128] (byte) current_ypos#13 ← phi( main::@15/(byte~) current_ypos#106 main::@21/(byte~) current_ypos#107 )
[129] (byte) render_moving::ypos2#0 ← (byte) current_ypos#13 << (byte/signed byte/word/signed word/dword/signed dword) 1
to:render_moving::@1
render_moving::@1: scope:[render_moving] from render_moving render_moving::@3
[130] (byte) render_moving::l#4 ← phi( render_moving/(byte/signed byte/word/signed word/dword/signed dword) 0 render_moving::@3/(byte) render_moving::l#1 )
[130] (byte) render_moving::i#3 ← phi( render_moving/(byte/signed byte/word/signed word/dword/signed dword) 0 render_moving::@3/(byte) render_moving::i#8 )
[130] (byte) render_moving::ypos2#2 ← phi( render_moving/(byte) render_moving::ypos2#0 render_moving::@3/(byte) render_moving::ypos2#1 )
[131] if((byte) render_moving::ypos2#2>=(byte/signed byte/word/signed word/dword/signed dword) 2+(byte/signed byte/word/signed word/dword/signed dword) 1) goto render_moving::@2
to:render_moving::@7
render_moving::@7: scope:[render_moving] from render_moving::@1
[132] (byte) render_moving::i#1 ← (byte) render_moving::i#3 + (byte/signed byte/word/signed word/dword/signed dword) 4
to:render_moving::@3
render_moving::@3: scope:[render_moving] from render_moving::@5 render_moving::@7
[133] (byte) render_moving::i#8 ← phi( render_moving::@5/(byte) render_moving::i#2 render_moving::@7/(byte) render_moving::i#1 )
[134] (byte) render_moving::ypos2#1 ← (byte) render_moving::ypos2#2 + (byte/signed byte/word/signed word/dword/signed dword) 2
[135] (byte) render_moving::l#1 ← ++ (byte) render_moving::l#4
[136] if((byte) render_moving::l#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto render_moving::@1
to:render_moving::@return
render_moving::@return: scope:[render_moving] from render_moving::@3
[137] return
to:@return
render_moving::@2: scope:[render_moving] from render_moving::@1
[138] (byte~) render_moving::$2 ← (byte) render_screen_render#33 + (byte) render_moving::ypos2#2
[139] (byte*) render_moving::screen_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_moving::$2)
[140] (byte) render_moving::xpos#0 ← (byte) current_xpos#59
to:render_moving::@4
render_moving::@4: scope:[render_moving] from render_moving::@2 render_moving::@5
[141] (byte) render_moving::c#2 ← phi( render_moving::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 render_moving::@5/(byte) render_moving::c#1 )
[141] (byte) render_moving::xpos#2 ← phi( render_moving::@2/(byte) render_moving::xpos#0 render_moving::@5/(byte) render_moving::xpos#1 )
[141] (byte) render_moving::i#4 ← phi( render_moving::@2/(byte) render_moving::i#3 render_moving::@5/(byte) render_moving::i#2 )
[142] (byte) render_moving::current_cell#0 ← *((byte*) current_piece_gfx#64 + (byte) render_moving::i#4)
[143] (byte) render_moving::i#2 ← ++ (byte) render_moving::i#4
[144] if((byte) render_moving::current_cell#0==(byte/signed byte/word/signed word/dword/signed dword) 0) goto render_moving::@5
to:render_moving::@6
render_moving::@6: scope:[render_moving] from render_moving::@4
[145] *((byte*) render_moving::screen_line#0 + (byte) render_moving::xpos#2) ← (byte) current_piece_char#68
to:render_moving::@5
render_moving::@5: scope:[render_moving] from render_moving::@4 render_moving::@6
[146] (byte) render_moving::xpos#1 ← ++ (byte) render_moving::xpos#2
[147] (byte) render_moving::c#1 ← ++ (byte) render_moving::c#2
[148] if((byte) render_moving::c#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto render_moving::@4
to:render_moving::@3
render_playfield: scope:[render_playfield] from main::@14 main::@7
[149] (byte) render_screen_render#22 ← phi( main::@7/(byte~) render_screen_render#70 main::@14/(byte/signed byte/word/signed word/dword/signed dword) $40 )
to:render_playfield::@1
render_playfield::@1: scope:[render_playfield] from render_playfield render_playfield::@3
[150] (byte) render_playfield::i#3 ← phi( render_playfield/(const byte) PLAYFIELD_COLS#0*(byte/signed byte/word/signed word/dword/signed dword) 2 render_playfield::@3/(byte) render_playfield::i#1 )
[150] (byte) render_playfield::l#2 ← phi( render_playfield/(byte/signed byte/word/signed word/dword/signed dword) 2 render_playfield::@3/(byte) render_playfield::l#1 )
[151] (byte~) render_playfield::$2 ← (byte) render_playfield::l#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
[152] (byte~) render_playfield::$3 ← (byte) render_screen_render#22 + (byte~) render_playfield::$2
[153] (byte*) render_playfield::screen_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_playfield::$3)
to:render_playfield::@2
render_playfield::@2: scope:[render_playfield] from render_playfield::@1 render_playfield::@2
[154] (byte) render_playfield::c#2 ← phi( render_playfield::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 render_playfield::@2/(byte) render_playfield::c#1 )
[154] (byte*) render_playfield::screen_line#2 ← phi( render_playfield::@1/(byte*) render_playfield::screen_line#0 render_playfield::@2/(byte*) render_playfield::screen_line#1 )
[154] (byte) render_playfield::i#2 ← phi( render_playfield::@1/(byte) render_playfield::i#3 render_playfield::@2/(byte) render_playfield::i#1 )
[155] *((byte*) render_playfield::screen_line#2) ← *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) render_playfield::i#2)
[156] (byte*) render_playfield::screen_line#1 ← ++ (byte*) render_playfield::screen_line#2
[157] (byte) render_playfield::i#1 ← ++ (byte) render_playfield::i#2
[158] (byte) render_playfield::c#1 ← ++ (byte) render_playfield::c#2
[159] if((byte) render_playfield::c#1!=(const byte) PLAYFIELD_COLS#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto render_playfield::@2
to:render_playfield::@3
render_playfield::@3: scope:[render_playfield] from render_playfield::@2
[160] (byte) render_playfield::l#1 ← ++ (byte) render_playfield::l#2
[161] if((byte) render_playfield::l#1!=(const byte) PLAYFIELD_LINES#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto render_playfield::@1
to:render_playfield::@return
render_playfield::@return: scope:[render_playfield] from render_playfield::@3
[162] return
to:@return
play_movement: scope:[play_movement] from main::@4
[163] (byte) play_move_down::key_event#0 ← (byte) play_movement::key_event#0
[164] call play_move_down
[165] (byte) play_move_down::return#0 ← (byte) play_move_down::return#3
to:play_movement::@2
play_movement::@2: scope:[play_movement] from play_movement
[166] (byte) play_movement::render#1 ← (byte) play_move_down::return#0
[167] if((byte) game_over#15==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_movement::@1
to:play_movement::@return
play_movement::@return: scope:[play_movement] from play_movement::@2 play_movement::@4
[168] (byte) current_xpos#19 ← phi( play_movement::@2/(byte) current_xpos#22 play_movement::@4/(byte) current_xpos#26 )
[168] (byte*) current_piece_gfx#18 ← phi( play_movement::@2/(byte*) current_piece_gfx#20 play_movement::@4/(byte*) current_piece_gfx#21 )
[168] (byte) current_orientation#17 ← phi( play_movement::@2/(byte) current_orientation#20 play_movement::@4/(byte) current_orientation#25 )
[168] (byte) play_movement::return#2 ← phi( play_movement::@2/(byte) play_movement::render#1 play_movement::@4/(byte) play_movement::return#0 )
[169] return
to:@return
play_movement::@1: scope:[play_movement] from play_movement::@2
[170] (byte) play_move_leftright::key_event#0 ← (byte) play_movement::key_event#0
[171] call play_move_leftright
[172] (byte) play_move_leftright::return#0 ← (byte) play_move_leftright::return#2
to:play_movement::@3
play_movement::@3: scope:[play_movement] from play_movement::@1
[173] (byte~) play_movement::$3 ← (byte) play_move_leftright::return#0
[174] (byte) play_movement::render#2 ← (byte) play_movement::render#1 + (byte~) play_movement::$3
[175] (byte) play_move_rotate::key_event#0 ← (byte) play_movement::key_event#0
[176] call play_move_rotate
[177] (byte) play_move_rotate::return#0 ← (byte) play_move_rotate::return#2
to:play_movement::@4
play_movement::@4: scope:[play_movement] from play_movement::@3
[178] (byte~) play_movement::$4 ← (byte) play_move_rotate::return#0
[179] (byte) play_movement::return#0 ← (byte) play_movement::render#2 + (byte~) play_movement::$4
to:play_movement::@return
play_move_rotate: scope:[play_move_rotate] from play_movement::@3
[180] if((byte) play_move_rotate::key_event#0==(const byte) KEY_Z#0) goto play_move_rotate::@1
to:play_move_rotate::@4
play_move_rotate::@4: scope:[play_move_rotate] from play_move_rotate
[181] if((byte) play_move_rotate::key_event#0==(const byte) KEY_X#0) goto play_move_rotate::@2
to:play_move_rotate::@return
play_move_rotate::@return: scope:[play_move_rotate] from play_move_rotate::@4 play_move_rotate::@5 play_move_rotate::@6
[182] (byte*) current_piece_gfx#21 ← phi( play_move_rotate::@5/(byte*) current_piece_gfx#7 play_move_rotate::@6/(byte*) current_piece_gfx#20 play_move_rotate::@4/(byte*) current_piece_gfx#20 )
[182] (byte) current_orientation#25 ← phi( play_move_rotate::@5/(byte) current_orientation#7 play_move_rotate::@6/(byte) current_orientation#20 play_move_rotate::@4/(byte) current_orientation#20 )
[182] (byte) play_move_rotate::return#2 ← phi( play_move_rotate::@5/(byte/signed byte/word/signed word/dword/signed dword) 1 play_move_rotate::@6/(byte/signed byte/word/signed word/dword/signed dword) 0 play_move_rotate::@4/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[183] return
to:@return
play_move_rotate::@2: scope:[play_move_rotate] from play_move_rotate::@4
[184] (byte/signed word/word/dword/signed dword~) play_move_rotate::$5 ← (byte) current_orientation#20 + (byte/signed byte/word/signed word/dword/signed dword) $10
[185] (byte) play_move_rotate::orientation#2 ← (byte/signed word/word/dword/signed dword~) play_move_rotate::$5 & (byte/signed byte/word/signed word/dword/signed dword) $3f
to:play_move_rotate::@3
play_move_rotate::@3: scope:[play_move_rotate] from play_move_rotate::@1 play_move_rotate::@2
[186] (byte) play_move_rotate::orientation#3 ← phi( play_move_rotate::@1/(byte) play_move_rotate::orientation#1 play_move_rotate::@2/(byte) play_move_rotate::orientation#2 )
[187] (byte) play_collision::xpos#3 ← (byte) current_xpos#26
[188] (byte) play_collision::ypos#3 ← (byte) current_ypos#19
[189] (byte) play_collision::orientation#3 ← (byte) play_move_rotate::orientation#3
[190] (byte*~) current_piece#103 ← (byte*) current_piece#15
[191] call play_collision
[192] (byte) play_collision::return#14 ← (byte) play_collision::return#15
to:play_move_rotate::@6
play_move_rotate::@6: scope:[play_move_rotate] from play_move_rotate::@3
[193] (byte~) play_move_rotate::$2 ← (byte) play_collision::return#14
[194] if((byte~) play_move_rotate::$2!=(const byte) COLLISION_NONE#0) goto play_move_rotate::@return
to:play_move_rotate::@5
play_move_rotate::@5: scope:[play_move_rotate] from play_move_rotate::@6
[195] (byte) current_orientation#7 ← (byte) play_move_rotate::orientation#3
[196] (byte*) current_piece_gfx#7 ← (byte*) current_piece#15 + (byte) current_orientation#7
to:play_move_rotate::@return
play_move_rotate::@1: scope:[play_move_rotate] from play_move_rotate
[197] (byte/signed word/word/dword/signed dword~) play_move_rotate::$7 ← (byte) current_orientation#20 - (byte/signed byte/word/signed word/dword/signed dword) $10
[198] (byte) play_move_rotate::orientation#1 ← (byte/signed word/word/dword/signed dword~) play_move_rotate::$7 & (byte/signed byte/word/signed word/dword/signed dword) $3f
to:play_move_rotate::@3
play_collision: scope:[play_collision] from play_move_down::@8 play_move_leftright::@1 play_move_leftright::@3 play_move_rotate::@3 play_spawn_current
[199] (byte) play_collision::xpos#6 ← phi( play_move_down::@8/(byte) play_collision::xpos#0 play_move_leftright::@1/(byte) play_collision::xpos#1 play_move_leftright::@3/(byte) play_collision::xpos#2 play_move_rotate::@3/(byte) play_collision::xpos#3 play_spawn_current/(byte) play_collision::xpos#4 )
[199] (byte) play_collision::ypos#5 ← phi( play_move_down::@8/(byte) play_collision::ypos#0 play_move_leftright::@1/(byte) play_collision::ypos#1 play_move_leftright::@3/(byte) play_collision::ypos#2 play_move_rotate::@3/(byte) play_collision::ypos#3 play_spawn_current/(byte) play_collision::ypos#4 )
[199] (byte) play_collision::orientation#5 ← phi( play_move_down::@8/(byte) play_collision::orientation#0 play_move_leftright::@1/(byte) play_collision::orientation#1 play_move_leftright::@3/(byte) play_collision::orientation#2 play_move_rotate::@3/(byte) play_collision::orientation#3 play_spawn_current/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[199] (byte*) current_piece#17 ← phi( play_move_down::@8/(byte*~) current_piece#100 play_move_leftright::@1/(byte*~) current_piece#101 play_move_leftright::@3/(byte*~) current_piece#102 play_move_rotate::@3/(byte*~) current_piece#103 play_spawn_current/(byte*~) current_piece#104 )
[200] (byte*) play_collision::piece_gfx#0 ← (byte*) current_piece#17 + (byte) play_collision::orientation#5
[201] (byte) play_collision::ypos2#0 ← (byte) play_collision::ypos#5 << (byte/signed byte/word/signed word/dword/signed dword) 1
to:play_collision::@1
play_collision::@1: scope:[play_collision] from play_collision play_collision::@9
[202] (byte) play_collision::l#6 ← phi( play_collision/(byte/signed byte/word/signed word/dword/signed dword) 0 play_collision::@9/(byte) play_collision::l#1 )
[202] (byte) play_collision::i#3 ← phi( play_collision/(byte/signed byte/word/signed word/dword/signed dword) 0 play_collision::@9/(byte~) play_collision::i#11 )
[202] (byte) play_collision::ypos2#2 ← phi( play_collision/(byte) play_collision::ypos2#0 play_collision::@9/(byte) play_collision::ypos2#1 )
[203] (byte*) play_collision::playfield_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte) play_collision::ypos2#2)
[204] (byte~) play_collision::col#9 ← (byte) play_collision::xpos#6
to:play_collision::@2
play_collision::@2: scope:[play_collision] from play_collision::@1 play_collision::@10
[205] (byte) play_collision::c#2 ← phi( play_collision::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 play_collision::@10/(byte) play_collision::c#1 )
[205] (byte) play_collision::col#2 ← phi( play_collision::@1/(byte~) play_collision::col#9 play_collision::@10/(byte) play_collision::col#1 )
[205] (byte) play_collision::i#2 ← phi( play_collision::@1/(byte) play_collision::i#3 play_collision::@10/(byte~) play_collision::i#13 )
[206] (byte) play_collision::i#1 ← ++ (byte) play_collision::i#2
[207] if(*((byte*) play_collision::piece_gfx#0 + (byte) play_collision::i#2)==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_collision::@3
to:play_collision::@7
play_collision::@7: scope:[play_collision] from play_collision::@2
[208] if((byte) play_collision::ypos2#2<(byte/signed byte/word/signed word/dword/signed dword) 2*(const byte) PLAYFIELD_LINES#0) goto play_collision::@4
to:play_collision::@return
play_collision::@return: scope:[play_collision] from play_collision::@4 play_collision::@5 play_collision::@6 play_collision::@7 play_collision::@8
[209] (byte) play_collision::return#15 ← phi( play_collision::@5/(const byte) COLLISION_RIGHT#0 play_collision::@6/(const byte) COLLISION_PLAYFIELD#0 play_collision::@7/(const byte) COLLISION_BOTTOM#0 play_collision::@8/(const byte) COLLISION_NONE#0 play_collision::@4/(const byte) COLLISION_LEFT#0 )
[210] return
to:@return
play_collision::@4: scope:[play_collision] from play_collision::@7
[211] (byte~) play_collision::$7 ← (byte) play_collision::col#2 & (byte/word/signed word/dword/signed dword) $80
[212] if((byte~) play_collision::$7==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_collision::@5
to:play_collision::@return
play_collision::@5: scope:[play_collision] from play_collision::@4
[213] if((byte) play_collision::col#2<(const byte) PLAYFIELD_COLS#0) goto play_collision::@6
to:play_collision::@return
play_collision::@6: scope:[play_collision] from play_collision::@5
[214] if(*((byte*) play_collision::playfield_line#0 + (byte) play_collision::col#2)==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_collision::@3
to:play_collision::@return
play_collision::@3: scope:[play_collision] from play_collision::@2 play_collision::@6
[215] (byte) play_collision::col#1 ← ++ (byte) play_collision::col#2
[216] (byte) play_collision::c#1 ← ++ (byte) play_collision::c#2
[217] if((byte) play_collision::c#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto play_collision::@10
to:play_collision::@8
play_collision::@8: scope:[play_collision] from play_collision::@3
[218] (byte) play_collision::ypos2#1 ← (byte) play_collision::ypos2#2 + (byte/signed byte/word/signed word/dword/signed dword) 2
[219] (byte) play_collision::l#1 ← ++ (byte) play_collision::l#6
[220] if((byte) play_collision::l#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto play_collision::@9
to:play_collision::@return
play_collision::@9: scope:[play_collision] from play_collision::@8
[221] (byte~) play_collision::i#11 ← (byte) play_collision::i#1
to:play_collision::@1
play_collision::@10: scope:[play_collision] from play_collision::@3
[222] (byte~) play_collision::i#13 ← (byte) play_collision::i#1
to:play_collision::@2
play_move_leftright: scope:[play_move_leftright] from play_movement::@1
[223] if((byte) play_move_leftright::key_event#0==(const byte) KEY_COMMA#0) goto play_move_leftright::@1
to:play_move_leftright::@2
play_move_leftright::@2: scope:[play_move_leftright] from play_move_leftright
[224] if((byte) play_move_leftright::key_event#0!=(const byte) KEY_DOT#0) goto play_move_leftright::@return
to:play_move_leftright::@3
play_move_leftright::@3: scope:[play_move_leftright] from play_move_leftright::@2
[225] (byte) play_collision::xpos#2 ← (byte) current_xpos#22 + (byte/signed byte/word/signed word/dword/signed dword) 1
[226] (byte) play_collision::ypos#2 ← (byte) current_ypos#19
[227] (byte) play_collision::orientation#2 ← (byte) current_orientation#20
[228] (byte*~) current_piece#102 ← (byte*) current_piece#15
[229] call play_collision
[230] (byte) play_collision::return#13 ← (byte) play_collision::return#15
to:play_move_leftright::@7
play_move_leftright::@7: scope:[play_move_leftright] from play_move_leftright::@3
[231] (byte~) play_move_leftright::$4 ← (byte) play_collision::return#13
[232] if((byte~) play_move_leftright::$4!=(const byte) COLLISION_NONE#0) goto play_move_leftright::@return
to:play_move_leftright::@4
play_move_leftright::@4: scope:[play_move_leftright] from play_move_leftright::@7
[233] (byte) current_xpos#6 ← ++ (byte) current_xpos#22
to:play_move_leftright::@return
play_move_leftright::@return: scope:[play_move_leftright] from play_move_leftright::@2 play_move_leftright::@4 play_move_leftright::@5 play_move_leftright::@6 play_move_leftright::@7
[234] (byte) current_xpos#26 ← phi( play_move_leftright::@6/(byte) current_xpos#22 play_move_leftright::@4/(byte) current_xpos#6 play_move_leftright::@5/(byte) current_xpos#8 play_move_leftright::@7/(byte) current_xpos#22 play_move_leftright::@2/(byte) current_xpos#22 )
[234] (byte) play_move_leftright::return#2 ← phi( play_move_leftright::@6/(byte/signed byte/word/signed word/dword/signed dword) 0 play_move_leftright::@4/(byte/signed byte/word/signed word/dword/signed dword) 1 play_move_leftright::@5/(byte/signed byte/word/signed word/dword/signed dword) 1 play_move_leftright::@7/(byte/signed byte/word/signed word/dword/signed dword) 0 play_move_leftright::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[235] return
to:@return
play_move_leftright::@1: scope:[play_move_leftright] from play_move_leftright
[236] (byte) play_collision::xpos#1 ← (byte) current_xpos#22 - (byte/signed byte/word/signed word/dword/signed dword) 1
[237] (byte) play_collision::ypos#1 ← (byte) current_ypos#19
[238] (byte) play_collision::orientation#1 ← (byte) current_orientation#20
[239] (byte*~) current_piece#101 ← (byte*) current_piece#15
[240] call play_collision
[241] (byte) play_collision::return#1 ← (byte) play_collision::return#15
to:play_move_leftright::@6
play_move_leftright::@6: scope:[play_move_leftright] from play_move_leftright::@1
[242] (byte~) play_move_leftright::$8 ← (byte) play_collision::return#1
[243] if((byte~) play_move_leftright::$8!=(const byte) COLLISION_NONE#0) goto play_move_leftright::@return
to:play_move_leftright::@5
play_move_leftright::@5: scope:[play_move_leftright] from play_move_leftright::@6
[244] (byte) current_xpos#8 ← -- (byte) current_xpos#22
to:play_move_leftright::@return
play_move_down: scope:[play_move_down] from play_movement
[245] (byte) current_movedown_counter#12 ← ++ (byte) current_movedown_counter#16
[246] if((byte) play_move_down::key_event#0!=(const byte) KEY_SPACE#0) goto play_move_down::@1
to:play_move_down::@4
play_move_down::@4: scope:[play_move_down] from play_move_down
[247] phi()
to:play_move_down::@1
play_move_down::@1: scope:[play_move_down] from play_move_down play_move_down::@4
[248] (byte) play_move_down::movedown#10 ← phi( play_move_down/(byte/signed byte/word/signed word/dword/signed dword) 0 play_move_down::@4/(byte/signed byte/word/signed word/dword/signed dword) 1 )
[249] call keyboard_event_pressed
[250] (byte) keyboard_event_pressed::return#12 ← (byte) keyboard_event_pressed::return#11
to:play_move_down::@12
play_move_down::@12: scope:[play_move_down] from play_move_down::@1
[251] (byte~) play_move_down::$2 ← (byte) keyboard_event_pressed::return#12
[252] if((byte~) play_move_down::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_move_down::@2
to:play_move_down::@5
play_move_down::@5: scope:[play_move_down] from play_move_down::@12
[253] if((byte) current_movedown_counter#12<(const byte) current_movedown_fast#0) goto play_move_down::@2
to:play_move_down::@6
play_move_down::@6: scope:[play_move_down] from play_move_down::@5
[254] (byte) play_move_down::movedown#2 ← ++ (byte) play_move_down::movedown#10
to:play_move_down::@2
play_move_down::@2: scope:[play_move_down] from play_move_down::@12 play_move_down::@5 play_move_down::@6
[255] (byte) play_move_down::movedown#7 ← phi( play_move_down::@5/(byte) play_move_down::movedown#10 play_move_down::@12/(byte) play_move_down::movedown#10 play_move_down::@6/(byte) play_move_down::movedown#2 )
[256] if((byte) current_movedown_counter#12<(byte) current_movedown_slow#14) goto play_move_down::@3
to:play_move_down::@7
play_move_down::@7: scope:[play_move_down] from play_move_down::@2
[257] (byte) play_move_down::movedown#3 ← ++ (byte) play_move_down::movedown#7
to:play_move_down::@3
play_move_down::@3: scope:[play_move_down] from play_move_down::@2 play_move_down::@7
[258] (byte) play_move_down::movedown#6 ← phi( play_move_down::@2/(byte) play_move_down::movedown#7 play_move_down::@7/(byte) play_move_down::movedown#3 )
[259] if((byte) play_move_down::movedown#6==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_move_down::@return
to:play_move_down::@8
play_move_down::@8: scope:[play_move_down] from play_move_down::@3
[260] (byte) play_collision::ypos#0 ← (byte) current_ypos#100 + (byte/signed byte/word/signed word/dword/signed dword) 1
[261] (byte) play_collision::xpos#0 ← (byte) current_xpos#124
[262] (byte) play_collision::orientation#0 ← (byte) current_orientation#13
[263] (byte*~) current_piece#100 ← (byte*) current_piece#10
[264] call play_collision
[265] (byte) play_collision::return#0 ← (byte) play_collision::return#15
to:play_move_down::@13
play_move_down::@13: scope:[play_move_down] from play_move_down::@8
[266] (byte~) play_move_down::$12 ← (byte) play_collision::return#0
[267] if((byte~) play_move_down::$12==(const byte) COLLISION_NONE#0) goto play_move_down::@10
to:play_move_down::@9
play_move_down::@9: scope:[play_move_down] from play_move_down::@13
[268] phi()
[269] call play_lock_current
to:play_move_down::@14
play_move_down::@14: scope:[play_move_down] from play_move_down::@9
[270] phi()
[271] call play_remove_lines
[272] (byte) play_remove_lines::return#0 ← (byte) play_remove_lines::removed#8
to:play_move_down::@15
play_move_down::@15: scope:[play_move_down] from play_move_down::@14
[273] (byte) play_move_down::removed#0 ← (byte) play_remove_lines::return#0
[274] (byte) play_update_score::removed#0 ← (byte) play_move_down::removed#0
[275] call play_update_score
to:play_move_down::@16
play_move_down::@16: scope:[play_move_down] from play_move_down::@15
[276] phi()
[277] call play_spawn_current
[278] (byte*~) current_piece#106 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$0)
to:play_move_down::@11
play_move_down::@11: scope:[play_move_down] from play_move_down::@10 play_move_down::@16
[279] (byte) next_piece_idx#30 ← phi( play_move_down::@10/(byte) next_piece_idx#10 play_move_down::@16/(byte) play_spawn_current::piece_idx#2 )
[279] (byte) game_over#27 ← phi( play_move_down::@10/(byte) game_over#10 play_move_down::@16/(byte) game_over#52 )
[279] (byte) current_xpos#43 ← phi( play_move_down::@10/(byte) current_xpos#124 play_move_down::@16/(byte) current_xpos#103 )
[279] (byte*) current_piece_gfx#35 ← phi( play_move_down::@10/(byte*) current_piece_gfx#114 play_move_down::@16/(byte*) current_piece_gfx#74 )
[279] (byte) current_orientation#37 ← phi( play_move_down::@10/(byte) current_orientation#13 play_move_down::@16/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[279] (byte) current_piece_char#29 ← phi( play_move_down::@10/(byte) current_piece_char#10 play_move_down::@16/(byte) current_piece_char#5 )
[279] (byte*) current_piece#28 ← phi( play_move_down::@10/(byte*) current_piece#10 play_move_down::@16/(byte*~) current_piece#106 )
[279] (byte) level_bcd#31 ← phi( play_move_down::@10/(byte) level_bcd#11 play_move_down::@16/(byte) level_bcd#19 )
[279] (byte) current_movedown_slow#37 ← phi( play_move_down::@10/(byte) current_movedown_slow#14 play_move_down::@16/(byte) current_movedown_slow#23 )
[279] (byte) level#33 ← phi( play_move_down::@10/(byte) level#10 play_move_down::@16/(byte) level#19 )
[279] (dword) score_bcd#26 ← phi( play_move_down::@10/(dword) score_bcd#18 play_move_down::@16/(dword) score_bcd#16 )
[279] (word) lines_bcd#26 ← phi( play_move_down::@10/(word) lines_bcd#19 play_move_down::@16/(word) lines_bcd#17 )
[279] (byte) current_ypos#38 ← phi( play_move_down::@10/(byte) current_ypos#3 play_move_down::@16/(byte) current_ypos#6 )
to:play_move_down::@return
play_move_down::@return: scope:[play_move_down] from play_move_down::@11 play_move_down::@3
[280] (byte) next_piece_idx#16 ← phi( play_move_down::@11/(byte) next_piece_idx#30 play_move_down::@3/(byte) next_piece_idx#10 )
[280] (byte) game_over#15 ← phi( play_move_down::@11/(byte) game_over#27 play_move_down::@3/(byte) game_over#10 )
[280] (byte) current_xpos#22 ← phi( play_move_down::@11/(byte) current_xpos#43 play_move_down::@3/(byte) current_xpos#124 )
[280] (byte*) current_piece_gfx#20 ← phi( play_move_down::@11/(byte*) current_piece_gfx#35 play_move_down::@3/(byte*) current_piece_gfx#114 )
[280] (byte) current_orientation#20 ← phi( play_move_down::@11/(byte) current_orientation#37 play_move_down::@3/(byte) current_orientation#13 )
[280] (byte) current_piece_char#16 ← phi( play_move_down::@11/(byte) current_piece_char#29 play_move_down::@3/(byte) current_piece_char#10 )
[280] (byte*) current_piece#15 ← phi( play_move_down::@11/(byte*) current_piece#28 play_move_down::@3/(byte*) current_piece#10 )
[280] (byte) level_bcd#17 ← phi( play_move_down::@11/(byte) level_bcd#31 play_move_down::@3/(byte) level_bcd#11 )
[280] (byte) current_movedown_slow#21 ← phi( play_move_down::@11/(byte) current_movedown_slow#37 play_move_down::@3/(byte) current_movedown_slow#14 )
[280] (byte) level#17 ← phi( play_move_down::@11/(byte) level#33 play_move_down::@3/(byte) level#10 )
[280] (dword) score_bcd#14 ← phi( play_move_down::@11/(dword) score_bcd#26 play_move_down::@3/(dword) score_bcd#18 )
[280] (word) lines_bcd#15 ← phi( play_move_down::@11/(word) lines_bcd#26 play_move_down::@3/(word) lines_bcd#19 )
[280] (byte) current_ypos#19 ← phi( play_move_down::@11/(byte) current_ypos#38 play_move_down::@3/(byte) current_ypos#100 )
[280] (byte) current_movedown_counter#14 ← phi( play_move_down::@11/(byte/signed byte/word/signed word/dword/signed dword) 0 play_move_down::@3/(byte) current_movedown_counter#12 )
[280] (byte) play_move_down::return#3 ← phi( play_move_down::@11/(byte/signed byte/word/signed word/dword/signed dword) 1 play_move_down::@3/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[281] return
to:@return
play_move_down::@10: scope:[play_move_down] from play_move_down::@13
[282] (byte) current_ypos#3 ← ++ (byte) current_ypos#100
to:play_move_down::@11
play_spawn_current: scope:[play_spawn_current] from main::@12 main::@13 play_move_down::@16
[283] (byte) game_over#65 ← phi( main::@12/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@13/(byte) game_over#52 play_move_down::@16/(byte) game_over#10 )
[283] (byte) next_piece_idx#17 ← phi( main::@12/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@13/(byte) play_spawn_current::piece_idx#2 play_move_down::@16/(byte) next_piece_idx#10 )
[284] (byte) play_spawn_current::current_piece_idx#0 ← (byte) next_piece_idx#17
[285] (byte~) play_spawn_current::$0 ← (byte) play_spawn_current::current_piece_idx#0 << (byte/signed byte/word/signed word/dword/signed dword) 1
[286] (byte) current_piece_char#5 ← *((const byte[]) PIECES_CHARS#0 + (byte) play_spawn_current::current_piece_idx#0)
[287] (byte*) current_piece_gfx#74 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$0)
[288] (byte) current_xpos#103 ← *((const byte[]) PIECES_START_X#0 + (byte) play_spawn_current::current_piece_idx#0)
[289] (byte) current_ypos#6 ← *((const byte[]) PIECES_START_Y#0 + (byte) play_spawn_current::current_piece_idx#0)
[290] (byte) play_collision::xpos#4 ← (byte) current_xpos#103
[291] (byte) play_collision::ypos#4 ← (byte) current_ypos#6
[292] (byte*~) current_piece#104 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$0)
[293] call play_collision
[294] (byte) play_collision::return#10 ← (byte) play_collision::return#15
to:play_spawn_current::@4
play_spawn_current::@4: scope:[play_spawn_current] from play_spawn_current
[295] (byte~) play_spawn_current::$2 ← (byte) play_collision::return#10
[296] if((byte~) play_spawn_current::$2!=(const byte) COLLISION_PLAYFIELD#0) goto play_spawn_current::@5
to:play_spawn_current::@1
play_spawn_current::@1: scope:[play_spawn_current] from play_spawn_current::@4 play_spawn_current::@5
[297] (byte) game_over#52 ← phi( play_spawn_current::@5/(byte) game_over#65 play_spawn_current::@4/(byte/signed byte/word/signed word/dword/signed dword) 1 )
to:play_spawn_current::@2
play_spawn_current::@2: scope:[play_spawn_current] from play_spawn_current::@1 play_spawn_current::@3
[298] (byte) play_spawn_current::piece_idx#2 ← phi( play_spawn_current::@1/(byte/signed byte/word/signed word/dword/signed dword) 7 play_spawn_current::@3/(byte) play_spawn_current::piece_idx#1 )
[299] if((byte) play_spawn_current::piece_idx#2==(byte/signed byte/word/signed word/dword/signed dword) 7) goto play_spawn_current::sid_rnd1
to:play_spawn_current::@return
play_spawn_current::@return: scope:[play_spawn_current] from play_spawn_current::@2
[300] return
to:@return
play_spawn_current::sid_rnd1: scope:[play_spawn_current] from play_spawn_current::@2
[301] (byte) play_spawn_current::sid_rnd1_return#0 ← *((const byte*) SID_VOICE3_OSC#0)
to:play_spawn_current::@3
play_spawn_current::@3: scope:[play_spawn_current] from play_spawn_current::sid_rnd1
[302] (byte) play_spawn_current::piece_idx#1 ← (byte) play_spawn_current::sid_rnd1_return#0 & (byte/signed byte/word/signed word/dword/signed dword) 7
to:play_spawn_current::@2
play_spawn_current::@5: scope:[play_spawn_current] from play_spawn_current::@4
[303] phi()
to:play_spawn_current::@1
play_update_score: scope:[play_update_score] from play_move_down::@15
[304] if((byte) play_update_score::removed#0==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_update_score::@return
to:play_update_score::@1
play_update_score::@1: scope:[play_update_score] from play_update_score
[305] (byte~) play_update_score::$2 ← < (word) lines_bcd#19
[306] (byte) play_update_score::lines_before#0 ← (byte~) play_update_score::$2 & (byte/word/signed word/dword/signed dword) $f0
[307] (byte~) play_update_score::$4 ← (byte) play_update_score::removed#0 << (byte/signed byte/word/signed word/dword/signed dword) 2
[308] (dword) play_update_score::add_bcd#0 ← *((const dword[5]) score_add_bcd#0 + (byte~) play_update_score::$4)
asm { sed }
[310] (word) lines_bcd#30 ← (word) lines_bcd#19 + (byte) play_update_score::removed#0
[311] (dword) score_bcd#30 ← (dword) score_bcd#18 + (dword) play_update_score::add_bcd#0
asm { cld }
[313] (byte~) play_update_score::$5 ← < (word) lines_bcd#30
[314] (byte) play_update_score::lines_after#0 ← (byte~) play_update_score::$5 & (byte/word/signed word/dword/signed dword) $f0
[315] if((byte) play_update_score::lines_before#0==(byte) play_update_score::lines_after#0) goto play_update_score::@return
to:play_update_score::@2
play_update_score::@2: scope:[play_update_score] from play_update_score::@1
[316] phi()
[317] call play_increase_level
to:play_update_score::@return
play_update_score::@return: scope:[play_update_score] from play_update_score play_update_score::@1 play_update_score::@2
[318] (byte) level_bcd#19 ← phi( play_update_score/(byte) level_bcd#11 play_update_score::@1/(byte) level_bcd#11 play_update_score::@2/(byte) level_bcd#64 )
[318] (byte) current_movedown_slow#23 ← phi( play_update_score/(byte) current_movedown_slow#14 play_update_score::@1/(byte) current_movedown_slow#14 play_update_score::@2/(byte) current_movedown_slow#69 )
[318] (byte) level#19 ← phi( play_update_score/(byte) level#10 play_update_score::@1/(byte) level#10 play_update_score::@2/(byte) level#21 )
[318] (dword) score_bcd#16 ← phi( play_update_score/(dword) score_bcd#18 play_update_score::@1/(dword) score_bcd#30 play_update_score::@2/(dword) score_bcd#30 )
[318] (word) lines_bcd#17 ← phi( play_update_score/(word) lines_bcd#19 play_update_score::@1/(word) lines_bcd#30 play_update_score::@2/(word) lines_bcd#30 )
[319] return
to:@return
play_increase_level: scope:[play_increase_level] from play_update_score::@2
[320] (byte) level#21 ← ++ (byte) level#10
[321] if((byte) level#21>=(byte/signed byte/word/signed word/dword/signed dword) $1d+(byte/signed byte/word/signed word/dword/signed dword) 1) goto play_increase_level::@1
to:play_increase_level::@3
play_increase_level::@3: scope:[play_increase_level] from play_increase_level
[322] (byte) current_movedown_slow#10 ← *((const byte[]) MOVEDOWN_SLOW_SPEEDS#0 + (byte) level#21)
to:play_increase_level::@1
play_increase_level::@1: scope:[play_increase_level] from play_increase_level play_increase_level::@3
[323] (byte) current_movedown_slow#69 ← phi( play_increase_level/(byte/signed byte/word/signed word/dword/signed dword) 1 play_increase_level::@3/(byte) current_movedown_slow#10 )
[324] (byte) level_bcd#21 ← ++ (byte) level_bcd#11
[325] (byte~) play_increase_level::$1 ← (byte) level_bcd#21 & (byte/signed byte/word/signed word/dword/signed dword) $f
[326] if((byte~) play_increase_level::$1!=(byte/signed byte/word/signed word/dword/signed dword) $a) goto play_increase_level::@2
to:play_increase_level::@4
play_increase_level::@4: scope:[play_increase_level] from play_increase_level::@1
[327] (byte) level_bcd#8 ← (byte) level_bcd#21 + (byte/signed byte/word/signed word/dword/signed dword) 6
to:play_increase_level::@2
play_increase_level::@2: scope:[play_increase_level] from play_increase_level::@1 play_increase_level::@4
[328] (byte) level_bcd#64 ← phi( play_increase_level::@1/(byte) level_bcd#21 play_increase_level::@4/(byte) level_bcd#8 )
asm { sed }
to:play_increase_level::@5
play_increase_level::@5: scope:[play_increase_level] from play_increase_level::@2 play_increase_level::@5
[330] (byte) play_increase_level::b#2 ← phi( play_increase_level::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 play_increase_level::@5/(byte) play_increase_level::b#1 )
[331] (byte) play_increase_level::b4#0 ← (byte) play_increase_level::b#2 << (byte/signed byte/word/signed word/dword/signed dword) 2
[332] *((const dword[5]) score_add_bcd#0 + (byte) play_increase_level::b4#0) ← *((const dword[5]) score_add_bcd#0 + (byte) play_increase_level::b4#0) + *((const dword[]) SCORE_BASE_BCD#0 + (byte) play_increase_level::b4#0)
[333] (byte) play_increase_level::b#1 ← ++ (byte) play_increase_level::b#2
[334] if((byte) play_increase_level::b#1!=(byte/signed byte/word/signed word/dword/signed dword) 5) goto play_increase_level::@5
to:play_increase_level::@6
play_increase_level::@6: scope:[play_increase_level] from play_increase_level::@5
asm { cld }
to:play_increase_level::@return
play_increase_level::@return: scope:[play_increase_level] from play_increase_level::@6
[336] return
to:@return
play_remove_lines: scope:[play_remove_lines] from play_move_down::@14
[337] phi()
to:play_remove_lines::@1
play_remove_lines::@1: scope:[play_remove_lines] from play_remove_lines play_remove_lines::@6
[338] (byte) play_remove_lines::removed#11 ← phi( play_remove_lines/(byte/signed byte/word/signed word/dword/signed dword) 0 play_remove_lines::@6/(byte) play_remove_lines::removed#8 )
[338] (byte) play_remove_lines::y#8 ← phi( play_remove_lines/(byte/signed byte/word/signed word/dword/signed dword) 0 play_remove_lines::@6/(byte) play_remove_lines::y#1 )
[338] (byte) play_remove_lines::w#12 ← phi( play_remove_lines/(const byte) PLAYFIELD_LINES#0*(const byte) PLAYFIELD_COLS#0-(byte/signed byte/word/signed word/dword/signed dword) 1 play_remove_lines::@6/(byte) play_remove_lines::w#11 )
[338] (byte) play_remove_lines::r#3 ← phi( play_remove_lines/(const byte) PLAYFIELD_LINES#0*(const byte) PLAYFIELD_COLS#0-(byte/signed byte/word/signed word/dword/signed dword) 1 play_remove_lines::@6/(byte) play_remove_lines::r#1 )
to:play_remove_lines::@2
play_remove_lines::@2: scope:[play_remove_lines] from play_remove_lines::@1 play_remove_lines::@3
[339] (byte) play_remove_lines::full#4 ← phi( play_remove_lines::@1/(byte/signed byte/word/signed word/dword/signed dword) 1 play_remove_lines::@3/(byte) play_remove_lines::full#2 )
[339] (byte) play_remove_lines::x#2 ← phi( play_remove_lines::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 play_remove_lines::@3/(byte) play_remove_lines::x#1 )
[339] (byte) play_remove_lines::w#4 ← phi( play_remove_lines::@1/(byte) play_remove_lines::w#12 play_remove_lines::@3/(byte) play_remove_lines::w#1 )
[339] (byte) play_remove_lines::r#2 ← phi( play_remove_lines::@1/(byte) play_remove_lines::r#3 play_remove_lines::@3/(byte) play_remove_lines::r#1 )
[340] (byte) play_remove_lines::c#0 ← *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::r#2)
[341] (byte) play_remove_lines::r#1 ← -- (byte) play_remove_lines::r#2
[342] if((byte) play_remove_lines::c#0!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_remove_lines::@9
to:play_remove_lines::@3
play_remove_lines::@3: scope:[play_remove_lines] from play_remove_lines::@2 play_remove_lines::@9
[343] (byte) play_remove_lines::full#2 ← phi( play_remove_lines::@9/(byte) play_remove_lines::full#4 play_remove_lines::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[344] *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::w#4) ← (byte) play_remove_lines::c#0
[345] (byte) play_remove_lines::w#1 ← -- (byte) play_remove_lines::w#4
[346] (byte) play_remove_lines::x#1 ← ++ (byte) play_remove_lines::x#2
[347] if((byte) play_remove_lines::x#1!=(const byte) PLAYFIELD_COLS#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto play_remove_lines::@2
to:play_remove_lines::@4
play_remove_lines::@4: scope:[play_remove_lines] from play_remove_lines::@3
[348] if((byte) play_remove_lines::full#2!=(byte/signed byte/word/signed word/dword/signed dword) 1) goto play_remove_lines::@6
to:play_remove_lines::@5
play_remove_lines::@5: scope:[play_remove_lines] from play_remove_lines::@4
[349] (byte) play_remove_lines::w#2 ← (byte) play_remove_lines::w#1 + (const byte) PLAYFIELD_COLS#0
[350] (byte) play_remove_lines::removed#1 ← ++ (byte) play_remove_lines::removed#11
to:play_remove_lines::@6
play_remove_lines::@6: scope:[play_remove_lines] from play_remove_lines::@4 play_remove_lines::@5
[351] (byte) play_remove_lines::removed#8 ← phi( play_remove_lines::@4/(byte) play_remove_lines::removed#11 play_remove_lines::@5/(byte) play_remove_lines::removed#1 )
[351] (byte) play_remove_lines::w#11 ← phi( play_remove_lines::@4/(byte) play_remove_lines::w#1 play_remove_lines::@5/(byte) play_remove_lines::w#2 )
[352] (byte) play_remove_lines::y#1 ← ++ (byte) play_remove_lines::y#8
[353] if((byte) play_remove_lines::y#1!=(const byte) PLAYFIELD_LINES#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto play_remove_lines::@1
to:play_remove_lines::@7
play_remove_lines::@7: scope:[play_remove_lines] from play_remove_lines::@6 play_remove_lines::@8
[354] (byte) play_remove_lines::w#6 ← phi( play_remove_lines::@8/(byte) play_remove_lines::w#3 play_remove_lines::@6/(byte) play_remove_lines::w#11 )
[355] if((byte) play_remove_lines::w#6!=(byte/word/signed word/dword/signed dword) $ff) goto play_remove_lines::@8
to:play_remove_lines::@return
play_remove_lines::@return: scope:[play_remove_lines] from play_remove_lines::@7
[356] return
to:@return
play_remove_lines::@8: scope:[play_remove_lines] from play_remove_lines::@7
[357] *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::w#6) ← (byte/signed byte/word/signed word/dword/signed dword) 0
[358] (byte) play_remove_lines::w#3 ← -- (byte) play_remove_lines::w#6
to:play_remove_lines::@7
play_remove_lines::@9: scope:[play_remove_lines] from play_remove_lines::@2
[359] phi()
to:play_remove_lines::@3
play_lock_current: scope:[play_lock_current] from play_move_down::@9
[360] (byte) play_lock_current::ypos2#0 ← (byte) current_ypos#100 << (byte/signed byte/word/signed word/dword/signed dword) 1
to:play_lock_current::@1
play_lock_current::@1: scope:[play_lock_current] from play_lock_current play_lock_current::@6
[361] (byte) play_lock_current::l#6 ← phi( play_lock_current/(byte/signed byte/word/signed word/dword/signed dword) 0 play_lock_current::@6/(byte) play_lock_current::l#1 )
[361] (byte) play_lock_current::i#3 ← phi( play_lock_current/(byte/signed byte/word/signed word/dword/signed dword) 0 play_lock_current::@6/(byte~) play_lock_current::i#7 )
[361] (byte) play_lock_current::ypos2#2 ← phi( play_lock_current/(byte) play_lock_current::ypos2#0 play_lock_current::@6/(byte) play_lock_current::ypos2#1 )
[362] (byte*) play_lock_current::playfield_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte) play_lock_current::ypos2#2)
[363] (byte) play_lock_current::col#0 ← (byte) current_xpos#124
to:play_lock_current::@2
play_lock_current::@2: scope:[play_lock_current] from play_lock_current::@1 play_lock_current::@7
[364] (byte) play_lock_current::c#2 ← phi( play_lock_current::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 play_lock_current::@7/(byte) play_lock_current::c#1 )
[364] (byte) play_lock_current::col#2 ← phi( play_lock_current::@1/(byte) play_lock_current::col#0 play_lock_current::@7/(byte) play_lock_current::col#1 )
[364] (byte) play_lock_current::i#2 ← phi( play_lock_current::@1/(byte) play_lock_current::i#3 play_lock_current::@7/(byte~) play_lock_current::i#9 )
[365] (byte) play_lock_current::i#1 ← ++ (byte) play_lock_current::i#2
[366] if(*((byte*) current_piece_gfx#114 + (byte) play_lock_current::i#2)==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_lock_current::@3
to:play_lock_current::@4
play_lock_current::@4: scope:[play_lock_current] from play_lock_current::@2
[367] *((byte*) play_lock_current::playfield_line#0 + (byte) play_lock_current::col#2) ← (byte) current_piece_char#10
to:play_lock_current::@3
play_lock_current::@3: scope:[play_lock_current] from play_lock_current::@2 play_lock_current::@4
[368] (byte) play_lock_current::col#1 ← ++ (byte) play_lock_current::col#2
[369] (byte) play_lock_current::c#1 ← ++ (byte) play_lock_current::c#2
[370] if((byte) play_lock_current::c#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto play_lock_current::@7
to:play_lock_current::@5
play_lock_current::@5: scope:[play_lock_current] from play_lock_current::@3
[371] (byte) play_lock_current::ypos2#1 ← (byte) play_lock_current::ypos2#2 + (byte/signed byte/word/signed word/dword/signed dword) 2
[372] (byte) play_lock_current::l#1 ← ++ (byte) play_lock_current::l#6
[373] if((byte) play_lock_current::l#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto play_lock_current::@6
to:play_lock_current::@return
play_lock_current::@return: scope:[play_lock_current] from play_lock_current::@5
[374] return
to:@return
play_lock_current::@6: scope:[play_lock_current] from play_lock_current::@5
[375] (byte~) play_lock_current::i#7 ← (byte) play_lock_current::i#1
to:play_lock_current::@1
play_lock_current::@7: scope:[play_lock_current] from play_lock_current::@3
[376] (byte~) play_lock_current::i#9 ← (byte) play_lock_current::i#1
to:play_lock_current::@2
keyboard_event_pressed: scope:[keyboard_event_pressed] from keyboard_event_scan::@1 keyboard_event_scan::@17 keyboard_event_scan::@2 keyboard_event_scan::@3 play_move_down::@1
[377] (byte) keyboard_event_pressed::keycode#5 ← phi( keyboard_event_scan::@1/(const byte) KEY_RSHIFT#0 keyboard_event_scan::@2/(const byte) KEY_CTRL#0 keyboard_event_scan::@17/(const byte) KEY_LSHIFT#0 keyboard_event_scan::@3/(const byte) KEY_COMMODORE#0 play_move_down::@1/(const byte) KEY_SPACE#0 )
[378] (byte~) keyboard_event_pressed::$0 ← (byte) keyboard_event_pressed::keycode#5 >> (byte/signed byte/word/signed word/dword/signed dword) 3
[379] (byte) keyboard_event_pressed::row_bits#0 ← *((const byte[8]) keyboard_scan_values#0 + (byte~) keyboard_event_pressed::$0)
[380] (byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#5 & (byte/signed byte/word/signed word/dword/signed dword) 7
[381] (byte) keyboard_event_pressed::return#11 ← (byte) keyboard_event_pressed::row_bits#0 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte~) keyboard_event_pressed::$1)
to:keyboard_event_pressed::@return
keyboard_event_pressed::@return: scope:[keyboard_event_pressed] from keyboard_event_pressed
[382] return
to:@return
keyboard_event_get: scope:[keyboard_event_get] from main::@18
[383] if((byte) keyboard_events_size#13==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_get::@return
to:keyboard_event_get::@1
keyboard_event_get::@1: scope:[keyboard_event_get] from keyboard_event_get
[384] (byte) keyboard_events_size#4 ← -- (byte) keyboard_events_size#13
[385] (byte) keyboard_event_get::return#1 ← *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#4)
to:keyboard_event_get::@return
keyboard_event_get::@return: scope:[keyboard_event_get] from keyboard_event_get keyboard_event_get::@1
[386] (byte) keyboard_events_size#16 ← phi( keyboard_event_get/(byte) keyboard_events_size#13 keyboard_event_get::@1/(byte) keyboard_events_size#4 )
[386] (byte) keyboard_event_get::return#2 ← phi( keyboard_event_get/(byte/word/signed word/dword/signed dword) $ff keyboard_event_get::@1/(byte) keyboard_event_get::return#1 )
[387] return
to:@return
keyboard_event_scan: scope:[keyboard_event_scan] from main::@17
[388] phi()
to:keyboard_event_scan::@7
keyboard_event_scan::@7: scope:[keyboard_event_scan] from keyboard_event_scan keyboard_event_scan::@8
[389] (byte) keyboard_events_size#30 ← phi( keyboard_event_scan/(byte) keyboard_events_size#19 keyboard_event_scan::@8/(byte) keyboard_events_size#13 )
[389] (byte) keyboard_event_scan::keycode#11 ← phi( keyboard_event_scan/(byte/signed byte/word/signed word/dword/signed dword) 0 keyboard_event_scan::@8/(byte) keyboard_event_scan::keycode#14 )
[389] (byte) keyboard_event_scan::row#2 ← phi( keyboard_event_scan/(byte/signed byte/word/signed word/dword/signed dword) 0 keyboard_event_scan::@8/(byte) keyboard_event_scan::row#1 )
[390] (byte) keyboard_matrix_read::rowid#0 ← (byte) keyboard_event_scan::row#2
[391] call keyboard_matrix_read
[392] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0
to:keyboard_event_scan::@19
keyboard_event_scan::@19: scope:[keyboard_event_scan] from keyboard_event_scan::@7
[393] (byte) keyboard_event_scan::row_scan#0 ← (byte) keyboard_matrix_read::return#2
[394] if((byte) keyboard_event_scan::row_scan#0!=*((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2)) goto keyboard_event_scan::@9
to:keyboard_event_scan::@16
keyboard_event_scan::@16: scope:[keyboard_event_scan] from keyboard_event_scan::@19
[395] (byte) keyboard_event_scan::keycode#1 ← (byte) keyboard_event_scan::keycode#11 + (byte/signed byte/word/signed word/dword/signed dword) 8
to:keyboard_event_scan::@8
keyboard_event_scan::@8: scope:[keyboard_event_scan] from keyboard_event_scan::@15 keyboard_event_scan::@16
[396] (byte) keyboard_events_size#13 ← phi( keyboard_event_scan::@15/(byte) keyboard_events_size#29 keyboard_event_scan::@16/(byte) keyboard_events_size#30 )
[396] (byte) keyboard_event_scan::keycode#14 ← phi( keyboard_event_scan::@15/(byte) keyboard_event_scan::keycode#15 keyboard_event_scan::@16/(byte) keyboard_event_scan::keycode#1 )
[397] (byte) keyboard_event_scan::row#1 ← ++ (byte) keyboard_event_scan::row#2
[398] if((byte) keyboard_event_scan::row#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto keyboard_event_scan::@7
to:keyboard_event_scan::@17
keyboard_event_scan::@17: scope:[keyboard_event_scan] from keyboard_event_scan::@8
[399] phi()
[400] call keyboard_event_pressed
[401] (byte) keyboard_event_pressed::return#0 ← (byte) keyboard_event_pressed::return#11
to:keyboard_event_scan::@20
keyboard_event_scan::@20: scope:[keyboard_event_scan] from keyboard_event_scan::@17
[402] (byte~) keyboard_event_scan::$0 ← (byte) keyboard_event_pressed::return#0
[403] if((byte~) keyboard_event_scan::$0==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@1
to:keyboard_event_scan::@18
keyboard_event_scan::@18: scope:[keyboard_event_scan] from keyboard_event_scan::@20
[404] phi()
to:keyboard_event_scan::@1
keyboard_event_scan::@1: scope:[keyboard_event_scan] from keyboard_event_scan::@18 keyboard_event_scan::@20
[405] phi()
[406] call keyboard_event_pressed
[407] (byte) keyboard_event_pressed::return#1 ← (byte) keyboard_event_pressed::return#11
to:keyboard_event_scan::@21
keyboard_event_scan::@21: scope:[keyboard_event_scan] from keyboard_event_scan::@1
[408] (byte~) keyboard_event_scan::$3 ← (byte) keyboard_event_pressed::return#1
[409] if((byte~) keyboard_event_scan::$3==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@2
to:keyboard_event_scan::@4
keyboard_event_scan::@4: scope:[keyboard_event_scan] from keyboard_event_scan::@21
[410] phi()
to:keyboard_event_scan::@2
keyboard_event_scan::@2: scope:[keyboard_event_scan] from keyboard_event_scan::@21 keyboard_event_scan::@4
[411] phi()
[412] call keyboard_event_pressed
[413] (byte) keyboard_event_pressed::return#2 ← (byte) keyboard_event_pressed::return#11
to:keyboard_event_scan::@22
keyboard_event_scan::@22: scope:[keyboard_event_scan] from keyboard_event_scan::@2
[414] (byte~) keyboard_event_scan::$6 ← (byte) keyboard_event_pressed::return#2
[415] if((byte~) keyboard_event_scan::$6==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@3
to:keyboard_event_scan::@5
keyboard_event_scan::@5: scope:[keyboard_event_scan] from keyboard_event_scan::@22
[416] phi()
to:keyboard_event_scan::@3
keyboard_event_scan::@3: scope:[keyboard_event_scan] from keyboard_event_scan::@22 keyboard_event_scan::@5
[417] phi()
[418] call keyboard_event_pressed
[419] (byte) keyboard_event_pressed::return#10 ← (byte) keyboard_event_pressed::return#11
to:keyboard_event_scan::@23
keyboard_event_scan::@23: scope:[keyboard_event_scan] from keyboard_event_scan::@3
[420] (byte~) keyboard_event_scan::$9 ← (byte) keyboard_event_pressed::return#10
[421] if((byte~) keyboard_event_scan::$9==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@return
to:keyboard_event_scan::@6
keyboard_event_scan::@6: scope:[keyboard_event_scan] from keyboard_event_scan::@23
[422] phi()
to:keyboard_event_scan::@return
keyboard_event_scan::@return: scope:[keyboard_event_scan] from keyboard_event_scan::@23 keyboard_event_scan::@6
[423] return
to:@return
keyboard_event_scan::@9: scope:[keyboard_event_scan] from keyboard_event_scan::@10 keyboard_event_scan::@19
[424] (byte) keyboard_events_size#10 ← phi( keyboard_event_scan::@10/(byte) keyboard_events_size#29 keyboard_event_scan::@19/(byte) keyboard_events_size#30 )
[424] (byte) keyboard_event_scan::keycode#10 ← phi( keyboard_event_scan::@10/(byte) keyboard_event_scan::keycode#15 keyboard_event_scan::@19/(byte) keyboard_event_scan::keycode#11 )
[424] (byte) keyboard_event_scan::col#2 ← phi( keyboard_event_scan::@10/(byte) keyboard_event_scan::col#1 keyboard_event_scan::@19/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[425] (byte~) keyboard_event_scan::$15 ← (byte) keyboard_event_scan::row_scan#0 ^ *((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2)
[426] (byte~) keyboard_event_scan::$16 ← (byte~) keyboard_event_scan::$15 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte) keyboard_event_scan::col#2)
[427] if((byte~) keyboard_event_scan::$16==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@10
to:keyboard_event_scan::@12
keyboard_event_scan::@12: scope:[keyboard_event_scan] from keyboard_event_scan::@9
[428] if((byte) keyboard_events_size#10==(byte/signed byte/word/signed word/dword/signed dword) 8) goto keyboard_event_scan::@10
to:keyboard_event_scan::@13
keyboard_event_scan::@13: scope:[keyboard_event_scan] from keyboard_event_scan::@12
[429] (byte) keyboard_event_scan::event_type#0 ← (byte) keyboard_event_scan::row_scan#0 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte) keyboard_event_scan::col#2)
[430] if((byte) keyboard_event_scan::event_type#0==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@11
to:keyboard_event_scan::@14
keyboard_event_scan::@14: scope:[keyboard_event_scan] from keyboard_event_scan::@13
[431] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte) keyboard_event_scan::keycode#10
[432] (byte) keyboard_events_size#2 ← ++ (byte) keyboard_events_size#10
to:keyboard_event_scan::@10
keyboard_event_scan::@10: scope:[keyboard_event_scan] from keyboard_event_scan::@11 keyboard_event_scan::@12 keyboard_event_scan::@14 keyboard_event_scan::@9
[433] (byte) keyboard_events_size#29 ← phi( keyboard_event_scan::@9/(byte) keyboard_events_size#10 keyboard_event_scan::@12/(byte) keyboard_events_size#10 keyboard_event_scan::@11/(byte) keyboard_events_size#1 keyboard_event_scan::@14/(byte) keyboard_events_size#2 )
[434] (byte) keyboard_event_scan::keycode#15 ← ++ (byte) keyboard_event_scan::keycode#10
[435] (byte) keyboard_event_scan::col#1 ← ++ (byte) keyboard_event_scan::col#2
[436] if((byte) keyboard_event_scan::col#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto keyboard_event_scan::@9
to:keyboard_event_scan::@15
keyboard_event_scan::@15: scope:[keyboard_event_scan] from keyboard_event_scan::@10
[437] *((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2) ← (byte) keyboard_event_scan::row_scan#0
to:keyboard_event_scan::@8
keyboard_event_scan::@11: scope:[keyboard_event_scan] from keyboard_event_scan::@13
[438] (byte/word/dword~) keyboard_event_scan::$23 ← (byte) keyboard_event_scan::keycode#10 | (byte/signed byte/word/signed word/dword/signed dword) $40
[439] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte/word/dword~) keyboard_event_scan::$23
[440] (byte) keyboard_events_size#1 ← ++ (byte) keyboard_events_size#10
to:keyboard_event_scan::@10
keyboard_matrix_read: scope:[keyboard_matrix_read] from keyboard_event_scan::@7
[441] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#0)
[442] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B#0)
to:keyboard_matrix_read::@return
keyboard_matrix_read::@return: scope:[keyboard_matrix_read] from keyboard_matrix_read
[443] return
to:@return
render_show: scope:[render_show] from main::@3
[444] if((byte) render_screen_show#16==(byte/signed byte/word/signed word/dword/signed dword) 0) goto render_show::toD0181
to:render_show::toD0182
render_show::toD0182: scope:[render_show] from render_show
[445] phi()
to:render_show::@1
render_show::@1: scope:[render_show] from render_show::toD0181 render_show::toD0182
[446] (byte) render_show::d018val#3 ← phi( render_show::toD0181/(const byte) render_show::toD0181_return#0 render_show::toD0182/(const byte) render_show::toD0182_return#0 )
[447] *((const byte*) D018#0) ← (byte) render_show::d018val#3
[448] *((const byte*) BGCOL2#0) ← *((const byte[]) PIECES_COLORS_1#0 + (byte) level#10)
[449] *((const byte*) BGCOL3#0) ← *((const byte[]) PIECES_COLORS_2#0 + (byte) level#10)
[450] (byte) render_screen_showing#1 ← (byte) render_screen_show#16
to:render_show::@return
render_show::@return: scope:[render_show] from render_show::@1
[451] return
to:@return
render_show::toD0181: scope:[render_show] from render_show
[452] phi()
to:render_show::@1
play_init: scope:[play_init] from main::@11
[453] phi()
to:play_init::@1
play_init::@1: scope:[play_init] from play_init play_init::@1
[454] (byte) play_init::idx#2 ← phi( play_init/(byte/signed byte/word/signed word/dword/signed dword) 0 play_init::@1/(byte) play_init::idx#1 )
[454] (byte*) play_init::pli#2 ← phi( play_init/(const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 play_init::@1/(byte*) play_init::pli#1 )
[454] (byte) play_init::j#2 ← phi( play_init/(byte/signed byte/word/signed word/dword/signed dword) 0 play_init::@1/(byte) play_init::j#1 )
[455] (byte~) play_init::$2 ← (byte) play_init::j#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
[456] *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte~) play_init::$2) ← (byte*) play_init::pli#2
[457] *((const byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx#0 + (byte) play_init::j#2) ← (byte) play_init::idx#2
[458] (byte*) play_init::pli#1 ← (byte*) play_init::pli#2 + (const byte) PLAYFIELD_COLS#0
[459] (byte) play_init::idx#1 ← (byte) play_init::idx#2 + (const byte) PLAYFIELD_COLS#0
[460] (byte) play_init::j#1 ← ++ (byte) play_init::j#2
[461] if((byte) play_init::j#1!=(const byte) PLAYFIELD_LINES#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto play_init::@1
to:play_init::@2
play_init::@2: scope:[play_init] from play_init::@1
[462] *((const byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx#0+(const byte) PLAYFIELD_LINES#0) ← (const byte) PLAYFIELD_COLS#0*(const byte) PLAYFIELD_LINES#0
[463] (byte) current_movedown_slow#1 ← *((const byte[]) MOVEDOWN_SLOW_SPEEDS#0)
to:play_init::@3
play_init::@3: scope:[play_init] from play_init::@2 play_init::@3
[464] (byte) play_init::b#2 ← phi( play_init::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 play_init::@3/(byte) play_init::b#1 )
[465] (byte) play_init::b4#0 ← (byte) play_init::b#2 << (byte/signed byte/word/signed word/dword/signed dword) 2
[466] *((const dword[5]) score_add_bcd#0 + (byte) play_init::b4#0) ← *((const dword[]) SCORE_BASE_BCD#0 + (byte) play_init::b4#0)
[467] (byte) play_init::b#1 ← ++ (byte) play_init::b#2
[468] if((byte) play_init::b#1!=(byte/signed byte/word/signed word/dword/signed dword) 5) goto play_init::@3
to:play_init::@return
play_init::@return: scope:[play_init] from play_init::@3
[469] return
to:@return
sprites_irq_init: scope:[sprites_irq_init] from main::@10
asm { sei }
[471] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0
asm { ldaCIA1_INTERRUPT }
[473] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0
[474] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0
[475] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0
[476] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte/signed byte/word/signed word/dword/signed dword) $7f
[477] *((const byte*) RASTER#0) ← (const byte) IRQ_RASTER_FIRST#0
[478] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0
[479] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_CLOBBER)(void()) sprites_irq()
asm { cli }
to:sprites_irq_init::@return
sprites_irq_init::@return: scope:[sprites_irq_init] from sprites_irq_init
[481] return
to:@return
sprites_init: scope:[sprites_init] from main::@9
[482] *((const byte*) SPRITES_ENABLE#0) ← (byte/signed byte/word/signed word/dword/signed dword) $f
[483] *((const byte*) SPRITES_MC#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
[484] *((const byte*) SPRITES_EXPAND_Y#0) ← *((const byte*) SPRITES_MC#0)
[485] *((const byte*) SPRITES_EXPAND_X#0) ← *((const byte*) SPRITES_EXPAND_Y#0)
to:sprites_init::@1
sprites_init::@1: scope:[sprites_init] from sprites_init sprites_init::@1
[486] (byte) sprites_init::xpos#2 ← phi( sprites_init/(byte/signed byte/word/signed word/dword/signed dword) $18+(byte/signed byte/word/signed word/dword/signed dword) $f*(byte/signed byte/word/signed word/dword/signed dword) 8 sprites_init::@1/(byte) sprites_init::xpos#1 )
[486] (byte) sprites_init::s#2 ← phi( sprites_init/(byte/signed byte/word/signed word/dword/signed dword) 0 sprites_init::@1/(byte) sprites_init::s#1 )
[487] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
[488] *((const byte*) SPRITES_XPOS#0 + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2
[489] *((const byte*) SPRITES_COLS#0 + (byte) sprites_init::s#2) ← (const byte) BLACK#0
[490] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte/signed byte/word/signed word/dword/signed dword) $18
[491] (byte) sprites_init::s#1 ← ++ (byte) sprites_init::s#2
[492] if((byte) sprites_init::s#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto sprites_init::@1
to:sprites_init::@return
sprites_init::@return: scope:[sprites_init] from sprites_init::@1
[493] return
to:@return
render_init: scope:[render_init] from main::@8
[494] phi()
to:render_init::vicSelectGfxBank1
render_init::vicSelectGfxBank1: scope:[render_init] from render_init
[495] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte/signed byte/word/signed word/dword/signed dword) 3
to:render_init::vicSelectGfxBank1_toDd001
render_init::vicSelectGfxBank1_toDd001: scope:[render_init] from render_init::vicSelectGfxBank1
[496] phi()
to:render_init::vicSelectGfxBank1_@1
render_init::vicSelectGfxBank1_@1: scope:[render_init] from render_init::vicSelectGfxBank1_toDd001
[497] *((const byte*) CIA2_PORT_A#0) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0
to:render_init::@2
render_init::@2: scope:[render_init] from render_init::vicSelectGfxBank1_@1
[498] *((const byte*) D011#0) ← (const byte) VIC_ECM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte/signed byte/word/signed word/dword/signed dword) 3
[499] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0
[500] *((const byte*) BGCOL1#0) ← (const byte) BLACK#0
[501] *((const byte*) BGCOL2#0) ← *((const byte[]) PIECES_COLORS_1#0)
[502] *((const byte*) BGCOL3#0) ← *((const byte[]) PIECES_COLORS_2#0)
[503] *((const byte*) BGCOL4#0) ← (const byte) GREY#0
[504] call render_screen_original
to:render_init::@3
render_init::@3: scope:[render_init] from render_init::@2
[505] phi()
[506] call render_screen_original
to:render_init::@1
render_init::@1: scope:[render_init] from render_init::@1 render_init::@3
[507] (byte*) render_init::li_2#2 ← phi( render_init::@1/(byte*) render_init::li_2#1 render_init::@3/(const byte*) PLAYFIELD_SCREEN_2#0+(byte/signed byte/word/signed word/dword/signed dword) 2*(byte/signed byte/word/signed word/dword/signed dword) $28+(byte/signed byte/word/signed word/dword/signed dword) $10 )
[507] (byte*) render_init::li_1#2 ← phi( render_init::@1/(byte*) render_init::li_1#1 render_init::@3/(const byte*) PLAYFIELD_SCREEN_1#0+(byte/signed byte/word/signed word/dword/signed dword) 2*(byte/signed byte/word/signed word/dword/signed dword) $28+(byte/signed byte/word/signed word/dword/signed dword) $10 )
[507] (byte) render_init::i#2 ← phi( render_init::@1/(byte) render_init::i#1 render_init::@3/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[508] (byte~) render_init::$13 ← (byte) render_init::i#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
[509] *((const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_init::$13) ← (byte*) render_init::li_1#2
[510] (byte~) render_init::$14 ← (byte) render_init::i#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
[511] *((const byte*[PLAYFIELD_LINES#0]) screen_lines_2#0 + (byte~) render_init::$14) ← (byte*) render_init::li_2#2
[512] (byte*) render_init::li_1#1 ← (byte*) render_init::li_1#2 + (byte/signed byte/word/signed word/dword/signed dword) $28
[513] (byte*) render_init::li_2#1 ← (byte*) render_init::li_2#2 + (byte/signed byte/word/signed word/dword/signed dword) $28
[514] (byte) render_init::i#1 ← ++ (byte) render_init::i#2
[515] if((byte) render_init::i#1!=(const byte) PLAYFIELD_LINES#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto render_init::@1
to:render_init::@return
render_init::@return: scope:[render_init] from render_init::@1
[516] return
to:@return
render_screen_original: scope:[render_screen_original] from render_init::@2 render_init::@3
[517] (byte*) render_screen_original::screen#9 ← phi( render_init::@2/(const byte*) PLAYFIELD_SCREEN_1#0 render_init::@3/(const byte*) PLAYFIELD_SCREEN_2#0 )
to:render_screen_original::@1
render_screen_original::@1: scope:[render_screen_original] from render_screen_original render_screen_original::@5
[518] (byte) render_screen_original::y#6 ← phi( render_screen_original/(byte/signed byte/word/signed word/dword/signed dword) 0 render_screen_original::@5/(byte) render_screen_original::y#1 )
[518] (byte*) render_screen_original::ocols#4 ← phi( render_screen_original/(const byte*) PLAYFIELD_COLORS_ORIGINAL#0+(byte/signed byte/word/signed word/dword/signed dword) $20*(byte/signed byte/word/signed word/dword/signed dword) 2 render_screen_original::@5/(byte*) render_screen_original::ocols#1 )
[518] (byte*) render_screen_original::oscr#4 ← phi( render_screen_original/(const byte*) PLAYFIELD_SCREEN_ORIGINAL#0+(byte/signed byte/word/signed word/dword/signed dword) $20*(byte/signed byte/word/signed word/dword/signed dword) 2 render_screen_original::@5/(byte*) render_screen_original::oscr#1 )
[518] (byte*) render_screen_original::cols#7 ← phi( render_screen_original/(const byte*) COLS#0 render_screen_original::@5/(byte*) render_screen_original::cols#3 )
[518] (byte*) render_screen_original::screen#8 ← phi( render_screen_original/(byte*) render_screen_original::screen#9 render_screen_original::@5/(byte*) render_screen_original::screen#10 )
to:render_screen_original::@2
render_screen_original::@2: scope:[render_screen_original] from render_screen_original::@1 render_screen_original::@2
[519] (byte) render_screen_original::x#4 ← phi( render_screen_original::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 render_screen_original::@2/(byte) render_screen_original::x#1 )
[519] (byte*) render_screen_original::cols#4 ← phi( render_screen_original::@1/(byte*) render_screen_original::cols#7 render_screen_original::@2/(byte*) render_screen_original::cols#1 )
[519] (byte*) render_screen_original::screen#5 ← phi( render_screen_original::@1/(byte*) render_screen_original::screen#8 render_screen_original::@2/(byte*) render_screen_original::screen#2 )
[520] *((byte*) render_screen_original::screen#5) ← (const byte) render_screen_original::SPACE#0
[521] (byte*) render_screen_original::screen#2 ← ++ (byte*) render_screen_original::screen#5
[522] *((byte*) render_screen_original::cols#4) ← (const byte) BLACK#0
[523] (byte*) render_screen_original::cols#1 ← ++ (byte*) render_screen_original::cols#4
[524] (byte) render_screen_original::x#1 ← ++ (byte) render_screen_original::x#4
[525] if((byte) render_screen_original::x#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto render_screen_original::@2
to:render_screen_original::@3
render_screen_original::@3: scope:[render_screen_original] from render_screen_original::@2 render_screen_original::@3
[526] (byte) render_screen_original::x#5 ← phi( render_screen_original::@2/(byte) render_screen_original::x#1 render_screen_original::@3/(byte) render_screen_original::x#2 )
[526] (byte*) render_screen_original::cols#5 ← phi( render_screen_original::@2/(byte*) render_screen_original::cols#1 render_screen_original::@3/(byte*) render_screen_original::cols#2 )
[526] (byte*) render_screen_original::ocols#2 ← phi( render_screen_original::@2/(byte*) render_screen_original::ocols#4 render_screen_original::@3/(byte*) render_screen_original::ocols#1 )
[526] (byte*) render_screen_original::screen#6 ← phi( render_screen_original::@2/(byte*) render_screen_original::screen#2 render_screen_original::@3/(byte*) render_screen_original::screen#3 )
[526] (byte*) render_screen_original::oscr#2 ← phi( render_screen_original::@2/(byte*) render_screen_original::oscr#4 render_screen_original::@3/(byte*) render_screen_original::oscr#1 )
[527] *((byte*) render_screen_original::screen#6) ← *((byte*) render_screen_original::oscr#2)
[528] (byte*) render_screen_original::screen#3 ← ++ (byte*) render_screen_original::screen#6
[529] (byte*) render_screen_original::oscr#1 ← ++ (byte*) render_screen_original::oscr#2
[530] *((byte*) render_screen_original::cols#5) ← *((byte*) render_screen_original::ocols#2)
[531] (byte*) render_screen_original::cols#2 ← ++ (byte*) render_screen_original::cols#5
[532] (byte*) render_screen_original::ocols#1 ← ++ (byte*) render_screen_original::ocols#2
[533] (byte) render_screen_original::x#2 ← ++ (byte) render_screen_original::x#5
[534] if((byte) render_screen_original::x#2!=(byte/signed byte/word/signed word/dword/signed dword) $24) goto render_screen_original::@3
to:render_screen_original::@4
render_screen_original::@4: scope:[render_screen_original] from render_screen_original::@3 render_screen_original::@4
[535] (byte) render_screen_original::x#6 ← phi( render_screen_original::@3/(byte) render_screen_original::x#2 render_screen_original::@4/(byte) render_screen_original::x#3 )
[535] (byte*) render_screen_original::cols#6 ← phi( render_screen_original::@3/(byte*) render_screen_original::cols#2 render_screen_original::@4/(byte*) render_screen_original::cols#3 )
[535] (byte*) render_screen_original::screen#7 ← phi( render_screen_original::@3/(byte*) render_screen_original::screen#3 render_screen_original::@4/(byte*) render_screen_original::screen#10 )
[536] *((byte*) render_screen_original::screen#7) ← (const byte) render_screen_original::SPACE#0
[537] (byte*) render_screen_original::screen#10 ← ++ (byte*) render_screen_original::screen#7
[538] *((byte*) render_screen_original::cols#6) ← (const byte) BLACK#0
[539] (byte*) render_screen_original::cols#3 ← ++ (byte*) render_screen_original::cols#6
[540] (byte) render_screen_original::x#3 ← ++ (byte) render_screen_original::x#6
[541] if((byte) render_screen_original::x#3!=(byte/signed byte/word/signed word/dword/signed dword) $28) goto render_screen_original::@4
to:render_screen_original::@5
render_screen_original::@5: scope:[render_screen_original] from render_screen_original::@4
[542] (byte) render_screen_original::y#1 ← ++ (byte) render_screen_original::y#6
[543] if((byte) render_screen_original::y#1!=(byte/signed byte/word/signed word/dword/signed dword) $19) goto render_screen_original::@1
to:render_screen_original::@return
render_screen_original::@return: scope:[render_screen_original] from render_screen_original::@5
[544] return
to:@return
sid_rnd_init: scope:[sid_rnd_init] from main
[545] *((const word*) SID_VOICE3_FREQ#0) ← (word/dword/signed dword) $ffff
[546] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0
to:sid_rnd_init::@return
sid_rnd_init::@return: scope:[sid_rnd_init] from sid_rnd_init
[547] return
to:@return
sprites_irq: scope:[sprites_irq] from
asm { cld }
[549] (byte) sprites_irq::ypos#0 ← (byte) irq_sprite_ypos#0
[550] *((const byte*) SPRITES_YPOS#0) ← (byte) sprites_irq::ypos#0
[551] *((const byte*) SPRITES_YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte) sprites_irq::ypos#0
[552] *((const byte*) SPRITES_YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 4) ← (byte) sprites_irq::ypos#0
[553] *((const byte*) SPRITES_YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 6) ← (byte) sprites_irq::ypos#0
[554] (byte/signed word/word/dword/signed dword~) sprites_irq::$0 ← (byte) irq_raster_next#0 + (byte/signed byte/word/signed word/dword/signed dword) 1
[555] (byte) sprites_irq::raster_sprite_gfx_modify#0 ← (byte/signed word/word/dword/signed dword~) sprites_irq::$0
to:sprites_irq::@8
sprites_irq::@8: scope:[sprites_irq] from sprites_irq sprites_irq::@8
[556] if(*((const byte*) RASTER#0)<(byte) sprites_irq::raster_sprite_gfx_modify#0) goto sprites_irq::@8
to:sprites_irq::@9
sprites_irq::@9: scope:[sprites_irq] from sprites_irq::@8
[557] (byte) sprites_irq::ptr#0 ← (byte) irq_sprite_ptr#0
[558] if((byte) render_screen_showing#0==(byte/signed byte/word/signed word/dword/signed dword) 0) goto sprites_irq::@1
to:sprites_irq::@10
sprites_irq::@10: scope:[sprites_irq] from sprites_irq::@9
[559] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0) ← (byte) sprites_irq::ptr#0
[560] (byte) sprites_irq::ptr#3 ← ++ (byte) sprites_irq::ptr#0
[561] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte) sprites_irq::ptr#3
[562] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte) sprites_irq::ptr#3
[563] (byte) sprites_irq::ptr#4 ← ++ (byte) sprites_irq::ptr#3
[564] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte) sprites_irq::ptr#4
to:sprites_irq::@2
sprites_irq::@2: scope:[sprites_irq] from sprites_irq::@1 sprites_irq::@10
[565] (byte) irq_cnt#1 ← ++ (byte) irq_cnt#0
[566] if((byte) irq_cnt#1==(byte/signed byte/word/signed word/dword/signed dword) 9) goto sprites_irq::@3
to:sprites_irq::@6
sprites_irq::@6: scope:[sprites_irq] from sprites_irq::@2
[567] if((byte) irq_cnt#1==(byte/signed byte/word/signed word/dword/signed dword) $a) goto sprites_irq::@4
to:sprites_irq::@7
sprites_irq::@7: scope:[sprites_irq] from sprites_irq::@6
[568] (byte) irq_raster_next#3 ← (byte) irq_raster_next#0 + (byte/signed byte/word/signed word/dword/signed dword) $14
[569] (byte) irq_sprite_ypos#3 ← (byte) irq_sprite_ypos#0 + (byte/signed byte/word/signed word/dword/signed dword) $15
[570] (byte) irq_sprite_ptr#3 ← (byte) irq_sprite_ptr#0 + (byte/signed byte/word/signed word/dword/signed dword) 3
to:sprites_irq::@5
sprites_irq::@5: scope:[sprites_irq] from sprites_irq::@11 sprites_irq::@4 sprites_irq::@7
[571] (byte) irq_raster_next#4 ← phi( sprites_irq::@11/(byte) irq_raster_next#1 sprites_irq::@4/(byte) irq_raster_next#2 sprites_irq::@7/(byte) irq_raster_next#3 )
[572] *((const byte*) RASTER#0) ← (byte) irq_raster_next#4
[573] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0
to:sprites_irq::@return
sprites_irq::@return: scope:[sprites_irq] from sprites_irq::@5
[574] return
to:@return
sprites_irq::@4: scope:[sprites_irq] from sprites_irq::@6
[575] (byte) irq_cnt#2 ← (byte/signed byte/word/signed word/dword/signed dword) 0
[576] (byte) irq_raster_next#2 ← (const byte) IRQ_RASTER_FIRST#0
[577] (byte) irq_sprite_ypos#2 ← (byte) irq_sprite_ypos#0 + (byte/signed byte/word/signed word/dword/signed dword) $15
[578] (byte) irq_sprite_ptr#2 ← (byte) irq_sprite_ptr#0 + (byte/signed byte/word/signed word/dword/signed dword) 3
to:sprites_irq::@5
sprites_irq::@3: scope:[sprites_irq] from sprites_irq::@2
[579] (byte) irq_raster_next#1 ← (byte) irq_raster_next#0 + (byte/signed byte/word/signed word/dword/signed dword) $15
[580] (byte) irq_sprite_ypos#1 ← (const byte) SPRITES_FIRST_YPOS#0
to:sprites_irq::toSpritePtr2
sprites_irq::toSpritePtr2: scope:[sprites_irq] from sprites_irq::@3
[581] phi()
to:sprites_irq::@11
sprites_irq::@11: scope:[sprites_irq] from sprites_irq::toSpritePtr2
[582] (byte) irq_sprite_ptr#1 ← (const byte) sprites_irq::toSpritePtr2_return#0
to:sprites_irq::@5
sprites_irq::@1: scope:[sprites_irq] from sprites_irq::@9
[583] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0) ← (byte) sprites_irq::ptr#0
[584] (byte) sprites_irq::ptr#1 ← ++ (byte) sprites_irq::ptr#0
[585] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte) sprites_irq::ptr#1
[586] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte) sprites_irq::ptr#1
[587] (byte) sprites_irq::ptr#2 ← ++ (byte) sprites_irq::ptr#1
[588] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte) sprites_irq::ptr#2
to:sprites_irq::@2
VARIABLE REGISTER WEIGHTS
(byte*) BGCOL1
(byte*) BGCOL2
(byte*) BGCOL3
(byte*) BGCOL4
(byte) BLACK
(byte) BLUE
(byte*) BORDERCOL
(byte*) CIA1_INTERRUPT
(byte*) CIA1_PORT_A
(byte*) CIA1_PORT_B
(byte*) CIA2_PORT_A
(byte*) CIA2_PORT_A_DDR
(byte) CIA_INTERRUPT_CLEAR
(byte) COLLISION_BOTTOM
(byte) COLLISION_LEFT
(byte) COLLISION_NONE
(byte) COLLISION_PLAYFIELD
(byte) COLLISION_RIGHT
(byte*) COLS
(byte) CYAN
(byte*) D011
(byte*) D018
(byte) DARK_GREY
(byte) GREEN
(byte) GREY
(void()**) HARDWARE_IRQ
(byte*) IRQ_ENABLE
(byte) IRQ_RASTER
(byte) IRQ_RASTER_FIRST
(byte*) IRQ_STATUS
(byte) KEY_COMMA
(byte) KEY_COMMODORE
(byte) KEY_CTRL
(byte) KEY_DOT
(byte) KEY_LSHIFT
(byte) KEY_MODIFIER_COMMODORE
(byte) KEY_MODIFIER_CTRL
(byte) KEY_MODIFIER_LSHIFT
(byte) KEY_MODIFIER_RSHIFT
(byte) KEY_RSHIFT
(byte) KEY_SPACE
(byte) KEY_X
(byte) KEY_Z
(byte) LIGHT_BLUE
(byte) LIGHT_GREEN
(byte[]) MOVEDOWN_SLOW_SPEEDS
(byte) ORANGE
(word[]) PIECES
(byte[]) PIECES_CHARS
(byte[]) PIECES_COLORS_1
(byte[]) PIECES_COLORS_2
(byte[]) PIECES_NEXT_CHARS
(byte[]) PIECES_START_X
(byte[]) PIECES_START_Y
(byte[4*4*4]) PIECE_I
(byte[4*4*4]) PIECE_J
(byte[4*4*4]) PIECE_L
(byte[4*4*4]) PIECE_O
(byte[4*4*4]) PIECE_S
(byte[4*4*4]) PIECE_T
(byte[4*4*4]) PIECE_Z
(byte) PINK
(byte*) PLAYFIELD_CHARSET
(byte*) PLAYFIELD_COLORS_ORIGINAL
(byte) PLAYFIELD_COLS
(byte) PLAYFIELD_LINES
(byte*) PLAYFIELD_SCREEN_1
(byte*) PLAYFIELD_SCREEN_2
(byte*) PLAYFIELD_SCREEN_ORIGINAL
(byte*) PLAYFIELD_SPRITES
(byte*) PLAYFIELD_SPRITE_PTRS_1
(byte*) PLAYFIELD_SPRITE_PTRS_2
(byte*) PROCPORT
(byte*) PROCPORT_DDR
(byte) PROCPORT_DDR_MEMORY_MASK
(byte) PROCPORT_RAM_IO
(byte) PURPLE
(byte*) RASTER
(byte) RED
(dword[]) SCORE_BASE_BCD
(byte) SID_CONTROL_NOISE
(byte*) SID_VOICE3_CONTROL
(word*) SID_VOICE3_FREQ
(byte*) SID_VOICE3_OSC
(byte*) SPRITES_COLS
(byte*) SPRITES_ENABLE
(byte*) SPRITES_EXPAND_X
(byte*) SPRITES_EXPAND_Y
(byte) SPRITES_FIRST_YPOS
(byte*) SPRITES_MC
(byte*) SPRITES_XPOS
(byte*) SPRITES_YPOS
(word) SPRITE_PTRS
(byte*) VIC_CONTROL
(byte) VIC_DEN
(byte) VIC_ECM
(byte) VIC_RSEL
(byte) current_movedown_counter
(byte) current_movedown_counter#12 0.5333333333333333
(byte) current_movedown_counter#14 3.081081081081081
(byte) current_movedown_counter#16 8.769230769230768
(byte) current_movedown_fast
(byte) current_movedown_slow
(byte) current_movedown_slow#1 0.18181818181818182
(byte) current_movedown_slow#10 4.0
(byte) current_movedown_slow#14 2.214285714285714
(byte) current_movedown_slow#21 3.135135135135135
(byte) current_movedown_slow#23 1.3333333333333333
(byte) current_movedown_slow#37 6.0
(byte) current_movedown_slow#69 0.26666666666666666
(byte) current_orientation
(byte) current_orientation#13 3.189189189189189
(byte) current_orientation#17 5.523809523809523
(byte) current_orientation#20 0.36734693877551017
(byte) current_orientation#25 1.3333333333333333
(byte) current_orientation#37 4.0
(byte) current_orientation#7 3.0
(byte*) current_piece
(byte*) current_piece#10 3.243243243243243
(byte*~) current_piece#100 4.0
(byte*~) current_piece#101 4.0
(byte*~) current_piece#102 4.0
(byte*~) current_piece#103 4.0
(byte*~) current_piece#104 4.0
(byte*~) current_piece#106 4.0
(byte*) current_piece#15 1.5897435897435892
(byte*) current_piece#17 12.0
(byte*) current_piece#28 6.0
(byte*~) current_piece#98 4.0
(byte) current_piece_char
(byte) current_piece_char#10 187.38888888888889
(byte~) current_piece_char#108 4.0
(byte~) current_piece_char#109 22.0
(byte) current_piece_char#16 3.4324324324324325
(byte) current_piece_char#29 6.0
(byte) current_piece_char#5 0.25806451612903225
(byte) current_piece_char#68 50.699999999999996
(byte*) current_piece_gfx
(byte*) current_piece_gfx#114 187.38888888888889
(byte*~) current_piece_gfx#120 2.0
(byte*~) current_piece_gfx#121 11.0
(byte*) current_piece_gfx#18 6.047619047619047
(byte*) current_piece_gfx#20 0.37037037037037035
(byte*) current_piece_gfx#21 1.3333333333333333
(byte*) current_piece_gfx#35 6.0
(byte*) current_piece_gfx#64 50.699999999999996
(byte*) current_piece_gfx#7 4.0
(byte*) current_piece_gfx#74 0.26666666666666666
(byte) current_xpos
(byte) current_xpos#103 0.3448275862068966
(byte) current_xpos#124 20.75925925925926
(byte~) current_xpos#130 1.3333333333333333
(byte~) current_xpos#131 7.333333333333333
(byte) current_xpos#19 6.047619047619047
(byte) current_xpos#22 0.7999999999999999
(byte) current_xpos#26 0.4666666666666666
(byte) current_xpos#43 6.0
(byte) current_xpos#59 5.7
(byte) current_xpos#6 4.0
(byte) current_xpos#8 4.0
(byte) current_ypos
(byte) current_ypos#100 3.297297297297297
(byte~) current_ypos#106 1.0
(byte~) current_ypos#107 4.4
(byte) current_ypos#13 15.0
(byte) current_ypos#19 1.7051282051282046
(byte) current_ypos#3 4.0
(byte) current_ypos#38 6.0
(byte) current_ypos#6 0.3571428571428571
(byte) game_over
(byte) game_over#10 4.804347826086958
(byte) game_over#15 3.189189189189189
(byte) game_over#27 6.0
(byte) game_over#52 0.38095238095238093
(byte) game_over#65 0.4
(byte) irq_cnt
(byte) irq_cnt#0 0.17391304347826086
(byte) irq_cnt#1 3.0
(byte) irq_cnt#2 20.0
(byte) irq_raster_next
(byte) irq_raster_next#0 0.3076923076923077
(byte) irq_raster_next#1 1.0
(byte) irq_raster_next#2 1.3333333333333333
(byte) irq_raster_next#3 1.3333333333333333
(byte) irq_raster_next#4 8.0
(byte) irq_sprite_ptr
(byte) irq_sprite_ptr#0 0.25806451612903225
(byte) irq_sprite_ptr#1 20.0
(byte) irq_sprite_ptr#2 20.0
(byte) irq_sprite_ptr#3 20.0
(byte) irq_sprite_ypos
(byte) irq_sprite_ypos#0 0.27586206896551724
(byte) irq_sprite_ypos#1 20.0
(byte) irq_sprite_ypos#2 20.0
(byte) irq_sprite_ypos#3 20.0
(byte()) keyboard_event_get()
(byte) keyboard_event_get::return
(byte) keyboard_event_get::return#1 4.0
(byte) keyboard_event_get::return#2 34.33333333333333
(byte) keyboard_event_get::return#3 202.0
(byte()) keyboard_event_pressed((byte) keyboard_event_pressed::keycode)
(byte~) keyboard_event_pressed::$0 4.0
(byte~) keyboard_event_pressed::$1 4.0
(byte) keyboard_event_pressed::keycode
(byte) keyboard_event_pressed::keycode#5 1.3333333333333333
(byte) keyboard_event_pressed::return
(byte) keyboard_event_pressed::return#0 4.0
(byte) keyboard_event_pressed::return#1 4.0
(byte) keyboard_event_pressed::return#10 4.0
(byte) keyboard_event_pressed::return#11 1.714285714285714
(byte) keyboard_event_pressed::return#12 4.0
(byte) keyboard_event_pressed::return#2 4.0
(byte) keyboard_event_pressed::row_bits
(byte) keyboard_event_pressed::row_bits#0 2.0
(void()) keyboard_event_scan()
(byte~) keyboard_event_scan::$0 4.0
(byte~) keyboard_event_scan::$15 20002.0
(byte~) keyboard_event_scan::$16 20002.0
(byte/word/dword~) keyboard_event_scan::$23 20002.0
(byte~) keyboard_event_scan::$3 4.0
(byte~) keyboard_event_scan::$6 4.0
(byte~) keyboard_event_scan::$9 4.0
(byte) keyboard_event_scan::col
(byte) keyboard_event_scan::col#1 15001.5
(byte) keyboard_event_scan::col#2 2857.4285714285716
(byte) keyboard_event_scan::event_type
(byte) keyboard_event_scan::event_type#0 20002.0
(byte) keyboard_event_scan::keycode
(byte) keyboard_event_scan::keycode#1 2002.0
(byte) keyboard_event_scan::keycode#10 3154.230769230769
(byte) keyboard_event_scan::keycode#11 500.5
(byte) keyboard_event_scan::keycode#14 1001.0
(byte) keyboard_event_scan::keycode#15 5250.75
(byte) keyboard_event_scan::row
(byte) keyboard_event_scan::row#1 1501.5
(byte) keyboard_event_scan::row#2 600.24
(byte) keyboard_event_scan::row_scan
(byte) keyboard_event_scan::row_scan#0 1278.0555555555554
(byte[8]) keyboard_events
(byte) keyboard_events_size
(byte) keyboard_events_size#1 20002.0
(byte) keyboard_events_size#10 8100.9000000000015
(byte) keyboard_events_size#13 97.06451612903226
(byte) keyboard_events_size#16 4.461538461538461
(byte) keyboard_events_size#19 18.999999999999996
(byte) keyboard_events_size#2 20002.0
(byte) keyboard_events_size#29 10201.2
(byte) keyboard_events_size#30 429.2857142857143
(byte) keyboard_events_size#4 3.0
(byte[8]) keyboard_matrix_col_bitmask
(byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid)
(byte) keyboard_matrix_read::return
(byte) keyboard_matrix_read::return#0 334.33333333333337
(byte) keyboard_matrix_read::return#2 2002.0
(byte) keyboard_matrix_read::row_pressed_bits
(byte) keyboard_matrix_read::rowid
(byte) keyboard_matrix_read::rowid#0 1003.0
(byte[8]) keyboard_matrix_row_bitmask
(byte) keyboard_modifiers
(byte[8]) keyboard_scan_values
(byte) level
(byte) level#10 1.909090909090909
(byte) level#17 3.135135135135135
(byte) level#19 1.3333333333333333
(byte) level#21 0.4444444444444444
(byte) level#33 6.0
(byte) level_bcd
(byte) level_bcd#11 2.0
(byte) level_bcd#17 1.9999999999999998
(byte) level_bcd#19 1.3333333333333333
(byte) level_bcd#21 2.6666666666666665
(byte) level_bcd#31 6.0
(byte) level_bcd#64 0.6000000000000001
(byte) level_bcd#8 4.0
(word) lines_bcd
(word) lines_bcd#15 2.0338983050847457
(word) lines_bcd#17 1.3333333333333333
(word) lines_bcd#19 2.4400000000000004
(word) lines_bcd#26 6.0
(word) lines_bcd#30 1.0
(void()) main()
(byte) main::key_event
(byte) main::key_event#0 101.0
(byte) main::render
(byte) main::render#1 202.0
(byte) next_piece_idx
(byte) next_piece_idx#10 2.608695652173914
(byte) next_piece_idx#12 3.4
(byte) next_piece_idx#16 3.4324324324324325
(byte) next_piece_idx#17 6.0
(byte) next_piece_idx#30 6.0
(byte~) next_piece_idx#84 4.0
(byte~) next_piece_idx#85 22.0
(byte()) play_collision((byte) play_collision::xpos , (byte) play_collision::ypos , (byte) play_collision::orientation)
(byte~) play_collision::$7 20002.0
(byte) play_collision::c
(byte) play_collision::c#1 10001.0
(byte) play_collision::c#2 2222.4444444444443
(byte) play_collision::col
(byte) play_collision::col#1 5000.5
(byte) play_collision::col#2 6375.75
(byte~) play_collision::col#9 2002.0
(byte) play_collision::i
(byte) play_collision::i#1 1615.6153846153845
(byte~) play_collision::i#11 2002.0
(byte~) play_collision::i#13 20002.0
(byte) play_collision::i#2 15502.0
(byte) play_collision::i#3 667.3333333333334
(byte) play_collision::l
(byte) play_collision::l#1 1001.0
(byte) play_collision::l#6 125.125
(byte) play_collision::orientation
(byte) play_collision::orientation#0 2.0
(byte) play_collision::orientation#1 2.0
(byte) play_collision::orientation#2 2.0
(byte) play_collision::orientation#3 2.0
(byte) play_collision::orientation#5 10.0
(byte*) play_collision::piece_gfx
(byte*) play_collision::piece_gfx#0 476.3333333333333
(byte*) play_collision::playfield_line
(byte*) play_collision::playfield_line#0 785.8571428571429
(byte) play_collision::return
(byte) play_collision::return#0 4.0
(byte) play_collision::return#1 4.0
(byte) play_collision::return#10 4.0
(byte) play_collision::return#13 4.0
(byte) play_collision::return#14 4.0
(byte) play_collision::return#15 1.4285714285714284
(byte) play_collision::xpos
(byte) play_collision::xpos#0 1.3333333333333333
(byte) play_collision::xpos#1 1.0
(byte) play_collision::xpos#2 1.0
(byte) play_collision::xpos#3 1.0
(byte) play_collision::xpos#4 1.3333333333333333
(byte) play_collision::xpos#6 45.95454545454545
(byte) play_collision::ypos
(byte) play_collision::ypos#0 1.0
(byte) play_collision::ypos#1 1.3333333333333333
(byte) play_collision::ypos#2 1.3333333333333333
(byte) play_collision::ypos#3 1.3333333333333333
(byte) play_collision::ypos#4 2.0
(byte) play_collision::ypos#5 6.0
(byte) play_collision::ypos2
(byte) play_collision::ypos2#0 4.0
(byte) play_collision::ypos2#1 500.5
(byte) play_collision::ypos2#2 867.0666666666667
(void()) play_increase_level()
(byte~) play_increase_level::$1 4.0
(byte) play_increase_level::b
(byte) play_increase_level::b#1 1501.5
(byte) play_increase_level::b#2 1001.0
(byte) play_increase_level::b4
(byte) play_increase_level::b4#0 4004.0
(void()) play_init()
(byte~) play_init::$2 22.0
(byte) play_init::b
(byte) play_init::b#1 16.5
(byte) play_init::b#2 11.0
(byte) play_init::b4
(byte) play_init::b4#0 33.0
(byte) play_init::idx
(byte) play_init::idx#1 7.333333333333333
(byte) play_init::idx#2 6.6000000000000005
(byte) play_init::j
(byte) play_init::j#1 16.5
(byte) play_init::j#2 7.333333333333333
(byte*) play_init::pli
(byte*) play_init::pli#1 5.5
(byte*) play_init::pli#2 8.25
(void()) play_lock_current()
(byte) play_lock_current::c
(byte) play_lock_current::c#1 10001.0
(byte) play_lock_current::c#2 4000.4
(byte) play_lock_current::col
(byte) play_lock_current::col#0 2002.0
(byte) play_lock_current::col#1 5000.5
(byte) play_lock_current::col#2 7751.0
(byte) play_lock_current::i
(byte) play_lock_current::i#1 2333.6666666666665
(byte) play_lock_current::i#2 15502.0
(byte) play_lock_current::i#3 667.3333333333334
(byte~) play_lock_current::i#7 2002.0
(byte~) play_lock_current::i#9 20002.0
(byte) play_lock_current::l
(byte) play_lock_current::l#1 1001.0
(byte) play_lock_current::l#6 166.83333333333334
(byte*) play_lock_current::playfield_line
(byte*) play_lock_current::playfield_line#0 1100.2
(byte) play_lock_current::ypos2
(byte) play_lock_current::ypos2#0 4.0
(byte) play_lock_current::ypos2#1 500.5
(byte) play_lock_current::ypos2#2 273.1818181818182
(byte()) play_move_down((byte) play_move_down::key_event)
(byte~) play_move_down::$12 4.0
(byte~) play_move_down::$2 4.0
(byte) play_move_down::key_event
(byte) play_move_down::key_event#0 2.0
(byte) play_move_down::movedown
(byte) play_move_down::movedown#10 1.0
(byte) play_move_down::movedown#2 4.0
(byte) play_move_down::movedown#3 4.0
(byte) play_move_down::movedown#6 6.0
(byte) play_move_down::movedown#7 5.0
(byte) play_move_down::removed
(byte) play_move_down::removed#0 4.0
(byte) play_move_down::return
(byte) play_move_down::return#0 4.0
(byte) play_move_down::return#3 0.6666666666666666
(byte()) play_move_leftright((byte) play_move_leftright::key_event)
(byte~) play_move_leftright::$4 4.0
(byte~) play_move_leftright::$8 4.0
(byte) play_move_leftright::key_event
(byte) play_move_leftright::key_event#0 3.0
(byte) play_move_leftright::return
(byte) play_move_leftright::return#0 4.0
(byte) play_move_leftright::return#2 0.6666666666666666
(byte()) play_move_rotate((byte) play_move_rotate::key_event)
(byte~) play_move_rotate::$2 4.0
(byte/signed word/word/dword/signed dword~) play_move_rotate::$5 4.0
(byte/signed word/word/dword/signed dword~) play_move_rotate::$7 4.0
(byte) play_move_rotate::key_event
(byte) play_move_rotate::key_event#0 3.0
(byte) play_move_rotate::orientation
(byte) play_move_rotate::orientation#1 4.0
(byte) play_move_rotate::orientation#2 4.0
(byte) play_move_rotate::orientation#3 0.8888888888888888
(byte) play_move_rotate::return
(byte) play_move_rotate::return#0 4.0
(byte) play_move_rotate::return#2 0.6666666666666666
(byte()) play_movement((byte) play_movement::key_event)
(byte~) play_movement::$3 4.0
(byte~) play_movement::$4 4.0
(byte) play_movement::key_event
(byte) play_movement::key_event#0 9.727272727272727
(byte) play_movement::render
(byte) play_movement::render#1 1.0
(byte) play_movement::render#2 0.8
(byte) play_movement::return
(byte) play_movement::return#0 4.0
(byte) play_movement::return#2 34.99999999999999
(byte) play_movement::return#3 202.0
(byte()) play_remove_lines()
(byte) play_remove_lines::c
(byte) play_remove_lines::c#0 6000.6
(byte) play_remove_lines::full
(byte) play_remove_lines::full#2 4200.6
(byte) play_remove_lines::full#4 4000.4
(byte) play_remove_lines::r
(byte) play_remove_lines::r#1 1500.2142857142858
(byte) play_remove_lines::r#2 15502.0
(byte) play_remove_lines::r#3 2002.0
(byte) play_remove_lines::removed
(byte) play_remove_lines::removed#1 2002.0
(byte) play_remove_lines::removed#11 231.0
(byte) play_remove_lines::removed#8 333.8888888888889
(byte) play_remove_lines::return
(byte) play_remove_lines::return#0 4.0
(byte) play_remove_lines::w
(byte) play_remove_lines::w#1 5501.0
(byte) play_remove_lines::w#11 1334.6666666666667
(byte) play_remove_lines::w#12 2002.0
(byte) play_remove_lines::w#2 1001.0
(byte) play_remove_lines::w#3 2002.0
(byte) play_remove_lines::w#4 4429.142857142857
(byte) play_remove_lines::w#6 1668.3333333333335
(byte) play_remove_lines::x
(byte) play_remove_lines::x#1 15001.5
(byte) play_remove_lines::x#2 2500.25
(byte) play_remove_lines::y
(byte) play_remove_lines::y#1 1501.5
(byte) play_remove_lines::y#8 133.46666666666667
(void()) play_spawn_current()
(byte~) play_spawn_current::$0 0.06666666666666667
(byte~) play_spawn_current::$2 4.0
(byte) play_spawn_current::current_piece_idx
(byte) play_spawn_current::current_piece_idx#0 2.0
(byte) play_spawn_current::piece_idx
(byte) play_spawn_current::piece_idx#1 2002.0
(byte) play_spawn_current::piece_idx#2 111.66666666666667
(byte) play_spawn_current::sid_rnd1_return
(byte) play_spawn_current::sid_rnd1_return#0 2002.0
(void()) play_update_score((byte) play_update_score::removed)
(byte~) play_update_score::$2 4.0
(byte~) play_update_score::$4 4.0
(byte~) play_update_score::$5 4.0
(dword) play_update_score::add_bcd
(dword) play_update_score::add_bcd#0 1.3333333333333333
(byte) play_update_score::lines_after
(byte) play_update_score::lines_after#0 4.0
(byte) play_update_score::lines_before
(byte) play_update_score::lines_before#0 0.4444444444444444
(byte) play_update_score::removed
(byte) play_update_score::removed#0 1.1428571428571428
(byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield
(byte*[PLAYFIELD_LINES#0]) playfield_lines
(byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx
(void()) render_bcd((byte*) render_bcd::screen , (word) render_bcd::offset , (byte) render_bcd::bcd , (byte) render_bcd::only_low)
(byte~) render_bcd::$3 4.0
(byte~) render_bcd::$4 4.0
(byte~) render_bcd::$5 4.0
(byte~) render_bcd::$6 4.0
(byte) render_bcd::ZERO_CHAR
(byte) render_bcd::bcd
(byte) render_bcd::bcd#0 4.0
(byte) render_bcd::bcd#1 4.0
(byte) render_bcd::bcd#2 4.0
(byte) render_bcd::bcd#3 2.0
(byte) render_bcd::bcd#4 2.0
(byte) render_bcd::bcd#5 4.0
(byte) render_bcd::bcd#6 2.0
(word) render_bcd::offset
(word) render_bcd::offset#6 2.0
(byte) render_bcd::only_low
(byte) render_bcd::only_low#6 1.0
(byte*) render_bcd::screen
(byte*) render_bcd::screen#0 2.0
(byte*) render_bcd::screen#1 2.0
(byte*) render_bcd::screen#2 2.0
(byte*) render_bcd::screen#3 4.0
(byte*) render_bcd::screen#4 4.0
(byte*) render_bcd::screen#5 2.0
(byte*) render_bcd::screen#6 14.0
(byte*) render_bcd::screen_pos
(byte*) render_bcd::screen_pos#0 1.6
(byte*) render_bcd::screen_pos#2 4.0
(byte*) render_bcd::screen_pos#3 2.0
(void()) render_init()
(byte~) render_init::$13 22.0
(byte~) render_init::$14 22.0
(byte) render_init::i
(byte) render_init::i#1 16.5
(byte) render_init::i#2 6.285714285714286
(byte*) render_init::li_1
(byte*) render_init::li_1#1 5.5
(byte*) render_init::li_1#2 6.6000000000000005
(byte*) render_init::li_2
(byte*) render_init::li_2#1 7.333333333333333
(byte*) render_init::li_2#2 5.5
(byte~) render_init::vicSelectGfxBank1_$0
(byte*) render_init::vicSelectGfxBank1_gfx
(word~) render_init::vicSelectGfxBank1_toDd001_$0
(byte~) render_init::vicSelectGfxBank1_toDd001_$1
(byte/signed word/word/dword/signed dword~) render_init::vicSelectGfxBank1_toDd001_$2
(byte/word/dword~) render_init::vicSelectGfxBank1_toDd001_$3
(byte*) render_init::vicSelectGfxBank1_toDd001_gfx
(byte) render_init::vicSelectGfxBank1_toDd001_return
(void()) render_moving()
(byte~) render_moving::$2 202.0
(byte) render_moving::c
(byte) render_moving::c#1 1501.5
(byte) render_moving::c#2 333.6666666666667
(byte) render_moving::current_cell
(byte) render_moving::current_cell#0 1001.0
(byte) render_moving::i
(byte) render_moving::i#1 202.0
(byte) render_moving::i#2 500.5
(byte) render_moving::i#3 60.599999999999994
(byte) render_moving::i#4 1552.0
(byte) render_moving::i#8 300.75
(byte) render_moving::l
(byte) render_moving::l#1 151.5
(byte) render_moving::l#4 12.625
(byte*) render_moving::screen_line
(byte*) render_moving::screen_line#0 110.19999999999999
(byte) render_moving::xpos
(byte) render_moving::xpos#0 202.0
(byte) render_moving::xpos#1 667.3333333333334
(byte) render_moving::xpos#2 620.8
(byte) render_moving::ypos2
(byte) render_moving::ypos2#0 4.0
(byte) render_moving::ypos2#1 67.33333333333333
(byte) render_moving::ypos2#2 27.06666666666667
(void()) render_next()
(byte~) render_next::$4 1.0
(byte) render_next::c
(byte) render_next::c#1 1501.5
(byte) render_next::c#2 286.0
(byte) render_next::cell
(byte) render_next::cell#0 1001.0
(byte) render_next::l
(byte) render_next::l#1 151.5
(byte) render_next::l#7 18.363636363636363
(word) render_next::next_area_offset
(byte) render_next::next_piece_char
(byte) render_next::next_piece_char#0 66.86666666666667
(byte*) render_next::next_piece_gfx
(byte*) render_next::next_piece_gfx#1 210.29999999999998
(byte*) render_next::next_piece_gfx#2 1552.0
(byte*) render_next::next_piece_gfx#3 204.0
(byte*~) render_next::next_piece_gfx#9 4.0
(byte*) render_next::screen_next_area
(byte*) render_next::screen_next_area#10 204.0
(byte*) render_next::screen_next_area#11 0.5
(byte*) render_next::screen_next_area#3 701.0
(byte*) render_next::screen_next_area#4 67.33333333333333
(byte*) render_next::screen_next_area#5 684.1666666666667
(void()) render_playfield()
(byte~) render_playfield::$2 202.0
(byte~) render_playfield::$3 202.0
(byte) render_playfield::c
(byte) render_playfield::c#1 1501.5
(byte) render_playfield::c#2 500.5
(byte) render_playfield::i
(byte) render_playfield::i#1 420.59999999999997
(byte) render_playfield::i#2 1034.6666666666667
(byte) render_playfield::i#3 50.5
(byte) render_playfield::l
(byte) render_playfield::l#1 151.5
(byte) render_playfield::l#2 30.299999999999997
(byte*) render_playfield::screen_line
(byte*) render_playfield::screen_line#0 202.0
(byte*) render_playfield::screen_line#1 500.5
(byte*) render_playfield::screen_line#2 1552.0
(void()) render_score()
(word) render_score::level_offset
(word) render_score::lines_offset
(byte*) render_score::score_bytes
(word) render_score::score_offset
(byte*) render_score::screen
(byte*) render_score::screen#3 0.75
(void()) render_screen_original((byte*) render_screen_original::screen)
(byte) render_screen_original::SPACE
(byte*) render_screen_original::cols
(byte*) render_screen_original::cols#1 101.0
(byte*) render_screen_original::cols#2 75.75
(byte*) render_screen_original::cols#3 42.599999999999994
(byte*) render_screen_original::cols#4 78.5
(byte*) render_screen_original::cols#5 80.8
(byte*) render_screen_original::cols#6 101.0
(byte*) render_screen_original::cols#7 22.0
(byte*) render_screen_original::ocols
(byte*) render_screen_original::ocols#1 17.75
(byte*) render_screen_original::ocols#2 67.33333333333333
(byte*) render_screen_original::ocols#4 14.0
(byte*) render_screen_original::oscr
(byte*) render_screen_original::oscr#1 14.2
(byte*) render_screen_original::oscr#2 134.66666666666666
(byte*) render_screen_original::oscr#4 14.0
(byte*) render_screen_original::screen
(byte*) render_screen_original::screen#10 30.42857142857143
(byte*) render_screen_original::screen#2 60.599999999999994
(byte*) render_screen_original::screen#3 43.285714285714285
(byte*) render_screen_original::screen#5 157.0
(byte*) render_screen_original::screen#6 202.0
(byte*) render_screen_original::screen#7 202.0
(byte*) render_screen_original::screen#8 24.0
(byte*) render_screen_original::screen#9 2.0
(byte) render_screen_original::x
(byte) render_screen_original::x#1 202.0
(byte) render_screen_original::x#2 202.0
(byte) render_screen_original::x#3 151.5
(byte) render_screen_original::x#4 40.4
(byte) render_screen_original::x#5 43.285714285714285
(byte) render_screen_original::x#6 60.599999999999994
(byte) render_screen_original::y
(byte) render_screen_original::y#1 16.5
(byte) render_screen_original::y#6 0.9166666666666666
(byte) render_screen_render
(byte) render_screen_render#11 3.25
(byte) render_screen_render#15 13.0
(byte) render_screen_render#18 0.923076923076923
(byte) render_screen_render#22 8.615384615384615
(byte) render_screen_render#33 5.6
(byte~) render_screen_render#68 11.0
(byte~) render_screen_render#69 5.5
(byte~) render_screen_render#70 22.0
(byte) render_screen_show
(byte) render_screen_show#13 4.333333333333333
(byte) render_screen_show#16 0.425
(byte) render_screen_showing
(byte) render_screen_showing#0 0.4
(byte) render_screen_showing#1 20.0
(void()) render_screen_swap()
(void()) render_show()
(byte) render_show::d018val
(byte) render_show::d018val#3 2.0
(word~) render_show::toD0181_$0
(word~) render_show::toD0181_$1
(word/signed dword/dword~) render_show::toD0181_$2
(byte/word~) render_show::toD0181_$3
(word~) render_show::toD0181_$4
(byte~) render_show::toD0181_$5
(byte/signed word/word/dword/signed dword~) render_show::toD0181_$6
(byte/word/dword~) render_show::toD0181_$7
(byte/word/dword~) render_show::toD0181_$8
(byte*) render_show::toD0181_gfx
(byte) render_show::toD0181_return
(byte*) render_show::toD0181_screen
(word~) render_show::toD0182_$0
(word~) render_show::toD0182_$1
(word/signed dword/dword~) render_show::toD0182_$2
(byte/word~) render_show::toD0182_$3
(word~) render_show::toD0182_$4
(byte~) render_show::toD0182_$5
(byte/signed word/word/dword/signed dword~) render_show::toD0182_$6
(byte/word/dword~) render_show::toD0182_$7
(byte/word/dword~) render_show::toD0182_$8
(byte*) render_show::toD0182_gfx
(byte) render_show::toD0182_return
(byte*) render_show::toD0182_screen
(dword[5]) score_add_bcd
(dword) score_bcd
(dword) score_bcd#14 3.135135135135135
(dword) score_bcd#16 1.3333333333333333
(dword) score_bcd#18 2.352941176470588
(dword) score_bcd#26 6.0
(dword) score_bcd#30 0.8571428571428571
(byte*[PLAYFIELD_LINES#0]) screen_lines_1
(byte*[PLAYFIELD_LINES#0]) screen_lines_2
(void()) sid_rnd_init()
(void()) sprites_init()
(byte) sprites_init::s
(byte) sprites_init::s#1 16.5
(byte) sprites_init::s#2 8.8
(byte) sprites_init::s2
(byte) sprites_init::s2#0 22.0
(byte) sprites_init::xpos
(byte) sprites_init::xpos#1 7.333333333333333
(byte) sprites_init::xpos#2 8.25
interrupt(HARDWARE_CLOBBER)(void()) sprites_irq()
(byte/signed word/word/dword/signed dword~) sprites_irq::$0 4.0
(byte) sprites_irq::ptr
(byte) sprites_irq::ptr#0 2.5
(byte) sprites_irq::ptr#1 2.6666666666666665
(byte) sprites_irq::ptr#2 4.0
(byte) sprites_irq::ptr#3 2.6666666666666665
(byte) sprites_irq::ptr#4 4.0
(byte) sprites_irq::raster_sprite_gfx_modify
(byte) sprites_irq::raster_sprite_gfx_modify#0 6.5
(word~) sprites_irq::toSpritePtr2_$0
(word/signed dword/dword~) sprites_irq::toSpritePtr2_$1
(byte~) sprites_irq::toSpritePtr2_$2
(byte) sprites_irq::toSpritePtr2_return
(byte*) sprites_irq::toSpritePtr2_sprite
(byte) sprites_irq::ypos
(byte) sprites_irq::ypos#0 2.5
(void()) sprites_irq_init()
(word~) toSpritePtr1_$0
(word/signed dword/dword~) toSpritePtr1_$1
(byte~) toSpritePtr1_$2
(byte) toSpritePtr1_return
(byte*) toSpritePtr1_sprite
Initial phi equivalence classes
[ render_screen_show#16 render_screen_show#13 ]
[ render_screen_render#18 render_screen_render#11 ]
[ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 ]
[ render_score::screen#3 ]
[ render_bcd::screen#6 render_bcd::screen#0 render_bcd::screen#1 render_bcd::screen#2 render_bcd::screen#3 render_bcd::screen#4 render_bcd::screen#5 ]
[ render_bcd::offset#6 ]
[ render_bcd::only_low#6 ]
[ render_bcd::bcd#6 render_bcd::bcd#0 render_bcd::bcd#1 render_bcd::bcd#2 render_bcd::bcd#3 render_bcd::bcd#4 render_bcd::bcd#5 ]
[ render_bcd::screen_pos#3 render_bcd::screen_pos#0 render_bcd::screen_pos#2 ]
[ render_screen_render#15 render_screen_render#68 ]
[ next_piece_idx#12 next_piece_idx#84 next_piece_idx#85 ]
[ render_next::l#7 render_next::l#1 ]
[ render_next::next_piece_gfx#2 render_next::next_piece_gfx#3 render_next::next_piece_gfx#1 render_next::next_piece_gfx#9 ]
[ render_next::screen_next_area#5 render_next::screen_next_area#10 render_next::screen_next_area#4 render_next::screen_next_area#11 render_next::screen_next_area#3 ]
[ render_next::c#2 render_next::c#1 ]
[ current_ypos#13 current_ypos#106 current_ypos#107 ]
[ render_screen_render#33 render_screen_render#69 ]
[ current_xpos#59 current_xpos#130 current_xpos#131 ]
[ current_piece_gfx#64 current_piece_gfx#120 current_piece_gfx#121 ]
[ current_piece_char#68 current_piece_char#108 current_piece_char#109 ]
[ render_moving::ypos2#2 render_moving::ypos2#0 render_moving::ypos2#1 ]
[ render_moving::l#4 render_moving::l#1 ]
[ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 ]
[ render_moving::xpos#2 render_moving::xpos#0 render_moving::xpos#1 ]
[ render_moving::c#2 render_moving::c#1 ]
[ render_screen_render#22 render_screen_render#70 ]
[ render_playfield::l#2 render_playfield::l#1 ]
[ render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 ]
[ render_playfield::screen_line#2 render_playfield::screen_line#0 render_playfield::screen_line#1 ]
[ render_playfield::c#2 render_playfield::c#1 ]
[ play_movement::return#2 play_movement::render#1 play_movement::return#0 ]
[ play_move_rotate::return#2 ]
[ play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 ]
[ current_piece#17 current_piece#100 current_piece#101 current_piece#102 current_piece#103 current_piece#104 ]
[ play_collision::orientation#5 play_collision::orientation#0 play_collision::orientation#1 play_collision::orientation#2 play_collision::orientation#3 ]
[ play_collision::ypos#5 play_collision::ypos#0 play_collision::ypos#1 play_collision::ypos#2 play_collision::ypos#3 play_collision::ypos#4 ]
[ play_collision::xpos#6 play_collision::xpos#0 play_collision::xpos#1 play_collision::xpos#2 play_collision::xpos#3 play_collision::xpos#4 ]
[ play_collision::ypos2#2 play_collision::ypos2#0 play_collision::ypos2#1 ]
[ play_collision::l#6 play_collision::l#1 ]
[ play_collision::i#2 play_collision::i#3 play_collision::i#11 play_collision::i#13 ]
[ play_collision::col#2 play_collision::col#9 play_collision::col#1 ]
[ play_collision::c#2 play_collision::c#1 ]
[ play_collision::return#15 ]
[ play_move_leftright::return#2 ]
[ play_move_down::movedown#6 play_move_down::movedown#7 play_move_down::movedown#10 play_move_down::movedown#2 play_move_down::movedown#3 ]
[ current_ypos#38 current_ypos#3 current_ypos#100 current_ypos#19 current_ypos#6 ]
[ lines_bcd#26 lines_bcd#19 lines_bcd#15 lines_bcd#17 lines_bcd#30 ]
[ score_bcd#26 score_bcd#18 score_bcd#14 score_bcd#16 score_bcd#30 ]
[ level#33 level#10 level#17 level#19 level#21 ]
[ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#21 current_movedown_slow#1 current_movedown_slow#23 current_movedown_slow#69 current_movedown_slow#10 ]
[ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#64 level_bcd#21 level_bcd#8 ]
[ current_piece#28 current_piece#10 current_piece#15 current_piece#98 current_piece#106 ]
[ current_piece_char#29 current_piece_char#10 current_piece_char#16 current_piece_char#5 ]
[ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ]
[ current_piece_gfx#35 current_piece_gfx#114 current_piece_gfx#18 current_piece_gfx#74 current_piece_gfx#20 current_piece_gfx#21 current_piece_gfx#7 ]
[ current_xpos#43 current_xpos#124 current_xpos#19 current_xpos#103 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ]
[ play_move_down::return#3 ]
[ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#2 play_spawn_current::piece_idx#1 ]
[ game_over#65 game_over#27 game_over#10 game_over#15 game_over#52 ]
[ play_increase_level::b#2 play_increase_level::b#1 ]
[ play_remove_lines::y#8 play_remove_lines::y#1 ]
[ play_remove_lines::removed#11 play_remove_lines::removed#8 play_remove_lines::removed#1 ]
[ play_remove_lines::r#2 play_remove_lines::r#3 play_remove_lines::r#1 ]
[ play_remove_lines::x#2 play_remove_lines::x#1 ]
[ play_remove_lines::full#4 play_remove_lines::full#2 ]
[ play_remove_lines::w#6 play_remove_lines::w#3 play_remove_lines::w#4 play_remove_lines::w#12 play_remove_lines::w#11 play_remove_lines::w#1 play_remove_lines::w#2 ]
[ play_lock_current::ypos2#2 play_lock_current::ypos2#0 play_lock_current::ypos2#1 ]
[ play_lock_current::l#6 play_lock_current::l#1 ]
[ play_lock_current::i#2 play_lock_current::i#3 play_lock_current::i#7 play_lock_current::i#9 ]
[ play_lock_current::col#2 play_lock_current::col#0 play_lock_current::col#1 ]
[ play_lock_current::c#2 play_lock_current::c#1 ]
[ keyboard_event_pressed::keycode#5 ]
[ keyboard_event_get::return#2 keyboard_event_get::return#1 ]
[ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ]
[ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ]
[ keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#15 keyboard_event_scan::keycode#1 ]
[ keyboard_events_size#10 keyboard_events_size#30 keyboard_events_size#19 keyboard_events_size#16 keyboard_events_size#13 keyboard_events_size#4 keyboard_events_size#29 keyboard_events_size#1 keyboard_events_size#2 ]
[ render_show::d018val#3 ]
[ play_init::j#2 play_init::j#1 ]
[ play_init::pli#2 play_init::pli#1 ]
[ play_init::idx#2 play_init::idx#1 ]
[ play_init::b#2 play_init::b#1 ]
[ sprites_init::s#2 sprites_init::s#1 ]
[ sprites_init::xpos#2 sprites_init::xpos#1 ]
[ render_init::i#2 render_init::i#1 ]
[ render_init::li_1#2 render_init::li_1#1 ]
[ render_init::li_2#2 render_init::li_2#1 ]
[ render_screen_original::y#6 render_screen_original::y#1 ]
[ render_screen_original::oscr#2 render_screen_original::oscr#4 render_screen_original::oscr#1 ]
[ render_screen_original::ocols#2 render_screen_original::ocols#4 render_screen_original::ocols#1 ]
[ render_screen_original::screen#7 render_screen_original::screen#6 render_screen_original::screen#5 render_screen_original::screen#8 render_screen_original::screen#9 render_screen_original::screen#10 render_screen_original::screen#2 render_screen_original::screen#3 ]
[ render_screen_original::cols#6 render_screen_original::cols#5 render_screen_original::cols#4 render_screen_original::cols#7 render_screen_original::cols#3 render_screen_original::cols#1 render_screen_original::cols#2 ]
[ render_screen_original::x#6 render_screen_original::x#5 render_screen_original::x#4 render_screen_original::x#1 render_screen_original::x#2 render_screen_original::x#3 ]
[ irq_raster_next#4 irq_raster_next#1 irq_raster_next#2 irq_raster_next#3 ]
Coalescing volatile variable equivalence classes [ render_screen_showing#0 ] and [ render_screen_showing#1 ]
Coalescing volatile variable equivalence classes [ irq_raster_next#0 ] and [ irq_raster_next#4 irq_raster_next#1 irq_raster_next#2 irq_raster_next#3 ]
Coalescing volatile variable equivalence classes [ irq_sprite_ypos#0 ] and [ irq_sprite_ypos#1 ]
Coalescing volatile variable equivalence classes [ irq_sprite_ypos#0 irq_sprite_ypos#1 ] and [ irq_sprite_ypos#2 ]
Coalescing volatile variable equivalence classes [ irq_sprite_ypos#0 irq_sprite_ypos#1 irq_sprite_ypos#2 ] and [ irq_sprite_ypos#3 ]
Coalescing volatile variable equivalence classes [ irq_sprite_ptr#0 ] and [ irq_sprite_ptr#1 ]
Coalescing volatile variable equivalence classes [ irq_sprite_ptr#0 irq_sprite_ptr#1 ] and [ irq_sprite_ptr#2 ]
Coalescing volatile variable equivalence classes [ irq_sprite_ptr#0 irq_sprite_ptr#1 irq_sprite_ptr#2 ] and [ irq_sprite_ptr#3 ]
Coalescing volatile variable equivalence classes [ irq_cnt#0 ] and [ irq_cnt#1 ]
Coalescing volatile variable equivalence classes [ irq_cnt#0 irq_cnt#1 ] and [ irq_cnt#2 ]
Added variable keyboard_event_get::return#3 to zero page equivalence class [ keyboard_event_get::return#3 ]
Added variable main::key_event#0 to zero page equivalence class [ main::key_event#0 ]
Added variable play_movement::key_event#0 to zero page equivalence class [ play_movement::key_event#0 ]
Added variable play_movement::return#3 to zero page equivalence class [ play_movement::return#3 ]
Added variable main::render#1 to zero page equivalence class [ main::render#1 ]
Added variable render_bcd::$5 to zero page equivalence class [ render_bcd::$5 ]
Added variable render_bcd::$6 to zero page equivalence class [ render_bcd::$6 ]
Added variable render_bcd::$3 to zero page equivalence class [ render_bcd::$3 ]
Added variable render_bcd::$4 to zero page equivalence class [ render_bcd::$4 ]
Added variable render_next::$4 to zero page equivalence class [ render_next::$4 ]
Added variable render_next::next_piece_char#0 to zero page equivalence class [ render_next::next_piece_char#0 ]
Added variable render_next::cell#0 to zero page equivalence class [ render_next::cell#0 ]
Added variable render_moving::$2 to zero page equivalence class [ render_moving::$2 ]
Added variable render_moving::screen_line#0 to zero page equivalence class [ render_moving::screen_line#0 ]
Added variable render_moving::current_cell#0 to zero page equivalence class [ render_moving::current_cell#0 ]
Added variable render_playfield::$2 to zero page equivalence class [ render_playfield::$2 ]
Added variable render_playfield::$3 to zero page equivalence class [ render_playfield::$3 ]
Added variable play_move_down::key_event#0 to zero page equivalence class [ play_move_down::key_event#0 ]
Added variable play_move_down::return#0 to zero page equivalence class [ play_move_down::return#0 ]
Added variable play_move_leftright::key_event#0 to zero page equivalence class [ play_move_leftright::key_event#0 ]
Added variable play_move_leftright::return#0 to zero page equivalence class [ play_move_leftright::return#0 ]
Added variable play_movement::$3 to zero page equivalence class [ play_movement::$3 ]
Added variable play_movement::render#2 to zero page equivalence class [ play_movement::render#2 ]
Added variable play_move_rotate::key_event#0 to zero page equivalence class [ play_move_rotate::key_event#0 ]
Added variable play_move_rotate::return#0 to zero page equivalence class [ play_move_rotate::return#0 ]
Added variable play_movement::$4 to zero page equivalence class [ play_movement::$4 ]
Added variable play_move_rotate::$5 to zero page equivalence class [ play_move_rotate::$5 ]
Added variable play_collision::return#14 to zero page equivalence class [ play_collision::return#14 ]
Added variable play_move_rotate::$2 to zero page equivalence class [ play_move_rotate::$2 ]
Added variable play_move_rotate::$7 to zero page equivalence class [ play_move_rotate::$7 ]
Added variable play_collision::piece_gfx#0 to zero page equivalence class [ play_collision::piece_gfx#0 ]
Added variable play_collision::playfield_line#0 to zero page equivalence class [ play_collision::playfield_line#0 ]
Added variable play_collision::i#1 to zero page equivalence class [ play_collision::i#1 ]
Added variable play_collision::$7 to zero page equivalence class [ play_collision::$7 ]
Added variable play_collision::return#13 to zero page equivalence class [ play_collision::return#13 ]
Added variable play_move_leftright::$4 to zero page equivalence class [ play_move_leftright::$4 ]
Added variable play_collision::return#1 to zero page equivalence class [ play_collision::return#1 ]
Added variable play_move_leftright::$8 to zero page equivalence class [ play_move_leftright::$8 ]
Added variable keyboard_event_pressed::return#12 to zero page equivalence class [ keyboard_event_pressed::return#12 ]
Added variable play_move_down::$2 to zero page equivalence class [ play_move_down::$2 ]
Added variable play_collision::return#0 to zero page equivalence class [ play_collision::return#0 ]
Added variable play_move_down::$12 to zero page equivalence class [ play_move_down::$12 ]
Added variable play_remove_lines::return#0 to zero page equivalence class [ play_remove_lines::return#0 ]
Added variable play_move_down::removed#0 to zero page equivalence class [ play_move_down::removed#0 ]
Added variable play_update_score::removed#0 to zero page equivalence class [ play_update_score::removed#0 ]
Added variable play_spawn_current::current_piece_idx#0 to zero page equivalence class [ play_spawn_current::current_piece_idx#0 ]
Added variable play_spawn_current::$0 to zero page equivalence class [ play_spawn_current::$0 ]
Added variable play_collision::return#10 to zero page equivalence class [ play_collision::return#10 ]
Added variable play_spawn_current::$2 to zero page equivalence class [ play_spawn_current::$2 ]
Added variable play_spawn_current::sid_rnd1_return#0 to zero page equivalence class [ play_spawn_current::sid_rnd1_return#0 ]
Added variable play_update_score::$2 to zero page equivalence class [ play_update_score::$2 ]
Added variable play_update_score::lines_before#0 to zero page equivalence class [ play_update_score::lines_before#0 ]
Added variable play_update_score::$4 to zero page equivalence class [ play_update_score::$4 ]
Added variable play_update_score::add_bcd#0 to zero page equivalence class [ play_update_score::add_bcd#0 ]
Added variable play_update_score::$5 to zero page equivalence class [ play_update_score::$5 ]
Added variable play_update_score::lines_after#0 to zero page equivalence class [ play_update_score::lines_after#0 ]
Added variable play_increase_level::$1 to zero page equivalence class [ play_increase_level::$1 ]
Added variable play_increase_level::b4#0 to zero page equivalence class [ play_increase_level::b4#0 ]
Added variable play_remove_lines::c#0 to zero page equivalence class [ play_remove_lines::c#0 ]
Added variable play_lock_current::playfield_line#0 to zero page equivalence class [ play_lock_current::playfield_line#0 ]
Added variable play_lock_current::i#1 to zero page equivalence class [ play_lock_current::i#1 ]
Added variable keyboard_event_pressed::$0 to zero page equivalence class [ keyboard_event_pressed::$0 ]
Added variable keyboard_event_pressed::row_bits#0 to zero page equivalence class [ keyboard_event_pressed::row_bits#0 ]
Added variable keyboard_event_pressed::$1 to zero page equivalence class [ keyboard_event_pressed::$1 ]
Added variable keyboard_event_pressed::return#11 to zero page equivalence class [ keyboard_event_pressed::return#11 ]
Added variable keyboard_matrix_read::rowid#0 to zero page equivalence class [ keyboard_matrix_read::rowid#0 ]
Added variable keyboard_matrix_read::return#2 to zero page equivalence class [ keyboard_matrix_read::return#2 ]
Added variable keyboard_event_scan::row_scan#0 to zero page equivalence class [ keyboard_event_scan::row_scan#0 ]
Added variable keyboard_event_pressed::return#0 to zero page equivalence class [ keyboard_event_pressed::return#0 ]
Added variable keyboard_event_scan::$0 to zero page equivalence class [ keyboard_event_scan::$0 ]
Added variable keyboard_event_pressed::return#1 to zero page equivalence class [ keyboard_event_pressed::return#1 ]
Added variable keyboard_event_scan::$3 to zero page equivalence class [ keyboard_event_scan::$3 ]
Added variable keyboard_event_pressed::return#2 to zero page equivalence class [ keyboard_event_pressed::return#2 ]
Added variable keyboard_event_scan::$6 to zero page equivalence class [ keyboard_event_scan::$6 ]
Added variable keyboard_event_pressed::return#10 to zero page equivalence class [ keyboard_event_pressed::return#10 ]
Added variable keyboard_event_scan::$9 to zero page equivalence class [ keyboard_event_scan::$9 ]
Added variable keyboard_event_scan::$15 to zero page equivalence class [ keyboard_event_scan::$15 ]
Added variable keyboard_event_scan::$16 to zero page equivalence class [ keyboard_event_scan::$16 ]
Added variable keyboard_event_scan::event_type#0 to zero page equivalence class [ keyboard_event_scan::event_type#0 ]
Added variable keyboard_event_scan::$23 to zero page equivalence class [ keyboard_event_scan::$23 ]
Added variable keyboard_matrix_read::return#0 to zero page equivalence class [ keyboard_matrix_read::return#0 ]
Added variable play_init::$2 to zero page equivalence class [ play_init::$2 ]
Added variable play_init::b4#0 to zero page equivalence class [ play_init::b4#0 ]
Added variable sprites_init::s2#0 to zero page equivalence class [ sprites_init::s2#0 ]
Added variable render_init::$13 to zero page equivalence class [ render_init::$13 ]
Added variable render_init::$14 to zero page equivalence class [ render_init::$14 ]
Added variable sprites_irq::ypos#0 to zero page equivalence class [ sprites_irq::ypos#0 ]
Added variable sprites_irq::$0 to zero page equivalence class [ sprites_irq::$0 ]
Added variable sprites_irq::ptr#0 to zero page equivalence class [ sprites_irq::ptr#0 ]
Added variable sprites_irq::ptr#3 to zero page equivalence class [ sprites_irq::ptr#3 ]
Added variable sprites_irq::ptr#4 to zero page equivalence class [ sprites_irq::ptr#4 ]
Added variable sprites_irq::ptr#1 to zero page equivalence class [ sprites_irq::ptr#1 ]
Added variable sprites_irq::ptr#2 to zero page equivalence class [ sprites_irq::ptr#2 ]
Complete equivalence classes
[ render_screen_show#16 render_screen_show#13 ]
[ render_screen_render#18 render_screen_render#11 ]
[ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 ]
[ render_score::screen#3 ]
[ render_bcd::screen#6 render_bcd::screen#0 render_bcd::screen#1 render_bcd::screen#2 render_bcd::screen#3 render_bcd::screen#4 render_bcd::screen#5 ]
[ render_bcd::offset#6 ]
[ render_bcd::only_low#6 ]
[ render_bcd::bcd#6 render_bcd::bcd#0 render_bcd::bcd#1 render_bcd::bcd#2 render_bcd::bcd#3 render_bcd::bcd#4 render_bcd::bcd#5 ]
[ render_bcd::screen_pos#3 render_bcd::screen_pos#0 render_bcd::screen_pos#2 ]
[ render_screen_render#15 render_screen_render#68 ]
[ next_piece_idx#12 next_piece_idx#84 next_piece_idx#85 ]
[ render_next::l#7 render_next::l#1 ]
[ render_next::next_piece_gfx#2 render_next::next_piece_gfx#3 render_next::next_piece_gfx#1 render_next::next_piece_gfx#9 ]
[ render_next::screen_next_area#5 render_next::screen_next_area#10 render_next::screen_next_area#4 render_next::screen_next_area#11 render_next::screen_next_area#3 ]
[ render_next::c#2 render_next::c#1 ]
[ current_ypos#13 current_ypos#106 current_ypos#107 ]
[ render_screen_render#33 render_screen_render#69 ]
[ current_xpos#59 current_xpos#130 current_xpos#131 ]
[ current_piece_gfx#64 current_piece_gfx#120 current_piece_gfx#121 ]
[ current_piece_char#68 current_piece_char#108 current_piece_char#109 ]
[ render_moving::ypos2#2 render_moving::ypos2#0 render_moving::ypos2#1 ]
[ render_moving::l#4 render_moving::l#1 ]
[ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 ]
[ render_moving::xpos#2 render_moving::xpos#0 render_moving::xpos#1 ]
[ render_moving::c#2 render_moving::c#1 ]
[ render_screen_render#22 render_screen_render#70 ]
[ render_playfield::l#2 render_playfield::l#1 ]
[ render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 ]
[ render_playfield::screen_line#2 render_playfield::screen_line#0 render_playfield::screen_line#1 ]
[ render_playfield::c#2 render_playfield::c#1 ]
[ play_movement::return#2 play_movement::render#1 play_movement::return#0 ]
[ play_move_rotate::return#2 ]
[ play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 ]
[ current_piece#17 current_piece#100 current_piece#101 current_piece#102 current_piece#103 current_piece#104 ]
[ play_collision::orientation#5 play_collision::orientation#0 play_collision::orientation#1 play_collision::orientation#2 play_collision::orientation#3 ]
[ play_collision::ypos#5 play_collision::ypos#0 play_collision::ypos#1 play_collision::ypos#2 play_collision::ypos#3 play_collision::ypos#4 ]
[ play_collision::xpos#6 play_collision::xpos#0 play_collision::xpos#1 play_collision::xpos#2 play_collision::xpos#3 play_collision::xpos#4 ]
[ play_collision::ypos2#2 play_collision::ypos2#0 play_collision::ypos2#1 ]
[ play_collision::l#6 play_collision::l#1 ]
[ play_collision::i#2 play_collision::i#3 play_collision::i#11 play_collision::i#13 ]
[ play_collision::col#2 play_collision::col#9 play_collision::col#1 ]
[ play_collision::c#2 play_collision::c#1 ]
[ play_collision::return#15 ]
[ play_move_leftright::return#2 ]
[ play_move_down::movedown#6 play_move_down::movedown#7 play_move_down::movedown#10 play_move_down::movedown#2 play_move_down::movedown#3 ]
[ current_ypos#38 current_ypos#3 current_ypos#100 current_ypos#19 current_ypos#6 ]
[ lines_bcd#26 lines_bcd#19 lines_bcd#15 lines_bcd#17 lines_bcd#30 ]
[ score_bcd#26 score_bcd#18 score_bcd#14 score_bcd#16 score_bcd#30 ]
[ level#33 level#10 level#17 level#19 level#21 ]
[ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#21 current_movedown_slow#1 current_movedown_slow#23 current_movedown_slow#69 current_movedown_slow#10 ]
[ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#64 level_bcd#21 level_bcd#8 ]
[ current_piece#28 current_piece#10 current_piece#15 current_piece#98 current_piece#106 ]
[ current_piece_char#29 current_piece_char#10 current_piece_char#16 current_piece_char#5 ]
[ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ]
[ current_piece_gfx#35 current_piece_gfx#114 current_piece_gfx#18 current_piece_gfx#74 current_piece_gfx#20 current_piece_gfx#21 current_piece_gfx#7 ]
[ current_xpos#43 current_xpos#124 current_xpos#19 current_xpos#103 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ]
[ play_move_down::return#3 ]
[ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#2 play_spawn_current::piece_idx#1 ]
[ game_over#65 game_over#27 game_over#10 game_over#15 game_over#52 ]
[ play_increase_level::b#2 play_increase_level::b#1 ]
[ play_remove_lines::y#8 play_remove_lines::y#1 ]
[ play_remove_lines::removed#11 play_remove_lines::removed#8 play_remove_lines::removed#1 ]
[ play_remove_lines::r#2 play_remove_lines::r#3 play_remove_lines::r#1 ]
[ play_remove_lines::x#2 play_remove_lines::x#1 ]
[ play_remove_lines::full#4 play_remove_lines::full#2 ]
[ play_remove_lines::w#6 play_remove_lines::w#3 play_remove_lines::w#4 play_remove_lines::w#12 play_remove_lines::w#11 play_remove_lines::w#1 play_remove_lines::w#2 ]
[ play_lock_current::ypos2#2 play_lock_current::ypos2#0 play_lock_current::ypos2#1 ]
[ play_lock_current::l#6 play_lock_current::l#1 ]
[ play_lock_current::i#2 play_lock_current::i#3 play_lock_current::i#7 play_lock_current::i#9 ]
[ play_lock_current::col#2 play_lock_current::col#0 play_lock_current::col#1 ]
[ play_lock_current::c#2 play_lock_current::c#1 ]
[ keyboard_event_pressed::keycode#5 ]
[ keyboard_event_get::return#2 keyboard_event_get::return#1 ]
[ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ]
[ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ]
[ keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#15 keyboard_event_scan::keycode#1 ]
[ keyboard_events_size#10 keyboard_events_size#30 keyboard_events_size#19 keyboard_events_size#16 keyboard_events_size#13 keyboard_events_size#4 keyboard_events_size#29 keyboard_events_size#1 keyboard_events_size#2 ]
[ render_show::d018val#3 ]
[ play_init::j#2 play_init::j#1 ]
[ play_init::pli#2 play_init::pli#1 ]
[ play_init::idx#2 play_init::idx#1 ]
[ play_init::b#2 play_init::b#1 ]
[ sprites_init::s#2 sprites_init::s#1 ]
[ sprites_init::xpos#2 sprites_init::xpos#1 ]
[ render_init::i#2 render_init::i#1 ]
[ render_init::li_1#2 render_init::li_1#1 ]
[ render_init::li_2#2 render_init::li_2#1 ]
[ render_screen_original::y#6 render_screen_original::y#1 ]
[ render_screen_original::oscr#2 render_screen_original::oscr#4 render_screen_original::oscr#1 ]
[ render_screen_original::ocols#2 render_screen_original::ocols#4 render_screen_original::ocols#1 ]
[ render_screen_original::screen#7 render_screen_original::screen#6 render_screen_original::screen#5 render_screen_original::screen#8 render_screen_original::screen#9 render_screen_original::screen#10 render_screen_original::screen#2 render_screen_original::screen#3 ]
[ render_screen_original::cols#6 render_screen_original::cols#5 render_screen_original::cols#4 render_screen_original::cols#7 render_screen_original::cols#3 render_screen_original::cols#1 render_screen_original::cols#2 ]
[ render_screen_original::x#6 render_screen_original::x#5 render_screen_original::x#4 render_screen_original::x#1 render_screen_original::x#2 render_screen_original::x#3 ]
[ sprites_irq::raster_sprite_gfx_modify#0 ]
[ render_screen_showing#0 render_screen_showing#1 ]
[ irq_raster_next#0 irq_raster_next#4 irq_raster_next#1 irq_raster_next#2 irq_raster_next#3 ]
[ irq_sprite_ypos#0 irq_sprite_ypos#1 irq_sprite_ypos#2 irq_sprite_ypos#3 ]
[ irq_sprite_ptr#0 irq_sprite_ptr#1 irq_sprite_ptr#2 irq_sprite_ptr#3 ]
[ irq_cnt#0 irq_cnt#1 irq_cnt#2 ]
[ keyboard_event_get::return#3 ]
[ main::key_event#0 ]
[ play_movement::key_event#0 ]
[ play_movement::return#3 ]
[ main::render#1 ]
[ render_bcd::$5 ]
[ render_bcd::$6 ]
[ render_bcd::$3 ]
[ render_bcd::$4 ]
[ render_next::$4 ]
[ render_next::next_piece_char#0 ]
[ render_next::cell#0 ]
[ render_moving::$2 ]
[ render_moving::screen_line#0 ]
[ render_moving::current_cell#0 ]
[ render_playfield::$2 ]
[ render_playfield::$3 ]
[ play_move_down::key_event#0 ]
[ play_move_down::return#0 ]
[ play_move_leftright::key_event#0 ]
[ play_move_leftright::return#0 ]
[ play_movement::$3 ]
[ play_movement::render#2 ]
[ play_move_rotate::key_event#0 ]
[ play_move_rotate::return#0 ]
[ play_movement::$4 ]
[ play_move_rotate::$5 ]
[ play_collision::return#14 ]
[ play_move_rotate::$2 ]
[ play_move_rotate::$7 ]
[ play_collision::piece_gfx#0 ]
[ play_collision::playfield_line#0 ]
[ play_collision::i#1 ]
[ play_collision::$7 ]
[ play_collision::return#13 ]
[ play_move_leftright::$4 ]
[ play_collision::return#1 ]
[ play_move_leftright::$8 ]
[ keyboard_event_pressed::return#12 ]
[ play_move_down::$2 ]
[ play_collision::return#0 ]
[ play_move_down::$12 ]
[ play_remove_lines::return#0 ]
[ play_move_down::removed#0 ]
[ play_update_score::removed#0 ]
[ play_spawn_current::current_piece_idx#0 ]
[ play_spawn_current::$0 ]
[ play_collision::return#10 ]
[ play_spawn_current::$2 ]
[ play_spawn_current::sid_rnd1_return#0 ]
[ play_update_score::$2 ]
[ play_update_score::lines_before#0 ]
[ play_update_score::$4 ]
[ play_update_score::add_bcd#0 ]
[ play_update_score::$5 ]
[ play_update_score::lines_after#0 ]
[ play_increase_level::$1 ]
[ play_increase_level::b4#0 ]
[ play_remove_lines::c#0 ]
[ play_lock_current::playfield_line#0 ]
[ play_lock_current::i#1 ]
[ keyboard_event_pressed::$0 ]
[ keyboard_event_pressed::row_bits#0 ]
[ keyboard_event_pressed::$1 ]
[ keyboard_event_pressed::return#11 ]
[ keyboard_matrix_read::rowid#0 ]
[ keyboard_matrix_read::return#2 ]
[ keyboard_event_scan::row_scan#0 ]
[ keyboard_event_pressed::return#0 ]
[ keyboard_event_scan::$0 ]
[ keyboard_event_pressed::return#1 ]
[ keyboard_event_scan::$3 ]
[ keyboard_event_pressed::return#2 ]
[ keyboard_event_scan::$6 ]
[ keyboard_event_pressed::return#10 ]
[ keyboard_event_scan::$9 ]
[ keyboard_event_scan::$15 ]
[ keyboard_event_scan::$16 ]
[ keyboard_event_scan::event_type#0 ]
[ keyboard_event_scan::$23 ]
[ keyboard_matrix_read::return#0 ]
[ play_init::$2 ]
[ play_init::b4#0 ]
[ sprites_init::s2#0 ]
[ render_init::$13 ]
[ render_init::$14 ]
[ sprites_irq::ypos#0 ]
[ sprites_irq::$0 ]
[ sprites_irq::ptr#0 ]
[ sprites_irq::ptr#3 ]
[ sprites_irq::ptr#4 ]
[ sprites_irq::ptr#1 ]
[ sprites_irq::ptr#2 ]
Allocated zp ZP_BYTE:2 [ render_screen_show#16 render_screen_show#13 ]
Allocated zp ZP_BYTE:3 [ render_screen_render#18 render_screen_render#11 ]
Allocated zp ZP_BYTE:4 [ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 ]
Allocated zp ZP_WORD:5 [ render_score::screen#3 ]
Allocated zp ZP_WORD:7 [ render_bcd::screen#6 render_bcd::screen#0 render_bcd::screen#1 render_bcd::screen#2 render_bcd::screen#3 render_bcd::screen#4 render_bcd::screen#5 ]
Allocated zp ZP_WORD:9 [ render_bcd::offset#6 ]
Allocated zp ZP_BYTE:11 [ render_bcd::only_low#6 ]
Allocated zp ZP_BYTE:12 [ render_bcd::bcd#6 render_bcd::bcd#0 render_bcd::bcd#1 render_bcd::bcd#2 render_bcd::bcd#3 render_bcd::bcd#4 render_bcd::bcd#5 ]
Allocated zp ZP_WORD:13 [ render_bcd::screen_pos#3 render_bcd::screen_pos#0 render_bcd::screen_pos#2 ]
Allocated zp ZP_BYTE:15 [ render_screen_render#15 render_screen_render#68 ]
Allocated zp ZP_BYTE:16 [ next_piece_idx#12 next_piece_idx#84 next_piece_idx#85 ]
Allocated zp ZP_BYTE:17 [ render_next::l#7 render_next::l#1 ]
Allocated zp ZP_WORD:18 [ render_next::next_piece_gfx#2 render_next::next_piece_gfx#3 render_next::next_piece_gfx#1 render_next::next_piece_gfx#9 ]
Allocated zp ZP_WORD:20 [ render_next::screen_next_area#5 render_next::screen_next_area#10 render_next::screen_next_area#4 render_next::screen_next_area#11 render_next::screen_next_area#3 ]
Allocated zp ZP_BYTE:22 [ render_next::c#2 render_next::c#1 ]
Allocated zp ZP_BYTE:23 [ current_ypos#13 current_ypos#106 current_ypos#107 ]
Allocated zp ZP_BYTE:24 [ render_screen_render#33 render_screen_render#69 ]
Allocated zp ZP_BYTE:25 [ current_xpos#59 current_xpos#130 current_xpos#131 ]
Allocated zp ZP_WORD:26 [ current_piece_gfx#64 current_piece_gfx#120 current_piece_gfx#121 ]
Allocated zp ZP_BYTE:28 [ current_piece_char#68 current_piece_char#108 current_piece_char#109 ]
Allocated zp ZP_BYTE:29 [ render_moving::ypos2#2 render_moving::ypos2#0 render_moving::ypos2#1 ]
Allocated zp ZP_BYTE:30 [ render_moving::l#4 render_moving::l#1 ]
Allocated zp ZP_BYTE:31 [ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 ]
Allocated zp ZP_BYTE:32 [ render_moving::xpos#2 render_moving::xpos#0 render_moving::xpos#1 ]
Allocated zp ZP_BYTE:33 [ render_moving::c#2 render_moving::c#1 ]
Allocated zp ZP_BYTE:34 [ render_screen_render#22 render_screen_render#70 ]
Allocated zp ZP_BYTE:35 [ render_playfield::l#2 render_playfield::l#1 ]
Allocated zp ZP_BYTE:36 [ render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 ]
Allocated zp ZP_WORD:37 [ render_playfield::screen_line#2 render_playfield::screen_line#0 render_playfield::screen_line#1 ]
Allocated zp ZP_BYTE:39 [ render_playfield::c#2 render_playfield::c#1 ]
Allocated zp ZP_BYTE:40 [ play_movement::return#2 play_movement::render#1 play_movement::return#0 ]
Allocated zp ZP_BYTE:41 [ play_move_rotate::return#2 ]
Allocated zp ZP_BYTE:42 [ play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 ]
Allocated zp ZP_WORD:43 [ current_piece#17 current_piece#100 current_piece#101 current_piece#102 current_piece#103 current_piece#104 ]
Allocated zp ZP_BYTE:45 [ play_collision::orientation#5 play_collision::orientation#0 play_collision::orientation#1 play_collision::orientation#2 play_collision::orientation#3 ]
Allocated zp ZP_BYTE:46 [ play_collision::ypos#5 play_collision::ypos#0 play_collision::ypos#1 play_collision::ypos#2 play_collision::ypos#3 play_collision::ypos#4 ]
Allocated zp ZP_BYTE:47 [ play_collision::xpos#6 play_collision::xpos#0 play_collision::xpos#1 play_collision::xpos#2 play_collision::xpos#3 play_collision::xpos#4 ]
Allocated zp ZP_BYTE:48 [ play_collision::ypos2#2 play_collision::ypos2#0 play_collision::ypos2#1 ]
Allocated zp ZP_BYTE:49 [ play_collision::l#6 play_collision::l#1 ]
Allocated zp ZP_BYTE:50 [ play_collision::i#2 play_collision::i#3 play_collision::i#11 play_collision::i#13 ]
Allocated zp ZP_BYTE:51 [ play_collision::col#2 play_collision::col#9 play_collision::col#1 ]
Allocated zp ZP_BYTE:52 [ play_collision::c#2 play_collision::c#1 ]
Allocated zp ZP_BYTE:53 [ play_collision::return#15 ]
Allocated zp ZP_BYTE:54 [ play_move_leftright::return#2 ]
Allocated zp ZP_BYTE:55 [ play_move_down::movedown#6 play_move_down::movedown#7 play_move_down::movedown#10 play_move_down::movedown#2 play_move_down::movedown#3 ]
Allocated zp ZP_BYTE:56 [ current_ypos#38 current_ypos#3 current_ypos#100 current_ypos#19 current_ypos#6 ]
Allocated zp ZP_WORD:57 [ lines_bcd#26 lines_bcd#19 lines_bcd#15 lines_bcd#17 lines_bcd#30 ]
Allocated zp ZP_DWORD:59 [ score_bcd#26 score_bcd#18 score_bcd#14 score_bcd#16 score_bcd#30 ]
Allocated zp ZP_BYTE:63 [ level#33 level#10 level#17 level#19 level#21 ]
Allocated zp ZP_BYTE:64 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#21 current_movedown_slow#1 current_movedown_slow#23 current_movedown_slow#69 current_movedown_slow#10 ]
Allocated zp ZP_BYTE:65 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#64 level_bcd#21 level_bcd#8 ]
Allocated zp ZP_WORD:66 [ current_piece#28 current_piece#10 current_piece#15 current_piece#98 current_piece#106 ]
Allocated zp ZP_BYTE:68 [ current_piece_char#29 current_piece_char#10 current_piece_char#16 current_piece_char#5 ]
Allocated zp ZP_BYTE:69 [ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ]
Allocated zp ZP_WORD:70 [ current_piece_gfx#35 current_piece_gfx#114 current_piece_gfx#18 current_piece_gfx#74 current_piece_gfx#20 current_piece_gfx#21 current_piece_gfx#7 ]
Allocated zp ZP_BYTE:72 [ current_xpos#43 current_xpos#124 current_xpos#19 current_xpos#103 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ]
Allocated zp ZP_BYTE:73 [ play_move_down::return#3 ]
Allocated zp ZP_BYTE:74 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#2 play_spawn_current::piece_idx#1 ]
Allocated zp ZP_BYTE:75 [ game_over#65 game_over#27 game_over#10 game_over#15 game_over#52 ]
Allocated zp ZP_BYTE:76 [ play_increase_level::b#2 play_increase_level::b#1 ]
Allocated zp ZP_BYTE:77 [ play_remove_lines::y#8 play_remove_lines::y#1 ]
Allocated zp ZP_BYTE:78 [ play_remove_lines::removed#11 play_remove_lines::removed#8 play_remove_lines::removed#1 ]
Allocated zp ZP_BYTE:79 [ play_remove_lines::r#2 play_remove_lines::r#3 play_remove_lines::r#1 ]
Allocated zp ZP_BYTE:80 [ play_remove_lines::x#2 play_remove_lines::x#1 ]
Allocated zp ZP_BYTE:81 [ play_remove_lines::full#4 play_remove_lines::full#2 ]
Allocated zp ZP_BYTE:82 [ play_remove_lines::w#6 play_remove_lines::w#3 play_remove_lines::w#4 play_remove_lines::w#12 play_remove_lines::w#11 play_remove_lines::w#1 play_remove_lines::w#2 ]
Allocated zp ZP_BYTE:83 [ play_lock_current::ypos2#2 play_lock_current::ypos2#0 play_lock_current::ypos2#1 ]
Allocated zp ZP_BYTE:84 [ play_lock_current::l#6 play_lock_current::l#1 ]
Allocated zp ZP_BYTE:85 [ play_lock_current::i#2 play_lock_current::i#3 play_lock_current::i#7 play_lock_current::i#9 ]
Allocated zp ZP_BYTE:86 [ play_lock_current::col#2 play_lock_current::col#0 play_lock_current::col#1 ]
Allocated zp ZP_BYTE:87 [ play_lock_current::c#2 play_lock_current::c#1 ]
Allocated zp ZP_BYTE:88 [ keyboard_event_pressed::keycode#5 ]
Allocated zp ZP_BYTE:89 [ keyboard_event_get::return#2 keyboard_event_get::return#1 ]
Allocated zp ZP_BYTE:90 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ]
Allocated zp ZP_BYTE:91 [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ]
Allocated zp ZP_BYTE:92 [ keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#15 keyboard_event_scan::keycode#1 ]
Allocated zp ZP_BYTE:93 [ keyboard_events_size#10 keyboard_events_size#30 keyboard_events_size#19 keyboard_events_size#16 keyboard_events_size#13 keyboard_events_size#4 keyboard_events_size#29 keyboard_events_size#1 keyboard_events_size#2 ]
Allocated zp ZP_BYTE:94 [ render_show::d018val#3 ]
Allocated zp ZP_BYTE:95 [ play_init::j#2 play_init::j#1 ]
Allocated zp ZP_WORD:96 [ play_init::pli#2 play_init::pli#1 ]
Allocated zp ZP_BYTE:98 [ play_init::idx#2 play_init::idx#1 ]
Allocated zp ZP_BYTE:99 [ play_init::b#2 play_init::b#1 ]
Allocated zp ZP_BYTE:100 [ sprites_init::s#2 sprites_init::s#1 ]
Allocated zp ZP_BYTE:101 [ sprites_init::xpos#2 sprites_init::xpos#1 ]
Allocated zp ZP_BYTE:102 [ render_init::i#2 render_init::i#1 ]
Allocated zp ZP_WORD:103 [ render_init::li_1#2 render_init::li_1#1 ]
Allocated zp ZP_WORD:105 [ render_init::li_2#2 render_init::li_2#1 ]
Allocated zp ZP_BYTE:107 [ render_screen_original::y#6 render_screen_original::y#1 ]
Allocated zp ZP_WORD:108 [ render_screen_original::oscr#2 render_screen_original::oscr#4 render_screen_original::oscr#1 ]
Allocated zp ZP_WORD:110 [ render_screen_original::ocols#2 render_screen_original::ocols#4 render_screen_original::ocols#1 ]
Allocated zp ZP_WORD:112 [ render_screen_original::screen#7 render_screen_original::screen#6 render_screen_original::screen#5 render_screen_original::screen#8 render_screen_original::screen#9 render_screen_original::screen#10 render_screen_original::screen#2 render_screen_original::screen#3 ]
Allocated zp ZP_WORD:114 [ render_screen_original::cols#6 render_screen_original::cols#5 render_screen_original::cols#4 render_screen_original::cols#7 render_screen_original::cols#3 render_screen_original::cols#1 render_screen_original::cols#2 ]
Allocated zp ZP_BYTE:116 [ render_screen_original::x#6 render_screen_original::x#5 render_screen_original::x#4 render_screen_original::x#1 render_screen_original::x#2 render_screen_original::x#3 ]
Allocated zp ZP_BYTE:117 [ sprites_irq::raster_sprite_gfx_modify#0 ]
Allocated zp ZP_BYTE:118 [ render_screen_showing#0 render_screen_showing#1 ]
Allocated zp ZP_BYTE:119 [ irq_raster_next#0 irq_raster_next#4 irq_raster_next#1 irq_raster_next#2 irq_raster_next#3 ]
Allocated zp ZP_BYTE:120 [ irq_sprite_ypos#0 irq_sprite_ypos#1 irq_sprite_ypos#2 irq_sprite_ypos#3 ]
Allocated zp ZP_BYTE:121 [ irq_sprite_ptr#0 irq_sprite_ptr#1 irq_sprite_ptr#2 irq_sprite_ptr#3 ]
Allocated zp ZP_BYTE:122 [ irq_cnt#0 irq_cnt#1 irq_cnt#2 ]
Allocated zp ZP_BYTE:123 [ keyboard_event_get::return#3 ]
Allocated zp ZP_BYTE:124 [ main::key_event#0 ]
Allocated zp ZP_BYTE:125 [ play_movement::key_event#0 ]
Allocated zp ZP_BYTE:126 [ play_movement::return#3 ]
Allocated zp ZP_BYTE:127 [ main::render#1 ]
Allocated zp ZP_BYTE:128 [ render_bcd::$5 ]
Allocated zp ZP_BYTE:129 [ render_bcd::$6 ]
Allocated zp ZP_BYTE:130 [ render_bcd::$3 ]
Allocated zp ZP_BYTE:131 [ render_bcd::$4 ]
Allocated zp ZP_BYTE:132 [ render_next::$4 ]
Allocated zp ZP_BYTE:133 [ render_next::next_piece_char#0 ]
Allocated zp ZP_BYTE:134 [ render_next::cell#0 ]
Allocated zp ZP_BYTE:135 [ render_moving::$2 ]
Allocated zp ZP_WORD:136 [ render_moving::screen_line#0 ]
Allocated zp ZP_BYTE:138 [ render_moving::current_cell#0 ]
Allocated zp ZP_BYTE:139 [ render_playfield::$2 ]
Allocated zp ZP_BYTE:140 [ render_playfield::$3 ]
Allocated zp ZP_BYTE:141 [ play_move_down::key_event#0 ]
Allocated zp ZP_BYTE:142 [ play_move_down::return#0 ]
Allocated zp ZP_BYTE:143 [ play_move_leftright::key_event#0 ]
Allocated zp ZP_BYTE:144 [ play_move_leftright::return#0 ]
Allocated zp ZP_BYTE:145 [ play_movement::$3 ]
Allocated zp ZP_BYTE:146 [ play_movement::render#2 ]
Allocated zp ZP_BYTE:147 [ play_move_rotate::key_event#0 ]
Allocated zp ZP_BYTE:148 [ play_move_rotate::return#0 ]
Allocated zp ZP_BYTE:149 [ play_movement::$4 ]
Allocated zp ZP_BYTE:150 [ play_move_rotate::$5 ]
Allocated zp ZP_BYTE:151 [ play_collision::return#14 ]
Allocated zp ZP_BYTE:152 [ play_move_rotate::$2 ]
Allocated zp ZP_BYTE:153 [ play_move_rotate::$7 ]
Allocated zp ZP_WORD:154 [ play_collision::piece_gfx#0 ]
Allocated zp ZP_WORD:156 [ play_collision::playfield_line#0 ]
Allocated zp ZP_BYTE:158 [ play_collision::i#1 ]
Allocated zp ZP_BYTE:159 [ play_collision::$7 ]
Allocated zp ZP_BYTE:160 [ play_collision::return#13 ]
Allocated zp ZP_BYTE:161 [ play_move_leftright::$4 ]
Allocated zp ZP_BYTE:162 [ play_collision::return#1 ]
Allocated zp ZP_BYTE:163 [ play_move_leftright::$8 ]
Allocated zp ZP_BYTE:164 [ keyboard_event_pressed::return#12 ]
Allocated zp ZP_BYTE:165 [ play_move_down::$2 ]
Allocated zp ZP_BYTE:166 [ play_collision::return#0 ]
Allocated zp ZP_BYTE:167 [ play_move_down::$12 ]
Allocated zp ZP_BYTE:168 [ play_remove_lines::return#0 ]
Allocated zp ZP_BYTE:169 [ play_move_down::removed#0 ]
Allocated zp ZP_BYTE:170 [ play_update_score::removed#0 ]
Allocated zp ZP_BYTE:171 [ play_spawn_current::current_piece_idx#0 ]
Allocated zp ZP_BYTE:172 [ play_spawn_current::$0 ]
Allocated zp ZP_BYTE:173 [ play_collision::return#10 ]
Allocated zp ZP_BYTE:174 [ play_spawn_current::$2 ]
Allocated zp ZP_BYTE:175 [ play_spawn_current::sid_rnd1_return#0 ]
Allocated zp ZP_BYTE:176 [ play_update_score::$2 ]
Allocated zp ZP_BYTE:177 [ play_update_score::lines_before#0 ]
Allocated zp ZP_BYTE:178 [ play_update_score::$4 ]
Allocated zp ZP_DWORD:179 [ play_update_score::add_bcd#0 ]
Allocated zp ZP_BYTE:183 [ play_update_score::$5 ]
Allocated zp ZP_BYTE:184 [ play_update_score::lines_after#0 ]
Allocated zp ZP_BYTE:185 [ play_increase_level::$1 ]
Allocated zp ZP_BYTE:186 [ play_increase_level::b4#0 ]
Allocated zp ZP_BYTE:187 [ play_remove_lines::c#0 ]
Allocated zp ZP_WORD:188 [ play_lock_current::playfield_line#0 ]
Allocated zp ZP_BYTE:190 [ play_lock_current::i#1 ]
Allocated zp ZP_BYTE:191 [ keyboard_event_pressed::$0 ]
Allocated zp ZP_BYTE:192 [ keyboard_event_pressed::row_bits#0 ]
Allocated zp ZP_BYTE:193 [ keyboard_event_pressed::$1 ]
Allocated zp ZP_BYTE:194 [ keyboard_event_pressed::return#11 ]
Allocated zp ZP_BYTE:195 [ keyboard_matrix_read::rowid#0 ]
Allocated zp ZP_BYTE:196 [ keyboard_matrix_read::return#2 ]
Allocated zp ZP_BYTE:197 [ keyboard_event_scan::row_scan#0 ]
Allocated zp ZP_BYTE:198 [ keyboard_event_pressed::return#0 ]
Allocated zp ZP_BYTE:199 [ keyboard_event_scan::$0 ]
Allocated zp ZP_BYTE:200 [ keyboard_event_pressed::return#1 ]
Allocated zp ZP_BYTE:201 [ keyboard_event_scan::$3 ]
Allocated zp ZP_BYTE:202 [ keyboard_event_pressed::return#2 ]
Allocated zp ZP_BYTE:203 [ keyboard_event_scan::$6 ]
Allocated zp ZP_BYTE:204 [ keyboard_event_pressed::return#10 ]
Allocated zp ZP_BYTE:205 [ keyboard_event_scan::$9 ]
Allocated zp ZP_BYTE:206 [ keyboard_event_scan::$15 ]
Allocated zp ZP_BYTE:207 [ keyboard_event_scan::$16 ]
Allocated zp ZP_BYTE:208 [ keyboard_event_scan::event_type#0 ]
Allocated zp ZP_BYTE:209 [ keyboard_event_scan::$23 ]
Allocated zp ZP_BYTE:210 [ keyboard_matrix_read::return#0 ]
Allocated zp ZP_BYTE:211 [ play_init::$2 ]
Allocated zp ZP_BYTE:212 [ play_init::b4#0 ]
Allocated zp ZP_BYTE:213 [ sprites_init::s2#0 ]
Allocated zp ZP_BYTE:214 [ render_init::$13 ]
Allocated zp ZP_BYTE:215 [ render_init::$14 ]
Allocated zp ZP_BYTE:216 [ sprites_irq::ypos#0 ]
Allocated zp ZP_BYTE:217 [ sprites_irq::$0 ]
Allocated zp ZP_BYTE:218 [ sprites_irq::ptr#0 ]
Allocated zp ZP_BYTE:219 [ sprites_irq::ptr#3 ]
Allocated zp ZP_BYTE:220 [ sprites_irq::ptr#4 ]
Allocated zp ZP_BYTE:221 [ sprites_irq::ptr#1 ]
Allocated zp ZP_BYTE:222 [ sprites_irq::ptr#2 ]
INITIAL ASM
//SEG0 File Comments
// Tetris Game for the Commodore 64
// The tetris game tries to match NES tetris gameplay pretty closely
// Source: https://meatfighter.com/nintendotetrisai/
//SEG1 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(bbegin)
.pc = $80d "Program"
//SEG2 Global Constants & labels
// Processor port data direction register
.label PROCPORT_DDR = 0
// Mask for PROCESSOR_PORT_DDR which allows only memory configuration to be written
.const PROCPORT_DDR_MEMORY_MASK = 7
// Processor Port Register controlling RAM/ROM configuration and the datasette
.label PROCPORT = 1
// RAM in $A000, $E000 I/O in $D000
.const PROCPORT_RAM_IO = $35
// The offset of the sprite pointers from the screen start address
.const SPRITE_PTRS = $3f8
.label SPRITES_XPOS = $d000
.label SPRITES_YPOS = $d001
.label RASTER = $d012
.label SPRITES_ENABLE = $d015
.label SPRITES_EXPAND_Y = $d017
.label SPRITES_MC = $d01c
.label SPRITES_EXPAND_X = $d01d
.label BORDERCOL = $d020
.label BGCOL1 = $d021
.label BGCOL2 = $d022
.label BGCOL3 = $d023
.label BGCOL4 = $d024
.label SPRITES_COLS = $d027
.label VIC_CONTROL = $d011
.label D011 = $d011
.const VIC_ECM = $40
.const VIC_DEN = $10
.const VIC_RSEL = 8
.label D018 = $d018
// VIC II IRQ Status Register
.label IRQ_STATUS = $d019
// VIC II IRQ Enable Register
.label IRQ_ENABLE = $d01a
// Bits for the IRQ Status/Enable Registers
.const IRQ_RASTER = 1
// Color Ram
.label COLS = $d800
// CIA#1 Port A: keyboard matrix columns and joystick #2
.label CIA1_PORT_A = $dc00
// CIA#1 Port B: keyboard matrix rows and joystick #1.
.label CIA1_PORT_B = $dc01
// CIA#1 Interrupt Status & Control Register
.label CIA1_INTERRUPT = $dc0d
// Value that disables all CIA interrupts when stored to the CIA Interrupt registers
.const CIA_INTERRUPT_CLEAR = $7f
// CIA#2 Port A: Serial bus, RS-232, VIC memory bank
.label CIA2_PORT_A = $dd00
// CIA #2 Port A data direction register.
.label CIA2_PORT_A_DDR = $dd02
// The vector used when the HARDWARE serves IRQ interrupts
.label HARDWARE_IRQ = $fffe
// The colors of the C64
.const BLACK = 0
.const RED = 2
.const CYAN = 3
.const PURPLE = 4
.const GREEN = 5
.const BLUE = 6
.const ORANGE = 8
.const PINK = $a
.const DARK_GREY = $b
.const GREY = $c
.const LIGHT_GREEN = $d
.const LIGHT_BLUE = $e
.const KEY_Z = $c
.const KEY_LSHIFT = $f
.const KEY_X = $17
.const KEY_DOT = $2c
.const KEY_COMMA = $2f
.const KEY_RSHIFT = $34
.const KEY_CTRL = $3a
.const KEY_SPACE = $3c
.const KEY_COMMODORE = $3d
// SID registers for random number generation
.label SID_VOICE3_FREQ = $d40e
.label SID_VOICE3_CONTROL = $d412
.const SID_CONTROL_NOISE = $80
.label SID_VOICE3_OSC = $d41b
// Address of the first screen
.label PLAYFIELD_SCREEN_1 = $400
// Address of the second screen
.label PLAYFIELD_SCREEN_2 = $2c00
// Address of the original playscreen chars
.label PLAYFIELD_SCREEN_ORIGINAL = $1800
// Address of the original playscreen colors
.label PLAYFIELD_COLORS_ORIGINAL = $1c00
// Address of the sprites covering the playfield
.label PLAYFIELD_SPRITES = $2000
// Address of the charset
.label PLAYFIELD_CHARSET = $2800
// The size of the playfield
.const PLAYFIELD_LINES = $16
.const PLAYFIELD_COLS = $a
// The Y-position of the first sprite row
.const SPRITES_FIRST_YPOS = $31
// The rate of moving down the current piece fast (number of frames between moves if movedown is not forced)
.const current_movedown_fast = $a
// No collision
.const COLLISION_NONE = 0
// Playfield piece collision (cell on top of other cell on the playfield)
.const COLLISION_PLAYFIELD = 1
// Bottom collision (cell below bottom of the playfield)
.const COLLISION_BOTTOM = 2
// Left side collision (cell beyond the left side of the playfield)
.const COLLISION_LEFT = 4
// Right side collision (cell beyond the right side of the playfield)
.const COLLISION_RIGHT = 8
// Screen Sprite pointers on screen 1
.label PLAYFIELD_SPRITE_PTRS_1 = PLAYFIELD_SCREEN_1+SPRITE_PTRS
// Screen Sprite pointers on screen 2
.label PLAYFIELD_SPRITE_PTRS_2 = PLAYFIELD_SCREEN_2+SPRITE_PTRS
// The line of the first IRQ
.const IRQ_RASTER_FIRST = SPRITES_FIRST_YPOS+$13
.const toSpritePtr1_return = PLAYFIELD_SPRITES/$40
.label keyboard_events_size = $5d
.label render_screen_showing = $76
.label irq_raster_next = $77
.label irq_sprite_ypos = $78
.label irq_sprite_ptr = $79
.label irq_cnt = $7a
.label current_movedown_slow = $40
.label current_ypos = $38
.label current_xpos = $48
.label current_orientation = $45
.label current_piece_gfx = $46
.label current_piece_char = $44
.label level_bcd = $41
.label current_piece = $42
.label game_over = $4b
.label next_piece_idx = $4a
.label level = $3f
.label render_screen_render = 3
.label render_screen_show = 2
.label current_ypos_13 = $17
.label render_screen_render_15 = $f
.label next_piece_idx_12 = $10
.label current_movedown_counter = 4
.label lines_bcd = $39
.label score_bcd = $3b
.label current_piece_17 = $2b
.label render_screen_render_22 = $22
.label render_screen_render_33 = $18
.label current_xpos_59 = $19
.label current_piece_gfx_64 = $1a
.label current_piece_char_68 = $1c
.label render_screen_render_68 = $f
.label next_piece_idx_84 = $10
.label next_piece_idx_85 = $10
.label current_ypos_106 = $17
.label current_ypos_107 = $17
.label render_screen_render_69 = $18
.label current_xpos_130 = $19
.label current_xpos_131 = $19
.label current_piece_gfx_120 = $1a
.label current_piece_gfx_121 = $1a
.label current_piece_char_108 = $1c
.label current_piece_char_109 = $1c
.label render_screen_render_70 = $22
.label current_piece_100 = $2b
.label current_piece_101 = $2b
.label current_piece_102 = $2b
.label current_piece_103 = $2b
.label current_piece_104 = $2b
//SEG3 @begin
bbegin:
jmp b1
//SEG4 @1
b1:
//SEG5 [1] (byte) render_screen_showing#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- vbuz1=vbuc1
// The screen currently being showed to the user. $00 for screen 1 / $40 for screen 2.
lda #0
sta render_screen_showing
//SEG6 kickasm(location (const byte*) PLAYFIELD_CHARSET#0) {{ .fill 8,$00 // Place a filled char at the start of the charset .import binary "playfield-screen.imap" }}
//SEG7 kickasm(location (const byte*) PLAYFIELD_SCREEN_ORIGINAL#0) {{ // Load chars for the screen .var screen = LoadBinary("playfield-screen.iscr") // Load extended colors for the screen .var extended = LoadBinary("playfield-extended.col") // screen.get(i)+1 because the charset is loaded into PLAYFIELD_CHARSET+8 // extended.get(i)-1 because the extended colors are 1-based (1/2/3/4) // <<6 to move extended colors to the upper 2 bits .fill screen.getSize(), ( (screen.get(i)+1) | (extended.get(i)-1)<<6 ) }}
//SEG8 kickasm(location (const byte*) PLAYFIELD_COLORS_ORIGINAL#0) {{ .import binary "playfield-screen.col" }}
// Original Color Data
jmp b2
//SEG9 @2
b2:
//SEG10 kickasm(location (const byte*) PLAYFIELD_SPRITES#0) {{ .var sprites = LoadPicture("playfield-sprites.png", List().add($010101, $000000)) // Put the sprites into memory .for(var sy=0;sy<10;sy++) { .var sprite_gfx_y = sy*20 .for(var sx=0;sx<3;sx++) { .for (var y=0;y<21; y++) { .var gfx_y = sprite_gfx_y + mod(2100+y-sprite_gfx_y,21) .for (var c=0; c<3; c++) { .byte sprites.getSinglecolorByte(sx*3+c,gfx_y) } } .byte 0 } } }}
jmp b3
//SEG11 @3
b3:
//SEG12 [6] (byte) irq_raster_next#0 ← (const byte) IRQ_RASTER_FIRST#0 -- vbuz1=vbuc1
// The raster line of the next IRQ
lda #IRQ_RASTER_FIRST
sta irq_raster_next
//SEG13 [7] (byte) irq_sprite_ypos#0 ← (const byte) SPRITES_FIRST_YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) $15 -- vbuz1=vbuc1
// Y-pos of the sprites on the next IRQ
lda #SPRITES_FIRST_YPOS+$15
sta irq_sprite_ypos
//SEG14 [8] phi from @3 to toSpritePtr1 [phi:@3->toSpritePtr1]
toSpritePtr1_from_b3:
jmp toSpritePtr1
//SEG15 toSpritePtr1
toSpritePtr1:
jmp b5
//SEG16 @5
b5:
//SEG17 [9] (byte) irq_sprite_ptr#0 ← (const byte) toSpritePtr1_return#0+(byte/signed byte/word/signed word/dword/signed dword) 3 -- vbuz1=vbuc1
// Index of the sprites to show on the next IRQ
lda #toSpritePtr1_return+3
sta irq_sprite_ptr
//SEG18 [10] (byte) irq_cnt#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- vbuz1=vbuc1
// Counting the 10 IRQs
lda #0
sta irq_cnt
//SEG19 [11] phi from @5 to @4 [phi:@5->@4]
b4_from_b5:
jmp b4
//SEG20 @4
b4:
//SEG21 [12] call main
//SEG22 [14] phi from @4 to main [phi:@4->main]
main_from_b4:
jsr main
//SEG23 [13] phi from @4 to @end [phi:@4->@end]
bend_from_b4:
jmp bend
//SEG24 @end
bend:
//SEG25 main
main: {
.label key_event = $7c
.label render = $7f
//SEG26 [15] call sid_rnd_init
jsr sid_rnd_init
jmp b8
//SEG27 main::@8
b8:
//SEG28 asm { sei }
sei
//SEG29 [17] call render_init
//SEG30 [494] phi from main::@8 to render_init [phi:main::@8->render_init]
render_init_from_b8:
jsr render_init
//SEG31 [18] phi from main::@8 to main::@9 [phi:main::@8->main::@9]
b9_from_b8:
jmp b9
//SEG32 main::@9
b9:
//SEG33 [19] call sprites_init
jsr sprites_init
//SEG34 [20] phi from main::@9 to main::@10 [phi:main::@9->main::@10]
b10_from_b9:
jmp b10
//SEG35 main::@10
b10:
//SEG36 [21] call sprites_irq_init
jsr sprites_irq_init
//SEG37 [22] phi from main::@10 to main::@11 [phi:main::@10->main::@11]
b11_from_b10:
jmp b11
//SEG38 main::@11
b11:
//SEG39 [23] call play_init
//SEG40 [453] phi from main::@11 to play_init [phi:main::@11->play_init]
play_init_from_b11:
jsr play_init
//SEG41 [24] phi from main::@11 to main::@12 [phi:main::@11->main::@12]
b12_from_b11:
jmp b12
//SEG42 main::@12
b12:
//SEG43 [25] call play_spawn_current
//SEG44 [283] phi from main::@12 to play_spawn_current [phi:main::@12->play_spawn_current]
play_spawn_current_from_b12:
//SEG45 [283] phi (byte) game_over#65 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@12->play_spawn_current#0] -- vbuz1=vbuc1
lda #0
sta game_over
//SEG46 [283] phi (byte) next_piece_idx#17 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@12->play_spawn_current#1] -- vbuz1=vbuc1
lda #0
sta next_piece_idx
jsr play_spawn_current
//SEG47 [26] phi from main::@12 to main::@13 [phi:main::@12->main::@13]
b13_from_b12:
jmp b13
//SEG48 main::@13
b13:
//SEG49 [27] call play_spawn_current
//SEG50 [283] phi from main::@13 to play_spawn_current [phi:main::@13->play_spawn_current]
play_spawn_current_from_b13:
//SEG51 [283] phi (byte) game_over#65 = (byte) game_over#52 [phi:main::@13->play_spawn_current#0] -- register_copy
//SEG52 [283] phi (byte) next_piece_idx#17 = (byte) play_spawn_current::piece_idx#2 [phi:main::@13->play_spawn_current#1] -- register_copy
jsr play_spawn_current
//SEG53 [28] phi from main::@13 to main::@14 [phi:main::@13->main::@14]
b14_from_b13:
jmp b14
//SEG54 main::@14
b14:
//SEG55 [29] call render_playfield
//SEG56 [149] phi from main::@14 to render_playfield [phi:main::@14->render_playfield]
render_playfield_from_b14:
//SEG57 [149] phi (byte) render_screen_render#22 = (byte/signed byte/word/signed word/dword/signed dword) $40 [phi:main::@14->render_playfield#0] -- vbuz1=vbuc1
lda #$40
sta render_screen_render_22
jsr render_playfield
jmp b15
//SEG58 main::@15
b15:
//SEG59 [30] (byte~) current_ypos#106 ← (byte) current_ypos#6 -- vbuz1=vbuz2
lda current_ypos
sta current_ypos_106
//SEG60 [31] (byte~) current_xpos#130 ← (byte) current_xpos#103 -- vbuz1=vbuz2
lda current_xpos
sta current_xpos_130
//SEG61 [32] (byte*~) current_piece_gfx#120 ← (byte*) current_piece_gfx#74 -- pbuz1=pbuz2
lda current_piece_gfx
sta current_piece_gfx_120
lda current_piece_gfx+1
sta current_piece_gfx_120+1
//SEG62 [33] (byte~) current_piece_char#108 ← (byte) current_piece_char#5 -- vbuz1=vbuz2
lda current_piece_char
sta current_piece_char_108
//SEG63 [34] call render_moving
//SEG64 [128] phi from main::@15 to render_moving [phi:main::@15->render_moving]
render_moving_from_b15:
//SEG65 [128] phi (byte) current_piece_char#68 = (byte~) current_piece_char#108 [phi:main::@15->render_moving#0] -- register_copy
//SEG66 [128] phi (byte*) current_piece_gfx#64 = (byte*~) current_piece_gfx#120 [phi:main::@15->render_moving#1] -- register_copy
//SEG67 [128] phi (byte) current_xpos#59 = (byte~) current_xpos#130 [phi:main::@15->render_moving#2] -- register_copy
//SEG68 [128] phi (byte) render_screen_render#33 = (byte/signed byte/word/signed word/dword/signed dword) $40 [phi:main::@15->render_moving#3] -- vbuz1=vbuc1
lda #$40
sta render_screen_render_33
//SEG69 [128] phi (byte) current_ypos#13 = (byte~) current_ypos#106 [phi:main::@15->render_moving#4] -- register_copy
jsr render_moving
jmp b16
//SEG70 main::@16
b16:
//SEG71 [35] (byte~) next_piece_idx#84 ← (byte) play_spawn_current::piece_idx#2 -- vbuz1=vbuz2
lda play_spawn_current.piece_idx
sta next_piece_idx_84
//SEG72 [36] call render_next
//SEG73 [107] phi from main::@16 to render_next [phi:main::@16->render_next]
render_next_from_b16:
//SEG74 [107] phi (byte) next_piece_idx#12 = (byte~) next_piece_idx#84 [phi:main::@16->render_next#0] -- register_copy
//SEG75 [107] phi (byte) render_screen_render#15 = (byte/signed byte/word/signed word/dword/signed dword) $40 [phi:main::@16->render_next#1] -- vbuz1=vbuc1
lda #$40
sta render_screen_render_15
jsr render_next
//SEG76 [37] (byte*~) current_piece#98 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$0) -- pbuz1=pptc1_derefidx_vbuz2
ldy play_spawn_current._0
lda PIECES,y
sta current_piece
lda PIECES+1,y
sta current_piece+1
//SEG77 [38] phi from main::@16 to main::@1 [phi:main::@16->main::@1]
b1_from_b16:
//SEG78 [38] phi (byte) level_bcd#11 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@16->main::@1#0] -- vbuz1=vbuc1
lda #0
sta level_bcd
//SEG79 [38] phi (byte) level#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@16->main::@1#1] -- vbuz1=vbuc1
lda #0
sta level
//SEG80 [38] phi (dword) score_bcd#18 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@16->main::@1#2] -- vduz1=vbuc1
lda #0
sta score_bcd
lda #0
sta score_bcd+1
sta score_bcd+2
sta score_bcd+3
//SEG81 [38] phi (word) lines_bcd#19 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@16->main::@1#3] -- vwuz1=vbuc1
lda #0
sta lines_bcd
lda #0
sta lines_bcd+1
//SEG82 [38] phi (byte) current_movedown_counter#16 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@16->main::@1#4] -- vbuz1=vbuc1
lda #0
sta current_movedown_counter
//SEG83 [38] phi (byte) keyboard_events_size#19 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@16->main::@1#5] -- vbuz1=vbuc1
lda #0
sta keyboard_events_size
//SEG84 [38] phi (byte) next_piece_idx#10 = (byte) play_spawn_current::piece_idx#2 [phi:main::@16->main::@1#6] -- register_copy
//SEG85 [38] phi (byte) game_over#10 = (byte) game_over#52 [phi:main::@16->main::@1#7] -- register_copy
//SEG86 [38] phi (byte) current_ypos#100 = (byte) current_ypos#6 [phi:main::@16->main::@1#8] -- register_copy
//SEG87 [38] phi (byte) current_xpos#124 = (byte) current_xpos#103 [phi:main::@16->main::@1#9] -- register_copy
//SEG88 [38] phi (byte*) current_piece_gfx#114 = (byte*) current_piece_gfx#74 [phi:main::@16->main::@1#10] -- register_copy
//SEG89 [38] phi (byte) current_orientation#13 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@16->main::@1#11] -- vbuz1=vbuc1
lda #0
sta current_orientation
//SEG90 [38] phi (byte) current_piece_char#10 = (byte) current_piece_char#5 [phi:main::@16->main::@1#12] -- register_copy
//SEG91 [38] phi (byte*) current_piece#10 = (byte*~) current_piece#98 [phi:main::@16->main::@1#13] -- register_copy
//SEG92 [38] phi (byte) current_movedown_slow#14 = (byte) current_movedown_slow#1 [phi:main::@16->main::@1#14] -- register_copy
//SEG93 [38] phi (byte) render_screen_render#18 = (byte/signed byte/word/signed word/dword/signed dword) $40 [phi:main::@16->main::@1#15] -- vbuz1=vbuc1
lda #$40
sta render_screen_render
//SEG94 [38] phi (byte) render_screen_show#16 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@16->main::@1#16] -- vbuz1=vbuc1
lda #0
sta render_screen_show
jmp b1
//SEG95 [38] phi from main::@6 to main::@1 [phi:main::@6->main::@1]
b1_from_b6:
//SEG96 [38] phi (byte) level_bcd#11 = (byte) level_bcd#17 [phi:main::@6->main::@1#0] -- register_copy
//SEG97 [38] phi (byte) level#10 = (byte) level#17 [phi:main::@6->main::@1#1] -- register_copy
//SEG98 [38] phi (dword) score_bcd#18 = (dword) score_bcd#14 [phi:main::@6->main::@1#2] -- register_copy
//SEG99 [38] phi (word) lines_bcd#19 = (word) lines_bcd#15 [phi:main::@6->main::@1#3] -- register_copy
//SEG100 [38] phi (byte) current_movedown_counter#16 = (byte) current_movedown_counter#14 [phi:main::@6->main::@1#4] -- register_copy
//SEG101 [38] phi (byte) keyboard_events_size#19 = (byte) keyboard_events_size#16 [phi:main::@6->main::@1#5] -- register_copy
//SEG102 [38] phi (byte) next_piece_idx#10 = (byte) next_piece_idx#16 [phi:main::@6->main::@1#6] -- register_copy
//SEG103 [38] phi (byte) game_over#10 = (byte) game_over#15 [phi:main::@6->main::@1#7] -- register_copy
//SEG104 [38] phi (byte) current_ypos#100 = (byte) current_ypos#19 [phi:main::@6->main::@1#8] -- register_copy
//SEG105 [38] phi (byte) current_xpos#124 = (byte) current_xpos#19 [phi:main::@6->main::@1#9] -- register_copy
//SEG106 [38] phi (byte*) current_piece_gfx#114 = (byte*) current_piece_gfx#18 [phi:main::@6->main::@1#10] -- register_copy
//SEG107 [38] phi (byte) current_orientation#13 = (byte) current_orientation#17 [phi:main::@6->main::@1#11] -- register_copy
//SEG108 [38] phi (byte) current_piece_char#10 = (byte) current_piece_char#16 [phi:main::@6->main::@1#12] -- register_copy
//SEG109 [38] phi (byte*) current_piece#10 = (byte*) current_piece#15 [phi:main::@6->main::@1#13] -- register_copy
//SEG110 [38] phi (byte) current_movedown_slow#14 = (byte) current_movedown_slow#21 [phi:main::@6->main::@1#14] -- register_copy
jmp b1
//SEG111 main::@1
b1:
jmp b2
// Wait for a frame to pass
//SEG112 main::@2
b2:
//SEG113 [39] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) $ff) goto main::@2 -- _deref_pbuc1_neq_vbuc2_then_la1
lda #$ff
cmp RASTER
bne b2
//SEG114 [40] phi from main::@2 to main::@3 [phi:main::@2->main::@3]
b3_from_b2:
jmp b3
//SEG115 main::@3
b3:
//SEG116 [41] call render_show
jsr render_show
//SEG117 [42] phi from main::@3 to main::@17 [phi:main::@3->main::@17]
b17_from_b3:
jmp b17
//SEG118 main::@17
b17:
//SEG119 [43] call keyboard_event_scan
//SEG120 [388] phi from main::@17 to keyboard_event_scan [phi:main::@17->keyboard_event_scan]
keyboard_event_scan_from_b17:
jsr keyboard_event_scan
//SEG121 [44] phi from main::@17 to main::@18 [phi:main::@17->main::@18]
b18_from_b17:
jmp b18
//SEG122 main::@18
b18:
//SEG123 [45] call keyboard_event_get
jsr keyboard_event_get
//SEG124 [46] (byte) keyboard_event_get::return#3 ← (byte) keyboard_event_get::return#2 -- vbuz1=vbuz2
lda keyboard_event_get.return
sta keyboard_event_get.return_3
jmp b19
//SEG125 main::@19
b19:
//SEG126 [47] (byte) main::key_event#0 ← (byte) keyboard_event_get::return#3 -- vbuz1=vbuz2
lda keyboard_event_get.return_3
sta key_event
//SEG127 [48] if((byte) game_over#10==(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@4 -- vbuz1_eq_0_then_la1
lda game_over
cmp #0
beq b4
jmp b5
//SEG128 main::@5
b5:
//SEG129 [49] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_inc__deref_pbuc1
inc BORDERCOL
jmp b5
//SEG130 main::@4
b4:
//SEG131 [50] (byte) play_movement::key_event#0 ← (byte) main::key_event#0 -- vbuz1=vbuz2
lda key_event
sta play_movement.key_event
//SEG132 [51] call play_movement
jsr play_movement
//SEG133 [52] (byte) play_movement::return#3 ← (byte) play_movement::return#2 -- vbuz1=vbuz2
lda play_movement.return
sta play_movement.return_3
jmp b20
//SEG134 main::@20
b20:
//SEG135 [53] (byte) main::render#1 ← (byte) play_movement::return#3 -- vbuz1=vbuz2
lda play_movement.return_3
sta render
jmp b6
//SEG136 main::@6
b6:
//SEG137 [54] if((byte) main::render#1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@1 -- vbuz1_eq_0_then_la1
lda render
cmp #0
beq b1_from_b6
jmp b7
//SEG138 main::@7
b7:
//SEG139 [55] (byte~) render_screen_render#70 ← (byte) render_screen_render#18 -- vbuz1=vbuz2
lda render_screen_render
sta render_screen_render_70
//SEG140 [56] call render_playfield
//SEG141 [149] phi from main::@7 to render_playfield [phi:main::@7->render_playfield]
render_playfield_from_b7:
//SEG142 [149] phi (byte) render_screen_render#22 = (byte~) render_screen_render#70 [phi:main::@7->render_playfield#0] -- register_copy
jsr render_playfield
jmp b21
//SEG143 main::@21
b21:
//SEG144 [57] (byte~) current_ypos#107 ← (byte) current_ypos#19 -- vbuz1=vbuz2
lda current_ypos
sta current_ypos_107
//SEG145 [58] (byte~) render_screen_render#69 ← (byte) render_screen_render#18 -- vbuz1=vbuz2
lda render_screen_render
sta render_screen_render_69
//SEG146 [59] (byte~) current_xpos#131 ← (byte) current_xpos#19 -- vbuz1=vbuz2
lda current_xpos
sta current_xpos_131
//SEG147 [60] (byte*~) current_piece_gfx#121 ← (byte*) current_piece_gfx#18 -- pbuz1=pbuz2
lda current_piece_gfx
sta current_piece_gfx_121
lda current_piece_gfx+1
sta current_piece_gfx_121+1
//SEG148 [61] (byte~) current_piece_char#109 ← (byte) current_piece_char#16 -- vbuz1=vbuz2
lda current_piece_char
sta current_piece_char_109
//SEG149 [62] call render_moving
//SEG150 [128] phi from main::@21 to render_moving [phi:main::@21->render_moving]
render_moving_from_b21:
//SEG151 [128] phi (byte) current_piece_char#68 = (byte~) current_piece_char#109 [phi:main::@21->render_moving#0] -- register_copy
//SEG152 [128] phi (byte*) current_piece_gfx#64 = (byte*~) current_piece_gfx#121 [phi:main::@21->render_moving#1] -- register_copy
//SEG153 [128] phi (byte) current_xpos#59 = (byte~) current_xpos#131 [phi:main::@21->render_moving#2] -- register_copy
//SEG154 [128] phi (byte) render_screen_render#33 = (byte~) render_screen_render#69 [phi:main::@21->render_moving#3] -- register_copy
//SEG155 [128] phi (byte) current_ypos#13 = (byte~) current_ypos#107 [phi:main::@21->render_moving#4] -- register_copy
jsr render_moving
jmp b22
//SEG156 main::@22
b22:
//SEG157 [63] (byte~) render_screen_render#68 ← (byte) render_screen_render#18 -- vbuz1=vbuz2
lda render_screen_render
sta render_screen_render_68
//SEG158 [64] (byte~) next_piece_idx#85 ← (byte) next_piece_idx#16 -- vbuz1=vbuz2
lda next_piece_idx
sta next_piece_idx_85
//SEG159 [65] call render_next
//SEG160 [107] phi from main::@22 to render_next [phi:main::@22->render_next]
render_next_from_b22:
//SEG161 [107] phi (byte) next_piece_idx#12 = (byte~) next_piece_idx#85 [phi:main::@22->render_next#0] -- register_copy
//SEG162 [107] phi (byte) render_screen_render#15 = (byte~) render_screen_render#68 [phi:main::@22->render_next#1] -- register_copy
jsr render_next
//SEG163 [66] phi from main::@22 to main::@23 [phi:main::@22->main::@23]
b23_from_b22:
jmp b23
//SEG164 main::@23
b23:
//SEG165 [67] call render_score
jsr render_score
//SEG166 [68] phi from main::@23 to main::@24 [phi:main::@23->main::@24]
b24_from_b23:
jmp b24
//SEG167 main::@24
b24:
//SEG168 [69] call render_screen_swap
jsr render_screen_swap
//SEG169 [38] phi from main::@24 to main::@1 [phi:main::@24->main::@1]
b1_from_b24:
//SEG170 [38] phi (byte) level_bcd#11 = (byte) level_bcd#17 [phi:main::@24->main::@1#0] -- register_copy
//SEG171 [38] phi (byte) level#10 = (byte) level#17 [phi:main::@24->main::@1#1] -- register_copy
//SEG172 [38] phi (dword) score_bcd#18 = (dword) score_bcd#14 [phi:main::@24->main::@1#2] -- register_copy
//SEG173 [38] phi (word) lines_bcd#19 = (word) lines_bcd#15 [phi:main::@24->main::@1#3] -- register_copy
//SEG174 [38] phi (byte) current_movedown_counter#16 = (byte) current_movedown_counter#14 [phi:main::@24->main::@1#4] -- register_copy
//SEG175 [38] phi (byte) keyboard_events_size#19 = (byte) keyboard_events_size#16 [phi:main::@24->main::@1#5] -- register_copy
//SEG176 [38] phi (byte) next_piece_idx#10 = (byte) next_piece_idx#16 [phi:main::@24->main::@1#6] -- register_copy
//SEG177 [38] phi (byte) game_over#10 = (byte) game_over#15 [phi:main::@24->main::@1#7] -- register_copy
//SEG178 [38] phi (byte) current_ypos#100 = (byte) current_ypos#19 [phi:main::@24->main::@1#8] -- register_copy
//SEG179 [38] phi (byte) current_xpos#124 = (byte) current_xpos#19 [phi:main::@24->main::@1#9] -- register_copy
//SEG180 [38] phi (byte*) current_piece_gfx#114 = (byte*) current_piece_gfx#18 [phi:main::@24->main::@1#10] -- register_copy
//SEG181 [38] phi (byte) current_orientation#13 = (byte) current_orientation#17 [phi:main::@24->main::@1#11] -- register_copy
//SEG182 [38] phi (byte) current_piece_char#10 = (byte) current_piece_char#16 [phi:main::@24->main::@1#12] -- register_copy
//SEG183 [38] phi (byte*) current_piece#10 = (byte*) current_piece#15 [phi:main::@24->main::@1#13] -- register_copy
//SEG184 [38] phi (byte) current_movedown_slow#14 = (byte) current_movedown_slow#21 [phi:main::@24->main::@1#14] -- register_copy
//SEG185 [38] phi (byte) render_screen_render#18 = (byte) render_screen_render#11 [phi:main::@24->main::@1#15] -- register_copy
//SEG186 [38] phi (byte) render_screen_show#16 = (byte) render_screen_show#13 [phi:main::@24->main::@1#16] -- register_copy
jmp b1
}
//SEG187 render_screen_swap
// Swap rendering to the other screen (used for double buffering)
render_screen_swap: {
//SEG188 [70] (byte) render_screen_render#11 ← (byte) render_screen_render#18 ^ (byte/signed byte/word/signed word/dword/signed dword) $40 -- vbuz1=vbuz1_bxor_vbuc1
lda #$40
eor render_screen_render
sta render_screen_render
//SEG189 [71] (byte) render_screen_show#13 ← (byte) render_screen_show#16 ^ (byte/signed byte/word/signed word/dword/signed dword) $40 -- vbuz1=vbuz1_bxor_vbuc1
lda #$40
eor render_screen_show
sta render_screen_show
jmp breturn
//SEG190 render_screen_swap::@return
breturn:
//SEG191 [72] return
rts
}
//SEG192 render_score
// Show the current score
render_score: {
.label score_bytes = score_bcd
.const score_offset = $28*5+$1c
.const lines_offset = $28*1+$16
.const level_offset = $28*$13+$1f
.label screen = 5
//SEG193 [73] if((byte) render_screen_render#18==(byte/signed byte/word/signed word/dword/signed dword) 0) goto render_score::@1 -- vbuz1_eq_0_then_la1
lda render_screen_render
cmp #0
beq b1_from_render_score
//SEG194 [74] phi from render_score to render_score::@2 [phi:render_score->render_score::@2]
b2_from_render_score:
jmp b2
//SEG195 render_score::@2
b2:
//SEG196 [75] phi from render_score::@2 to render_score::@1 [phi:render_score::@2->render_score::@1]
b1_from_b2:
//SEG197 [75] phi (byte*) render_score::screen#3 = (const byte*) PLAYFIELD_SCREEN_2#0 [phi:render_score::@2->render_score::@1#0] -- pbuz1=pbuc1
lda #<PLAYFIELD_SCREEN_2
sta screen
lda #>PLAYFIELD_SCREEN_2
sta screen+1
jmp b1
//SEG198 [75] phi from render_score to render_score::@1 [phi:render_score->render_score::@1]
b1_from_render_score:
//SEG199 [75] phi (byte*) render_score::screen#3 = (const byte*) PLAYFIELD_SCREEN_1#0 [phi:render_score->render_score::@1#0] -- pbuz1=pbuc1
lda #<PLAYFIELD_SCREEN_1
sta screen
lda #>PLAYFIELD_SCREEN_1
sta screen+1
jmp b1
//SEG200 render_score::@1
b1:
//SEG201 [76] (byte*) render_bcd::screen#0 ← (byte*) render_score::screen#3 -- pbuz1=pbuz2
lda screen
sta render_bcd.screen
lda screen+1
sta render_bcd.screen+1
//SEG202 [77] (byte) render_bcd::bcd#0 ← *((const byte*) render_score::score_bytes#0+(byte/signed byte/word/signed word/dword/signed dword) 2) -- vbuz1=_deref_pbuc1
lda score_bytes+2
sta render_bcd.bcd
//SEG203 [78] call render_bcd
//SEG204 [95] phi from render_score::@1 to render_bcd [phi:render_score::@1->render_bcd]
render_bcd_from_b1:
//SEG205 [95] phi (byte) render_bcd::bcd#6 = (byte) render_bcd::bcd#0 [phi:render_score::@1->render_bcd#0] -- register_copy
//SEG206 [95] phi (byte) render_bcd::only_low#6 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render_score::@1->render_bcd#1] -- vbuz1=vbuc1
lda #0
sta render_bcd.only_low
//SEG207 [95] phi (word) render_bcd::offset#6 = (const word) render_score::score_offset#0 [phi:render_score::@1->render_bcd#2] -- vwuz1=vwuc1
lda #<score_offset
sta render_bcd.offset
lda #>score_offset
sta render_bcd.offset+1
//SEG208 [95] phi (byte*) render_bcd::screen#6 = (byte*) render_bcd::screen#0 [phi:render_score::@1->render_bcd#3] -- register_copy
jsr render_bcd
jmp b3
//SEG209 render_score::@3
b3:
//SEG210 [79] (byte*) render_bcd::screen#1 ← (byte*) render_score::screen#3 -- pbuz1=pbuz2
lda screen
sta render_bcd.screen
lda screen+1
sta render_bcd.screen+1
//SEG211 [80] (byte) render_bcd::bcd#1 ← *((const byte*) render_score::score_bytes#0+(byte/signed byte/word/signed word/dword/signed dword) 1) -- vbuz1=_deref_pbuc1
lda score_bytes+1
sta render_bcd.bcd
//SEG212 [81] call render_bcd
//SEG213 [95] phi from render_score::@3 to render_bcd [phi:render_score::@3->render_bcd]
render_bcd_from_b3:
//SEG214 [95] phi (byte) render_bcd::bcd#6 = (byte) render_bcd::bcd#1 [phi:render_score::@3->render_bcd#0] -- register_copy
//SEG215 [95] phi (byte) render_bcd::only_low#6 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render_score::@3->render_bcd#1] -- vbuz1=vbuc1
lda #0
sta render_bcd.only_low
//SEG216 [95] phi (word) render_bcd::offset#6 = (const word) render_score::score_offset#0+(byte/signed byte/word/signed word/dword/signed dword) 2 [phi:render_score::@3->render_bcd#2] -- vwuz1=vbuc1
lda #score_offset+2
sta render_bcd.offset
lda #0
sta render_bcd.offset+1
//SEG217 [95] phi (byte*) render_bcd::screen#6 = (byte*) render_bcd::screen#1 [phi:render_score::@3->render_bcd#3] -- register_copy
jsr render_bcd
jmp b4
//SEG218 render_score::@4
b4:
//SEG219 [82] (byte*) render_bcd::screen#2 ← (byte*) render_score::screen#3 -- pbuz1=pbuz2
lda screen
sta render_bcd.screen
lda screen+1
sta render_bcd.screen+1
//SEG220 [83] (byte) render_bcd::bcd#2 ← *((const byte*) render_score::score_bytes#0) -- vbuz1=_deref_pbuc1
lda score_bytes
sta render_bcd.bcd
//SEG221 [84] call render_bcd
//SEG222 [95] phi from render_score::@4 to render_bcd [phi:render_score::@4->render_bcd]
render_bcd_from_b4:
//SEG223 [95] phi (byte) render_bcd::bcd#6 = (byte) render_bcd::bcd#2 [phi:render_score::@4->render_bcd#0] -- register_copy
//SEG224 [95] phi (byte) render_bcd::only_low#6 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render_score::@4->render_bcd#1] -- vbuz1=vbuc1
lda #0
sta render_bcd.only_low
//SEG225 [95] phi (word) render_bcd::offset#6 = (const word) render_score::score_offset#0+(byte/signed byte/word/signed word/dword/signed dword) 4 [phi:render_score::@4->render_bcd#2] -- vwuz1=vbuc1
lda #score_offset+4
sta render_bcd.offset
lda #0
sta render_bcd.offset+1
//SEG226 [95] phi (byte*) render_bcd::screen#6 = (byte*) render_bcd::screen#2 [phi:render_score::@4->render_bcd#3] -- register_copy
jsr render_bcd
jmp b5
//SEG227 render_score::@5
b5:
//SEG228 [85] (byte) render_bcd::bcd#3 ← > (word) lines_bcd#15 -- vbuz1=_hi_vwuz2
lda lines_bcd+1
sta render_bcd.bcd
//SEG229 [86] (byte*) render_bcd::screen#3 ← (byte*) render_score::screen#3 -- pbuz1=pbuz2
lda screen
sta render_bcd.screen
lda screen+1
sta render_bcd.screen+1
//SEG230 [87] call render_bcd
//SEG231 [95] phi from render_score::@5 to render_bcd [phi:render_score::@5->render_bcd]
render_bcd_from_b5:
//SEG232 [95] phi (byte) render_bcd::bcd#6 = (byte) render_bcd::bcd#3 [phi:render_score::@5->render_bcd#0] -- register_copy
//SEG233 [95] phi (byte) render_bcd::only_low#6 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:render_score::@5->render_bcd#1] -- vbuz1=vbuc1
lda #1
sta render_bcd.only_low
//SEG234 [95] phi (word) render_bcd::offset#6 = (const word) render_score::lines_offset#0 [phi:render_score::@5->render_bcd#2] -- vwuz1=vwuc1
lda #<lines_offset
sta render_bcd.offset
lda #>lines_offset
sta render_bcd.offset+1
//SEG235 [95] phi (byte*) render_bcd::screen#6 = (byte*) render_bcd::screen#3 [phi:render_score::@5->render_bcd#3] -- register_copy
jsr render_bcd
jmp b6
//SEG236 render_score::@6
b6:
//SEG237 [88] (byte) render_bcd::bcd#4 ← < (word) lines_bcd#15 -- vbuz1=_lo_vwuz2
lda lines_bcd
sta render_bcd.bcd
//SEG238 [89] (byte*) render_bcd::screen#4 ← (byte*) render_score::screen#3 -- pbuz1=pbuz2
lda screen
sta render_bcd.screen
lda screen+1
sta render_bcd.screen+1
//SEG239 [90] call render_bcd
//SEG240 [95] phi from render_score::@6 to render_bcd [phi:render_score::@6->render_bcd]
render_bcd_from_b6:
//SEG241 [95] phi (byte) render_bcd::bcd#6 = (byte) render_bcd::bcd#4 [phi:render_score::@6->render_bcd#0] -- register_copy
//SEG242 [95] phi (byte) render_bcd::only_low#6 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render_score::@6->render_bcd#1] -- vbuz1=vbuc1
lda #0
sta render_bcd.only_low
//SEG243 [95] phi (word) render_bcd::offset#6 = (const word) render_score::lines_offset#0+(byte/signed byte/word/signed word/dword/signed dword) 1 [phi:render_score::@6->render_bcd#2] -- vwuz1=vbuc1
lda #lines_offset+1
sta render_bcd.offset
lda #0
sta render_bcd.offset+1
//SEG244 [95] phi (byte*) render_bcd::screen#6 = (byte*) render_bcd::screen#4 [phi:render_score::@6->render_bcd#3] -- register_copy
jsr render_bcd
jmp b7
//SEG245 render_score::@7
b7:
//SEG246 [91] (byte*) render_bcd::screen#5 ← (byte*) render_score::screen#3 -- pbuz1=pbuz2
lda screen
sta render_bcd.screen
lda screen+1
sta render_bcd.screen+1
//SEG247 [92] (byte) render_bcd::bcd#5 ← (byte) level_bcd#17 -- vbuz1=vbuz2
lda level_bcd
sta render_bcd.bcd
//SEG248 [93] call render_bcd
//SEG249 [95] phi from render_score::@7 to render_bcd [phi:render_score::@7->render_bcd]
render_bcd_from_b7:
//SEG250 [95] phi (byte) render_bcd::bcd#6 = (byte) render_bcd::bcd#5 [phi:render_score::@7->render_bcd#0] -- register_copy
//SEG251 [95] phi (byte) render_bcd::only_low#6 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render_score::@7->render_bcd#1] -- vbuz1=vbuc1
lda #0
sta render_bcd.only_low
//SEG252 [95] phi (word) render_bcd::offset#6 = (const word) render_score::level_offset#0 [phi:render_score::@7->render_bcd#2] -- vwuz1=vwuc1
lda #<level_offset
sta render_bcd.offset
lda #>level_offset
sta render_bcd.offset+1
//SEG253 [95] phi (byte*) render_bcd::screen#6 = (byte*) render_bcd::screen#5 [phi:render_score::@7->render_bcd#3] -- register_copy
jsr render_bcd
jmp breturn
//SEG254 render_score::@return
breturn:
//SEG255 [94] return
rts
}
//SEG256 render_bcd
// Render BCD digits on a screen.
// - screen: pointer to the screen to render on
// - offset: offset on the screen
// - bcd: The BCD-value to render
// - only_low: if non-zero only renders the low digit
// render_bcd(byte* zeropage(7) screen, word zeropage(9) offset, byte zeropage($c) bcd, byte zeropage($b) only_low)
render_bcd: {
.const ZERO_CHAR = $35
.label _3 = $82
.label _4 = $83
.label _5 = $80
.label _6 = $81
.label screen = 7
.label bcd = $c
.label screen_pos = $d
.label offset = 9
.label only_low = $b
//SEG257 [96] (byte*) render_bcd::screen_pos#0 ← (byte*) render_bcd::screen#6 + (word) render_bcd::offset#6 -- pbuz1=pbuz2_plus_vwuz3
lda screen
clc
adc offset
sta screen_pos
lda screen+1
adc offset+1
sta screen_pos+1
//SEG258 [97] if((byte) render_bcd::only_low#6!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto render_bcd::@1 -- vbuz1_neq_0_then_la1
lda only_low
cmp #0
bne b1_from_render_bcd
jmp b2
//SEG259 render_bcd::@2
b2:
//SEG260 [98] (byte~) render_bcd::$5 ← (byte) render_bcd::bcd#6 >> (byte/signed byte/word/signed word/dword/signed dword) 4 -- vbuz1=vbuz2_ror_4
lda bcd
lsr
lsr
lsr
lsr
sta _5
//SEG261 [99] (byte~) render_bcd::$6 ← (const byte) render_bcd::ZERO_CHAR#0 + (byte~) render_bcd::$5 -- vbuz1=vbuc1_plus_vbuz2
lax _5
axs #-[ZERO_CHAR]
stx _6
//SEG262 [100] *((byte*) render_bcd::screen_pos#0) ← (byte~) render_bcd::$6 -- _deref_pbuz1=vbuz2
lda _6
ldy #0
sta (screen_pos),y
//SEG263 [101] (byte*) render_bcd::screen_pos#2 ← ++ (byte*) render_bcd::screen_pos#0 -- pbuz1=_inc_pbuz1
inc screen_pos
bne !+
inc screen_pos+1
!:
//SEG264 [102] phi from render_bcd render_bcd::@2 to render_bcd::@1 [phi:render_bcd/render_bcd::@2->render_bcd::@1]
b1_from_render_bcd:
b1_from_b2:
//SEG265 [102] phi (byte*) render_bcd::screen_pos#3 = (byte*) render_bcd::screen_pos#0 [phi:render_bcd/render_bcd::@2->render_bcd::@1#0] -- register_copy
jmp b1
//SEG266 render_bcd::@1
b1:
//SEG267 [103] (byte~) render_bcd::$3 ← (byte) render_bcd::bcd#6 & (byte/signed byte/word/signed word/dword/signed dword) $f -- vbuz1=vbuz2_band_vbuc1
lda #$f
and bcd
sta _3
//SEG268 [104] (byte~) render_bcd::$4 ← (const byte) render_bcd::ZERO_CHAR#0 + (byte~) render_bcd::$3 -- vbuz1=vbuc1_plus_vbuz2
lax _3
axs #-[ZERO_CHAR]
stx _4
//SEG269 [105] *((byte*) render_bcd::screen_pos#3) ← (byte~) render_bcd::$4 -- _deref_pbuz1=vbuz2
lda _4
ldy #0
sta (screen_pos),y
jmp breturn
//SEG270 render_bcd::@return
breturn:
//SEG271 [106] return
rts
}
//SEG272 render_next
// Render the next tetromino in the "next" area
render_next: {
.const next_area_offset = $28*$c+$18+4
.label _4 = $84
.label next_piece_char = $85
.label cell = $86
.label next_piece_gfx = $12
.label screen_next_area = $14
.label c = $16
.label l = $11
//SEG273 [108] if((byte) render_screen_render#15==(byte/signed byte/word/signed word/dword/signed dword) 0) goto render_next::@1 -- vbuz1_eq_0_then_la1
lda render_screen_render_15
cmp #0
beq b1_from_render_next
//SEG274 [109] phi from render_next to render_next::@2 [phi:render_next->render_next::@2]
b2_from_render_next:
jmp b2
//SEG275 render_next::@2
b2:
//SEG276 [110] phi from render_next::@2 to render_next::@1 [phi:render_next::@2->render_next::@1]
b1_from_b2:
//SEG277 [110] phi (byte*) render_next::screen_next_area#11 = (const byte*) PLAYFIELD_SCREEN_2#0+(const word) render_next::next_area_offset#0 [phi:render_next::@2->render_next::@1#0] -- pbuz1=pbuc1
lda #<PLAYFIELD_SCREEN_2+next_area_offset
sta screen_next_area
lda #>PLAYFIELD_SCREEN_2+next_area_offset
sta screen_next_area+1
jmp b1
//SEG278 [110] phi from render_next to render_next::@1 [phi:render_next->render_next::@1]
b1_from_render_next:
//SEG279 [110] phi (byte*) render_next::screen_next_area#11 = (const byte*) PLAYFIELD_SCREEN_1#0+(const word) render_next::next_area_offset#0 [phi:render_next->render_next::@1#0] -- pbuz1=pbuc1
lda #<PLAYFIELD_SCREEN_1+next_area_offset
sta screen_next_area
lda #>PLAYFIELD_SCREEN_1+next_area_offset
sta screen_next_area+1
jmp b1
//SEG280 render_next::@1
b1:
//SEG281 [111] (byte~) render_next::$4 ← (byte) next_piece_idx#12 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuz1=vbuz2_rol_1
lda next_piece_idx_12
asl
sta _4
//SEG282 [112] (byte) render_next::next_piece_char#0 ← *((const byte[]) PIECES_NEXT_CHARS#0 + (byte) next_piece_idx#12) -- vbuz1=pbuc1_derefidx_vbuz2
ldy next_piece_idx_12
lda PIECES_NEXT_CHARS,y
sta next_piece_char
//SEG283 [113] (byte*~) render_next::next_piece_gfx#9 ← (byte*)*((const word[]) PIECES#0 + (byte~) render_next::$4) -- pbuz1=pptc1_derefidx_vbuz2
ldy _4
lda PIECES,y
sta next_piece_gfx
lda PIECES+1,y
sta next_piece_gfx+1
//SEG284 [114] phi from render_next::@1 to render_next::@3 [phi:render_next::@1->render_next::@3]
b3_from_b1:
//SEG285 [114] phi (byte) render_next::l#7 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render_next::@1->render_next::@3#0] -- vbuz1=vbuc1
lda #0
sta l
//SEG286 [114] phi (byte*) render_next::screen_next_area#10 = (byte*) render_next::screen_next_area#11 [phi:render_next::@1->render_next::@3#1] -- register_copy
//SEG287 [114] phi (byte*) render_next::next_piece_gfx#3 = (byte*~) render_next::next_piece_gfx#9 [phi:render_next::@1->render_next::@3#2] -- register_copy
jmp b3
//SEG288 [114] phi from render_next::@8 to render_next::@3 [phi:render_next::@8->render_next::@3]
b3_from_b8:
//SEG289 [114] phi (byte) render_next::l#7 = (byte) render_next::l#1 [phi:render_next::@8->render_next::@3#0] -- register_copy
//SEG290 [114] phi (byte*) render_next::screen_next_area#10 = (byte*) render_next::screen_next_area#4 [phi:render_next::@8->render_next::@3#1] -- register_copy
//SEG291 [114] phi (byte*) render_next::next_piece_gfx#3 = (byte*) render_next::next_piece_gfx#1 [phi:render_next::@8->render_next::@3#2] -- register_copy
jmp b3
//SEG292 render_next::@3
b3:
//SEG293 [115] phi from render_next::@3 to render_next::@4 [phi:render_next::@3->render_next::@4]
b4_from_b3:
//SEG294 [115] phi (byte) render_next::c#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render_next::@3->render_next::@4#0] -- vbuz1=vbuc1
lda #0
sta c
//SEG295 [115] phi (byte*) render_next::screen_next_area#5 = (byte*) render_next::screen_next_area#10 [phi:render_next::@3->render_next::@4#1] -- register_copy
//SEG296 [115] phi (byte*) render_next::next_piece_gfx#2 = (byte*) render_next::next_piece_gfx#3 [phi:render_next::@3->render_next::@4#2] -- register_copy
jmp b4
//SEG297 [115] phi from render_next::@6 to render_next::@4 [phi:render_next::@6->render_next::@4]
b4_from_b6:
//SEG298 [115] phi (byte) render_next::c#2 = (byte) render_next::c#1 [phi:render_next::@6->render_next::@4#0] -- register_copy
//SEG299 [115] phi (byte*) render_next::screen_next_area#5 = (byte*) render_next::screen_next_area#3 [phi:render_next::@6->render_next::@4#1] -- register_copy
//SEG300 [115] phi (byte*) render_next::next_piece_gfx#2 = (byte*) render_next::next_piece_gfx#1 [phi:render_next::@6->render_next::@4#2] -- register_copy
jmp b4
//SEG301 render_next::@4
b4:
//SEG302 [116] (byte) render_next::cell#0 ← *((byte*) render_next::next_piece_gfx#2) -- vbuz1=_deref_pbuz2
ldy #0
lda (next_piece_gfx),y
sta cell
//SEG303 [117] (byte*) render_next::next_piece_gfx#1 ← ++ (byte*) render_next::next_piece_gfx#2 -- pbuz1=_inc_pbuz1
inc next_piece_gfx
bne !+
inc next_piece_gfx+1
!:
//SEG304 [118] if((byte) render_next::cell#0!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto render_next::@5 -- vbuz1_neq_0_then_la1
lda cell
cmp #0
bne b5
jmp b7
//SEG305 render_next::@7
b7:
//SEG306 [119] *((byte*) render_next::screen_next_area#5) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- _deref_pbuz1=vbuc1
lda #0
ldy #0
sta (screen_next_area),y
jmp b6
//SEG307 render_next::@6
b6:
//SEG308 [120] (byte*) render_next::screen_next_area#3 ← ++ (byte*) render_next::screen_next_area#5 -- pbuz1=_inc_pbuz1
inc screen_next_area
bne !+
inc screen_next_area+1
!:
//SEG309 [121] (byte) render_next::c#1 ← ++ (byte) render_next::c#2 -- vbuz1=_inc_vbuz1
inc c
//SEG310 [122] if((byte) render_next::c#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto render_next::@4 -- vbuz1_neq_vbuc1_then_la1
lda #4
cmp c
bne b4_from_b6
jmp b8
//SEG311 render_next::@8
b8:
//SEG312 [123] (byte*) render_next::screen_next_area#4 ← (byte*) render_next::screen_next_area#3 + (byte/signed byte/word/signed word/dword/signed dword) $24 -- pbuz1=pbuz1_plus_vbuc1
lda #$24
clc
adc screen_next_area
sta screen_next_area
bcc !+
inc screen_next_area+1
!:
//SEG313 [124] (byte) render_next::l#1 ← ++ (byte) render_next::l#7 -- vbuz1=_inc_vbuz1
inc l
//SEG314 [125] if((byte) render_next::l#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto render_next::@3 -- vbuz1_neq_vbuc1_then_la1
lda #4
cmp l
bne b3_from_b8
jmp breturn
//SEG315 render_next::@return
breturn:
//SEG316 [126] return
rts
//SEG317 render_next::@5
b5:
//SEG318 [127] *((byte*) render_next::screen_next_area#5) ← (byte) render_next::next_piece_char#0 -- _deref_pbuz1=vbuz2
lda next_piece_char
ldy #0
sta (screen_next_area),y
jmp b6
}
//SEG319 render_moving
// Render the current moving piece at position (current_xpos, current_ypos)
// Ignores cases where parts of the tetromino is outside the playfield (sides/bottom) since the movement collision routine prevents this.
render_moving: {
.label _2 = $87
.label ypos2 = $1d
.label screen_line = $88
.label xpos = $20
.label i = $1f
.label l = $1e
.label current_cell = $8a
.label c = $21
//SEG320 [129] (byte) render_moving::ypos2#0 ← (byte) current_ypos#13 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuz1=vbuz2_rol_1
lda current_ypos_13
asl
sta ypos2
//SEG321 [130] phi from render_moving to render_moving::@1 [phi:render_moving->render_moving::@1]
b1_from_render_moving:
//SEG322 [130] phi (byte) render_moving::l#4 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render_moving->render_moving::@1#0] -- vbuz1=vbuc1
lda #0
sta l
//SEG323 [130] phi (byte) render_moving::i#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render_moving->render_moving::@1#1] -- vbuz1=vbuc1
lda #0
sta i
//SEG324 [130] phi (byte) render_moving::ypos2#2 = (byte) render_moving::ypos2#0 [phi:render_moving->render_moving::@1#2] -- register_copy
jmp b1
//SEG325 [130] phi from render_moving::@3 to render_moving::@1 [phi:render_moving::@3->render_moving::@1]
b1_from_b3:
//SEG326 [130] phi (byte) render_moving::l#4 = (byte) render_moving::l#1 [phi:render_moving::@3->render_moving::@1#0] -- register_copy
//SEG327 [130] phi (byte) render_moving::i#3 = (byte) render_moving::i#8 [phi:render_moving::@3->render_moving::@1#1] -- register_copy
//SEG328 [130] phi (byte) render_moving::ypos2#2 = (byte) render_moving::ypos2#1 [phi:render_moving::@3->render_moving::@1#2] -- register_copy
jmp b1
//SEG329 render_moving::@1
b1:
//SEG330 [131] if((byte) render_moving::ypos2#2>=(byte/signed byte/word/signed word/dword/signed dword) 2+(byte/signed byte/word/signed word/dword/signed dword) 1) goto render_moving::@2 -- vbuz1_ge_vbuc1_then_la1
lda ypos2
cmp #2+1
bcs b2
jmp b7
//SEG331 render_moving::@7
b7:
//SEG332 [132] (byte) render_moving::i#1 ← (byte) render_moving::i#3 + (byte/signed byte/word/signed word/dword/signed dword) 4 -- vbuz1=vbuz1_plus_vbuc1
lax i
axs #-[4]
stx i
//SEG333 [133] phi from render_moving::@5 render_moving::@7 to render_moving::@3 [phi:render_moving::@5/render_moving::@7->render_moving::@3]
b3_from_b5:
b3_from_b7:
//SEG334 [133] phi (byte) render_moving::i#8 = (byte) render_moving::i#2 [phi:render_moving::@5/render_moving::@7->render_moving::@3#0] -- register_copy
jmp b3
//SEG335 render_moving::@3
b3:
//SEG336 [134] (byte) render_moving::ypos2#1 ← (byte) render_moving::ypos2#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 -- vbuz1=vbuz1_plus_2
lda ypos2
clc
adc #2
sta ypos2
//SEG337 [135] (byte) render_moving::l#1 ← ++ (byte) render_moving::l#4 -- vbuz1=_inc_vbuz1
inc l
//SEG338 [136] if((byte) render_moving::l#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto render_moving::@1 -- vbuz1_neq_vbuc1_then_la1
lda #4
cmp l
bne b1_from_b3
jmp breturn
//SEG339 render_moving::@return
breturn:
//SEG340 [137] return
rts
//SEG341 render_moving::@2
b2:
//SEG342 [138] (byte~) render_moving::$2 ← (byte) render_screen_render#33 + (byte) render_moving::ypos2#2 -- vbuz1=vbuz2_plus_vbuz3
lda render_screen_render_33
clc
adc ypos2
sta _2
//SEG343 [139] (byte*) render_moving::screen_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_moving::$2) -- pbuz1=pptc1_derefidx_vbuz2
ldy _2
lda screen_lines_1,y
sta screen_line
lda screen_lines_1+1,y
sta screen_line+1
//SEG344 [140] (byte) render_moving::xpos#0 ← (byte) current_xpos#59 -- vbuz1=vbuz2
lda current_xpos_59
sta xpos
//SEG345 [141] phi from render_moving::@2 to render_moving::@4 [phi:render_moving::@2->render_moving::@4]
b4_from_b2:
//SEG346 [141] phi (byte) render_moving::c#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render_moving::@2->render_moving::@4#0] -- vbuz1=vbuc1
lda #0
sta c
//SEG347 [141] phi (byte) render_moving::xpos#2 = (byte) render_moving::xpos#0 [phi:render_moving::@2->render_moving::@4#1] -- register_copy
//SEG348 [141] phi (byte) render_moving::i#4 = (byte) render_moving::i#3 [phi:render_moving::@2->render_moving::@4#2] -- register_copy
jmp b4
//SEG349 [141] phi from render_moving::@5 to render_moving::@4 [phi:render_moving::@5->render_moving::@4]
b4_from_b5:
//SEG350 [141] phi (byte) render_moving::c#2 = (byte) render_moving::c#1 [phi:render_moving::@5->render_moving::@4#0] -- register_copy
//SEG351 [141] phi (byte) render_moving::xpos#2 = (byte) render_moving::xpos#1 [phi:render_moving::@5->render_moving::@4#1] -- register_copy
//SEG352 [141] phi (byte) render_moving::i#4 = (byte) render_moving::i#2 [phi:render_moving::@5->render_moving::@4#2] -- register_copy
jmp b4
//SEG353 render_moving::@4
b4:
//SEG354 [142] (byte) render_moving::current_cell#0 ← *((byte*) current_piece_gfx#64 + (byte) render_moving::i#4) -- vbuz1=pbuz2_derefidx_vbuz3
ldy i
lda (current_piece_gfx_64),y
sta current_cell
//SEG355 [143] (byte) render_moving::i#2 ← ++ (byte) render_moving::i#4 -- vbuz1=_inc_vbuz1
inc i
//SEG356 [144] if((byte) render_moving::current_cell#0==(byte/signed byte/word/signed word/dword/signed dword) 0) goto render_moving::@5 -- vbuz1_eq_0_then_la1
lda current_cell
cmp #0
beq b5
jmp b6
//SEG357 render_moving::@6
b6:
//SEG358 [145] *((byte*) render_moving::screen_line#0 + (byte) render_moving::xpos#2) ← (byte) current_piece_char#68 -- pbuz1_derefidx_vbuz2=vbuz3
lda current_piece_char_68
ldy xpos
sta (screen_line),y
jmp b5
//SEG359 render_moving::@5
b5:
//SEG360 [146] (byte) render_moving::xpos#1 ← ++ (byte) render_moving::xpos#2 -- vbuz1=_inc_vbuz1
inc xpos
//SEG361 [147] (byte) render_moving::c#1 ← ++ (byte) render_moving::c#2 -- vbuz1=_inc_vbuz1
inc c
//SEG362 [148] if((byte) render_moving::c#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto render_moving::@4 -- vbuz1_neq_vbuc1_then_la1
lda #4
cmp c
bne b4_from_b5
jmp b3_from_b5
}
//SEG363 render_playfield
// Render the static playfield on the screen (all pieces already locked into place)
render_playfield: {
.label _2 = $8b
.label _3 = $8c
.label screen_line = $25
.label i = $24
.label c = $27
.label l = $23
//SEG364 [150] phi from render_playfield to render_playfield::@1 [phi:render_playfield->render_playfield::@1]
b1_from_render_playfield:
//SEG365 [150] phi (byte) render_playfield::i#3 = (const byte) PLAYFIELD_COLS#0*(byte/signed byte/word/signed word/dword/signed dword) 2 [phi:render_playfield->render_playfield::@1#0] -- vbuz1=vbuc1
lda #PLAYFIELD_COLS*2
sta i
//SEG366 [150] phi (byte) render_playfield::l#2 = (byte/signed byte/word/signed word/dword/signed dword) 2 [phi:render_playfield->render_playfield::@1#1] -- vbuz1=vbuc1
lda #2
sta l
jmp b1
//SEG367 [150] phi from render_playfield::@3 to render_playfield::@1 [phi:render_playfield::@3->render_playfield::@1]
b1_from_b3:
//SEG368 [150] phi (byte) render_playfield::i#3 = (byte) render_playfield::i#1 [phi:render_playfield::@3->render_playfield::@1#0] -- register_copy
//SEG369 [150] phi (byte) render_playfield::l#2 = (byte) render_playfield::l#1 [phi:render_playfield::@3->render_playfield::@1#1] -- register_copy
jmp b1
//SEG370 render_playfield::@1
b1:
//SEG371 [151] (byte~) render_playfield::$2 ← (byte) render_playfield::l#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuz1=vbuz2_rol_1
lda l
asl
sta _2
//SEG372 [152] (byte~) render_playfield::$3 ← (byte) render_screen_render#22 + (byte~) render_playfield::$2 -- vbuz1=vbuz2_plus_vbuz3
lda render_screen_render_22
clc
adc _2
sta _3
//SEG373 [153] (byte*) render_playfield::screen_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_playfield::$3) -- pbuz1=pptc1_derefidx_vbuz2
ldy _3
lda screen_lines_1,y
sta screen_line
lda screen_lines_1+1,y
sta screen_line+1
//SEG374 [154] phi from render_playfield::@1 to render_playfield::@2 [phi:render_playfield::@1->render_playfield::@2]
b2_from_b1:
//SEG375 [154] phi (byte) render_playfield::c#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render_playfield::@1->render_playfield::@2#0] -- vbuz1=vbuc1
lda #0
sta c
//SEG376 [154] phi (byte*) render_playfield::screen_line#2 = (byte*) render_playfield::screen_line#0 [phi:render_playfield::@1->render_playfield::@2#1] -- register_copy
//SEG377 [154] phi (byte) render_playfield::i#2 = (byte) render_playfield::i#3 [phi:render_playfield::@1->render_playfield::@2#2] -- register_copy
jmp b2
//SEG378 [154] phi from render_playfield::@2 to render_playfield::@2 [phi:render_playfield::@2->render_playfield::@2]
b2_from_b2:
//SEG379 [154] phi (byte) render_playfield::c#2 = (byte) render_playfield::c#1 [phi:render_playfield::@2->render_playfield::@2#0] -- register_copy
//SEG380 [154] phi (byte*) render_playfield::screen_line#2 = (byte*) render_playfield::screen_line#1 [phi:render_playfield::@2->render_playfield::@2#1] -- register_copy
//SEG381 [154] phi (byte) render_playfield::i#2 = (byte) render_playfield::i#1 [phi:render_playfield::@2->render_playfield::@2#2] -- register_copy
jmp b2
//SEG382 render_playfield::@2
b2:
//SEG383 [155] *((byte*) render_playfield::screen_line#2) ← *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) render_playfield::i#2) -- _deref_pbuz1=pbuc1_derefidx_vbuz2
ldy i
lda playfield,y
ldy #0
sta (screen_line),y
//SEG384 [156] (byte*) render_playfield::screen_line#1 ← ++ (byte*) render_playfield::screen_line#2 -- pbuz1=_inc_pbuz1
inc screen_line
bne !+
inc screen_line+1
!:
//SEG385 [157] (byte) render_playfield::i#1 ← ++ (byte) render_playfield::i#2 -- vbuz1=_inc_vbuz1
inc i
//SEG386 [158] (byte) render_playfield::c#1 ← ++ (byte) render_playfield::c#2 -- vbuz1=_inc_vbuz1
inc c
//SEG387 [159] if((byte) render_playfield::c#1!=(const byte) PLAYFIELD_COLS#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto render_playfield::@2 -- vbuz1_neq_vbuc1_then_la1
lda #PLAYFIELD_COLS-1+1
cmp c
bne b2_from_b2
jmp b3
//SEG388 render_playfield::@3
b3:
//SEG389 [160] (byte) render_playfield::l#1 ← ++ (byte) render_playfield::l#2 -- vbuz1=_inc_vbuz1
inc l
//SEG390 [161] if((byte) render_playfield::l#1!=(const byte) PLAYFIELD_LINES#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto render_playfield::@1 -- vbuz1_neq_vbuc1_then_la1
lda #PLAYFIELD_LINES-1+1
cmp l
bne b1_from_b3
jmp breturn
//SEG391 render_playfield::@return
breturn:
//SEG392 [162] return
rts
}
//SEG393 play_movement
// Perform any movement of the current piece
// key_event is the next keyboard_event() og $ff if no keyboard event is pending
// Returns a byte signaling whether rendering is needed. (0 no render, >0 render needed)
// play_movement(byte zeropage($7d) key_event)
play_movement: {
.label _3 = $91
.label _4 = $95
.label render = $28
.label render_2 = $92
.label return = $28
.label key_event = $7d
.label return_3 = $7e
//SEG394 [163] (byte) play_move_down::key_event#0 ← (byte) play_movement::key_event#0 -- vbuz1=vbuz2
lda key_event
sta play_move_down.key_event
//SEG395 [164] call play_move_down
jsr play_move_down
//SEG396 [165] (byte) play_move_down::return#0 ← (byte) play_move_down::return#3 -- vbuz1=vbuz2
lda play_move_down.return_3
sta play_move_down.return
jmp b2
//SEG397 play_movement::@2
b2:
//SEG398 [166] (byte) play_movement::render#1 ← (byte) play_move_down::return#0 -- vbuz1=vbuz2
lda play_move_down.return
sta render
//SEG399 [167] if((byte) game_over#15==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_movement::@1 -- vbuz1_eq_0_then_la1
lda game_over
cmp #0
beq b1
//SEG400 [168] phi from play_movement::@2 play_movement::@4 to play_movement::@return [phi:play_movement::@2/play_movement::@4->play_movement::@return]
breturn_from_b2:
breturn_from_b4:
//SEG401 [168] phi (byte) current_xpos#19 = (byte) current_xpos#22 [phi:play_movement::@2/play_movement::@4->play_movement::@return#0] -- register_copy
//SEG402 [168] phi (byte*) current_piece_gfx#18 = (byte*) current_piece_gfx#20 [phi:play_movement::@2/play_movement::@4->play_movement::@return#1] -- register_copy
//SEG403 [168] phi (byte) current_orientation#17 = (byte) current_orientation#20 [phi:play_movement::@2/play_movement::@4->play_movement::@return#2] -- register_copy
//SEG404 [168] phi (byte) play_movement::return#2 = (byte) play_movement::render#1 [phi:play_movement::@2/play_movement::@4->play_movement::@return#3] -- register_copy
jmp breturn
//SEG405 play_movement::@return
breturn:
//SEG406 [169] return
rts
//SEG407 play_movement::@1
b1:
//SEG408 [170] (byte) play_move_leftright::key_event#0 ← (byte) play_movement::key_event#0 -- vbuz1=vbuz2
lda key_event
sta play_move_leftright.key_event
//SEG409 [171] call play_move_leftright
jsr play_move_leftright
//SEG410 [172] (byte) play_move_leftright::return#0 ← (byte) play_move_leftright::return#2 -- vbuz1=vbuz2
lda play_move_leftright.return_2
sta play_move_leftright.return
jmp b3
//SEG411 play_movement::@3
b3:
//SEG412 [173] (byte~) play_movement::$3 ← (byte) play_move_leftright::return#0 -- vbuz1=vbuz2
lda play_move_leftright.return
sta _3
//SEG413 [174] (byte) play_movement::render#2 ← (byte) play_movement::render#1 + (byte~) play_movement::$3 -- vbuz1=vbuz2_plus_vbuz3
lda render
clc
adc _3
sta render_2
//SEG414 [175] (byte) play_move_rotate::key_event#0 ← (byte) play_movement::key_event#0 -- vbuz1=vbuz2
lda key_event
sta play_move_rotate.key_event
//SEG415 [176] call play_move_rotate
jsr play_move_rotate
//SEG416 [177] (byte) play_move_rotate::return#0 ← (byte) play_move_rotate::return#2 -- vbuz1=vbuz2
lda play_move_rotate.return_2
sta play_move_rotate.return
jmp b4
//SEG417 play_movement::@4
b4:
//SEG418 [178] (byte~) play_movement::$4 ← (byte) play_move_rotate::return#0 -- vbuz1=vbuz2
lda play_move_rotate.return
sta _4
//SEG419 [179] (byte) play_movement::return#0 ← (byte) play_movement::render#2 + (byte~) play_movement::$4 -- vbuz1=vbuz2_plus_vbuz3
lda render_2
clc
adc _4
sta return
jmp breturn_from_b4
}
//SEG420 play_move_rotate
// Rotate the current piece based on key-presses
// Return non-zero if a render is needed
// play_move_rotate(byte zeropage($93) key_event)
play_move_rotate: {
.label _2 = $98
.label _5 = $96
.label _7 = $99
.label key_event = $93
.label return = $94
.label orientation = $2a
.label return_2 = $29
//SEG421 [180] if((byte) play_move_rotate::key_event#0==(const byte) KEY_Z#0) goto play_move_rotate::@1 -- vbuz1_eq_vbuc1_then_la1
lda #KEY_Z
cmp key_event
beq b1
jmp b4
//SEG422 play_move_rotate::@4
b4:
//SEG423 [181] if((byte) play_move_rotate::key_event#0==(const byte) KEY_X#0) goto play_move_rotate::@2 -- vbuz1_eq_vbuc1_then_la1
lda #KEY_X
cmp key_event
beq b2
//SEG424 [182] phi from play_move_rotate::@4 play_move_rotate::@6 to play_move_rotate::@return [phi:play_move_rotate::@4/play_move_rotate::@6->play_move_rotate::@return]
breturn_from_b4:
breturn_from_b6:
//SEG425 [182] phi (byte*) current_piece_gfx#21 = (byte*) current_piece_gfx#20 [phi:play_move_rotate::@4/play_move_rotate::@6->play_move_rotate::@return#0] -- register_copy
//SEG426 [182] phi (byte) current_orientation#25 = (byte) current_orientation#20 [phi:play_move_rotate::@4/play_move_rotate::@6->play_move_rotate::@return#1] -- register_copy
//SEG427 [182] phi (byte) play_move_rotate::return#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_move_rotate::@4/play_move_rotate::@6->play_move_rotate::@return#2] -- vbuz1=vbuc1
lda #0
sta return_2
jmp breturn
//SEG428 play_move_rotate::@return
breturn:
//SEG429 [183] return
rts
//SEG430 play_move_rotate::@2
b2:
//SEG431 [184] (byte/signed word/word/dword/signed dword~) play_move_rotate::$5 ← (byte) current_orientation#20 + (byte/signed byte/word/signed word/dword/signed dword) $10 -- vbuz1=vbuz2_plus_vbuc1
lax current_orientation
axs #-[$10]
stx _5
//SEG432 [185] (byte) play_move_rotate::orientation#2 ← (byte/signed word/word/dword/signed dword~) play_move_rotate::$5 & (byte/signed byte/word/signed word/dword/signed dword) $3f -- vbuz1=vbuz2_band_vbuc1
lda #$3f
and _5
sta orientation
//SEG433 [186] phi from play_move_rotate::@1 play_move_rotate::@2 to play_move_rotate::@3 [phi:play_move_rotate::@1/play_move_rotate::@2->play_move_rotate::@3]
b3_from_b1:
b3_from_b2:
//SEG434 [186] phi (byte) play_move_rotate::orientation#3 = (byte) play_move_rotate::orientation#1 [phi:play_move_rotate::@1/play_move_rotate::@2->play_move_rotate::@3#0] -- register_copy
jmp b3
//SEG435 play_move_rotate::@3
b3:
//SEG436 [187] (byte) play_collision::xpos#3 ← (byte) current_xpos#26 -- vbuz1=vbuz2
lda current_xpos
sta play_collision.xpos
//SEG437 [188] (byte) play_collision::ypos#3 ← (byte) current_ypos#19 -- vbuz1=vbuz2
lda current_ypos
sta play_collision.ypos
//SEG438 [189] (byte) play_collision::orientation#3 ← (byte) play_move_rotate::orientation#3 -- vbuz1=vbuz2
lda orientation
sta play_collision.orientation
//SEG439 [190] (byte*~) current_piece#103 ← (byte*) current_piece#15 -- pbuz1=pbuz2
lda current_piece
sta current_piece_103
lda current_piece+1
sta current_piece_103+1
//SEG440 [191] call play_collision
//SEG441 [199] phi from play_move_rotate::@3 to play_collision [phi:play_move_rotate::@3->play_collision]
play_collision_from_b3:
//SEG442 [199] phi (byte) play_collision::xpos#6 = (byte) play_collision::xpos#3 [phi:play_move_rotate::@3->play_collision#0] -- register_copy
//SEG443 [199] phi (byte) play_collision::ypos#5 = (byte) play_collision::ypos#3 [phi:play_move_rotate::@3->play_collision#1] -- register_copy
//SEG444 [199] phi (byte) play_collision::orientation#5 = (byte) play_collision::orientation#3 [phi:play_move_rotate::@3->play_collision#2] -- register_copy
//SEG445 [199] phi (byte*) current_piece#17 = (byte*~) current_piece#103 [phi:play_move_rotate::@3->play_collision#3] -- register_copy
jsr play_collision
//SEG446 [192] (byte) play_collision::return#14 ← (byte) play_collision::return#15 -- vbuz1=vbuz2
lda play_collision.return_15
sta play_collision.return_14
jmp b6
//SEG447 play_move_rotate::@6
b6:
//SEG448 [193] (byte~) play_move_rotate::$2 ← (byte) play_collision::return#14 -- vbuz1=vbuz2
lda play_collision.return_14
sta _2
//SEG449 [194] if((byte~) play_move_rotate::$2!=(const byte) COLLISION_NONE#0) goto play_move_rotate::@return -- vbuz1_neq_vbuc1_then_la1
lda #COLLISION_NONE
cmp _2
bne breturn_from_b6
jmp b5
//SEG450 play_move_rotate::@5
b5:
//SEG451 [195] (byte) current_orientation#7 ← (byte) play_move_rotate::orientation#3 -- vbuz1=vbuz2
lda orientation
sta current_orientation
//SEG452 [196] (byte*) current_piece_gfx#7 ← (byte*) current_piece#15 + (byte) current_orientation#7 -- pbuz1=pbuz2_plus_vbuz3
lda current_orientation
clc
adc current_piece
sta current_piece_gfx
lda #0
adc current_piece+1
sta current_piece_gfx+1
//SEG453 [182] phi from play_move_rotate::@5 to play_move_rotate::@return [phi:play_move_rotate::@5->play_move_rotate::@return]
breturn_from_b5:
//SEG454 [182] phi (byte*) current_piece_gfx#21 = (byte*) current_piece_gfx#7 [phi:play_move_rotate::@5->play_move_rotate::@return#0] -- register_copy
//SEG455 [182] phi (byte) current_orientation#25 = (byte) current_orientation#7 [phi:play_move_rotate::@5->play_move_rotate::@return#1] -- register_copy
//SEG456 [182] phi (byte) play_move_rotate::return#2 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:play_move_rotate::@5->play_move_rotate::@return#2] -- vbuz1=vbuc1
lda #1
sta return_2
jmp breturn
//SEG457 play_move_rotate::@1
b1:
//SEG458 [197] (byte/signed word/word/dword/signed dword~) play_move_rotate::$7 ← (byte) current_orientation#20 - (byte/signed byte/word/signed word/dword/signed dword) $10 -- vbuz1=vbuz2_minus_vbuc1
lax current_orientation
axs #$10
stx _7
//SEG459 [198] (byte) play_move_rotate::orientation#1 ← (byte/signed word/word/dword/signed dword~) play_move_rotate::$7 & (byte/signed byte/word/signed word/dword/signed dword) $3f -- vbuz1=vbuz2_band_vbuc1
lda #$3f
and _7
sta orientation
jmp b3_from_b1
}
//SEG460 play_collision
// Test if there is a collision between the current piece moved to (x, y) and anything on the playfield or the playfield boundaries
// Returns information about the type of the collision detected
// play_collision(byte zeropage($2f) xpos, byte zeropage($2e) ypos, byte zeropage($2d) orientation)
play_collision: {
.label _7 = $9f
.label xpos = $2f
.label ypos = $2e
.label orientation = $2d
.label return = $a6
.label return_1 = $a2
.label piece_gfx = $9a
.label ypos2 = $30
.label playfield_line = $9c
.label i = $9e
.label col = $33
.label c = $34
.label l = $31
.label return_10 = $ad
.label return_13 = $a0
.label return_14 = $97
.label i_2 = $32
.label return_15 = $35
.label i_3 = $32
.label i_11 = $32
.label i_13 = $32
//SEG461 [200] (byte*) play_collision::piece_gfx#0 ← (byte*) current_piece#17 + (byte) play_collision::orientation#5 -- pbuz1=pbuz2_plus_vbuz3
lda orientation
clc
adc current_piece_17
sta piece_gfx
lda #0
adc current_piece_17+1
sta piece_gfx+1
//SEG462 [201] (byte) play_collision::ypos2#0 ← (byte) play_collision::ypos#5 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuz1=vbuz2_rol_1
lda ypos
asl
sta ypos2
//SEG463 [202] phi from play_collision to play_collision::@1 [phi:play_collision->play_collision::@1]
b1_from_play_collision:
//SEG464 [202] phi (byte) play_collision::l#6 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_collision->play_collision::@1#0] -- vbuz1=vbuc1
lda #0
sta l
//SEG465 [202] phi (byte) play_collision::i#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_collision->play_collision::@1#1] -- vbuz1=vbuc1
lda #0
sta i_3
//SEG466 [202] phi (byte) play_collision::ypos2#2 = (byte) play_collision::ypos2#0 [phi:play_collision->play_collision::@1#2] -- register_copy
jmp b1
//SEG467 play_collision::@1
b1:
//SEG468 [203] (byte*) play_collision::playfield_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte) play_collision::ypos2#2) -- pbuz1=pptc1_derefidx_vbuz2
ldy ypos2
lda playfield_lines,y
sta playfield_line
lda playfield_lines+1,y
sta playfield_line+1
//SEG469 [204] (byte~) play_collision::col#9 ← (byte) play_collision::xpos#6 -- vbuz1=vbuz2
lda xpos
sta col
//SEG470 [205] phi from play_collision::@1 to play_collision::@2 [phi:play_collision::@1->play_collision::@2]
b2_from_b1:
//SEG471 [205] phi (byte) play_collision::c#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_collision::@1->play_collision::@2#0] -- vbuz1=vbuc1
lda #0
sta c
//SEG472 [205] phi (byte) play_collision::col#2 = (byte~) play_collision::col#9 [phi:play_collision::@1->play_collision::@2#1] -- register_copy
//SEG473 [205] phi (byte) play_collision::i#2 = (byte) play_collision::i#3 [phi:play_collision::@1->play_collision::@2#2] -- register_copy
jmp b2
//SEG474 play_collision::@2
b2:
//SEG475 [206] (byte) play_collision::i#1 ← ++ (byte) play_collision::i#2 -- vbuz1=_inc_vbuz2
ldy i_2
iny
sty i
//SEG476 [207] if(*((byte*) play_collision::piece_gfx#0 + (byte) play_collision::i#2)==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_collision::@3 -- pbuz1_derefidx_vbuz2_eq_0_then_la1
ldy i_2
lda (piece_gfx),y
cmp #0
beq b3
jmp b7
//SEG477 play_collision::@7
b7:
//SEG478 [208] if((byte) play_collision::ypos2#2<(byte/signed byte/word/signed word/dword/signed dword) 2*(const byte) PLAYFIELD_LINES#0) goto play_collision::@4 -- vbuz1_lt_vbuc1_then_la1
lda ypos2
cmp #2*PLAYFIELD_LINES
bcc b4
//SEG479 [209] phi from play_collision::@7 to play_collision::@return [phi:play_collision::@7->play_collision::@return]
breturn_from_b7:
//SEG480 [209] phi (byte) play_collision::return#15 = (const byte) COLLISION_BOTTOM#0 [phi:play_collision::@7->play_collision::@return#0] -- vbuz1=vbuc1
lda #COLLISION_BOTTOM
sta return_15
jmp breturn
//SEG481 play_collision::@return
breturn:
//SEG482 [210] return
rts
//SEG483 play_collision::@4
b4:
//SEG484 [211] (byte~) play_collision::$7 ← (byte) play_collision::col#2 & (byte/word/signed word/dword/signed dword) $80 -- vbuz1=vbuz2_band_vbuc1
lda #$80
and col
sta _7
//SEG485 [212] if((byte~) play_collision::$7==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_collision::@5 -- vbuz1_eq_0_then_la1
lda _7
cmp #0
beq b5
//SEG486 [209] phi from play_collision::@4 to play_collision::@return [phi:play_collision::@4->play_collision::@return]
breturn_from_b4:
//SEG487 [209] phi (byte) play_collision::return#15 = (const byte) COLLISION_LEFT#0 [phi:play_collision::@4->play_collision::@return#0] -- vbuz1=vbuc1
lda #COLLISION_LEFT
sta return_15
jmp breturn
//SEG488 play_collision::@5
b5:
//SEG489 [213] if((byte) play_collision::col#2<(const byte) PLAYFIELD_COLS#0) goto play_collision::@6 -- vbuz1_lt_vbuc1_then_la1
lda col
cmp #PLAYFIELD_COLS
bcc b6
//SEG490 [209] phi from play_collision::@5 to play_collision::@return [phi:play_collision::@5->play_collision::@return]
breturn_from_b5:
//SEG491 [209] phi (byte) play_collision::return#15 = (const byte) COLLISION_RIGHT#0 [phi:play_collision::@5->play_collision::@return#0] -- vbuz1=vbuc1
lda #COLLISION_RIGHT
sta return_15
jmp breturn
//SEG492 play_collision::@6
b6:
//SEG493 [214] if(*((byte*) play_collision::playfield_line#0 + (byte) play_collision::col#2)==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_collision::@3 -- pbuz1_derefidx_vbuz2_eq_0_then_la1
ldy col
lda (playfield_line),y
cmp #0
beq b3
//SEG494 [209] phi from play_collision::@6 to play_collision::@return [phi:play_collision::@6->play_collision::@return]
breturn_from_b6:
//SEG495 [209] phi (byte) play_collision::return#15 = (const byte) COLLISION_PLAYFIELD#0 [phi:play_collision::@6->play_collision::@return#0] -- vbuz1=vbuc1
lda #COLLISION_PLAYFIELD
sta return_15
jmp breturn
//SEG496 play_collision::@3
b3:
//SEG497 [215] (byte) play_collision::col#1 ← ++ (byte) play_collision::col#2 -- vbuz1=_inc_vbuz1
inc col
//SEG498 [216] (byte) play_collision::c#1 ← ++ (byte) play_collision::c#2 -- vbuz1=_inc_vbuz1
inc c
//SEG499 [217] if((byte) play_collision::c#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto play_collision::@10 -- vbuz1_neq_vbuc1_then_la1
lda #4
cmp c
bne b10
jmp b8
//SEG500 play_collision::@8
b8:
//SEG501 [218] (byte) play_collision::ypos2#1 ← (byte) play_collision::ypos2#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 -- vbuz1=vbuz1_plus_2
lda ypos2
clc
adc #2
sta ypos2
//SEG502 [219] (byte) play_collision::l#1 ← ++ (byte) play_collision::l#6 -- vbuz1=_inc_vbuz1
inc l
//SEG503 [220] if((byte) play_collision::l#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto play_collision::@9 -- vbuz1_neq_vbuc1_then_la1
lda #4
cmp l
bne b9
//SEG504 [209] phi from play_collision::@8 to play_collision::@return [phi:play_collision::@8->play_collision::@return]
breturn_from_b8:
//SEG505 [209] phi (byte) play_collision::return#15 = (const byte) COLLISION_NONE#0 [phi:play_collision::@8->play_collision::@return#0] -- vbuz1=vbuc1
lda #COLLISION_NONE
sta return_15
jmp breturn
//SEG506 play_collision::@9
b9:
//SEG507 [221] (byte~) play_collision::i#11 ← (byte) play_collision::i#1 -- vbuz1=vbuz2
lda i
sta i_11
//SEG508 [202] phi from play_collision::@9 to play_collision::@1 [phi:play_collision::@9->play_collision::@1]
b1_from_b9:
//SEG509 [202] phi (byte) play_collision::l#6 = (byte) play_collision::l#1 [phi:play_collision::@9->play_collision::@1#0] -- register_copy
//SEG510 [202] phi (byte) play_collision::i#3 = (byte~) play_collision::i#11 [phi:play_collision::@9->play_collision::@1#1] -- register_copy
//SEG511 [202] phi (byte) play_collision::ypos2#2 = (byte) play_collision::ypos2#1 [phi:play_collision::@9->play_collision::@1#2] -- register_copy
jmp b1
//SEG512 play_collision::@10
b10:
//SEG513 [222] (byte~) play_collision::i#13 ← (byte) play_collision::i#1 -- vbuz1=vbuz2
lda i
sta i_13
//SEG514 [205] phi from play_collision::@10 to play_collision::@2 [phi:play_collision::@10->play_collision::@2]
b2_from_b10:
//SEG515 [205] phi (byte) play_collision::c#2 = (byte) play_collision::c#1 [phi:play_collision::@10->play_collision::@2#0] -- register_copy
//SEG516 [205] phi (byte) play_collision::col#2 = (byte) play_collision::col#1 [phi:play_collision::@10->play_collision::@2#1] -- register_copy
//SEG517 [205] phi (byte) play_collision::i#2 = (byte~) play_collision::i#13 [phi:play_collision::@10->play_collision::@2#2] -- register_copy
jmp b2
}
//SEG518 play_move_leftright
// Move left/right or rotate the current piece
// Return non-zero if a render is needed
// play_move_leftright(byte zeropage($8f) key_event)
play_move_leftright: {
.label _4 = $a1
.label _8 = $a3
.label key_event = $8f
.label return = $90
.label return_2 = $36
//SEG519 [223] if((byte) play_move_leftright::key_event#0==(const byte) KEY_COMMA#0) goto play_move_leftright::@1 -- vbuz1_eq_vbuc1_then_la1
// Handle keyboard events
lda #KEY_COMMA
cmp key_event
beq b1
jmp b2
//SEG520 play_move_leftright::@2
b2:
//SEG521 [224] if((byte) play_move_leftright::key_event#0!=(const byte) KEY_DOT#0) goto play_move_leftright::@return -- vbuz1_neq_vbuc1_then_la1
lda #KEY_DOT
cmp key_event
bne breturn_from_b2
jmp b3
//SEG522 play_move_leftright::@3
b3:
//SEG523 [225] (byte) play_collision::xpos#2 ← (byte) current_xpos#22 + (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuz1=vbuz2_plus_1
ldy current_xpos
iny
sty play_collision.xpos
//SEG524 [226] (byte) play_collision::ypos#2 ← (byte) current_ypos#19 -- vbuz1=vbuz2
lda current_ypos
sta play_collision.ypos
//SEG525 [227] (byte) play_collision::orientation#2 ← (byte) current_orientation#20 -- vbuz1=vbuz2
lda current_orientation
sta play_collision.orientation
//SEG526 [228] (byte*~) current_piece#102 ← (byte*) current_piece#15 -- pbuz1=pbuz2
lda current_piece
sta current_piece_102
lda current_piece+1
sta current_piece_102+1
//SEG527 [229] call play_collision
//SEG528 [199] phi from play_move_leftright::@3 to play_collision [phi:play_move_leftright::@3->play_collision]
play_collision_from_b3:
//SEG529 [199] phi (byte) play_collision::xpos#6 = (byte) play_collision::xpos#2 [phi:play_move_leftright::@3->play_collision#0] -- register_copy
//SEG530 [199] phi (byte) play_collision::ypos#5 = (byte) play_collision::ypos#2 [phi:play_move_leftright::@3->play_collision#1] -- register_copy
//SEG531 [199] phi (byte) play_collision::orientation#5 = (byte) play_collision::orientation#2 [phi:play_move_leftright::@3->play_collision#2] -- register_copy
//SEG532 [199] phi (byte*) current_piece#17 = (byte*~) current_piece#102 [phi:play_move_leftright::@3->play_collision#3] -- register_copy
jsr play_collision
//SEG533 [230] (byte) play_collision::return#13 ← (byte) play_collision::return#15 -- vbuz1=vbuz2
lda play_collision.return_15
sta play_collision.return_13
jmp b7
//SEG534 play_move_leftright::@7
b7:
//SEG535 [231] (byte~) play_move_leftright::$4 ← (byte) play_collision::return#13 -- vbuz1=vbuz2
lda play_collision.return_13
sta _4
//SEG536 [232] if((byte~) play_move_leftright::$4!=(const byte) COLLISION_NONE#0) goto play_move_leftright::@return -- vbuz1_neq_vbuc1_then_la1
lda #COLLISION_NONE
cmp _4
bne breturn_from_b7
jmp b4
//SEG537 play_move_leftright::@4
b4:
//SEG538 [233] (byte) current_xpos#6 ← ++ (byte) current_xpos#22 -- vbuz1=_inc_vbuz1
inc current_xpos
//SEG539 [234] phi from play_move_leftright::@4 play_move_leftright::@5 to play_move_leftright::@return [phi:play_move_leftright::@4/play_move_leftright::@5->play_move_leftright::@return]
breturn_from_b4:
breturn_from_b5:
//SEG540 [234] phi (byte) current_xpos#26 = (byte) current_xpos#6 [phi:play_move_leftright::@4/play_move_leftright::@5->play_move_leftright::@return#0] -- register_copy
//SEG541 [234] phi (byte) play_move_leftright::return#2 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:play_move_leftright::@4/play_move_leftright::@5->play_move_leftright::@return#1] -- vbuz1=vbuc1
lda #1
sta return_2
jmp breturn
//SEG542 [234] phi from play_move_leftright::@2 play_move_leftright::@6 play_move_leftright::@7 to play_move_leftright::@return [phi:play_move_leftright::@2/play_move_leftright::@6/play_move_leftright::@7->play_move_leftright::@return]
breturn_from_b2:
breturn_from_b6:
breturn_from_b7:
//SEG543 [234] phi (byte) current_xpos#26 = (byte) current_xpos#22 [phi:play_move_leftright::@2/play_move_leftright::@6/play_move_leftright::@7->play_move_leftright::@return#0] -- register_copy
//SEG544 [234] phi (byte) play_move_leftright::return#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_move_leftright::@2/play_move_leftright::@6/play_move_leftright::@7->play_move_leftright::@return#1] -- vbuz1=vbuc1
lda #0
sta return_2
jmp breturn
//SEG545 play_move_leftright::@return
breturn:
//SEG546 [235] return
rts
//SEG547 play_move_leftright::@1
b1:
//SEG548 [236] (byte) play_collision::xpos#1 ← (byte) current_xpos#22 - (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuz1=vbuz2_minus_1
ldx current_xpos
dex
stx play_collision.xpos
//SEG549 [237] (byte) play_collision::ypos#1 ← (byte) current_ypos#19 -- vbuz1=vbuz2
lda current_ypos
sta play_collision.ypos
//SEG550 [238] (byte) play_collision::orientation#1 ← (byte) current_orientation#20 -- vbuz1=vbuz2
lda current_orientation
sta play_collision.orientation
//SEG551 [239] (byte*~) current_piece#101 ← (byte*) current_piece#15 -- pbuz1=pbuz2
lda current_piece
sta current_piece_101
lda current_piece+1
sta current_piece_101+1
//SEG552 [240] call play_collision
//SEG553 [199] phi from play_move_leftright::@1 to play_collision [phi:play_move_leftright::@1->play_collision]
play_collision_from_b1:
//SEG554 [199] phi (byte) play_collision::xpos#6 = (byte) play_collision::xpos#1 [phi:play_move_leftright::@1->play_collision#0] -- register_copy
//SEG555 [199] phi (byte) play_collision::ypos#5 = (byte) play_collision::ypos#1 [phi:play_move_leftright::@1->play_collision#1] -- register_copy
//SEG556 [199] phi (byte) play_collision::orientation#5 = (byte) play_collision::orientation#1 [phi:play_move_leftright::@1->play_collision#2] -- register_copy
//SEG557 [199] phi (byte*) current_piece#17 = (byte*~) current_piece#101 [phi:play_move_leftright::@1->play_collision#3] -- register_copy
jsr play_collision
//SEG558 [241] (byte) play_collision::return#1 ← (byte) play_collision::return#15 -- vbuz1=vbuz2
lda play_collision.return_15
sta play_collision.return_1
jmp b6
//SEG559 play_move_leftright::@6
b6:
//SEG560 [242] (byte~) play_move_leftright::$8 ← (byte) play_collision::return#1 -- vbuz1=vbuz2
lda play_collision.return_1
sta _8
//SEG561 [243] if((byte~) play_move_leftright::$8!=(const byte) COLLISION_NONE#0) goto play_move_leftright::@return -- vbuz1_neq_vbuc1_then_la1
lda #COLLISION_NONE
cmp _8
bne breturn_from_b6
jmp b5
//SEG562 play_move_leftright::@5
b5:
//SEG563 [244] (byte) current_xpos#8 ← -- (byte) current_xpos#22 -- vbuz1=_dec_vbuz1
dec current_xpos
jmp breturn_from_b5
}
//SEG564 play_move_down
// Move down the current piece
// Return non-zero if a render is needed
// play_move_down(byte zeropage($8d) key_event)
play_move_down: {
.label _2 = $a5
.label _12 = $a7
.label key_event = $8d
.label return = $8e
.label movedown = $37
.label removed = $a9
.label return_3 = $49
//SEG565 [245] (byte) current_movedown_counter#12 ← ++ (byte) current_movedown_counter#16 -- vbuz1=_inc_vbuz1
inc current_movedown_counter
//SEG566 [246] if((byte) play_move_down::key_event#0!=(const byte) KEY_SPACE#0) goto play_move_down::@1 -- vbuz1_neq_vbuc1_then_la1
lda #KEY_SPACE
cmp key_event
bne b1_from_play_move_down
//SEG567 [247] phi from play_move_down to play_move_down::@4 [phi:play_move_down->play_move_down::@4]
b4_from_play_move_down:
jmp b4
//SEG568 play_move_down::@4
b4:
//SEG569 [248] phi from play_move_down::@4 to play_move_down::@1 [phi:play_move_down::@4->play_move_down::@1]
b1_from_b4:
//SEG570 [248] phi (byte) play_move_down::movedown#10 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:play_move_down::@4->play_move_down::@1#0] -- vbuz1=vbuc1
lda #1
sta movedown
jmp b1
//SEG571 [248] phi from play_move_down to play_move_down::@1 [phi:play_move_down->play_move_down::@1]
b1_from_play_move_down:
//SEG572 [248] phi (byte) play_move_down::movedown#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_move_down->play_move_down::@1#0] -- vbuz1=vbuc1
lda #0
sta movedown
jmp b1
//SEG573 play_move_down::@1
b1:
//SEG574 [249] call keyboard_event_pressed
//SEG575 [377] phi from play_move_down::@1 to keyboard_event_pressed [phi:play_move_down::@1->keyboard_event_pressed]
keyboard_event_pressed_from_b1:
//SEG576 [377] phi (byte) keyboard_event_pressed::keycode#5 = (const byte) KEY_SPACE#0 [phi:play_move_down::@1->keyboard_event_pressed#0] -- vbuz1=vbuc1
lda #KEY_SPACE
sta keyboard_event_pressed.keycode
jsr keyboard_event_pressed
//SEG577 [250] (byte) keyboard_event_pressed::return#12 ← (byte) keyboard_event_pressed::return#11 -- vbuz1=vbuz2
lda keyboard_event_pressed.return_11
sta keyboard_event_pressed.return_12
jmp b12
//SEG578 play_move_down::@12
b12:
//SEG579 [251] (byte~) play_move_down::$2 ← (byte) keyboard_event_pressed::return#12 -- vbuz1=vbuz2
lda keyboard_event_pressed.return_12
sta _2
//SEG580 [252] if((byte~) play_move_down::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_move_down::@2 -- vbuz1_eq_0_then_la1
lda _2
cmp #0
beq b2_from_b12
jmp b5
//SEG581 play_move_down::@5
b5:
//SEG582 [253] if((byte) current_movedown_counter#12<(const byte) current_movedown_fast#0) goto play_move_down::@2 -- vbuz1_lt_vbuc1_then_la1
lda current_movedown_counter
cmp #current_movedown_fast
bcc b2_from_b5
jmp b6
//SEG583 play_move_down::@6
b6:
//SEG584 [254] (byte) play_move_down::movedown#2 ← ++ (byte) play_move_down::movedown#10 -- vbuz1=_inc_vbuz1
inc movedown
//SEG585 [255] phi from play_move_down::@12 play_move_down::@5 play_move_down::@6 to play_move_down::@2 [phi:play_move_down::@12/play_move_down::@5/play_move_down::@6->play_move_down::@2]
b2_from_b12:
b2_from_b5:
b2_from_b6:
//SEG586 [255] phi (byte) play_move_down::movedown#7 = (byte) play_move_down::movedown#10 [phi:play_move_down::@12/play_move_down::@5/play_move_down::@6->play_move_down::@2#0] -- register_copy
jmp b2
//SEG587 play_move_down::@2
b2:
//SEG588 [256] if((byte) current_movedown_counter#12<(byte) current_movedown_slow#14) goto play_move_down::@3 -- vbuz1_lt_vbuz2_then_la1
lda current_movedown_counter
cmp current_movedown_slow
bcc b3_from_b2
jmp b7
//SEG589 play_move_down::@7
b7:
//SEG590 [257] (byte) play_move_down::movedown#3 ← ++ (byte) play_move_down::movedown#7 -- vbuz1=_inc_vbuz1
inc movedown
//SEG591 [258] phi from play_move_down::@2 play_move_down::@7 to play_move_down::@3 [phi:play_move_down::@2/play_move_down::@7->play_move_down::@3]
b3_from_b2:
b3_from_b7:
//SEG592 [258] phi (byte) play_move_down::movedown#6 = (byte) play_move_down::movedown#7 [phi:play_move_down::@2/play_move_down::@7->play_move_down::@3#0] -- register_copy
jmp b3
//SEG593 play_move_down::@3
b3:
//SEG594 [259] if((byte) play_move_down::movedown#6==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_move_down::@return -- vbuz1_eq_0_then_la1
lda movedown
cmp #0
beq breturn_from_b3
jmp b8
//SEG595 play_move_down::@8
b8:
//SEG596 [260] (byte) play_collision::ypos#0 ← (byte) current_ypos#100 + (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuz1=vbuz2_plus_1
ldy current_ypos
iny
sty play_collision.ypos
//SEG597 [261] (byte) play_collision::xpos#0 ← (byte) current_xpos#124 -- vbuz1=vbuz2
lda current_xpos
sta play_collision.xpos
//SEG598 [262] (byte) play_collision::orientation#0 ← (byte) current_orientation#13 -- vbuz1=vbuz2
lda current_orientation
sta play_collision.orientation
//SEG599 [263] (byte*~) current_piece#100 ← (byte*) current_piece#10 -- pbuz1=pbuz2
lda current_piece
sta current_piece_100
lda current_piece+1
sta current_piece_100+1
//SEG600 [264] call play_collision
//SEG601 [199] phi from play_move_down::@8 to play_collision [phi:play_move_down::@8->play_collision]
play_collision_from_b8:
//SEG602 [199] phi (byte) play_collision::xpos#6 = (byte) play_collision::xpos#0 [phi:play_move_down::@8->play_collision#0] -- register_copy
//SEG603 [199] phi (byte) play_collision::ypos#5 = (byte) play_collision::ypos#0 [phi:play_move_down::@8->play_collision#1] -- register_copy
//SEG604 [199] phi (byte) play_collision::orientation#5 = (byte) play_collision::orientation#0 [phi:play_move_down::@8->play_collision#2] -- register_copy
//SEG605 [199] phi (byte*) current_piece#17 = (byte*~) current_piece#100 [phi:play_move_down::@8->play_collision#3] -- register_copy
jsr play_collision
//SEG606 [265] (byte) play_collision::return#0 ← (byte) play_collision::return#15 -- vbuz1=vbuz2
lda play_collision.return_15
sta play_collision.return
jmp b13
//SEG607 play_move_down::@13
b13:
//SEG608 [266] (byte~) play_move_down::$12 ← (byte) play_collision::return#0 -- vbuz1=vbuz2
lda play_collision.return
sta _12
//SEG609 [267] if((byte~) play_move_down::$12==(const byte) COLLISION_NONE#0) goto play_move_down::@10 -- vbuz1_eq_vbuc1_then_la1
lda #COLLISION_NONE
cmp _12
beq b10
//SEG610 [268] phi from play_move_down::@13 to play_move_down::@9 [phi:play_move_down::@13->play_move_down::@9]
b9_from_b13:
jmp b9
//SEG611 play_move_down::@9
b9:
//SEG612 [269] call play_lock_current
jsr play_lock_current
//SEG613 [270] phi from play_move_down::@9 to play_move_down::@14 [phi:play_move_down::@9->play_move_down::@14]
b14_from_b9:
jmp b14
//SEG614 play_move_down::@14
b14:
//SEG615 [271] call play_remove_lines
//SEG616 [337] phi from play_move_down::@14 to play_remove_lines [phi:play_move_down::@14->play_remove_lines]
play_remove_lines_from_b14:
jsr play_remove_lines
//SEG617 [272] (byte) play_remove_lines::return#0 ← (byte) play_remove_lines::removed#8 -- vbuz1=vbuz2
lda play_remove_lines.removed
sta play_remove_lines.return
jmp b15
//SEG618 play_move_down::@15
b15:
//SEG619 [273] (byte) play_move_down::removed#0 ← (byte) play_remove_lines::return#0 -- vbuz1=vbuz2
lda play_remove_lines.return
sta removed
//SEG620 [274] (byte) play_update_score::removed#0 ← (byte) play_move_down::removed#0 -- vbuz1=vbuz2
lda removed
sta play_update_score.removed
//SEG621 [275] call play_update_score
jsr play_update_score
//SEG622 [276] phi from play_move_down::@15 to play_move_down::@16 [phi:play_move_down::@15->play_move_down::@16]
b16_from_b15:
jmp b16
//SEG623 play_move_down::@16
b16:
//SEG624 [277] call play_spawn_current
//SEG625 [283] phi from play_move_down::@16 to play_spawn_current [phi:play_move_down::@16->play_spawn_current]
play_spawn_current_from_b16:
//SEG626 [283] phi (byte) game_over#65 = (byte) game_over#10 [phi:play_move_down::@16->play_spawn_current#0] -- register_copy
//SEG627 [283] phi (byte) next_piece_idx#17 = (byte) next_piece_idx#10 [phi:play_move_down::@16->play_spawn_current#1] -- register_copy
jsr play_spawn_current
//SEG628 [278] (byte*~) current_piece#106 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$0) -- pbuz1=pptc1_derefidx_vbuz2
ldy play_spawn_current._0
lda PIECES,y
sta current_piece
lda PIECES+1,y
sta current_piece+1
//SEG629 [279] phi from play_move_down::@16 to play_move_down::@11 [phi:play_move_down::@16->play_move_down::@11]
b11_from_b16:
//SEG630 [279] phi (byte) next_piece_idx#30 = (byte) play_spawn_current::piece_idx#2 [phi:play_move_down::@16->play_move_down::@11#0] -- register_copy
//SEG631 [279] phi (byte) game_over#27 = (byte) game_over#52 [phi:play_move_down::@16->play_move_down::@11#1] -- register_copy
//SEG632 [279] phi (byte) current_xpos#43 = (byte) current_xpos#103 [phi:play_move_down::@16->play_move_down::@11#2] -- register_copy
//SEG633 [279] phi (byte*) current_piece_gfx#35 = (byte*) current_piece_gfx#74 [phi:play_move_down::@16->play_move_down::@11#3] -- register_copy
//SEG634 [279] phi (byte) current_orientation#37 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_move_down::@16->play_move_down::@11#4] -- vbuz1=vbuc1
lda #0
sta current_orientation
//SEG635 [279] phi (byte) current_piece_char#29 = (byte) current_piece_char#5 [phi:play_move_down::@16->play_move_down::@11#5] -- register_copy
//SEG636 [279] phi (byte*) current_piece#28 = (byte*~) current_piece#106 [phi:play_move_down::@16->play_move_down::@11#6] -- register_copy
//SEG637 [279] phi (byte) level_bcd#31 = (byte) level_bcd#19 [phi:play_move_down::@16->play_move_down::@11#7] -- register_copy
//SEG638 [279] phi (byte) current_movedown_slow#37 = (byte) current_movedown_slow#23 [phi:play_move_down::@16->play_move_down::@11#8] -- register_copy
//SEG639 [279] phi (byte) level#33 = (byte) level#19 [phi:play_move_down::@16->play_move_down::@11#9] -- register_copy
//SEG640 [279] phi (dword) score_bcd#26 = (dword) score_bcd#16 [phi:play_move_down::@16->play_move_down::@11#10] -- register_copy
//SEG641 [279] phi (word) lines_bcd#26 = (word) lines_bcd#17 [phi:play_move_down::@16->play_move_down::@11#11] -- register_copy
//SEG642 [279] phi (byte) current_ypos#38 = (byte) current_ypos#6 [phi:play_move_down::@16->play_move_down::@11#12] -- register_copy
jmp b11
//SEG643 play_move_down::@11
b11:
//SEG644 [280] phi from play_move_down::@11 to play_move_down::@return [phi:play_move_down::@11->play_move_down::@return]
breturn_from_b11:
//SEG645 [280] phi (byte) next_piece_idx#16 = (byte) next_piece_idx#30 [phi:play_move_down::@11->play_move_down::@return#0] -- register_copy
//SEG646 [280] phi (byte) game_over#15 = (byte) game_over#27 [phi:play_move_down::@11->play_move_down::@return#1] -- register_copy
//SEG647 [280] phi (byte) current_xpos#22 = (byte) current_xpos#43 [phi:play_move_down::@11->play_move_down::@return#2] -- register_copy
//SEG648 [280] phi (byte*) current_piece_gfx#20 = (byte*) current_piece_gfx#35 [phi:play_move_down::@11->play_move_down::@return#3] -- register_copy
//SEG649 [280] phi (byte) current_orientation#20 = (byte) current_orientation#37 [phi:play_move_down::@11->play_move_down::@return#4] -- register_copy
//SEG650 [280] phi (byte) current_piece_char#16 = (byte) current_piece_char#29 [phi:play_move_down::@11->play_move_down::@return#5] -- register_copy
//SEG651 [280] phi (byte*) current_piece#15 = (byte*) current_piece#28 [phi:play_move_down::@11->play_move_down::@return#6] -- register_copy
//SEG652 [280] phi (byte) level_bcd#17 = (byte) level_bcd#31 [phi:play_move_down::@11->play_move_down::@return#7] -- register_copy
//SEG653 [280] phi (byte) current_movedown_slow#21 = (byte) current_movedown_slow#37 [phi:play_move_down::@11->play_move_down::@return#8] -- register_copy
//SEG654 [280] phi (byte) level#17 = (byte) level#33 [phi:play_move_down::@11->play_move_down::@return#9] -- register_copy
//SEG655 [280] phi (dword) score_bcd#14 = (dword) score_bcd#26 [phi:play_move_down::@11->play_move_down::@return#10] -- register_copy
//SEG656 [280] phi (word) lines_bcd#15 = (word) lines_bcd#26 [phi:play_move_down::@11->play_move_down::@return#11] -- register_copy
//SEG657 [280] phi (byte) current_ypos#19 = (byte) current_ypos#38 [phi:play_move_down::@11->play_move_down::@return#12] -- register_copy
//SEG658 [280] phi (byte) current_movedown_counter#14 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_move_down::@11->play_move_down::@return#13] -- vbuz1=vbuc1
lda #0
sta current_movedown_counter
//SEG659 [280] phi (byte) play_move_down::return#3 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:play_move_down::@11->play_move_down::@return#14] -- vbuz1=vbuc1
lda #1
sta return_3
jmp breturn
//SEG660 [280] phi from play_move_down::@3 to play_move_down::@return [phi:play_move_down::@3->play_move_down::@return]
breturn_from_b3:
//SEG661 [280] phi (byte) next_piece_idx#16 = (byte) next_piece_idx#10 [phi:play_move_down::@3->play_move_down::@return#0] -- register_copy
//SEG662 [280] phi (byte) game_over#15 = (byte) game_over#10 [phi:play_move_down::@3->play_move_down::@return#1] -- register_copy
//SEG663 [280] phi (byte) current_xpos#22 = (byte) current_xpos#124 [phi:play_move_down::@3->play_move_down::@return#2] -- register_copy
//SEG664 [280] phi (byte*) current_piece_gfx#20 = (byte*) current_piece_gfx#114 [phi:play_move_down::@3->play_move_down::@return#3] -- register_copy
//SEG665 [280] phi (byte) current_orientation#20 = (byte) current_orientation#13 [phi:play_move_down::@3->play_move_down::@return#4] -- register_copy
//SEG666 [280] phi (byte) current_piece_char#16 = (byte) current_piece_char#10 [phi:play_move_down::@3->play_move_down::@return#5] -- register_copy
//SEG667 [280] phi (byte*) current_piece#15 = (byte*) current_piece#10 [phi:play_move_down::@3->play_move_down::@return#6] -- register_copy
//SEG668 [280] phi (byte) level_bcd#17 = (byte) level_bcd#11 [phi:play_move_down::@3->play_move_down::@return#7] -- register_copy
//SEG669 [280] phi (byte) current_movedown_slow#21 = (byte) current_movedown_slow#14 [phi:play_move_down::@3->play_move_down::@return#8] -- register_copy
//SEG670 [280] phi (byte) level#17 = (byte) level#10 [phi:play_move_down::@3->play_move_down::@return#9] -- register_copy
//SEG671 [280] phi (dword) score_bcd#14 = (dword) score_bcd#18 [phi:play_move_down::@3->play_move_down::@return#10] -- register_copy
//SEG672 [280] phi (word) lines_bcd#15 = (word) lines_bcd#19 [phi:play_move_down::@3->play_move_down::@return#11] -- register_copy
//SEG673 [280] phi (byte) current_ypos#19 = (byte) current_ypos#100 [phi:play_move_down::@3->play_move_down::@return#12] -- register_copy
//SEG674 [280] phi (byte) current_movedown_counter#14 = (byte) current_movedown_counter#12 [phi:play_move_down::@3->play_move_down::@return#13] -- register_copy
//SEG675 [280] phi (byte) play_move_down::return#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_move_down::@3->play_move_down::@return#14] -- vbuz1=vbuc1
lda #0
sta return_3
jmp breturn
//SEG676 play_move_down::@return
breturn:
//SEG677 [281] return
rts
//SEG678 play_move_down::@10
b10:
//SEG679 [282] (byte) current_ypos#3 ← ++ (byte) current_ypos#100 -- vbuz1=_inc_vbuz1
inc current_ypos
//SEG680 [279] phi from play_move_down::@10 to play_move_down::@11 [phi:play_move_down::@10->play_move_down::@11]
b11_from_b10:
//SEG681 [279] phi (byte) next_piece_idx#30 = (byte) next_piece_idx#10 [phi:play_move_down::@10->play_move_down::@11#0] -- register_copy
//SEG682 [279] phi (byte) game_over#27 = (byte) game_over#10 [phi:play_move_down::@10->play_move_down::@11#1] -- register_copy
//SEG683 [279] phi (byte) current_xpos#43 = (byte) current_xpos#124 [phi:play_move_down::@10->play_move_down::@11#2] -- register_copy
//SEG684 [279] phi (byte*) current_piece_gfx#35 = (byte*) current_piece_gfx#114 [phi:play_move_down::@10->play_move_down::@11#3] -- register_copy
//SEG685 [279] phi (byte) current_orientation#37 = (byte) current_orientation#13 [phi:play_move_down::@10->play_move_down::@11#4] -- register_copy
//SEG686 [279] phi (byte) current_piece_char#29 = (byte) current_piece_char#10 [phi:play_move_down::@10->play_move_down::@11#5] -- register_copy
//SEG687 [279] phi (byte*) current_piece#28 = (byte*) current_piece#10 [phi:play_move_down::@10->play_move_down::@11#6] -- register_copy
//SEG688 [279] phi (byte) level_bcd#31 = (byte) level_bcd#11 [phi:play_move_down::@10->play_move_down::@11#7] -- register_copy
//SEG689 [279] phi (byte) current_movedown_slow#37 = (byte) current_movedown_slow#14 [phi:play_move_down::@10->play_move_down::@11#8] -- register_copy
//SEG690 [279] phi (byte) level#33 = (byte) level#10 [phi:play_move_down::@10->play_move_down::@11#9] -- register_copy
//SEG691 [279] phi (dword) score_bcd#26 = (dword) score_bcd#18 [phi:play_move_down::@10->play_move_down::@11#10] -- register_copy
//SEG692 [279] phi (word) lines_bcd#26 = (word) lines_bcd#19 [phi:play_move_down::@10->play_move_down::@11#11] -- register_copy
//SEG693 [279] phi (byte) current_ypos#38 = (byte) current_ypos#3 [phi:play_move_down::@10->play_move_down::@11#12] -- register_copy
jmp b11
}
//SEG694 play_spawn_current
// Spawn a new piece
// Moves the next piece into the current and spawns a new next piece
play_spawn_current: {
.label _0 = $ac
.label _2 = $ae
.label current_piece_idx = $ab
.label sid_rnd1_return = $af
.label piece_idx = $4a
//SEG695 [284] (byte) play_spawn_current::current_piece_idx#0 ← (byte) next_piece_idx#17 -- vbuz1=vbuz2
// Move next piece into current
lda next_piece_idx
sta current_piece_idx
//SEG696 [285] (byte~) play_spawn_current::$0 ← (byte) play_spawn_current::current_piece_idx#0 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuz1=vbuz2_rol_1
lda current_piece_idx
asl
sta _0
//SEG697 [286] (byte) current_piece_char#5 ← *((const byte[]) PIECES_CHARS#0 + (byte) play_spawn_current::current_piece_idx#0) -- vbuz1=pbuc1_derefidx_vbuz2
ldy current_piece_idx
lda PIECES_CHARS,y
sta current_piece_char
//SEG698 [287] (byte*) current_piece_gfx#74 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$0) -- pbuz1=pptc1_derefidx_vbuz2
ldy _0
lda PIECES,y
sta current_piece_gfx
lda PIECES+1,y
sta current_piece_gfx+1
//SEG699 [288] (byte) current_xpos#103 ← *((const byte[]) PIECES_START_X#0 + (byte) play_spawn_current::current_piece_idx#0) -- vbuz1=pbuc1_derefidx_vbuz2
ldy current_piece_idx
lda PIECES_START_X,y
sta current_xpos
//SEG700 [289] (byte) current_ypos#6 ← *((const byte[]) PIECES_START_Y#0 + (byte) play_spawn_current::current_piece_idx#0) -- vbuz1=pbuc1_derefidx_vbuz2
ldy current_piece_idx
lda PIECES_START_Y,y
sta current_ypos
//SEG701 [290] (byte) play_collision::xpos#4 ← (byte) current_xpos#103 -- vbuz1=vbuz2
lda current_xpos
sta play_collision.xpos
//SEG702 [291] (byte) play_collision::ypos#4 ← (byte) current_ypos#6 -- vbuz1=vbuz2
lda current_ypos
sta play_collision.ypos
//SEG703 [292] (byte*~) current_piece#104 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$0) -- pbuz1=pptc1_derefidx_vbuz2
ldy _0
lda PIECES,y
sta current_piece_104
lda PIECES+1,y
sta current_piece_104+1
//SEG704 [293] call play_collision
//SEG705 [199] phi from play_spawn_current to play_collision [phi:play_spawn_current->play_collision]
play_collision_from_play_spawn_current:
//SEG706 [199] phi (byte) play_collision::xpos#6 = (byte) play_collision::xpos#4 [phi:play_spawn_current->play_collision#0] -- register_copy
//SEG707 [199] phi (byte) play_collision::ypos#5 = (byte) play_collision::ypos#4 [phi:play_spawn_current->play_collision#1] -- register_copy
//SEG708 [199] phi (byte) play_collision::orientation#5 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_spawn_current->play_collision#2] -- vbuz1=vbuc1
lda #0
sta play_collision.orientation
//SEG709 [199] phi (byte*) current_piece#17 = (byte*~) current_piece#104 [phi:play_spawn_current->play_collision#3] -- register_copy
jsr play_collision
//SEG710 [294] (byte) play_collision::return#10 ← (byte) play_collision::return#15 -- vbuz1=vbuz2
lda play_collision.return_15
sta play_collision.return_10
jmp b4
//SEG711 play_spawn_current::@4
b4:
//SEG712 [295] (byte~) play_spawn_current::$2 ← (byte) play_collision::return#10 -- vbuz1=vbuz2
lda play_collision.return_10
sta _2
//SEG713 [296] if((byte~) play_spawn_current::$2!=(const byte) COLLISION_PLAYFIELD#0) goto play_spawn_current::@5 -- vbuz1_neq_vbuc1_then_la1
lda #COLLISION_PLAYFIELD
cmp _2
bne b5_from_b4
//SEG714 [297] phi from play_spawn_current::@4 to play_spawn_current::@1 [phi:play_spawn_current::@4->play_spawn_current::@1]
b1_from_b4:
//SEG715 [297] phi (byte) game_over#52 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:play_spawn_current::@4->play_spawn_current::@1#0] -- vbuz1=vbuc1
lda #1
sta game_over
jmp b1
//SEG716 play_spawn_current::@1
b1:
//SEG717 [298] phi from play_spawn_current::@1 to play_spawn_current::@2 [phi:play_spawn_current::@1->play_spawn_current::@2]
b2_from_b1:
//SEG718 [298] phi (byte) play_spawn_current::piece_idx#2 = (byte/signed byte/word/signed word/dword/signed dword) 7 [phi:play_spawn_current::@1->play_spawn_current::@2#0] -- vbuz1=vbuc1
lda #7
sta piece_idx
jmp b2
//SEG719 play_spawn_current::@2
b2:
//SEG720 [299] if((byte) play_spawn_current::piece_idx#2==(byte/signed byte/word/signed word/dword/signed dword) 7) goto play_spawn_current::sid_rnd1 -- vbuz1_eq_vbuc1_then_la1
lda #7
cmp piece_idx
beq sid_rnd1
jmp breturn
//SEG721 play_spawn_current::@return
breturn:
//SEG722 [300] return
rts
//SEG723 play_spawn_current::sid_rnd1
sid_rnd1:
//SEG724 [301] (byte) play_spawn_current::sid_rnd1_return#0 ← *((const byte*) SID_VOICE3_OSC#0) -- vbuz1=_deref_pbuc1
lda SID_VOICE3_OSC
sta sid_rnd1_return
jmp b3
//SEG725 play_spawn_current::@3
b3:
//SEG726 [302] (byte) play_spawn_current::piece_idx#1 ← (byte) play_spawn_current::sid_rnd1_return#0 & (byte/signed byte/word/signed word/dword/signed dword) 7 -- vbuz1=vbuz2_band_vbuc1
lda #7
and sid_rnd1_return
sta piece_idx
//SEG727 [298] phi from play_spawn_current::@3 to play_spawn_current::@2 [phi:play_spawn_current::@3->play_spawn_current::@2]
b2_from_b3:
//SEG728 [298] phi (byte) play_spawn_current::piece_idx#2 = (byte) play_spawn_current::piece_idx#1 [phi:play_spawn_current::@3->play_spawn_current::@2#0] -- register_copy
jmp b2
//SEG729 [303] phi from play_spawn_current::@4 to play_spawn_current::@5 [phi:play_spawn_current::@4->play_spawn_current::@5]
b5_from_b4:
jmp b5
//SEG730 play_spawn_current::@5
b5:
//SEG731 [297] phi from play_spawn_current::@5 to play_spawn_current::@1 [phi:play_spawn_current::@5->play_spawn_current::@1]
b1_from_b5:
//SEG732 [297] phi (byte) game_over#52 = (byte) game_over#65 [phi:play_spawn_current::@5->play_spawn_current::@1#0] -- register_copy
jmp b1
}
//SEG733 play_update_score
// Update the score based on the number of lines removed
// play_update_score(byte zeropage($aa) removed)
play_update_score: {
.label _2 = $b0
.label _4 = $b2
.label _5 = $b7
.label removed = $aa
.label lines_before = $b1
.label add_bcd = $b3
.label lines_after = $b8
//SEG734 [304] if((byte) play_update_score::removed#0==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_update_score::@return -- vbuz1_eq_0_then_la1
lda removed
cmp #0
beq breturn_from_play_update_score
jmp b1
//SEG735 play_update_score::@1
b1:
//SEG736 [305] (byte~) play_update_score::$2 ← < (word) lines_bcd#19 -- vbuz1=_lo_vwuz2
lda lines_bcd
sta _2
//SEG737 [306] (byte) play_update_score::lines_before#0 ← (byte~) play_update_score::$2 & (byte/word/signed word/dword/signed dword) $f0 -- vbuz1=vbuz2_band_vbuc1
lda #$f0
and _2
sta lines_before
//SEG738 [307] (byte~) play_update_score::$4 ← (byte) play_update_score::removed#0 << (byte/signed byte/word/signed word/dword/signed dword) 2 -- vbuz1=vbuz2_rol_2
lda removed
asl
asl
sta _4
//SEG739 [308] (dword) play_update_score::add_bcd#0 ← *((const dword[5]) score_add_bcd#0 + (byte~) play_update_score::$4) -- vduz1=pduc1_derefidx_vbuz2
ldy _4
lda score_add_bcd,y
sta add_bcd
lda score_add_bcd+1,y
sta add_bcd+1
lda score_add_bcd+2,y
sta add_bcd+2
lda score_add_bcd+3,y
sta add_bcd+3
//SEG740 asm { sed }
sed
//SEG741 [310] (word) lines_bcd#30 ← (word) lines_bcd#19 + (byte) play_update_score::removed#0 -- vwuz1=vwuz1_plus_vbuz2
lda removed
clc
adc lines_bcd
sta lines_bcd
bcc !+
inc lines_bcd+1
!:
//SEG742 [311] (dword) score_bcd#30 ← (dword) score_bcd#18 + (dword) play_update_score::add_bcd#0 -- vduz1=vduz1_plus_vduz2
lda score_bcd
clc
adc add_bcd
sta score_bcd
lda score_bcd+1
adc add_bcd+1
sta score_bcd+1
lda score_bcd+2
adc add_bcd+2
sta score_bcd+2
lda score_bcd+3
adc add_bcd+3
sta score_bcd+3
//SEG743 asm { cld }
cld
//SEG744 [313] (byte~) play_update_score::$5 ← < (word) lines_bcd#30 -- vbuz1=_lo_vwuz2
lda lines_bcd
sta _5
//SEG745 [314] (byte) play_update_score::lines_after#0 ← (byte~) play_update_score::$5 & (byte/word/signed word/dword/signed dword) $f0 -- vbuz1=vbuz2_band_vbuc1
lda #$f0
and _5
sta lines_after
//SEG746 [315] if((byte) play_update_score::lines_before#0==(byte) play_update_score::lines_after#0) goto play_update_score::@return -- vbuz1_eq_vbuz2_then_la1
lda lines_before
cmp lines_after
beq breturn_from_b1
//SEG747 [316] phi from play_update_score::@1 to play_update_score::@2 [phi:play_update_score::@1->play_update_score::@2]
b2_from_b1:
jmp b2
//SEG748 play_update_score::@2
b2:
//SEG749 [317] call play_increase_level
jsr play_increase_level
//SEG750 [318] phi from play_update_score play_update_score::@1 play_update_score::@2 to play_update_score::@return [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return]
breturn_from_play_update_score:
breturn_from_b1:
breturn_from_b2:
//SEG751 [318] phi (byte) level_bcd#19 = (byte) level_bcd#11 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#0] -- register_copy
//SEG752 [318] phi (byte) current_movedown_slow#23 = (byte) current_movedown_slow#14 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#1] -- register_copy
//SEG753 [318] phi (byte) level#19 = (byte) level#10 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#2] -- register_copy
//SEG754 [318] phi (dword) score_bcd#16 = (dword) score_bcd#18 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#3] -- register_copy
//SEG755 [318] phi (word) lines_bcd#17 = (word) lines_bcd#19 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#4] -- register_copy
jmp breturn
//SEG756 play_update_score::@return
breturn:
//SEG757 [319] return
rts
}
//SEG758 play_increase_level
// Increase the level
play_increase_level: {
.label _1 = $b9
.label b4 = $ba
.label b = $4c
//SEG759 [320] (byte) level#21 ← ++ (byte) level#10 -- vbuz1=_inc_vbuz1
inc level
//SEG760 [321] if((byte) level#21>=(byte/signed byte/word/signed word/dword/signed dword) $1d+(byte/signed byte/word/signed word/dword/signed dword) 1) goto play_increase_level::@1 -- vbuz1_ge_vbuc1_then_la1
// Update speed of moving tetrominos down
lda level
cmp #$1d+1
bcs b1_from_play_increase_level
jmp b3
//SEG761 play_increase_level::@3
b3:
//SEG762 [322] (byte) current_movedown_slow#10 ← *((const byte[]) MOVEDOWN_SLOW_SPEEDS#0 + (byte) level#21) -- vbuz1=pbuc1_derefidx_vbuz2
ldy level
lda MOVEDOWN_SLOW_SPEEDS,y
sta current_movedown_slow
//SEG763 [323] phi from play_increase_level::@3 to play_increase_level::@1 [phi:play_increase_level::@3->play_increase_level::@1]
b1_from_b3:
//SEG764 [323] phi (byte) current_movedown_slow#69 = (byte) current_movedown_slow#10 [phi:play_increase_level::@3->play_increase_level::@1#0] -- register_copy
jmp b1
//SEG765 [323] phi from play_increase_level to play_increase_level::@1 [phi:play_increase_level->play_increase_level::@1]
b1_from_play_increase_level:
//SEG766 [323] phi (byte) current_movedown_slow#69 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:play_increase_level->play_increase_level::@1#0] -- vbuz1=vbuc1
lda #1
sta current_movedown_slow
jmp b1
//SEG767 play_increase_level::@1
b1:
//SEG768 [324] (byte) level_bcd#21 ← ++ (byte) level_bcd#11 -- vbuz1=_inc_vbuz1
inc level_bcd
//SEG769 [325] (byte~) play_increase_level::$1 ← (byte) level_bcd#21 & (byte/signed byte/word/signed word/dword/signed dword) $f -- vbuz1=vbuz2_band_vbuc1
lda #$f
and level_bcd
sta _1
//SEG770 [326] if((byte~) play_increase_level::$1!=(byte/signed byte/word/signed word/dword/signed dword) $a) goto play_increase_level::@2 -- vbuz1_neq_vbuc1_then_la1
lda #$a
cmp _1
bne b2_from_b1
jmp b4
//SEG771 play_increase_level::@4
b4:
//SEG772 [327] (byte) level_bcd#8 ← (byte) level_bcd#21 + (byte/signed byte/word/signed word/dword/signed dword) 6 -- vbuz1=vbuz1_plus_vbuc1
// If level low nybble hits $a change to $10
lax level_bcd
axs #-[6]
stx level_bcd
//SEG773 [328] phi from play_increase_level::@1 play_increase_level::@4 to play_increase_level::@2 [phi:play_increase_level::@1/play_increase_level::@4->play_increase_level::@2]
b2_from_b1:
b2_from_b4:
//SEG774 [328] phi (byte) level_bcd#64 = (byte) level_bcd#21 [phi:play_increase_level::@1/play_increase_level::@4->play_increase_level::@2#0] -- register_copy
jmp b2
//SEG775 play_increase_level::@2
b2:
//SEG776 asm { sed }
// Increase the score values gained
sed
//SEG777 [330] phi from play_increase_level::@2 to play_increase_level::@5 [phi:play_increase_level::@2->play_increase_level::@5]
b5_from_b2:
//SEG778 [330] phi (byte) play_increase_level::b#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_increase_level::@2->play_increase_level::@5#0] -- vbuz1=vbuc1
lda #0
sta b
jmp b5
//SEG779 [330] phi from play_increase_level::@5 to play_increase_level::@5 [phi:play_increase_level::@5->play_increase_level::@5]
b5_from_b5:
//SEG780 [330] phi (byte) play_increase_level::b#2 = (byte) play_increase_level::b#1 [phi:play_increase_level::@5->play_increase_level::@5#0] -- register_copy
jmp b5
//SEG781 play_increase_level::@5
b5:
//SEG782 [331] (byte) play_increase_level::b4#0 ← (byte) play_increase_level::b#2 << (byte/signed byte/word/signed word/dword/signed dword) 2 -- vbuz1=vbuz2_rol_2
lda b
asl
asl
sta b4
//SEG783 [332] *((const dword[5]) score_add_bcd#0 + (byte) play_increase_level::b4#0) ← *((const dword[5]) score_add_bcd#0 + (byte) play_increase_level::b4#0) + *((const dword[]) SCORE_BASE_BCD#0 + (byte) play_increase_level::b4#0) -- pduc1_derefidx_vbuz1=pduc1_derefidx_vbuz1_plus_pduc2_derefidx_vbuz1
ldy b4
clc
lda score_add_bcd,y
adc SCORE_BASE_BCD,y
sta score_add_bcd,y
lda score_add_bcd+1,y
adc SCORE_BASE_BCD+1,y
sta score_add_bcd+1,y
lda score_add_bcd+2,y
adc SCORE_BASE_BCD+2,y
sta score_add_bcd+2,y
lda score_add_bcd+3,y
adc SCORE_BASE_BCD+3,y
sta score_add_bcd+3,y
//SEG784 [333] (byte) play_increase_level::b#1 ← ++ (byte) play_increase_level::b#2 -- vbuz1=_inc_vbuz1
inc b
//SEG785 [334] if((byte) play_increase_level::b#1!=(byte/signed byte/word/signed word/dword/signed dword) 5) goto play_increase_level::@5 -- vbuz1_neq_vbuc1_then_la1
lda #5
cmp b
bne b5_from_b5
jmp b6
//SEG786 play_increase_level::@6
b6:
//SEG787 asm { cld }
cld
jmp breturn
//SEG788 play_increase_level::@return
breturn:
//SEG789 [336] return
rts
}
//SEG790 play_remove_lines
// Look through the playfield for lines - and remove any lines found
// Utilizes two cursors on the playfield - one reading cells and one writing cells
// Whenever a full line is detected the writing cursor is instructed to write to the same line once more.
// Returns the number of lines removed
play_remove_lines: {
.label return = $a8
.label c = $bb
.label r = $4f
.label w = $52
.label x = $50
.label y = $4d
.label removed = $4e
.label full = $51
//SEG791 [338] phi from play_remove_lines to play_remove_lines::@1 [phi:play_remove_lines->play_remove_lines::@1]
b1_from_play_remove_lines:
//SEG792 [338] phi (byte) play_remove_lines::removed#11 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_remove_lines->play_remove_lines::@1#0] -- vbuz1=vbuc1
lda #0
sta removed
//SEG793 [338] phi (byte) play_remove_lines::y#8 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_remove_lines->play_remove_lines::@1#1] -- vbuz1=vbuc1
lda #0
sta y
//SEG794 [338] phi (byte) play_remove_lines::w#12 = (const byte) PLAYFIELD_LINES#0*(const byte) PLAYFIELD_COLS#0-(byte/signed byte/word/signed word/dword/signed dword) 1 [phi:play_remove_lines->play_remove_lines::@1#2] -- vbuz1=vbuc1
lda #PLAYFIELD_LINES*PLAYFIELD_COLS-1
sta w
//SEG795 [338] phi (byte) play_remove_lines::r#3 = (const byte) PLAYFIELD_LINES#0*(const byte) PLAYFIELD_COLS#0-(byte/signed byte/word/signed word/dword/signed dword) 1 [phi:play_remove_lines->play_remove_lines::@1#3] -- vbuz1=vbuc1
lda #PLAYFIELD_LINES*PLAYFIELD_COLS-1
sta r
jmp b1
// Read all lines and rewrite them
//SEG796 [338] phi from play_remove_lines::@6 to play_remove_lines::@1 [phi:play_remove_lines::@6->play_remove_lines::@1]
b1_from_b6:
//SEG797 [338] phi (byte) play_remove_lines::removed#11 = (byte) play_remove_lines::removed#8 [phi:play_remove_lines::@6->play_remove_lines::@1#0] -- register_copy
//SEG798 [338] phi (byte) play_remove_lines::y#8 = (byte) play_remove_lines::y#1 [phi:play_remove_lines::@6->play_remove_lines::@1#1] -- register_copy
//SEG799 [338] phi (byte) play_remove_lines::w#12 = (byte) play_remove_lines::w#11 [phi:play_remove_lines::@6->play_remove_lines::@1#2] -- register_copy
//SEG800 [338] phi (byte) play_remove_lines::r#3 = (byte) play_remove_lines::r#1 [phi:play_remove_lines::@6->play_remove_lines::@1#3] -- register_copy
jmp b1
//SEG801 play_remove_lines::@1
b1:
//SEG802 [339] phi from play_remove_lines::@1 to play_remove_lines::@2 [phi:play_remove_lines::@1->play_remove_lines::@2]
b2_from_b1:
//SEG803 [339] phi (byte) play_remove_lines::full#4 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:play_remove_lines::@1->play_remove_lines::@2#0] -- vbuz1=vbuc1
lda #1
sta full
//SEG804 [339] phi (byte) play_remove_lines::x#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_remove_lines::@1->play_remove_lines::@2#1] -- vbuz1=vbuc1
lda #0
sta x
//SEG805 [339] phi (byte) play_remove_lines::w#4 = (byte) play_remove_lines::w#12 [phi:play_remove_lines::@1->play_remove_lines::@2#2] -- register_copy
//SEG806 [339] phi (byte) play_remove_lines::r#2 = (byte) play_remove_lines::r#3 [phi:play_remove_lines::@1->play_remove_lines::@2#3] -- register_copy
jmp b2
//SEG807 [339] phi from play_remove_lines::@3 to play_remove_lines::@2 [phi:play_remove_lines::@3->play_remove_lines::@2]
b2_from_b3:
//SEG808 [339] phi (byte) play_remove_lines::full#4 = (byte) play_remove_lines::full#2 [phi:play_remove_lines::@3->play_remove_lines::@2#0] -- register_copy
//SEG809 [339] phi (byte) play_remove_lines::x#2 = (byte) play_remove_lines::x#1 [phi:play_remove_lines::@3->play_remove_lines::@2#1] -- register_copy
//SEG810 [339] phi (byte) play_remove_lines::w#4 = (byte) play_remove_lines::w#1 [phi:play_remove_lines::@3->play_remove_lines::@2#2] -- register_copy
//SEG811 [339] phi (byte) play_remove_lines::r#2 = (byte) play_remove_lines::r#1 [phi:play_remove_lines::@3->play_remove_lines::@2#3] -- register_copy
jmp b2
//SEG812 play_remove_lines::@2
b2:
//SEG813 [340] (byte) play_remove_lines::c#0 ← *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::r#2) -- vbuz1=pbuc1_derefidx_vbuz2
ldy r
lda playfield,y
sta c
//SEG814 [341] (byte) play_remove_lines::r#1 ← -- (byte) play_remove_lines::r#2 -- vbuz1=_dec_vbuz1
dec r
//SEG815 [342] if((byte) play_remove_lines::c#0!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_remove_lines::@9 -- vbuz1_neq_0_then_la1
lda c
cmp #0
bne b9_from_b2
//SEG816 [343] phi from play_remove_lines::@2 to play_remove_lines::@3 [phi:play_remove_lines::@2->play_remove_lines::@3]
b3_from_b2:
//SEG817 [343] phi (byte) play_remove_lines::full#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_remove_lines::@2->play_remove_lines::@3#0] -- vbuz1=vbuc1
lda #0
sta full
jmp b3
//SEG818 play_remove_lines::@3
b3:
//SEG819 [344] *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::w#4) ← (byte) play_remove_lines::c#0 -- pbuc1_derefidx_vbuz1=vbuz2
lda c
ldy w
sta playfield,y
//SEG820 [345] (byte) play_remove_lines::w#1 ← -- (byte) play_remove_lines::w#4 -- vbuz1=_dec_vbuz1
dec w
//SEG821 [346] (byte) play_remove_lines::x#1 ← ++ (byte) play_remove_lines::x#2 -- vbuz1=_inc_vbuz1
inc x
//SEG822 [347] if((byte) play_remove_lines::x#1!=(const byte) PLAYFIELD_COLS#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto play_remove_lines::@2 -- vbuz1_neq_vbuc1_then_la1
lda #PLAYFIELD_COLS-1+1
cmp x
bne b2_from_b3
jmp b4
//SEG823 play_remove_lines::@4
b4:
//SEG824 [348] if((byte) play_remove_lines::full#2!=(byte/signed byte/word/signed word/dword/signed dword) 1) goto play_remove_lines::@6 -- vbuz1_neq_vbuc1_then_la1
lda #1
cmp full
bne b6_from_b4
jmp b5
//SEG825 play_remove_lines::@5
b5:
//SEG826 [349] (byte) play_remove_lines::w#2 ← (byte) play_remove_lines::w#1 + (const byte) PLAYFIELD_COLS#0 -- vbuz1=vbuz1_plus_vbuc1
lax w
axs #-[PLAYFIELD_COLS]
stx w
//SEG827 [350] (byte) play_remove_lines::removed#1 ← ++ (byte) play_remove_lines::removed#11 -- vbuz1=_inc_vbuz1
inc removed
//SEG828 [351] phi from play_remove_lines::@4 play_remove_lines::@5 to play_remove_lines::@6 [phi:play_remove_lines::@4/play_remove_lines::@5->play_remove_lines::@6]
b6_from_b4:
b6_from_b5:
//SEG829 [351] phi (byte) play_remove_lines::removed#8 = (byte) play_remove_lines::removed#11 [phi:play_remove_lines::@4/play_remove_lines::@5->play_remove_lines::@6#0] -- register_copy
//SEG830 [351] phi (byte) play_remove_lines::w#11 = (byte) play_remove_lines::w#1 [phi:play_remove_lines::@4/play_remove_lines::@5->play_remove_lines::@6#1] -- register_copy
jmp b6
//SEG831 play_remove_lines::@6
b6:
//SEG832 [352] (byte) play_remove_lines::y#1 ← ++ (byte) play_remove_lines::y#8 -- vbuz1=_inc_vbuz1
inc y
//SEG833 [353] if((byte) play_remove_lines::y#1!=(const byte) PLAYFIELD_LINES#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto play_remove_lines::@1 -- vbuz1_neq_vbuc1_then_la1
lda #PLAYFIELD_LINES-1+1
cmp y
bne b1_from_b6
//SEG834 [354] phi from play_remove_lines::@6 play_remove_lines::@8 to play_remove_lines::@7 [phi:play_remove_lines::@6/play_remove_lines::@8->play_remove_lines::@7]
b7_from_b6:
b7_from_b8:
//SEG835 [354] phi (byte) play_remove_lines::w#6 = (byte) play_remove_lines::w#11 [phi:play_remove_lines::@6/play_remove_lines::@8->play_remove_lines::@7#0] -- register_copy
jmp b7
// Write zeros in the rest of the lines
//SEG836 play_remove_lines::@7
b7:
//SEG837 [355] if((byte) play_remove_lines::w#6!=(byte/word/signed word/dword/signed dword) $ff) goto play_remove_lines::@8 -- vbuz1_neq_vbuc1_then_la1
lda #$ff
cmp w
bne b8
jmp breturn
//SEG838 play_remove_lines::@return
breturn:
//SEG839 [356] return
rts
//SEG840 play_remove_lines::@8
b8:
//SEG841 [357] *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::w#6) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- pbuc1_derefidx_vbuz1=vbuc2
lda #0
ldy w
sta playfield,y
//SEG842 [358] (byte) play_remove_lines::w#3 ← -- (byte) play_remove_lines::w#6 -- vbuz1=_dec_vbuz1
dec w
jmp b7_from_b8
//SEG843 [359] phi from play_remove_lines::@2 to play_remove_lines::@9 [phi:play_remove_lines::@2->play_remove_lines::@9]
b9_from_b2:
jmp b9
//SEG844 play_remove_lines::@9
b9:
//SEG845 [343] phi from play_remove_lines::@9 to play_remove_lines::@3 [phi:play_remove_lines::@9->play_remove_lines::@3]
b3_from_b9:
//SEG846 [343] phi (byte) play_remove_lines::full#2 = (byte) play_remove_lines::full#4 [phi:play_remove_lines::@9->play_remove_lines::@3#0] -- register_copy
jmp b3
}
//SEG847 play_lock_current
// Lock the current piece onto the playfield
play_lock_current: {
.label ypos2 = $53
.label playfield_line = $bc
.label col = $56
.label i = $be
.label c = $57
.label l = $54
.label i_2 = $55
.label i_3 = $55
.label i_7 = $55
.label i_9 = $55
//SEG848 [360] (byte) play_lock_current::ypos2#0 ← (byte) current_ypos#100 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuz1=vbuz2_rol_1
lda current_ypos
asl
sta ypos2
//SEG849 [361] phi from play_lock_current to play_lock_current::@1 [phi:play_lock_current->play_lock_current::@1]
b1_from_play_lock_current:
//SEG850 [361] phi (byte) play_lock_current::l#6 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_lock_current->play_lock_current::@1#0] -- vbuz1=vbuc1
lda #0
sta l
//SEG851 [361] phi (byte) play_lock_current::i#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_lock_current->play_lock_current::@1#1] -- vbuz1=vbuc1
lda #0
sta i_3
//SEG852 [361] phi (byte) play_lock_current::ypos2#2 = (byte) play_lock_current::ypos2#0 [phi:play_lock_current->play_lock_current::@1#2] -- register_copy
jmp b1
//SEG853 play_lock_current::@1
b1:
//SEG854 [362] (byte*) play_lock_current::playfield_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte) play_lock_current::ypos2#2) -- pbuz1=pptc1_derefidx_vbuz2
ldy ypos2
lda playfield_lines,y
sta playfield_line
lda playfield_lines+1,y
sta playfield_line+1
//SEG855 [363] (byte) play_lock_current::col#0 ← (byte) current_xpos#124 -- vbuz1=vbuz2
lda current_xpos
sta col
//SEG856 [364] phi from play_lock_current::@1 to play_lock_current::@2 [phi:play_lock_current::@1->play_lock_current::@2]
b2_from_b1:
//SEG857 [364] phi (byte) play_lock_current::c#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_lock_current::@1->play_lock_current::@2#0] -- vbuz1=vbuc1
lda #0
sta c
//SEG858 [364] phi (byte) play_lock_current::col#2 = (byte) play_lock_current::col#0 [phi:play_lock_current::@1->play_lock_current::@2#1] -- register_copy
//SEG859 [364] phi (byte) play_lock_current::i#2 = (byte) play_lock_current::i#3 [phi:play_lock_current::@1->play_lock_current::@2#2] -- register_copy
jmp b2
//SEG860 play_lock_current::@2
b2:
//SEG861 [365] (byte) play_lock_current::i#1 ← ++ (byte) play_lock_current::i#2 -- vbuz1=_inc_vbuz2
ldy i_2
iny
sty i
//SEG862 [366] if(*((byte*) current_piece_gfx#114 + (byte) play_lock_current::i#2)==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_lock_current::@3 -- pbuz1_derefidx_vbuz2_eq_0_then_la1
ldy i_2
lda (current_piece_gfx),y
cmp #0
beq b3
jmp b4
//SEG863 play_lock_current::@4
b4:
//SEG864 [367] *((byte*) play_lock_current::playfield_line#0 + (byte) play_lock_current::col#2) ← (byte) current_piece_char#10 -- pbuz1_derefidx_vbuz2=vbuz3
lda current_piece_char
ldy col
sta (playfield_line),y
jmp b3
//SEG865 play_lock_current::@3
b3:
//SEG866 [368] (byte) play_lock_current::col#1 ← ++ (byte) play_lock_current::col#2 -- vbuz1=_inc_vbuz1
inc col
//SEG867 [369] (byte) play_lock_current::c#1 ← ++ (byte) play_lock_current::c#2 -- vbuz1=_inc_vbuz1
inc c
//SEG868 [370] if((byte) play_lock_current::c#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto play_lock_current::@7 -- vbuz1_neq_vbuc1_then_la1
lda #4
cmp c
bne b7
jmp b5
//SEG869 play_lock_current::@5
b5:
//SEG870 [371] (byte) play_lock_current::ypos2#1 ← (byte) play_lock_current::ypos2#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 -- vbuz1=vbuz1_plus_2
lda ypos2
clc
adc #2
sta ypos2
//SEG871 [372] (byte) play_lock_current::l#1 ← ++ (byte) play_lock_current::l#6 -- vbuz1=_inc_vbuz1
inc l
//SEG872 [373] if((byte) play_lock_current::l#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto play_lock_current::@6 -- vbuz1_neq_vbuc1_then_la1
lda #4
cmp l
bne b6
jmp breturn
//SEG873 play_lock_current::@return
breturn:
//SEG874 [374] return
rts
//SEG875 play_lock_current::@6
b6:
//SEG876 [375] (byte~) play_lock_current::i#7 ← (byte) play_lock_current::i#1 -- vbuz1=vbuz2
lda i
sta i_7
//SEG877 [361] phi from play_lock_current::@6 to play_lock_current::@1 [phi:play_lock_current::@6->play_lock_current::@1]
b1_from_b6:
//SEG878 [361] phi (byte) play_lock_current::l#6 = (byte) play_lock_current::l#1 [phi:play_lock_current::@6->play_lock_current::@1#0] -- register_copy
//SEG879 [361] phi (byte) play_lock_current::i#3 = (byte~) play_lock_current::i#7 [phi:play_lock_current::@6->play_lock_current::@1#1] -- register_copy
//SEG880 [361] phi (byte) play_lock_current::ypos2#2 = (byte) play_lock_current::ypos2#1 [phi:play_lock_current::@6->play_lock_current::@1#2] -- register_copy
jmp b1
//SEG881 play_lock_current::@7
b7:
//SEG882 [376] (byte~) play_lock_current::i#9 ← (byte) play_lock_current::i#1 -- vbuz1=vbuz2
lda i
sta i_9
//SEG883 [364] phi from play_lock_current::@7 to play_lock_current::@2 [phi:play_lock_current::@7->play_lock_current::@2]
b2_from_b7:
//SEG884 [364] phi (byte) play_lock_current::c#2 = (byte) play_lock_current::c#1 [phi:play_lock_current::@7->play_lock_current::@2#0] -- register_copy
//SEG885 [364] phi (byte) play_lock_current::col#2 = (byte) play_lock_current::col#1 [phi:play_lock_current::@7->play_lock_current::@2#1] -- register_copy
//SEG886 [364] phi (byte) play_lock_current::i#2 = (byte~) play_lock_current::i#9 [phi:play_lock_current::@7->play_lock_current::@2#2] -- register_copy
jmp b2
}
//SEG887 keyboard_event_pressed
// Determine if a specific key is currently pressed based on the last keyboard_event_scan()
// Returns 0 is not pressed and non-0 if pressed
// keyboard_event_pressed(byte zeropage($58) keycode)
keyboard_event_pressed: {
.label _0 = $bf
.label _1 = $c1
.label return = $c6
.label return_1 = $c8
.label return_2 = $ca
.label row_bits = $c0
.label return_10 = $cc
.label keycode = $58
.label return_11 = $c2
.label return_12 = $a4
//SEG888 [378] (byte~) keyboard_event_pressed::$0 ← (byte) keyboard_event_pressed::keycode#5 >> (byte/signed byte/word/signed word/dword/signed dword) 3 -- vbuz1=vbuz2_ror_3
lda keycode
lsr
lsr
lsr
sta _0
//SEG889 [379] (byte) keyboard_event_pressed::row_bits#0 ← *((const byte[8]) keyboard_scan_values#0 + (byte~) keyboard_event_pressed::$0) -- vbuz1=pbuc1_derefidx_vbuz2
ldy _0
lda keyboard_scan_values,y
sta row_bits
//SEG890 [380] (byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#5 & (byte/signed byte/word/signed word/dword/signed dword) 7 -- vbuz1=vbuz2_band_vbuc1
lda #7
and keycode
sta _1
//SEG891 [381] (byte) keyboard_event_pressed::return#11 ← (byte) keyboard_event_pressed::row_bits#0 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte~) keyboard_event_pressed::$1) -- vbuz1=vbuz2_band_pbuc1_derefidx_vbuz3
lda row_bits
ldy _1
and keyboard_matrix_col_bitmask,y
sta return_11
jmp breturn
//SEG892 keyboard_event_pressed::@return
breturn:
//SEG893 [382] return
rts
}
//SEG894 keyboard_event_get
// Get the next event from the keyboard event buffer.
// Returns $ff if there is no event waiting. As all events are <$7f it is enough to examine bit 7 when determining if there is any event to process.
// The buffer is filled by keyboard_event_scan()
keyboard_event_get: {
.label return = $59
.label return_3 = $7b
//SEG895 [383] if((byte) keyboard_events_size#13==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_get::@return -- vbuz1_eq_0_then_la1
lda keyboard_events_size
cmp #0
beq breturn_from_keyboard_event_get
jmp b1
//SEG896 keyboard_event_get::@1
b1:
//SEG897 [384] (byte) keyboard_events_size#4 ← -- (byte) keyboard_events_size#13 -- vbuz1=_dec_vbuz1
dec keyboard_events_size
//SEG898 [385] (byte) keyboard_event_get::return#1 ← *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#4) -- vbuz1=pbuc1_derefidx_vbuz2
ldy keyboard_events_size
lda keyboard_events,y
sta return
//SEG899 [386] phi from keyboard_event_get::@1 to keyboard_event_get::@return [phi:keyboard_event_get::@1->keyboard_event_get::@return]
breturn_from_b1:
//SEG900 [386] phi (byte) keyboard_events_size#16 = (byte) keyboard_events_size#4 [phi:keyboard_event_get::@1->keyboard_event_get::@return#0] -- register_copy
//SEG901 [386] phi (byte) keyboard_event_get::return#2 = (byte) keyboard_event_get::return#1 [phi:keyboard_event_get::@1->keyboard_event_get::@return#1] -- register_copy
jmp breturn
//SEG902 [386] phi from keyboard_event_get to keyboard_event_get::@return [phi:keyboard_event_get->keyboard_event_get::@return]
breturn_from_keyboard_event_get:
//SEG903 [386] phi (byte) keyboard_events_size#16 = (byte) keyboard_events_size#13 [phi:keyboard_event_get->keyboard_event_get::@return#0] -- register_copy
//SEG904 [386] phi (byte) keyboard_event_get::return#2 = (byte/word/signed word/dword/signed dword) $ff [phi:keyboard_event_get->keyboard_event_get::@return#1] -- vbuz1=vbuc1
lda #$ff
sta return
jmp breturn
//SEG905 keyboard_event_get::@return
breturn:
//SEG906 [387] return
rts
}
//SEG907 keyboard_event_scan
// Scans the entire matrix to determine which keys have been pressed/depressed.
// Generates keyboard events into the event buffer. Events can be read using keyboard_event_get().
// Handles debounce and only generates events when the status of a key changes.
// Also stores current status of modifiers in keyboard_modifiers.
keyboard_event_scan: {
.label _0 = $c7
.label _3 = $c9
.label _6 = $cb
.label _9 = $cd
.label _15 = $ce
.label _16 = $cf
.label _23 = $d1
.label row_scan = $c5
.label keycode = $5c
.label row = $5a
.label col = $5b
.label event_type = $d0
//SEG908 [389] phi from keyboard_event_scan to keyboard_event_scan::@7 [phi:keyboard_event_scan->keyboard_event_scan::@7]
b7_from_keyboard_event_scan:
//SEG909 [389] phi (byte) keyboard_events_size#30 = (byte) keyboard_events_size#19 [phi:keyboard_event_scan->keyboard_event_scan::@7#0] -- register_copy
//SEG910 [389] phi (byte) keyboard_event_scan::keycode#11 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:keyboard_event_scan->keyboard_event_scan::@7#1] -- vbuz1=vbuc1
lda #0
sta keycode
//SEG911 [389] phi (byte) keyboard_event_scan::row#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:keyboard_event_scan->keyboard_event_scan::@7#2] -- vbuz1=vbuc1
lda #0
sta row
jmp b7
//SEG912 [389] phi from keyboard_event_scan::@8 to keyboard_event_scan::@7 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7]
b7_from_b8:
//SEG913 [389] phi (byte) keyboard_events_size#30 = (byte) keyboard_events_size#13 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7#0] -- register_copy
//SEG914 [389] phi (byte) keyboard_event_scan::keycode#11 = (byte) keyboard_event_scan::keycode#14 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7#1] -- register_copy
//SEG915 [389] phi (byte) keyboard_event_scan::row#2 = (byte) keyboard_event_scan::row#1 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7#2] -- register_copy
jmp b7
//SEG916 keyboard_event_scan::@7
b7:
//SEG917 [390] (byte) keyboard_matrix_read::rowid#0 ← (byte) keyboard_event_scan::row#2 -- vbuz1=vbuz2
lda row
sta keyboard_matrix_read.rowid
//SEG918 [391] call keyboard_matrix_read
jsr keyboard_matrix_read
//SEG919 [392] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0 -- vbuz1=vbuz2
lda keyboard_matrix_read.return
sta keyboard_matrix_read.return_2
jmp b19
//SEG920 keyboard_event_scan::@19
b19:
//SEG921 [393] (byte) keyboard_event_scan::row_scan#0 ← (byte) keyboard_matrix_read::return#2 -- vbuz1=vbuz2
lda keyboard_matrix_read.return_2
sta row_scan
//SEG922 [394] if((byte) keyboard_event_scan::row_scan#0!=*((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2)) goto keyboard_event_scan::@9 -- vbuz1_neq_pbuc1_derefidx_vbuz2_then_la1
lda row_scan
ldy row
cmp keyboard_scan_values,y
bne b9_from_b19
jmp b16
//SEG923 keyboard_event_scan::@16
b16:
//SEG924 [395] (byte) keyboard_event_scan::keycode#1 ← (byte) keyboard_event_scan::keycode#11 + (byte/signed byte/word/signed word/dword/signed dword) 8 -- vbuz1=vbuz1_plus_vbuc1
lax keycode
axs #-[8]
stx keycode
//SEG925 [396] phi from keyboard_event_scan::@15 keyboard_event_scan::@16 to keyboard_event_scan::@8 [phi:keyboard_event_scan::@15/keyboard_event_scan::@16->keyboard_event_scan::@8]
b8_from_b15:
b8_from_b16:
//SEG926 [396] phi (byte) keyboard_events_size#13 = (byte) keyboard_events_size#29 [phi:keyboard_event_scan::@15/keyboard_event_scan::@16->keyboard_event_scan::@8#0] -- register_copy
//SEG927 [396] phi (byte) keyboard_event_scan::keycode#14 = (byte) keyboard_event_scan::keycode#15 [phi:keyboard_event_scan::@15/keyboard_event_scan::@16->keyboard_event_scan::@8#1] -- register_copy
jmp b8
//SEG928 keyboard_event_scan::@8
b8:
//SEG929 [397] (byte) keyboard_event_scan::row#1 ← ++ (byte) keyboard_event_scan::row#2 -- vbuz1=_inc_vbuz1
inc row
//SEG930 [398] if((byte) keyboard_event_scan::row#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto keyboard_event_scan::@7 -- vbuz1_neq_vbuc1_then_la1
lda #8
cmp row
bne b7_from_b8
//SEG931 [399] phi from keyboard_event_scan::@8 to keyboard_event_scan::@17 [phi:keyboard_event_scan::@8->keyboard_event_scan::@17]
b17_from_b8:
jmp b17
//SEG932 keyboard_event_scan::@17
b17:
//SEG933 [400] call keyboard_event_pressed
//SEG934 [377] phi from keyboard_event_scan::@17 to keyboard_event_pressed [phi:keyboard_event_scan::@17->keyboard_event_pressed]
keyboard_event_pressed_from_b17:
//SEG935 [377] phi (byte) keyboard_event_pressed::keycode#5 = (const byte) KEY_LSHIFT#0 [phi:keyboard_event_scan::@17->keyboard_event_pressed#0] -- vbuz1=vbuc1
lda #KEY_LSHIFT
sta keyboard_event_pressed.keycode
jsr keyboard_event_pressed
//SEG936 [401] (byte) keyboard_event_pressed::return#0 ← (byte) keyboard_event_pressed::return#11 -- vbuz1=vbuz2
lda keyboard_event_pressed.return_11
sta keyboard_event_pressed.return
jmp b20
//SEG937 keyboard_event_scan::@20
b20:
//SEG938 [402] (byte~) keyboard_event_scan::$0 ← (byte) keyboard_event_pressed::return#0 -- vbuz1=vbuz2
lda keyboard_event_pressed.return
sta _0
//SEG939 [403] if((byte~) keyboard_event_scan::$0==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@1 -- vbuz1_eq_0_then_la1
lda _0
cmp #0
beq b1_from_b20
//SEG940 [404] phi from keyboard_event_scan::@20 to keyboard_event_scan::@18 [phi:keyboard_event_scan::@20->keyboard_event_scan::@18]
b18_from_b20:
jmp b18
//SEG941 keyboard_event_scan::@18
b18:
//SEG942 [405] phi from keyboard_event_scan::@18 keyboard_event_scan::@20 to keyboard_event_scan::@1 [phi:keyboard_event_scan::@18/keyboard_event_scan::@20->keyboard_event_scan::@1]
b1_from_b18:
b1_from_b20:
jmp b1
//SEG943 keyboard_event_scan::@1
b1:
//SEG944 [406] call keyboard_event_pressed
//SEG945 [377] phi from keyboard_event_scan::@1 to keyboard_event_pressed [phi:keyboard_event_scan::@1->keyboard_event_pressed]
keyboard_event_pressed_from_b1:
//SEG946 [377] phi (byte) keyboard_event_pressed::keycode#5 = (const byte) KEY_RSHIFT#0 [phi:keyboard_event_scan::@1->keyboard_event_pressed#0] -- vbuz1=vbuc1
lda #KEY_RSHIFT
sta keyboard_event_pressed.keycode
jsr keyboard_event_pressed
//SEG947 [407] (byte) keyboard_event_pressed::return#1 ← (byte) keyboard_event_pressed::return#11 -- vbuz1=vbuz2
lda keyboard_event_pressed.return_11
sta keyboard_event_pressed.return_1
jmp b21
//SEG948 keyboard_event_scan::@21
b21:
//SEG949 [408] (byte~) keyboard_event_scan::$3 ← (byte) keyboard_event_pressed::return#1 -- vbuz1=vbuz2
lda keyboard_event_pressed.return_1
sta _3
//SEG950 [409] if((byte~) keyboard_event_scan::$3==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@2 -- vbuz1_eq_0_then_la1
lda _3
cmp #0
beq b2_from_b21
//SEG951 [410] phi from keyboard_event_scan::@21 to keyboard_event_scan::@4 [phi:keyboard_event_scan::@21->keyboard_event_scan::@4]
b4_from_b21:
jmp b4
//SEG952 keyboard_event_scan::@4
b4:
//SEG953 [411] phi from keyboard_event_scan::@21 keyboard_event_scan::@4 to keyboard_event_scan::@2 [phi:keyboard_event_scan::@21/keyboard_event_scan::@4->keyboard_event_scan::@2]
b2_from_b21:
b2_from_b4:
jmp b2
//SEG954 keyboard_event_scan::@2
b2:
//SEG955 [412] call keyboard_event_pressed
//SEG956 [377] phi from keyboard_event_scan::@2 to keyboard_event_pressed [phi:keyboard_event_scan::@2->keyboard_event_pressed]
keyboard_event_pressed_from_b2:
//SEG957 [377] phi (byte) keyboard_event_pressed::keycode#5 = (const byte) KEY_CTRL#0 [phi:keyboard_event_scan::@2->keyboard_event_pressed#0] -- vbuz1=vbuc1
lda #KEY_CTRL
sta keyboard_event_pressed.keycode
jsr keyboard_event_pressed
//SEG958 [413] (byte) keyboard_event_pressed::return#2 ← (byte) keyboard_event_pressed::return#11 -- vbuz1=vbuz2
lda keyboard_event_pressed.return_11
sta keyboard_event_pressed.return_2
jmp b22
//SEG959 keyboard_event_scan::@22
b22:
//SEG960 [414] (byte~) keyboard_event_scan::$6 ← (byte) keyboard_event_pressed::return#2 -- vbuz1=vbuz2
lda keyboard_event_pressed.return_2
sta _6
//SEG961 [415] if((byte~) keyboard_event_scan::$6==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@3 -- vbuz1_eq_0_then_la1
lda _6
cmp #0
beq b3_from_b22
//SEG962 [416] phi from keyboard_event_scan::@22 to keyboard_event_scan::@5 [phi:keyboard_event_scan::@22->keyboard_event_scan::@5]
b5_from_b22:
jmp b5
//SEG963 keyboard_event_scan::@5
b5:
//SEG964 [417] phi from keyboard_event_scan::@22 keyboard_event_scan::@5 to keyboard_event_scan::@3 [phi:keyboard_event_scan::@22/keyboard_event_scan::@5->keyboard_event_scan::@3]
b3_from_b22:
b3_from_b5:
jmp b3
//SEG965 keyboard_event_scan::@3
b3:
//SEG966 [418] call keyboard_event_pressed
//SEG967 [377] phi from keyboard_event_scan::@3 to keyboard_event_pressed [phi:keyboard_event_scan::@3->keyboard_event_pressed]
keyboard_event_pressed_from_b3:
//SEG968 [377] phi (byte) keyboard_event_pressed::keycode#5 = (const byte) KEY_COMMODORE#0 [phi:keyboard_event_scan::@3->keyboard_event_pressed#0] -- vbuz1=vbuc1
lda #KEY_COMMODORE
sta keyboard_event_pressed.keycode
jsr keyboard_event_pressed
//SEG969 [419] (byte) keyboard_event_pressed::return#10 ← (byte) keyboard_event_pressed::return#11 -- vbuz1=vbuz2
lda keyboard_event_pressed.return_11
sta keyboard_event_pressed.return_10
jmp b23
//SEG970 keyboard_event_scan::@23
b23:
//SEG971 [420] (byte~) keyboard_event_scan::$9 ← (byte) keyboard_event_pressed::return#10 -- vbuz1=vbuz2
lda keyboard_event_pressed.return_10
sta _9
//SEG972 [421] if((byte~) keyboard_event_scan::$9==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@return -- vbuz1_eq_0_then_la1
lda _9
cmp #0
beq breturn
//SEG973 [422] phi from keyboard_event_scan::@23 to keyboard_event_scan::@6 [phi:keyboard_event_scan::@23->keyboard_event_scan::@6]
b6_from_b23:
jmp b6
//SEG974 keyboard_event_scan::@6
b6:
jmp breturn
//SEG975 keyboard_event_scan::@return
breturn:
//SEG976 [423] return
rts
// Something has changed on the keyboard row - check each column
//SEG977 [424] phi from keyboard_event_scan::@10 to keyboard_event_scan::@9 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9]
b9_from_b10:
//SEG978 [424] phi (byte) keyboard_events_size#10 = (byte) keyboard_events_size#29 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9#0] -- register_copy
//SEG979 [424] phi (byte) keyboard_event_scan::keycode#10 = (byte) keyboard_event_scan::keycode#15 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9#1] -- register_copy
//SEG980 [424] phi (byte) keyboard_event_scan::col#2 = (byte) keyboard_event_scan::col#1 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9#2] -- register_copy
jmp b9
//SEG981 [424] phi from keyboard_event_scan::@19 to keyboard_event_scan::@9 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9]
b9_from_b19:
//SEG982 [424] phi (byte) keyboard_events_size#10 = (byte) keyboard_events_size#30 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9#0] -- register_copy
//SEG983 [424] phi (byte) keyboard_event_scan::keycode#10 = (byte) keyboard_event_scan::keycode#11 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9#1] -- register_copy
//SEG984 [424] phi (byte) keyboard_event_scan::col#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9#2] -- vbuz1=vbuc1
lda #0
sta col
jmp b9
//SEG985 keyboard_event_scan::@9
b9:
//SEG986 [425] (byte~) keyboard_event_scan::$15 ← (byte) keyboard_event_scan::row_scan#0 ^ *((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2) -- vbuz1=vbuz2_bxor_pbuc1_derefidx_vbuz3
lda row_scan
ldy row
eor keyboard_scan_values,y
sta _15
//SEG987 [426] (byte~) keyboard_event_scan::$16 ← (byte~) keyboard_event_scan::$15 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte) keyboard_event_scan::col#2) -- vbuz1=vbuz2_band_pbuc1_derefidx_vbuz3
lda _15
ldy col
and keyboard_matrix_col_bitmask,y
sta _16
//SEG988 [427] if((byte~) keyboard_event_scan::$16==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@10 -- vbuz1_eq_0_then_la1
lda _16
cmp #0
beq b10_from_b9
jmp b12
//SEG989 keyboard_event_scan::@12
b12:
//SEG990 [428] if((byte) keyboard_events_size#10==(byte/signed byte/word/signed word/dword/signed dword) 8) goto keyboard_event_scan::@10 -- vbuz1_eq_vbuc1_then_la1
lda #8
cmp keyboard_events_size
beq b10_from_b12
jmp b13
//SEG991 keyboard_event_scan::@13
b13:
//SEG992 [429] (byte) keyboard_event_scan::event_type#0 ← (byte) keyboard_event_scan::row_scan#0 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte) keyboard_event_scan::col#2) -- vbuz1=vbuz2_band_pbuc1_derefidx_vbuz3
lda row_scan
ldy col
and keyboard_matrix_col_bitmask,y
sta event_type
//SEG993 [430] if((byte) keyboard_event_scan::event_type#0==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@11 -- vbuz1_eq_0_then_la1
lda event_type
cmp #0
beq b11
jmp b14
//SEG994 keyboard_event_scan::@14
b14:
//SEG995 [431] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte) keyboard_event_scan::keycode#10 -- pbuc1_derefidx_vbuz1=vbuz2
// Key pressed
lda keycode
ldy keyboard_events_size
sta keyboard_events,y
//SEG996 [432] (byte) keyboard_events_size#2 ← ++ (byte) keyboard_events_size#10 -- vbuz1=_inc_vbuz1
inc keyboard_events_size
//SEG997 [433] phi from keyboard_event_scan::@11 keyboard_event_scan::@12 keyboard_event_scan::@14 keyboard_event_scan::@9 to keyboard_event_scan::@10 [phi:keyboard_event_scan::@11/keyboard_event_scan::@12/keyboard_event_scan::@14/keyboard_event_scan::@9->keyboard_event_scan::@10]
b10_from_b11:
b10_from_b12:
b10_from_b14:
b10_from_b9:
//SEG998 [433] phi (byte) keyboard_events_size#29 = (byte) keyboard_events_size#1 [phi:keyboard_event_scan::@11/keyboard_event_scan::@12/keyboard_event_scan::@14/keyboard_event_scan::@9->keyboard_event_scan::@10#0] -- register_copy
jmp b10
//SEG999 keyboard_event_scan::@10
b10:
//SEG1000 [434] (byte) keyboard_event_scan::keycode#15 ← ++ (byte) keyboard_event_scan::keycode#10 -- vbuz1=_inc_vbuz1
inc keycode
//SEG1001 [435] (byte) keyboard_event_scan::col#1 ← ++ (byte) keyboard_event_scan::col#2 -- vbuz1=_inc_vbuz1
inc col
//SEG1002 [436] if((byte) keyboard_event_scan::col#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto keyboard_event_scan::@9 -- vbuz1_neq_vbuc1_then_la1
lda #8
cmp col
bne b9_from_b10
jmp b15
//SEG1003 keyboard_event_scan::@15
b15:
//SEG1004 [437] *((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2) ← (byte) keyboard_event_scan::row_scan#0 -- pbuc1_derefidx_vbuz1=vbuz2
// Store the current keyboard status for the row to debounce
lda row_scan
ldy row
sta keyboard_scan_values,y
jmp b8_from_b15
//SEG1005 keyboard_event_scan::@11
b11:
//SEG1006 [438] (byte/word/dword~) keyboard_event_scan::$23 ← (byte) keyboard_event_scan::keycode#10 | (byte/signed byte/word/signed word/dword/signed dword) $40 -- vbuz1=vbuz2_bor_vbuc1
lda #$40
ora keycode
sta _23
//SEG1007 [439] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte/word/dword~) keyboard_event_scan::$23 -- pbuc1_derefidx_vbuz1=vbuz2
// Key released
lda _23
ldy keyboard_events_size
sta keyboard_events,y
//SEG1008 [440] (byte) keyboard_events_size#1 ← ++ (byte) keyboard_events_size#10 -- vbuz1=_inc_vbuz1
inc keyboard_events_size
jmp b10_from_b11
}
//SEG1009 keyboard_matrix_read
// Read a single row of the keyboard matrix
// The row ID (0-7) of the keyboard matrix row to read. See the C64 key matrix for row IDs.
// Returns the keys pressed on the row as bits according to the C64 key matrix.
// Notice: If the C64 normal interrupt is still running it will occasionally interrupt right between the read & write
// leading to erroneous readings. You must disable kill the normal interrupt or sei/cli around calls to the keyboard matrix reader.
// keyboard_matrix_read(byte zeropage($c3) rowid)
keyboard_matrix_read: {
.label return = $d2
.label rowid = $c3
.label return_2 = $c4
//SEG1010 [441] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#0) -- _deref_pbuc1=pbuc2_derefidx_vbuz1
ldy rowid
lda keyboard_matrix_row_bitmask,y
sta CIA1_PORT_A
//SEG1011 [442] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B#0) -- vbuz1=_bnot__deref_pbuc1
lda CIA1_PORT_B
eor #$ff
sta return
jmp breturn
//SEG1012 keyboard_matrix_read::@return
breturn:
//SEG1013 [443] return
rts
}
//SEG1014 render_show
// Update $D018 to show the current screen (used for double buffering)
render_show: {
.const toD0181_return = (>(PLAYFIELD_SCREEN_1&$3fff)*4)|(>PLAYFIELD_CHARSET)/4&$f
.const toD0182_return = (>(PLAYFIELD_SCREEN_2&$3fff)*4)|(>PLAYFIELD_CHARSET)/4&$f
.label d018val = $5e
//SEG1015 [444] if((byte) render_screen_show#16==(byte/signed byte/word/signed word/dword/signed dword) 0) goto render_show::toD0181 -- vbuz1_eq_0_then_la1
lda render_screen_show
cmp #0
beq toD0181_from_render_show
//SEG1016 [445] phi from render_show to render_show::toD0182 [phi:render_show->render_show::toD0182]
toD0182_from_render_show:
jmp toD0182
//SEG1017 render_show::toD0182
toD0182:
//SEG1018 [446] phi from render_show::toD0182 to render_show::@1 [phi:render_show::toD0182->render_show::@1]
b1_from_toD0182:
//SEG1019 [446] phi (byte) render_show::d018val#3 = (const byte) render_show::toD0182_return#0 [phi:render_show::toD0182->render_show::@1#0] -- vbuz1=vbuc1
lda #toD0182_return
sta d018val
jmp b1
//SEG1020 render_show::@1
b1:
//SEG1021 [447] *((const byte*) D018#0) ← (byte) render_show::d018val#3 -- _deref_pbuc1=vbuz1
lda d018val
sta D018
//SEG1022 [448] *((const byte*) BGCOL2#0) ← *((const byte[]) PIECES_COLORS_1#0 + (byte) level#10) -- _deref_pbuc1=pbuc2_derefidx_vbuz1
ldy level
lda PIECES_COLORS_1,y
sta BGCOL2
//SEG1023 [449] *((const byte*) BGCOL3#0) ← *((const byte[]) PIECES_COLORS_2#0 + (byte) level#10) -- _deref_pbuc1=pbuc2_derefidx_vbuz1
ldy level
lda PIECES_COLORS_2,y
sta BGCOL3
//SEG1024 [450] (byte) render_screen_showing#1 ← (byte) render_screen_show#16 -- vbuz1=vbuz2
lda render_screen_show
sta render_screen_showing
jmp breturn
//SEG1025 render_show::@return
breturn:
//SEG1026 [451] return
rts
//SEG1027 [452] phi from render_show to render_show::toD0181 [phi:render_show->render_show::toD0181]
toD0181_from_render_show:
jmp toD0181
//SEG1028 render_show::toD0181
toD0181:
//SEG1029 [446] phi from render_show::toD0181 to render_show::@1 [phi:render_show::toD0181->render_show::@1]
b1_from_toD0181:
//SEG1030 [446] phi (byte) render_show::d018val#3 = (const byte) render_show::toD0181_return#0 [phi:render_show::toD0181->render_show::@1#0] -- vbuz1=vbuc1
lda #toD0181_return
sta d018val
jmp b1
}
//SEG1031 play_init
// Initialize play data tables
play_init: {
.label _2 = $d3
.label pli = $60
.label idx = $62
.label j = $5f
.label b4 = $d4
.label b = $63
//SEG1032 [454] phi from play_init to play_init::@1 [phi:play_init->play_init::@1]
b1_from_play_init:
//SEG1033 [454] phi (byte) play_init::idx#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_init->play_init::@1#0] -- vbuz1=vbuc1
lda #0
sta idx
//SEG1034 [454] phi (byte*) play_init::pli#2 = (const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 [phi:play_init->play_init::@1#1] -- pbuz1=pbuc1
lda #<playfield
sta pli
lda #>playfield
sta pli+1
//SEG1035 [454] phi (byte) play_init::j#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_init->play_init::@1#2] -- vbuz1=vbuc1
lda #0
sta j
jmp b1
//SEG1036 [454] phi from play_init::@1 to play_init::@1 [phi:play_init::@1->play_init::@1]
b1_from_b1:
//SEG1037 [454] phi (byte) play_init::idx#2 = (byte) play_init::idx#1 [phi:play_init::@1->play_init::@1#0] -- register_copy
//SEG1038 [454] phi (byte*) play_init::pli#2 = (byte*) play_init::pli#1 [phi:play_init::@1->play_init::@1#1] -- register_copy
//SEG1039 [454] phi (byte) play_init::j#2 = (byte) play_init::j#1 [phi:play_init::@1->play_init::@1#2] -- register_copy
jmp b1
//SEG1040 play_init::@1
b1:
//SEG1041 [455] (byte~) play_init::$2 ← (byte) play_init::j#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuz1=vbuz2_rol_1
lda j
asl
sta _2
//SEG1042 [456] *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte~) play_init::$2) ← (byte*) play_init::pli#2 -- pptc1_derefidx_vbuz1=pbuz2
ldy _2
lda pli
sta playfield_lines,y
lda pli+1
sta playfield_lines+1,y
//SEG1043 [457] *((const byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx#0 + (byte) play_init::j#2) ← (byte) play_init::idx#2 -- pbuc1_derefidx_vbuz1=vbuz2
lda idx
ldy j
sta playfield_lines_idx,y
//SEG1044 [458] (byte*) play_init::pli#1 ← (byte*) play_init::pli#2 + (const byte) PLAYFIELD_COLS#0 -- pbuz1=pbuz1_plus_vbuc1
lda #PLAYFIELD_COLS
clc
adc pli
sta pli
bcc !+
inc pli+1
!:
//SEG1045 [459] (byte) play_init::idx#1 ← (byte) play_init::idx#2 + (const byte) PLAYFIELD_COLS#0 -- vbuz1=vbuz1_plus_vbuc1
lax idx
axs #-[PLAYFIELD_COLS]
stx idx
//SEG1046 [460] (byte) play_init::j#1 ← ++ (byte) play_init::j#2 -- vbuz1=_inc_vbuz1
inc j
//SEG1047 [461] if((byte) play_init::j#1!=(const byte) PLAYFIELD_LINES#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto play_init::@1 -- vbuz1_neq_vbuc1_then_la1
lda #PLAYFIELD_LINES-1+1
cmp j
bne b1_from_b1
jmp b2
//SEG1048 play_init::@2
b2:
//SEG1049 [462] *((const byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx#0+(const byte) PLAYFIELD_LINES#0) ← (const byte) PLAYFIELD_COLS#0*(const byte) PLAYFIELD_LINES#0 -- _deref_pbuc1=vbuc2
lda #PLAYFIELD_COLS*PLAYFIELD_LINES
sta playfield_lines_idx+PLAYFIELD_LINES
//SEG1050 [463] (byte) current_movedown_slow#1 ← *((const byte[]) MOVEDOWN_SLOW_SPEEDS#0) -- vbuz1=_deref_pbuc1
// Set initial speed of moving down a tetromino
lda MOVEDOWN_SLOW_SPEEDS
sta current_movedown_slow
//SEG1051 [464] phi from play_init::@2 to play_init::@3 [phi:play_init::@2->play_init::@3]
b3_from_b2:
//SEG1052 [464] phi (byte) play_init::b#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_init::@2->play_init::@3#0] -- vbuz1=vbuc1
lda #0
sta b
jmp b3
// Set the initial score add values
//SEG1053 [464] phi from play_init::@3 to play_init::@3 [phi:play_init::@3->play_init::@3]
b3_from_b3:
//SEG1054 [464] phi (byte) play_init::b#2 = (byte) play_init::b#1 [phi:play_init::@3->play_init::@3#0] -- register_copy
jmp b3
//SEG1055 play_init::@3
b3:
//SEG1056 [465] (byte) play_init::b4#0 ← (byte) play_init::b#2 << (byte/signed byte/word/signed word/dword/signed dword) 2 -- vbuz1=vbuz2_rol_2
lda b
asl
asl
sta b4
//SEG1057 [466] *((const dword[5]) score_add_bcd#0 + (byte) play_init::b4#0) ← *((const dword[]) SCORE_BASE_BCD#0 + (byte) play_init::b4#0) -- pduc1_derefidx_vbuz1=pduc2_derefidx_vbuz1
ldy b4
lda SCORE_BASE_BCD,y
sta score_add_bcd,y
lda SCORE_BASE_BCD+1,y
sta score_add_bcd+1,y
lda SCORE_BASE_BCD+2,y
sta score_add_bcd+2,y
lda SCORE_BASE_BCD+3,y
sta score_add_bcd+3,y
//SEG1058 [467] (byte) play_init::b#1 ← ++ (byte) play_init::b#2 -- vbuz1=_inc_vbuz1
inc b
//SEG1059 [468] if((byte) play_init::b#1!=(byte/signed byte/word/signed word/dword/signed dword) 5) goto play_init::@3 -- vbuz1_neq_vbuc1_then_la1
lda #5
cmp b
bne b3_from_b3
jmp breturn
//SEG1060 play_init::@return
breturn:
//SEG1061 [469] return
rts
}
//SEG1062 sprites_irq_init
// Setup the IRQ
sprites_irq_init: {
//SEG1063 asm { sei }
sei
//SEG1064 [471] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2
// Acknowledge any IRQ and setup the next one
lda #IRQ_RASTER
sta IRQ_STATUS
//SEG1065 asm { ldaCIA1_INTERRUPT }
lda CIA1_INTERRUPT
//SEG1066 [473] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0 -- _deref_pbuc1=vbuc2
// Disable kernal & basic
lda #PROCPORT_DDR_MEMORY_MASK
sta PROCPORT_DDR
//SEG1067 [474] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 -- _deref_pbuc1=vbuc2
lda #PROCPORT_RAM_IO
sta PROCPORT
//SEG1068 [475] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0 -- _deref_pbuc1=vbuc2
// Disable CIA 1 Timer IRQ
lda #CIA_INTERRUPT_CLEAR
sta CIA1_INTERRUPT
//SEG1069 [476] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte/signed byte/word/signed word/dword/signed dword) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2
// Set raster line
lda #$7f
and VIC_CONTROL
sta VIC_CONTROL
//SEG1070 [477] *((const byte*) RASTER#0) ← (const byte) IRQ_RASTER_FIRST#0 -- _deref_pbuc1=vbuc2
lda #IRQ_RASTER_FIRST
sta RASTER
//SEG1071 [478] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2
// Enable Raster Interrupt
lda #IRQ_RASTER
sta IRQ_ENABLE
//SEG1072 [479] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_CLOBBER)(void()) sprites_irq() -- _deref_pptc1=pprc2
// Set the IRQ routine
lda #<sprites_irq
sta HARDWARE_IRQ
lda #>sprites_irq
sta HARDWARE_IRQ+1
//SEG1073 asm { cli }
cli
jmp breturn
//SEG1074 sprites_irq_init::@return
breturn:
//SEG1075 [481] return
rts
}
//SEG1076 sprites_init
// Setup the sprites
sprites_init: {
.label s2 = $d5
.label xpos = $65
.label s = $64
//SEG1077 [482] *((const byte*) SPRITES_ENABLE#0) ← (byte/signed byte/word/signed word/dword/signed dword) $f -- _deref_pbuc1=vbuc2
lda #$f
sta SPRITES_ENABLE
//SEG1078 [483] *((const byte*) SPRITES_MC#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- _deref_pbuc1=vbuc2
lda #0
sta SPRITES_MC
//SEG1079 [484] *((const byte*) SPRITES_EXPAND_Y#0) ← *((const byte*) SPRITES_MC#0) -- _deref_pbuc1=_deref_pbuc2
lda SPRITES_MC
sta SPRITES_EXPAND_Y
//SEG1080 [485] *((const byte*) SPRITES_EXPAND_X#0) ← *((const byte*) SPRITES_EXPAND_Y#0) -- _deref_pbuc1=_deref_pbuc2
lda SPRITES_EXPAND_Y
sta SPRITES_EXPAND_X
//SEG1081 [486] phi from sprites_init to sprites_init::@1 [phi:sprites_init->sprites_init::@1]
b1_from_sprites_init:
//SEG1082 [486] phi (byte) sprites_init::xpos#2 = (byte/signed byte/word/signed word/dword/signed dword) $18+(byte/signed byte/word/signed word/dword/signed dword) $f*(byte/signed byte/word/signed word/dword/signed dword) 8 [phi:sprites_init->sprites_init::@1#0] -- vbuz1=vbuc1
lda #$18+$f*8
sta xpos
//SEG1083 [486] phi (byte) sprites_init::s#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sprites_init->sprites_init::@1#1] -- vbuz1=vbuc1
lda #0
sta s
jmp b1
//SEG1084 [486] phi from sprites_init::@1 to sprites_init::@1 [phi:sprites_init::@1->sprites_init::@1]
b1_from_b1:
//SEG1085 [486] phi (byte) sprites_init::xpos#2 = (byte) sprites_init::xpos#1 [phi:sprites_init::@1->sprites_init::@1#0] -- register_copy
//SEG1086 [486] phi (byte) sprites_init::s#2 = (byte) sprites_init::s#1 [phi:sprites_init::@1->sprites_init::@1#1] -- register_copy
jmp b1
//SEG1087 sprites_init::@1
b1:
//SEG1088 [487] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuz1=vbuz2_rol_1
lda s
asl
sta s2
//SEG1089 [488] *((const byte*) SPRITES_XPOS#0 + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2 -- pbuc1_derefidx_vbuz1=vbuz2
lda xpos
ldy s2
sta SPRITES_XPOS,y
//SEG1090 [489] *((const byte*) SPRITES_COLS#0 + (byte) sprites_init::s#2) ← (const byte) BLACK#0 -- pbuc1_derefidx_vbuz1=vbuc2
lda #BLACK
ldy s
sta SPRITES_COLS,y
//SEG1091 [490] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte/signed byte/word/signed word/dword/signed dword) $18 -- vbuz1=vbuz1_plus_vbuc1
lax xpos
axs #-[$18]
stx xpos
//SEG1092 [491] (byte) sprites_init::s#1 ← ++ (byte) sprites_init::s#2 -- vbuz1=_inc_vbuz1
inc s
//SEG1093 [492] if((byte) sprites_init::s#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto sprites_init::@1 -- vbuz1_neq_vbuc1_then_la1
lda #4
cmp s
bne b1_from_b1
jmp breturn
//SEG1094 sprites_init::@return
breturn:
//SEG1095 [493] return
rts
}
//SEG1096 render_init
// Initialize rendering
render_init: {
.const vicSelectGfxBank1_toDd001_return = 3^(>PLAYFIELD_CHARSET)/$40
.label _13 = $d6
.label _14 = $d7
.label li_1 = $67
.label li_2 = $69
.label i = $66
jmp vicSelectGfxBank1
//SEG1097 render_init::vicSelectGfxBank1
vicSelectGfxBank1:
//SEG1098 [495] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte/signed byte/word/signed word/dword/signed dword) 3 -- _deref_pbuc1=vbuc2
lda #3
sta CIA2_PORT_A_DDR
//SEG1099 [496] phi from render_init::vicSelectGfxBank1 to render_init::vicSelectGfxBank1_toDd001 [phi:render_init::vicSelectGfxBank1->render_init::vicSelectGfxBank1_toDd001]
vicSelectGfxBank1_toDd001_from_vicSelectGfxBank1:
jmp vicSelectGfxBank1_toDd001
//SEG1100 render_init::vicSelectGfxBank1_toDd001
vicSelectGfxBank1_toDd001:
jmp vicSelectGfxBank1_b1
//SEG1101 render_init::vicSelectGfxBank1_@1
vicSelectGfxBank1_b1:
//SEG1102 [497] *((const byte*) CIA2_PORT_A#0) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2
lda #vicSelectGfxBank1_toDd001_return
sta CIA2_PORT_A
jmp b2
//SEG1103 render_init::@2
b2:
//SEG1104 [498] *((const byte*) D011#0) ← (const byte) VIC_ECM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte/signed byte/word/signed word/dword/signed dword) 3 -- _deref_pbuc1=vbuc2
// Enable Extended Background Color Mode
lda #VIC_ECM|VIC_DEN|VIC_RSEL|3
sta D011
//SEG1105 [499] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 -- _deref_pbuc1=vbuc2
lda #BLACK
sta BORDERCOL
//SEG1106 [500] *((const byte*) BGCOL1#0) ← (const byte) BLACK#0 -- _deref_pbuc1=vbuc2
lda #BLACK
sta BGCOL1
//SEG1107 [501] *((const byte*) BGCOL2#0) ← *((const byte[]) PIECES_COLORS_1#0) -- _deref_pbuc1=_deref_pbuc2
lda PIECES_COLORS_1
sta BGCOL2
//SEG1108 [502] *((const byte*) BGCOL3#0) ← *((const byte[]) PIECES_COLORS_2#0) -- _deref_pbuc1=_deref_pbuc2
lda PIECES_COLORS_2
sta BGCOL3
//SEG1109 [503] *((const byte*) BGCOL4#0) ← (const byte) GREY#0 -- _deref_pbuc1=vbuc2
lda #GREY
sta BGCOL4
//SEG1110 [504] call render_screen_original
//SEG1111 [517] phi from render_init::@2 to render_screen_original [phi:render_init::@2->render_screen_original]
render_screen_original_from_b2:
//SEG1112 [517] phi (byte*) render_screen_original::screen#9 = (const byte*) PLAYFIELD_SCREEN_1#0 [phi:render_init::@2->render_screen_original#0] -- pbuz1=pbuc1
lda #<PLAYFIELD_SCREEN_1
sta render_screen_original.screen
lda #>PLAYFIELD_SCREEN_1
sta render_screen_original.screen+1
jsr render_screen_original
//SEG1113 [505] phi from render_init::@2 to render_init::@3 [phi:render_init::@2->render_init::@3]
b3_from_b2:
jmp b3
//SEG1114 render_init::@3
b3:
//SEG1115 [506] call render_screen_original
//SEG1116 [517] phi from render_init::@3 to render_screen_original [phi:render_init::@3->render_screen_original]
render_screen_original_from_b3:
//SEG1117 [517] phi (byte*) render_screen_original::screen#9 = (const byte*) PLAYFIELD_SCREEN_2#0 [phi:render_init::@3->render_screen_original#0] -- pbuz1=pbuc1
lda #<PLAYFIELD_SCREEN_2
sta render_screen_original.screen
lda #>PLAYFIELD_SCREEN_2
sta render_screen_original.screen+1
jsr render_screen_original
//SEG1118 [507] phi from render_init::@3 to render_init::@1 [phi:render_init::@3->render_init::@1]
b1_from_b3:
//SEG1119 [507] phi (byte*) render_init::li_2#2 = (const byte*) PLAYFIELD_SCREEN_2#0+(byte/signed byte/word/signed word/dword/signed dword) 2*(byte/signed byte/word/signed word/dword/signed dword) $28+(byte/signed byte/word/signed word/dword/signed dword) $10 [phi:render_init::@3->render_init::@1#0] -- pbuz1=pbuc1
lda #<PLAYFIELD_SCREEN_2+2*$28+$10
sta li_2
lda #>PLAYFIELD_SCREEN_2+2*$28+$10
sta li_2+1
//SEG1120 [507] phi (byte*) render_init::li_1#2 = (const byte*) PLAYFIELD_SCREEN_1#0+(byte/signed byte/word/signed word/dword/signed dword) 2*(byte/signed byte/word/signed word/dword/signed dword) $28+(byte/signed byte/word/signed word/dword/signed dword) $10 [phi:render_init::@3->render_init::@1#1] -- pbuz1=pbuc1
lda #<PLAYFIELD_SCREEN_1+2*$28+$10
sta li_1
lda #>PLAYFIELD_SCREEN_1+2*$28+$10
sta li_1+1
//SEG1121 [507] phi (byte) render_init::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render_init::@3->render_init::@1#2] -- vbuz1=vbuc1
lda #0
sta i
jmp b1
//SEG1122 [507] phi from render_init::@1 to render_init::@1 [phi:render_init::@1->render_init::@1]
b1_from_b1:
//SEG1123 [507] phi (byte*) render_init::li_2#2 = (byte*) render_init::li_2#1 [phi:render_init::@1->render_init::@1#0] -- register_copy
//SEG1124 [507] phi (byte*) render_init::li_1#2 = (byte*) render_init::li_1#1 [phi:render_init::@1->render_init::@1#1] -- register_copy
//SEG1125 [507] phi (byte) render_init::i#2 = (byte) render_init::i#1 [phi:render_init::@1->render_init::@1#2] -- register_copy
jmp b1
//SEG1126 render_init::@1
b1:
//SEG1127 [508] (byte~) render_init::$13 ← (byte) render_init::i#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuz1=vbuz2_rol_1
lda i
asl
sta _13
//SEG1128 [509] *((const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_init::$13) ← (byte*) render_init::li_1#2 -- pptc1_derefidx_vbuz1=pbuz2
ldy _13
lda li_1
sta screen_lines_1,y
lda li_1+1
sta screen_lines_1+1,y
//SEG1129 [510] (byte~) render_init::$14 ← (byte) render_init::i#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuz1=vbuz2_rol_1
lda i
asl
sta _14
//SEG1130 [511] *((const byte*[PLAYFIELD_LINES#0]) screen_lines_2#0 + (byte~) render_init::$14) ← (byte*) render_init::li_2#2 -- pptc1_derefidx_vbuz1=pbuz2
ldy _14
lda li_2
sta screen_lines_2,y
lda li_2+1
sta screen_lines_2+1,y
//SEG1131 [512] (byte*) render_init::li_1#1 ← (byte*) render_init::li_1#2 + (byte/signed byte/word/signed word/dword/signed dword) $28 -- pbuz1=pbuz1_plus_vbuc1
lda #$28
clc
adc li_1
sta li_1
bcc !+
inc li_1+1
!:
//SEG1132 [513] (byte*) render_init::li_2#1 ← (byte*) render_init::li_2#2 + (byte/signed byte/word/signed word/dword/signed dword) $28 -- pbuz1=pbuz1_plus_vbuc1
lda #$28
clc
adc li_2
sta li_2
bcc !+
inc li_2+1
!:
//SEG1133 [514] (byte) render_init::i#1 ← ++ (byte) render_init::i#2 -- vbuz1=_inc_vbuz1
inc i
//SEG1134 [515] if((byte) render_init::i#1!=(const byte) PLAYFIELD_LINES#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto render_init::@1 -- vbuz1_neq_vbuc1_then_la1
lda #PLAYFIELD_LINES-1+1
cmp i
bne b1_from_b1
jmp breturn
//SEG1135 render_init::@return
breturn:
//SEG1136 [516] return
rts
}
//SEG1137 render_screen_original
// Copy the original screen data to the passed screen
// Also copies colors to $d800
// render_screen_original(byte* zeropage($70) screen)
render_screen_original: {
.const SPACE = 0
.label screen = $70
.label cols = $72
.label x = $74
.label oscr = $6c
.label ocols = $6e
.label y = $6b
//SEG1138 [518] phi from render_screen_original to render_screen_original::@1 [phi:render_screen_original->render_screen_original::@1]
b1_from_render_screen_original:
//SEG1139 [518] phi (byte) render_screen_original::y#6 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render_screen_original->render_screen_original::@1#0] -- vbuz1=vbuc1
lda #0
sta y
//SEG1140 [518] phi (byte*) render_screen_original::ocols#4 = (const byte*) PLAYFIELD_COLORS_ORIGINAL#0+(byte/signed byte/word/signed word/dword/signed dword) $20*(byte/signed byte/word/signed word/dword/signed dword) 2 [phi:render_screen_original->render_screen_original::@1#1] -- pbuz1=pbuc1
lda #<PLAYFIELD_COLORS_ORIGINAL+$20*2
sta ocols
lda #>PLAYFIELD_COLORS_ORIGINAL+$20*2
sta ocols+1
//SEG1141 [518] phi (byte*) render_screen_original::oscr#4 = (const byte*) PLAYFIELD_SCREEN_ORIGINAL#0+(byte/signed byte/word/signed word/dword/signed dword) $20*(byte/signed byte/word/signed word/dword/signed dword) 2 [phi:render_screen_original->render_screen_original::@1#2] -- pbuz1=pbuc1
lda #<PLAYFIELD_SCREEN_ORIGINAL+$20*2
sta oscr
lda #>PLAYFIELD_SCREEN_ORIGINAL+$20*2
sta oscr+1
//SEG1142 [518] phi (byte*) render_screen_original::cols#7 = (const byte*) COLS#0 [phi:render_screen_original->render_screen_original::@1#3] -- pbuz1=pbuc1
lda #<COLS
sta cols
lda #>COLS
sta cols+1
//SEG1143 [518] phi (byte*) render_screen_original::screen#8 = (byte*) render_screen_original::screen#9 [phi:render_screen_original->render_screen_original::@1#4] -- register_copy
jmp b1
//SEG1144 [518] phi from render_screen_original::@5 to render_screen_original::@1 [phi:render_screen_original::@5->render_screen_original::@1]
b1_from_b5:
//SEG1145 [518] phi (byte) render_screen_original::y#6 = (byte) render_screen_original::y#1 [phi:render_screen_original::@5->render_screen_original::@1#0] -- register_copy
//SEG1146 [518] phi (byte*) render_screen_original::ocols#4 = (byte*) render_screen_original::ocols#1 [phi:render_screen_original::@5->render_screen_original::@1#1] -- register_copy
//SEG1147 [518] phi (byte*) render_screen_original::oscr#4 = (byte*) render_screen_original::oscr#1 [phi:render_screen_original::@5->render_screen_original::@1#2] -- register_copy
//SEG1148 [518] phi (byte*) render_screen_original::cols#7 = (byte*) render_screen_original::cols#3 [phi:render_screen_original::@5->render_screen_original::@1#3] -- register_copy
//SEG1149 [518] phi (byte*) render_screen_original::screen#8 = (byte*) render_screen_original::screen#10 [phi:render_screen_original::@5->render_screen_original::@1#4] -- register_copy
jmp b1
//SEG1150 render_screen_original::@1
b1:
//SEG1151 [519] phi from render_screen_original::@1 to render_screen_original::@2 [phi:render_screen_original::@1->render_screen_original::@2]
b2_from_b1:
//SEG1152 [519] phi (byte) render_screen_original::x#4 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render_screen_original::@1->render_screen_original::@2#0] -- vbuz1=vbuc1
lda #0
sta x
//SEG1153 [519] phi (byte*) render_screen_original::cols#4 = (byte*) render_screen_original::cols#7 [phi:render_screen_original::@1->render_screen_original::@2#1] -- register_copy
//SEG1154 [519] phi (byte*) render_screen_original::screen#5 = (byte*) render_screen_original::screen#8 [phi:render_screen_original::@1->render_screen_original::@2#2] -- register_copy
jmp b2
//SEG1155 [519] phi from render_screen_original::@2 to render_screen_original::@2 [phi:render_screen_original::@2->render_screen_original::@2]
b2_from_b2:
//SEG1156 [519] phi (byte) render_screen_original::x#4 = (byte) render_screen_original::x#1 [phi:render_screen_original::@2->render_screen_original::@2#0] -- register_copy
//SEG1157 [519] phi (byte*) render_screen_original::cols#4 = (byte*) render_screen_original::cols#1 [phi:render_screen_original::@2->render_screen_original::@2#1] -- register_copy
//SEG1158 [519] phi (byte*) render_screen_original::screen#5 = (byte*) render_screen_original::screen#2 [phi:render_screen_original::@2->render_screen_original::@2#2] -- register_copy
jmp b2
//SEG1159 render_screen_original::@2
b2:
//SEG1160 [520] *((byte*) render_screen_original::screen#5) ← (const byte) render_screen_original::SPACE#0 -- _deref_pbuz1=vbuc1
lda #SPACE
ldy #0
sta (screen),y
//SEG1161 [521] (byte*) render_screen_original::screen#2 ← ++ (byte*) render_screen_original::screen#5 -- pbuz1=_inc_pbuz1
inc screen
bne !+
inc screen+1
!:
//SEG1162 [522] *((byte*) render_screen_original::cols#4) ← (const byte) BLACK#0 -- _deref_pbuz1=vbuc1
lda #BLACK
ldy #0
sta (cols),y
//SEG1163 [523] (byte*) render_screen_original::cols#1 ← ++ (byte*) render_screen_original::cols#4 -- pbuz1=_inc_pbuz1
inc cols
bne !+
inc cols+1
!:
//SEG1164 [524] (byte) render_screen_original::x#1 ← ++ (byte) render_screen_original::x#4 -- vbuz1=_inc_vbuz1
inc x
//SEG1165 [525] if((byte) render_screen_original::x#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto render_screen_original::@2 -- vbuz1_neq_vbuc1_then_la1
lda #4
cmp x
bne b2_from_b2
//SEG1166 [526] phi from render_screen_original::@2 render_screen_original::@3 to render_screen_original::@3 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3]
b3_from_b2:
b3_from_b3:
//SEG1167 [526] phi (byte) render_screen_original::x#5 = (byte) render_screen_original::x#1 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#0] -- register_copy
//SEG1168 [526] phi (byte*) render_screen_original::cols#5 = (byte*) render_screen_original::cols#1 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#1] -- register_copy
//SEG1169 [526] phi (byte*) render_screen_original::ocols#2 = (byte*) render_screen_original::ocols#4 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#2] -- register_copy
//SEG1170 [526] phi (byte*) render_screen_original::screen#6 = (byte*) render_screen_original::screen#2 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#3] -- register_copy
//SEG1171 [526] phi (byte*) render_screen_original::oscr#2 = (byte*) render_screen_original::oscr#4 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#4] -- register_copy
jmp b3
//SEG1172 render_screen_original::@3
b3:
//SEG1173 [527] *((byte*) render_screen_original::screen#6) ← *((byte*) render_screen_original::oscr#2) -- _deref_pbuz1=_deref_pbuz2
ldy #0
lda (oscr),y
ldy #0
sta (screen),y
//SEG1174 [528] (byte*) render_screen_original::screen#3 ← ++ (byte*) render_screen_original::screen#6 -- pbuz1=_inc_pbuz1
inc screen
bne !+
inc screen+1
!:
//SEG1175 [529] (byte*) render_screen_original::oscr#1 ← ++ (byte*) render_screen_original::oscr#2 -- pbuz1=_inc_pbuz1
inc oscr
bne !+
inc oscr+1
!:
//SEG1176 [530] *((byte*) render_screen_original::cols#5) ← *((byte*) render_screen_original::ocols#2) -- _deref_pbuz1=_deref_pbuz2
ldy #0
lda (ocols),y
ldy #0
sta (cols),y
//SEG1177 [531] (byte*) render_screen_original::cols#2 ← ++ (byte*) render_screen_original::cols#5 -- pbuz1=_inc_pbuz1
inc cols
bne !+
inc cols+1
!:
//SEG1178 [532] (byte*) render_screen_original::ocols#1 ← ++ (byte*) render_screen_original::ocols#2 -- pbuz1=_inc_pbuz1
inc ocols
bne !+
inc ocols+1
!:
//SEG1179 [533] (byte) render_screen_original::x#2 ← ++ (byte) render_screen_original::x#5 -- vbuz1=_inc_vbuz1
inc x
//SEG1180 [534] if((byte) render_screen_original::x#2!=(byte/signed byte/word/signed word/dword/signed dword) $24) goto render_screen_original::@3 -- vbuz1_neq_vbuc1_then_la1
lda #$24
cmp x
bne b3_from_b3
//SEG1181 [535] phi from render_screen_original::@3 render_screen_original::@4 to render_screen_original::@4 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4]
b4_from_b3:
b4_from_b4:
//SEG1182 [535] phi (byte) render_screen_original::x#6 = (byte) render_screen_original::x#2 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4#0] -- register_copy
//SEG1183 [535] phi (byte*) render_screen_original::cols#6 = (byte*) render_screen_original::cols#2 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4#1] -- register_copy
//SEG1184 [535] phi (byte*) render_screen_original::screen#7 = (byte*) render_screen_original::screen#3 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4#2] -- register_copy
jmp b4
//SEG1185 render_screen_original::@4
b4:
//SEG1186 [536] *((byte*) render_screen_original::screen#7) ← (const byte) render_screen_original::SPACE#0 -- _deref_pbuz1=vbuc1
lda #SPACE
ldy #0
sta (screen),y
//SEG1187 [537] (byte*) render_screen_original::screen#10 ← ++ (byte*) render_screen_original::screen#7 -- pbuz1=_inc_pbuz1
inc screen
bne !+
inc screen+1
!:
//SEG1188 [538] *((byte*) render_screen_original::cols#6) ← (const byte) BLACK#0 -- _deref_pbuz1=vbuc1
lda #BLACK
ldy #0
sta (cols),y
//SEG1189 [539] (byte*) render_screen_original::cols#3 ← ++ (byte*) render_screen_original::cols#6 -- pbuz1=_inc_pbuz1
inc cols
bne !+
inc cols+1
!:
//SEG1190 [540] (byte) render_screen_original::x#3 ← ++ (byte) render_screen_original::x#6 -- vbuz1=_inc_vbuz1
inc x
//SEG1191 [541] if((byte) render_screen_original::x#3!=(byte/signed byte/word/signed word/dword/signed dword) $28) goto render_screen_original::@4 -- vbuz1_neq_vbuc1_then_la1
lda #$28
cmp x
bne b4_from_b4
jmp b5
//SEG1192 render_screen_original::@5
b5:
//SEG1193 [542] (byte) render_screen_original::y#1 ← ++ (byte) render_screen_original::y#6 -- vbuz1=_inc_vbuz1
inc y
//SEG1194 [543] if((byte) render_screen_original::y#1!=(byte/signed byte/word/signed word/dword/signed dword) $19) goto render_screen_original::@1 -- vbuz1_neq_vbuc1_then_la1
lda #$19
cmp y
bne b1_from_b5
jmp breturn
//SEG1195 render_screen_original::@return
breturn:
//SEG1196 [544] return
rts
}
//SEG1197 sid_rnd_init
// Initialize SID voice 3 for random number generation
sid_rnd_init: {
//SEG1198 [545] *((const word*) SID_VOICE3_FREQ#0) ← (word/dword/signed dword) $ffff -- _deref_pwuc1=vwuc2
lda #<$ffff
sta SID_VOICE3_FREQ
lda #>$ffff
sta SID_VOICE3_FREQ+1
//SEG1199 [546] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 -- _deref_pbuc1=vbuc2
lda #SID_CONTROL_NOISE
sta SID_VOICE3_CONTROL
jmp breturn
//SEG1200 sid_rnd_init::@return
breturn:
//SEG1201 [547] return
rts
}
//SEG1202 sprites_irq
// Raster Interrupt Routine - sets up the sprites covering the playfield
// Repeats 10 timers every 2 lines from line IRQ_RASTER_FIRST
// Utilizes duplicated gfx in the sprites to allow for some leeway in updating the sprite pointers
sprites_irq: {
.const toSpritePtr2_return = PLAYFIELD_SPRITES/$40
.label _0 = $d9
.label ypos = $d8
.label raster_sprite_gfx_modify = $75
.label ptr = $da
.label ptr_1 = $dd
.label ptr_2 = $de
.label ptr_3 = $db
.label ptr_4 = $dc
//SEG1203 entry interrupt(HARDWARE_CLOBBER)
sta rega+1
stx regx+1
sty regy+1
//SEG1204 asm { cld }
//(*BGCOL)++;
// Clear decimal flag (because it is used by the score algorithm)
cld
//SEG1205 [549] (byte) sprites_irq::ypos#0 ← (byte) irq_sprite_ypos#0 -- vbuz1=vbuz2
// Place the sprites
lda irq_sprite_ypos
sta ypos
//SEG1206 [550] *((const byte*) SPRITES_YPOS#0) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuz1
lda ypos
sta SPRITES_YPOS
//SEG1207 [551] *((const byte*) SPRITES_YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuz1
lda ypos
sta SPRITES_YPOS+2
//SEG1208 [552] *((const byte*) SPRITES_YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 4) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuz1
lda ypos
sta SPRITES_YPOS+4
//SEG1209 [553] *((const byte*) SPRITES_YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 6) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuz1
lda ypos
sta SPRITES_YPOS+6
//SEG1210 [554] (byte/signed word/word/dword/signed dword~) sprites_irq::$0 ← (byte) irq_raster_next#0 + (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuz1=vbuz2_plus_1
ldy irq_raster_next
iny
sty _0
//SEG1211 [555] (byte) sprites_irq::raster_sprite_gfx_modify#0 ← (byte/signed word/word/dword/signed dword~) sprites_irq::$0 -- vbuz1=vbuz2
// Wait for the y-position before changing sprite pointers
lda _0
sta raster_sprite_gfx_modify
jmp b8
//SEG1212 sprites_irq::@8
b8:
//SEG1213 [556] if(*((const byte*) RASTER#0)<(byte) sprites_irq::raster_sprite_gfx_modify#0) goto sprites_irq::@8 -- _deref_pbuc1_lt_vbuz1_then_la1
lda RASTER
cmp raster_sprite_gfx_modify
bcc b8
jmp b9
//SEG1214 sprites_irq::@9
b9:
//SEG1215 [557] (byte) sprites_irq::ptr#0 ← (byte) irq_sprite_ptr#0 -- vbuz1=vbuz2
lda irq_sprite_ptr
sta ptr
//SEG1216 [558] if((byte) render_screen_showing#0==(byte/signed byte/word/signed word/dword/signed dword) 0) goto sprites_irq::@1 -- vbuz1_eq_0_then_la1
lda render_screen_showing
cmp #0
beq b1
jmp b10
//SEG1217 sprites_irq::@10
b10:
//SEG1218 [559] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0) ← (byte) sprites_irq::ptr#0 -- _deref_pbuc1=vbuz1
lda ptr
sta PLAYFIELD_SPRITE_PTRS_2
//SEG1219 [560] (byte) sprites_irq::ptr#3 ← ++ (byte) sprites_irq::ptr#0 -- vbuz1=_inc_vbuz2
ldy ptr
iny
sty ptr_3
//SEG1220 [561] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte) sprites_irq::ptr#3 -- _deref_pbuc1=vbuz1
lda ptr_3
sta PLAYFIELD_SPRITE_PTRS_2+1
//SEG1221 [562] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte) sprites_irq::ptr#3 -- _deref_pbuc1=vbuz1
lda ptr_3
sta PLAYFIELD_SPRITE_PTRS_2+2
//SEG1222 [563] (byte) sprites_irq::ptr#4 ← ++ (byte) sprites_irq::ptr#3 -- vbuz1=_inc_vbuz2
ldy ptr_3
iny
sty ptr_4
//SEG1223 [564] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte) sprites_irq::ptr#4 -- _deref_pbuc1=vbuz1
lda ptr_4
sta PLAYFIELD_SPRITE_PTRS_2+3
jmp b2
//SEG1224 sprites_irq::@2
b2:
//SEG1225 [565] (byte) irq_cnt#1 ← ++ (byte) irq_cnt#0 -- vbuz1=_inc_vbuz1
inc irq_cnt
//SEG1226 [566] if((byte) irq_cnt#1==(byte/signed byte/word/signed word/dword/signed dword) 9) goto sprites_irq::@3 -- vbuz1_eq_vbuc1_then_la1
lda #9
cmp irq_cnt
beq b3
jmp b6
//SEG1227 sprites_irq::@6
b6:
//SEG1228 [567] if((byte) irq_cnt#1==(byte/signed byte/word/signed word/dword/signed dword) $a) goto sprites_irq::@4 -- vbuz1_eq_vbuc1_then_la1
lda #$a
cmp irq_cnt
beq b4
jmp b7
//SEG1229 sprites_irq::@7
b7:
//SEG1230 [568] (byte) irq_raster_next#3 ← (byte) irq_raster_next#0 + (byte/signed byte/word/signed word/dword/signed dword) $14 -- vbuz1=vbuz1_plus_vbuc1
lax irq_raster_next
axs #-[$14]
stx irq_raster_next
//SEG1231 [569] (byte) irq_sprite_ypos#3 ← (byte) irq_sprite_ypos#0 + (byte/signed byte/word/signed word/dword/signed dword) $15 -- vbuz1=vbuz1_plus_vbuc1
lax irq_sprite_ypos
axs #-[$15]
stx irq_sprite_ypos
//SEG1232 [570] (byte) irq_sprite_ptr#3 ← (byte) irq_sprite_ptr#0 + (byte/signed byte/word/signed word/dword/signed dword) 3 -- vbuz1=vbuz1_plus_vbuc1
lax irq_sprite_ptr
axs #-[3]
stx irq_sprite_ptr
//SEG1233 [571] phi from sprites_irq::@11 sprites_irq::@4 sprites_irq::@7 to sprites_irq::@5 [phi:sprites_irq::@11/sprites_irq::@4/sprites_irq::@7->sprites_irq::@5]
b5_from_b11:
b5_from_b4:
b5_from_b7:
//SEG1234 [571] phi (byte) irq_raster_next#4 = (byte) irq_raster_next#1 [phi:sprites_irq::@11/sprites_irq::@4/sprites_irq::@7->sprites_irq::@5#0] -- register_copy
jmp b5
//SEG1235 sprites_irq::@5
b5:
//SEG1236 [572] *((const byte*) RASTER#0) ← (byte) irq_raster_next#4 -- _deref_pbuc1=vbuz1
// Setup next interrupt
lda irq_raster_next
sta RASTER
//SEG1237 [573] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2
// Acknowledge the IRQ and setup the next one
lda #IRQ_RASTER
sta IRQ_STATUS
jmp breturn
//SEG1238 sprites_irq::@return
breturn:
//SEG1239 [574] return - exit interrupt(HARDWARE_CLOBBER)
rega:
lda #00
regx:
ldx #00
regy:
ldy #00
rti
//SEG1240 sprites_irq::@4
b4:
//SEG1241 [575] (byte) irq_cnt#2 ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- vbuz1=vbuc1
lda #0
sta irq_cnt
//SEG1242 [576] (byte) irq_raster_next#2 ← (const byte) IRQ_RASTER_FIRST#0 -- vbuz1=vbuc1
lda #IRQ_RASTER_FIRST
sta irq_raster_next
//SEG1243 [577] (byte) irq_sprite_ypos#2 ← (byte) irq_sprite_ypos#0 + (byte/signed byte/word/signed word/dword/signed dword) $15 -- vbuz1=vbuz1_plus_vbuc1
lax irq_sprite_ypos
axs #-[$15]
stx irq_sprite_ypos
//SEG1244 [578] (byte) irq_sprite_ptr#2 ← (byte) irq_sprite_ptr#0 + (byte/signed byte/word/signed word/dword/signed dword) 3 -- vbuz1=vbuz1_plus_vbuc1
lax irq_sprite_ptr
axs #-[3]
stx irq_sprite_ptr
jmp b5_from_b4
//SEG1245 sprites_irq::@3
b3:
//SEG1246 [579] (byte) irq_raster_next#1 ← (byte) irq_raster_next#0 + (byte/signed byte/word/signed word/dword/signed dword) $15 -- vbuz1=vbuz1_plus_vbuc1
lax irq_raster_next
axs #-[$15]
stx irq_raster_next
//SEG1247 [580] (byte) irq_sprite_ypos#1 ← (const byte) SPRITES_FIRST_YPOS#0 -- vbuz1=vbuc1
lda #SPRITES_FIRST_YPOS
sta irq_sprite_ypos
//SEG1248 [581] phi from sprites_irq::@3 to sprites_irq::toSpritePtr2 [phi:sprites_irq::@3->sprites_irq::toSpritePtr2]
toSpritePtr2_from_b3:
jmp toSpritePtr2
//SEG1249 sprites_irq::toSpritePtr2
toSpritePtr2:
jmp b11
//SEG1250 sprites_irq::@11
b11:
//SEG1251 [582] (byte) irq_sprite_ptr#1 ← (const byte) sprites_irq::toSpritePtr2_return#0 -- vbuz1=vbuc1
lda #toSpritePtr2_return
sta irq_sprite_ptr
jmp b5_from_b11
//SEG1252 sprites_irq::@1
b1:
//SEG1253 [583] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0) ← (byte) sprites_irq::ptr#0 -- _deref_pbuc1=vbuz1
lda ptr
sta PLAYFIELD_SPRITE_PTRS_1
//SEG1254 [584] (byte) sprites_irq::ptr#1 ← ++ (byte) sprites_irq::ptr#0 -- vbuz1=_inc_vbuz2
ldy ptr
iny
sty ptr_1
//SEG1255 [585] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte) sprites_irq::ptr#1 -- _deref_pbuc1=vbuz1
lda ptr_1
sta PLAYFIELD_SPRITE_PTRS_1+1
//SEG1256 [586] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte) sprites_irq::ptr#1 -- _deref_pbuc1=vbuz1
lda ptr_1
sta PLAYFIELD_SPRITE_PTRS_1+2
//SEG1257 [587] (byte) sprites_irq::ptr#2 ← ++ (byte) sprites_irq::ptr#1 -- vbuz1=_inc_vbuz2
ldy ptr_1
iny
sty ptr_2
//SEG1258 [588] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte) sprites_irq::ptr#2 -- _deref_pbuc1=vbuz1
lda ptr_2
sta PLAYFIELD_SPRITE_PTRS_1+3
jmp b2
}
// Keyboard row bitmask as expected by CIA#1 Port A when reading a specific keyboard matrix row (rows are numbered 0-7)
keyboard_matrix_row_bitmask: .byte $fe, $fd, $fb, $f7, $ef, $df, $bf, $7f
// Keyboard matrix column bitmasks for a specific keybooard matrix column when reading the keyboard. (columns are numbered 0-7)
keyboard_matrix_col_bitmask: .byte 1, 2, 4, 8, $10, $20, $40, $80
// Keyboard event buffer. Contains keycodes for key presses/releases. Presses are represented by the keycode. Releases by keycode | $40. The buffer is filled by keyboard_scan()
keyboard_events: .fill 8, 0
// The values scanned values for each row. Set by keyboard_scan() and used by keyboard_get_event()
keyboard_scan_values: .fill 8, 0
// The T-piece
.align $40
PIECE_T: .byte 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0
// The S-piece
.align $40
PIECE_S: .byte 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0
// The Z-piece
.align $40
PIECE_Z: .byte 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0
// The L-piece
.align $40
PIECE_L: .byte 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0
// The J-piece
.align $40
PIECE_J: .byte 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0
// The O-piece
.align $40
PIECE_O: .byte 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0
// The I-piece
.align $40
PIECE_I: .byte 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0
// The chars to use for the different pieces - when inside the playing area
PIECES_CHARS: .byte $65, $66, $a6, $66, $65, $65, $a6
// The chars to use for the different pieces - when outside the playing area (eg. the next area).
PIECES_NEXT_CHARS: .byte $63, $64, $a4, $64, $63, $63, $a4
// The initial X/Y for each piece
PIECES_START_X: .byte 4, 4, 4, 4, 4, 4, 4
PIECES_START_Y: .byte 1, 1, 1, 1, 1, 0, 1
// The speed of moving down the piece when soft-drop is not activated
// This array holds the number of frames per move by level (0-29). For all levels 29+ the value is 1.
MOVEDOWN_SLOW_SPEEDS: .byte $30, $2b, $26, $21, $1c, $17, $12, $d, 8, 6, 5, 5, 5, 4, 4, 4, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1
// Base Score values for removing 0-4 lines (in BCD)
// These values are added to score_add_bcd for each level gained.
SCORE_BASE_BCD: .dword 0, $40, $100, $300, $1200
// Score values for removing 0-4 lines (in BCD)
// These values are updated based on the players level and the base values from SCORE_BASE_BCD
score_add_bcd: .fill 4*5, 0
// The color #1 to use for the pieces for each level
PIECES_COLORS_1: .byte BLUE, GREEN, PURPLE, BLUE, RED, LIGHT_GREEN, RED, BLUE, LIGHT_BLUE, RED, BLUE, GREEN, PURPLE, BLUE, RED, LIGHT_GREEN, RED, BLUE, LIGHT_BLUE, RED, BLUE, GREEN, PURPLE, BLUE, RED, LIGHT_GREEN, RED, BLUE, LIGHT_BLUE, RED
// The color #2 to use for the pieces for each level
PIECES_COLORS_2: .byte CYAN, LIGHT_GREEN, PINK, LIGHT_GREEN, LIGHT_GREEN, LIGHT_BLUE, DARK_GREY, PURPLE, RED, ORANGE, CYAN, LIGHT_GREEN, PINK, LIGHT_GREEN, LIGHT_GREEN, LIGHT_BLUE, DARK_GREY, PURPLE, RED, ORANGE, CYAN, LIGHT_GREEN, PINK, LIGHT_GREEN, LIGHT_GREEN, LIGHT_BLUE, DARK_GREY, PURPLE, RED, ORANGE
// Pointers to the screen address for rendering each playfield line
// The lines for screen 1 is aligned with $80 and screen 2 with $40 - so XOR'ing with $40 gives screen 2 lines.
.align $80
screen_lines_1: .fill 2*PLAYFIELD_LINES, 0
.align $40
screen_lines_2: .fill 2*PLAYFIELD_LINES, 0
// Pointers to the playfield address for each playfield line
playfield_lines: .fill 2*PLAYFIELD_LINES, 0
// The playfield. 0 is empty non-zero is color.
// The playfield is layed out line by line, meaning the first 10 bytes are line 1, the next 10 line 2 and so forth,
playfield: .fill PLAYFIELD_LINES*PLAYFIELD_COLS, 0
// The different pieces
PIECES: .word PIECE_T, PIECE_S, PIECE_Z, PIECE_J, PIECE_O, PIECE_I, PIECE_L
// Indixes into the playfield for each playfield line
playfield_lines_idx: .fill PLAYFIELD_LINES+1, 0
.pc = PLAYFIELD_CHARSET "PLAYFIELD_CHARSET"
.fill 8,$00 // Place a filled char at the start of the charset
.import binary "playfield-screen.imap"
.pc = PLAYFIELD_SCREEN_ORIGINAL "PLAYFIELD_SCREEN_ORIGINAL"
// Load chars for the screen
.var screen = LoadBinary("playfield-screen.iscr")
// Load extended colors for the screen
.var extended = LoadBinary("playfield-extended.col")
// screen.get(i)+1 because the charset is loaded into PLAYFIELD_CHARSET+8
// extended.get(i)-1 because the extended colors are 1-based (1/2/3/4)
// <<6 to move extended colors to the upper 2 bits
.fill screen.getSize(), ( (screen.get(i)+1) | (extended.get(i)-1)<<6 )
.pc = PLAYFIELD_COLORS_ORIGINAL "PLAYFIELD_COLORS_ORIGINAL"
.import binary "playfield-screen.col"
.pc = PLAYFIELD_SPRITES "PLAYFIELD_SPRITES"
.var sprites = LoadPicture("playfield-sprites.png", List().add($010101, $000000))
// Put the sprites into memory
.for(var sy=0;sy<10;sy++) {
.var sprite_gfx_y = sy*20
.for(var sx=0;sx<3;sx++) {
.for (var y=0;y<21; y++) {
.var gfx_y = sprite_gfx_y + mod(2100+y-sprite_gfx_y,21)
.for (var c=0; c<3; c++) {
.byte sprites.getSinglecolorByte(sx*3+c,gfx_y)
}
}
.byte 0
}
}
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [1] (byte) render_screen_showing#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( ) always clobbers reg byte a
Statement [6] (byte) irq_raster_next#0 ← (const byte) IRQ_RASTER_FIRST#0 [ ] ( ) always clobbers reg byte a
Statement [7] (byte) irq_sprite_ypos#0 ← (const byte) SPRITES_FIRST_YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) $15 [ ] ( ) always clobbers reg byte a
Statement [9] (byte) irq_sprite_ptr#0 ← (const byte) toSpritePtr1_return#0+(byte/signed byte/word/signed word/dword/signed dword) 3 [ ] ( ) always clobbers reg byte a
Statement [10] (byte) irq_cnt#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( ) always clobbers reg byte a
Statement [32] (byte*~) current_piece_gfx#120 ← (byte*) current_piece_gfx#74 [ current_ypos#106 current_ypos#6 current_xpos#130 current_xpos#103 current_piece_gfx#120 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 current_movedown_slow#1 game_over#52 ] ( main:12 [ current_ypos#106 current_ypos#6 current_xpos#130 current_xpos#103 current_piece_gfx#120 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 current_movedown_slow#1 game_over#52 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:23 [ current_ypos#13 current_ypos#106 current_ypos#107 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:56 [ current_ypos#38 current_ypos#3 current_ypos#100 current_ypos#19 current_ypos#6 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:25 [ current_xpos#59 current_xpos#130 current_xpos#131 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:72 [ current_xpos#43 current_xpos#124 current_xpos#19 current_xpos#103 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:68 [ current_piece_char#29 current_piece_char#10 current_piece_char#16 current_piece_char#5 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:74 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#2 play_spawn_current::piece_idx#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:172 [ play_spawn_current::$0 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:64 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#21 current_movedown_slow#1 current_movedown_slow#23 current_movedown_slow#69 current_movedown_slow#10 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:75 [ game_over#65 game_over#27 game_over#10 game_over#15 game_over#52 ]
Statement [37] (byte*~) current_piece#98 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$0) [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#98 current_movedown_slow#1 game_over#52 ] ( main:12 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#98 current_movedown_slow#1 game_over#52 ] ) always clobbers reg byte a
Statement [39] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) $ff) goto main::@2 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 ] ( main:12 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ render_screen_show#16 render_screen_show#13 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ render_screen_render#18 render_screen_render#11 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:69 [ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:93 [ keyboard_events_size#10 keyboard_events_size#30 keyboard_events_size#19 keyboard_events_size#16 keyboard_events_size#13 keyboard_events_size#4 keyboard_events_size#29 keyboard_events_size#1 keyboard_events_size#2 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:63 [ level#33 level#10 level#17 level#19 level#21 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:65 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#64 level_bcd#21 level_bcd#8 ]
Statement [60] (byte*~) current_piece_gfx#121 ← (byte*) current_piece_gfx#18 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 current_ypos#107 render_screen_render#69 current_xpos#131 current_piece_gfx#121 ] ( main:12 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 current_ypos#107 render_screen_render#69 current_xpos#131 current_piece_gfx#121 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:24 [ render_screen_render#33 render_screen_render#69 ]
Statement [70] (byte) render_screen_render#11 ← (byte) render_screen_render#18 ^ (byte/signed byte/word/signed word/dword/signed dword) $40 [ render_screen_show#16 render_screen_render#11 ] ( main:12::render_screen_swap:69 [ current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_show#16 render_screen_render#11 ] ) always clobbers reg byte a
Statement [71] (byte) render_screen_show#13 ← (byte) render_screen_show#16 ^ (byte/signed byte/word/signed word/dword/signed dword) $40 [ render_screen_show#13 render_screen_render#11 ] ( main:12::render_screen_swap:69 [ current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_show#13 render_screen_render#11 ] ) always clobbers reg byte a
Statement [76] (byte*) render_bcd::screen#0 ← (byte*) render_score::screen#3 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen#0 ] ( main:12::render_score:67 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen#0 ] ) always clobbers reg byte a
Statement [79] (byte*) render_bcd::screen#1 ← (byte*) render_score::screen#3 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen#1 ] ( main:12::render_score:67 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen#1 ] ) always clobbers reg byte a
Statement [82] (byte*) render_bcd::screen#2 ← (byte*) render_score::screen#3 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen#2 ] ( main:12::render_score:67 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen#2 ] ) always clobbers reg byte a
Statement [85] (byte) render_bcd::bcd#3 ← > (word) lines_bcd#15 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#3 ] ( main:12::render_score:67 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#3 ] ) always clobbers reg byte a
Statement [86] (byte*) render_bcd::screen#3 ← (byte*) render_score::screen#3 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#3 render_bcd::screen#3 ] ( main:12::render_score:67 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#3 render_bcd::screen#3 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:12 [ render_bcd::bcd#6 render_bcd::bcd#0 render_bcd::bcd#1 render_bcd::bcd#2 render_bcd::bcd#3 render_bcd::bcd#4 render_bcd::bcd#5 ]
Statement [88] (byte) render_bcd::bcd#4 ← < (word) lines_bcd#15 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#4 ] ( main:12::render_score:67 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#4 ] ) always clobbers reg byte a
Statement [89] (byte*) render_bcd::screen#4 ← (byte*) render_score::screen#3 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#4 render_bcd::screen#4 ] ( main:12::render_score:67 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#4 render_bcd::screen#4 ] ) always clobbers reg byte a
Statement [91] (byte*) render_bcd::screen#5 ← (byte*) render_score::screen#3 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::screen#5 ] ( main:12::render_score:67 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::screen#5 ] ) always clobbers reg byte a
Statement [96] (byte*) render_bcd::screen_pos#0 ← (byte*) render_bcd::screen#6 + (word) render_bcd::offset#6 [ render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] ( main:12::render_score:67::render_bcd:78 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:12::render_score:67::render_bcd:81 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:12::render_score:67::render_bcd:84 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:12::render_score:67::render_bcd:87 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:12::render_score:67::render_bcd:90 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:12::render_score:67::render_bcd:93 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:11 [ render_bcd::only_low#6 ]
Statement [98] (byte~) render_bcd::$5 ← (byte) render_bcd::bcd#6 >> (byte/signed byte/word/signed word/dword/signed dword) 4 [ render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] ( main:12::render_score:67::render_bcd:78 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] main:12::render_score:67::render_bcd:81 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] main:12::render_score:67::render_bcd:84 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] main:12::render_score:67::render_bcd:87 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] main:12::render_score:67::render_bcd:90 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] main:12::render_score:67::render_bcd:93 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] ) always clobbers reg byte a
Statement [100] *((byte*) render_bcd::screen_pos#0) ← (byte~) render_bcd::$6 [ render_bcd::bcd#6 render_bcd::screen_pos#0 ] ( main:12::render_score:67::render_bcd:78 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:12::render_score:67::render_bcd:81 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:12::render_score:67::render_bcd:84 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:12::render_score:67::render_bcd:87 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:12::render_score:67::render_bcd:90 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:12::render_score:67::render_bcd:93 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::bcd#6 render_bcd::screen_pos#0 ] ) always clobbers reg byte y
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:2 [ render_screen_show#16 render_screen_show#13 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:64 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#21 current_movedown_slow#1 current_movedown_slow#23 current_movedown_slow#69 current_movedown_slow#10 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:68 [ current_piece_char#29 current_piece_char#10 current_piece_char#16 current_piece_char#5 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:69 [ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:72 [ current_xpos#43 current_xpos#124 current_xpos#19 current_xpos#103 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:56 [ current_ypos#38 current_ypos#3 current_ypos#100 current_ypos#19 current_ypos#6 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:75 [ game_over#65 game_over#27 game_over#10 game_over#15 game_over#52 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:74 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#2 play_spawn_current::piece_idx#1 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:93 [ keyboard_events_size#10 keyboard_events_size#30 keyboard_events_size#19 keyboard_events_size#16 keyboard_events_size#13 keyboard_events_size#4 keyboard_events_size#29 keyboard_events_size#1 keyboard_events_size#2 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:4 [ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:63 [ level#33 level#10 level#17 level#19 level#21 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:3 [ render_screen_render#18 render_screen_render#11 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:65 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#64 level_bcd#21 level_bcd#8 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:12 [ render_bcd::bcd#6 render_bcd::bcd#0 render_bcd::bcd#1 render_bcd::bcd#2 render_bcd::bcd#3 render_bcd::bcd#4 render_bcd::bcd#5 ]
Statement [103] (byte~) render_bcd::$3 ← (byte) render_bcd::bcd#6 & (byte/signed byte/word/signed word/dword/signed dword) $f [ render_bcd::screen_pos#3 render_bcd::$3 ] ( main:12::render_score:67::render_bcd:78 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:12::render_score:67::render_bcd:81 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:12::render_score:67::render_bcd:84 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:12::render_score:67::render_bcd:87 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:12::render_score:67::render_bcd:90 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:12::render_score:67::render_bcd:93 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::screen_pos#3 render_bcd::$3 ] ) always clobbers reg byte a
Statement [105] *((byte*) render_bcd::screen_pos#3) ← (byte~) render_bcd::$4 [ ] ( main:12::render_score:67::render_bcd:78 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:12::render_score:67::render_bcd:81 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:12::render_score:67::render_bcd:84 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:12::render_score:67::render_bcd:87 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:12::render_score:67::render_bcd:90 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:12::render_score:67::render_bcd:93 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 ] ) always clobbers reg byte y
Statement [111] (byte~) render_next::$4 ← (byte) next_piece_idx#12 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ next_piece_idx#12 render_next::screen_next_area#11 render_next::$4 ] ( main:12::render_next:36 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 current_movedown_slow#1 game_over#52 next_piece_idx#12 render_next::screen_next_area#11 render_next::$4 ] main:12::render_next:65 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 next_piece_idx#12 render_next::screen_next_area#11 render_next::$4 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:16 [ next_piece_idx#12 next_piece_idx#84 next_piece_idx#85 ]
Statement [113] (byte*~) render_next::next_piece_gfx#9 ← (byte*)*((const word[]) PIECES#0 + (byte~) render_next::$4) [ render_next::screen_next_area#11 render_next::next_piece_char#0 render_next::next_piece_gfx#9 ] ( main:12::render_next:36 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 current_movedown_slow#1 game_over#52 render_next::screen_next_area#11 render_next::next_piece_char#0 render_next::next_piece_gfx#9 ] main:12::render_next:65 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_next::screen_next_area#11 render_next::next_piece_char#0 render_next::next_piece_gfx#9 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:133 [ render_next::next_piece_char#0 ]
Statement [116] (byte) render_next::cell#0 ← *((byte*) render_next::next_piece_gfx#2) [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#2 render_next::screen_next_area#5 render_next::c#2 render_next::cell#0 ] ( main:12::render_next:36 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#2 render_next::screen_next_area#5 render_next::c#2 render_next::cell#0 ] main:12::render_next:65 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#2 render_next::screen_next_area#5 render_next::c#2 render_next::cell#0 ] ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:172 [ play_spawn_current::$0 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:133 [ render_next::next_piece_char#0 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:17 [ render_next::l#7 render_next::l#1 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:17 [ render_next::l#7 render_next::l#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:22 [ render_next::c#2 render_next::c#1 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:22 [ render_next::c#2 render_next::c#1 ]
Statement [119] *((byte*) render_next::screen_next_area#5) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ( main:12::render_next:36 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] main:12::render_next:65 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ) always clobbers reg byte a reg byte y
Statement [123] (byte*) render_next::screen_next_area#4 ← (byte*) render_next::screen_next_area#3 + (byte/signed byte/word/signed word/dword/signed dword) $24 [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#4 ] ( main:12::render_next:36 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#4 ] main:12::render_next:65 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#4 ] ) always clobbers reg byte a
Statement [127] *((byte*) render_next::screen_next_area#5) ← (byte) render_next::next_piece_char#0 [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ( main:12::render_next:36 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] main:12::render_next:65 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ) always clobbers reg byte a reg byte y
Statement [129] (byte) render_moving::ypos2#0 ← (byte) current_ypos#13 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos2#0 ] ( main:12::render_moving:34 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos2#0 ] main:12::render_moving:62 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos2#0 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:28 [ current_piece_char#68 current_piece_char#108 current_piece_char#109 ]
Statement [132] (byte) render_moving::i#1 ← (byte) render_moving::i#3 + (byte/signed byte/word/signed word/dword/signed dword) 4 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos2#2 render_moving::l#4 render_moving::i#1 ] ( main:12::render_moving:34 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos2#2 render_moving::l#4 render_moving::i#1 ] main:12::render_moving:62 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos2#2 render_moving::l#4 render_moving::i#1 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:29 [ render_moving::ypos2#2 render_moving::ypos2#0 render_moving::ypos2#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:30 [ render_moving::l#4 render_moving::l#1 ]
Statement [138] (byte~) render_moving::$2 ← (byte) render_screen_render#33 + (byte) render_moving::ypos2#2 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos2#2 render_moving::i#3 render_moving::l#4 render_moving::$2 ] ( main:12::render_moving:34 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos2#2 render_moving::i#3 render_moving::l#4 render_moving::$2 ] main:12::render_moving:62 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos2#2 render_moving::i#3 render_moving::l#4 render_moving::$2 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:31 [ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 ]
Statement [139] (byte*) render_moving::screen_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_moving::$2) [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos2#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] ( main:12::render_moving:34 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos2#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] main:12::render_moving:62 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos2#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] ) always clobbers reg byte a
Statement [142] (byte) render_moving::current_cell#0 ← *((byte*) current_piece_gfx#64 + (byte) render_moving::i#4) [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos2#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] ( main:12::render_moving:34 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos2#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] main:12::render_moving:62 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos2#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:32 [ render_moving::xpos#2 render_moving::xpos#0 render_moving::xpos#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:33 [ render_moving::c#2 render_moving::c#1 ]
Statement [145] *((byte*) render_moving::screen_line#0 + (byte) render_moving::xpos#2) ← (byte) current_piece_char#68 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos2#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] ( main:12::render_moving:34 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos2#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] main:12::render_moving:62 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos2#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] ) always clobbers reg byte a
Statement [151] (byte~) render_playfield::$2 ← (byte) render_playfield::l#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$2 ] ( main:12::render_playfield:29 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$2 ] main:12::render_playfield:56 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$2 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:34 [ render_screen_render#22 render_screen_render#70 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:35 [ render_playfield::l#2 render_playfield::l#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:36 [ render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 ]
Statement [152] (byte~) render_playfield::$3 ← (byte) render_screen_render#22 + (byte~) render_playfield::$2 [ render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$3 ] ( main:12::render_playfield:29 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$3 ] main:12::render_playfield:56 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$3 ] ) always clobbers reg byte a
Statement [153] (byte*) render_playfield::screen_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_playfield::$3) [ render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::screen_line#0 ] ( main:12::render_playfield:29 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::screen_line#0 ] main:12::render_playfield:56 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::screen_line#0 ] ) always clobbers reg byte a
Statement [155] *((byte*) render_playfield::screen_line#2) ← *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) render_playfield::i#2) [ render_screen_render#22 render_playfield::l#2 render_playfield::i#2 render_playfield::screen_line#2 render_playfield::c#2 ] ( main:12::render_playfield:29 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#2 render_playfield::screen_line#2 render_playfield::c#2 ] main:12::render_playfield:56 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#2 render_playfield::screen_line#2 render_playfield::c#2 ] ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:34 [ render_screen_render#22 render_screen_render#70 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:35 [ render_playfield::l#2 render_playfield::l#1 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:36 [ render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:39 [ render_playfield::c#2 render_playfield::c#1 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:39 [ render_playfield::c#2 render_playfield::c#1 ]
Statement [174] (byte) play_movement::render#2 ← (byte) play_movement::render#1 + (byte~) play_movement::$3 [ current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_movement::render#2 ] ( main:12::play_movement:51 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_movement::render#2 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:125 [ play_movement::key_event#0 ]
Statement [179] (byte) play_movement::return#0 ← (byte) play_movement::render#2 + (byte~) play_movement::$4 [ current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::return#0 current_orientation#25 current_piece_gfx#21 current_xpos#26 ] ( main:12::play_movement:51 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::return#0 current_orientation#25 current_piece_gfx#21 current_xpos#26 ] ) always clobbers reg byte a
Statement [184] (byte/signed word/word/dword/signed dword~) play_move_rotate::$5 ← (byte) current_orientation#20 + (byte/signed byte/word/signed word/dword/signed dword) $10 [ current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::$5 ] ( main:12::play_movement:51::play_move_rotate:176 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::$5 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:146 [ play_movement::render#2 ]
Statement [190] (byte*~) current_piece#103 ← (byte*) current_piece#15 [ current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#3 play_collision::ypos#3 play_collision::orientation#3 current_piece#103 ] ( main:12::play_movement:51::play_move_rotate:176 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#3 play_collision::ypos#3 play_collision::orientation#3 current_piece#103 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:42 [ play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:47 [ play_collision::xpos#6 play_collision::xpos#0 play_collision::xpos#1 play_collision::xpos#2 play_collision::xpos#3 play_collision::xpos#4 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:46 [ play_collision::ypos#5 play_collision::ypos#0 play_collision::ypos#1 play_collision::ypos#2 play_collision::ypos#3 play_collision::ypos#4 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:45 [ play_collision::orientation#5 play_collision::orientation#0 play_collision::orientation#1 play_collision::orientation#2 play_collision::orientation#3 ]
Statement [196] (byte*) current_piece_gfx#7 ← (byte*) current_piece#15 + (byte) current_orientation#7 [ current_piece#15 current_ypos#19 current_xpos#26 current_orientation#7 current_piece_gfx#7 ] ( main:12::play_movement:51::play_move_rotate:176 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_xpos#26 current_orientation#7 current_piece_gfx#7 ] ) always clobbers reg byte a
Statement [197] (byte/signed word/word/dword/signed dword~) play_move_rotate::$7 ← (byte) current_orientation#20 - (byte/signed byte/word/signed word/dword/signed dword) $10 [ current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::$7 ] ( main:12::play_movement:51::play_move_rotate:176 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::$7 ] ) always clobbers reg byte a
Statement [200] (byte*) play_collision::piece_gfx#0 ← (byte*) current_piece#17 + (byte) play_collision::orientation#5 [ play_collision::ypos#5 play_collision::xpos#6 play_collision::piece_gfx#0 ] ( main:12::play_movement:51::play_move_rotate:176::play_collision:191 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::ypos#5 play_collision::xpos#6 play_collision::piece_gfx#0 ] main:12::play_movement:51::play_move_leftright:171::play_collision:229 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::ypos#5 play_collision::xpos#6 play_collision::piece_gfx#0 ] main:12::play_movement:51::play_move_leftright:171::play_collision:240 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::ypos#5 play_collision::xpos#6 play_collision::piece_gfx#0 ] main:12::play_movement:51::play_move_down:164::play_collision:264 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_collision::ypos#5 play_collision::xpos#6 play_collision::piece_gfx#0 ] main:12::play_spawn_current:25::play_collision:293 [ current_movedown_slow#1 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_collision::ypos#5 play_collision::xpos#6 play_collision::piece_gfx#0 ] main:12::play_spawn_current:27::play_collision:293 [ current_movedown_slow#1 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_collision::ypos#5 play_collision::xpos#6 play_collision::piece_gfx#0 ] main:12::play_movement:51::play_move_down:164::play_spawn_current:277::play_collision:293 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_collision::ypos#5 play_collision::xpos#6 play_collision::piece_gfx#0 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:40 [ play_movement::return#2 play_movement::render#1 play_movement::return#0 ]
Statement [201] (byte) play_collision::ypos2#0 ← (byte) play_collision::ypos#5 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#0 ] ( main:12::play_movement:51::play_move_rotate:176::play_collision:191 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#0 ] main:12::play_movement:51::play_move_leftright:171::play_collision:229 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#0 ] main:12::play_movement:51::play_move_leftright:171::play_collision:240 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#0 ] main:12::play_movement:51::play_move_down:164::play_collision:264 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#0 ] main:12::play_spawn_current:25::play_collision:293 [ current_movedown_slow#1 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#0 ] main:12::play_spawn_current:27::play_collision:293 [ current_movedown_slow#1 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#0 ] main:12::play_movement:51::play_move_down:164::play_spawn_current:277::play_collision:293 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#0 ] ) always clobbers reg byte a
Statement [203] (byte*) play_collision::playfield_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte) play_collision::ypos2#2) [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] ( main:12::play_movement:51::play_move_rotate:176::play_collision:191 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] main:12::play_movement:51::play_move_leftright:171::play_collision:229 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] main:12::play_movement:51::play_move_leftright:171::play_collision:240 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] main:12::play_movement:51::play_move_down:164::play_collision:264 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] main:12::play_spawn_current:25::play_collision:293 [ current_movedown_slow#1 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] main:12::play_spawn_current:27::play_collision:293 [ current_movedown_slow#1 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] main:12::play_movement:51::play_move_down:164::play_spawn_current:277::play_collision:293 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:48 [ play_collision::ypos2#2 play_collision::ypos2#0 play_collision::ypos2#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:50 [ play_collision::i#2 play_collision::i#3 play_collision::i#11 play_collision::i#13 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:49 [ play_collision::l#6 play_collision::l#1 ]
Statement [207] if(*((byte*) play_collision::piece_gfx#0 + (byte) play_collision::i#2)==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_collision::@3 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 ] ( main:12::play_movement:51::play_move_rotate:176::play_collision:191 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 ] main:12::play_movement:51::play_move_leftright:171::play_collision:229 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 ] main:12::play_movement:51::play_move_leftright:171::play_collision:240 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 ] main:12::play_movement:51::play_move_down:164::play_collision:264 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 ] main:12::play_spawn_current:25::play_collision:293 [ current_movedown_slow#1 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 ] main:12::play_spawn_current:27::play_collision:293 [ current_movedown_slow#1 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 ] main:12::play_movement:51::play_move_down:164::play_spawn_current:277::play_collision:293 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:51 [ play_collision::col#2 play_collision::col#9 play_collision::col#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:52 [ play_collision::c#2 play_collision::c#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:158 [ play_collision::i#1 ]
Statement [211] (byte~) play_collision::$7 ← (byte) play_collision::col#2 & (byte/word/signed word/dword/signed dword) $80 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 play_collision::$7 ] ( main:12::play_movement:51::play_move_rotate:176::play_collision:191 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 play_collision::$7 ] main:12::play_movement:51::play_move_leftright:171::play_collision:229 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 play_collision::$7 ] main:12::play_movement:51::play_move_leftright:171::play_collision:240 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 play_collision::$7 ] main:12::play_movement:51::play_move_down:164::play_collision:264 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 play_collision::$7 ] main:12::play_spawn_current:25::play_collision:293 [ current_movedown_slow#1 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 play_collision::$7 ] main:12::play_spawn_current:27::play_collision:293 [ current_movedown_slow#1 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 play_collision::$7 ] main:12::play_movement:51::play_move_down:164::play_spawn_current:277::play_collision:293 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 play_collision::$7 ] ) always clobbers reg byte a
Statement [214] if(*((byte*) play_collision::playfield_line#0 + (byte) play_collision::col#2)==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_collision::@3 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 ] ( main:12::play_movement:51::play_move_rotate:176::play_collision:191 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 ] main:12::play_movement:51::play_move_leftright:171::play_collision:229 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 ] main:12::play_movement:51::play_move_leftright:171::play_collision:240 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 ] main:12::play_movement:51::play_move_down:164::play_collision:264 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 ] main:12::play_spawn_current:25::play_collision:293 [ current_movedown_slow#1 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 ] main:12::play_spawn_current:27::play_collision:293 [ current_movedown_slow#1 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 ] main:12::play_movement:51::play_move_down:164::play_spawn_current:277::play_collision:293 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 ] ) always clobbers reg byte a
Statement [228] (byte*~) current_piece#102 ← (byte*) current_piece#15 [ current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#102 play_collision::orientation#2 play_collision::ypos#2 play_collision::xpos#2 ] ( main:12::play_movement:51::play_move_leftright:171 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#102 play_collision::orientation#2 play_collision::ypos#2 play_collision::xpos#2 ] ) always clobbers reg byte a
Statement [239] (byte*~) current_piece#101 ← (byte*) current_piece#15 [ current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#101 play_collision::orientation#1 play_collision::ypos#1 play_collision::xpos#1 ] ( main:12::play_movement:51::play_move_leftright:171 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#101 play_collision::orientation#1 play_collision::ypos#1 play_collision::xpos#1 ] ) always clobbers reg byte a
Statement [263] (byte*~) current_piece#100 ← (byte*) current_piece#10 [ current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_piece#100 play_collision::orientation#0 play_collision::ypos#0 play_collision::xpos#0 ] ( main:12::play_movement:51::play_move_down:164 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_piece#100 play_collision::orientation#0 play_collision::ypos#0 play_collision::xpos#0 ] ) always clobbers reg byte a
Statement [278] (byte*~) current_piece#106 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$0) [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#106 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 ] ( main:12::play_movement:51::play_move_down:164 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#106 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 ] ) always clobbers reg byte a
Statement [285] (byte~) play_spawn_current::$0 ← (byte) play_spawn_current::current_piece_idx#0 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ play_spawn_current::$0 game_over#65 play_spawn_current::current_piece_idx#0 ] ( main:12::play_spawn_current:25 [ current_movedown_slow#1 play_spawn_current::$0 game_over#65 play_spawn_current::current_piece_idx#0 ] main:12::play_spawn_current:27 [ current_movedown_slow#1 play_spawn_current::$0 game_over#65 play_spawn_current::current_piece_idx#0 ] main:12::play_movement:51::play_move_down:164::play_spawn_current:277 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 play_spawn_current::$0 game_over#65 play_spawn_current::current_piece_idx#0 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:171 [ play_spawn_current::current_piece_idx#0 ]
Statement [287] (byte*) current_piece_gfx#74 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$0) [ current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_spawn_current::current_piece_idx#0 ] ( main:12::play_spawn_current:25 [ current_movedown_slow#1 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_spawn_current::current_piece_idx#0 ] main:12::play_spawn_current:27 [ current_movedown_slow#1 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_spawn_current::current_piece_idx#0 ] main:12::play_movement:51::play_move_down:164::play_spawn_current:277 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_spawn_current::current_piece_idx#0 ] ) always clobbers reg byte a
Statement [292] (byte*~) current_piece#104 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$0) [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 current_piece#104 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] ( main:12::play_spawn_current:25 [ current_movedown_slow#1 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 current_piece#104 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] main:12::play_spawn_current:27 [ current_movedown_slow#1 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 current_piece#104 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] main:12::play_movement:51::play_move_down:164::play_spawn_current:277 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 current_piece#104 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] ) always clobbers reg byte a
Statement [305] (byte~) play_update_score::$2 ← < (word) lines_bcd#19 [ current_movedown_slow#14 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::$2 ] ( main:12::play_movement:51::play_move_down:164::play_update_score:275 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::$2 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:170 [ play_update_score::removed#0 ]
Statement [307] (byte~) play_update_score::$4 ← (byte) play_update_score::removed#0 << (byte/signed byte/word/signed word/dword/signed dword) 2 [ current_movedown_slow#14 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::$4 ] ( main:12::play_movement:51::play_move_down:164::play_update_score:275 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::$4 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:177 [ play_update_score::lines_before#0 ]
Statement [308] (dword) play_update_score::add_bcd#0 ← *((const dword[5]) score_add_bcd#0 + (byte~) play_update_score::$4) [ current_movedown_slow#14 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::add_bcd#0 ] ( main:12::play_movement:51::play_move_down:164::play_update_score:275 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::add_bcd#0 ] ) always clobbers reg byte a
Statement [310] (word) lines_bcd#30 ← (word) lines_bcd#19 + (byte) play_update_score::removed#0 [ current_movedown_slow#14 score_bcd#18 level#10 level_bcd#11 play_update_score::lines_before#0 play_update_score::add_bcd#0 lines_bcd#30 ] ( main:12::play_movement:51::play_move_down:164::play_update_score:275 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 score_bcd#18 level#10 level_bcd#11 play_update_score::lines_before#0 play_update_score::add_bcd#0 lines_bcd#30 ] ) always clobbers reg byte a
Statement [311] (dword) score_bcd#30 ← (dword) score_bcd#18 + (dword) play_update_score::add_bcd#0 [ current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#30 score_bcd#30 ] ( main:12::play_movement:51::play_move_down:164::play_update_score:275 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#30 score_bcd#30 ] ) always clobbers reg byte a
Statement [313] (byte~) play_update_score::$5 ← < (word) lines_bcd#30 [ current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#30 score_bcd#30 play_update_score::$5 ] ( main:12::play_movement:51::play_move_down:164::play_update_score:275 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#30 score_bcd#30 play_update_score::$5 ] ) always clobbers reg byte a
Statement [325] (byte~) play_increase_level::$1 ← (byte) level_bcd#21 & (byte/signed byte/word/signed word/dword/signed dword) $f [ level#21 current_movedown_slow#69 level_bcd#21 play_increase_level::$1 ] ( main:12::play_movement:51::play_move_down:164::play_update_score:275::play_increase_level:317 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#30 score_bcd#30 level#21 current_movedown_slow#69 level_bcd#21 play_increase_level::$1 ] ) always clobbers reg byte a
Statement [327] (byte) level_bcd#8 ← (byte) level_bcd#21 + (byte/signed byte/word/signed word/dword/signed dword) 6 [ level#21 current_movedown_slow#69 level_bcd#8 ] ( main:12::play_movement:51::play_move_down:164::play_update_score:275::play_increase_level:317 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#30 score_bcd#30 level#21 current_movedown_slow#69 level_bcd#8 ] ) always clobbers reg byte a reg byte x
Removing always clobbered register reg byte x as potential for zp ZP_BYTE:2 [ render_screen_show#16 render_screen_show#13 ]
Removing always clobbered register reg byte x as potential for zp ZP_BYTE:3 [ render_screen_render#18 render_screen_render#11 ]
Removing always clobbered register reg byte x as potential for zp ZP_BYTE:93 [ keyboard_events_size#10 keyboard_events_size#30 keyboard_events_size#19 keyboard_events_size#16 keyboard_events_size#13 keyboard_events_size#4 keyboard_events_size#29 keyboard_events_size#1 keyboard_events_size#2 ]
Removing always clobbered register reg byte x as potential for zp ZP_BYTE:125 [ play_movement::key_event#0 ]
Removing always clobbered register reg byte x as potential for zp ZP_BYTE:75 [ game_over#65 game_over#27 game_over#10 game_over#15 game_over#52 ]
Removing always clobbered register reg byte x as potential for zp ZP_BYTE:74 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#2 play_spawn_current::piece_idx#1 ]
Removing always clobbered register reg byte x as potential for zp ZP_BYTE:63 [ level#33 level#10 level#17 level#19 level#21 ]
Removing always clobbered register reg byte x as potential for zp ZP_BYTE:64 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#21 current_movedown_slow#1 current_movedown_slow#23 current_movedown_slow#69 current_movedown_slow#10 ]
Statement [331] (byte) play_increase_level::b4#0 ← (byte) play_increase_level::b#2 << (byte/signed byte/word/signed word/dword/signed dword) 2 [ level#21 current_movedown_slow#69 level_bcd#64 play_increase_level::b#2 play_increase_level::b4#0 ] ( main:12::play_movement:51::play_move_down:164::play_update_score:275::play_increase_level:317 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#30 score_bcd#30 level#21 current_movedown_slow#69 level_bcd#64 play_increase_level::b#2 play_increase_level::b4#0 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:76 [ play_increase_level::b#2 play_increase_level::b#1 ]
Statement [332] *((const dword[5]) score_add_bcd#0 + (byte) play_increase_level::b4#0) ← *((const dword[5]) score_add_bcd#0 + (byte) play_increase_level::b4#0) + *((const dword[]) SCORE_BASE_BCD#0 + (byte) play_increase_level::b4#0) [ level#21 current_movedown_slow#69 level_bcd#64 play_increase_level::b#2 ] ( main:12::play_movement:51::play_move_down:164::play_update_score:275::play_increase_level:317 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#30 score_bcd#30 level#21 current_movedown_slow#69 level_bcd#64 play_increase_level::b#2 ] ) always clobbers reg byte a
Statement [349] (byte) play_remove_lines::w#2 ← (byte) play_remove_lines::w#1 + (const byte) PLAYFIELD_COLS#0 [ play_remove_lines::y#8 play_remove_lines::removed#11 play_remove_lines::r#1 play_remove_lines::w#2 ] ( main:12::play_movement:51::play_move_down:164::play_remove_lines:271 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_remove_lines::y#8 play_remove_lines::removed#11 play_remove_lines::r#1 play_remove_lines::w#2 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:77 [ play_remove_lines::y#8 play_remove_lines::y#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:78 [ play_remove_lines::removed#11 play_remove_lines::removed#8 play_remove_lines::removed#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:79 [ play_remove_lines::r#2 play_remove_lines::r#3 play_remove_lines::r#1 ]
Statement [357] *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::w#6) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ play_remove_lines::removed#8 play_remove_lines::w#6 ] ( main:12::play_movement:51::play_move_down:164::play_remove_lines:271 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_remove_lines::removed#8 play_remove_lines::w#6 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:82 [ play_remove_lines::w#6 play_remove_lines::w#3 play_remove_lines::w#4 play_remove_lines::w#12 play_remove_lines::w#11 play_remove_lines::w#1 play_remove_lines::w#2 ]
Statement [360] (byte) play_lock_current::ypos2#0 ← (byte) current_ypos#100 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ current_piece_char#10 current_piece_gfx#114 current_xpos#124 play_lock_current::ypos2#0 ] ( main:12::play_movement:51::play_move_down:164::play_lock_current:269 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#114 current_xpos#124 play_lock_current::ypos2#0 ] ) always clobbers reg byte a
Statement [362] (byte*) play_lock_current::playfield_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte) play_lock_current::ypos2#2) [ current_piece_char#10 current_piece_gfx#114 current_xpos#124 play_lock_current::ypos2#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::playfield_line#0 ] ( main:12::play_movement:51::play_move_down:164::play_lock_current:269 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#114 current_xpos#124 play_lock_current::ypos2#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::playfield_line#0 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:83 [ play_lock_current::ypos2#2 play_lock_current::ypos2#0 play_lock_current::ypos2#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:85 [ play_lock_current::i#2 play_lock_current::i#3 play_lock_current::i#7 play_lock_current::i#9 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:84 [ play_lock_current::l#6 play_lock_current::l#1 ]
Statement [366] if(*((byte*) current_piece_gfx#114 + (byte) play_lock_current::i#2)==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_lock_current::@3 [ current_piece_char#10 current_piece_gfx#114 current_xpos#124 play_lock_current::ypos2#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::col#2 play_lock_current::c#2 play_lock_current::i#1 ] ( main:12::play_movement:51::play_move_down:164::play_lock_current:269 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#114 current_xpos#124 play_lock_current::ypos2#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::col#2 play_lock_current::c#2 play_lock_current::i#1 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:86 [ play_lock_current::col#2 play_lock_current::col#0 play_lock_current::col#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:87 [ play_lock_current::c#2 play_lock_current::c#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:190 [ play_lock_current::i#1 ]
Statement [367] *((byte*) play_lock_current::playfield_line#0 + (byte) play_lock_current::col#2) ← (byte) current_piece_char#10 [ current_piece_char#10 current_piece_gfx#114 current_xpos#124 play_lock_current::ypos2#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::col#2 play_lock_current::c#2 play_lock_current::i#1 ] ( main:12::play_movement:51::play_move_down:164::play_lock_current:269 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#114 current_xpos#124 play_lock_current::ypos2#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::col#2 play_lock_current::c#2 play_lock_current::i#1 ] ) always clobbers reg byte a
Statement [378] (byte~) keyboard_event_pressed::$0 ← (byte) keyboard_event_pressed::keycode#5 >> (byte/signed byte/word/signed word/dword/signed dword) 3 [ keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] ( main:12::play_movement:51::play_move_down:164::keyboard_event_pressed:249 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:12::keyboard_event_scan:43::keyboard_event_pressed:400 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:12::keyboard_event_scan:43::keyboard_event_pressed:406 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:12::keyboard_event_scan:43::keyboard_event_pressed:412 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:12::keyboard_event_scan:43::keyboard_event_pressed:418 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:55 [ play_move_down::movedown#6 play_move_down::movedown#7 play_move_down::movedown#10 play_move_down::movedown#2 play_move_down::movedown#3 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:88 [ keyboard_event_pressed::keycode#5 ]
Statement [380] (byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#5 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] ( main:12::play_movement:51::play_move_down:164::keyboard_event_pressed:249 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:12::keyboard_event_scan:43::keyboard_event_pressed:400 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:12::keyboard_event_scan:43::keyboard_event_pressed:406 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:12::keyboard_event_scan:43::keyboard_event_pressed:412 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:12::keyboard_event_scan:43::keyboard_event_pressed:418 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:192 [ keyboard_event_pressed::row_bits#0 ]
Statement [381] (byte) keyboard_event_pressed::return#11 ← (byte) keyboard_event_pressed::row_bits#0 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte~) keyboard_event_pressed::$1) [ keyboard_event_pressed::return#11 ] ( main:12::play_movement:51::play_move_down:164::keyboard_event_pressed:249 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::return#11 ] main:12::keyboard_event_scan:43::keyboard_event_pressed:400 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] main:12::keyboard_event_scan:43::keyboard_event_pressed:406 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] main:12::keyboard_event_scan:43::keyboard_event_pressed:412 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] main:12::keyboard_event_scan:43::keyboard_event_pressed:418 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] ) always clobbers reg byte a
Statement [383] if((byte) keyboard_events_size#13==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_get::@return [ keyboard_events_size#13 ] ( main:12::keyboard_event_get:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_events_size#13 ] ) always clobbers reg byte a
Statement [385] (byte) keyboard_event_get::return#1 ← *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#4) [ keyboard_events_size#4 keyboard_event_get::return#1 ] ( main:12::keyboard_event_get:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_events_size#4 keyboard_event_get::return#1 ] ) always clobbers reg byte y
Statement [395] (byte) keyboard_event_scan::keycode#1 ← (byte) keyboard_event_scan::keycode#11 + (byte/signed byte/word/signed word/dword/signed dword) 8 [ keyboard_event_scan::row#2 keyboard_events_size#30 keyboard_event_scan::keycode#1 ] ( main:12::keyboard_event_scan:43 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_events_size#30 keyboard_event_scan::keycode#1 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:90 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ]
Statement [425] (byte~) keyboard_event_scan::$15 ← (byte) keyboard_event_scan::row_scan#0 ^ *((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$15 ] ( main:12::keyboard_event_scan:43 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$15 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:197 [ keyboard_event_scan::row_scan#0 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:91 [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:92 [ keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#15 keyboard_event_scan::keycode#1 ]
Statement [428] if((byte) keyboard_events_size#10==(byte/signed byte/word/signed word/dword/signed dword) 8) goto keyboard_event_scan::@10 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:12::keyboard_event_scan:43 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ) always clobbers reg byte a
Statement [429] (byte) keyboard_event_scan::event_type#0 ← (byte) keyboard_event_scan::row_scan#0 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte) keyboard_event_scan::col#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::event_type#0 ] ( main:12::keyboard_event_scan:43 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::event_type#0 ] ) always clobbers reg byte a
Statement [431] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte) keyboard_event_scan::keycode#10 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:12::keyboard_event_scan:43 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:90 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:197 [ keyboard_event_scan::row_scan#0 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:91 [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:92 [ keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#15 keyboard_event_scan::keycode#1 ]
Statement [437] *((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2) ← (byte) keyboard_event_scan::row_scan#0 [ keyboard_event_scan::row#2 keyboard_event_scan::keycode#15 keyboard_events_size#29 ] ( main:12::keyboard_event_scan:43 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#15 keyboard_events_size#29 ] ) always clobbers reg byte a
Statement [438] (byte/word/dword~) keyboard_event_scan::$23 ← (byte) keyboard_event_scan::keycode#10 | (byte/signed byte/word/signed word/dword/signed dword) $40 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$23 ] ( main:12::keyboard_event_scan:43 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$23 ] ) always clobbers reg byte a
Statement [439] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte/word/dword~) keyboard_event_scan::$23 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:12::keyboard_event_scan:43 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ) always clobbers reg byte y
Statement [441] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:12::keyboard_event_scan:43::keyboard_matrix_read:391 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 ] ) always clobbers reg byte a
Statement [442] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B#0) [ keyboard_matrix_read::return#0 ] ( main:12::keyboard_event_scan:43::keyboard_matrix_read:391 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_matrix_read::return#0 ] ) always clobbers reg byte a
Statement [444] if((byte) render_screen_show#16==(byte/signed byte/word/signed word/dword/signed dword) 0) goto render_show::toD0181 [ render_screen_show#16 level#10 ] ( main:12::render_show:41 [ render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level_bcd#11 render_screen_show#16 level#10 ] ) always clobbers reg byte a
Statement [448] *((const byte*) BGCOL2#0) ← *((const byte[]) PIECES_COLORS_1#0 + (byte) level#10) [ render_screen_show#16 level#10 ] ( main:12::render_show:41 [ render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level_bcd#11 render_screen_show#16 level#10 ] ) always clobbers reg byte a reg byte y
Statement [449] *((const byte*) BGCOL3#0) ← *((const byte[]) PIECES_COLORS_2#0 + (byte) level#10) [ render_screen_show#16 level#10 ] ( main:12::render_show:41 [ render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level_bcd#11 render_screen_show#16 level#10 ] ) always clobbers reg byte a reg byte y
Statement [450] (byte) render_screen_showing#1 ← (byte) render_screen_show#16 [ render_screen_show#16 level#10 ] ( main:12::render_show:41 [ render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level_bcd#11 render_screen_show#16 level#10 ] ) always clobbers reg byte a
Statement [455] (byte~) play_init::$2 ← (byte) play_init::j#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ play_init::j#2 play_init::pli#2 play_init::idx#2 play_init::$2 ] ( main:12::play_init:23 [ play_init::j#2 play_init::pli#2 play_init::idx#2 play_init::$2 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:95 [ play_init::j#2 play_init::j#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:98 [ play_init::idx#2 play_init::idx#1 ]
Statement [456] *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte~) play_init::$2) ← (byte*) play_init::pli#2 [ play_init::j#2 play_init::pli#2 play_init::idx#2 ] ( main:12::play_init:23 [ play_init::j#2 play_init::pli#2 play_init::idx#2 ] ) always clobbers reg byte a
Statement [457] *((const byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx#0 + (byte) play_init::j#2) ← (byte) play_init::idx#2 [ play_init::j#2 play_init::pli#2 play_init::idx#2 ] ( main:12::play_init:23 [ play_init::j#2 play_init::pli#2 play_init::idx#2 ] ) always clobbers reg byte a
Statement [458] (byte*) play_init::pli#1 ← (byte*) play_init::pli#2 + (const byte) PLAYFIELD_COLS#0 [ play_init::j#2 play_init::idx#2 play_init::pli#1 ] ( main:12::play_init:23 [ play_init::j#2 play_init::idx#2 play_init::pli#1 ] ) always clobbers reg byte a
Statement [459] (byte) play_init::idx#1 ← (byte) play_init::idx#2 + (const byte) PLAYFIELD_COLS#0 [ play_init::j#2 play_init::pli#1 play_init::idx#1 ] ( main:12::play_init:23 [ play_init::j#2 play_init::pli#1 play_init::idx#1 ] ) always clobbers reg byte a
Statement [462] *((const byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx#0+(const byte) PLAYFIELD_LINES#0) ← (const byte) PLAYFIELD_COLS#0*(const byte) PLAYFIELD_LINES#0 [ ] ( main:12::play_init:23 [ ] ) always clobbers reg byte a
Statement [463] (byte) current_movedown_slow#1 ← *((const byte[]) MOVEDOWN_SLOW_SPEEDS#0) [ current_movedown_slow#1 ] ( main:12::play_init:23 [ current_movedown_slow#1 ] ) always clobbers reg byte a
Statement [465] (byte) play_init::b4#0 ← (byte) play_init::b#2 << (byte/signed byte/word/signed word/dword/signed dword) 2 [ current_movedown_slow#1 play_init::b#2 play_init::b4#0 ] ( main:12::play_init:23 [ current_movedown_slow#1 play_init::b#2 play_init::b4#0 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:99 [ play_init::b#2 play_init::b#1 ]
Statement [466] *((const dword[5]) score_add_bcd#0 + (byte) play_init::b4#0) ← *((const dword[]) SCORE_BASE_BCD#0 + (byte) play_init::b4#0) [ current_movedown_slow#1 play_init::b#2 ] ( main:12::play_init:23 [ current_movedown_slow#1 play_init::b#2 ] ) always clobbers reg byte a
Statement [471] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ ] ( main:12::sprites_irq_init:21 [ ] ) always clobbers reg byte a
Statement asm { ldaCIA1_INTERRUPT } always clobbers reg byte a
Statement [473] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0 [ ] ( main:12::sprites_irq_init:21 [ ] ) always clobbers reg byte a
Statement [474] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 [ ] ( main:12::sprites_irq_init:21 [ ] ) always clobbers reg byte a
Statement [475] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0 [ ] ( main:12::sprites_irq_init:21 [ ] ) always clobbers reg byte a
Statement [476] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte/signed byte/word/signed word/dword/signed dword) $7f [ ] ( main:12::sprites_irq_init:21 [ ] ) always clobbers reg byte a
Statement [477] *((const byte*) RASTER#0) ← (const byte) IRQ_RASTER_FIRST#0 [ ] ( main:12::sprites_irq_init:21 [ ] ) always clobbers reg byte a
Statement [478] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0 [ ] ( main:12::sprites_irq_init:21 [ ] ) always clobbers reg byte a
Statement [479] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_CLOBBER)(void()) sprites_irq() [ ] ( main:12::sprites_irq_init:21 [ ] ) always clobbers reg byte a
Statement [482] *((const byte*) SPRITES_ENABLE#0) ← (byte/signed byte/word/signed word/dword/signed dword) $f [ ] ( main:12::sprites_init:19 [ ] ) always clobbers reg byte a
Statement [483] *((const byte*) SPRITES_MC#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:12::sprites_init:19 [ ] ) always clobbers reg byte a
Statement [484] *((const byte*) SPRITES_EXPAND_Y#0) ← *((const byte*) SPRITES_MC#0) [ ] ( main:12::sprites_init:19 [ ] ) always clobbers reg byte a
Statement [485] *((const byte*) SPRITES_EXPAND_X#0) ← *((const byte*) SPRITES_EXPAND_Y#0) [ ] ( main:12::sprites_init:19 [ ] ) always clobbers reg byte a
Statement [487] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ sprites_init::s#2 sprites_init::xpos#2 sprites_init::s2#0 ] ( main:12::sprites_init:19 [ sprites_init::s#2 sprites_init::xpos#2 sprites_init::s2#0 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:100 [ sprites_init::s#2 sprites_init::s#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:101 [ sprites_init::xpos#2 sprites_init::xpos#1 ]
Statement [488] *((const byte*) SPRITES_XPOS#0 + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2 [ sprites_init::s#2 sprites_init::xpos#2 ] ( main:12::sprites_init:19 [ sprites_init::s#2 sprites_init::xpos#2 ] ) always clobbers reg byte a
Statement [489] *((const byte*) SPRITES_COLS#0 + (byte) sprites_init::s#2) ← (const byte) BLACK#0 [ sprites_init::s#2 sprites_init::xpos#2 ] ( main:12::sprites_init:19 [ sprites_init::s#2 sprites_init::xpos#2 ] ) always clobbers reg byte a
Statement [490] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte/signed byte/word/signed word/dword/signed dword) $18 [ sprites_init::s#2 sprites_init::xpos#1 ] ( main:12::sprites_init:19 [ sprites_init::s#2 sprites_init::xpos#1 ] ) always clobbers reg byte a
Statement [495] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte/signed byte/word/signed word/dword/signed dword) 3 [ ] ( main:12::render_init:17 [ ] ) always clobbers reg byte a
Statement [497] *((const byte*) CIA2_PORT_A#0) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:12::render_init:17 [ ] ) always clobbers reg byte a
Statement [498] *((const byte*) D011#0) ← (const byte) VIC_ECM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte/signed byte/word/signed word/dword/signed dword) 3 [ ] ( main:12::render_init:17 [ ] ) always clobbers reg byte a
Statement [499] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 [ ] ( main:12::render_init:17 [ ] ) always clobbers reg byte a
Statement [500] *((const byte*) BGCOL1#0) ← (const byte) BLACK#0 [ ] ( main:12::render_init:17 [ ] ) always clobbers reg byte a
Statement [501] *((const byte*) BGCOL2#0) ← *((const byte[]) PIECES_COLORS_1#0) [ ] ( main:12::render_init:17 [ ] ) always clobbers reg byte a
Statement [502] *((const byte*) BGCOL3#0) ← *((const byte[]) PIECES_COLORS_2#0) [ ] ( main:12::render_init:17 [ ] ) always clobbers reg byte a
Statement [503] *((const byte*) BGCOL4#0) ← (const byte) GREY#0 [ ] ( main:12::render_init:17 [ ] ) always clobbers reg byte a
Statement [508] (byte~) render_init::$13 ← (byte) render_init::i#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$13 ] ( main:12::render_init:17 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$13 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:102 [ render_init::i#2 render_init::i#1 ]
Statement [509] *((const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_init::$13) ← (byte*) render_init::li_1#2 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 ] ( main:12::render_init:17 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 ] ) always clobbers reg byte a
Statement [510] (byte~) render_init::$14 ← (byte) render_init::i#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$14 ] ( main:12::render_init:17 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$14 ] ) always clobbers reg byte a
Statement [511] *((const byte*[PLAYFIELD_LINES#0]) screen_lines_2#0 + (byte~) render_init::$14) ← (byte*) render_init::li_2#2 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 ] ( main:12::render_init:17 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 ] ) always clobbers reg byte a
Statement [512] (byte*) render_init::li_1#1 ← (byte*) render_init::li_1#2 + (byte/signed byte/word/signed word/dword/signed dword) $28 [ render_init::i#2 render_init::li_2#2 render_init::li_1#1 ] ( main:12::render_init:17 [ render_init::i#2 render_init::li_2#2 render_init::li_1#1 ] ) always clobbers reg byte a
Statement [513] (byte*) render_init::li_2#1 ← (byte*) render_init::li_2#2 + (byte/signed byte/word/signed word/dword/signed dword) $28 [ render_init::i#2 render_init::li_1#1 render_init::li_2#1 ] ( main:12::render_init:17 [ render_init::i#2 render_init::li_1#1 render_init::li_2#1 ] ) always clobbers reg byte a
Statement [520] *((byte*) render_screen_original::screen#5) ← (const byte) render_screen_original::SPACE#0 [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] ( main:12::render_init:17::render_screen_original:504 [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] main:12::render_init:17::render_screen_original:506 [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:107 [ render_screen_original::y#6 render_screen_original::y#1 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:107 [ render_screen_original::y#6 render_screen_original::y#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:116 [ render_screen_original::x#6 render_screen_original::x#5 render_screen_original::x#4 render_screen_original::x#1 render_screen_original::x#2 render_screen_original::x#3 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:116 [ render_screen_original::x#6 render_screen_original::x#5 render_screen_original::x#4 render_screen_original::x#1 render_screen_original::x#2 render_screen_original::x#3 ]
Statement [522] *((byte*) render_screen_original::cols#4) ← (const byte) BLACK#0 [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] ( main:12::render_init:17::render_screen_original:504 [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] main:12::render_init:17::render_screen_original:506 [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] ) always clobbers reg byte a reg byte y
Statement [527] *((byte*) render_screen_original::screen#6) ← *((byte*) render_screen_original::oscr#2) [ render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] ( main:12::render_init:17::render_screen_original:504 [ render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] main:12::render_init:17::render_screen_original:506 [ render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] ) always clobbers reg byte a reg byte y
Statement [530] *((byte*) render_screen_original::cols#5) ← *((byte*) render_screen_original::ocols#2) [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] ( main:12::render_init:17::render_screen_original:504 [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] main:12::render_init:17::render_screen_original:506 [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] ) always clobbers reg byte a reg byte y
Statement [536] *((byte*) render_screen_original::screen#7) ← (const byte) render_screen_original::SPACE#0 [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] ( main:12::render_init:17::render_screen_original:504 [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] main:12::render_init:17::render_screen_original:506 [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] ) always clobbers reg byte a reg byte y
Statement [538] *((byte*) render_screen_original::cols#6) ← (const byte) BLACK#0 [ render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] ( main:12::render_init:17::render_screen_original:504 [ render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] main:12::render_init:17::render_screen_original:506 [ render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] ) always clobbers reg byte a reg byte y
Statement [545] *((const word*) SID_VOICE3_FREQ#0) ← (word/dword/signed dword) $ffff [ ] ( main:12::sid_rnd_init:15 [ ] ) always clobbers reg byte a
Statement [546] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 [ ] ( main:12::sid_rnd_init:15 [ ] ) always clobbers reg byte a
Statement [556] if(*((const byte*) RASTER#0)<(byte) sprites_irq::raster_sprite_gfx_modify#0) goto sprites_irq::@8 [ render_screen_showing#0 irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#0 sprites_irq::raster_sprite_gfx_modify#0 ] ( [ render_screen_showing#0 irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#0 sprites_irq::raster_sprite_gfx_modify#0 ] ) always clobbers reg byte a
Statement [558] if((byte) render_screen_showing#0==(byte/signed byte/word/signed word/dword/signed dword) 0) goto sprites_irq::@1 [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#0 sprites_irq::ptr#0 ] ( [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#0 sprites_irq::ptr#0 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:218 [ sprites_irq::ptr#0 ]
Statement [566] if((byte) irq_cnt#1==(byte/signed byte/word/signed word/dword/signed dword) 9) goto sprites_irq::@3 [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 ] ( [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 ] ) always clobbers reg byte a
Statement [567] if((byte) irq_cnt#1==(byte/signed byte/word/signed word/dword/signed dword) $a) goto sprites_irq::@4 [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 ] ( [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 ] ) always clobbers reg byte a
Statement [568] (byte) irq_raster_next#3 ← (byte) irq_raster_next#0 + (byte/signed byte/word/signed word/dword/signed dword) $14 [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_raster_next#3 ] ( [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_raster_next#3 ] ) always clobbers reg byte a reg byte x
Statement [569] (byte) irq_sprite_ypos#3 ← (byte) irq_sprite_ypos#0 + (byte/signed byte/word/signed word/dword/signed dword) $15 [ irq_sprite_ptr#0 irq_raster_next#3 ] ( [ irq_sprite_ptr#0 irq_raster_next#3 ] ) always clobbers reg byte a reg byte x
Statement [570] (byte) irq_sprite_ptr#3 ← (byte) irq_sprite_ptr#0 + (byte/signed byte/word/signed word/dword/signed dword) 3 [ irq_raster_next#3 ] ( [ irq_raster_next#3 ] ) always clobbers reg byte a reg byte x
Statement [572] *((const byte*) RASTER#0) ← (byte) irq_raster_next#4 [ ] ( [ ] ) always clobbers reg byte a
Statement [573] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ ] ( [ ] ) always clobbers reg byte a
Statement [574] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg byte y
Statement [575] (byte) irq_cnt#2 ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ irq_sprite_ypos#0 irq_sprite_ptr#0 ] ( [ irq_sprite_ypos#0 irq_sprite_ptr#0 ] ) always clobbers reg byte a
Statement [576] (byte) irq_raster_next#2 ← (const byte) IRQ_RASTER_FIRST#0 [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_raster_next#2 ] ( [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_raster_next#2 ] ) always clobbers reg byte a
Statement [577] (byte) irq_sprite_ypos#2 ← (byte) irq_sprite_ypos#0 + (byte/signed byte/word/signed word/dword/signed dword) $15 [ irq_sprite_ptr#0 irq_raster_next#2 ] ( [ irq_sprite_ptr#0 irq_raster_next#2 ] ) always clobbers reg byte a reg byte x
Statement [578] (byte) irq_sprite_ptr#2 ← (byte) irq_sprite_ptr#0 + (byte/signed byte/word/signed word/dword/signed dword) 3 [ irq_raster_next#2 ] ( [ irq_raster_next#2 ] ) always clobbers reg byte a reg byte x
Statement [579] (byte) irq_raster_next#1 ← (byte) irq_raster_next#0 + (byte/signed byte/word/signed word/dword/signed dword) $15 [ irq_raster_next#1 ] ( [ irq_raster_next#1 ] ) always clobbers reg byte a reg byte x
Statement [580] (byte) irq_sprite_ypos#1 ← (const byte) SPRITES_FIRST_YPOS#0 [ irq_raster_next#1 ] ( [ irq_raster_next#1 ] ) always clobbers reg byte a
Statement [582] (byte) irq_sprite_ptr#1 ← (const byte) sprites_irq::toSpritePtr2_return#0 [ irq_raster_next#1 ] ( [ irq_raster_next#1 ] ) always clobbers reg byte a
Statement [1] (byte) render_screen_showing#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( ) always clobbers reg byte a
Statement [6] (byte) irq_raster_next#0 ← (const byte) IRQ_RASTER_FIRST#0 [ ] ( ) always clobbers reg byte a
Statement [7] (byte) irq_sprite_ypos#0 ← (const byte) SPRITES_FIRST_YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) $15 [ ] ( ) always clobbers reg byte a
Statement [9] (byte) irq_sprite_ptr#0 ← (const byte) toSpritePtr1_return#0+(byte/signed byte/word/signed word/dword/signed dword) 3 [ ] ( ) always clobbers reg byte a
Statement [10] (byte) irq_cnt#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( ) always clobbers reg byte a
Statement [32] (byte*~) current_piece_gfx#120 ← (byte*) current_piece_gfx#74 [ current_ypos#106 current_ypos#6 current_xpos#130 current_xpos#103 current_piece_gfx#120 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 current_movedown_slow#1 game_over#52 ] ( main:12 [ current_ypos#106 current_ypos#6 current_xpos#130 current_xpos#103 current_piece_gfx#120 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 current_movedown_slow#1 game_over#52 ] ) always clobbers reg byte a
Statement [37] (byte*~) current_piece#98 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$0) [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#98 current_movedown_slow#1 game_over#52 ] ( main:12 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#98 current_movedown_slow#1 game_over#52 ] ) always clobbers reg byte a
Statement [39] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) $ff) goto main::@2 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 ] ( main:12 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 ] ) always clobbers reg byte a
Statement [48] if((byte) game_over#10==(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@4 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_events_size#16 main::key_event#0 ] ( main:12 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_events_size#16 main::key_event#0 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:124 [ main::key_event#0 ]
Statement [60] (byte*~) current_piece_gfx#121 ← (byte*) current_piece_gfx#18 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 current_ypos#107 render_screen_render#69 current_xpos#131 current_piece_gfx#121 ] ( main:12 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 current_ypos#107 render_screen_render#69 current_xpos#131 current_piece_gfx#121 ] ) always clobbers reg byte a
Statement [70] (byte) render_screen_render#11 ← (byte) render_screen_render#18 ^ (byte/signed byte/word/signed word/dword/signed dword) $40 [ render_screen_show#16 render_screen_render#11 ] ( main:12::render_screen_swap:69 [ current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_show#16 render_screen_render#11 ] ) always clobbers reg byte a
Statement [71] (byte) render_screen_show#13 ← (byte) render_screen_show#16 ^ (byte/signed byte/word/signed word/dword/signed dword) $40 [ render_screen_show#13 render_screen_render#11 ] ( main:12::render_screen_swap:69 [ current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_show#13 render_screen_render#11 ] ) always clobbers reg byte a
Statement [73] if((byte) render_screen_render#18==(byte/signed byte/word/signed word/dword/signed dword) 0) goto render_score::@1 [ render_screen_render#18 lines_bcd#15 level_bcd#17 ] ( main:12::render_score:67 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 ] ) always clobbers reg byte a
Statement [76] (byte*) render_bcd::screen#0 ← (byte*) render_score::screen#3 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen#0 ] ( main:12::render_score:67 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen#0 ] ) always clobbers reg byte a
Statement [79] (byte*) render_bcd::screen#1 ← (byte*) render_score::screen#3 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen#1 ] ( main:12::render_score:67 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen#1 ] ) always clobbers reg byte a
Statement [82] (byte*) render_bcd::screen#2 ← (byte*) render_score::screen#3 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen#2 ] ( main:12::render_score:67 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen#2 ] ) always clobbers reg byte a
Statement [85] (byte) render_bcd::bcd#3 ← > (word) lines_bcd#15 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#3 ] ( main:12::render_score:67 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#3 ] ) always clobbers reg byte a
Statement [86] (byte*) render_bcd::screen#3 ← (byte*) render_score::screen#3 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#3 render_bcd::screen#3 ] ( main:12::render_score:67 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#3 render_bcd::screen#3 ] ) always clobbers reg byte a
Statement [88] (byte) render_bcd::bcd#4 ← < (word) lines_bcd#15 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#4 ] ( main:12::render_score:67 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#4 ] ) always clobbers reg byte a
Statement [89] (byte*) render_bcd::screen#4 ← (byte*) render_score::screen#3 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#4 render_bcd::screen#4 ] ( main:12::render_score:67 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#4 render_bcd::screen#4 ] ) always clobbers reg byte a
Statement [91] (byte*) render_bcd::screen#5 ← (byte*) render_score::screen#3 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::screen#5 ] ( main:12::render_score:67 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::screen#5 ] ) always clobbers reg byte a
Statement [96] (byte*) render_bcd::screen_pos#0 ← (byte*) render_bcd::screen#6 + (word) render_bcd::offset#6 [ render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] ( main:12::render_score:67::render_bcd:78 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:12::render_score:67::render_bcd:81 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:12::render_score:67::render_bcd:84 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:12::render_score:67::render_bcd:87 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:12::render_score:67::render_bcd:90 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:12::render_score:67::render_bcd:93 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] ) always clobbers reg byte a
Statement [98] (byte~) render_bcd::$5 ← (byte) render_bcd::bcd#6 >> (byte/signed byte/word/signed word/dword/signed dword) 4 [ render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] ( main:12::render_score:67::render_bcd:78 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] main:12::render_score:67::render_bcd:81 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] main:12::render_score:67::render_bcd:84 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] main:12::render_score:67::render_bcd:87 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] main:12::render_score:67::render_bcd:90 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] main:12::render_score:67::render_bcd:93 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] ) always clobbers reg byte a
Statement [100] *((byte*) render_bcd::screen_pos#0) ← (byte~) render_bcd::$6 [ render_bcd::bcd#6 render_bcd::screen_pos#0 ] ( main:12::render_score:67::render_bcd:78 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:12::render_score:67::render_bcd:81 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:12::render_score:67::render_bcd:84 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:12::render_score:67::render_bcd:87 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:12::render_score:67::render_bcd:90 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:12::render_score:67::render_bcd:93 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::bcd#6 render_bcd::screen_pos#0 ] ) always clobbers reg byte y
Statement [103] (byte~) render_bcd::$3 ← (byte) render_bcd::bcd#6 & (byte/signed byte/word/signed word/dword/signed dword) $f [ render_bcd::screen_pos#3 render_bcd::$3 ] ( main:12::render_score:67::render_bcd:78 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:12::render_score:67::render_bcd:81 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:12::render_score:67::render_bcd:84 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:12::render_score:67::render_bcd:87 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:12::render_score:67::render_bcd:90 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:12::render_score:67::render_bcd:93 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::screen_pos#3 render_bcd::$3 ] ) always clobbers reg byte a
Statement [105] *((byte*) render_bcd::screen_pos#3) ← (byte~) render_bcd::$4 [ ] ( main:12::render_score:67::render_bcd:78 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:12::render_score:67::render_bcd:81 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:12::render_score:67::render_bcd:84 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:12::render_score:67::render_bcd:87 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:12::render_score:67::render_bcd:90 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:12::render_score:67::render_bcd:93 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 ] ) always clobbers reg byte y
Statement [111] (byte~) render_next::$4 ← (byte) next_piece_idx#12 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ next_piece_idx#12 render_next::screen_next_area#11 render_next::$4 ] ( main:12::render_next:36 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 current_movedown_slow#1 game_over#52 next_piece_idx#12 render_next::screen_next_area#11 render_next::$4 ] main:12::render_next:65 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 next_piece_idx#12 render_next::screen_next_area#11 render_next::$4 ] ) always clobbers reg byte a
Statement [113] (byte*~) render_next::next_piece_gfx#9 ← (byte*)*((const word[]) PIECES#0 + (byte~) render_next::$4) [ render_next::screen_next_area#11 render_next::next_piece_char#0 render_next::next_piece_gfx#9 ] ( main:12::render_next:36 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 current_movedown_slow#1 game_over#52 render_next::screen_next_area#11 render_next::next_piece_char#0 render_next::next_piece_gfx#9 ] main:12::render_next:65 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_next::screen_next_area#11 render_next::next_piece_char#0 render_next::next_piece_gfx#9 ] ) always clobbers reg byte a
Statement [116] (byte) render_next::cell#0 ← *((byte*) render_next::next_piece_gfx#2) [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#2 render_next::screen_next_area#5 render_next::c#2 render_next::cell#0 ] ( main:12::render_next:36 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#2 render_next::screen_next_area#5 render_next::c#2 render_next::cell#0 ] main:12::render_next:65 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#2 render_next::screen_next_area#5 render_next::c#2 render_next::cell#0 ] ) always clobbers reg byte a reg byte y
Statement [119] *((byte*) render_next::screen_next_area#5) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ( main:12::render_next:36 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] main:12::render_next:65 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ) always clobbers reg byte a reg byte y
Statement [123] (byte*) render_next::screen_next_area#4 ← (byte*) render_next::screen_next_area#3 + (byte/signed byte/word/signed word/dword/signed dword) $24 [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#4 ] ( main:12::render_next:36 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#4 ] main:12::render_next:65 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#4 ] ) always clobbers reg byte a
Statement [127] *((byte*) render_next::screen_next_area#5) ← (byte) render_next::next_piece_char#0 [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ( main:12::render_next:36 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] main:12::render_next:65 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ) always clobbers reg byte a reg byte y
Statement [129] (byte) render_moving::ypos2#0 ← (byte) current_ypos#13 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos2#0 ] ( main:12::render_moving:34 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos2#0 ] main:12::render_moving:62 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos2#0 ] ) always clobbers reg byte a
Statement [132] (byte) render_moving::i#1 ← (byte) render_moving::i#3 + (byte/signed byte/word/signed word/dword/signed dword) 4 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos2#2 render_moving::l#4 render_moving::i#1 ] ( main:12::render_moving:34 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos2#2 render_moving::l#4 render_moving::i#1 ] main:12::render_moving:62 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos2#2 render_moving::l#4 render_moving::i#1 ] ) always clobbers reg byte a
Statement [138] (byte~) render_moving::$2 ← (byte) render_screen_render#33 + (byte) render_moving::ypos2#2 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos2#2 render_moving::i#3 render_moving::l#4 render_moving::$2 ] ( main:12::render_moving:34 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos2#2 render_moving::i#3 render_moving::l#4 render_moving::$2 ] main:12::render_moving:62 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos2#2 render_moving::i#3 render_moving::l#4 render_moving::$2 ] ) always clobbers reg byte a
Statement [139] (byte*) render_moving::screen_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_moving::$2) [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos2#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] ( main:12::render_moving:34 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos2#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] main:12::render_moving:62 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos2#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] ) always clobbers reg byte a
Statement [142] (byte) render_moving::current_cell#0 ← *((byte*) current_piece_gfx#64 + (byte) render_moving::i#4) [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos2#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] ( main:12::render_moving:34 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos2#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] main:12::render_moving:62 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos2#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] ) always clobbers reg byte a
Statement [145] *((byte*) render_moving::screen_line#0 + (byte) render_moving::xpos#2) ← (byte) current_piece_char#68 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos2#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] ( main:12::render_moving:34 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos2#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] main:12::render_moving:62 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos2#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] ) always clobbers reg byte a
Statement [151] (byte~) render_playfield::$2 ← (byte) render_playfield::l#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$2 ] ( main:12::render_playfield:29 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$2 ] main:12::render_playfield:56 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$2 ] ) always clobbers reg byte a
Statement [152] (byte~) render_playfield::$3 ← (byte) render_screen_render#22 + (byte~) render_playfield::$2 [ render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$3 ] ( main:12::render_playfield:29 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$3 ] main:12::render_playfield:56 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$3 ] ) always clobbers reg byte a
Statement [153] (byte*) render_playfield::screen_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_playfield::$3) [ render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::screen_line#0 ] ( main:12::render_playfield:29 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::screen_line#0 ] main:12::render_playfield:56 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::screen_line#0 ] ) always clobbers reg byte a
Statement [155] *((byte*) render_playfield::screen_line#2) ← *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) render_playfield::i#2) [ render_screen_render#22 render_playfield::l#2 render_playfield::i#2 render_playfield::screen_line#2 render_playfield::c#2 ] ( main:12::render_playfield:29 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#2 render_playfield::screen_line#2 render_playfield::c#2 ] main:12::render_playfield:56 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#2 render_playfield::screen_line#2 render_playfield::c#2 ] ) always clobbers reg byte a reg byte y
Statement [167] if((byte) game_over#15==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_movement::@1 [ current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_orientation#20 current_piece_gfx#20 current_xpos#22 ] ( main:12::play_movement:51 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_orientation#20 current_piece_gfx#20 current_xpos#22 ] ) always clobbers reg byte a
Statement [174] (byte) play_movement::render#2 ← (byte) play_movement::render#1 + (byte~) play_movement::$3 [ current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_movement::render#2 ] ( main:12::play_movement:51 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_movement::render#2 ] ) always clobbers reg byte a
Statement [179] (byte) play_movement::return#0 ← (byte) play_movement::render#2 + (byte~) play_movement::$4 [ current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::return#0 current_orientation#25 current_piece_gfx#21 current_xpos#26 ] ( main:12::play_movement:51 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::return#0 current_orientation#25 current_piece_gfx#21 current_xpos#26 ] ) always clobbers reg byte a
Statement [184] (byte/signed word/word/dword/signed dword~) play_move_rotate::$5 ← (byte) current_orientation#20 + (byte/signed byte/word/signed word/dword/signed dword) $10 [ current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::$5 ] ( main:12::play_movement:51::play_move_rotate:176 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::$5 ] ) always clobbers reg byte a
Statement [190] (byte*~) current_piece#103 ← (byte*) current_piece#15 [ current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#3 play_collision::ypos#3 play_collision::orientation#3 current_piece#103 ] ( main:12::play_movement:51::play_move_rotate:176 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#3 play_collision::ypos#3 play_collision::orientation#3 current_piece#103 ] ) always clobbers reg byte a
Statement [196] (byte*) current_piece_gfx#7 ← (byte*) current_piece#15 + (byte) current_orientation#7 [ current_piece#15 current_ypos#19 current_xpos#26 current_orientation#7 current_piece_gfx#7 ] ( main:12::play_movement:51::play_move_rotate:176 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_xpos#26 current_orientation#7 current_piece_gfx#7 ] ) always clobbers reg byte a
Statement [197] (byte/signed word/word/dword/signed dword~) play_move_rotate::$7 ← (byte) current_orientation#20 - (byte/signed byte/word/signed word/dword/signed dword) $10 [ current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::$7 ] ( main:12::play_movement:51::play_move_rotate:176 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::$7 ] ) always clobbers reg byte a
Statement [200] (byte*) play_collision::piece_gfx#0 ← (byte*) current_piece#17 + (byte) play_collision::orientation#5 [ play_collision::ypos#5 play_collision::xpos#6 play_collision::piece_gfx#0 ] ( main:12::play_movement:51::play_move_rotate:176::play_collision:191 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::ypos#5 play_collision::xpos#6 play_collision::piece_gfx#0 ] main:12::play_movement:51::play_move_leftright:171::play_collision:229 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::ypos#5 play_collision::xpos#6 play_collision::piece_gfx#0 ] main:12::play_movement:51::play_move_leftright:171::play_collision:240 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::ypos#5 play_collision::xpos#6 play_collision::piece_gfx#0 ] main:12::play_movement:51::play_move_down:164::play_collision:264 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_collision::ypos#5 play_collision::xpos#6 play_collision::piece_gfx#0 ] main:12::play_spawn_current:25::play_collision:293 [ current_movedown_slow#1 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_collision::ypos#5 play_collision::xpos#6 play_collision::piece_gfx#0 ] main:12::play_spawn_current:27::play_collision:293 [ current_movedown_slow#1 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_collision::ypos#5 play_collision::xpos#6 play_collision::piece_gfx#0 ] main:12::play_movement:51::play_move_down:164::play_spawn_current:277::play_collision:293 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_collision::ypos#5 play_collision::xpos#6 play_collision::piece_gfx#0 ] ) always clobbers reg byte a
Statement [201] (byte) play_collision::ypos2#0 ← (byte) play_collision::ypos#5 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#0 ] ( main:12::play_movement:51::play_move_rotate:176::play_collision:191 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#0 ] main:12::play_movement:51::play_move_leftright:171::play_collision:229 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#0 ] main:12::play_movement:51::play_move_leftright:171::play_collision:240 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#0 ] main:12::play_movement:51::play_move_down:164::play_collision:264 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#0 ] main:12::play_spawn_current:25::play_collision:293 [ current_movedown_slow#1 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#0 ] main:12::play_spawn_current:27::play_collision:293 [ current_movedown_slow#1 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#0 ] main:12::play_movement:51::play_move_down:164::play_spawn_current:277::play_collision:293 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#0 ] ) always clobbers reg byte a
Statement [203] (byte*) play_collision::playfield_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte) play_collision::ypos2#2) [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] ( main:12::play_movement:51::play_move_rotate:176::play_collision:191 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] main:12::play_movement:51::play_move_leftright:171::play_collision:229 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] main:12::play_movement:51::play_move_leftright:171::play_collision:240 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] main:12::play_movement:51::play_move_down:164::play_collision:264 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] main:12::play_spawn_current:25::play_collision:293 [ current_movedown_slow#1 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] main:12::play_spawn_current:27::play_collision:293 [ current_movedown_slow#1 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] main:12::play_movement:51::play_move_down:164::play_spawn_current:277::play_collision:293 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] ) always clobbers reg byte a
Statement [207] if(*((byte*) play_collision::piece_gfx#0 + (byte) play_collision::i#2)==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_collision::@3 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 ] ( main:12::play_movement:51::play_move_rotate:176::play_collision:191 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 ] main:12::play_movement:51::play_move_leftright:171::play_collision:229 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 ] main:12::play_movement:51::play_move_leftright:171::play_collision:240 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 ] main:12::play_movement:51::play_move_down:164::play_collision:264 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 ] main:12::play_spawn_current:25::play_collision:293 [ current_movedown_slow#1 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 ] main:12::play_spawn_current:27::play_collision:293 [ current_movedown_slow#1 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 ] main:12::play_movement:51::play_move_down:164::play_spawn_current:277::play_collision:293 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 ] ) always clobbers reg byte a
Statement [211] (byte~) play_collision::$7 ← (byte) play_collision::col#2 & (byte/word/signed word/dword/signed dword) $80 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 play_collision::$7 ] ( main:12::play_movement:51::play_move_rotate:176::play_collision:191 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 play_collision::$7 ] main:12::play_movement:51::play_move_leftright:171::play_collision:229 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 play_collision::$7 ] main:12::play_movement:51::play_move_leftright:171::play_collision:240 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 play_collision::$7 ] main:12::play_movement:51::play_move_down:164::play_collision:264 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 play_collision::$7 ] main:12::play_spawn_current:25::play_collision:293 [ current_movedown_slow#1 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 play_collision::$7 ] main:12::play_spawn_current:27::play_collision:293 [ current_movedown_slow#1 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 play_collision::$7 ] main:12::play_movement:51::play_move_down:164::play_spawn_current:277::play_collision:293 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 play_collision::$7 ] ) always clobbers reg byte a
Statement [214] if(*((byte*) play_collision::playfield_line#0 + (byte) play_collision::col#2)==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_collision::@3 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 ] ( main:12::play_movement:51::play_move_rotate:176::play_collision:191 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 ] main:12::play_movement:51::play_move_leftright:171::play_collision:229 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 ] main:12::play_movement:51::play_move_leftright:171::play_collision:240 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 ] main:12::play_movement:51::play_move_down:164::play_collision:264 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 ] main:12::play_spawn_current:25::play_collision:293 [ current_movedown_slow#1 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 ] main:12::play_spawn_current:27::play_collision:293 [ current_movedown_slow#1 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 ] main:12::play_movement:51::play_move_down:164::play_spawn_current:277::play_collision:293 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 ] ) always clobbers reg byte a
Statement [228] (byte*~) current_piece#102 ← (byte*) current_piece#15 [ current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#102 play_collision::orientation#2 play_collision::ypos#2 play_collision::xpos#2 ] ( main:12::play_movement:51::play_move_leftright:171 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#102 play_collision::orientation#2 play_collision::ypos#2 play_collision::xpos#2 ] ) always clobbers reg byte a
Statement [239] (byte*~) current_piece#101 ← (byte*) current_piece#15 [ current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#101 play_collision::orientation#1 play_collision::ypos#1 play_collision::xpos#1 ] ( main:12::play_movement:51::play_move_leftright:171 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#101 play_collision::orientation#1 play_collision::ypos#1 play_collision::xpos#1 ] ) always clobbers reg byte a
Statement [263] (byte*~) current_piece#100 ← (byte*) current_piece#10 [ current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_piece#100 play_collision::orientation#0 play_collision::ypos#0 play_collision::xpos#0 ] ( main:12::play_movement:51::play_move_down:164 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_piece#100 play_collision::orientation#0 play_collision::ypos#0 play_collision::xpos#0 ] ) always clobbers reg byte a
Statement [278] (byte*~) current_piece#106 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$0) [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#106 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 ] ( main:12::play_movement:51::play_move_down:164 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#106 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 ] ) always clobbers reg byte a
Statement [285] (byte~) play_spawn_current::$0 ← (byte) play_spawn_current::current_piece_idx#0 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ play_spawn_current::$0 game_over#65 play_spawn_current::current_piece_idx#0 ] ( main:12::play_spawn_current:25 [ current_movedown_slow#1 play_spawn_current::$0 game_over#65 play_spawn_current::current_piece_idx#0 ] main:12::play_spawn_current:27 [ current_movedown_slow#1 play_spawn_current::$0 game_over#65 play_spawn_current::current_piece_idx#0 ] main:12::play_movement:51::play_move_down:164::play_spawn_current:277 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 play_spawn_current::$0 game_over#65 play_spawn_current::current_piece_idx#0 ] ) always clobbers reg byte a
Statement [287] (byte*) current_piece_gfx#74 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$0) [ current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_spawn_current::current_piece_idx#0 ] ( main:12::play_spawn_current:25 [ current_movedown_slow#1 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_spawn_current::current_piece_idx#0 ] main:12::play_spawn_current:27 [ current_movedown_slow#1 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_spawn_current::current_piece_idx#0 ] main:12::play_movement:51::play_move_down:164::play_spawn_current:277 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_spawn_current::current_piece_idx#0 ] ) always clobbers reg byte a
Statement [292] (byte*~) current_piece#104 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$0) [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 current_piece#104 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] ( main:12::play_spawn_current:25 [ current_movedown_slow#1 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 current_piece#104 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] main:12::play_spawn_current:27 [ current_movedown_slow#1 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 current_piece#104 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] main:12::play_movement:51::play_move_down:164::play_spawn_current:277 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 current_piece#104 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] ) always clobbers reg byte a
Statement [299] if((byte) play_spawn_current::piece_idx#2==(byte/signed byte/word/signed word/dword/signed dword) 7) goto play_spawn_current::sid_rnd1 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 game_over#52 ] ( main:12::play_spawn_current:25 [ current_movedown_slow#1 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 game_over#52 ] main:12::play_spawn_current:27 [ current_movedown_slow#1 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 game_over#52 ] main:12::play_movement:51::play_move_down:164::play_spawn_current:277 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 game_over#52 ] ) always clobbers reg byte a
Statement [302] (byte) play_spawn_current::piece_idx#1 ← (byte) play_spawn_current::sid_rnd1_return#0 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#52 play_spawn_current::piece_idx#1 ] ( main:12::play_spawn_current:25 [ current_movedown_slow#1 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#52 play_spawn_current::piece_idx#1 ] main:12::play_spawn_current:27 [ current_movedown_slow#1 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#52 play_spawn_current::piece_idx#1 ] main:12::play_movement:51::play_move_down:164::play_spawn_current:277 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#52 play_spawn_current::piece_idx#1 ] ) always clobbers reg byte a
Statement [305] (byte~) play_update_score::$2 ← < (word) lines_bcd#19 [ current_movedown_slow#14 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::$2 ] ( main:12::play_movement:51::play_move_down:164::play_update_score:275 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::$2 ] ) always clobbers reg byte a
Statement [307] (byte~) play_update_score::$4 ← (byte) play_update_score::removed#0 << (byte/signed byte/word/signed word/dword/signed dword) 2 [ current_movedown_slow#14 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::$4 ] ( main:12::play_movement:51::play_move_down:164::play_update_score:275 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::$4 ] ) always clobbers reg byte a
Statement [308] (dword) play_update_score::add_bcd#0 ← *((const dword[5]) score_add_bcd#0 + (byte~) play_update_score::$4) [ current_movedown_slow#14 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::add_bcd#0 ] ( main:12::play_movement:51::play_move_down:164::play_update_score:275 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::add_bcd#0 ] ) always clobbers reg byte a
Statement [310] (word) lines_bcd#30 ← (word) lines_bcd#19 + (byte) play_update_score::removed#0 [ current_movedown_slow#14 score_bcd#18 level#10 level_bcd#11 play_update_score::lines_before#0 play_update_score::add_bcd#0 lines_bcd#30 ] ( main:12::play_movement:51::play_move_down:164::play_update_score:275 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 score_bcd#18 level#10 level_bcd#11 play_update_score::lines_before#0 play_update_score::add_bcd#0 lines_bcd#30 ] ) always clobbers reg byte a
Statement [311] (dword) score_bcd#30 ← (dword) score_bcd#18 + (dword) play_update_score::add_bcd#0 [ current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#30 score_bcd#30 ] ( main:12::play_movement:51::play_move_down:164::play_update_score:275 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#30 score_bcd#30 ] ) always clobbers reg byte a
Statement [313] (byte~) play_update_score::$5 ← < (word) lines_bcd#30 [ current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#30 score_bcd#30 play_update_score::$5 ] ( main:12::play_movement:51::play_move_down:164::play_update_score:275 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#30 score_bcd#30 play_update_score::$5 ] ) always clobbers reg byte a
Statement [321] if((byte) level#21>=(byte/signed byte/word/signed word/dword/signed dword) $1d+(byte/signed byte/word/signed word/dword/signed dword) 1) goto play_increase_level::@1 [ level_bcd#11 level#21 ] ( main:12::play_movement:51::play_move_down:164::play_update_score:275::play_increase_level:317 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#30 score_bcd#30 level_bcd#11 level#21 ] ) always clobbers reg byte a
Statement [322] (byte) current_movedown_slow#10 ← *((const byte[]) MOVEDOWN_SLOW_SPEEDS#0 + (byte) level#21) [ level_bcd#11 level#21 current_movedown_slow#10 ] ( main:12::play_movement:51::play_move_down:164::play_update_score:275::play_increase_level:317 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#30 score_bcd#30 level_bcd#11 level#21 current_movedown_slow#10 ] ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:125 [ play_movement::key_event#0 ]
Statement [325] (byte~) play_increase_level::$1 ← (byte) level_bcd#21 & (byte/signed byte/word/signed word/dword/signed dword) $f [ level#21 current_movedown_slow#69 level_bcd#21 play_increase_level::$1 ] ( main:12::play_movement:51::play_move_down:164::play_update_score:275::play_increase_level:317 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#30 score_bcd#30 level#21 current_movedown_slow#69 level_bcd#21 play_increase_level::$1 ] ) always clobbers reg byte a
Statement [327] (byte) level_bcd#8 ← (byte) level_bcd#21 + (byte/signed byte/word/signed word/dword/signed dword) 6 [ level#21 current_movedown_slow#69 level_bcd#8 ] ( main:12::play_movement:51::play_move_down:164::play_update_score:275::play_increase_level:317 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#30 score_bcd#30 level#21 current_movedown_slow#69 level_bcd#8 ] ) always clobbers reg byte a reg byte x
Statement [331] (byte) play_increase_level::b4#0 ← (byte) play_increase_level::b#2 << (byte/signed byte/word/signed word/dword/signed dword) 2 [ level#21 current_movedown_slow#69 level_bcd#64 play_increase_level::b#2 play_increase_level::b4#0 ] ( main:12::play_movement:51::play_move_down:164::play_update_score:275::play_increase_level:317 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#30 score_bcd#30 level#21 current_movedown_slow#69 level_bcd#64 play_increase_level::b#2 play_increase_level::b4#0 ] ) always clobbers reg byte a
Statement [332] *((const dword[5]) score_add_bcd#0 + (byte) play_increase_level::b4#0) ← *((const dword[5]) score_add_bcd#0 + (byte) play_increase_level::b4#0) + *((const dword[]) SCORE_BASE_BCD#0 + (byte) play_increase_level::b4#0) [ level#21 current_movedown_slow#69 level_bcd#64 play_increase_level::b#2 ] ( main:12::play_movement:51::play_move_down:164::play_update_score:275::play_increase_level:317 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#30 score_bcd#30 level#21 current_movedown_slow#69 level_bcd#64 play_increase_level::b#2 ] ) always clobbers reg byte a
Statement [349] (byte) play_remove_lines::w#2 ← (byte) play_remove_lines::w#1 + (const byte) PLAYFIELD_COLS#0 [ play_remove_lines::y#8 play_remove_lines::removed#11 play_remove_lines::r#1 play_remove_lines::w#2 ] ( main:12::play_movement:51::play_move_down:164::play_remove_lines:271 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_remove_lines::y#8 play_remove_lines::removed#11 play_remove_lines::r#1 play_remove_lines::w#2 ] ) always clobbers reg byte a
Statement [357] *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::w#6) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ play_remove_lines::removed#8 play_remove_lines::w#6 ] ( main:12::play_movement:51::play_move_down:164::play_remove_lines:271 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_remove_lines::removed#8 play_remove_lines::w#6 ] ) always clobbers reg byte a
Statement [360] (byte) play_lock_current::ypos2#0 ← (byte) current_ypos#100 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ current_piece_char#10 current_piece_gfx#114 current_xpos#124 play_lock_current::ypos2#0 ] ( main:12::play_movement:51::play_move_down:164::play_lock_current:269 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#114 current_xpos#124 play_lock_current::ypos2#0 ] ) always clobbers reg byte a
Statement [362] (byte*) play_lock_current::playfield_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte) play_lock_current::ypos2#2) [ current_piece_char#10 current_piece_gfx#114 current_xpos#124 play_lock_current::ypos2#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::playfield_line#0 ] ( main:12::play_movement:51::play_move_down:164::play_lock_current:269 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#114 current_xpos#124 play_lock_current::ypos2#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::playfield_line#0 ] ) always clobbers reg byte a
Statement [366] if(*((byte*) current_piece_gfx#114 + (byte) play_lock_current::i#2)==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_lock_current::@3 [ current_piece_char#10 current_piece_gfx#114 current_xpos#124 play_lock_current::ypos2#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::col#2 play_lock_current::c#2 play_lock_current::i#1 ] ( main:12::play_movement:51::play_move_down:164::play_lock_current:269 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#114 current_xpos#124 play_lock_current::ypos2#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::col#2 play_lock_current::c#2 play_lock_current::i#1 ] ) always clobbers reg byte a
Statement [367] *((byte*) play_lock_current::playfield_line#0 + (byte) play_lock_current::col#2) ← (byte) current_piece_char#10 [ current_piece_char#10 current_piece_gfx#114 current_xpos#124 play_lock_current::ypos2#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::col#2 play_lock_current::c#2 play_lock_current::i#1 ] ( main:12::play_movement:51::play_move_down:164::play_lock_current:269 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#114 current_xpos#124 play_lock_current::ypos2#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::col#2 play_lock_current::c#2 play_lock_current::i#1 ] ) always clobbers reg byte a
Statement [378] (byte~) keyboard_event_pressed::$0 ← (byte) keyboard_event_pressed::keycode#5 >> (byte/signed byte/word/signed word/dword/signed dword) 3 [ keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] ( main:12::play_movement:51::play_move_down:164::keyboard_event_pressed:249 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:12::keyboard_event_scan:43::keyboard_event_pressed:400 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:12::keyboard_event_scan:43::keyboard_event_pressed:406 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:12::keyboard_event_scan:43::keyboard_event_pressed:412 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:12::keyboard_event_scan:43::keyboard_event_pressed:418 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] ) always clobbers reg byte a
Statement [380] (byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#5 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] ( main:12::play_movement:51::play_move_down:164::keyboard_event_pressed:249 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:12::keyboard_event_scan:43::keyboard_event_pressed:400 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:12::keyboard_event_scan:43::keyboard_event_pressed:406 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:12::keyboard_event_scan:43::keyboard_event_pressed:412 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:12::keyboard_event_scan:43::keyboard_event_pressed:418 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] ) always clobbers reg byte a
Statement [381] (byte) keyboard_event_pressed::return#11 ← (byte) keyboard_event_pressed::row_bits#0 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte~) keyboard_event_pressed::$1) [ keyboard_event_pressed::return#11 ] ( main:12::play_movement:51::play_move_down:164::keyboard_event_pressed:249 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::return#11 ] main:12::keyboard_event_scan:43::keyboard_event_pressed:400 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] main:12::keyboard_event_scan:43::keyboard_event_pressed:406 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] main:12::keyboard_event_scan:43::keyboard_event_pressed:412 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] main:12::keyboard_event_scan:43::keyboard_event_pressed:418 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] ) always clobbers reg byte a
Statement [383] if((byte) keyboard_events_size#13==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_get::@return [ keyboard_events_size#13 ] ( main:12::keyboard_event_get:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_events_size#13 ] ) always clobbers reg byte a
Statement [385] (byte) keyboard_event_get::return#1 ← *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#4) [ keyboard_events_size#4 keyboard_event_get::return#1 ] ( main:12::keyboard_event_get:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_events_size#4 keyboard_event_get::return#1 ] ) always clobbers reg byte y
Statement [394] if((byte) keyboard_event_scan::row_scan#0!=*((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2)) goto keyboard_event_scan::@9 [ keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_event_scan::row_scan#0 ] ( main:12::keyboard_event_scan:43 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_event_scan::row_scan#0 ] ) always clobbers reg byte a
Statement [395] (byte) keyboard_event_scan::keycode#1 ← (byte) keyboard_event_scan::keycode#11 + (byte/signed byte/word/signed word/dword/signed dword) 8 [ keyboard_event_scan::row#2 keyboard_events_size#30 keyboard_event_scan::keycode#1 ] ( main:12::keyboard_event_scan:43 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_events_size#30 keyboard_event_scan::keycode#1 ] ) always clobbers reg byte a reg byte x
Removing always clobbered register reg byte x as potential for zp ZP_BYTE:68 [ current_piece_char#29 current_piece_char#10 current_piece_char#16 current_piece_char#5 ]
Removing always clobbered register reg byte x as potential for zp ZP_BYTE:69 [ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ]
Removing always clobbered register reg byte x as potential for zp ZP_BYTE:72 [ current_xpos#43 current_xpos#124 current_xpos#19 current_xpos#103 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ]
Removing always clobbered register reg byte x as potential for zp ZP_BYTE:56 [ current_ypos#38 current_ypos#3 current_ypos#100 current_ypos#19 current_ypos#6 ]
Removing always clobbered register reg byte x as potential for zp ZP_BYTE:4 [ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 ]
Removing always clobbered register reg byte x as potential for zp ZP_BYTE:65 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#64 level_bcd#21 level_bcd#8 ]
Removing always clobbered register reg byte x as potential for zp ZP_BYTE:90 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ]
Statement [398] if((byte) keyboard_event_scan::row#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto keyboard_event_scan::@7 [ keyboard_events_size#13 keyboard_event_scan::row#1 keyboard_event_scan::keycode#14 ] ( main:12::keyboard_event_scan:43 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_scan::row#1 keyboard_event_scan::keycode#14 ] ) always clobbers reg byte a
Statement [425] (byte~) keyboard_event_scan::$15 ← (byte) keyboard_event_scan::row_scan#0 ^ *((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$15 ] ( main:12::keyboard_event_scan:43 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$15 ] ) always clobbers reg byte a
Statement [426] (byte~) keyboard_event_scan::$16 ← (byte~) keyboard_event_scan::$15 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte) keyboard_event_scan::col#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$16 ] ( main:12::keyboard_event_scan:43 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$16 ] ) always clobbers reg byte a
Statement [428] if((byte) keyboard_events_size#10==(byte/signed byte/word/signed word/dword/signed dword) 8) goto keyboard_event_scan::@10 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:12::keyboard_event_scan:43 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ) always clobbers reg byte a
Statement [429] (byte) keyboard_event_scan::event_type#0 ← (byte) keyboard_event_scan::row_scan#0 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte) keyboard_event_scan::col#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::event_type#0 ] ( main:12::keyboard_event_scan:43 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::event_type#0 ] ) always clobbers reg byte a
Statement [431] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte) keyboard_event_scan::keycode#10 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:12::keyboard_event_scan:43 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ) always clobbers reg byte a reg byte y
Statement [437] *((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2) ← (byte) keyboard_event_scan::row_scan#0 [ keyboard_event_scan::row#2 keyboard_event_scan::keycode#15 keyboard_events_size#29 ] ( main:12::keyboard_event_scan:43 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#15 keyboard_events_size#29 ] ) always clobbers reg byte a reg byte y
Statement [438] (byte/word/dword~) keyboard_event_scan::$23 ← (byte) keyboard_event_scan::keycode#10 | (byte/signed byte/word/signed word/dword/signed dword) $40 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$23 ] ( main:12::keyboard_event_scan:43 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$23 ] ) always clobbers reg byte a
Statement [439] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte/word/dword~) keyboard_event_scan::$23 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:12::keyboard_event_scan:43 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ) always clobbers reg byte y
Statement [441] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:12::keyboard_event_scan:43::keyboard_matrix_read:391 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 ] ) always clobbers reg byte a
Statement [442] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B#0) [ keyboard_matrix_read::return#0 ] ( main:12::keyboard_event_scan:43::keyboard_matrix_read:391 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_matrix_read::return#0 ] ) always clobbers reg byte a
Statement [444] if((byte) render_screen_show#16==(byte/signed byte/word/signed word/dword/signed dword) 0) goto render_show::toD0181 [ render_screen_show#16 level#10 ] ( main:12::render_show:41 [ render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level_bcd#11 render_screen_show#16 level#10 ] ) always clobbers reg byte a
Statement [448] *((const byte*) BGCOL2#0) ← *((const byte[]) PIECES_COLORS_1#0 + (byte) level#10) [ render_screen_show#16 level#10 ] ( main:12::render_show:41 [ render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level_bcd#11 render_screen_show#16 level#10 ] ) always clobbers reg byte a reg byte y
Statement [449] *((const byte*) BGCOL3#0) ← *((const byte[]) PIECES_COLORS_2#0 + (byte) level#10) [ render_screen_show#16 level#10 ] ( main:12::render_show:41 [ render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level_bcd#11 render_screen_show#16 level#10 ] ) always clobbers reg byte a reg byte y
Statement [450] (byte) render_screen_showing#1 ← (byte) render_screen_show#16 [ render_screen_show#16 level#10 ] ( main:12::render_show:41 [ render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level_bcd#11 render_screen_show#16 level#10 ] ) always clobbers reg byte a
Statement [455] (byte~) play_init::$2 ← (byte) play_init::j#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ play_init::j#2 play_init::pli#2 play_init::idx#2 play_init::$2 ] ( main:12::play_init:23 [ play_init::j#2 play_init::pli#2 play_init::idx#2 play_init::$2 ] ) always clobbers reg byte a
Statement [456] *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte~) play_init::$2) ← (byte*) play_init::pli#2 [ play_init::j#2 play_init::pli#2 play_init::idx#2 ] ( main:12::play_init:23 [ play_init::j#2 play_init::pli#2 play_init::idx#2 ] ) always clobbers reg byte a
Statement [457] *((const byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx#0 + (byte) play_init::j#2) ← (byte) play_init::idx#2 [ play_init::j#2 play_init::pli#2 play_init::idx#2 ] ( main:12::play_init:23 [ play_init::j#2 play_init::pli#2 play_init::idx#2 ] ) always clobbers reg byte a
Statement [458] (byte*) play_init::pli#1 ← (byte*) play_init::pli#2 + (const byte) PLAYFIELD_COLS#0 [ play_init::j#2 play_init::idx#2 play_init::pli#1 ] ( main:12::play_init:23 [ play_init::j#2 play_init::idx#2 play_init::pli#1 ] ) always clobbers reg byte a
Statement [459] (byte) play_init::idx#1 ← (byte) play_init::idx#2 + (const byte) PLAYFIELD_COLS#0 [ play_init::j#2 play_init::pli#1 play_init::idx#1 ] ( main:12::play_init:23 [ play_init::j#2 play_init::pli#1 play_init::idx#1 ] ) always clobbers reg byte a
Statement [462] *((const byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx#0+(const byte) PLAYFIELD_LINES#0) ← (const byte) PLAYFIELD_COLS#0*(const byte) PLAYFIELD_LINES#0 [ ] ( main:12::play_init:23 [ ] ) always clobbers reg byte a
Statement [463] (byte) current_movedown_slow#1 ← *((const byte[]) MOVEDOWN_SLOW_SPEEDS#0) [ current_movedown_slow#1 ] ( main:12::play_init:23 [ current_movedown_slow#1 ] ) always clobbers reg byte a
Statement [465] (byte) play_init::b4#0 ← (byte) play_init::b#2 << (byte/signed byte/word/signed word/dword/signed dword) 2 [ current_movedown_slow#1 play_init::b#2 play_init::b4#0 ] ( main:12::play_init:23 [ current_movedown_slow#1 play_init::b#2 play_init::b4#0 ] ) always clobbers reg byte a
Statement [466] *((const dword[5]) score_add_bcd#0 + (byte) play_init::b4#0) ← *((const dword[]) SCORE_BASE_BCD#0 + (byte) play_init::b4#0) [ current_movedown_slow#1 play_init::b#2 ] ( main:12::play_init:23 [ current_movedown_slow#1 play_init::b#2 ] ) always clobbers reg byte a
Statement [471] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ ] ( main:12::sprites_irq_init:21 [ ] ) always clobbers reg byte a
Statement asm { ldaCIA1_INTERRUPT } always clobbers reg byte a
Statement [473] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0 [ ] ( main:12::sprites_irq_init:21 [ ] ) always clobbers reg byte a
Statement [474] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 [ ] ( main:12::sprites_irq_init:21 [ ] ) always clobbers reg byte a
Statement [475] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0 [ ] ( main:12::sprites_irq_init:21 [ ] ) always clobbers reg byte a
Statement [476] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte/signed byte/word/signed word/dword/signed dword) $7f [ ] ( main:12::sprites_irq_init:21 [ ] ) always clobbers reg byte a
Statement [477] *((const byte*) RASTER#0) ← (const byte) IRQ_RASTER_FIRST#0 [ ] ( main:12::sprites_irq_init:21 [ ] ) always clobbers reg byte a
Statement [478] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0 [ ] ( main:12::sprites_irq_init:21 [ ] ) always clobbers reg byte a
Statement [479] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_CLOBBER)(void()) sprites_irq() [ ] ( main:12::sprites_irq_init:21 [ ] ) always clobbers reg byte a
Statement [482] *((const byte*) SPRITES_ENABLE#0) ← (byte/signed byte/word/signed word/dword/signed dword) $f [ ] ( main:12::sprites_init:19 [ ] ) always clobbers reg byte a
Statement [483] *((const byte*) SPRITES_MC#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:12::sprites_init:19 [ ] ) always clobbers reg byte a
Statement [484] *((const byte*) SPRITES_EXPAND_Y#0) ← *((const byte*) SPRITES_MC#0) [ ] ( main:12::sprites_init:19 [ ] ) always clobbers reg byte a
Statement [485] *((const byte*) SPRITES_EXPAND_X#0) ← *((const byte*) SPRITES_EXPAND_Y#0) [ ] ( main:12::sprites_init:19 [ ] ) always clobbers reg byte a
Statement [487] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ sprites_init::s#2 sprites_init::xpos#2 sprites_init::s2#0 ] ( main:12::sprites_init:19 [ sprites_init::s#2 sprites_init::xpos#2 sprites_init::s2#0 ] ) always clobbers reg byte a
Statement [488] *((const byte*) SPRITES_XPOS#0 + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2 [ sprites_init::s#2 sprites_init::xpos#2 ] ( main:12::sprites_init:19 [ sprites_init::s#2 sprites_init::xpos#2 ] ) always clobbers reg byte a
Statement [489] *((const byte*) SPRITES_COLS#0 + (byte) sprites_init::s#2) ← (const byte) BLACK#0 [ sprites_init::s#2 sprites_init::xpos#2 ] ( main:12::sprites_init:19 [ sprites_init::s#2 sprites_init::xpos#2 ] ) always clobbers reg byte a
Statement [490] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte/signed byte/word/signed word/dword/signed dword) $18 [ sprites_init::s#2 sprites_init::xpos#1 ] ( main:12::sprites_init:19 [ sprites_init::s#2 sprites_init::xpos#1 ] ) always clobbers reg byte a
Statement [495] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte/signed byte/word/signed word/dword/signed dword) 3 [ ] ( main:12::render_init:17 [ ] ) always clobbers reg byte a
Statement [497] *((const byte*) CIA2_PORT_A#0) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:12::render_init:17 [ ] ) always clobbers reg byte a
Statement [498] *((const byte*) D011#0) ← (const byte) VIC_ECM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte/signed byte/word/signed word/dword/signed dword) 3 [ ] ( main:12::render_init:17 [ ] ) always clobbers reg byte a
Statement [499] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 [ ] ( main:12::render_init:17 [ ] ) always clobbers reg byte a
Statement [500] *((const byte*) BGCOL1#0) ← (const byte) BLACK#0 [ ] ( main:12::render_init:17 [ ] ) always clobbers reg byte a
Statement [501] *((const byte*) BGCOL2#0) ← *((const byte[]) PIECES_COLORS_1#0) [ ] ( main:12::render_init:17 [ ] ) always clobbers reg byte a
Statement [502] *((const byte*) BGCOL3#0) ← *((const byte[]) PIECES_COLORS_2#0) [ ] ( main:12::render_init:17 [ ] ) always clobbers reg byte a
Statement [503] *((const byte*) BGCOL4#0) ← (const byte) GREY#0 [ ] ( main:12::render_init:17 [ ] ) always clobbers reg byte a
Statement [508] (byte~) render_init::$13 ← (byte) render_init::i#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$13 ] ( main:12::render_init:17 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$13 ] ) always clobbers reg byte a
Statement [509] *((const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_init::$13) ← (byte*) render_init::li_1#2 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 ] ( main:12::render_init:17 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 ] ) always clobbers reg byte a
Statement [510] (byte~) render_init::$14 ← (byte) render_init::i#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$14 ] ( main:12::render_init:17 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$14 ] ) always clobbers reg byte a
Statement [511] *((const byte*[PLAYFIELD_LINES#0]) screen_lines_2#0 + (byte~) render_init::$14) ← (byte*) render_init::li_2#2 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 ] ( main:12::render_init:17 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 ] ) always clobbers reg byte a
Statement [512] (byte*) render_init::li_1#1 ← (byte*) render_init::li_1#2 + (byte/signed byte/word/signed word/dword/signed dword) $28 [ render_init::i#2 render_init::li_2#2 render_init::li_1#1 ] ( main:12::render_init:17 [ render_init::i#2 render_init::li_2#2 render_init::li_1#1 ] ) always clobbers reg byte a
Statement [513] (byte*) render_init::li_2#1 ← (byte*) render_init::li_2#2 + (byte/signed byte/word/signed word/dword/signed dword) $28 [ render_init::i#2 render_init::li_1#1 render_init::li_2#1 ] ( main:12::render_init:17 [ render_init::i#2 render_init::li_1#1 render_init::li_2#1 ] ) always clobbers reg byte a
Statement [520] *((byte*) render_screen_original::screen#5) ← (const byte) render_screen_original::SPACE#0 [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] ( main:12::render_init:17::render_screen_original:504 [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] main:12::render_init:17::render_screen_original:506 [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] ) always clobbers reg byte a reg byte y
Statement [522] *((byte*) render_screen_original::cols#4) ← (const byte) BLACK#0 [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] ( main:12::render_init:17::render_screen_original:504 [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] main:12::render_init:17::render_screen_original:506 [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] ) always clobbers reg byte a reg byte y
Statement [527] *((byte*) render_screen_original::screen#6) ← *((byte*) render_screen_original::oscr#2) [ render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] ( main:12::render_init:17::render_screen_original:504 [ render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] main:12::render_init:17::render_screen_original:506 [ render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] ) always clobbers reg byte a reg byte y
Statement [530] *((byte*) render_screen_original::cols#5) ← *((byte*) render_screen_original::ocols#2) [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] ( main:12::render_init:17::render_screen_original:504 [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] main:12::render_init:17::render_screen_original:506 [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] ) always clobbers reg byte a reg byte y
Statement [536] *((byte*) render_screen_original::screen#7) ← (const byte) render_screen_original::SPACE#0 [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] ( main:12::render_init:17::render_screen_original:504 [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] main:12::render_init:17::render_screen_original:506 [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] ) always clobbers reg byte a reg byte y
Statement [538] *((byte*) render_screen_original::cols#6) ← (const byte) BLACK#0 [ render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] ( main:12::render_init:17::render_screen_original:504 [ render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] main:12::render_init:17::render_screen_original:506 [ render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] ) always clobbers reg byte a reg byte y
Statement [545] *((const word*) SID_VOICE3_FREQ#0) ← (word/dword/signed dword) $ffff [ ] ( main:12::sid_rnd_init:15 [ ] ) always clobbers reg byte a
Statement [546] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 [ ] ( main:12::sid_rnd_init:15 [ ] ) always clobbers reg byte a
Statement [556] if(*((const byte*) RASTER#0)<(byte) sprites_irq::raster_sprite_gfx_modify#0) goto sprites_irq::@8 [ render_screen_showing#0 irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#0 sprites_irq::raster_sprite_gfx_modify#0 ] ( [ render_screen_showing#0 irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#0 sprites_irq::raster_sprite_gfx_modify#0 ] ) always clobbers reg byte a
Statement [558] if((byte) render_screen_showing#0==(byte/signed byte/word/signed word/dword/signed dword) 0) goto sprites_irq::@1 [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#0 sprites_irq::ptr#0 ] ( [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#0 sprites_irq::ptr#0 ] ) always clobbers reg byte a
Statement [566] if((byte) irq_cnt#1==(byte/signed byte/word/signed word/dword/signed dword) 9) goto sprites_irq::@3 [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 ] ( [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 ] ) always clobbers reg byte a
Statement [567] if((byte) irq_cnt#1==(byte/signed byte/word/signed word/dword/signed dword) $a) goto sprites_irq::@4 [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 ] ( [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 ] ) always clobbers reg byte a
Statement [568] (byte) irq_raster_next#3 ← (byte) irq_raster_next#0 + (byte/signed byte/word/signed word/dword/signed dword) $14 [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_raster_next#3 ] ( [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_raster_next#3 ] ) always clobbers reg byte a reg byte x
Statement [569] (byte) irq_sprite_ypos#3 ← (byte) irq_sprite_ypos#0 + (byte/signed byte/word/signed word/dword/signed dword) $15 [ irq_sprite_ptr#0 irq_raster_next#3 ] ( [ irq_sprite_ptr#0 irq_raster_next#3 ] ) always clobbers reg byte a reg byte x
Statement [570] (byte) irq_sprite_ptr#3 ← (byte) irq_sprite_ptr#0 + (byte/signed byte/word/signed word/dword/signed dword) 3 [ irq_raster_next#3 ] ( [ irq_raster_next#3 ] ) always clobbers reg byte a reg byte x
Statement [572] *((const byte*) RASTER#0) ← (byte) irq_raster_next#4 [ ] ( [ ] ) always clobbers reg byte a
Statement [573] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ ] ( [ ] ) always clobbers reg byte a
Statement [574] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg byte y
Statement [575] (byte) irq_cnt#2 ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ irq_sprite_ypos#0 irq_sprite_ptr#0 ] ( [ irq_sprite_ypos#0 irq_sprite_ptr#0 ] ) always clobbers reg byte a
Statement [576] (byte) irq_raster_next#2 ← (const byte) IRQ_RASTER_FIRST#0 [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_raster_next#2 ] ( [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_raster_next#2 ] ) always clobbers reg byte a
Statement [577] (byte) irq_sprite_ypos#2 ← (byte) irq_sprite_ypos#0 + (byte/signed byte/word/signed word/dword/signed dword) $15 [ irq_sprite_ptr#0 irq_raster_next#2 ] ( [ irq_sprite_ptr#0 irq_raster_next#2 ] ) always clobbers reg byte a reg byte x
Statement [578] (byte) irq_sprite_ptr#2 ← (byte) irq_sprite_ptr#0 + (byte/signed byte/word/signed word/dword/signed dword) 3 [ irq_raster_next#2 ] ( [ irq_raster_next#2 ] ) always clobbers reg byte a reg byte x
Statement [579] (byte) irq_raster_next#1 ← (byte) irq_raster_next#0 + (byte/signed byte/word/signed word/dword/signed dword) $15 [ irq_raster_next#1 ] ( [ irq_raster_next#1 ] ) always clobbers reg byte a reg byte x
Statement [580] (byte) irq_sprite_ypos#1 ← (const byte) SPRITES_FIRST_YPOS#0 [ irq_raster_next#1 ] ( [ irq_raster_next#1 ] ) always clobbers reg byte a
Statement [582] (byte) irq_sprite_ptr#1 ← (const byte) sprites_irq::toSpritePtr2_return#0 [ irq_raster_next#1 ] ( [ irq_raster_next#1 ] ) always clobbers reg byte a
Statement [1] (byte) render_screen_showing#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( ) always clobbers reg byte a
Statement [6] (byte) irq_raster_next#0 ← (const byte) IRQ_RASTER_FIRST#0 [ ] ( ) always clobbers reg byte a
Statement [7] (byte) irq_sprite_ypos#0 ← (const byte) SPRITES_FIRST_YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) $15 [ ] ( ) always clobbers reg byte a
Statement [9] (byte) irq_sprite_ptr#0 ← (const byte) toSpritePtr1_return#0+(byte/signed byte/word/signed word/dword/signed dword) 3 [ ] ( ) always clobbers reg byte a
Statement [10] (byte) irq_cnt#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( ) always clobbers reg byte a
Statement [32] (byte*~) current_piece_gfx#120 ← (byte*) current_piece_gfx#74 [ current_ypos#106 current_ypos#6 current_xpos#130 current_xpos#103 current_piece_gfx#120 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 current_movedown_slow#1 game_over#52 ] ( main:12 [ current_ypos#106 current_ypos#6 current_xpos#130 current_xpos#103 current_piece_gfx#120 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 current_movedown_slow#1 game_over#52 ] ) always clobbers reg byte a
Statement [37] (byte*~) current_piece#98 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$0) [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#98 current_movedown_slow#1 game_over#52 ] ( main:12 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#98 current_movedown_slow#1 game_over#52 ] ) always clobbers reg byte a
Statement [39] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) $ff) goto main::@2 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 ] ( main:12 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 ] ) always clobbers reg byte a
Statement [48] if((byte) game_over#10==(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@4 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_events_size#16 main::key_event#0 ] ( main:12 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_events_size#16 main::key_event#0 ] ) always clobbers reg byte a
Statement [60] (byte*~) current_piece_gfx#121 ← (byte*) current_piece_gfx#18 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 current_ypos#107 render_screen_render#69 current_xpos#131 current_piece_gfx#121 ] ( main:12 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 current_ypos#107 render_screen_render#69 current_xpos#131 current_piece_gfx#121 ] ) always clobbers reg byte a
Statement [70] (byte) render_screen_render#11 ← (byte) render_screen_render#18 ^ (byte/signed byte/word/signed word/dword/signed dword) $40 [ render_screen_show#16 render_screen_render#11 ] ( main:12::render_screen_swap:69 [ current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_show#16 render_screen_render#11 ] ) always clobbers reg byte a
Statement [71] (byte) render_screen_show#13 ← (byte) render_screen_show#16 ^ (byte/signed byte/word/signed word/dword/signed dword) $40 [ render_screen_show#13 render_screen_render#11 ] ( main:12::render_screen_swap:69 [ current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_show#13 render_screen_render#11 ] ) always clobbers reg byte a
Statement [73] if((byte) render_screen_render#18==(byte/signed byte/word/signed word/dword/signed dword) 0) goto render_score::@1 [ render_screen_render#18 lines_bcd#15 level_bcd#17 ] ( main:12::render_score:67 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 ] ) always clobbers reg byte a
Statement [76] (byte*) render_bcd::screen#0 ← (byte*) render_score::screen#3 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen#0 ] ( main:12::render_score:67 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen#0 ] ) always clobbers reg byte a
Statement [79] (byte*) render_bcd::screen#1 ← (byte*) render_score::screen#3 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen#1 ] ( main:12::render_score:67 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen#1 ] ) always clobbers reg byte a
Statement [82] (byte*) render_bcd::screen#2 ← (byte*) render_score::screen#3 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen#2 ] ( main:12::render_score:67 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen#2 ] ) always clobbers reg byte a
Statement [85] (byte) render_bcd::bcd#3 ← > (word) lines_bcd#15 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#3 ] ( main:12::render_score:67 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#3 ] ) always clobbers reg byte a
Statement [86] (byte*) render_bcd::screen#3 ← (byte*) render_score::screen#3 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#3 render_bcd::screen#3 ] ( main:12::render_score:67 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#3 render_bcd::screen#3 ] ) always clobbers reg byte a
Statement [88] (byte) render_bcd::bcd#4 ← < (word) lines_bcd#15 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#4 ] ( main:12::render_score:67 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#4 ] ) always clobbers reg byte a
Statement [89] (byte*) render_bcd::screen#4 ← (byte*) render_score::screen#3 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#4 render_bcd::screen#4 ] ( main:12::render_score:67 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#4 render_bcd::screen#4 ] ) always clobbers reg byte a
Statement [91] (byte*) render_bcd::screen#5 ← (byte*) render_score::screen#3 [ render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::screen#5 ] ( main:12::render_score:67 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::screen#5 ] ) always clobbers reg byte a
Statement [96] (byte*) render_bcd::screen_pos#0 ← (byte*) render_bcd::screen#6 + (word) render_bcd::offset#6 [ render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] ( main:12::render_score:67::render_bcd:78 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:12::render_score:67::render_bcd:81 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:12::render_score:67::render_bcd:84 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:12::render_score:67::render_bcd:87 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:12::render_score:67::render_bcd:90 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:12::render_score:67::render_bcd:93 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::only_low#6 render_bcd::bcd#6 render_bcd::screen_pos#0 ] ) always clobbers reg byte a
Statement [98] (byte~) render_bcd::$5 ← (byte) render_bcd::bcd#6 >> (byte/signed byte/word/signed word/dword/signed dword) 4 [ render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] ( main:12::render_score:67::render_bcd:78 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] main:12::render_score:67::render_bcd:81 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] main:12::render_score:67::render_bcd:84 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] main:12::render_score:67::render_bcd:87 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] main:12::render_score:67::render_bcd:90 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] main:12::render_score:67::render_bcd:93 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::bcd#6 render_bcd::screen_pos#0 render_bcd::$5 ] ) always clobbers reg byte a
Statement [100] *((byte*) render_bcd::screen_pos#0) ← (byte~) render_bcd::$6 [ render_bcd::bcd#6 render_bcd::screen_pos#0 ] ( main:12::render_score:67::render_bcd:78 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:12::render_score:67::render_bcd:81 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:12::render_score:67::render_bcd:84 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:12::render_score:67::render_bcd:87 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:12::render_score:67::render_bcd:90 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::bcd#6 render_bcd::screen_pos#0 ] main:12::render_score:67::render_bcd:93 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::bcd#6 render_bcd::screen_pos#0 ] ) always clobbers reg byte y
Statement [103] (byte~) render_bcd::$3 ← (byte) render_bcd::bcd#6 & (byte/signed byte/word/signed word/dword/signed dword) $f [ render_bcd::screen_pos#3 render_bcd::$3 ] ( main:12::render_score:67::render_bcd:78 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:12::render_score:67::render_bcd:81 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:12::render_score:67::render_bcd:84 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:12::render_score:67::render_bcd:87 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:12::render_score:67::render_bcd:90 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 render_bcd::screen_pos#3 render_bcd::$3 ] main:12::render_score:67::render_bcd:93 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_bcd::screen_pos#3 render_bcd::$3 ] ) always clobbers reg byte a
Statement [105] *((byte*) render_bcd::screen_pos#3) ← (byte~) render_bcd::$4 [ ] ( main:12::render_score:67::render_bcd:78 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:12::render_score:67::render_bcd:81 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:12::render_score:67::render_bcd:84 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:12::render_score:67::render_bcd:87 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:12::render_score:67::render_bcd:90 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 render_score::screen#3 ] main:12::render_score:67::render_bcd:93 [ render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 score_bcd#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 ] ) always clobbers reg byte y
Statement [111] (byte~) render_next::$4 ← (byte) next_piece_idx#12 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ next_piece_idx#12 render_next::screen_next_area#11 render_next::$4 ] ( main:12::render_next:36 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 current_movedown_slow#1 game_over#52 next_piece_idx#12 render_next::screen_next_area#11 render_next::$4 ] main:12::render_next:65 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 next_piece_idx#12 render_next::screen_next_area#11 render_next::$4 ] ) always clobbers reg byte a
Statement [113] (byte*~) render_next::next_piece_gfx#9 ← (byte*)*((const word[]) PIECES#0 + (byte~) render_next::$4) [ render_next::screen_next_area#11 render_next::next_piece_char#0 render_next::next_piece_gfx#9 ] ( main:12::render_next:36 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 current_movedown_slow#1 game_over#52 render_next::screen_next_area#11 render_next::next_piece_char#0 render_next::next_piece_gfx#9 ] main:12::render_next:65 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_next::screen_next_area#11 render_next::next_piece_char#0 render_next::next_piece_gfx#9 ] ) always clobbers reg byte a
Statement [116] (byte) render_next::cell#0 ← *((byte*) render_next::next_piece_gfx#2) [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#2 render_next::screen_next_area#5 render_next::c#2 render_next::cell#0 ] ( main:12::render_next:36 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#2 render_next::screen_next_area#5 render_next::c#2 render_next::cell#0 ] main:12::render_next:65 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#2 render_next::screen_next_area#5 render_next::c#2 render_next::cell#0 ] ) always clobbers reg byte a reg byte y
Statement [119] *((byte*) render_next::screen_next_area#5) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ( main:12::render_next:36 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] main:12::render_next:65 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ) always clobbers reg byte a reg byte y
Statement [123] (byte*) render_next::screen_next_area#4 ← (byte*) render_next::screen_next_area#3 + (byte/signed byte/word/signed word/dword/signed dword) $24 [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#4 ] ( main:12::render_next:36 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#4 ] main:12::render_next:65 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#4 ] ) always clobbers reg byte a
Statement [127] *((byte*) render_next::screen_next_area#5) ← (byte) render_next::next_piece_char#0 [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ( main:12::render_next:36 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] main:12::render_next:65 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ) always clobbers reg byte a reg byte y
Statement [129] (byte) render_moving::ypos2#0 ← (byte) current_ypos#13 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos2#0 ] ( main:12::render_moving:34 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos2#0 ] main:12::render_moving:62 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos2#0 ] ) always clobbers reg byte a
Statement [132] (byte) render_moving::i#1 ← (byte) render_moving::i#3 + (byte/signed byte/word/signed word/dword/signed dword) 4 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos2#2 render_moving::l#4 render_moving::i#1 ] ( main:12::render_moving:34 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos2#2 render_moving::l#4 render_moving::i#1 ] main:12::render_moving:62 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos2#2 render_moving::l#4 render_moving::i#1 ] ) always clobbers reg byte a
Statement [138] (byte~) render_moving::$2 ← (byte) render_screen_render#33 + (byte) render_moving::ypos2#2 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos2#2 render_moving::i#3 render_moving::l#4 render_moving::$2 ] ( main:12::render_moving:34 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos2#2 render_moving::i#3 render_moving::l#4 render_moving::$2 ] main:12::render_moving:62 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos2#2 render_moving::i#3 render_moving::l#4 render_moving::$2 ] ) always clobbers reg byte a
Statement [139] (byte*) render_moving::screen_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_moving::$2) [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos2#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] ( main:12::render_moving:34 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos2#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] main:12::render_moving:62 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos2#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] ) always clobbers reg byte a
Statement [142] (byte) render_moving::current_cell#0 ← *((byte*) current_piece_gfx#64 + (byte) render_moving::i#4) [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos2#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] ( main:12::render_moving:34 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos2#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] main:12::render_moving:62 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos2#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] ) always clobbers reg byte a
Statement [145] *((byte*) render_moving::screen_line#0 + (byte) render_moving::xpos#2) ← (byte) current_piece_char#68 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos2#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] ( main:12::render_moving:34 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos2#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] main:12::render_moving:62 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos2#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] ) always clobbers reg byte a
Statement [151] (byte~) render_playfield::$2 ← (byte) render_playfield::l#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$2 ] ( main:12::render_playfield:29 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$2 ] main:12::render_playfield:56 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$2 ] ) always clobbers reg byte a
Statement [152] (byte~) render_playfield::$3 ← (byte) render_screen_render#22 + (byte~) render_playfield::$2 [ render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$3 ] ( main:12::render_playfield:29 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$3 ] main:12::render_playfield:56 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$3 ] ) always clobbers reg byte a
Statement [153] (byte*) render_playfield::screen_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_playfield::$3) [ render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::screen_line#0 ] ( main:12::render_playfield:29 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::screen_line#0 ] main:12::render_playfield:56 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::screen_line#0 ] ) always clobbers reg byte a
Statement [155] *((byte*) render_playfield::screen_line#2) ← *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) render_playfield::i#2) [ render_screen_render#22 render_playfield::l#2 render_playfield::i#2 render_playfield::screen_line#2 render_playfield::c#2 ] ( main:12::render_playfield:29 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#2 render_playfield::screen_line#2 render_playfield::c#2 ] main:12::render_playfield:56 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#2 render_playfield::screen_line#2 render_playfield::c#2 ] ) always clobbers reg byte a reg byte y
Statement [167] if((byte) game_over#15==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_movement::@1 [ current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_orientation#20 current_piece_gfx#20 current_xpos#22 ] ( main:12::play_movement:51 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_orientation#20 current_piece_gfx#20 current_xpos#22 ] ) always clobbers reg byte a
Statement [174] (byte) play_movement::render#2 ← (byte) play_movement::render#1 + (byte~) play_movement::$3 [ current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_movement::render#2 ] ( main:12::play_movement:51 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_movement::render#2 ] ) always clobbers reg byte a
Statement [179] (byte) play_movement::return#0 ← (byte) play_movement::render#2 + (byte~) play_movement::$4 [ current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::return#0 current_orientation#25 current_piece_gfx#21 current_xpos#26 ] ( main:12::play_movement:51 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::return#0 current_orientation#25 current_piece_gfx#21 current_xpos#26 ] ) always clobbers reg byte a
Statement [184] (byte/signed word/word/dword/signed dword~) play_move_rotate::$5 ← (byte) current_orientation#20 + (byte/signed byte/word/signed word/dword/signed dword) $10 [ current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::$5 ] ( main:12::play_movement:51::play_move_rotate:176 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::$5 ] ) always clobbers reg byte a
Statement [190] (byte*~) current_piece#103 ← (byte*) current_piece#15 [ current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#3 play_collision::ypos#3 play_collision::orientation#3 current_piece#103 ] ( main:12::play_movement:51::play_move_rotate:176 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#3 play_collision::ypos#3 play_collision::orientation#3 current_piece#103 ] ) always clobbers reg byte a
Statement [196] (byte*) current_piece_gfx#7 ← (byte*) current_piece#15 + (byte) current_orientation#7 [ current_piece#15 current_ypos#19 current_xpos#26 current_orientation#7 current_piece_gfx#7 ] ( main:12::play_movement:51::play_move_rotate:176 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_xpos#26 current_orientation#7 current_piece_gfx#7 ] ) always clobbers reg byte a
Statement [197] (byte/signed word/word/dword/signed dword~) play_move_rotate::$7 ← (byte) current_orientation#20 - (byte/signed byte/word/signed word/dword/signed dword) $10 [ current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::$7 ] ( main:12::play_movement:51::play_move_rotate:176 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::$7 ] ) always clobbers reg byte a
Statement [200] (byte*) play_collision::piece_gfx#0 ← (byte*) current_piece#17 + (byte) play_collision::orientation#5 [ play_collision::ypos#5 play_collision::xpos#6 play_collision::piece_gfx#0 ] ( main:12::play_movement:51::play_move_rotate:176::play_collision:191 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::ypos#5 play_collision::xpos#6 play_collision::piece_gfx#0 ] main:12::play_movement:51::play_move_leftright:171::play_collision:229 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::ypos#5 play_collision::xpos#6 play_collision::piece_gfx#0 ] main:12::play_movement:51::play_move_leftright:171::play_collision:240 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::ypos#5 play_collision::xpos#6 play_collision::piece_gfx#0 ] main:12::play_movement:51::play_move_down:164::play_collision:264 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_collision::ypos#5 play_collision::xpos#6 play_collision::piece_gfx#0 ] main:12::play_spawn_current:25::play_collision:293 [ current_movedown_slow#1 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_collision::ypos#5 play_collision::xpos#6 play_collision::piece_gfx#0 ] main:12::play_spawn_current:27::play_collision:293 [ current_movedown_slow#1 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_collision::ypos#5 play_collision::xpos#6 play_collision::piece_gfx#0 ] main:12::play_movement:51::play_move_down:164::play_spawn_current:277::play_collision:293 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_collision::ypos#5 play_collision::xpos#6 play_collision::piece_gfx#0 ] ) always clobbers reg byte a
Statement [201] (byte) play_collision::ypos2#0 ← (byte) play_collision::ypos#5 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#0 ] ( main:12::play_movement:51::play_move_rotate:176::play_collision:191 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#0 ] main:12::play_movement:51::play_move_leftright:171::play_collision:229 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#0 ] main:12::play_movement:51::play_move_leftright:171::play_collision:240 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#0 ] main:12::play_movement:51::play_move_down:164::play_collision:264 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#0 ] main:12::play_spawn_current:25::play_collision:293 [ current_movedown_slow#1 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#0 ] main:12::play_spawn_current:27::play_collision:293 [ current_movedown_slow#1 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#0 ] main:12::play_movement:51::play_move_down:164::play_spawn_current:277::play_collision:293 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#0 ] ) always clobbers reg byte a
Statement [203] (byte*) play_collision::playfield_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte) play_collision::ypos2#2) [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] ( main:12::play_movement:51::play_move_rotate:176::play_collision:191 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] main:12::play_movement:51::play_move_leftright:171::play_collision:229 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] main:12::play_movement:51::play_move_leftright:171::play_collision:240 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] main:12::play_movement:51::play_move_down:164::play_collision:264 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] main:12::play_spawn_current:25::play_collision:293 [ current_movedown_slow#1 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] main:12::play_spawn_current:27::play_collision:293 [ current_movedown_slow#1 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] main:12::play_movement:51::play_move_down:164::play_spawn_current:277::play_collision:293 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] ) always clobbers reg byte a
Statement [207] if(*((byte*) play_collision::piece_gfx#0 + (byte) play_collision::i#2)==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_collision::@3 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 ] ( main:12::play_movement:51::play_move_rotate:176::play_collision:191 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 ] main:12::play_movement:51::play_move_leftright:171::play_collision:229 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 ] main:12::play_movement:51::play_move_leftright:171::play_collision:240 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 ] main:12::play_movement:51::play_move_down:164::play_collision:264 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 ] main:12::play_spawn_current:25::play_collision:293 [ current_movedown_slow#1 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 ] main:12::play_spawn_current:27::play_collision:293 [ current_movedown_slow#1 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 ] main:12::play_movement:51::play_move_down:164::play_spawn_current:277::play_collision:293 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 ] ) always clobbers reg byte a
Statement [211] (byte~) play_collision::$7 ← (byte) play_collision::col#2 & (byte/word/signed word/dword/signed dword) $80 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 play_collision::$7 ] ( main:12::play_movement:51::play_move_rotate:176::play_collision:191 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 play_collision::$7 ] main:12::play_movement:51::play_move_leftright:171::play_collision:229 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 play_collision::$7 ] main:12::play_movement:51::play_move_leftright:171::play_collision:240 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 play_collision::$7 ] main:12::play_movement:51::play_move_down:164::play_collision:264 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 play_collision::$7 ] main:12::play_spawn_current:25::play_collision:293 [ current_movedown_slow#1 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 play_collision::$7 ] main:12::play_spawn_current:27::play_collision:293 [ current_movedown_slow#1 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 play_collision::$7 ] main:12::play_movement:51::play_move_down:164::play_spawn_current:277::play_collision:293 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 play_collision::$7 ] ) always clobbers reg byte a
Statement [214] if(*((byte*) play_collision::playfield_line#0 + (byte) play_collision::col#2)==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_collision::@3 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 ] ( main:12::play_movement:51::play_move_rotate:176::play_collision:191 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 ] main:12::play_movement:51::play_move_leftright:171::play_collision:229 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 ] main:12::play_movement:51::play_move_leftright:171::play_collision:240 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 ] main:12::play_movement:51::play_move_down:164::play_collision:264 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 ] main:12::play_spawn_current:25::play_collision:293 [ current_movedown_slow#1 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 ] main:12::play_spawn_current:27::play_collision:293 [ current_movedown_slow#1 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 ] main:12::play_movement:51::play_move_down:164::play_spawn_current:277::play_collision:293 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::ypos2#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::col#2 play_collision::c#2 play_collision::i#1 ] ) always clobbers reg byte a
Statement [228] (byte*~) current_piece#102 ← (byte*) current_piece#15 [ current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#102 play_collision::orientation#2 play_collision::ypos#2 play_collision::xpos#2 ] ( main:12::play_movement:51::play_move_leftright:171 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#102 play_collision::orientation#2 play_collision::ypos#2 play_collision::xpos#2 ] ) always clobbers reg byte a
Statement [239] (byte*~) current_piece#101 ← (byte*) current_piece#15 [ current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#101 play_collision::orientation#1 play_collision::ypos#1 play_collision::xpos#1 ] ( main:12::play_movement:51::play_move_leftright:171 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 score_bcd#14 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#101 play_collision::orientation#1 play_collision::ypos#1 play_collision::xpos#1 ] ) always clobbers reg byte a
Statement [253] if((byte) current_movedown_counter#12<(const byte) current_movedown_fast#0) goto play_move_down::@2 [ current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 ] ( main:12::play_movement:51::play_move_down:164 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 ] ) always clobbers reg byte a
Statement [256] if((byte) current_movedown_counter#12<(byte) current_movedown_slow#14) goto play_move_down::@3 [ current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#7 ] ( main:12::play_movement:51::play_move_down:164 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#7 ] ) always clobbers reg byte a
Statement [263] (byte*~) current_piece#100 ← (byte*) current_piece#10 [ current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_piece#100 play_collision::orientation#0 play_collision::ypos#0 play_collision::xpos#0 ] ( main:12::play_movement:51::play_move_down:164 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_piece#100 play_collision::orientation#0 play_collision::ypos#0 play_collision::xpos#0 ] ) always clobbers reg byte a
Statement [278] (byte*~) current_piece#106 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$0) [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#106 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 ] ( main:12::play_movement:51::play_move_down:164 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#106 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 ] ) always clobbers reg byte a
Statement [285] (byte~) play_spawn_current::$0 ← (byte) play_spawn_current::current_piece_idx#0 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ play_spawn_current::$0 game_over#65 play_spawn_current::current_piece_idx#0 ] ( main:12::play_spawn_current:25 [ current_movedown_slow#1 play_spawn_current::$0 game_over#65 play_spawn_current::current_piece_idx#0 ] main:12::play_spawn_current:27 [ current_movedown_slow#1 play_spawn_current::$0 game_over#65 play_spawn_current::current_piece_idx#0 ] main:12::play_movement:51::play_move_down:164::play_spawn_current:277 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 play_spawn_current::$0 game_over#65 play_spawn_current::current_piece_idx#0 ] ) always clobbers reg byte a
Statement [286] (byte) current_piece_char#5 ← *((const byte[]) PIECES_CHARS#0 + (byte) play_spawn_current::current_piece_idx#0) [ current_piece_char#5 play_spawn_current::$0 game_over#65 play_spawn_current::current_piece_idx#0 ] ( main:12::play_spawn_current:25 [ current_movedown_slow#1 current_piece_char#5 play_spawn_current::$0 game_over#65 play_spawn_current::current_piece_idx#0 ] main:12::play_spawn_current:27 [ current_movedown_slow#1 current_piece_char#5 play_spawn_current::$0 game_over#65 play_spawn_current::current_piece_idx#0 ] main:12::play_movement:51::play_move_down:164::play_spawn_current:277 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 current_piece_char#5 play_spawn_current::$0 game_over#65 play_spawn_current::current_piece_idx#0 ] ) always clobbers reg byte a
Statement [287] (byte*) current_piece_gfx#74 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$0) [ current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_spawn_current::current_piece_idx#0 ] ( main:12::play_spawn_current:25 [ current_movedown_slow#1 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_spawn_current::current_piece_idx#0 ] main:12::play_spawn_current:27 [ current_movedown_slow#1 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_spawn_current::current_piece_idx#0 ] main:12::play_movement:51::play_move_down:164::play_spawn_current:277 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_spawn_current::current_piece_idx#0 ] ) always clobbers reg byte a
Statement [288] (byte) current_xpos#103 ← *((const byte[]) PIECES_START_X#0 + (byte) play_spawn_current::current_piece_idx#0) [ current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_spawn_current::current_piece_idx#0 ] ( main:12::play_spawn_current:25 [ current_movedown_slow#1 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_spawn_current::current_piece_idx#0 ] main:12::play_spawn_current:27 [ current_movedown_slow#1 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_spawn_current::current_piece_idx#0 ] main:12::play_movement:51::play_move_down:164::play_spawn_current:277 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 play_spawn_current::current_piece_idx#0 ] ) always clobbers reg byte a
Statement [289] (byte) current_ypos#6 ← *((const byte[]) PIECES_START_Y#0 + (byte) play_spawn_current::current_piece_idx#0) [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 ] ( main:12::play_spawn_current:25 [ current_movedown_slow#1 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 ] main:12::play_spawn_current:27 [ current_movedown_slow#1 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 ] main:12::play_movement:51::play_move_down:164::play_spawn_current:277 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#65 ] ) always clobbers reg byte a
Statement [292] (byte*~) current_piece#104 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$0) [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 current_piece#104 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] ( main:12::play_spawn_current:25 [ current_movedown_slow#1 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 current_piece#104 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] main:12::play_spawn_current:27 [ current_movedown_slow#1 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 current_piece#104 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] main:12::play_movement:51::play_move_down:164::play_spawn_current:277 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 current_piece#104 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] ) always clobbers reg byte a
Statement [299] if((byte) play_spawn_current::piece_idx#2==(byte/signed byte/word/signed word/dword/signed dword) 7) goto play_spawn_current::sid_rnd1 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 game_over#52 ] ( main:12::play_spawn_current:25 [ current_movedown_slow#1 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 game_over#52 ] main:12::play_spawn_current:27 [ current_movedown_slow#1 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 game_over#52 ] main:12::play_movement:51::play_move_down:164::play_spawn_current:277 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::piece_idx#2 play_spawn_current::$0 game_over#52 ] ) always clobbers reg byte a
Statement [302] (byte) play_spawn_current::piece_idx#1 ← (byte) play_spawn_current::sid_rnd1_return#0 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#52 play_spawn_current::piece_idx#1 ] ( main:12::play_spawn_current:25 [ current_movedown_slow#1 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#52 play_spawn_current::piece_idx#1 ] main:12::play_spawn_current:27 [ current_movedown_slow#1 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#52 play_spawn_current::piece_idx#1 ] main:12::play_movement:51::play_move_down:164::play_spawn_current:277 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 lines_bcd#17 score_bcd#16 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#103 current_piece_gfx#74 current_piece_char#5 play_spawn_current::$0 game_over#52 play_spawn_current::piece_idx#1 ] ) always clobbers reg byte a
Statement [305] (byte~) play_update_score::$2 ← < (word) lines_bcd#19 [ current_movedown_slow#14 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::$2 ] ( main:12::play_movement:51::play_move_down:164::play_update_score:275 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::$2 ] ) always clobbers reg byte a
Statement [307] (byte~) play_update_score::$4 ← (byte) play_update_score::removed#0 << (byte/signed byte/word/signed word/dword/signed dword) 2 [ current_movedown_slow#14 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::$4 ] ( main:12::play_movement:51::play_move_down:164::play_update_score:275 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::$4 ] ) always clobbers reg byte a
Statement [308] (dword) play_update_score::add_bcd#0 ← *((const dword[5]) score_add_bcd#0 + (byte~) play_update_score::$4) [ current_movedown_slow#14 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::add_bcd#0 ] ( main:12::play_movement:51::play_move_down:164::play_update_score:275 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::add_bcd#0 ] ) always clobbers reg byte a
Statement [310] (word) lines_bcd#30 ← (word) lines_bcd#19 + (byte) play_update_score::removed#0 [ current_movedown_slow#14 score_bcd#18 level#10 level_bcd#11 play_update_score::lines_before#0 play_update_score::add_bcd#0 lines_bcd#30 ] ( main:12::play_movement:51::play_move_down:164::play_update_score:275 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 score_bcd#18 level#10 level_bcd#11 play_update_score::lines_before#0 play_update_score::add_bcd#0 lines_bcd#30 ] ) always clobbers reg byte a
Statement [311] (dword) score_bcd#30 ← (dword) score_bcd#18 + (dword) play_update_score::add_bcd#0 [ current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#30 score_bcd#30 ] ( main:12::play_movement:51::play_move_down:164::play_update_score:275 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#30 score_bcd#30 ] ) always clobbers reg byte a
Statement [313] (byte~) play_update_score::$5 ← < (word) lines_bcd#30 [ current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#30 score_bcd#30 play_update_score::$5 ] ( main:12::play_movement:51::play_move_down:164::play_update_score:275 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#30 score_bcd#30 play_update_score::$5 ] ) always clobbers reg byte a
Statement [321] if((byte) level#21>=(byte/signed byte/word/signed word/dword/signed dword) $1d+(byte/signed byte/word/signed word/dword/signed dword) 1) goto play_increase_level::@1 [ level_bcd#11 level#21 ] ( main:12::play_movement:51::play_move_down:164::play_update_score:275::play_increase_level:317 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#30 score_bcd#30 level_bcd#11 level#21 ] ) always clobbers reg byte a
Statement [322] (byte) current_movedown_slow#10 ← *((const byte[]) MOVEDOWN_SLOW_SPEEDS#0 + (byte) level#21) [ level_bcd#11 level#21 current_movedown_slow#10 ] ( main:12::play_movement:51::play_move_down:164::play_update_score:275::play_increase_level:317 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#30 score_bcd#30 level_bcd#11 level#21 current_movedown_slow#10 ] ) always clobbers reg byte a reg byte y
Statement [325] (byte~) play_increase_level::$1 ← (byte) level_bcd#21 & (byte/signed byte/word/signed word/dword/signed dword) $f [ level#21 current_movedown_slow#69 level_bcd#21 play_increase_level::$1 ] ( main:12::play_movement:51::play_move_down:164::play_update_score:275::play_increase_level:317 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#30 score_bcd#30 level#21 current_movedown_slow#69 level_bcd#21 play_increase_level::$1 ] ) always clobbers reg byte a
Statement [327] (byte) level_bcd#8 ← (byte) level_bcd#21 + (byte/signed byte/word/signed word/dword/signed dword) 6 [ level#21 current_movedown_slow#69 level_bcd#8 ] ( main:12::play_movement:51::play_move_down:164::play_update_score:275::play_increase_level:317 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#30 score_bcd#30 level#21 current_movedown_slow#69 level_bcd#8 ] ) always clobbers reg byte a reg byte x
Statement [331] (byte) play_increase_level::b4#0 ← (byte) play_increase_level::b#2 << (byte/signed byte/word/signed word/dword/signed dword) 2 [ level#21 current_movedown_slow#69 level_bcd#64 play_increase_level::b#2 play_increase_level::b4#0 ] ( main:12::play_movement:51::play_move_down:164::play_update_score:275::play_increase_level:317 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#30 score_bcd#30 level#21 current_movedown_slow#69 level_bcd#64 play_increase_level::b#2 play_increase_level::b4#0 ] ) always clobbers reg byte a
Statement [332] *((const dword[5]) score_add_bcd#0 + (byte) play_increase_level::b4#0) ← *((const dword[5]) score_add_bcd#0 + (byte) play_increase_level::b4#0) + *((const dword[]) SCORE_BASE_BCD#0 + (byte) play_increase_level::b4#0) [ level#21 current_movedown_slow#69 level_bcd#64 play_increase_level::b#2 ] ( main:12::play_movement:51::play_move_down:164::play_update_score:275::play_increase_level:317 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 lines_bcd#30 score_bcd#30 level#21 current_movedown_slow#69 level_bcd#64 play_increase_level::b#2 ] ) always clobbers reg byte a
Statement [349] (byte) play_remove_lines::w#2 ← (byte) play_remove_lines::w#1 + (const byte) PLAYFIELD_COLS#0 [ play_remove_lines::y#8 play_remove_lines::removed#11 play_remove_lines::r#1 play_remove_lines::w#2 ] ( main:12::play_movement:51::play_move_down:164::play_remove_lines:271 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_remove_lines::y#8 play_remove_lines::removed#11 play_remove_lines::r#1 play_remove_lines::w#2 ] ) always clobbers reg byte a
Statement [357] *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::w#6) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ play_remove_lines::removed#8 play_remove_lines::w#6 ] ( main:12::play_movement:51::play_move_down:164::play_remove_lines:271 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 play_remove_lines::removed#8 play_remove_lines::w#6 ] ) always clobbers reg byte a
Statement [360] (byte) play_lock_current::ypos2#0 ← (byte) current_ypos#100 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ current_piece_char#10 current_piece_gfx#114 current_xpos#124 play_lock_current::ypos2#0 ] ( main:12::play_movement:51::play_move_down:164::play_lock_current:269 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#114 current_xpos#124 play_lock_current::ypos2#0 ] ) always clobbers reg byte a
Statement [362] (byte*) play_lock_current::playfield_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte) play_lock_current::ypos2#2) [ current_piece_char#10 current_piece_gfx#114 current_xpos#124 play_lock_current::ypos2#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::playfield_line#0 ] ( main:12::play_movement:51::play_move_down:164::play_lock_current:269 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#114 current_xpos#124 play_lock_current::ypos2#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::playfield_line#0 ] ) always clobbers reg byte a
Statement [366] if(*((byte*) current_piece_gfx#114 + (byte) play_lock_current::i#2)==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_lock_current::@3 [ current_piece_char#10 current_piece_gfx#114 current_xpos#124 play_lock_current::ypos2#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::col#2 play_lock_current::c#2 play_lock_current::i#1 ] ( main:12::play_movement:51::play_move_down:164::play_lock_current:269 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#114 current_xpos#124 play_lock_current::ypos2#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::col#2 play_lock_current::c#2 play_lock_current::i#1 ] ) always clobbers reg byte a
Statement [367] *((byte*) play_lock_current::playfield_line#0 + (byte) play_lock_current::col#2) ← (byte) current_piece_char#10 [ current_piece_char#10 current_piece_gfx#114 current_xpos#124 play_lock_current::ypos2#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::col#2 play_lock_current::c#2 play_lock_current::i#1 ] ( main:12::play_movement:51::play_move_down:164::play_lock_current:269 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#114 current_xpos#124 play_lock_current::ypos2#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::col#2 play_lock_current::c#2 play_lock_current::i#1 ] ) always clobbers reg byte a
Statement [378] (byte~) keyboard_event_pressed::$0 ← (byte) keyboard_event_pressed::keycode#5 >> (byte/signed byte/word/signed word/dword/signed dword) 3 [ keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] ( main:12::play_movement:51::play_move_down:164::keyboard_event_pressed:249 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:12::keyboard_event_scan:43::keyboard_event_pressed:400 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:12::keyboard_event_scan:43::keyboard_event_pressed:406 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:12::keyboard_event_scan:43::keyboard_event_pressed:412 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] main:12::keyboard_event_scan:43::keyboard_event_pressed:418 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] ) always clobbers reg byte a
Statement [380] (byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#5 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] ( main:12::play_movement:51::play_move_down:164::keyboard_event_pressed:249 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:12::keyboard_event_scan:43::keyboard_event_pressed:400 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:12::keyboard_event_scan:43::keyboard_event_pressed:406 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:12::keyboard_event_scan:43::keyboard_event_pressed:412 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] main:12::keyboard_event_scan:43::keyboard_event_pressed:418 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] ) always clobbers reg byte a
Statement [381] (byte) keyboard_event_pressed::return#11 ← (byte) keyboard_event_pressed::row_bits#0 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte~) keyboard_event_pressed::$1) [ keyboard_event_pressed::return#11 ] ( main:12::play_movement:51::play_move_down:164::keyboard_event_pressed:249 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::return#11 ] main:12::keyboard_event_scan:43::keyboard_event_pressed:400 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] main:12::keyboard_event_scan:43::keyboard_event_pressed:406 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] main:12::keyboard_event_scan:43::keyboard_event_pressed:412 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] main:12::keyboard_event_scan:43::keyboard_event_pressed:418 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] ) always clobbers reg byte a
Statement [383] if((byte) keyboard_events_size#13==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_get::@return [ keyboard_events_size#13 ] ( main:12::keyboard_event_get:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_events_size#13 ] ) always clobbers reg byte a
Statement [385] (byte) keyboard_event_get::return#1 ← *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#4) [ keyboard_events_size#4 keyboard_event_get::return#1 ] ( main:12::keyboard_event_get:45 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_events_size#4 keyboard_event_get::return#1 ] ) always clobbers reg byte y
Statement [394] if((byte) keyboard_event_scan::row_scan#0!=*((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2)) goto keyboard_event_scan::@9 [ keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_event_scan::row_scan#0 ] ( main:12::keyboard_event_scan:43 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_event_scan::row_scan#0 ] ) always clobbers reg byte a reg byte y
Statement [395] (byte) keyboard_event_scan::keycode#1 ← (byte) keyboard_event_scan::keycode#11 + (byte/signed byte/word/signed word/dword/signed dword) 8 [ keyboard_event_scan::row#2 keyboard_events_size#30 keyboard_event_scan::keycode#1 ] ( main:12::keyboard_event_scan:43 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_events_size#30 keyboard_event_scan::keycode#1 ] ) always clobbers reg byte a reg byte x
Statement [398] if((byte) keyboard_event_scan::row#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto keyboard_event_scan::@7 [ keyboard_events_size#13 keyboard_event_scan::row#1 keyboard_event_scan::keycode#14 ] ( main:12::keyboard_event_scan:43 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_scan::row#1 keyboard_event_scan::keycode#14 ] ) always clobbers reg byte a
Statement [425] (byte~) keyboard_event_scan::$15 ← (byte) keyboard_event_scan::row_scan#0 ^ *((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$15 ] ( main:12::keyboard_event_scan:43 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$15 ] ) always clobbers reg byte a
Statement [426] (byte~) keyboard_event_scan::$16 ← (byte~) keyboard_event_scan::$15 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte) keyboard_event_scan::col#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$16 ] ( main:12::keyboard_event_scan:43 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$16 ] ) always clobbers reg byte a
Statement [428] if((byte) keyboard_events_size#10==(byte/signed byte/word/signed word/dword/signed dword) 8) goto keyboard_event_scan::@10 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:12::keyboard_event_scan:43 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ) always clobbers reg byte a
Statement [429] (byte) keyboard_event_scan::event_type#0 ← (byte) keyboard_event_scan::row_scan#0 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte) keyboard_event_scan::col#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::event_type#0 ] ( main:12::keyboard_event_scan:43 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::event_type#0 ] ) always clobbers reg byte a
Statement [431] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte) keyboard_event_scan::keycode#10 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:12::keyboard_event_scan:43 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ) always clobbers reg byte a reg byte y
Statement [437] *((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2) ← (byte) keyboard_event_scan::row_scan#0 [ keyboard_event_scan::row#2 keyboard_event_scan::keycode#15 keyboard_events_size#29 ] ( main:12::keyboard_event_scan:43 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#15 keyboard_events_size#29 ] ) always clobbers reg byte a reg byte y
Statement [438] (byte/word/dword~) keyboard_event_scan::$23 ← (byte) keyboard_event_scan::keycode#10 | (byte/signed byte/word/signed word/dword/signed dword) $40 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$23 ] ( main:12::keyboard_event_scan:43 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$23 ] ) always clobbers reg byte a
Statement [439] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte/word/dword~) keyboard_event_scan::$23 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:12::keyboard_event_scan:43 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ) always clobbers reg byte y
Statement [441] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:12::keyboard_event_scan:43::keyboard_matrix_read:391 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 ] ) always clobbers reg byte a
Statement [442] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B#0) [ keyboard_matrix_read::return#0 ] ( main:12::keyboard_event_scan:43::keyboard_matrix_read:391 [ render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_matrix_read::return#0 ] ) always clobbers reg byte a
Statement [444] if((byte) render_screen_show#16==(byte/signed byte/word/signed word/dword/signed dword) 0) goto render_show::toD0181 [ render_screen_show#16 level#10 ] ( main:12::render_show:41 [ render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level_bcd#11 render_screen_show#16 level#10 ] ) always clobbers reg byte a
Statement [448] *((const byte*) BGCOL2#0) ← *((const byte[]) PIECES_COLORS_1#0 + (byte) level#10) [ render_screen_show#16 level#10 ] ( main:12::render_show:41 [ render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level_bcd#11 render_screen_show#16 level#10 ] ) always clobbers reg byte a reg byte y
Statement [449] *((const byte*) BGCOL3#0) ← *((const byte[]) PIECES_COLORS_2#0 + (byte) level#10) [ render_screen_show#16 level#10 ] ( main:12::render_show:41 [ render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level_bcd#11 render_screen_show#16 level#10 ] ) always clobbers reg byte a reg byte y
Statement [450] (byte) render_screen_showing#1 ← (byte) render_screen_show#16 [ render_screen_show#16 level#10 ] ( main:12::render_show:41 [ render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#114 current_xpos#124 current_ypos#100 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 score_bcd#18 level_bcd#11 render_screen_show#16 level#10 ] ) always clobbers reg byte a
Statement [455] (byte~) play_init::$2 ← (byte) play_init::j#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ play_init::j#2 play_init::pli#2 play_init::idx#2 play_init::$2 ] ( main:12::play_init:23 [ play_init::j#2 play_init::pli#2 play_init::idx#2 play_init::$2 ] ) always clobbers reg byte a
Statement [456] *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte~) play_init::$2) ← (byte*) play_init::pli#2 [ play_init::j#2 play_init::pli#2 play_init::idx#2 ] ( main:12::play_init:23 [ play_init::j#2 play_init::pli#2 play_init::idx#2 ] ) always clobbers reg byte a
Statement [457] *((const byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx#0 + (byte) play_init::j#2) ← (byte) play_init::idx#2 [ play_init::j#2 play_init::pli#2 play_init::idx#2 ] ( main:12::play_init:23 [ play_init::j#2 play_init::pli#2 play_init::idx#2 ] ) always clobbers reg byte a
Statement [458] (byte*) play_init::pli#1 ← (byte*) play_init::pli#2 + (const byte) PLAYFIELD_COLS#0 [ play_init::j#2 play_init::idx#2 play_init::pli#1 ] ( main:12::play_init:23 [ play_init::j#2 play_init::idx#2 play_init::pli#1 ] ) always clobbers reg byte a
Statement [459] (byte) play_init::idx#1 ← (byte) play_init::idx#2 + (const byte) PLAYFIELD_COLS#0 [ play_init::j#2 play_init::pli#1 play_init::idx#1 ] ( main:12::play_init:23 [ play_init::j#2 play_init::pli#1 play_init::idx#1 ] ) always clobbers reg byte a
Statement [462] *((const byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx#0+(const byte) PLAYFIELD_LINES#0) ← (const byte) PLAYFIELD_COLS#0*(const byte) PLAYFIELD_LINES#0 [ ] ( main:12::play_init:23 [ ] ) always clobbers reg byte a
Statement [463] (byte) current_movedown_slow#1 ← *((const byte[]) MOVEDOWN_SLOW_SPEEDS#0) [ current_movedown_slow#1 ] ( main:12::play_init:23 [ current_movedown_slow#1 ] ) always clobbers reg byte a
Statement [465] (byte) play_init::b4#0 ← (byte) play_init::b#2 << (byte/signed byte/word/signed word/dword/signed dword) 2 [ current_movedown_slow#1 play_init::b#2 play_init::b4#0 ] ( main:12::play_init:23 [ current_movedown_slow#1 play_init::b#2 play_init::b4#0 ] ) always clobbers reg byte a
Statement [466] *((const dword[5]) score_add_bcd#0 + (byte) play_init::b4#0) ← *((const dword[]) SCORE_BASE_BCD#0 + (byte) play_init::b4#0) [ current_movedown_slow#1 play_init::b#2 ] ( main:12::play_init:23 [ current_movedown_slow#1 play_init::b#2 ] ) always clobbers reg byte a
Statement [471] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ ] ( main:12::sprites_irq_init:21 [ ] ) always clobbers reg byte a
Statement asm { ldaCIA1_INTERRUPT } always clobbers reg byte a
Statement [473] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0 [ ] ( main:12::sprites_irq_init:21 [ ] ) always clobbers reg byte a
Statement [474] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 [ ] ( main:12::sprites_irq_init:21 [ ] ) always clobbers reg byte a
Statement [475] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0 [ ] ( main:12::sprites_irq_init:21 [ ] ) always clobbers reg byte a
Statement [476] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte/signed byte/word/signed word/dword/signed dword) $7f [ ] ( main:12::sprites_irq_init:21 [ ] ) always clobbers reg byte a
Statement [477] *((const byte*) RASTER#0) ← (const byte) IRQ_RASTER_FIRST#0 [ ] ( main:12::sprites_irq_init:21 [ ] ) always clobbers reg byte a
Statement [478] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0 [ ] ( main:12::sprites_irq_init:21 [ ] ) always clobbers reg byte a
Statement [479] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_CLOBBER)(void()) sprites_irq() [ ] ( main:12::sprites_irq_init:21 [ ] ) always clobbers reg byte a
Statement [482] *((const byte*) SPRITES_ENABLE#0) ← (byte/signed byte/word/signed word/dword/signed dword) $f [ ] ( main:12::sprites_init:19 [ ] ) always clobbers reg byte a
Statement [483] *((const byte*) SPRITES_MC#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:12::sprites_init:19 [ ] ) always clobbers reg byte a
Statement [484] *((const byte*) SPRITES_EXPAND_Y#0) ← *((const byte*) SPRITES_MC#0) [ ] ( main:12::sprites_init:19 [ ] ) always clobbers reg byte a
Statement [485] *((const byte*) SPRITES_EXPAND_X#0) ← *((const byte*) SPRITES_EXPAND_Y#0) [ ] ( main:12::sprites_init:19 [ ] ) always clobbers reg byte a
Statement [487] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ sprites_init::s#2 sprites_init::xpos#2 sprites_init::s2#0 ] ( main:12::sprites_init:19 [ sprites_init::s#2 sprites_init::xpos#2 sprites_init::s2#0 ] ) always clobbers reg byte a
Statement [488] *((const byte*) SPRITES_XPOS#0 + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2 [ sprites_init::s#2 sprites_init::xpos#2 ] ( main:12::sprites_init:19 [ sprites_init::s#2 sprites_init::xpos#2 ] ) always clobbers reg byte a
Statement [489] *((const byte*) SPRITES_COLS#0 + (byte) sprites_init::s#2) ← (const byte) BLACK#0 [ sprites_init::s#2 sprites_init::xpos#2 ] ( main:12::sprites_init:19 [ sprites_init::s#2 sprites_init::xpos#2 ] ) always clobbers reg byte a
Statement [490] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte/signed byte/word/signed word/dword/signed dword) $18 [ sprites_init::s#2 sprites_init::xpos#1 ] ( main:12::sprites_init:19 [ sprites_init::s#2 sprites_init::xpos#1 ] ) always clobbers reg byte a
Statement [495] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte/signed byte/word/signed word/dword/signed dword) 3 [ ] ( main:12::render_init:17 [ ] ) always clobbers reg byte a
Statement [497] *((const byte*) CIA2_PORT_A#0) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:12::render_init:17 [ ] ) always clobbers reg byte a
Statement [498] *((const byte*) D011#0) ← (const byte) VIC_ECM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte/signed byte/word/signed word/dword/signed dword) 3 [ ] ( main:12::render_init:17 [ ] ) always clobbers reg byte a
Statement [499] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 [ ] ( main:12::render_init:17 [ ] ) always clobbers reg byte a
Statement [500] *((const byte*) BGCOL1#0) ← (const byte) BLACK#0 [ ] ( main:12::render_init:17 [ ] ) always clobbers reg byte a
Statement [501] *((const byte*) BGCOL2#0) ← *((const byte[]) PIECES_COLORS_1#0) [ ] ( main:12::render_init:17 [ ] ) always clobbers reg byte a
Statement [502] *((const byte*) BGCOL3#0) ← *((const byte[]) PIECES_COLORS_2#0) [ ] ( main:12::render_init:17 [ ] ) always clobbers reg byte a
Statement [503] *((const byte*) BGCOL4#0) ← (const byte) GREY#0 [ ] ( main:12::render_init:17 [ ] ) always clobbers reg byte a
Statement [508] (byte~) render_init::$13 ← (byte) render_init::i#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$13 ] ( main:12::render_init:17 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$13 ] ) always clobbers reg byte a
Statement [509] *((const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_init::$13) ← (byte*) render_init::li_1#2 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 ] ( main:12::render_init:17 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 ] ) always clobbers reg byte a
Statement [510] (byte~) render_init::$14 ← (byte) render_init::i#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$14 ] ( main:12::render_init:17 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$14 ] ) always clobbers reg byte a
Statement [511] *((const byte*[PLAYFIELD_LINES#0]) screen_lines_2#0 + (byte~) render_init::$14) ← (byte*) render_init::li_2#2 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 ] ( main:12::render_init:17 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 ] ) always clobbers reg byte a
Statement [512] (byte*) render_init::li_1#1 ← (byte*) render_init::li_1#2 + (byte/signed byte/word/signed word/dword/signed dword) $28 [ render_init::i#2 render_init::li_2#2 render_init::li_1#1 ] ( main:12::render_init:17 [ render_init::i#2 render_init::li_2#2 render_init::li_1#1 ] ) always clobbers reg byte a
Statement [513] (byte*) render_init::li_2#1 ← (byte*) render_init::li_2#2 + (byte/signed byte/word/signed word/dword/signed dword) $28 [ render_init::i#2 render_init::li_1#1 render_init::li_2#1 ] ( main:12::render_init:17 [ render_init::i#2 render_init::li_1#1 render_init::li_2#1 ] ) always clobbers reg byte a
Statement [520] *((byte*) render_screen_original::screen#5) ← (const byte) render_screen_original::SPACE#0 [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] ( main:12::render_init:17::render_screen_original:504 [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] main:12::render_init:17::render_screen_original:506 [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] ) always clobbers reg byte a reg byte y
Statement [522] *((byte*) render_screen_original::cols#4) ← (const byte) BLACK#0 [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] ( main:12::render_init:17::render_screen_original:504 [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] main:12::render_init:17::render_screen_original:506 [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] ) always clobbers reg byte a reg byte y
Statement [527] *((byte*) render_screen_original::screen#6) ← *((byte*) render_screen_original::oscr#2) [ render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] ( main:12::render_init:17::render_screen_original:504 [ render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] main:12::render_init:17::render_screen_original:506 [ render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] ) always clobbers reg byte a reg byte y
Statement [530] *((byte*) render_screen_original::cols#5) ← *((byte*) render_screen_original::ocols#2) [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] ( main:12::render_init:17::render_screen_original:504 [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] main:12::render_init:17::render_screen_original:506 [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] ) always clobbers reg byte a reg byte y
Statement [536] *((byte*) render_screen_original::screen#7) ← (const byte) render_screen_original::SPACE#0 [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] ( main:12::render_init:17::render_screen_original:504 [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] main:12::render_init:17::render_screen_original:506 [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] ) always clobbers reg byte a reg byte y
Statement [538] *((byte*) render_screen_original::cols#6) ← (const byte) BLACK#0 [ render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] ( main:12::render_init:17::render_screen_original:504 [ render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] main:12::render_init:17::render_screen_original:506 [ render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] ) always clobbers reg byte a reg byte y
Statement [545] *((const word*) SID_VOICE3_FREQ#0) ← (word/dword/signed dword) $ffff [ ] ( main:12::sid_rnd_init:15 [ ] ) always clobbers reg byte a
Statement [546] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 [ ] ( main:12::sid_rnd_init:15 [ ] ) always clobbers reg byte a
Statement [556] if(*((const byte*) RASTER#0)<(byte) sprites_irq::raster_sprite_gfx_modify#0) goto sprites_irq::@8 [ render_screen_showing#0 irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#0 sprites_irq::raster_sprite_gfx_modify#0 ] ( [ render_screen_showing#0 irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#0 sprites_irq::raster_sprite_gfx_modify#0 ] ) always clobbers reg byte a
Statement [558] if((byte) render_screen_showing#0==(byte/signed byte/word/signed word/dword/signed dword) 0) goto sprites_irq::@1 [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#0 sprites_irq::ptr#0 ] ( [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#0 sprites_irq::ptr#0 ] ) always clobbers reg byte a
Statement [566] if((byte) irq_cnt#1==(byte/signed byte/word/signed word/dword/signed dword) 9) goto sprites_irq::@3 [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 ] ( [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 ] ) always clobbers reg byte a
Statement [567] if((byte) irq_cnt#1==(byte/signed byte/word/signed word/dword/signed dword) $a) goto sprites_irq::@4 [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 ] ( [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 ] ) always clobbers reg byte a
Statement [568] (byte) irq_raster_next#3 ← (byte) irq_raster_next#0 + (byte/signed byte/word/signed word/dword/signed dword) $14 [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_raster_next#3 ] ( [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_raster_next#3 ] ) always clobbers reg byte a reg byte x
Statement [569] (byte) irq_sprite_ypos#3 ← (byte) irq_sprite_ypos#0 + (byte/signed byte/word/signed word/dword/signed dword) $15 [ irq_sprite_ptr#0 irq_raster_next#3 ] ( [ irq_sprite_ptr#0 irq_raster_next#3 ] ) always clobbers reg byte a reg byte x
Statement [570] (byte) irq_sprite_ptr#3 ← (byte) irq_sprite_ptr#0 + (byte/signed byte/word/signed word/dword/signed dword) 3 [ irq_raster_next#3 ] ( [ irq_raster_next#3 ] ) always clobbers reg byte a reg byte x
Statement [572] *((const byte*) RASTER#0) ← (byte) irq_raster_next#4 [ ] ( [ ] ) always clobbers reg byte a
Statement [573] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ ] ( [ ] ) always clobbers reg byte a
Statement [574] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg byte y
Statement [575] (byte) irq_cnt#2 ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ irq_sprite_ypos#0 irq_sprite_ptr#0 ] ( [ irq_sprite_ypos#0 irq_sprite_ptr#0 ] ) always clobbers reg byte a
Statement [576] (byte) irq_raster_next#2 ← (const byte) IRQ_RASTER_FIRST#0 [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_raster_next#2 ] ( [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_raster_next#2 ] ) always clobbers reg byte a
Statement [577] (byte) irq_sprite_ypos#2 ← (byte) irq_sprite_ypos#0 + (byte/signed byte/word/signed word/dword/signed dword) $15 [ irq_sprite_ptr#0 irq_raster_next#2 ] ( [ irq_sprite_ptr#0 irq_raster_next#2 ] ) always clobbers reg byte a reg byte x
Statement [578] (byte) irq_sprite_ptr#2 ← (byte) irq_sprite_ptr#0 + (byte/signed byte/word/signed word/dword/signed dword) 3 [ irq_raster_next#2 ] ( [ irq_raster_next#2 ] ) always clobbers reg byte a reg byte x
Statement [579] (byte) irq_raster_next#1 ← (byte) irq_raster_next#0 + (byte/signed byte/word/signed word/dword/signed dword) $15 [ irq_raster_next#1 ] ( [ irq_raster_next#1 ] ) always clobbers reg byte a reg byte x
Statement [580] (byte) irq_sprite_ypos#1 ← (const byte) SPRITES_FIRST_YPOS#0 [ irq_raster_next#1 ] ( [ irq_raster_next#1 ] ) always clobbers reg byte a
Statement [582] (byte) irq_sprite_ptr#1 ← (const byte) sprites_irq::toSpritePtr2_return#0 [ irq_raster_next#1 ] ( [ irq_raster_next#1 ] ) always clobbers reg byte a
Potential registers zp ZP_BYTE:2 [ render_screen_show#16 render_screen_show#13 ] : zp ZP_BYTE:2 ,
Potential registers zp ZP_BYTE:3 [ render_screen_render#18 render_screen_render#11 ] : zp ZP_BYTE:3 ,
Potential registers zp ZP_BYTE:4 [ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 ] : zp ZP_BYTE:4 ,
Potential registers zp ZP_WORD:5 [ render_score::screen#3 ] : zp ZP_WORD:5 ,
Potential registers zp ZP_WORD:7 [ render_bcd::screen#6 render_bcd::screen#0 render_bcd::screen#1 render_bcd::screen#2 render_bcd::screen#3 render_bcd::screen#4 render_bcd::screen#5 ] : zp ZP_WORD:7 ,
Potential registers zp ZP_WORD:9 [ render_bcd::offset#6 ] : zp ZP_WORD:9 ,
Potential registers zp ZP_BYTE:11 [ render_bcd::only_low#6 ] : zp ZP_BYTE:11 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:12 [ render_bcd::bcd#6 render_bcd::bcd#0 render_bcd::bcd#1 render_bcd::bcd#2 render_bcd::bcd#3 render_bcd::bcd#4 render_bcd::bcd#5 ] : zp ZP_BYTE:12 , reg byte x ,
Potential registers zp ZP_WORD:13 [ render_bcd::screen_pos#3 render_bcd::screen_pos#0 render_bcd::screen_pos#2 ] : zp ZP_WORD:13 ,
Potential registers zp ZP_BYTE:15 [ render_screen_render#15 render_screen_render#68 ] : zp ZP_BYTE:15 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:16 [ next_piece_idx#12 next_piece_idx#84 next_piece_idx#85 ] : zp ZP_BYTE:16 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:17 [ render_next::l#7 render_next::l#1 ] : zp ZP_BYTE:17 , reg byte x ,
Potential registers zp ZP_WORD:18 [ render_next::next_piece_gfx#2 render_next::next_piece_gfx#3 render_next::next_piece_gfx#1 render_next::next_piece_gfx#9 ] : zp ZP_WORD:18 ,
Potential registers zp ZP_WORD:20 [ render_next::screen_next_area#5 render_next::screen_next_area#10 render_next::screen_next_area#4 render_next::screen_next_area#11 render_next::screen_next_area#3 ] : zp ZP_WORD:20 ,
Potential registers zp ZP_BYTE:22 [ render_next::c#2 render_next::c#1 ] : zp ZP_BYTE:22 , reg byte x ,
Potential registers zp ZP_BYTE:23 [ current_ypos#13 current_ypos#106 current_ypos#107 ] : zp ZP_BYTE:23 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:24 [ render_screen_render#33 render_screen_render#69 ] : zp ZP_BYTE:24 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:25 [ current_xpos#59 current_xpos#130 current_xpos#131 ] : zp ZP_BYTE:25 , reg byte x , reg byte y ,
Potential registers zp ZP_WORD:26 [ current_piece_gfx#64 current_piece_gfx#120 current_piece_gfx#121 ] : zp ZP_WORD:26 ,
Potential registers zp ZP_BYTE:28 [ current_piece_char#68 current_piece_char#108 current_piece_char#109 ] : zp ZP_BYTE:28 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:29 [ render_moving::ypos2#2 render_moving::ypos2#0 render_moving::ypos2#1 ] : zp ZP_BYTE:29 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:30 [ render_moving::l#4 render_moving::l#1 ] : zp ZP_BYTE:30 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:31 [ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 ] : zp ZP_BYTE:31 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:32 [ render_moving::xpos#2 render_moving::xpos#0 render_moving::xpos#1 ] : zp ZP_BYTE:32 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:33 [ render_moving::c#2 render_moving::c#1 ] : zp ZP_BYTE:33 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:34 [ render_screen_render#22 render_screen_render#70 ] : zp ZP_BYTE:34 , reg byte x ,
Potential registers zp ZP_BYTE:35 [ render_playfield::l#2 render_playfield::l#1 ] : zp ZP_BYTE:35 , reg byte x ,
Potential registers zp ZP_BYTE:36 [ render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 ] : zp ZP_BYTE:36 , reg byte x ,
Potential registers zp ZP_WORD:37 [ render_playfield::screen_line#2 render_playfield::screen_line#0 render_playfield::screen_line#1 ] : zp ZP_WORD:37 ,
Potential registers zp ZP_BYTE:39 [ render_playfield::c#2 render_playfield::c#1 ] : zp ZP_BYTE:39 , reg byte x ,
Potential registers zp ZP_BYTE:40 [ play_movement::return#2 play_movement::render#1 play_movement::return#0 ] : zp ZP_BYTE:40 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:41 [ play_move_rotate::return#2 ] : zp ZP_BYTE:41 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:42 [ play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 ] : zp ZP_BYTE:42 , reg byte x , reg byte y ,
Potential registers zp ZP_WORD:43 [ current_piece#17 current_piece#100 current_piece#101 current_piece#102 current_piece#103 current_piece#104 ] : zp ZP_WORD:43 ,
Potential registers zp ZP_BYTE:45 [ play_collision::orientation#5 play_collision::orientation#0 play_collision::orientation#1 play_collision::orientation#2 play_collision::orientation#3 ] : zp ZP_BYTE:45 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:46 [ play_collision::ypos#5 play_collision::ypos#0 play_collision::ypos#1 play_collision::ypos#2 play_collision::ypos#3 play_collision::ypos#4 ] : zp ZP_BYTE:46 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:47 [ play_collision::xpos#6 play_collision::xpos#0 play_collision::xpos#1 play_collision::xpos#2 play_collision::xpos#3 play_collision::xpos#4 ] : zp ZP_BYTE:47 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:48 [ play_collision::ypos2#2 play_collision::ypos2#0 play_collision::ypos2#1 ] : zp ZP_BYTE:48 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:49 [ play_collision::l#6 play_collision::l#1 ] : zp ZP_BYTE:49 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:50 [ play_collision::i#2 play_collision::i#3 play_collision::i#11 play_collision::i#13 ] : zp ZP_BYTE:50 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:51 [ play_collision::col#2 play_collision::col#9 play_collision::col#1 ] : zp ZP_BYTE:51 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:52 [ play_collision::c#2 play_collision::c#1 ] : zp ZP_BYTE:52 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:53 [ play_collision::return#15 ] : zp ZP_BYTE:53 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:54 [ play_move_leftright::return#2 ] : zp ZP_BYTE:54 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:55 [ play_move_down::movedown#6 play_move_down::movedown#7 play_move_down::movedown#10 play_move_down::movedown#2 play_move_down::movedown#3 ] : zp ZP_BYTE:55 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:56 [ current_ypos#38 current_ypos#3 current_ypos#100 current_ypos#19 current_ypos#6 ] : zp ZP_BYTE:56 ,
Potential registers zp ZP_WORD:57 [ lines_bcd#26 lines_bcd#19 lines_bcd#15 lines_bcd#17 lines_bcd#30 ] : zp ZP_WORD:57 ,
Potential registers zp ZP_DWORD:59 [ score_bcd#26 score_bcd#18 score_bcd#14 score_bcd#16 score_bcd#30 ] : zp ZP_DWORD:59 ,
Potential registers zp ZP_BYTE:63 [ level#33 level#10 level#17 level#19 level#21 ] : zp ZP_BYTE:63 ,
Potential registers zp ZP_BYTE:64 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#21 current_movedown_slow#1 current_movedown_slow#23 current_movedown_slow#69 current_movedown_slow#10 ] : zp ZP_BYTE:64 ,
Potential registers zp ZP_BYTE:65 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#64 level_bcd#21 level_bcd#8 ] : zp ZP_BYTE:65 ,
Potential registers zp ZP_WORD:66 [ current_piece#28 current_piece#10 current_piece#15 current_piece#98 current_piece#106 ] : zp ZP_WORD:66 ,
Potential registers zp ZP_BYTE:68 [ current_piece_char#29 current_piece_char#10 current_piece_char#16 current_piece_char#5 ] : zp ZP_BYTE:68 ,
Potential registers zp ZP_BYTE:69 [ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ] : zp ZP_BYTE:69 ,
Potential registers zp ZP_WORD:70 [ current_piece_gfx#35 current_piece_gfx#114 current_piece_gfx#18 current_piece_gfx#74 current_piece_gfx#20 current_piece_gfx#21 current_piece_gfx#7 ] : zp ZP_WORD:70 ,
Potential registers zp ZP_BYTE:72 [ current_xpos#43 current_xpos#124 current_xpos#19 current_xpos#103 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ] : zp ZP_BYTE:72 ,
Potential registers zp ZP_BYTE:73 [ play_move_down::return#3 ] : zp ZP_BYTE:73 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:74 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#2 play_spawn_current::piece_idx#1 ] : zp ZP_BYTE:74 ,
Potential registers zp ZP_BYTE:75 [ game_over#65 game_over#27 game_over#10 game_over#15 game_over#52 ] : zp ZP_BYTE:75 ,
Potential registers zp ZP_BYTE:76 [ play_increase_level::b#2 play_increase_level::b#1 ] : zp ZP_BYTE:76 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:77 [ play_remove_lines::y#8 play_remove_lines::y#1 ] : zp ZP_BYTE:77 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:78 [ play_remove_lines::removed#11 play_remove_lines::removed#8 play_remove_lines::removed#1 ] : zp ZP_BYTE:78 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:79 [ play_remove_lines::r#2 play_remove_lines::r#3 play_remove_lines::r#1 ] : zp ZP_BYTE:79 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:80 [ play_remove_lines::x#2 play_remove_lines::x#1 ] : zp ZP_BYTE:80 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:81 [ play_remove_lines::full#4 play_remove_lines::full#2 ] : zp ZP_BYTE:81 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:82 [ play_remove_lines::w#6 play_remove_lines::w#3 play_remove_lines::w#4 play_remove_lines::w#12 play_remove_lines::w#11 play_remove_lines::w#1 play_remove_lines::w#2 ] : zp ZP_BYTE:82 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:83 [ play_lock_current::ypos2#2 play_lock_current::ypos2#0 play_lock_current::ypos2#1 ] : zp ZP_BYTE:83 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:84 [ play_lock_current::l#6 play_lock_current::l#1 ] : zp ZP_BYTE:84 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:85 [ play_lock_current::i#2 play_lock_current::i#3 play_lock_current::i#7 play_lock_current::i#9 ] : zp ZP_BYTE:85 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:86 [ play_lock_current::col#2 play_lock_current::col#0 play_lock_current::col#1 ] : zp ZP_BYTE:86 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:87 [ play_lock_current::c#2 play_lock_current::c#1 ] : zp ZP_BYTE:87 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:88 [ keyboard_event_pressed::keycode#5 ] : zp ZP_BYTE:88 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:89 [ keyboard_event_get::return#2 keyboard_event_get::return#1 ] : zp ZP_BYTE:89 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:90 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ] : zp ZP_BYTE:90 ,
Potential registers zp ZP_BYTE:91 [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ] : zp ZP_BYTE:91 , reg byte x ,
Potential registers zp ZP_BYTE:92 [ keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#15 keyboard_event_scan::keycode#1 ] : zp ZP_BYTE:92 , reg byte x ,
Potential registers zp ZP_BYTE:93 [ keyboard_events_size#10 keyboard_events_size#30 keyboard_events_size#19 keyboard_events_size#16 keyboard_events_size#13 keyboard_events_size#4 keyboard_events_size#29 keyboard_events_size#1 keyboard_events_size#2 ] : zp ZP_BYTE:93 ,
Potential registers zp ZP_BYTE:94 [ render_show::d018val#3 ] : zp ZP_BYTE:94 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:95 [ play_init::j#2 play_init::j#1 ] : zp ZP_BYTE:95 , reg byte x , reg byte y ,
Potential registers zp ZP_WORD:96 [ play_init::pli#2 play_init::pli#1 ] : zp ZP_WORD:96 ,
Potential registers zp ZP_BYTE:98 [ play_init::idx#2 play_init::idx#1 ] : zp ZP_BYTE:98 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:99 [ play_init::b#2 play_init::b#1 ] : zp ZP_BYTE:99 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:100 [ sprites_init::s#2 sprites_init::s#1 ] : zp ZP_BYTE:100 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:101 [ sprites_init::xpos#2 sprites_init::xpos#1 ] : zp ZP_BYTE:101 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:102 [ render_init::i#2 render_init::i#1 ] : zp ZP_BYTE:102 , reg byte x , reg byte y ,
Potential registers zp ZP_WORD:103 [ render_init::li_1#2 render_init::li_1#1 ] : zp ZP_WORD:103 ,
Potential registers zp ZP_WORD:105 [ render_init::li_2#2 render_init::li_2#1 ] : zp ZP_WORD:105 ,
Potential registers zp ZP_BYTE:107 [ render_screen_original::y#6 render_screen_original::y#1 ] : zp ZP_BYTE:107 , reg byte x ,
Potential registers zp ZP_WORD:108 [ render_screen_original::oscr#2 render_screen_original::oscr#4 render_screen_original::oscr#1 ] : zp ZP_WORD:108 ,
Potential registers zp ZP_WORD:110 [ render_screen_original::ocols#2 render_screen_original::ocols#4 render_screen_original::ocols#1 ] : zp ZP_WORD:110 ,
Potential registers zp ZP_WORD:112 [ render_screen_original::screen#7 render_screen_original::screen#6 render_screen_original::screen#5 render_screen_original::screen#8 render_screen_original::screen#9 render_screen_original::screen#10 render_screen_original::screen#2 render_screen_original::screen#3 ] : zp ZP_WORD:112 ,
Potential registers zp ZP_WORD:114 [ render_screen_original::cols#6 render_screen_original::cols#5 render_screen_original::cols#4 render_screen_original::cols#7 render_screen_original::cols#3 render_screen_original::cols#1 render_screen_original::cols#2 ] : zp ZP_WORD:114 ,
Potential registers zp ZP_BYTE:116 [ render_screen_original::x#6 render_screen_original::x#5 render_screen_original::x#4 render_screen_original::x#1 render_screen_original::x#2 render_screen_original::x#3 ] : zp ZP_BYTE:116 , reg byte x ,
Potential registers zp ZP_BYTE:117 [ sprites_irq::raster_sprite_gfx_modify#0 ] : zp ZP_BYTE:117 ,
Potential registers zp ZP_BYTE:118 [ render_screen_showing#0 render_screen_showing#1 ] : zp ZP_BYTE:118 ,
Potential registers zp ZP_BYTE:119 [ irq_raster_next#0 irq_raster_next#4 irq_raster_next#1 irq_raster_next#2 irq_raster_next#3 ] : zp ZP_BYTE:119 ,
Potential registers zp ZP_BYTE:120 [ irq_sprite_ypos#0 irq_sprite_ypos#1 irq_sprite_ypos#2 irq_sprite_ypos#3 ] : zp ZP_BYTE:120 ,
Potential registers zp ZP_BYTE:121 [ irq_sprite_ptr#0 irq_sprite_ptr#1 irq_sprite_ptr#2 irq_sprite_ptr#3 ] : zp ZP_BYTE:121 ,
Potential registers zp ZP_BYTE:122 [ irq_cnt#0 irq_cnt#1 irq_cnt#2 ] : zp ZP_BYTE:122 ,
Potential registers zp ZP_BYTE:123 [ keyboard_event_get::return#3 ] : zp ZP_BYTE:123 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:124 [ main::key_event#0 ] : zp ZP_BYTE:124 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:125 [ play_movement::key_event#0 ] : zp ZP_BYTE:125 ,
Potential registers zp ZP_BYTE:126 [ play_movement::return#3 ] : zp ZP_BYTE:126 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:127 [ main::render#1 ] : zp ZP_BYTE:127 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:128 [ render_bcd::$5 ] : zp ZP_BYTE:128 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:129 [ render_bcd::$6 ] : zp ZP_BYTE:129 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:130 [ render_bcd::$3 ] : zp ZP_BYTE:130 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:131 [ render_bcd::$4 ] : zp ZP_BYTE:131 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:132 [ render_next::$4 ] : zp ZP_BYTE:132 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:133 [ render_next::next_piece_char#0 ] : zp ZP_BYTE:133 , reg byte x ,
Potential registers zp ZP_BYTE:134 [ render_next::cell#0 ] : zp ZP_BYTE:134 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:135 [ render_moving::$2 ] : zp ZP_BYTE:135 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_WORD:136 [ render_moving::screen_line#0 ] : zp ZP_WORD:136 ,
Potential registers zp ZP_BYTE:138 [ render_moving::current_cell#0 ] : zp ZP_BYTE:138 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:139 [ render_playfield::$2 ] : zp ZP_BYTE:139 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:140 [ render_playfield::$3 ] : zp ZP_BYTE:140 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:141 [ play_move_down::key_event#0 ] : zp ZP_BYTE:141 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:142 [ play_move_down::return#0 ] : zp ZP_BYTE:142 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:143 [ play_move_leftright::key_event#0 ] : zp ZP_BYTE:143 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:144 [ play_move_leftright::return#0 ] : zp ZP_BYTE:144 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:145 [ play_movement::$3 ] : zp ZP_BYTE:145 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:146 [ play_movement::render#2 ] : zp ZP_BYTE:146 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:147 [ play_move_rotate::key_event#0 ] : zp ZP_BYTE:147 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:148 [ play_move_rotate::return#0 ] : zp ZP_BYTE:148 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:149 [ play_movement::$4 ] : zp ZP_BYTE:149 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:150 [ play_move_rotate::$5 ] : zp ZP_BYTE:150 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:151 [ play_collision::return#14 ] : zp ZP_BYTE:151 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:152 [ play_move_rotate::$2 ] : zp ZP_BYTE:152 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:153 [ play_move_rotate::$7 ] : zp ZP_BYTE:153 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_WORD:154 [ play_collision::piece_gfx#0 ] : zp ZP_WORD:154 ,
Potential registers zp ZP_WORD:156 [ play_collision::playfield_line#0 ] : zp ZP_WORD:156 ,
Potential registers zp ZP_BYTE:158 [ play_collision::i#1 ] : zp ZP_BYTE:158 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:159 [ play_collision::$7 ] : zp ZP_BYTE:159 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:160 [ play_collision::return#13 ] : zp ZP_BYTE:160 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:161 [ play_move_leftright::$4 ] : zp ZP_BYTE:161 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:162 [ play_collision::return#1 ] : zp ZP_BYTE:162 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:163 [ play_move_leftright::$8 ] : zp ZP_BYTE:163 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:164 [ keyboard_event_pressed::return#12 ] : zp ZP_BYTE:164 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:165 [ play_move_down::$2 ] : zp ZP_BYTE:165 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:166 [ play_collision::return#0 ] : zp ZP_BYTE:166 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:167 [ play_move_down::$12 ] : zp ZP_BYTE:167 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:168 [ play_remove_lines::return#0 ] : zp ZP_BYTE:168 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:169 [ play_move_down::removed#0 ] : zp ZP_BYTE:169 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:170 [ play_update_score::removed#0 ] : zp ZP_BYTE:170 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:171 [ play_spawn_current::current_piece_idx#0 ] : zp ZP_BYTE:171 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:172 [ play_spawn_current::$0 ] : zp ZP_BYTE:172 , reg byte x ,
Potential registers zp ZP_BYTE:173 [ play_collision::return#10 ] : zp ZP_BYTE:173 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:174 [ play_spawn_current::$2 ] : zp ZP_BYTE:174 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:175 [ play_spawn_current::sid_rnd1_return#0 ] : zp ZP_BYTE:175 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:176 [ play_update_score::$2 ] : zp ZP_BYTE:176 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:177 [ play_update_score::lines_before#0 ] : zp ZP_BYTE:177 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:178 [ play_update_score::$4 ] : zp ZP_BYTE:178 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_DWORD:179 [ play_update_score::add_bcd#0 ] : zp ZP_DWORD:179 ,
Potential registers zp ZP_BYTE:183 [ play_update_score::$5 ] : zp ZP_BYTE:183 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:184 [ play_update_score::lines_after#0 ] : zp ZP_BYTE:184 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:185 [ play_increase_level::$1 ] : zp ZP_BYTE:185 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:186 [ play_increase_level::b4#0 ] : zp ZP_BYTE:186 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:187 [ play_remove_lines::c#0 ] : zp ZP_BYTE:187 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_WORD:188 [ play_lock_current::playfield_line#0 ] : zp ZP_WORD:188 ,
Potential registers zp ZP_BYTE:190 [ play_lock_current::i#1 ] : zp ZP_BYTE:190 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:191 [ keyboard_event_pressed::$0 ] : zp ZP_BYTE:191 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:192 [ keyboard_event_pressed::row_bits#0 ] : zp ZP_BYTE:192 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:193 [ keyboard_event_pressed::$1 ] : zp ZP_BYTE:193 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:194 [ keyboard_event_pressed::return#11 ] : zp ZP_BYTE:194 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:195 [ keyboard_matrix_read::rowid#0 ] : zp ZP_BYTE:195 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:196 [ keyboard_matrix_read::return#2 ] : zp ZP_BYTE:196 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:197 [ keyboard_event_scan::row_scan#0 ] : zp ZP_BYTE:197 , reg byte x ,
Potential registers zp ZP_BYTE:198 [ keyboard_event_pressed::return#0 ] : zp ZP_BYTE:198 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:199 [ keyboard_event_scan::$0 ] : zp ZP_BYTE:199 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:200 [ keyboard_event_pressed::return#1 ] : zp ZP_BYTE:200 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:201 [ keyboard_event_scan::$3 ] : zp ZP_BYTE:201 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:202 [ keyboard_event_pressed::return#2 ] : zp ZP_BYTE:202 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:203 [ keyboard_event_scan::$6 ] : zp ZP_BYTE:203 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:204 [ keyboard_event_pressed::return#10 ] : zp ZP_BYTE:204 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:205 [ keyboard_event_scan::$9 ] : zp ZP_BYTE:205 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:206 [ keyboard_event_scan::$15 ] : zp ZP_BYTE:206 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:207 [ keyboard_event_scan::$16 ] : zp ZP_BYTE:207 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:208 [ keyboard_event_scan::event_type#0 ] : zp ZP_BYTE:208 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:209 [ keyboard_event_scan::$23 ] : zp ZP_BYTE:209 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:210 [ keyboard_matrix_read::return#0 ] : zp ZP_BYTE:210 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:211 [ play_init::$2 ] : zp ZP_BYTE:211 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:212 [ play_init::b4#0 ] : zp ZP_BYTE:212 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:213 [ sprites_init::s2#0 ] : zp ZP_BYTE:213 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:214 [ render_init::$13 ] : zp ZP_BYTE:214 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:215 [ render_init::$14 ] : zp ZP_BYTE:215 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:216 [ sprites_irq::ypos#0 ] : zp ZP_BYTE:216 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:217 [ sprites_irq::$0 ] : zp ZP_BYTE:217 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:218 [ sprites_irq::ptr#0 ] : zp ZP_BYTE:218 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:219 [ sprites_irq::ptr#3 ] : zp ZP_BYTE:219 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:220 [ sprites_irq::ptr#4 ] : zp ZP_BYTE:220 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:221 [ sprites_irq::ptr#1 ] : zp ZP_BYTE:221 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:222 [ sprites_irq::ptr#2 ] : zp ZP_BYTE:222 , reg byte a , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [keyboard_event_scan] 20,002: zp ZP_BYTE:206 [ keyboard_event_scan::$15 ] 20,002: zp ZP_BYTE:207 [ keyboard_event_scan::$16 ] 20,002: zp ZP_BYTE:208 [ keyboard_event_scan::event_type#0 ] 20,002: zp ZP_BYTE:209 [ keyboard_event_scan::$23 ] 17,858.93: zp ZP_BYTE:91 [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ] 11,908.48: zp ZP_BYTE:92 [ keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#15 keyboard_event_scan::keycode#1 ] 2,101.74: zp ZP_BYTE:90 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ] 1,278.06: zp ZP_BYTE:197 [ keyboard_event_scan::row_scan#0 ] 4: zp ZP_BYTE:199 [ keyboard_event_scan::$0 ] 4: zp ZP_BYTE:201 [ keyboard_event_scan::$3 ] 4: zp ZP_BYTE:203 [ keyboard_event_scan::$6 ] 4: zp ZP_BYTE:205 [ keyboard_event_scan::$9 ]
Uplift Scope [play_collision] 38,173.33: zp ZP_BYTE:50 [ play_collision::i#2 play_collision::i#3 play_collision::i#11 play_collision::i#13 ] 20,002: zp ZP_BYTE:159 [ play_collision::$7 ] 13,378.25: zp ZP_BYTE:51 [ play_collision::col#2 play_collision::col#9 play_collision::col#1 ] 12,223.44: zp ZP_BYTE:52 [ play_collision::c#2 play_collision::c#1 ] 1,615.62: zp ZP_BYTE:158 [ play_collision::i#1 ] 1,371.57: zp ZP_BYTE:48 [ play_collision::ypos2#2 play_collision::ypos2#0 play_collision::ypos2#1 ] 1,126.12: zp ZP_BYTE:49 [ play_collision::l#6 play_collision::l#1 ] 785.86: zp ZP_WORD:156 [ play_collision::playfield_line#0 ] 476.33: zp ZP_WORD:154 [ play_collision::piece_gfx#0 ] 51.62: zp ZP_BYTE:47 [ play_collision::xpos#6 play_collision::xpos#0 play_collision::xpos#1 play_collision::xpos#2 play_collision::xpos#3 play_collision::xpos#4 ] 18: zp ZP_BYTE:45 [ play_collision::orientation#5 play_collision::orientation#0 play_collision::orientation#1 play_collision::orientation#2 play_collision::orientation#3 ] 13: zp ZP_BYTE:46 [ play_collision::ypos#5 play_collision::ypos#0 play_collision::ypos#1 play_collision::ypos#2 play_collision::ypos#3 play_collision::ypos#4 ] 4: zp ZP_BYTE:151 [ play_collision::return#14 ] 4: zp ZP_BYTE:160 [ play_collision::return#13 ] 4: zp ZP_BYTE:162 [ play_collision::return#1 ] 4: zp ZP_BYTE:166 [ play_collision::return#0 ] 4: zp ZP_BYTE:173 [ play_collision::return#10 ] 1.43: zp ZP_BYTE:53 [ play_collision::return#15 ]
Uplift Scope [play_remove_lines] 19,004.21: zp ZP_BYTE:79 [ play_remove_lines::r#2 play_remove_lines::r#3 play_remove_lines::r#1 ] 17,938.14: zp ZP_BYTE:82 [ play_remove_lines::w#6 play_remove_lines::w#3 play_remove_lines::w#4 play_remove_lines::w#12 play_remove_lines::w#11 play_remove_lines::w#1 play_remove_lines::w#2 ] 17,501.75: zp ZP_BYTE:80 [ play_remove_lines::x#2 play_remove_lines::x#1 ] 8,201: zp ZP_BYTE:81 [ play_remove_lines::full#4 play_remove_lines::full#2 ] 6,000.6: zp ZP_BYTE:187 [ play_remove_lines::c#0 ] 2,566.89: zp ZP_BYTE:78 [ play_remove_lines::removed#11 play_remove_lines::removed#8 play_remove_lines::removed#1 ] 1,634.97: zp ZP_BYTE:77 [ play_remove_lines::y#8 play_remove_lines::y#1 ] 4: zp ZP_BYTE:168 [ play_remove_lines::return#0 ]
Uplift Scope [play_lock_current] 38,173.33: zp ZP_BYTE:85 [ play_lock_current::i#2 play_lock_current::i#3 play_lock_current::i#7 play_lock_current::i#9 ] 14,753.5: zp ZP_BYTE:86 [ play_lock_current::col#2 play_lock_current::col#0 play_lock_current::col#1 ] 14,001.4: zp ZP_BYTE:87 [ play_lock_current::c#2 play_lock_current::c#1 ] 2,333.67: zp ZP_BYTE:190 [ play_lock_current::i#1 ] 1,167.83: zp ZP_BYTE:84 [ play_lock_current::l#6 play_lock_current::l#1 ] 1,100.2: zp ZP_WORD:188 [ play_lock_current::playfield_line#0 ] 777.68: zp ZP_BYTE:83 [ play_lock_current::ypos2#2 play_lock_current::ypos2#0 play_lock_current::ypos2#1 ]
Uplift Scope [] 58,858.91: zp ZP_BYTE:93 [ keyboard_events_size#10 keyboard_events_size#30 keyboard_events_size#19 keyboard_events_size#16 keyboard_events_size#13 keyboard_events_size#4 keyboard_events_size#29 keyboard_events_size#1 keyboard_events_size#2 ] 2,131.71: zp ZP_BYTE:74 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#2 play_spawn_current::piece_idx#1 ] 205.41: zp ZP_WORD:70 [ current_piece_gfx#35 current_piece_gfx#114 current_piece_gfx#18 current_piece_gfx#74 current_piece_gfx#20 current_piece_gfx#21 current_piece_gfx#7 ] 197.08: zp ZP_BYTE:68 [ current_piece_char#29 current_piece_char#10 current_piece_char#16 current_piece_char#5 ] 76.7: zp ZP_BYTE:28 [ current_piece_char#68 current_piece_char#108 current_piece_char#109 ] 63.7: zp ZP_WORD:26 [ current_piece_gfx#64 current_piece_gfx#120 current_piece_gfx#121 ] 60.28: zp ZP_BYTE:120 [ irq_sprite_ypos#0 irq_sprite_ypos#1 irq_sprite_ypos#2 irq_sprite_ypos#3 ] 60.26: zp ZP_BYTE:121 [ irq_sprite_ptr#0 irq_sprite_ptr#1 irq_sprite_ptr#2 irq_sprite_ptr#3 ] 42.42: zp ZP_BYTE:72 [ current_xpos#43 current_xpos#124 current_xpos#19 current_xpos#103 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ] 32: zp ZP_WORD:43 [ current_piece#17 current_piece#100 current_piece#101 current_piece#102 current_piece#103 current_piece#104 ] 30.62: zp ZP_BYTE:34 [ render_screen_render#22 render_screen_render#70 ] 29.4: zp ZP_BYTE:16 [ next_piece_idx#12 next_piece_idx#84 next_piece_idx#85 ] 24: zp ZP_BYTE:15 [ render_screen_render#15 render_screen_render#68 ] 23.17: zp ZP_BYTE:122 [ irq_cnt#0 irq_cnt#1 irq_cnt#2 ] 20.4: zp ZP_BYTE:23 [ current_ypos#13 current_ypos#106 current_ypos#107 ] 20.4: zp ZP_BYTE:118 [ render_screen_showing#0 render_screen_showing#1 ] 18.83: zp ZP_WORD:66 [ current_piece#28 current_piece#10 current_piece#15 current_piece#98 current_piece#106 ] 18.6: zp ZP_BYTE:65 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#64 level_bcd#21 level_bcd#8 ] 17.41: zp ZP_BYTE:69 [ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ] 17.13: zp ZP_BYTE:64 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#21 current_movedown_slow#1 current_movedown_slow#23 current_movedown_slow#69 current_movedown_slow#10 ] 15.36: zp ZP_BYTE:56 [ current_ypos#38 current_ypos#3 current_ypos#100 current_ypos#19 current_ypos#6 ] 14.77: zp ZP_BYTE:75 [ game_over#65 game_over#27 game_over#10 game_over#15 game_over#52 ] 14.37: zp ZP_BYTE:25 [ current_xpos#59 current_xpos#130 current_xpos#131 ] 13.68: zp ZP_DWORD:59 [ score_bcd#26 score_bcd#18 score_bcd#14 score_bcd#16 score_bcd#30 ] 12.82: zp ZP_BYTE:63 [ level#33 level#10 level#17 level#19 level#21 ] 12.81: zp ZP_WORD:57 [ lines_bcd#26 lines_bcd#19 lines_bcd#15 lines_bcd#17 lines_bcd#30 ] 12.38: zp ZP_BYTE:4 [ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 ] 11.97: zp ZP_BYTE:119 [ irq_raster_next#0 irq_raster_next#4 irq_raster_next#1 irq_raster_next#2 irq_raster_next#3 ] 11.1: zp ZP_BYTE:24 [ render_screen_render#33 render_screen_render#69 ] 4.76: zp ZP_BYTE:2 [ render_screen_show#16 render_screen_show#13 ] 4.17: zp ZP_BYTE:3 [ render_screen_render#18 render_screen_render#11 ]
Uplift Scope [render_moving] 2,615.85: zp ZP_BYTE:31 [ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 ] 1,835.17: zp ZP_BYTE:33 [ render_moving::c#2 render_moving::c#1 ] 1,490.13: zp ZP_BYTE:32 [ render_moving::xpos#2 render_moving::xpos#0 render_moving::xpos#1 ] 1,001: zp ZP_BYTE:138 [ render_moving::current_cell#0 ] 202: zp ZP_BYTE:135 [ render_moving::$2 ] 164.12: zp ZP_BYTE:30 [ render_moving::l#4 render_moving::l#1 ] 110.2: zp ZP_WORD:136 [ render_moving::screen_line#0 ] 98.4: zp ZP_BYTE:29 [ render_moving::ypos2#2 render_moving::ypos2#0 render_moving::ypos2#1 ]
Uplift Scope [render_next] 1,970.3: zp ZP_WORD:18 [ render_next::next_piece_gfx#2 render_next::next_piece_gfx#3 render_next::next_piece_gfx#1 render_next::next_piece_gfx#9 ] 1,787.5: zp ZP_BYTE:22 [ render_next::c#2 render_next::c#1 ] 1,657: zp ZP_WORD:20 [ render_next::screen_next_area#5 render_next::screen_next_area#10 render_next::screen_next_area#4 render_next::screen_next_area#11 render_next::screen_next_area#3 ] 1,001: zp ZP_BYTE:134 [ render_next::cell#0 ] 169.86: zp ZP_BYTE:17 [ render_next::l#7 render_next::l#1 ] 66.87: zp ZP_BYTE:133 [ render_next::next_piece_char#0 ] 1: zp ZP_BYTE:132 [ render_next::$4 ]
Uplift Scope [play_increase_level] 4,004: zp ZP_BYTE:186 [ play_increase_level::b4#0 ] 2,502.5: zp ZP_BYTE:76 [ play_increase_level::b#2 play_increase_level::b#1 ] 4: zp ZP_BYTE:185 [ play_increase_level::$1 ]
Uplift Scope [render_playfield] 2,254.5: zp ZP_WORD:37 [ render_playfield::screen_line#2 render_playfield::screen_line#0 render_playfield::screen_line#1 ] 2,002: zp ZP_BYTE:39 [ render_playfield::c#2 render_playfield::c#1 ] 1,505.77: zp ZP_BYTE:36 [ render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 ] 202: zp ZP_BYTE:139 [ render_playfield::$2 ] 202: zp ZP_BYTE:140 [ render_playfield::$3 ] 181.8: zp ZP_BYTE:35 [ render_playfield::l#2 render_playfield::l#1 ]
Uplift Scope [keyboard_matrix_read] 2,002: zp ZP_BYTE:196 [ keyboard_matrix_read::return#2 ] 1,003: zp ZP_BYTE:195 [ keyboard_matrix_read::rowid#0 ] 334.33: zp ZP_BYTE:210 [ keyboard_matrix_read::return#0 ]
Uplift Scope [render_screen_original] 721.31: zp ZP_WORD:112 [ render_screen_original::screen#7 render_screen_original::screen#6 render_screen_original::screen#5 render_screen_original::screen#8 render_screen_original::screen#9 render_screen_original::screen#10 render_screen_original::screen#2 render_screen_original::screen#3 ] 699.79: zp ZP_BYTE:116 [ render_screen_original::x#6 render_screen_original::x#5 render_screen_original::x#4 render_screen_original::x#1 render_screen_original::x#2 render_screen_original::x#3 ] 501.65: zp ZP_WORD:114 [ render_screen_original::cols#6 render_screen_original::cols#5 render_screen_original::cols#4 render_screen_original::cols#7 render_screen_original::cols#3 render_screen_original::cols#1 render_screen_original::cols#2 ] 162.87: zp ZP_WORD:108 [ render_screen_original::oscr#2 render_screen_original::oscr#4 render_screen_original::oscr#1 ] 99.08: zp ZP_WORD:110 [ render_screen_original::ocols#2 render_screen_original::ocols#4 render_screen_original::ocols#1 ] 17.42: zp ZP_BYTE:107 [ render_screen_original::y#6 render_screen_original::y#1 ]
Uplift Scope [play_spawn_current] 2,002: zp ZP_BYTE:175 [ play_spawn_current::sid_rnd1_return#0 ] 4: zp ZP_BYTE:174 [ play_spawn_current::$2 ] 2: zp ZP_BYTE:171 [ play_spawn_current::current_piece_idx#0 ] 0.07: zp ZP_BYTE:172 [ play_spawn_current::$0 ]
Uplift Scope [main] 202: zp ZP_BYTE:127 [ main::render#1 ] 101: zp ZP_BYTE:124 [ main::key_event#0 ]
Uplift Scope [play_movement] 202: zp ZP_BYTE:126 [ play_movement::return#3 ] 40: zp ZP_BYTE:40 [ play_movement::return#2 play_movement::render#1 play_movement::return#0 ] 9.73: zp ZP_BYTE:125 [ play_movement::key_event#0 ] 4: zp ZP_BYTE:145 [ play_movement::$3 ] 4: zp ZP_BYTE:149 [ play_movement::$4 ] 0.8: zp ZP_BYTE:146 [ play_movement::render#2 ]
Uplift Scope [keyboard_event_get] 202: zp ZP_BYTE:123 [ keyboard_event_get::return#3 ] 38.33: zp ZP_BYTE:89 [ keyboard_event_get::return#2 keyboard_event_get::return#1 ]
Uplift Scope [play_init] 33: zp ZP_BYTE:212 [ play_init::b4#0 ] 27.5: zp ZP_BYTE:99 [ play_init::b#2 play_init::b#1 ] 23.83: zp ZP_BYTE:95 [ play_init::j#2 play_init::j#1 ] 22: zp ZP_BYTE:211 [ play_init::$2 ] 13.93: zp ZP_BYTE:98 [ play_init::idx#2 play_init::idx#1 ] 13.75: zp ZP_WORD:96 [ play_init::pli#2 play_init::pli#1 ]
Uplift Scope [render_init] 22.79: zp ZP_BYTE:102 [ render_init::i#2 render_init::i#1 ] 22: zp ZP_BYTE:214 [ render_init::$13 ] 22: zp ZP_BYTE:215 [ render_init::$14 ] 12.83: zp ZP_WORD:105 [ render_init::li_2#2 render_init::li_2#1 ] 12.1: zp ZP_WORD:103 [ render_init::li_1#2 render_init::li_1#1 ]
Uplift Scope [render_bcd] 30: zp ZP_WORD:7 [ render_bcd::screen#6 render_bcd::screen#0 render_bcd::screen#1 render_bcd::screen#2 render_bcd::screen#3 render_bcd::screen#4 render_bcd::screen#5 ] 22: zp ZP_BYTE:12 [ render_bcd::bcd#6 render_bcd::bcd#0 render_bcd::bcd#1 render_bcd::bcd#2 render_bcd::bcd#3 render_bcd::bcd#4 render_bcd::bcd#5 ] 7.6: zp ZP_WORD:13 [ render_bcd::screen_pos#3 render_bcd::screen_pos#0 render_bcd::screen_pos#2 ] 4: zp ZP_BYTE:128 [ render_bcd::$5 ] 4: zp ZP_BYTE:129 [ render_bcd::$6 ] 4: zp ZP_BYTE:130 [ render_bcd::$3 ] 4: zp ZP_BYTE:131 [ render_bcd::$4 ] 2: zp ZP_WORD:9 [ render_bcd::offset#6 ] 1: zp ZP_BYTE:11 [ render_bcd::only_low#6 ]
Uplift Scope [sprites_init] 25.3: zp ZP_BYTE:100 [ sprites_init::s#2 sprites_init::s#1 ] 22: zp ZP_BYTE:213 [ sprites_init::s2#0 ] 15.58: zp ZP_BYTE:101 [ sprites_init::xpos#2 sprites_init::xpos#1 ]
Uplift Scope [play_move_down] 20: zp ZP_BYTE:55 [ play_move_down::movedown#6 play_move_down::movedown#7 play_move_down::movedown#10 play_move_down::movedown#2 play_move_down::movedown#3 ] 4: zp ZP_BYTE:142 [ play_move_down::return#0 ] 4: zp ZP_BYTE:165 [ play_move_down::$2 ] 4: zp ZP_BYTE:167 [ play_move_down::$12 ] 4: zp ZP_BYTE:169 [ play_move_down::removed#0 ] 2: zp ZP_BYTE:141 [ play_move_down::key_event#0 ] 0.67: zp ZP_BYTE:73 [ play_move_down::return#3 ]
Uplift Scope [keyboard_event_pressed] 4: zp ZP_BYTE:164 [ keyboard_event_pressed::return#12 ] 4: zp ZP_BYTE:191 [ keyboard_event_pressed::$0 ] 4: zp ZP_BYTE:193 [ keyboard_event_pressed::$1 ] 4: zp ZP_BYTE:198 [ keyboard_event_pressed::return#0 ] 4: zp ZP_BYTE:200 [ keyboard_event_pressed::return#1 ] 4: zp ZP_BYTE:202 [ keyboard_event_pressed::return#2 ] 4: zp ZP_BYTE:204 [ keyboard_event_pressed::return#10 ] 2: zp ZP_BYTE:192 [ keyboard_event_pressed::row_bits#0 ] 1.71: zp ZP_BYTE:194 [ keyboard_event_pressed::return#11 ] 1.33: zp ZP_BYTE:88 [ keyboard_event_pressed::keycode#5 ]
Uplift Scope [sprites_irq] 6.5: zp ZP_BYTE:117 [ sprites_irq::raster_sprite_gfx_modify#0 ] 4: zp ZP_BYTE:217 [ sprites_irq::$0 ] 4: zp ZP_BYTE:220 [ sprites_irq::ptr#4 ] 4: zp ZP_BYTE:222 [ sprites_irq::ptr#2 ] 2.67: zp ZP_BYTE:219 [ sprites_irq::ptr#3 ] 2.67: zp ZP_BYTE:221 [ sprites_irq::ptr#1 ] 2.5: zp ZP_BYTE:216 [ sprites_irq::ypos#0 ] 2.5: zp ZP_BYTE:218 [ sprites_irq::ptr#0 ]
Uplift Scope [play_move_rotate] 8.89: zp ZP_BYTE:42 [ play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 ] 4: zp ZP_BYTE:148 [ play_move_rotate::return#0 ] 4: zp ZP_BYTE:150 [ play_move_rotate::$5 ] 4: zp ZP_BYTE:152 [ play_move_rotate::$2 ] 4: zp ZP_BYTE:153 [ play_move_rotate::$7 ] 3: zp ZP_BYTE:147 [ play_move_rotate::key_event#0 ] 0.67: zp ZP_BYTE:41 [ play_move_rotate::return#2 ]
Uplift Scope [play_update_score] 4: zp ZP_BYTE:176 [ play_update_score::$2 ] 4: zp ZP_BYTE:178 [ play_update_score::$4 ] 4: zp ZP_BYTE:183 [ play_update_score::$5 ] 4: zp ZP_BYTE:184 [ play_update_score::lines_after#0 ] 1.33: zp ZP_DWORD:179 [ play_update_score::add_bcd#0 ] 1.14: zp ZP_BYTE:170 [ play_update_score::removed#0 ] 0.44: zp ZP_BYTE:177 [ play_update_score::lines_before#0 ]
Uplift Scope [play_move_leftright] 4: zp ZP_BYTE:144 [ play_move_leftright::return#0 ] 4: zp ZP_BYTE:161 [ play_move_leftright::$4 ] 4: zp ZP_BYTE:163 [ play_move_leftright::$8 ] 3: zp ZP_BYTE:143 [ play_move_leftright::key_event#0 ] 0.67: zp ZP_BYTE:54 [ play_move_leftright::return#2 ]
Uplift Scope [render_show] 2: zp ZP_BYTE:94 [ render_show::d018val#3 ]
Uplift Scope [render_score] 0.75: zp ZP_WORD:5 [ render_score::screen#3 ]
Uplift Scope [sid_rnd_init]
Uplift Scope [render_screen_swap]
Uplift Scope [sprites_irq_init]
Uplifting [keyboard_event_scan] best 4695254 combination reg byte a [ keyboard_event_scan::$15 ] reg byte a [ keyboard_event_scan::$16 ] reg byte a [ keyboard_event_scan::event_type#0 ] reg byte a [ keyboard_event_scan::$23 ] zp ZP_BYTE:91 [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ] zp ZP_BYTE:92 [ keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#15 keyboard_event_scan::keycode#1 ] zp ZP_BYTE:90 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ] zp ZP_BYTE:197 [ keyboard_event_scan::row_scan#0 ] zp ZP_BYTE:199 [ keyboard_event_scan::$0 ] zp ZP_BYTE:201 [ keyboard_event_scan::$3 ] zp ZP_BYTE:203 [ keyboard_event_scan::$6 ] zp ZP_BYTE:205 [ keyboard_event_scan::$9 ]
Limited combination testing to 100 combinations of 524288 possible.
Uplifting [play_collision] best 4545254 combination zp ZP_BYTE:50 [ play_collision::i#2 play_collision::i#3 play_collision::i#11 play_collision::i#13 ] reg byte a [ play_collision::$7 ] zp ZP_BYTE:51 [ play_collision::col#2 play_collision::col#9 play_collision::col#1 ] reg byte x [ play_collision::c#2 play_collision::c#1 ] zp ZP_BYTE:158 [ play_collision::i#1 ] zp ZP_BYTE:48 [ play_collision::ypos2#2 play_collision::ypos2#0 play_collision::ypos2#1 ] zp ZP_BYTE:49 [ play_collision::l#6 play_collision::l#1 ] zp ZP_WORD:156 [ play_collision::playfield_line#0 ] zp ZP_WORD:154 [ play_collision::piece_gfx#0 ] zp ZP_BYTE:47 [ play_collision::xpos#6 play_collision::xpos#0 play_collision::xpos#1 play_collision::xpos#2 play_collision::xpos#3 play_collision::xpos#4 ] zp ZP_BYTE:45 [ play_collision::orientation#5 play_collision::orientation#0 play_collision::orientation#1 play_collision::orientation#2 play_collision::orientation#3 ] zp ZP_BYTE:46 [ play_collision::ypos#5 play_collision::ypos#0 play_collision::ypos#1 play_collision::ypos#2 play_collision::ypos#3 play_collision::ypos#4 ] zp ZP_BYTE:151 [ play_collision::return#14 ] zp ZP_BYTE:160 [ play_collision::return#13 ] zp ZP_BYTE:162 [ play_collision::return#1 ] zp ZP_BYTE:166 [ play_collision::return#0 ] zp ZP_BYTE:173 [ play_collision::return#10 ] zp ZP_BYTE:53 [ play_collision::return#15 ]
Limited combination testing to 100 combinations of 322486272 possible.
Uplifting [play_remove_lines] best 4406254 combination reg byte y [ play_remove_lines::r#2 play_remove_lines::r#3 play_remove_lines::r#1 ] reg byte x [ play_remove_lines::w#6 play_remove_lines::w#3 play_remove_lines::w#4 play_remove_lines::w#12 play_remove_lines::w#11 play_remove_lines::w#1 play_remove_lines::w#2 ] zp ZP_BYTE:80 [ play_remove_lines::x#2 play_remove_lines::x#1 ] zp ZP_BYTE:81 [ play_remove_lines::full#4 play_remove_lines::full#2 ] zp ZP_BYTE:187 [ play_remove_lines::c#0 ] zp ZP_BYTE:78 [ play_remove_lines::removed#11 play_remove_lines::removed#8 play_remove_lines::removed#1 ] zp ZP_BYTE:77 [ play_remove_lines::y#8 play_remove_lines::y#1 ] zp ZP_BYTE:168 [ play_remove_lines::return#0 ]
Limited combination testing to 100 combinations of 20736 possible.
Uplifting [play_lock_current] best 4316254 combination zp ZP_BYTE:85 [ play_lock_current::i#2 play_lock_current::i#3 play_lock_current::i#7 play_lock_current::i#9 ] zp ZP_BYTE:86 [ play_lock_current::col#2 play_lock_current::col#0 play_lock_current::col#1 ] reg byte x [ play_lock_current::c#2 play_lock_current::c#1 ] zp ZP_BYTE:190 [ play_lock_current::i#1 ] zp ZP_BYTE:84 [ play_lock_current::l#6 play_lock_current::l#1 ] zp ZP_WORD:188 [ play_lock_current::playfield_line#0 ] zp ZP_BYTE:83 [ play_lock_current::ypos2#2 play_lock_current::ypos2#0 play_lock_current::ypos2#1 ]
Limited combination testing to 100 combinations of 729 possible.
Uplifting [] best 4316014 combination zp ZP_BYTE:93 [ keyboard_events_size#10 keyboard_events_size#30 keyboard_events_size#19 keyboard_events_size#16 keyboard_events_size#13 keyboard_events_size#4 keyboard_events_size#29 keyboard_events_size#1 keyboard_events_size#2 ] zp ZP_BYTE:74 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#2 play_spawn_current::piece_idx#1 ] zp ZP_WORD:70 [ current_piece_gfx#35 current_piece_gfx#114 current_piece_gfx#18 current_piece_gfx#74 current_piece_gfx#20 current_piece_gfx#21 current_piece_gfx#7 ] zp ZP_BYTE:68 [ current_piece_char#29 current_piece_char#10 current_piece_char#16 current_piece_char#5 ] zp ZP_BYTE:28 [ current_piece_char#68 current_piece_char#108 current_piece_char#109 ] zp ZP_WORD:26 [ current_piece_gfx#64 current_piece_gfx#120 current_piece_gfx#121 ] zp ZP_BYTE:120 [ irq_sprite_ypos#0 irq_sprite_ypos#1 irq_sprite_ypos#2 irq_sprite_ypos#3 ] zp ZP_BYTE:121 [ irq_sprite_ptr#0 irq_sprite_ptr#1 irq_sprite_ptr#2 irq_sprite_ptr#3 ] zp ZP_BYTE:72 [ current_xpos#43 current_xpos#124 current_xpos#19 current_xpos#103 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ] zp ZP_WORD:43 [ current_piece#17 current_piece#100 current_piece#101 current_piece#102 current_piece#103 current_piece#104 ] reg byte x [ render_screen_render#22 render_screen_render#70 ] reg byte x [ next_piece_idx#12 next_piece_idx#84 next_piece_idx#85 ] reg byte a [ render_screen_render#15 render_screen_render#68 ] zp ZP_BYTE:122 [ irq_cnt#0 irq_cnt#1 irq_cnt#2 ] reg byte x [ current_ypos#13 current_ypos#106 current_ypos#107 ] zp ZP_BYTE:118 [ render_screen_showing#0 render_screen_showing#1 ] zp ZP_WORD:66 [ current_piece#28 current_piece#10 current_piece#15 current_piece#98 current_piece#106 ] zp ZP_BYTE:65 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#64 level_bcd#21 level_bcd#8 ] zp ZP_BYTE:69 [ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ] zp ZP_BYTE:64 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#21 current_movedown_slow#1 current_movedown_slow#23 current_movedown_slow#69 current_movedown_slow#10 ] zp ZP_BYTE:56 [ current_ypos#38 current_ypos#3 current_ypos#100 current_ypos#19 current_ypos#6 ] zp ZP_BYTE:75 [ game_over#65 game_over#27 game_over#10 game_over#15 game_over#52 ] zp ZP_BYTE:25 [ current_xpos#59 current_xpos#130 current_xpos#131 ] zp ZP_DWORD:59 [ score_bcd#26 score_bcd#18 score_bcd#14 score_bcd#16 score_bcd#30 ] zp ZP_BYTE:63 [ level#33 level#10 level#17 level#19 level#21 ] zp ZP_WORD:57 [ lines_bcd#26 lines_bcd#19 lines_bcd#15 lines_bcd#17 lines_bcd#30 ] zp ZP_BYTE:4 [ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 ] zp ZP_BYTE:119 [ irq_raster_next#0 irq_raster_next#4 irq_raster_next#1 irq_raster_next#2 irq_raster_next#3 ] zp ZP_BYTE:24 [ render_screen_render#33 render_screen_render#69 ] zp ZP_BYTE:2 [ render_screen_show#16 render_screen_show#13 ] zp ZP_BYTE:3 [ render_screen_render#18 render_screen_render#11 ]
Limited combination testing to 100 combinations of 1944 possible.
Uplifting [render_moving] best 4301014 combination zp ZP_BYTE:31 [ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 ] reg byte x [ render_moving::c#2 render_moving::c#1 ] zp ZP_BYTE:32 [ render_moving::xpos#2 render_moving::xpos#0 render_moving::xpos#1 ] reg byte a [ render_moving::current_cell#0 ] zp ZP_BYTE:135 [ render_moving::$2 ] zp ZP_BYTE:30 [ render_moving::l#4 render_moving::l#1 ] zp ZP_WORD:136 [ render_moving::screen_line#0 ] zp ZP_BYTE:29 [ render_moving::ypos2#2 render_moving::ypos2#0 render_moving::ypos2#1 ]
Limited combination testing to 100 combinations of 3888 possible.
Uplifting [render_next] best 4286010 combination zp ZP_WORD:18 [ render_next::next_piece_gfx#2 render_next::next_piece_gfx#3 render_next::next_piece_gfx#1 render_next::next_piece_gfx#9 ] reg byte x [ render_next::c#2 render_next::c#1 ] zp ZP_WORD:20 [ render_next::screen_next_area#5 render_next::screen_next_area#10 render_next::screen_next_area#4 render_next::screen_next_area#11 render_next::screen_next_area#3 ] reg byte a [ render_next::cell#0 ] zp ZP_BYTE:17 [ render_next::l#7 render_next::l#1 ] zp ZP_BYTE:133 [ render_next::next_piece_char#0 ] reg byte y [ render_next::$4 ]
Limited combination testing to 100 combinations of 128 possible.
Uplifting [play_increase_level] best 4272004 combination reg byte a [ play_increase_level::b4#0 ] reg byte x [ play_increase_level::b#2 play_increase_level::b#1 ] reg byte a [ play_increase_level::$1 ]
Uplifting [render_playfield] best 4271404 combination zp ZP_WORD:37 [ render_playfield::screen_line#2 render_playfield::screen_line#0 render_playfield::screen_line#1 ] zp ZP_BYTE:39 [ render_playfield::c#2 render_playfield::c#1 ] zp ZP_BYTE:36 [ render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 ] reg byte a [ render_playfield::$2 ] reg byte a [ render_playfield::$3 ] zp ZP_BYTE:35 [ render_playfield::l#2 render_playfield::l#1 ]
Limited combination testing to 100 combinations of 128 possible.
Uplifting [keyboard_matrix_read] best 4259398 combination reg byte a [ keyboard_matrix_read::return#2 ] reg byte x [ keyboard_matrix_read::rowid#0 ] reg byte a [ keyboard_matrix_read::return#0 ]
Uplifting [render_screen_original] best 4257298 combination zp ZP_WORD:112 [ render_screen_original::screen#7 render_screen_original::screen#6 render_screen_original::screen#5 render_screen_original::screen#8 render_screen_original::screen#9 render_screen_original::screen#10 render_screen_original::screen#2 render_screen_original::screen#3 ] reg byte x [ render_screen_original::x#6 render_screen_original::x#5 render_screen_original::x#4 render_screen_original::x#1 render_screen_original::x#2 render_screen_original::x#3 ] zp ZP_WORD:114 [ render_screen_original::cols#6 render_screen_original::cols#5 render_screen_original::cols#4 render_screen_original::cols#7 render_screen_original::cols#3 render_screen_original::cols#1 render_screen_original::cols#2 ] zp ZP_WORD:108 [ render_screen_original::oscr#2 render_screen_original::oscr#4 render_screen_original::oscr#1 ] zp ZP_WORD:110 [ render_screen_original::ocols#2 render_screen_original::ocols#4 render_screen_original::ocols#1 ] zp ZP_BYTE:107 [ render_screen_original::y#6 render_screen_original::y#1 ]
Uplifting [play_spawn_current] best 4251279 combination reg byte a [ play_spawn_current::sid_rnd1_return#0 ] reg byte a [ play_spawn_current::$2 ] reg byte x [ play_spawn_current::current_piece_idx#0 ] zp ZP_BYTE:172 [ play_spawn_current::$0 ]
Uplifting [main] best 4250079 combination reg byte a [ main::render#1 ] reg byte x [ main::key_event#0 ]
Uplifting [play_movement] best 4249467 combination reg byte a [ play_movement::return#3 ] zp ZP_BYTE:40 [ play_movement::return#2 play_movement::render#1 play_movement::return#0 ] zp ZP_BYTE:125 [ play_movement::key_event#0 ] reg byte a [ play_movement::$3 ] reg byte a [ play_movement::$4 ] zp ZP_BYTE:146 [ play_movement::render#2 ]
Limited combination testing to 100 combinations of 576 possible.
Uplifting [keyboard_event_get] best 4248561 combination reg byte x [ keyboard_event_get::return#3 ] reg byte x [ keyboard_event_get::return#2 keyboard_event_get::return#1 ]
Uplifting [play_init] best 4248351 combination reg byte a [ play_init::b4#0 ] zp ZP_BYTE:99 [ play_init::b#2 play_init::b#1 ] reg byte y [ play_init::j#2 play_init::j#1 ] reg byte x [ play_init::$2 ] zp ZP_BYTE:98 [ play_init::idx#2 play_init::idx#1 ] zp ZP_WORD:96 [ play_init::pli#2 play_init::pli#1 ]
Limited combination testing to 100 combinations of 432 possible.
Uplifting [render_init] best 4248161 combination reg byte x [ render_init::i#2 render_init::i#1 ] reg byte a [ render_init::$13 ] reg byte a [ render_init::$14 ] zp ZP_WORD:105 [ render_init::li_2#2 render_init::li_2#1 ] zp ZP_WORD:103 [ render_init::li_1#2 render_init::li_1#1 ]
Uplifting [render_bcd] best 4248131 combination zp ZP_WORD:7 [ render_bcd::screen#6 render_bcd::screen#0 render_bcd::screen#1 render_bcd::screen#2 render_bcd::screen#3 render_bcd::screen#4 render_bcd::screen#5 ] reg byte x [ render_bcd::bcd#6 render_bcd::bcd#0 render_bcd::bcd#1 render_bcd::bcd#2 render_bcd::bcd#3 render_bcd::bcd#4 render_bcd::bcd#5 ] zp ZP_WORD:13 [ render_bcd::screen_pos#3 render_bcd::screen_pos#0 render_bcd::screen_pos#2 ] reg byte a [ render_bcd::$5 ] reg byte a [ render_bcd::$6 ] reg byte a [ render_bcd::$3 ] zp ZP_BYTE:131 [ render_bcd::$4 ] zp ZP_WORD:9 [ render_bcd::offset#6 ] zp ZP_BYTE:11 [ render_bcd::only_low#6 ]
Limited combination testing to 100 combinations of 1536 possible.
Uplifting [sprites_init] best 4247961 combination reg byte y [ sprites_init::s#2 sprites_init::s#1 ] reg byte x [ sprites_init::s2#0 ] zp ZP_BYTE:101 [ sprites_init::xpos#2 sprites_init::xpos#1 ]
Uplifting [play_move_down] best 4247928 combination reg byte x [ play_move_down::movedown#6 play_move_down::movedown#7 play_move_down::movedown#10 play_move_down::movedown#2 play_move_down::movedown#3 ] reg byte a [ play_move_down::return#0 ] reg byte a [ play_move_down::$2 ] reg byte a [ play_move_down::$12 ] zp ZP_BYTE:169 [ play_move_down::removed#0 ] zp ZP_BYTE:141 [ play_move_down::key_event#0 ] zp ZP_BYTE:73 [ play_move_down::return#3 ]
Limited combination testing to 100 combinations of 12288 possible.
Uplifting [keyboard_event_pressed] best 4247908 combination reg byte a [ keyboard_event_pressed::return#12 ] reg byte a [ keyboard_event_pressed::$0 ] reg byte a [ keyboard_event_pressed::$1 ] reg byte a [ keyboard_event_pressed::return#0 ] zp ZP_BYTE:200 [ keyboard_event_pressed::return#1 ] zp ZP_BYTE:202 [ keyboard_event_pressed::return#2 ] zp ZP_BYTE:204 [ keyboard_event_pressed::return#10 ] zp ZP_BYTE:192 [ keyboard_event_pressed::row_bits#0 ] zp ZP_BYTE:194 [ keyboard_event_pressed::return#11 ] zp ZP_BYTE:88 [ keyboard_event_pressed::keycode#5 ]
Limited combination testing to 100 combinations of 589824 possible.
Uplifting [sprites_irq] best 4247884 combination zp ZP_BYTE:117 [ sprites_irq::raster_sprite_gfx_modify#0 ] reg byte x [ sprites_irq::$0 ] reg byte a [ sprites_irq::ptr#4 ] reg byte a [ sprites_irq::ptr#2 ] reg byte a [ sprites_irq::ptr#3 ] zp ZP_BYTE:221 [ sprites_irq::ptr#1 ] zp ZP_BYTE:216 [ sprites_irq::ypos#0 ] zp ZP_BYTE:218 [ sprites_irq::ptr#0 ]
Limited combination testing to 100 combinations of 12288 possible.
Uplifting [play_move_rotate] best 4247866 combination zp ZP_BYTE:42 [ play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 ] reg byte a [ play_move_rotate::return#0 ] reg byte x [ play_move_rotate::$5 ] reg byte a [ play_move_rotate::$2 ] zp ZP_BYTE:153 [ play_move_rotate::$7 ] zp ZP_BYTE:147 [ play_move_rotate::key_event#0 ] zp ZP_BYTE:41 [ play_move_rotate::return#2 ]
Limited combination testing to 100 combinations of 12288 possible.
Uplifting [play_update_score] best 4247844 combination reg byte a [ play_update_score::$2 ] reg byte a [ play_update_score::$4 ] reg byte a [ play_update_score::$5 ] reg byte a [ play_update_score::lines_after#0 ] zp ZP_DWORD:179 [ play_update_score::add_bcd#0 ] zp ZP_BYTE:170 [ play_update_score::removed#0 ] zp ZP_BYTE:177 [ play_update_score::lines_before#0 ]
Limited combination testing to 100 combinations of 2304 possible.
Uplifting [play_move_leftright] best 4247817 combination reg byte a [ play_move_leftright::return#0 ] reg byte a [ play_move_leftright::$4 ] reg byte a [ play_move_leftright::$8 ] reg byte a [ play_move_leftright::key_event#0 ] zp ZP_BYTE:54 [ play_move_leftright::return#2 ]
Limited combination testing to 100 combinations of 1024 possible.
Uplifting [render_show] best 4247808 combination reg byte a [ render_show::d018val#3 ]
Uplifting [render_score] best 4247808 combination zp ZP_WORD:5 [ render_score::screen#3 ]
Uplifting [sid_rnd_init] best 4247808 combination
Uplifting [render_screen_swap] best 4247808 combination
Uplifting [sprites_irq_init] best 4247808 combination
Attempting to uplift remaining variables inzp ZP_BYTE:93 [ keyboard_events_size#10 keyboard_events_size#30 keyboard_events_size#19 keyboard_events_size#16 keyboard_events_size#13 keyboard_events_size#4 keyboard_events_size#29 keyboard_events_size#1 keyboard_events_size#2 ]
Uplifting [] best 4247808 combination zp ZP_BYTE:93 [ keyboard_events_size#10 keyboard_events_size#30 keyboard_events_size#19 keyboard_events_size#16 keyboard_events_size#13 keyboard_events_size#4 keyboard_events_size#29 keyboard_events_size#1 keyboard_events_size#2 ]
Attempting to uplift remaining variables inzp ZP_BYTE:50 [ play_collision::i#2 play_collision::i#3 play_collision::i#11 play_collision::i#13 ]
Uplifting [play_collision] best 4247808 combination zp ZP_BYTE:50 [ play_collision::i#2 play_collision::i#3 play_collision::i#11 play_collision::i#13 ]
Attempting to uplift remaining variables inzp ZP_BYTE:85 [ play_lock_current::i#2 play_lock_current::i#3 play_lock_current::i#7 play_lock_current::i#9 ]
Uplifting [play_lock_current] best 4247808 combination zp ZP_BYTE:85 [ play_lock_current::i#2 play_lock_current::i#3 play_lock_current::i#7 play_lock_current::i#9 ]
Attempting to uplift remaining variables inzp ZP_BYTE:91 [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ]
Uplifting [keyboard_event_scan] best 4097808 combination reg byte x [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:80 [ play_remove_lines::x#2 play_remove_lines::x#1 ]
Uplifting [play_remove_lines] best 4097808 combination zp ZP_BYTE:80 [ play_remove_lines::x#2 play_remove_lines::x#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:86 [ play_lock_current::col#2 play_lock_current::col#0 play_lock_current::col#1 ]
Uplifting [play_lock_current] best 4097808 combination zp ZP_BYTE:86 [ play_lock_current::col#2 play_lock_current::col#0 play_lock_current::col#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:51 [ play_collision::col#2 play_collision::col#9 play_collision::col#1 ]
Uplifting [play_collision] best 4097808 combination zp ZP_BYTE:51 [ play_collision::col#2 play_collision::col#9 play_collision::col#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:92 [ keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#15 keyboard_event_scan::keycode#1 ]
Uplifting [keyboard_event_scan] best 4097808 combination zp ZP_BYTE:92 [ keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#15 keyboard_event_scan::keycode#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:81 [ play_remove_lines::full#4 play_remove_lines::full#2 ]
Uplifting [play_remove_lines] best 4097808 combination zp ZP_BYTE:81 [ play_remove_lines::full#4 play_remove_lines::full#2 ]
Attempting to uplift remaining variables inzp ZP_BYTE:187 [ play_remove_lines::c#0 ]
Uplifting [play_remove_lines] best 4097808 combination zp ZP_BYTE:187 [ play_remove_lines::c#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:31 [ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 ]
Uplifting [render_moving] best 4097808 combination zp ZP_BYTE:31 [ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:78 [ play_remove_lines::removed#11 play_remove_lines::removed#8 play_remove_lines::removed#1 ]
Uplifting [play_remove_lines] best 4097808 combination zp ZP_BYTE:78 [ play_remove_lines::removed#11 play_remove_lines::removed#8 play_remove_lines::removed#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:190 [ play_lock_current::i#1 ]
Uplifting [play_lock_current] best 4097808 combination zp ZP_BYTE:190 [ play_lock_current::i#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:74 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#2 play_spawn_current::piece_idx#1 ]
Uplifting [] best 4097808 combination zp ZP_BYTE:74 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#2 play_spawn_current::piece_idx#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:90 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ]
Uplifting [keyboard_event_scan] best 4097808 combination zp ZP_BYTE:90 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:39 [ render_playfield::c#2 render_playfield::c#1 ]
Uplifting [render_playfield] best 4097808 combination zp ZP_BYTE:39 [ render_playfield::c#2 render_playfield::c#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:77 [ play_remove_lines::y#8 play_remove_lines::y#1 ]
Uplifting [play_remove_lines] best 4097808 combination zp ZP_BYTE:77 [ play_remove_lines::y#8 play_remove_lines::y#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:158 [ play_collision::i#1 ]
Uplifting [play_collision] best 4097808 combination zp ZP_BYTE:158 [ play_collision::i#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:36 [ render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 ]
Uplifting [render_playfield] best 4097808 combination zp ZP_BYTE:36 [ render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:32 [ render_moving::xpos#2 render_moving::xpos#0 render_moving::xpos#1 ]
Uplifting [render_moving] best 4097808 combination zp ZP_BYTE:32 [ render_moving::xpos#2 render_moving::xpos#0 render_moving::xpos#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:48 [ play_collision::ypos2#2 play_collision::ypos2#0 play_collision::ypos2#1 ]
Uplifting [play_collision] best 4097808 combination zp ZP_BYTE:48 [ play_collision::ypos2#2 play_collision::ypos2#0 play_collision::ypos2#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:197 [ keyboard_event_scan::row_scan#0 ]
Uplifting [keyboard_event_scan] best 4097808 combination zp ZP_BYTE:197 [ keyboard_event_scan::row_scan#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:84 [ play_lock_current::l#6 play_lock_current::l#1 ]
Uplifting [play_lock_current] best 4097808 combination zp ZP_BYTE:84 [ play_lock_current::l#6 play_lock_current::l#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:49 [ play_collision::l#6 play_collision::l#1 ]
Uplifting [play_collision] best 4097808 combination zp ZP_BYTE:49 [ play_collision::l#6 play_collision::l#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:83 [ play_lock_current::ypos2#2 play_lock_current::ypos2#0 play_lock_current::ypos2#1 ]
Uplifting [play_lock_current] best 4097808 combination zp ZP_BYTE:83 [ play_lock_current::ypos2#2 play_lock_current::ypos2#0 play_lock_current::ypos2#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:135 [ render_moving::$2 ]
Uplifting [render_moving] best 4097408 combination reg byte a [ render_moving::$2 ]
Attempting to uplift remaining variables inzp ZP_BYTE:68 [ current_piece_char#29 current_piece_char#10 current_piece_char#16 current_piece_char#5 ]
Uplifting [] best 4097408 combination zp ZP_BYTE:68 [ current_piece_char#29 current_piece_char#10 current_piece_char#16 current_piece_char#5 ]
Attempting to uplift remaining variables inzp ZP_BYTE:35 [ render_playfield::l#2 render_playfield::l#1 ]
Uplifting [render_playfield] best 4097408 combination zp ZP_BYTE:35 [ render_playfield::l#2 render_playfield::l#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:17 [ render_next::l#7 render_next::l#1 ]
Uplifting [render_next] best 4097408 combination zp ZP_BYTE:17 [ render_next::l#7 render_next::l#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:30 [ render_moving::l#4 render_moving::l#1 ]
Uplifting [render_moving] best 4097408 combination zp ZP_BYTE:30 [ render_moving::l#4 render_moving::l#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:29 [ render_moving::ypos2#2 render_moving::ypos2#0 render_moving::ypos2#1 ]
Uplifting [render_moving] best 4097408 combination zp ZP_BYTE:29 [ render_moving::ypos2#2 render_moving::ypos2#0 render_moving::ypos2#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:28 [ current_piece_char#68 current_piece_char#108 current_piece_char#109 ]
Uplifting [] best 4097408 combination zp ZP_BYTE:28 [ current_piece_char#68 current_piece_char#108 current_piece_char#109 ]
Attempting to uplift remaining variables inzp ZP_BYTE:133 [ render_next::next_piece_char#0 ]
Uplifting [render_next] best 4097408 combination zp ZP_BYTE:133 [ render_next::next_piece_char#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:120 [ irq_sprite_ypos#0 irq_sprite_ypos#1 irq_sprite_ypos#2 irq_sprite_ypos#3 ]
Uplifting [] best 4097408 combination zp ZP_BYTE:120 [ irq_sprite_ypos#0 irq_sprite_ypos#1 irq_sprite_ypos#2 irq_sprite_ypos#3 ]
Attempting to uplift remaining variables inzp ZP_BYTE:121 [ irq_sprite_ptr#0 irq_sprite_ptr#1 irq_sprite_ptr#2 irq_sprite_ptr#3 ]
Uplifting [] best 4097408 combination zp ZP_BYTE:121 [ irq_sprite_ptr#0 irq_sprite_ptr#1 irq_sprite_ptr#2 irq_sprite_ptr#3 ]
Attempting to uplift remaining variables inzp ZP_BYTE:47 [ play_collision::xpos#6 play_collision::xpos#0 play_collision::xpos#1 play_collision::xpos#2 play_collision::xpos#3 play_collision::xpos#4 ]
Uplifting [play_collision] best 4097408 combination zp ZP_BYTE:47 [ play_collision::xpos#6 play_collision::xpos#0 play_collision::xpos#1 play_collision::xpos#2 play_collision::xpos#3 play_collision::xpos#4 ]
Attempting to uplift remaining variables inzp ZP_BYTE:72 [ current_xpos#43 current_xpos#124 current_xpos#19 current_xpos#103 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ]
Uplifting [] best 4097408 combination zp ZP_BYTE:72 [ current_xpos#43 current_xpos#124 current_xpos#19 current_xpos#103 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ]
Attempting to uplift remaining variables inzp ZP_BYTE:40 [ play_movement::return#2 play_movement::render#1 play_movement::return#0 ]
Uplifting [play_movement] best 4097408 combination zp ZP_BYTE:40 [ play_movement::return#2 play_movement::render#1 play_movement::return#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:99 [ play_init::b#2 play_init::b#1 ]
Uplifting [play_init] best 4097308 combination reg byte x [ play_init::b#2 play_init::b#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:122 [ irq_cnt#0 irq_cnt#1 irq_cnt#2 ]
Uplifting [] best 4097308 combination zp ZP_BYTE:122 [ irq_cnt#0 irq_cnt#1 irq_cnt#2 ]
Attempting to uplift remaining variables inzp ZP_BYTE:118 [ render_screen_showing#0 render_screen_showing#1 ]
Uplifting [] best 4097308 combination zp ZP_BYTE:118 [ render_screen_showing#0 render_screen_showing#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:65 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#64 level_bcd#21 level_bcd#8 ]
Uplifting [] best 4097308 combination zp ZP_BYTE:65 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#64 level_bcd#21 level_bcd#8 ]
Attempting to uplift remaining variables inzp ZP_BYTE:45 [ play_collision::orientation#5 play_collision::orientation#0 play_collision::orientation#1 play_collision::orientation#2 play_collision::orientation#3 ]
Uplifting [play_collision] best 4097292 combination reg byte x [ play_collision::orientation#5 play_collision::orientation#0 play_collision::orientation#1 play_collision::orientation#2 play_collision::orientation#3 ]
Attempting to uplift remaining variables inzp ZP_BYTE:107 [ render_screen_original::y#6 render_screen_original::y#1 ]
Uplifting [render_screen_original] best 4097292 combination zp ZP_BYTE:107 [ render_screen_original::y#6 render_screen_original::y#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:69 [ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ]
Uplifting [] best 4097292 combination zp ZP_BYTE:69 [ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ]
Attempting to uplift remaining variables inzp ZP_BYTE:64 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#21 current_movedown_slow#1 current_movedown_slow#23 current_movedown_slow#69 current_movedown_slow#10 ]
Uplifting [] best 4097292 combination zp ZP_BYTE:64 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#21 current_movedown_slow#1 current_movedown_slow#23 current_movedown_slow#69 current_movedown_slow#10 ]
Attempting to uplift remaining variables inzp ZP_BYTE:101 [ sprites_init::xpos#2 sprites_init::xpos#1 ]
Uplifting [sprites_init] best 4097292 combination zp ZP_BYTE:101 [ sprites_init::xpos#2 sprites_init::xpos#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:56 [ current_ypos#38 current_ypos#3 current_ypos#100 current_ypos#19 current_ypos#6 ]
Uplifting [] best 4097292 combination zp ZP_BYTE:56 [ current_ypos#38 current_ypos#3 current_ypos#100 current_ypos#19 current_ypos#6 ]
Attempting to uplift remaining variables inzp ZP_BYTE:75 [ game_over#65 game_over#27 game_over#10 game_over#15 game_over#52 ]
Uplifting [] best 4097292 combination zp ZP_BYTE:75 [ game_over#65 game_over#27 game_over#10 game_over#15 game_over#52 ]
Attempting to uplift remaining variables inzp ZP_BYTE:25 [ current_xpos#59 current_xpos#130 current_xpos#131 ]
Uplifting [] best 4097292 combination zp ZP_BYTE:25 [ current_xpos#59 current_xpos#130 current_xpos#131 ]
Attempting to uplift remaining variables inzp ZP_BYTE:98 [ play_init::idx#2 play_init::idx#1 ]
Uplifting [play_init] best 4097292 combination zp ZP_BYTE:98 [ play_init::idx#2 play_init::idx#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:46 [ play_collision::ypos#5 play_collision::ypos#0 play_collision::ypos#1 play_collision::ypos#2 play_collision::ypos#3 play_collision::ypos#4 ]
Uplifting [play_collision] best 4097292 combination zp ZP_BYTE:46 [ play_collision::ypos#5 play_collision::ypos#0 play_collision::ypos#1 play_collision::ypos#2 play_collision::ypos#3 play_collision::ypos#4 ]
Attempting to uplift remaining variables inzp ZP_BYTE:63 [ level#33 level#10 level#17 level#19 level#21 ]
Uplifting [] best 4097292 combination zp ZP_BYTE:63 [ level#33 level#10 level#17 level#19 level#21 ]
Attempting to uplift remaining variables inzp ZP_BYTE:4 [ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 ]
Uplifting [] best 4097292 combination zp ZP_BYTE:4 [ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 ]
Attempting to uplift remaining variables inzp ZP_BYTE:119 [ irq_raster_next#0 irq_raster_next#4 irq_raster_next#1 irq_raster_next#2 irq_raster_next#3 ]
Uplifting [] best 4097292 combination zp ZP_BYTE:119 [ irq_raster_next#0 irq_raster_next#4 irq_raster_next#1 irq_raster_next#2 irq_raster_next#3 ]
Attempting to uplift remaining variables inzp ZP_BYTE:24 [ render_screen_render#33 render_screen_render#69 ]
Uplifting [] best 4097292 combination zp ZP_BYTE:24 [ render_screen_render#33 render_screen_render#69 ]
Attempting to uplift remaining variables inzp ZP_BYTE:125 [ play_movement::key_event#0 ]
Uplifting [play_movement] best 4097292 combination zp ZP_BYTE:125 [ play_movement::key_event#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:42 [ play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 ]
Uplifting [play_move_rotate] best 4097292 combination zp ZP_BYTE:42 [ play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 ]
Attempting to uplift remaining variables inzp ZP_BYTE:117 [ sprites_irq::raster_sprite_gfx_modify#0 ]
Uplifting [sprites_irq] best 4097292 combination zp ZP_BYTE:117 [ sprites_irq::raster_sprite_gfx_modify#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:2 [ render_screen_show#16 render_screen_show#13 ]
Uplifting [] best 4097292 combination zp ZP_BYTE:2 [ render_screen_show#16 render_screen_show#13 ]
Attempting to uplift remaining variables inzp ZP_BYTE:3 [ render_screen_render#18 render_screen_render#11 ]
Uplifting [] best 4097292 combination zp ZP_BYTE:3 [ render_screen_render#18 render_screen_render#11 ]
Attempting to uplift remaining variables inzp ZP_BYTE:131 [ render_bcd::$4 ]
Uplifting [render_bcd] best 4097286 combination reg byte a [ render_bcd::$4 ]
Attempting to uplift remaining variables inzp ZP_BYTE:151 [ play_collision::return#14 ]
Uplifting [play_collision] best 4097280 combination reg byte a [ play_collision::return#14 ]
Attempting to uplift remaining variables inzp ZP_BYTE:153 [ play_move_rotate::$7 ]
Uplifting [play_move_rotate] best 4097274 combination reg byte x [ play_move_rotate::$7 ]
Attempting to uplift remaining variables inzp ZP_BYTE:160 [ play_collision::return#13 ]
Uplifting [play_collision] best 4097268 combination reg byte a [ play_collision::return#13 ]
Attempting to uplift remaining variables inzp ZP_BYTE:162 [ play_collision::return#1 ]
Uplifting [play_collision] best 4097262 combination reg byte a [ play_collision::return#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:166 [ play_collision::return#0 ]
Uplifting [play_collision] best 4097256 combination reg byte a [ play_collision::return#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:168 [ play_remove_lines::return#0 ]
Uplifting [play_remove_lines] best 4097250 combination reg byte a [ play_remove_lines::return#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:169 [ play_move_down::removed#0 ]
Uplifting [play_move_down] best 4097244 combination reg byte a [ play_move_down::removed#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:173 [ play_collision::return#10 ]
Uplifting [play_collision] best 4097238 combination reg byte a [ play_collision::return#10 ]
Attempting to uplift remaining variables inzp ZP_BYTE:199 [ keyboard_event_scan::$0 ]
Uplifting [keyboard_event_scan] best 4097232 combination reg byte a [ keyboard_event_scan::$0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:200 [ keyboard_event_pressed::return#1 ]
Uplifting [keyboard_event_pressed] best 4097226 combination reg byte a [ keyboard_event_pressed::return#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:201 [ keyboard_event_scan::$3 ]
Uplifting [keyboard_event_scan] best 4097220 combination reg byte a [ keyboard_event_scan::$3 ]
Attempting to uplift remaining variables inzp ZP_BYTE:202 [ keyboard_event_pressed::return#2 ]
Uplifting [keyboard_event_pressed] best 4097214 combination reg byte a [ keyboard_event_pressed::return#2 ]
Attempting to uplift remaining variables inzp ZP_BYTE:203 [ keyboard_event_scan::$6 ]
Uplifting [keyboard_event_scan] best 4097208 combination reg byte a [ keyboard_event_scan::$6 ]
Attempting to uplift remaining variables inzp ZP_BYTE:204 [ keyboard_event_pressed::return#10 ]
Uplifting [keyboard_event_pressed] best 4097202 combination reg byte a [ keyboard_event_pressed::return#10 ]
Attempting to uplift remaining variables inzp ZP_BYTE:205 [ keyboard_event_scan::$9 ]
Uplifting [keyboard_event_scan] best 4097196 combination reg byte a [ keyboard_event_scan::$9 ]
Attempting to uplift remaining variables inzp ZP_BYTE:147 [ play_move_rotate::key_event#0 ]
Uplifting [play_move_rotate] best 4097187 combination reg byte a [ play_move_rotate::key_event#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:221 [ sprites_irq::ptr#1 ]
Uplifting [sprites_irq] best 4097175 combination reg byte x [ sprites_irq::ptr#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:216 [ sprites_irq::ypos#0 ]
Uplifting [sprites_irq] best 4097160 combination reg byte a [ sprites_irq::ypos#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:218 [ sprites_irq::ptr#0 ]
Uplifting [sprites_irq] best 4097145 combination reg byte x [ sprites_irq::ptr#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:141 [ play_move_down::key_event#0 ]
Uplifting [play_move_down] best 4097139 combination reg byte a [ play_move_down::key_event#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:192 [ keyboard_event_pressed::row_bits#0 ]
Uplifting [keyboard_event_pressed] best 4097139 combination zp ZP_BYTE:192 [ keyboard_event_pressed::row_bits#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:194 [ keyboard_event_pressed::return#11 ]
Uplifting [keyboard_event_pressed] best 4097121 combination reg byte a [ keyboard_event_pressed::return#11 ]
Attempting to uplift remaining variables inzp ZP_BYTE:53 [ play_collision::return#15 ]
Uplifting [play_collision] best 4097091 combination reg byte a [ play_collision::return#15 ]
Attempting to uplift remaining variables inzp ZP_BYTE:88 [ keyboard_event_pressed::keycode#5 ]
Uplifting [keyboard_event_pressed] best 4097091 combination zp ZP_BYTE:88 [ keyboard_event_pressed::keycode#5 ]
Attempting to uplift remaining variables inzp ZP_BYTE:170 [ play_update_score::removed#0 ]
Uplifting [play_update_score] best 4097085 combination reg byte x [ play_update_score::removed#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:11 [ render_bcd::only_low#6 ]
Uplifting [render_bcd] best 4097064 combination reg byte y [ render_bcd::only_low#6 ]
Attempting to uplift remaining variables inzp ZP_BYTE:146 [ play_movement::render#2 ]
Uplifting [play_movement] best 4097064 combination zp ZP_BYTE:146 [ play_movement::render#2 ]
Attempting to uplift remaining variables inzp ZP_BYTE:41 [ play_move_rotate::return#2 ]
Uplifting [play_move_rotate] best 4097055 combination reg byte a [ play_move_rotate::return#2 ]
Attempting to uplift remaining variables inzp ZP_BYTE:54 [ play_move_leftright::return#2 ]
Uplifting [play_move_leftright] best 4097046 combination reg byte a [ play_move_leftright::return#2 ]
Attempting to uplift remaining variables inzp ZP_BYTE:73 [ play_move_down::return#3 ]
Uplifting [play_move_down] best 4097039 combination reg byte x [ play_move_down::return#3 ]
Attempting to uplift remaining variables inzp ZP_BYTE:177 [ play_update_score::lines_before#0 ]
Uplifting [play_update_score] best 4097039 combination zp ZP_BYTE:177 [ play_update_score::lines_before#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:172 [ play_spawn_current::$0 ]
Uplifting [play_spawn_current] best 4097039 combination zp ZP_BYTE:172 [ play_spawn_current::$0 ]
Coalescing zero page register with common assignment [ zp ZP_WORD:5 [ render_score::screen#3 ] ] with [ zp ZP_WORD:7 [ render_bcd::screen#6 render_bcd::screen#0 render_bcd::screen#1 render_bcd::screen#2 render_bcd::screen#3 render_bcd::screen#4 render_bcd::screen#5 ] ] - score: 6
Coalescing zero page register with common assignment [ zp ZP_BYTE:40 [ play_movement::return#2 play_movement::render#1 play_movement::return#0 ] ] with [ zp ZP_BYTE:146 [ play_movement::render#2 ] ] - score: 2
Coalescing zero page register with common assignment [ zp ZP_WORD:9 [ render_bcd::offset#6 ] ] with [ zp ZP_WORD:13 [ render_bcd::screen_pos#3 render_bcd::screen_pos#0 render_bcd::screen_pos#2 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:43 [ current_piece#17 current_piece#100 current_piece#101 current_piece#102 current_piece#103 current_piece#104 ] ] with [ zp ZP_WORD:154 [ play_collision::piece_gfx#0 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_BYTE:46 [ play_collision::ypos#5 play_collision::ypos#0 play_collision::ypos#1 play_collision::ypos#2 play_collision::ypos#3 play_collision::ypos#4 ] ] with [ zp ZP_BYTE:48 [ play_collision::ypos2#2 play_collision::ypos2#0 play_collision::ypos2#1 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_BYTE:56 [ current_ypos#38 current_ypos#3 current_ypos#100 current_ypos#19 current_ypos#6 ] ] with [ zp ZP_BYTE:83 [ play_lock_current::ypos2#2 play_lock_current::ypos2#0 play_lock_current::ypos2#1 ] ] - score: 1
Coalescing zero page register [ zp ZP_BYTE:2 [ render_screen_show#16 render_screen_show#13 ] ] with [ zp ZP_BYTE:98 [ play_init::idx#2 play_init::idx#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:2 [ render_screen_show#16 render_screen_show#13 play_init::idx#2 play_init::idx#1 ] ] with [ zp ZP_BYTE:101 [ sprites_init::xpos#2 sprites_init::xpos#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:2 [ render_screen_show#16 render_screen_show#13 play_init::idx#2 play_init::idx#1 sprites_init::xpos#2 sprites_init::xpos#1 ] ] with [ zp ZP_BYTE:107 [ render_screen_original::y#6 render_screen_original::y#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:4 [ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 ] ] with [ zp ZP_BYTE:77 [ play_remove_lines::y#8 play_remove_lines::y#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:4 [ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 play_remove_lines::y#8 play_remove_lines::y#1 ] ] with [ zp ZP_BYTE:84 [ play_lock_current::l#6 play_lock_current::l#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:4 [ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 play_remove_lines::y#8 play_remove_lines::y#1 play_lock_current::l#6 play_lock_current::l#1 ] ] with [ zp ZP_BYTE:172 [ play_spawn_current::$0 ] ]
Coalescing zero page register [ zp ZP_BYTE:4 [ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 play_remove_lines::y#8 play_remove_lines::y#1 play_lock_current::l#6 play_lock_current::l#1 play_spawn_current::$0 ] ] with [ zp ZP_BYTE:177 [ play_update_score::lines_before#0 ] ]
Coalescing zero page register [ zp ZP_WORD:5 [ render_score::screen#3 render_bcd::screen#6 render_bcd::screen#0 render_bcd::screen#1 render_bcd::screen#2 render_bcd::screen#3 render_bcd::screen#4 render_bcd::screen#5 ] ] with [ zp ZP_WORD:18 [ render_next::next_piece_gfx#2 render_next::next_piece_gfx#3 render_next::next_piece_gfx#1 render_next::next_piece_gfx#9 ] ]
Coalescing zero page register [ zp ZP_WORD:5 [ render_score::screen#3 render_bcd::screen#6 render_bcd::screen#0 render_bcd::screen#1 render_bcd::screen#2 render_bcd::screen#3 render_bcd::screen#4 render_bcd::screen#5 render_next::next_piece_gfx#2 render_next::next_piece_gfx#3 render_next::next_piece_gfx#1 render_next::next_piece_gfx#9 ] ] with [ zp ZP_WORD:26 [ current_piece_gfx#64 current_piece_gfx#120 current_piece_gfx#121 ] ]
Coalescing zero page register [ zp ZP_WORD:5 [ render_score::screen#3 render_bcd::screen#6 render_bcd::screen#0 render_bcd::screen#1 render_bcd::screen#2 render_bcd::screen#3 render_bcd::screen#4 render_bcd::screen#5 render_next::next_piece_gfx#2 render_next::next_piece_gfx#3 render_next::next_piece_gfx#1 render_next::next_piece_gfx#9 current_piece_gfx#64 current_piece_gfx#120 current_piece_gfx#121 ] ] with [ zp ZP_WORD:37 [ render_playfield::screen_line#2 render_playfield::screen_line#0 render_playfield::screen_line#1 ] ]
Coalescing zero page register [ zp ZP_WORD:5 [ render_score::screen#3 render_bcd::screen#6 render_bcd::screen#0 render_bcd::screen#1 render_bcd::screen#2 render_bcd::screen#3 render_bcd::screen#4 render_bcd::screen#5 render_next::next_piece_gfx#2 render_next::next_piece_gfx#3 render_next::next_piece_gfx#1 render_next::next_piece_gfx#9 current_piece_gfx#64 current_piece_gfx#120 current_piece_gfx#121 render_playfield::screen_line#2 render_playfield::screen_line#0 render_playfield::screen_line#1 ] ] with [ zp ZP_WORD:43 [ current_piece#17 current_piece#100 current_piece#101 current_piece#102 current_piece#103 current_piece#104 play_collision::piece_gfx#0 ] ]
Coalescing zero page register [ zp ZP_WORD:5 [ render_score::screen#3 render_bcd::screen#6 render_bcd::screen#0 render_bcd::screen#1 render_bcd::screen#2 render_bcd::screen#3 render_bcd::screen#4 render_bcd::screen#5 render_next::next_piece_gfx#2 render_next::next_piece_gfx#3 render_next::next_piece_gfx#1 render_next::next_piece_gfx#9 current_piece_gfx#64 current_piece_gfx#120 current_piece_gfx#121 render_playfield::screen_line#2 render_playfield::screen_line#0 render_playfield::screen_line#1 current_piece#17 current_piece#100 current_piece#101 current_piece#102 current_piece#103 current_piece#104 play_collision::piece_gfx#0 ] ] with [ zp ZP_WORD:96 [ play_init::pli#2 play_init::pli#1 ] ]
Coalescing zero page register [ zp ZP_WORD:5 [ render_score::screen#3 render_bcd::screen#6 render_bcd::screen#0 render_bcd::screen#1 render_bcd::screen#2 render_bcd::screen#3 render_bcd::screen#4 render_bcd::screen#5 render_next::next_piece_gfx#2 render_next::next_piece_gfx#3 render_next::next_piece_gfx#1 render_next::next_piece_gfx#9 current_piece_gfx#64 current_piece_gfx#120 current_piece_gfx#121 render_playfield::screen_line#2 render_playfield::screen_line#0 render_playfield::screen_line#1 current_piece#17 current_piece#100 current_piece#101 current_piece#102 current_piece#103 current_piece#104 play_collision::piece_gfx#0 play_init::pli#2 play_init::pli#1 ] ] with [ zp ZP_WORD:103 [ render_init::li_1#2 render_init::li_1#1 ] ]
Coalescing zero page register [ zp ZP_WORD:5 [ render_score::screen#3 render_bcd::screen#6 render_bcd::screen#0 render_bcd::screen#1 render_bcd::screen#2 render_bcd::screen#3 render_bcd::screen#4 render_bcd::screen#5 render_next::next_piece_gfx#2 render_next::next_piece_gfx#3 render_next::next_piece_gfx#1 render_next::next_piece_gfx#9 current_piece_gfx#64 current_piece_gfx#120 current_piece_gfx#121 render_playfield::screen_line#2 render_playfield::screen_line#0 render_playfield::screen_line#1 current_piece#17 current_piece#100 current_piece#101 current_piece#102 current_piece#103 current_piece#104 play_collision::piece_gfx#0 play_init::pli#2 play_init::pli#1 render_init::li_1#2 render_init::li_1#1 ] ] with [ zp ZP_WORD:108 [ render_screen_original::oscr#2 render_screen_original::oscr#4 render_screen_original::oscr#1 ] ]
Coalescing zero page register [ zp ZP_WORD:5 [ render_score::screen#3 render_bcd::screen#6 render_bcd::screen#0 render_bcd::screen#1 render_bcd::screen#2 render_bcd::screen#3 render_bcd::screen#4 render_bcd::screen#5 render_next::next_piece_gfx#2 render_next::next_piece_gfx#3 render_next::next_piece_gfx#1 render_next::next_piece_gfx#9 current_piece_gfx#64 current_piece_gfx#120 current_piece_gfx#121 render_playfield::screen_line#2 render_playfield::screen_line#0 render_playfield::screen_line#1 current_piece#17 current_piece#100 current_piece#101 current_piece#102 current_piece#103 current_piece#104 play_collision::piece_gfx#0 play_init::pli#2 play_init::pli#1 render_init::li_1#2 render_init::li_1#1 render_screen_original::oscr#2 render_screen_original::oscr#4 render_screen_original::oscr#1 ] ] with [ zp ZP_WORD:188 [ play_lock_current::playfield_line#0 ] ]
Coalescing zero page register [ zp ZP_WORD:9 [ render_bcd::offset#6 render_bcd::screen_pos#3 render_bcd::screen_pos#0 render_bcd::screen_pos#2 ] ] with [ zp ZP_WORD:20 [ render_next::screen_next_area#5 render_next::screen_next_area#10 render_next::screen_next_area#4 render_next::screen_next_area#11 render_next::screen_next_area#3 ] ]
Coalescing zero page register [ zp ZP_WORD:9 [ render_bcd::offset#6 render_bcd::screen_pos#3 render_bcd::screen_pos#0 render_bcd::screen_pos#2 render_next::screen_next_area#5 render_next::screen_next_area#10 render_next::screen_next_area#4 render_next::screen_next_area#11 render_next::screen_next_area#3 ] ] with [ zp ZP_WORD:105 [ render_init::li_2#2 render_init::li_2#1 ] ]
Coalescing zero page register [ zp ZP_WORD:9 [ render_bcd::offset#6 render_bcd::screen_pos#3 render_bcd::screen_pos#0 render_bcd::screen_pos#2 render_next::screen_next_area#5 render_next::screen_next_area#10 render_next::screen_next_area#4 render_next::screen_next_area#11 render_next::screen_next_area#3 render_init::li_2#2 render_init::li_2#1 ] ] with [ zp ZP_WORD:110 [ render_screen_original::ocols#2 render_screen_original::ocols#4 render_screen_original::ocols#1 ] ]
Coalescing zero page register [ zp ZP_WORD:9 [ render_bcd::offset#6 render_bcd::screen_pos#3 render_bcd::screen_pos#0 render_bcd::screen_pos#2 render_next::screen_next_area#5 render_next::screen_next_area#10 render_next::screen_next_area#4 render_next::screen_next_area#11 render_next::screen_next_area#3 render_init::li_2#2 render_init::li_2#1 render_screen_original::ocols#2 render_screen_original::ocols#4 render_screen_original::ocols#1 ] ] with [ zp ZP_WORD:136 [ render_moving::screen_line#0 ] ]
Coalescing zero page register [ zp ZP_WORD:9 [ render_bcd::offset#6 render_bcd::screen_pos#3 render_bcd::screen_pos#0 render_bcd::screen_pos#2 render_next::screen_next_area#5 render_next::screen_next_area#10 render_next::screen_next_area#4 render_next::screen_next_area#11 render_next::screen_next_area#3 render_init::li_2#2 render_init::li_2#1 render_screen_original::ocols#2 render_screen_original::ocols#4 render_screen_original::ocols#1 render_moving::screen_line#0 ] ] with [ zp ZP_WORD:156 [ play_collision::playfield_line#0 ] ]
Coalescing zero page register [ zp ZP_BYTE:17 [ render_next::l#7 render_next::l#1 ] ] with [ zp ZP_BYTE:24 [ render_screen_render#33 render_screen_render#69 ] ]
Coalescing zero page register [ zp ZP_BYTE:17 [ render_next::l#7 render_next::l#1 render_screen_render#33 render_screen_render#69 ] ] with [ zp ZP_BYTE:35 [ render_playfield::l#2 render_playfield::l#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:17 [ render_next::l#7 render_next::l#1 render_screen_render#33 render_screen_render#69 render_playfield::l#2 render_playfield::l#1 ] ] with [ zp ZP_BYTE:40 [ play_movement::return#2 play_movement::render#1 play_movement::return#0 play_movement::render#2 ] ]
Coalescing zero page register [ zp ZP_BYTE:17 [ render_next::l#7 render_next::l#1 render_screen_render#33 render_screen_render#69 render_playfield::l#2 render_playfield::l#1 play_movement::return#2 play_movement::render#1 play_movement::return#0 play_movement::render#2 ] ] with [ zp ZP_BYTE:78 [ play_remove_lines::removed#11 play_remove_lines::removed#8 play_remove_lines::removed#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:17 [ render_next::l#7 render_next::l#1 render_screen_render#33 render_screen_render#69 render_playfield::l#2 render_playfield::l#1 play_movement::return#2 play_movement::render#1 play_movement::return#0 play_movement::render#2 play_remove_lines::removed#11 play_remove_lines::removed#8 play_remove_lines::removed#1 ] ] with [ zp ZP_BYTE:85 [ play_lock_current::i#2 play_lock_current::i#3 play_lock_current::i#7 play_lock_current::i#9 ] ]
Coalescing zero page register [ zp ZP_BYTE:17 [ render_next::l#7 render_next::l#1 render_screen_render#33 render_screen_render#69 render_playfield::l#2 render_playfield::l#1 play_movement::return#2 play_movement::render#1 play_movement::return#0 play_movement::render#2 play_remove_lines::removed#11 play_remove_lines::removed#8 play_remove_lines::removed#1 play_lock_current::i#2 play_lock_current::i#3 play_lock_current::i#7 play_lock_current::i#9 ] ] with [ zp ZP_BYTE:88 [ keyboard_event_pressed::keycode#5 ] ]
Coalescing zero page register [ zp ZP_BYTE:17 [ render_next::l#7 render_next::l#1 render_screen_render#33 render_screen_render#69 render_playfield::l#2 render_playfield::l#1 play_movement::return#2 play_movement::render#1 play_movement::return#0 play_movement::render#2 play_remove_lines::removed#11 play_remove_lines::removed#8 play_remove_lines::removed#1 play_lock_current::i#2 play_lock_current::i#3 play_lock_current::i#7 play_lock_current::i#9 keyboard_event_pressed::keycode#5 ] ] with [ zp ZP_BYTE:90 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:25 [ current_xpos#59 current_xpos#130 current_xpos#131 ] ] with [ zp ZP_BYTE:36 [ render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:25 [ current_xpos#59 current_xpos#130 current_xpos#131 render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 ] ] with [ zp ZP_BYTE:42 [ play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 ] ]
Coalescing zero page register [ zp ZP_BYTE:25 [ current_xpos#59 current_xpos#130 current_xpos#131 render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 ] ] with [ zp ZP_BYTE:80 [ play_remove_lines::x#2 play_remove_lines::x#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:25 [ current_xpos#59 current_xpos#130 current_xpos#131 render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 play_remove_lines::x#2 play_remove_lines::x#1 ] ] with [ zp ZP_BYTE:86 [ play_lock_current::col#2 play_lock_current::col#0 play_lock_current::col#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:25 [ current_xpos#59 current_xpos#130 current_xpos#131 render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 play_remove_lines::x#2 play_remove_lines::x#1 play_lock_current::col#2 play_lock_current::col#0 play_lock_current::col#1 ] ] with [ zp ZP_BYTE:92 [ keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#15 keyboard_event_scan::keycode#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:25 [ current_xpos#59 current_xpos#130 current_xpos#131 render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 play_remove_lines::x#2 play_remove_lines::x#1 play_lock_current::col#2 play_lock_current::col#0 play_lock_current::col#1 keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#15 keyboard_event_scan::keycode#1 ] ] with [ zp ZP_BYTE:133 [ render_next::next_piece_char#0 ] ]
Coalescing zero page register [ zp ZP_BYTE:25 [ current_xpos#59 current_xpos#130 current_xpos#131 render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 play_remove_lines::x#2 play_remove_lines::x#1 play_lock_current::col#2 play_lock_current::col#0 play_lock_current::col#1 keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#15 keyboard_event_scan::keycode#1 render_next::next_piece_char#0 ] ] with [ zp ZP_BYTE:192 [ keyboard_event_pressed::row_bits#0 ] ]
Coalescing zero page register [ zp ZP_BYTE:28 [ current_piece_char#68 current_piece_char#108 current_piece_char#109 ] ] with [ zp ZP_BYTE:39 [ render_playfield::c#2 render_playfield::c#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:28 [ current_piece_char#68 current_piece_char#108 current_piece_char#109 render_playfield::c#2 render_playfield::c#1 ] ] with [ zp ZP_BYTE:46 [ play_collision::ypos#5 play_collision::ypos#0 play_collision::ypos#1 play_collision::ypos#2 play_collision::ypos#3 play_collision::ypos#4 play_collision::ypos2#2 play_collision::ypos2#0 play_collision::ypos2#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:28 [ current_piece_char#68 current_piece_char#108 current_piece_char#109 render_playfield::c#2 render_playfield::c#1 play_collision::ypos#5 play_collision::ypos#0 play_collision::ypos#1 play_collision::ypos#2 play_collision::ypos#3 play_collision::ypos#4 play_collision::ypos2#2 play_collision::ypos2#0 play_collision::ypos2#1 ] ] with [ zp ZP_BYTE:81 [ play_remove_lines::full#4 play_remove_lines::full#2 ] ]
Coalescing zero page register [ zp ZP_BYTE:28 [ current_piece_char#68 current_piece_char#108 current_piece_char#109 render_playfield::c#2 render_playfield::c#1 play_collision::ypos#5 play_collision::ypos#0 play_collision::ypos#1 play_collision::ypos#2 play_collision::ypos#3 play_collision::ypos#4 play_collision::ypos2#2 play_collision::ypos2#0 play_collision::ypos2#1 play_remove_lines::full#4 play_remove_lines::full#2 ] ] with [ zp ZP_BYTE:190 [ play_lock_current::i#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:28 [ current_piece_char#68 current_piece_char#108 current_piece_char#109 render_playfield::c#2 render_playfield::c#1 play_collision::ypos#5 play_collision::ypos#0 play_collision::ypos#1 play_collision::ypos#2 play_collision::ypos#3 play_collision::ypos#4 play_collision::ypos2#2 play_collision::ypos2#0 play_collision::ypos2#1 play_remove_lines::full#4 play_remove_lines::full#2 play_lock_current::i#1 ] ] with [ zp ZP_BYTE:197 [ keyboard_event_scan::row_scan#0 ] ]
Coalescing zero page register [ zp ZP_BYTE:29 [ render_moving::ypos2#2 render_moving::ypos2#0 render_moving::ypos2#1 ] ] with [ zp ZP_BYTE:47 [ play_collision::xpos#6 play_collision::xpos#0 play_collision::xpos#1 play_collision::xpos#2 play_collision::xpos#3 play_collision::xpos#4 ] ]
Coalescing zero page register [ zp ZP_BYTE:29 [ render_moving::ypos2#2 render_moving::ypos2#0 render_moving::ypos2#1 play_collision::xpos#6 play_collision::xpos#0 play_collision::xpos#1 play_collision::xpos#2 play_collision::xpos#3 play_collision::xpos#4 ] ] with [ zp ZP_BYTE:187 [ play_remove_lines::c#0 ] ]
Coalescing zero page register [ zp ZP_BYTE:30 [ render_moving::l#4 render_moving::l#1 ] ] with [ zp ZP_BYTE:49 [ play_collision::l#6 play_collision::l#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:31 [ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 ] ] with [ zp ZP_BYTE:50 [ play_collision::i#2 play_collision::i#3 play_collision::i#11 play_collision::i#13 ] ]
Coalescing zero page register [ zp ZP_BYTE:32 [ render_moving::xpos#2 render_moving::xpos#0 render_moving::xpos#1 ] ] with [ zp ZP_BYTE:51 [ play_collision::col#2 play_collision::col#9 play_collision::col#1 ] ]
Coalescing zero page register [ zp ZP_WORD:57 [ lines_bcd#26 lines_bcd#19 lines_bcd#15 lines_bcd#17 lines_bcd#30 ] ] with [ zp ZP_WORD:112 [ render_screen_original::screen#7 render_screen_original::screen#6 render_screen_original::screen#5 render_screen_original::screen#8 render_screen_original::screen#9 render_screen_original::screen#10 render_screen_original::screen#2 render_screen_original::screen#3 ] ]
Coalescing zero page register [ zp ZP_WORD:66 [ current_piece#28 current_piece#10 current_piece#15 current_piece#98 current_piece#106 ] ] with [ zp ZP_WORD:114 [ render_screen_original::cols#6 render_screen_original::cols#5 render_screen_original::cols#4 render_screen_original::cols#7 render_screen_original::cols#3 render_screen_original::cols#1 render_screen_original::cols#2 ] ]
Allocated (was zp ZP_WORD:9) zp ZP_WORD:7 [ render_bcd::offset#6 render_bcd::screen_pos#3 render_bcd::screen_pos#0 render_bcd::screen_pos#2 render_next::screen_next_area#5 render_next::screen_next_area#10 render_next::screen_next_area#4 render_next::screen_next_area#11 render_next::screen_next_area#3 render_init::li_2#2 render_init::li_2#1 render_screen_original::ocols#2 render_screen_original::ocols#4 render_screen_original::ocols#1 render_moving::screen_line#0 play_collision::playfield_line#0 ]
Allocated (was zp ZP_BYTE:17) zp ZP_BYTE:9 [ render_next::l#7 render_next::l#1 render_screen_render#33 render_screen_render#69 render_playfield::l#2 render_playfield::l#1 play_movement::return#2 play_movement::render#1 play_movement::return#0 play_movement::render#2 play_remove_lines::removed#11 play_remove_lines::removed#8 play_remove_lines::removed#1 play_lock_current::i#2 play_lock_current::i#3 play_lock_current::i#7 play_lock_current::i#9 keyboard_event_pressed::keycode#5 keyboard_event_scan::row#2 keyboard_event_scan::row#1 ]
Allocated (was zp ZP_BYTE:25) zp ZP_BYTE:10 [ current_xpos#59 current_xpos#130 current_xpos#131 render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 play_remove_lines::x#2 play_remove_lines::x#1 play_lock_current::col#2 play_lock_current::col#0 play_lock_current::col#1 keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#15 keyboard_event_scan::keycode#1 render_next::next_piece_char#0 keyboard_event_pressed::row_bits#0 ]
Allocated (was zp ZP_BYTE:28) zp ZP_BYTE:11 [ current_piece_char#68 current_piece_char#108 current_piece_char#109 render_playfield::c#2 render_playfield::c#1 play_collision::ypos#5 play_collision::ypos#0 play_collision::ypos#1 play_collision::ypos#2 play_collision::ypos#3 play_collision::ypos#4 play_collision::ypos2#2 play_collision::ypos2#0 play_collision::ypos2#1 play_remove_lines::full#4 play_remove_lines::full#2 play_lock_current::i#1 keyboard_event_scan::row_scan#0 ]
Allocated (was zp ZP_BYTE:29) zp ZP_BYTE:12 [ render_moving::ypos2#2 render_moving::ypos2#0 render_moving::ypos2#1 play_collision::xpos#6 play_collision::xpos#0 play_collision::xpos#1 play_collision::xpos#2 play_collision::xpos#3 play_collision::xpos#4 play_remove_lines::c#0 ]
Allocated (was zp ZP_BYTE:30) zp ZP_BYTE:13 [ render_moving::l#4 render_moving::l#1 play_collision::l#6 play_collision::l#1 ]
Allocated (was zp ZP_BYTE:31) zp ZP_BYTE:14 [ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 play_collision::i#2 play_collision::i#3 play_collision::i#11 play_collision::i#13 ]
Allocated (was zp ZP_BYTE:32) zp ZP_BYTE:15 [ render_moving::xpos#2 render_moving::xpos#0 render_moving::xpos#1 play_collision::col#2 play_collision::col#9 play_collision::col#1 ]
Allocated (was zp ZP_BYTE:56) zp ZP_BYTE:16 [ current_ypos#38 current_ypos#3 current_ypos#100 current_ypos#19 current_ypos#6 play_lock_current::ypos2#2 play_lock_current::ypos2#0 play_lock_current::ypos2#1 ]
Allocated (was zp ZP_WORD:57) zp ZP_WORD:17 [ lines_bcd#26 lines_bcd#19 lines_bcd#15 lines_bcd#17 lines_bcd#30 render_screen_original::screen#7 render_screen_original::screen#6 render_screen_original::screen#5 render_screen_original::screen#8 render_screen_original::screen#9 render_screen_original::screen#10 render_screen_original::screen#2 render_screen_original::screen#3 ]
Allocated (was zp ZP_DWORD:59) zp ZP_DWORD:19 [ score_bcd#26 score_bcd#18 score_bcd#14 score_bcd#16 score_bcd#30 ]
Allocated (was zp ZP_BYTE:63) zp ZP_BYTE:23 [ level#33 level#10 level#17 level#19 level#21 ]
Allocated (was zp ZP_BYTE:64) zp ZP_BYTE:24 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#21 current_movedown_slow#1 current_movedown_slow#23 current_movedown_slow#69 current_movedown_slow#10 ]
Allocated (was zp ZP_BYTE:65) zp ZP_BYTE:25 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#64 level_bcd#21 level_bcd#8 ]
Allocated (was zp ZP_WORD:66) zp ZP_WORD:26 [ current_piece#28 current_piece#10 current_piece#15 current_piece#98 current_piece#106 render_screen_original::cols#6 render_screen_original::cols#5 render_screen_original::cols#4 render_screen_original::cols#7 render_screen_original::cols#3 render_screen_original::cols#1 render_screen_original::cols#2 ]
Allocated (was zp ZP_BYTE:68) zp ZP_BYTE:28 [ current_piece_char#29 current_piece_char#10 current_piece_char#16 current_piece_char#5 ]
Allocated (was zp ZP_BYTE:69) zp ZP_BYTE:29 [ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ]
Allocated (was zp ZP_WORD:70) zp ZP_WORD:30 [ current_piece_gfx#35 current_piece_gfx#114 current_piece_gfx#18 current_piece_gfx#74 current_piece_gfx#20 current_piece_gfx#21 current_piece_gfx#7 ]
Allocated (was zp ZP_BYTE:72) zp ZP_BYTE:32 [ current_xpos#43 current_xpos#124 current_xpos#19 current_xpos#103 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ]
Allocated (was zp ZP_BYTE:74) zp ZP_BYTE:33 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#2 play_spawn_current::piece_idx#1 ]
Allocated (was zp ZP_BYTE:75) zp ZP_BYTE:34 [ game_over#65 game_over#27 game_over#10 game_over#15 game_over#52 ]
Allocated (was zp ZP_BYTE:93) zp ZP_BYTE:35 [ keyboard_events_size#10 keyboard_events_size#30 keyboard_events_size#19 keyboard_events_size#16 keyboard_events_size#13 keyboard_events_size#4 keyboard_events_size#29 keyboard_events_size#1 keyboard_events_size#2 ]
Allocated (was zp ZP_BYTE:117) zp ZP_BYTE:36 [ sprites_irq::raster_sprite_gfx_modify#0 ]
Allocated (was zp ZP_BYTE:118) zp ZP_BYTE:37 [ render_screen_showing#0 render_screen_showing#1 ]
Allocated (was zp ZP_BYTE:119) zp ZP_BYTE:38 [ irq_raster_next#0 irq_raster_next#4 irq_raster_next#1 irq_raster_next#2 irq_raster_next#3 ]
Allocated (was zp ZP_BYTE:120) zp ZP_BYTE:39 [ irq_sprite_ypos#0 irq_sprite_ypos#1 irq_sprite_ypos#2 irq_sprite_ypos#3 ]
Allocated (was zp ZP_BYTE:121) zp ZP_BYTE:40 [ irq_sprite_ptr#0 irq_sprite_ptr#1 irq_sprite_ptr#2 irq_sprite_ptr#3 ]
Allocated (was zp ZP_BYTE:122) zp ZP_BYTE:41 [ irq_cnt#0 irq_cnt#1 irq_cnt#2 ]
Allocated (was zp ZP_BYTE:125) zp ZP_BYTE:42 [ play_movement::key_event#0 ]
Allocated (was zp ZP_BYTE:158) zp ZP_BYTE:43 [ play_collision::i#1 ]
Allocated (was zp ZP_DWORD:179) zp ZP_DWORD:44 [ play_update_score::add_bcd#0 ]
Interrupt procedure sprites_irq clobbers AXCNZV
Removing interrupt register storage sty regy+1 in SEG1203 entry interrupt(HARDWARE_CLOBBER)
Removing interrupt register storage regy: in SEG1239 [574] return - exit interrupt(HARDWARE_CLOBBER)
Removing interrupt register storage ldy #00 in SEG1239 [574] return - exit interrupt(HARDWARE_CLOBBER)
ASSEMBLER BEFORE OPTIMIZATION
//SEG0 File Comments
// Tetris Game for the Commodore 64
// The tetris game tries to match NES tetris gameplay pretty closely
// Source: https://meatfighter.com/nintendotetrisai/
//SEG1 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(bbegin)
.pc = $80d "Program"
//SEG2 Global Constants & labels
// Processor port data direction register
.label PROCPORT_DDR = 0
// Mask for PROCESSOR_PORT_DDR which allows only memory configuration to be written
.const PROCPORT_DDR_MEMORY_MASK = 7
// Processor Port Register controlling RAM/ROM configuration and the datasette
.label PROCPORT = 1
// RAM in $A000, $E000 I/O in $D000
.const PROCPORT_RAM_IO = $35
// The offset of the sprite pointers from the screen start address
.const SPRITE_PTRS = $3f8
.label SPRITES_XPOS = $d000
.label SPRITES_YPOS = $d001
.label RASTER = $d012
.label SPRITES_ENABLE = $d015
.label SPRITES_EXPAND_Y = $d017
.label SPRITES_MC = $d01c
.label SPRITES_EXPAND_X = $d01d
.label BORDERCOL = $d020
.label BGCOL1 = $d021
.label BGCOL2 = $d022
.label BGCOL3 = $d023
.label BGCOL4 = $d024
.label SPRITES_COLS = $d027
.label VIC_CONTROL = $d011
.label D011 = $d011
.const VIC_ECM = $40
.const VIC_DEN = $10
.const VIC_RSEL = 8
.label D018 = $d018
// VIC II IRQ Status Register
.label IRQ_STATUS = $d019
// VIC II IRQ Enable Register
.label IRQ_ENABLE = $d01a
// Bits for the IRQ Status/Enable Registers
.const IRQ_RASTER = 1
// Color Ram
.label COLS = $d800
// CIA#1 Port A: keyboard matrix columns and joystick #2
.label CIA1_PORT_A = $dc00
// CIA#1 Port B: keyboard matrix rows and joystick #1.
.label CIA1_PORT_B = $dc01
// CIA#1 Interrupt Status & Control Register
.label CIA1_INTERRUPT = $dc0d
// Value that disables all CIA interrupts when stored to the CIA Interrupt registers
.const CIA_INTERRUPT_CLEAR = $7f
// CIA#2 Port A: Serial bus, RS-232, VIC memory bank
.label CIA2_PORT_A = $dd00
// CIA #2 Port A data direction register.
.label CIA2_PORT_A_DDR = $dd02
// The vector used when the HARDWARE serves IRQ interrupts
.label HARDWARE_IRQ = $fffe
// The colors of the C64
.const BLACK = 0
.const RED = 2
.const CYAN = 3
.const PURPLE = 4
.const GREEN = 5
.const BLUE = 6
.const ORANGE = 8
.const PINK = $a
.const DARK_GREY = $b
.const GREY = $c
.const LIGHT_GREEN = $d
.const LIGHT_BLUE = $e
.const KEY_Z = $c
.const KEY_LSHIFT = $f
.const KEY_X = $17
.const KEY_DOT = $2c
.const KEY_COMMA = $2f
.const KEY_RSHIFT = $34
.const KEY_CTRL = $3a
.const KEY_SPACE = $3c
.const KEY_COMMODORE = $3d
// SID registers for random number generation
.label SID_VOICE3_FREQ = $d40e
.label SID_VOICE3_CONTROL = $d412
.const SID_CONTROL_NOISE = $80
.label SID_VOICE3_OSC = $d41b
// Address of the first screen
.label PLAYFIELD_SCREEN_1 = $400
// Address of the second screen
.label PLAYFIELD_SCREEN_2 = $2c00
// Address of the original playscreen chars
.label PLAYFIELD_SCREEN_ORIGINAL = $1800
// Address of the original playscreen colors
.label PLAYFIELD_COLORS_ORIGINAL = $1c00
// Address of the sprites covering the playfield
.label PLAYFIELD_SPRITES = $2000
// Address of the charset
.label PLAYFIELD_CHARSET = $2800
// The size of the playfield
.const PLAYFIELD_LINES = $16
.const PLAYFIELD_COLS = $a
// The Y-position of the first sprite row
.const SPRITES_FIRST_YPOS = $31
// The rate of moving down the current piece fast (number of frames between moves if movedown is not forced)
.const current_movedown_fast = $a
// No collision
.const COLLISION_NONE = 0
// Playfield piece collision (cell on top of other cell on the playfield)
.const COLLISION_PLAYFIELD = 1
// Bottom collision (cell below bottom of the playfield)
.const COLLISION_BOTTOM = 2
// Left side collision (cell beyond the left side of the playfield)
.const COLLISION_LEFT = 4
// Right side collision (cell beyond the right side of the playfield)
.const COLLISION_RIGHT = 8
// Screen Sprite pointers on screen 1
.label PLAYFIELD_SPRITE_PTRS_1 = PLAYFIELD_SCREEN_1+SPRITE_PTRS
// Screen Sprite pointers on screen 2
.label PLAYFIELD_SPRITE_PTRS_2 = PLAYFIELD_SCREEN_2+SPRITE_PTRS
// The line of the first IRQ
.const IRQ_RASTER_FIRST = SPRITES_FIRST_YPOS+$13
.const toSpritePtr1_return = PLAYFIELD_SPRITES/$40
.label keyboard_events_size = $23
.label render_screen_showing = $25
.label irq_raster_next = $26
.label irq_sprite_ypos = $27
.label irq_sprite_ptr = $28
.label irq_cnt = $29
.label current_movedown_slow = $18
.label current_ypos = $10
.label current_xpos = $20
.label current_orientation = $1d
.label current_piece_gfx = $1e
.label current_piece_char = $1c
.label level_bcd = $19
.label current_piece = $1a
.label game_over = $22
.label next_piece_idx = $21
.label level = $17
.label render_screen_render = 3
.label render_screen_show = 2
.label current_movedown_counter = 4
.label lines_bcd = $11
.label score_bcd = $13
.label current_piece_17 = 5
.label render_screen_render_33 = 9
.label current_xpos_59 = $a
.label current_piece_gfx_64 = 5
.label current_piece_char_68 = $b
.label render_screen_render_69 = 9
.label current_xpos_130 = $a
.label current_xpos_131 = $a
.label current_piece_gfx_120 = 5
.label current_piece_gfx_121 = 5
.label current_piece_char_108 = $b
.label current_piece_char_109 = $b
.label current_piece_100 = 5
.label current_piece_101 = 5
.label current_piece_102 = 5
.label current_piece_103 = 5
.label current_piece_104 = 5
//SEG3 @begin
bbegin:
jmp b1
//SEG4 @1
b1:
//SEG5 [1] (byte) render_screen_showing#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- vbuz1=vbuc1
// The screen currently being showed to the user. $00 for screen 1 / $40 for screen 2.
lda #0
sta render_screen_showing
//SEG6 kickasm(location (const byte*) PLAYFIELD_CHARSET#0) {{ .fill 8,$00 // Place a filled char at the start of the charset .import binary "playfield-screen.imap" }}
//SEG7 kickasm(location (const byte*) PLAYFIELD_SCREEN_ORIGINAL#0) {{ // Load chars for the screen .var screen = LoadBinary("playfield-screen.iscr") // Load extended colors for the screen .var extended = LoadBinary("playfield-extended.col") // screen.get(i)+1 because the charset is loaded into PLAYFIELD_CHARSET+8 // extended.get(i)-1 because the extended colors are 1-based (1/2/3/4) // <<6 to move extended colors to the upper 2 bits .fill screen.getSize(), ( (screen.get(i)+1) | (extended.get(i)-1)<<6 ) }}
//SEG8 kickasm(location (const byte*) PLAYFIELD_COLORS_ORIGINAL#0) {{ .import binary "playfield-screen.col" }}
// Original Color Data
jmp b2
//SEG9 @2
b2:
//SEG10 kickasm(location (const byte*) PLAYFIELD_SPRITES#0) {{ .var sprites = LoadPicture("playfield-sprites.png", List().add($010101, $000000)) // Put the sprites into memory .for(var sy=0;sy<10;sy++) { .var sprite_gfx_y = sy*20 .for(var sx=0;sx<3;sx++) { .for (var y=0;y<21; y++) { .var gfx_y = sprite_gfx_y + mod(2100+y-sprite_gfx_y,21) .for (var c=0; c<3; c++) { .byte sprites.getSinglecolorByte(sx*3+c,gfx_y) } } .byte 0 } } }}
jmp b3
//SEG11 @3
b3:
//SEG12 [6] (byte) irq_raster_next#0 ← (const byte) IRQ_RASTER_FIRST#0 -- vbuz1=vbuc1
// The raster line of the next IRQ
lda #IRQ_RASTER_FIRST
sta irq_raster_next
//SEG13 [7] (byte) irq_sprite_ypos#0 ← (const byte) SPRITES_FIRST_YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) $15 -- vbuz1=vbuc1
// Y-pos of the sprites on the next IRQ
lda #SPRITES_FIRST_YPOS+$15
sta irq_sprite_ypos
//SEG14 [8] phi from @3 to toSpritePtr1 [phi:@3->toSpritePtr1]
toSpritePtr1_from_b3:
jmp toSpritePtr1
//SEG15 toSpritePtr1
toSpritePtr1:
jmp b5
//SEG16 @5
b5:
//SEG17 [9] (byte) irq_sprite_ptr#0 ← (const byte) toSpritePtr1_return#0+(byte/signed byte/word/signed word/dword/signed dword) 3 -- vbuz1=vbuc1
// Index of the sprites to show on the next IRQ
lda #toSpritePtr1_return+3
sta irq_sprite_ptr
//SEG18 [10] (byte) irq_cnt#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- vbuz1=vbuc1
// Counting the 10 IRQs
lda #0
sta irq_cnt
//SEG19 [11] phi from @5 to @4 [phi:@5->@4]
b4_from_b5:
jmp b4
//SEG20 @4
b4:
//SEG21 [12] call main
//SEG22 [14] phi from @4 to main [phi:@4->main]
main_from_b4:
jsr main
//SEG23 [13] phi from @4 to @end [phi:@4->@end]
bend_from_b4:
jmp bend
//SEG24 @end
bend:
//SEG25 main
main: {
//SEG26 [15] call sid_rnd_init
jsr sid_rnd_init
jmp b8
//SEG27 main::@8
b8:
//SEG28 asm { sei }
sei
//SEG29 [17] call render_init
//SEG30 [494] phi from main::@8 to render_init [phi:main::@8->render_init]
render_init_from_b8:
jsr render_init
//SEG31 [18] phi from main::@8 to main::@9 [phi:main::@8->main::@9]
b9_from_b8:
jmp b9
//SEG32 main::@9
b9:
//SEG33 [19] call sprites_init
jsr sprites_init
//SEG34 [20] phi from main::@9 to main::@10 [phi:main::@9->main::@10]
b10_from_b9:
jmp b10
//SEG35 main::@10
b10:
//SEG36 [21] call sprites_irq_init
jsr sprites_irq_init
//SEG37 [22] phi from main::@10 to main::@11 [phi:main::@10->main::@11]
b11_from_b10:
jmp b11
//SEG38 main::@11
b11:
//SEG39 [23] call play_init
//SEG40 [453] phi from main::@11 to play_init [phi:main::@11->play_init]
play_init_from_b11:
jsr play_init
//SEG41 [24] phi from main::@11 to main::@12 [phi:main::@11->main::@12]
b12_from_b11:
jmp b12
//SEG42 main::@12
b12:
//SEG43 [25] call play_spawn_current
//SEG44 [283] phi from main::@12 to play_spawn_current [phi:main::@12->play_spawn_current]
play_spawn_current_from_b12:
//SEG45 [283] phi (byte) game_over#65 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@12->play_spawn_current#0] -- vbuz1=vbuc1
lda #0
sta game_over
//SEG46 [283] phi (byte) next_piece_idx#17 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@12->play_spawn_current#1] -- vbuz1=vbuc1
lda #0
sta next_piece_idx
jsr play_spawn_current
//SEG47 [26] phi from main::@12 to main::@13 [phi:main::@12->main::@13]
b13_from_b12:
jmp b13
//SEG48 main::@13
b13:
//SEG49 [27] call play_spawn_current
//SEG50 [283] phi from main::@13 to play_spawn_current [phi:main::@13->play_spawn_current]
play_spawn_current_from_b13:
//SEG51 [283] phi (byte) game_over#65 = (byte) game_over#52 [phi:main::@13->play_spawn_current#0] -- register_copy
//SEG52 [283] phi (byte) next_piece_idx#17 = (byte) play_spawn_current::piece_idx#2 [phi:main::@13->play_spawn_current#1] -- register_copy
jsr play_spawn_current
//SEG53 [28] phi from main::@13 to main::@14 [phi:main::@13->main::@14]
b14_from_b13:
jmp b14
//SEG54 main::@14
b14:
//SEG55 [29] call render_playfield
//SEG56 [149] phi from main::@14 to render_playfield [phi:main::@14->render_playfield]
render_playfield_from_b14:
//SEG57 [149] phi (byte) render_screen_render#22 = (byte/signed byte/word/signed word/dword/signed dword) $40 [phi:main::@14->render_playfield#0] -- vbuxx=vbuc1
ldx #$40
jsr render_playfield
jmp b15
//SEG58 main::@15
b15:
//SEG59 [30] (byte~) current_ypos#106 ← (byte) current_ypos#6 -- vbuxx=vbuz1
ldx current_ypos
//SEG60 [31] (byte~) current_xpos#130 ← (byte) current_xpos#103 -- vbuz1=vbuz2
lda current_xpos
sta current_xpos_130
//SEG61 [32] (byte*~) current_piece_gfx#120 ← (byte*) current_piece_gfx#74 -- pbuz1=pbuz2
lda current_piece_gfx
sta current_piece_gfx_120
lda current_piece_gfx+1
sta current_piece_gfx_120+1
//SEG62 [33] (byte~) current_piece_char#108 ← (byte) current_piece_char#5 -- vbuz1=vbuz2
lda current_piece_char
sta current_piece_char_108
//SEG63 [34] call render_moving
//SEG64 [128] phi from main::@15 to render_moving [phi:main::@15->render_moving]
render_moving_from_b15:
//SEG65 [128] phi (byte) current_piece_char#68 = (byte~) current_piece_char#108 [phi:main::@15->render_moving#0] -- register_copy
//SEG66 [128] phi (byte*) current_piece_gfx#64 = (byte*~) current_piece_gfx#120 [phi:main::@15->render_moving#1] -- register_copy
//SEG67 [128] phi (byte) current_xpos#59 = (byte~) current_xpos#130 [phi:main::@15->render_moving#2] -- register_copy
//SEG68 [128] phi (byte) render_screen_render#33 = (byte/signed byte/word/signed word/dword/signed dword) $40 [phi:main::@15->render_moving#3] -- vbuz1=vbuc1
lda #$40
sta render_screen_render_33
//SEG69 [128] phi (byte) current_ypos#13 = (byte~) current_ypos#106 [phi:main::@15->render_moving#4] -- register_copy
jsr render_moving
jmp b16
//SEG70 main::@16
b16:
//SEG71 [35] (byte~) next_piece_idx#84 ← (byte) play_spawn_current::piece_idx#2 -- vbuxx=vbuz1
ldx play_spawn_current.piece_idx
//SEG72 [36] call render_next
//SEG73 [107] phi from main::@16 to render_next [phi:main::@16->render_next]
render_next_from_b16:
//SEG74 [107] phi (byte) next_piece_idx#12 = (byte~) next_piece_idx#84 [phi:main::@16->render_next#0] -- register_copy
//SEG75 [107] phi (byte) render_screen_render#15 = (byte/signed byte/word/signed word/dword/signed dword) $40 [phi:main::@16->render_next#1] -- vbuaa=vbuc1
lda #$40
jsr render_next
//SEG76 [37] (byte*~) current_piece#98 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$0) -- pbuz1=pptc1_derefidx_vbuz2
ldy play_spawn_current._0
lda PIECES,y
sta current_piece
lda PIECES+1,y
sta current_piece+1
//SEG77 [38] phi from main::@16 to main::@1 [phi:main::@16->main::@1]
b1_from_b16:
//SEG78 [38] phi (byte) level_bcd#11 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@16->main::@1#0] -- vbuz1=vbuc1
lda #0
sta level_bcd
//SEG79 [38] phi (byte) level#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@16->main::@1#1] -- vbuz1=vbuc1
lda #0
sta level
//SEG80 [38] phi (dword) score_bcd#18 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@16->main::@1#2] -- vduz1=vbuc1
lda #0
sta score_bcd
lda #0
sta score_bcd+1
sta score_bcd+2
sta score_bcd+3
//SEG81 [38] phi (word) lines_bcd#19 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@16->main::@1#3] -- vwuz1=vbuc1
lda #0
sta lines_bcd
lda #0
sta lines_bcd+1
//SEG82 [38] phi (byte) current_movedown_counter#16 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@16->main::@1#4] -- vbuz1=vbuc1
lda #0
sta current_movedown_counter
//SEG83 [38] phi (byte) keyboard_events_size#19 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@16->main::@1#5] -- vbuz1=vbuc1
lda #0
sta keyboard_events_size
//SEG84 [38] phi (byte) next_piece_idx#10 = (byte) play_spawn_current::piece_idx#2 [phi:main::@16->main::@1#6] -- register_copy
//SEG85 [38] phi (byte) game_over#10 = (byte) game_over#52 [phi:main::@16->main::@1#7] -- register_copy
//SEG86 [38] phi (byte) current_ypos#100 = (byte) current_ypos#6 [phi:main::@16->main::@1#8] -- register_copy
//SEG87 [38] phi (byte) current_xpos#124 = (byte) current_xpos#103 [phi:main::@16->main::@1#9] -- register_copy
//SEG88 [38] phi (byte*) current_piece_gfx#114 = (byte*) current_piece_gfx#74 [phi:main::@16->main::@1#10] -- register_copy
//SEG89 [38] phi (byte) current_orientation#13 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@16->main::@1#11] -- vbuz1=vbuc1
lda #0
sta current_orientation
//SEG90 [38] phi (byte) current_piece_char#10 = (byte) current_piece_char#5 [phi:main::@16->main::@1#12] -- register_copy
//SEG91 [38] phi (byte*) current_piece#10 = (byte*~) current_piece#98 [phi:main::@16->main::@1#13] -- register_copy
//SEG92 [38] phi (byte) current_movedown_slow#14 = (byte) current_movedown_slow#1 [phi:main::@16->main::@1#14] -- register_copy
//SEG93 [38] phi (byte) render_screen_render#18 = (byte/signed byte/word/signed word/dword/signed dword) $40 [phi:main::@16->main::@1#15] -- vbuz1=vbuc1
lda #$40
sta render_screen_render
//SEG94 [38] phi (byte) render_screen_show#16 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@16->main::@1#16] -- vbuz1=vbuc1
lda #0
sta render_screen_show
jmp b1
//SEG95 [38] phi from main::@6 to main::@1 [phi:main::@6->main::@1]
b1_from_b6:
//SEG96 [38] phi (byte) level_bcd#11 = (byte) level_bcd#17 [phi:main::@6->main::@1#0] -- register_copy
//SEG97 [38] phi (byte) level#10 = (byte) level#17 [phi:main::@6->main::@1#1] -- register_copy
//SEG98 [38] phi (dword) score_bcd#18 = (dword) score_bcd#14 [phi:main::@6->main::@1#2] -- register_copy
//SEG99 [38] phi (word) lines_bcd#19 = (word) lines_bcd#15 [phi:main::@6->main::@1#3] -- register_copy
//SEG100 [38] phi (byte) current_movedown_counter#16 = (byte) current_movedown_counter#14 [phi:main::@6->main::@1#4] -- register_copy
//SEG101 [38] phi (byte) keyboard_events_size#19 = (byte) keyboard_events_size#16 [phi:main::@6->main::@1#5] -- register_copy
//SEG102 [38] phi (byte) next_piece_idx#10 = (byte) next_piece_idx#16 [phi:main::@6->main::@1#6] -- register_copy
//SEG103 [38] phi (byte) game_over#10 = (byte) game_over#15 [phi:main::@6->main::@1#7] -- register_copy
//SEG104 [38] phi (byte) current_ypos#100 = (byte) current_ypos#19 [phi:main::@6->main::@1#8] -- register_copy
//SEG105 [38] phi (byte) current_xpos#124 = (byte) current_xpos#19 [phi:main::@6->main::@1#9] -- register_copy
//SEG106 [38] phi (byte*) current_piece_gfx#114 = (byte*) current_piece_gfx#18 [phi:main::@6->main::@1#10] -- register_copy
//SEG107 [38] phi (byte) current_orientation#13 = (byte) current_orientation#17 [phi:main::@6->main::@1#11] -- register_copy
//SEG108 [38] phi (byte) current_piece_char#10 = (byte) current_piece_char#16 [phi:main::@6->main::@1#12] -- register_copy
//SEG109 [38] phi (byte*) current_piece#10 = (byte*) current_piece#15 [phi:main::@6->main::@1#13] -- register_copy
//SEG110 [38] phi (byte) current_movedown_slow#14 = (byte) current_movedown_slow#21 [phi:main::@6->main::@1#14] -- register_copy
jmp b1
//SEG111 main::@1
b1:
jmp b2
// Wait for a frame to pass
//SEG112 main::@2
b2:
//SEG113 [39] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) $ff) goto main::@2 -- _deref_pbuc1_neq_vbuc2_then_la1
lda #$ff
cmp RASTER
bne b2
//SEG114 [40] phi from main::@2 to main::@3 [phi:main::@2->main::@3]
b3_from_b2:
jmp b3
//SEG115 main::@3
b3:
//SEG116 [41] call render_show
jsr render_show
//SEG117 [42] phi from main::@3 to main::@17 [phi:main::@3->main::@17]
b17_from_b3:
jmp b17
//SEG118 main::@17
b17:
//SEG119 [43] call keyboard_event_scan
//SEG120 [388] phi from main::@17 to keyboard_event_scan [phi:main::@17->keyboard_event_scan]
keyboard_event_scan_from_b17:
jsr keyboard_event_scan
//SEG121 [44] phi from main::@17 to main::@18 [phi:main::@17->main::@18]
b18_from_b17:
jmp b18
//SEG122 main::@18
b18:
//SEG123 [45] call keyboard_event_get
jsr keyboard_event_get
//SEG124 [46] (byte) keyboard_event_get::return#3 ← (byte) keyboard_event_get::return#2
jmp b19
//SEG125 main::@19
b19:
//SEG126 [47] (byte) main::key_event#0 ← (byte) keyboard_event_get::return#3
//SEG127 [48] if((byte) game_over#10==(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@4 -- vbuz1_eq_0_then_la1
lda game_over
cmp #0
beq b4
jmp b5
//SEG128 main::@5
b5:
//SEG129 [49] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_inc__deref_pbuc1
inc BORDERCOL
jmp b5
//SEG130 main::@4
b4:
//SEG131 [50] (byte) play_movement::key_event#0 ← (byte) main::key_event#0 -- vbuz1=vbuxx
stx play_movement.key_event
//SEG132 [51] call play_movement
jsr play_movement
//SEG133 [52] (byte) play_movement::return#3 ← (byte) play_movement::return#2 -- vbuaa=vbuz1
lda play_movement.return
jmp b20
//SEG134 main::@20
b20:
//SEG135 [53] (byte) main::render#1 ← (byte) play_movement::return#3
jmp b6
//SEG136 main::@6
b6:
//SEG137 [54] if((byte) main::render#1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@1 -- vbuaa_eq_0_then_la1
cmp #0
beq b1_from_b6
jmp b7
//SEG138 main::@7
b7:
//SEG139 [55] (byte~) render_screen_render#70 ← (byte) render_screen_render#18 -- vbuxx=vbuz1
ldx render_screen_render
//SEG140 [56] call render_playfield
//SEG141 [149] phi from main::@7 to render_playfield [phi:main::@7->render_playfield]
render_playfield_from_b7:
//SEG142 [149] phi (byte) render_screen_render#22 = (byte~) render_screen_render#70 [phi:main::@7->render_playfield#0] -- register_copy
jsr render_playfield
jmp b21
//SEG143 main::@21
b21:
//SEG144 [57] (byte~) current_ypos#107 ← (byte) current_ypos#19 -- vbuxx=vbuz1
ldx current_ypos
//SEG145 [58] (byte~) render_screen_render#69 ← (byte) render_screen_render#18 -- vbuz1=vbuz2
lda render_screen_render
sta render_screen_render_69
//SEG146 [59] (byte~) current_xpos#131 ← (byte) current_xpos#19 -- vbuz1=vbuz2
lda current_xpos
sta current_xpos_131
//SEG147 [60] (byte*~) current_piece_gfx#121 ← (byte*) current_piece_gfx#18 -- pbuz1=pbuz2
lda current_piece_gfx
sta current_piece_gfx_121
lda current_piece_gfx+1
sta current_piece_gfx_121+1
//SEG148 [61] (byte~) current_piece_char#109 ← (byte) current_piece_char#16 -- vbuz1=vbuz2
lda current_piece_char
sta current_piece_char_109
//SEG149 [62] call render_moving
//SEG150 [128] phi from main::@21 to render_moving [phi:main::@21->render_moving]
render_moving_from_b21:
//SEG151 [128] phi (byte) current_piece_char#68 = (byte~) current_piece_char#109 [phi:main::@21->render_moving#0] -- register_copy
//SEG152 [128] phi (byte*) current_piece_gfx#64 = (byte*~) current_piece_gfx#121 [phi:main::@21->render_moving#1] -- register_copy
//SEG153 [128] phi (byte) current_xpos#59 = (byte~) current_xpos#131 [phi:main::@21->render_moving#2] -- register_copy
//SEG154 [128] phi (byte) render_screen_render#33 = (byte~) render_screen_render#69 [phi:main::@21->render_moving#3] -- register_copy
//SEG155 [128] phi (byte) current_ypos#13 = (byte~) current_ypos#107 [phi:main::@21->render_moving#4] -- register_copy
jsr render_moving
jmp b22
//SEG156 main::@22
b22:
//SEG157 [63] (byte~) render_screen_render#68 ← (byte) render_screen_render#18 -- vbuaa=vbuz1
lda render_screen_render
//SEG158 [64] (byte~) next_piece_idx#85 ← (byte) next_piece_idx#16 -- vbuxx=vbuz1
ldx next_piece_idx
//SEG159 [65] call render_next
//SEG160 [107] phi from main::@22 to render_next [phi:main::@22->render_next]
render_next_from_b22:
//SEG161 [107] phi (byte) next_piece_idx#12 = (byte~) next_piece_idx#85 [phi:main::@22->render_next#0] -- register_copy
//SEG162 [107] phi (byte) render_screen_render#15 = (byte~) render_screen_render#68 [phi:main::@22->render_next#1] -- register_copy
jsr render_next
//SEG163 [66] phi from main::@22 to main::@23 [phi:main::@22->main::@23]
b23_from_b22:
jmp b23
//SEG164 main::@23
b23:
//SEG165 [67] call render_score
jsr render_score
//SEG166 [68] phi from main::@23 to main::@24 [phi:main::@23->main::@24]
b24_from_b23:
jmp b24
//SEG167 main::@24
b24:
//SEG168 [69] call render_screen_swap
jsr render_screen_swap
//SEG169 [38] phi from main::@24 to main::@1 [phi:main::@24->main::@1]
b1_from_b24:
//SEG170 [38] phi (byte) level_bcd#11 = (byte) level_bcd#17 [phi:main::@24->main::@1#0] -- register_copy
//SEG171 [38] phi (byte) level#10 = (byte) level#17 [phi:main::@24->main::@1#1] -- register_copy
//SEG172 [38] phi (dword) score_bcd#18 = (dword) score_bcd#14 [phi:main::@24->main::@1#2] -- register_copy
//SEG173 [38] phi (word) lines_bcd#19 = (word) lines_bcd#15 [phi:main::@24->main::@1#3] -- register_copy
//SEG174 [38] phi (byte) current_movedown_counter#16 = (byte) current_movedown_counter#14 [phi:main::@24->main::@1#4] -- register_copy
//SEG175 [38] phi (byte) keyboard_events_size#19 = (byte) keyboard_events_size#16 [phi:main::@24->main::@1#5] -- register_copy
//SEG176 [38] phi (byte) next_piece_idx#10 = (byte) next_piece_idx#16 [phi:main::@24->main::@1#6] -- register_copy
//SEG177 [38] phi (byte) game_over#10 = (byte) game_over#15 [phi:main::@24->main::@1#7] -- register_copy
//SEG178 [38] phi (byte) current_ypos#100 = (byte) current_ypos#19 [phi:main::@24->main::@1#8] -- register_copy
//SEG179 [38] phi (byte) current_xpos#124 = (byte) current_xpos#19 [phi:main::@24->main::@1#9] -- register_copy
//SEG180 [38] phi (byte*) current_piece_gfx#114 = (byte*) current_piece_gfx#18 [phi:main::@24->main::@1#10] -- register_copy
//SEG181 [38] phi (byte) current_orientation#13 = (byte) current_orientation#17 [phi:main::@24->main::@1#11] -- register_copy
//SEG182 [38] phi (byte) current_piece_char#10 = (byte) current_piece_char#16 [phi:main::@24->main::@1#12] -- register_copy
//SEG183 [38] phi (byte*) current_piece#10 = (byte*) current_piece#15 [phi:main::@24->main::@1#13] -- register_copy
//SEG184 [38] phi (byte) current_movedown_slow#14 = (byte) current_movedown_slow#21 [phi:main::@24->main::@1#14] -- register_copy
//SEG185 [38] phi (byte) render_screen_render#18 = (byte) render_screen_render#11 [phi:main::@24->main::@1#15] -- register_copy
//SEG186 [38] phi (byte) render_screen_show#16 = (byte) render_screen_show#13 [phi:main::@24->main::@1#16] -- register_copy
jmp b1
}
//SEG187 render_screen_swap
// Swap rendering to the other screen (used for double buffering)
render_screen_swap: {
//SEG188 [70] (byte) render_screen_render#11 ← (byte) render_screen_render#18 ^ (byte/signed byte/word/signed word/dword/signed dword) $40 -- vbuz1=vbuz1_bxor_vbuc1
lda #$40
eor render_screen_render
sta render_screen_render
//SEG189 [71] (byte) render_screen_show#13 ← (byte) render_screen_show#16 ^ (byte/signed byte/word/signed word/dword/signed dword) $40 -- vbuz1=vbuz1_bxor_vbuc1
lda #$40
eor render_screen_show
sta render_screen_show
jmp breturn
//SEG190 render_screen_swap::@return
breturn:
//SEG191 [72] return
rts
}
//SEG192 render_score
// Show the current score
render_score: {
.label score_bytes = score_bcd
.const score_offset = $28*5+$1c
.const lines_offset = $28*1+$16
.const level_offset = $28*$13+$1f
.label screen = 5
//SEG193 [73] if((byte) render_screen_render#18==(byte/signed byte/word/signed word/dword/signed dword) 0) goto render_score::@1 -- vbuz1_eq_0_then_la1
lda render_screen_render
cmp #0
beq b1_from_render_score
//SEG194 [74] phi from render_score to render_score::@2 [phi:render_score->render_score::@2]
b2_from_render_score:
jmp b2
//SEG195 render_score::@2
b2:
//SEG196 [75] phi from render_score::@2 to render_score::@1 [phi:render_score::@2->render_score::@1]
b1_from_b2:
//SEG197 [75] phi (byte*) render_score::screen#3 = (const byte*) PLAYFIELD_SCREEN_2#0 [phi:render_score::@2->render_score::@1#0] -- pbuz1=pbuc1
lda #<PLAYFIELD_SCREEN_2
sta screen
lda #>PLAYFIELD_SCREEN_2
sta screen+1
jmp b1
//SEG198 [75] phi from render_score to render_score::@1 [phi:render_score->render_score::@1]
b1_from_render_score:
//SEG199 [75] phi (byte*) render_score::screen#3 = (const byte*) PLAYFIELD_SCREEN_1#0 [phi:render_score->render_score::@1#0] -- pbuz1=pbuc1
lda #<PLAYFIELD_SCREEN_1
sta screen
lda #>PLAYFIELD_SCREEN_1
sta screen+1
jmp b1
//SEG200 render_score::@1
b1:
//SEG201 [76] (byte*) render_bcd::screen#0 ← (byte*) render_score::screen#3
//SEG202 [77] (byte) render_bcd::bcd#0 ← *((const byte*) render_score::score_bytes#0+(byte/signed byte/word/signed word/dword/signed dword) 2) -- vbuxx=_deref_pbuc1
ldx score_bytes+2
//SEG203 [78] call render_bcd
//SEG204 [95] phi from render_score::@1 to render_bcd [phi:render_score::@1->render_bcd]
render_bcd_from_b1:
//SEG205 [95] phi (byte) render_bcd::bcd#6 = (byte) render_bcd::bcd#0 [phi:render_score::@1->render_bcd#0] -- register_copy
//SEG206 [95] phi (byte) render_bcd::only_low#6 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render_score::@1->render_bcd#1] -- vbuyy=vbuc1
ldy #0
//SEG207 [95] phi (word) render_bcd::offset#6 = (const word) render_score::score_offset#0 [phi:render_score::@1->render_bcd#2] -- vwuz1=vwuc1
lda #<score_offset
sta render_bcd.offset
lda #>score_offset
sta render_bcd.offset+1
//SEG208 [95] phi (byte*) render_bcd::screen#6 = (byte*) render_bcd::screen#0 [phi:render_score::@1->render_bcd#3] -- register_copy
jsr render_bcd
jmp b3
//SEG209 render_score::@3
b3:
//SEG210 [79] (byte*) render_bcd::screen#1 ← (byte*) render_score::screen#3
//SEG211 [80] (byte) render_bcd::bcd#1 ← *((const byte*) render_score::score_bytes#0+(byte/signed byte/word/signed word/dword/signed dword) 1) -- vbuxx=_deref_pbuc1
ldx score_bytes+1
//SEG212 [81] call render_bcd
//SEG213 [95] phi from render_score::@3 to render_bcd [phi:render_score::@3->render_bcd]
render_bcd_from_b3:
//SEG214 [95] phi (byte) render_bcd::bcd#6 = (byte) render_bcd::bcd#1 [phi:render_score::@3->render_bcd#0] -- register_copy
//SEG215 [95] phi (byte) render_bcd::only_low#6 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render_score::@3->render_bcd#1] -- vbuyy=vbuc1
ldy #0
//SEG216 [95] phi (word) render_bcd::offset#6 = (const word) render_score::score_offset#0+(byte/signed byte/word/signed word/dword/signed dword) 2 [phi:render_score::@3->render_bcd#2] -- vwuz1=vbuc1
lda #score_offset+2
sta render_bcd.offset
lda #0
sta render_bcd.offset+1
//SEG217 [95] phi (byte*) render_bcd::screen#6 = (byte*) render_bcd::screen#1 [phi:render_score::@3->render_bcd#3] -- register_copy
jsr render_bcd
jmp b4
//SEG218 render_score::@4
b4:
//SEG219 [82] (byte*) render_bcd::screen#2 ← (byte*) render_score::screen#3
//SEG220 [83] (byte) render_bcd::bcd#2 ← *((const byte*) render_score::score_bytes#0) -- vbuxx=_deref_pbuc1
ldx score_bytes
//SEG221 [84] call render_bcd
//SEG222 [95] phi from render_score::@4 to render_bcd [phi:render_score::@4->render_bcd]
render_bcd_from_b4:
//SEG223 [95] phi (byte) render_bcd::bcd#6 = (byte) render_bcd::bcd#2 [phi:render_score::@4->render_bcd#0] -- register_copy
//SEG224 [95] phi (byte) render_bcd::only_low#6 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render_score::@4->render_bcd#1] -- vbuyy=vbuc1
ldy #0
//SEG225 [95] phi (word) render_bcd::offset#6 = (const word) render_score::score_offset#0+(byte/signed byte/word/signed word/dword/signed dword) 4 [phi:render_score::@4->render_bcd#2] -- vwuz1=vbuc1
lda #score_offset+4
sta render_bcd.offset
lda #0
sta render_bcd.offset+1
//SEG226 [95] phi (byte*) render_bcd::screen#6 = (byte*) render_bcd::screen#2 [phi:render_score::@4->render_bcd#3] -- register_copy
jsr render_bcd
jmp b5
//SEG227 render_score::@5
b5:
//SEG228 [85] (byte) render_bcd::bcd#3 ← > (word) lines_bcd#15 -- vbuxx=_hi_vwuz1
lda lines_bcd+1
tax
//SEG229 [86] (byte*) render_bcd::screen#3 ← (byte*) render_score::screen#3
//SEG230 [87] call render_bcd
//SEG231 [95] phi from render_score::@5 to render_bcd [phi:render_score::@5->render_bcd]
render_bcd_from_b5:
//SEG232 [95] phi (byte) render_bcd::bcd#6 = (byte) render_bcd::bcd#3 [phi:render_score::@5->render_bcd#0] -- register_copy
//SEG233 [95] phi (byte) render_bcd::only_low#6 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:render_score::@5->render_bcd#1] -- vbuyy=vbuc1
ldy #1
//SEG234 [95] phi (word) render_bcd::offset#6 = (const word) render_score::lines_offset#0 [phi:render_score::@5->render_bcd#2] -- vwuz1=vwuc1
lda #<lines_offset
sta render_bcd.offset
lda #>lines_offset
sta render_bcd.offset+1
//SEG235 [95] phi (byte*) render_bcd::screen#6 = (byte*) render_bcd::screen#3 [phi:render_score::@5->render_bcd#3] -- register_copy
jsr render_bcd
jmp b6
//SEG236 render_score::@6
b6:
//SEG237 [88] (byte) render_bcd::bcd#4 ← < (word) lines_bcd#15 -- vbuxx=_lo_vwuz1
lda lines_bcd
tax
//SEG238 [89] (byte*) render_bcd::screen#4 ← (byte*) render_score::screen#3
//SEG239 [90] call render_bcd
//SEG240 [95] phi from render_score::@6 to render_bcd [phi:render_score::@6->render_bcd]
render_bcd_from_b6:
//SEG241 [95] phi (byte) render_bcd::bcd#6 = (byte) render_bcd::bcd#4 [phi:render_score::@6->render_bcd#0] -- register_copy
//SEG242 [95] phi (byte) render_bcd::only_low#6 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render_score::@6->render_bcd#1] -- vbuyy=vbuc1
ldy #0
//SEG243 [95] phi (word) render_bcd::offset#6 = (const word) render_score::lines_offset#0+(byte/signed byte/word/signed word/dword/signed dword) 1 [phi:render_score::@6->render_bcd#2] -- vwuz1=vbuc1
lda #lines_offset+1
sta render_bcd.offset
lda #0
sta render_bcd.offset+1
//SEG244 [95] phi (byte*) render_bcd::screen#6 = (byte*) render_bcd::screen#4 [phi:render_score::@6->render_bcd#3] -- register_copy
jsr render_bcd
jmp b7
//SEG245 render_score::@7
b7:
//SEG246 [91] (byte*) render_bcd::screen#5 ← (byte*) render_score::screen#3
//SEG247 [92] (byte) render_bcd::bcd#5 ← (byte) level_bcd#17 -- vbuxx=vbuz1
ldx level_bcd
//SEG248 [93] call render_bcd
//SEG249 [95] phi from render_score::@7 to render_bcd [phi:render_score::@7->render_bcd]
render_bcd_from_b7:
//SEG250 [95] phi (byte) render_bcd::bcd#6 = (byte) render_bcd::bcd#5 [phi:render_score::@7->render_bcd#0] -- register_copy
//SEG251 [95] phi (byte) render_bcd::only_low#6 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render_score::@7->render_bcd#1] -- vbuyy=vbuc1
ldy #0
//SEG252 [95] phi (word) render_bcd::offset#6 = (const word) render_score::level_offset#0 [phi:render_score::@7->render_bcd#2] -- vwuz1=vwuc1
lda #<level_offset
sta render_bcd.offset
lda #>level_offset
sta render_bcd.offset+1
//SEG253 [95] phi (byte*) render_bcd::screen#6 = (byte*) render_bcd::screen#5 [phi:render_score::@7->render_bcd#3] -- register_copy
jsr render_bcd
jmp breturn
//SEG254 render_score::@return
breturn:
//SEG255 [94] return
rts
}
//SEG256 render_bcd
// Render BCD digits on a screen.
// - screen: pointer to the screen to render on
// - offset: offset on the screen
// - bcd: The BCD-value to render
// - only_low: if non-zero only renders the low digit
// render_bcd(byte* zeropage(5) screen, word zeropage(7) offset, byte register(X) bcd, byte register(Y) only_low)
render_bcd: {
.const ZERO_CHAR = $35
.label screen = 5
.label screen_pos = 7
.label offset = 7
//SEG257 [96] (byte*) render_bcd::screen_pos#0 ← (byte*) render_bcd::screen#6 + (word) render_bcd::offset#6 -- pbuz1=pbuz2_plus_vwuz1
lda screen_pos
clc
adc screen
sta screen_pos
lda screen_pos+1
adc screen+1
sta screen_pos+1
//SEG258 [97] if((byte) render_bcd::only_low#6!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto render_bcd::@1 -- vbuyy_neq_0_then_la1
cpy #0
bne b1_from_render_bcd
jmp b2
//SEG259 render_bcd::@2
b2:
//SEG260 [98] (byte~) render_bcd::$5 ← (byte) render_bcd::bcd#6 >> (byte/signed byte/word/signed word/dword/signed dword) 4 -- vbuaa=vbuxx_ror_4
txa
lsr
lsr
lsr
lsr
//SEG261 [99] (byte~) render_bcd::$6 ← (const byte) render_bcd::ZERO_CHAR#0 + (byte~) render_bcd::$5 -- vbuaa=vbuc1_plus_vbuaa
clc
adc #ZERO_CHAR
//SEG262 [100] *((byte*) render_bcd::screen_pos#0) ← (byte~) render_bcd::$6 -- _deref_pbuz1=vbuaa
ldy #0
sta (screen_pos),y
//SEG263 [101] (byte*) render_bcd::screen_pos#2 ← ++ (byte*) render_bcd::screen_pos#0 -- pbuz1=_inc_pbuz1
inc screen_pos
bne !+
inc screen_pos+1
!:
//SEG264 [102] phi from render_bcd render_bcd::@2 to render_bcd::@1 [phi:render_bcd/render_bcd::@2->render_bcd::@1]
b1_from_render_bcd:
b1_from_b2:
//SEG265 [102] phi (byte*) render_bcd::screen_pos#3 = (byte*) render_bcd::screen_pos#0 [phi:render_bcd/render_bcd::@2->render_bcd::@1#0] -- register_copy
jmp b1
//SEG266 render_bcd::@1
b1:
//SEG267 [103] (byte~) render_bcd::$3 ← (byte) render_bcd::bcd#6 & (byte/signed byte/word/signed word/dword/signed dword) $f -- vbuaa=vbuxx_band_vbuc1
txa
and #$f
//SEG268 [104] (byte~) render_bcd::$4 ← (const byte) render_bcd::ZERO_CHAR#0 + (byte~) render_bcd::$3 -- vbuaa=vbuc1_plus_vbuaa
clc
adc #ZERO_CHAR
//SEG269 [105] *((byte*) render_bcd::screen_pos#3) ← (byte~) render_bcd::$4 -- _deref_pbuz1=vbuaa
ldy #0
sta (screen_pos),y
jmp breturn
//SEG270 render_bcd::@return
breturn:
//SEG271 [106] return
rts
}
//SEG272 render_next
// Render the next tetromino in the "next" area
render_next: {
.const next_area_offset = $28*$c+$18+4
.label next_piece_char = $a
.label next_piece_gfx = 5
.label screen_next_area = 7
.label l = 9
//SEG273 [108] if((byte) render_screen_render#15==(byte/signed byte/word/signed word/dword/signed dword) 0) goto render_next::@1 -- vbuaa_eq_0_then_la1
cmp #0
beq b1_from_render_next
//SEG274 [109] phi from render_next to render_next::@2 [phi:render_next->render_next::@2]
b2_from_render_next:
jmp b2
//SEG275 render_next::@2
b2:
//SEG276 [110] phi from render_next::@2 to render_next::@1 [phi:render_next::@2->render_next::@1]
b1_from_b2:
//SEG277 [110] phi (byte*) render_next::screen_next_area#11 = (const byte*) PLAYFIELD_SCREEN_2#0+(const word) render_next::next_area_offset#0 [phi:render_next::@2->render_next::@1#0] -- pbuz1=pbuc1
lda #<PLAYFIELD_SCREEN_2+next_area_offset
sta screen_next_area
lda #>PLAYFIELD_SCREEN_2+next_area_offset
sta screen_next_area+1
jmp b1
//SEG278 [110] phi from render_next to render_next::@1 [phi:render_next->render_next::@1]
b1_from_render_next:
//SEG279 [110] phi (byte*) render_next::screen_next_area#11 = (const byte*) PLAYFIELD_SCREEN_1#0+(const word) render_next::next_area_offset#0 [phi:render_next->render_next::@1#0] -- pbuz1=pbuc1
lda #<PLAYFIELD_SCREEN_1+next_area_offset
sta screen_next_area
lda #>PLAYFIELD_SCREEN_1+next_area_offset
sta screen_next_area+1
jmp b1
//SEG280 render_next::@1
b1:
//SEG281 [111] (byte~) render_next::$4 ← (byte) next_piece_idx#12 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuyy=vbuxx_rol_1
txa
asl
tay
//SEG282 [112] (byte) render_next::next_piece_char#0 ← *((const byte[]) PIECES_NEXT_CHARS#0 + (byte) next_piece_idx#12) -- vbuz1=pbuc1_derefidx_vbuxx
lda PIECES_NEXT_CHARS,x
sta next_piece_char
//SEG283 [113] (byte*~) render_next::next_piece_gfx#9 ← (byte*)*((const word[]) PIECES#0 + (byte~) render_next::$4) -- pbuz1=pptc1_derefidx_vbuyy
lda PIECES,y
sta next_piece_gfx
lda PIECES+1,y
sta next_piece_gfx+1
//SEG284 [114] phi from render_next::@1 to render_next::@3 [phi:render_next::@1->render_next::@3]
b3_from_b1:
//SEG285 [114] phi (byte) render_next::l#7 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render_next::@1->render_next::@3#0] -- vbuz1=vbuc1
lda #0
sta l
//SEG286 [114] phi (byte*) render_next::screen_next_area#10 = (byte*) render_next::screen_next_area#11 [phi:render_next::@1->render_next::@3#1] -- register_copy
//SEG287 [114] phi (byte*) render_next::next_piece_gfx#3 = (byte*~) render_next::next_piece_gfx#9 [phi:render_next::@1->render_next::@3#2] -- register_copy
jmp b3
//SEG288 [114] phi from render_next::@8 to render_next::@3 [phi:render_next::@8->render_next::@3]
b3_from_b8:
//SEG289 [114] phi (byte) render_next::l#7 = (byte) render_next::l#1 [phi:render_next::@8->render_next::@3#0] -- register_copy
//SEG290 [114] phi (byte*) render_next::screen_next_area#10 = (byte*) render_next::screen_next_area#4 [phi:render_next::@8->render_next::@3#1] -- register_copy
//SEG291 [114] phi (byte*) render_next::next_piece_gfx#3 = (byte*) render_next::next_piece_gfx#1 [phi:render_next::@8->render_next::@3#2] -- register_copy
jmp b3
//SEG292 render_next::@3
b3:
//SEG293 [115] phi from render_next::@3 to render_next::@4 [phi:render_next::@3->render_next::@4]
b4_from_b3:
//SEG294 [115] phi (byte) render_next::c#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render_next::@3->render_next::@4#0] -- vbuxx=vbuc1
ldx #0
//SEG295 [115] phi (byte*) render_next::screen_next_area#5 = (byte*) render_next::screen_next_area#10 [phi:render_next::@3->render_next::@4#1] -- register_copy
//SEG296 [115] phi (byte*) render_next::next_piece_gfx#2 = (byte*) render_next::next_piece_gfx#3 [phi:render_next::@3->render_next::@4#2] -- register_copy
jmp b4
//SEG297 [115] phi from render_next::@6 to render_next::@4 [phi:render_next::@6->render_next::@4]
b4_from_b6:
//SEG298 [115] phi (byte) render_next::c#2 = (byte) render_next::c#1 [phi:render_next::@6->render_next::@4#0] -- register_copy
//SEG299 [115] phi (byte*) render_next::screen_next_area#5 = (byte*) render_next::screen_next_area#3 [phi:render_next::@6->render_next::@4#1] -- register_copy
//SEG300 [115] phi (byte*) render_next::next_piece_gfx#2 = (byte*) render_next::next_piece_gfx#1 [phi:render_next::@6->render_next::@4#2] -- register_copy
jmp b4
//SEG301 render_next::@4
b4:
//SEG302 [116] (byte) render_next::cell#0 ← *((byte*) render_next::next_piece_gfx#2) -- vbuaa=_deref_pbuz1
ldy #0
lda (next_piece_gfx),y
//SEG303 [117] (byte*) render_next::next_piece_gfx#1 ← ++ (byte*) render_next::next_piece_gfx#2 -- pbuz1=_inc_pbuz1
inc next_piece_gfx
bne !+
inc next_piece_gfx+1
!:
//SEG304 [118] if((byte) render_next::cell#0!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto render_next::@5 -- vbuaa_neq_0_then_la1
cmp #0
bne b5
jmp b7
//SEG305 render_next::@7
b7:
//SEG306 [119] *((byte*) render_next::screen_next_area#5) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- _deref_pbuz1=vbuc1
lda #0
ldy #0
sta (screen_next_area),y
jmp b6
//SEG307 render_next::@6
b6:
//SEG308 [120] (byte*) render_next::screen_next_area#3 ← ++ (byte*) render_next::screen_next_area#5 -- pbuz1=_inc_pbuz1
inc screen_next_area
bne !+
inc screen_next_area+1
!:
//SEG309 [121] (byte) render_next::c#1 ← ++ (byte) render_next::c#2 -- vbuxx=_inc_vbuxx
inx
//SEG310 [122] if((byte) render_next::c#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto render_next::@4 -- vbuxx_neq_vbuc1_then_la1
cpx #4
bne b4_from_b6
jmp b8
//SEG311 render_next::@8
b8:
//SEG312 [123] (byte*) render_next::screen_next_area#4 ← (byte*) render_next::screen_next_area#3 + (byte/signed byte/word/signed word/dword/signed dword) $24 -- pbuz1=pbuz1_plus_vbuc1
lda #$24
clc
adc screen_next_area
sta screen_next_area
bcc !+
inc screen_next_area+1
!:
//SEG313 [124] (byte) render_next::l#1 ← ++ (byte) render_next::l#7 -- vbuz1=_inc_vbuz1
inc l
//SEG314 [125] if((byte) render_next::l#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto render_next::@3 -- vbuz1_neq_vbuc1_then_la1
lda #4
cmp l
bne b3_from_b8
jmp breturn
//SEG315 render_next::@return
breturn:
//SEG316 [126] return
rts
//SEG317 render_next::@5
b5:
//SEG318 [127] *((byte*) render_next::screen_next_area#5) ← (byte) render_next::next_piece_char#0 -- _deref_pbuz1=vbuz2
lda next_piece_char
ldy #0
sta (screen_next_area),y
jmp b6
}
//SEG319 render_moving
// Render the current moving piece at position (current_xpos, current_ypos)
// Ignores cases where parts of the tetromino is outside the playfield (sides/bottom) since the movement collision routine prevents this.
render_moving: {
.label ypos2 = $c
.label screen_line = 7
.label xpos = $f
.label i = $e
.label l = $d
//SEG320 [129] (byte) render_moving::ypos2#0 ← (byte) current_ypos#13 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuz1=vbuxx_rol_1
txa
asl
sta ypos2
//SEG321 [130] phi from render_moving to render_moving::@1 [phi:render_moving->render_moving::@1]
b1_from_render_moving:
//SEG322 [130] phi (byte) render_moving::l#4 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render_moving->render_moving::@1#0] -- vbuz1=vbuc1
lda #0
sta l
//SEG323 [130] phi (byte) render_moving::i#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render_moving->render_moving::@1#1] -- vbuz1=vbuc1
lda #0
sta i
//SEG324 [130] phi (byte) render_moving::ypos2#2 = (byte) render_moving::ypos2#0 [phi:render_moving->render_moving::@1#2] -- register_copy
jmp b1
//SEG325 [130] phi from render_moving::@3 to render_moving::@1 [phi:render_moving::@3->render_moving::@1]
b1_from_b3:
//SEG326 [130] phi (byte) render_moving::l#4 = (byte) render_moving::l#1 [phi:render_moving::@3->render_moving::@1#0] -- register_copy
//SEG327 [130] phi (byte) render_moving::i#3 = (byte) render_moving::i#8 [phi:render_moving::@3->render_moving::@1#1] -- register_copy
//SEG328 [130] phi (byte) render_moving::ypos2#2 = (byte) render_moving::ypos2#1 [phi:render_moving::@3->render_moving::@1#2] -- register_copy
jmp b1
//SEG329 render_moving::@1
b1:
//SEG330 [131] if((byte) render_moving::ypos2#2>=(byte/signed byte/word/signed word/dword/signed dword) 2+(byte/signed byte/word/signed word/dword/signed dword) 1) goto render_moving::@2 -- vbuz1_ge_vbuc1_then_la1
lda ypos2
cmp #2+1
bcs b2
jmp b7
//SEG331 render_moving::@7
b7:
//SEG332 [132] (byte) render_moving::i#1 ← (byte) render_moving::i#3 + (byte/signed byte/word/signed word/dword/signed dword) 4 -- vbuz1=vbuz1_plus_vbuc1
lax i
axs #-[4]
stx i
//SEG333 [133] phi from render_moving::@5 render_moving::@7 to render_moving::@3 [phi:render_moving::@5/render_moving::@7->render_moving::@3]
b3_from_b5:
b3_from_b7:
//SEG334 [133] phi (byte) render_moving::i#8 = (byte) render_moving::i#2 [phi:render_moving::@5/render_moving::@7->render_moving::@3#0] -- register_copy
jmp b3
//SEG335 render_moving::@3
b3:
//SEG336 [134] (byte) render_moving::ypos2#1 ← (byte) render_moving::ypos2#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 -- vbuz1=vbuz1_plus_2
lda ypos2
clc
adc #2
sta ypos2
//SEG337 [135] (byte) render_moving::l#1 ← ++ (byte) render_moving::l#4 -- vbuz1=_inc_vbuz1
inc l
//SEG338 [136] if((byte) render_moving::l#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto render_moving::@1 -- vbuz1_neq_vbuc1_then_la1
lda #4
cmp l
bne b1_from_b3
jmp breturn
//SEG339 render_moving::@return
breturn:
//SEG340 [137] return
rts
//SEG341 render_moving::@2
b2:
//SEG342 [138] (byte~) render_moving::$2 ← (byte) render_screen_render#33 + (byte) render_moving::ypos2#2 -- vbuaa=vbuz1_plus_vbuz2
lda render_screen_render_33
clc
adc ypos2
//SEG343 [139] (byte*) render_moving::screen_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_moving::$2) -- pbuz1=pptc1_derefidx_vbuaa
tay
lda screen_lines_1,y
sta screen_line
lda screen_lines_1+1,y
sta screen_line+1
//SEG344 [140] (byte) render_moving::xpos#0 ← (byte) current_xpos#59 -- vbuz1=vbuz2
lda current_xpos_59
sta xpos
//SEG345 [141] phi from render_moving::@2 to render_moving::@4 [phi:render_moving::@2->render_moving::@4]
b4_from_b2:
//SEG346 [141] phi (byte) render_moving::c#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render_moving::@2->render_moving::@4#0] -- vbuxx=vbuc1
ldx #0
//SEG347 [141] phi (byte) render_moving::xpos#2 = (byte) render_moving::xpos#0 [phi:render_moving::@2->render_moving::@4#1] -- register_copy
//SEG348 [141] phi (byte) render_moving::i#4 = (byte) render_moving::i#3 [phi:render_moving::@2->render_moving::@4#2] -- register_copy
jmp b4
//SEG349 [141] phi from render_moving::@5 to render_moving::@4 [phi:render_moving::@5->render_moving::@4]
b4_from_b5:
//SEG350 [141] phi (byte) render_moving::c#2 = (byte) render_moving::c#1 [phi:render_moving::@5->render_moving::@4#0] -- register_copy
//SEG351 [141] phi (byte) render_moving::xpos#2 = (byte) render_moving::xpos#1 [phi:render_moving::@5->render_moving::@4#1] -- register_copy
//SEG352 [141] phi (byte) render_moving::i#4 = (byte) render_moving::i#2 [phi:render_moving::@5->render_moving::@4#2] -- register_copy
jmp b4
//SEG353 render_moving::@4
b4:
//SEG354 [142] (byte) render_moving::current_cell#0 ← *((byte*) current_piece_gfx#64 + (byte) render_moving::i#4) -- vbuaa=pbuz1_derefidx_vbuz2
ldy i
lda (current_piece_gfx_64),y
//SEG355 [143] (byte) render_moving::i#2 ← ++ (byte) render_moving::i#4 -- vbuz1=_inc_vbuz1
inc i
//SEG356 [144] if((byte) render_moving::current_cell#0==(byte/signed byte/word/signed word/dword/signed dword) 0) goto render_moving::@5 -- vbuaa_eq_0_then_la1
cmp #0
beq b5
jmp b6
//SEG357 render_moving::@6
b6:
//SEG358 [145] *((byte*) render_moving::screen_line#0 + (byte) render_moving::xpos#2) ← (byte) current_piece_char#68 -- pbuz1_derefidx_vbuz2=vbuz3
lda current_piece_char_68
ldy xpos
sta (screen_line),y
jmp b5
//SEG359 render_moving::@5
b5:
//SEG360 [146] (byte) render_moving::xpos#1 ← ++ (byte) render_moving::xpos#2 -- vbuz1=_inc_vbuz1
inc xpos
//SEG361 [147] (byte) render_moving::c#1 ← ++ (byte) render_moving::c#2 -- vbuxx=_inc_vbuxx
inx
//SEG362 [148] if((byte) render_moving::c#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto render_moving::@4 -- vbuxx_neq_vbuc1_then_la1
cpx #4
bne b4_from_b5
jmp b3_from_b5
}
//SEG363 render_playfield
// Render the static playfield on the screen (all pieces already locked into place)
render_playfield: {
.label screen_line = 5
.label i = $a
.label c = $b
.label l = 9
//SEG364 [150] phi from render_playfield to render_playfield::@1 [phi:render_playfield->render_playfield::@1]
b1_from_render_playfield:
//SEG365 [150] phi (byte) render_playfield::i#3 = (const byte) PLAYFIELD_COLS#0*(byte/signed byte/word/signed word/dword/signed dword) 2 [phi:render_playfield->render_playfield::@1#0] -- vbuz1=vbuc1
lda #PLAYFIELD_COLS*2
sta i
//SEG366 [150] phi (byte) render_playfield::l#2 = (byte/signed byte/word/signed word/dword/signed dword) 2 [phi:render_playfield->render_playfield::@1#1] -- vbuz1=vbuc1
lda #2
sta l
jmp b1
//SEG367 [150] phi from render_playfield::@3 to render_playfield::@1 [phi:render_playfield::@3->render_playfield::@1]
b1_from_b3:
//SEG368 [150] phi (byte) render_playfield::i#3 = (byte) render_playfield::i#1 [phi:render_playfield::@3->render_playfield::@1#0] -- register_copy
//SEG369 [150] phi (byte) render_playfield::l#2 = (byte) render_playfield::l#1 [phi:render_playfield::@3->render_playfield::@1#1] -- register_copy
jmp b1
//SEG370 render_playfield::@1
b1:
//SEG371 [151] (byte~) render_playfield::$2 ← (byte) render_playfield::l#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuaa=vbuz1_rol_1
lda l
asl
//SEG372 [152] (byte~) render_playfield::$3 ← (byte) render_screen_render#22 + (byte~) render_playfield::$2 -- vbuaa=vbuxx_plus_vbuaa
stx $ff
clc
adc $ff
//SEG373 [153] (byte*) render_playfield::screen_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_playfield::$3) -- pbuz1=pptc1_derefidx_vbuaa
tay
lda screen_lines_1,y
sta screen_line
lda screen_lines_1+1,y
sta screen_line+1
//SEG374 [154] phi from render_playfield::@1 to render_playfield::@2 [phi:render_playfield::@1->render_playfield::@2]
b2_from_b1:
//SEG375 [154] phi (byte) render_playfield::c#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render_playfield::@1->render_playfield::@2#0] -- vbuz1=vbuc1
lda #0
sta c
//SEG376 [154] phi (byte*) render_playfield::screen_line#2 = (byte*) render_playfield::screen_line#0 [phi:render_playfield::@1->render_playfield::@2#1] -- register_copy
//SEG377 [154] phi (byte) render_playfield::i#2 = (byte) render_playfield::i#3 [phi:render_playfield::@1->render_playfield::@2#2] -- register_copy
jmp b2
//SEG378 [154] phi from render_playfield::@2 to render_playfield::@2 [phi:render_playfield::@2->render_playfield::@2]
b2_from_b2:
//SEG379 [154] phi (byte) render_playfield::c#2 = (byte) render_playfield::c#1 [phi:render_playfield::@2->render_playfield::@2#0] -- register_copy
//SEG380 [154] phi (byte*) render_playfield::screen_line#2 = (byte*) render_playfield::screen_line#1 [phi:render_playfield::@2->render_playfield::@2#1] -- register_copy
//SEG381 [154] phi (byte) render_playfield::i#2 = (byte) render_playfield::i#1 [phi:render_playfield::@2->render_playfield::@2#2] -- register_copy
jmp b2
//SEG382 render_playfield::@2
b2:
//SEG383 [155] *((byte*) render_playfield::screen_line#2) ← *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) render_playfield::i#2) -- _deref_pbuz1=pbuc1_derefidx_vbuz2
ldy i
lda playfield,y
ldy #0
sta (screen_line),y
//SEG384 [156] (byte*) render_playfield::screen_line#1 ← ++ (byte*) render_playfield::screen_line#2 -- pbuz1=_inc_pbuz1
inc screen_line
bne !+
inc screen_line+1
!:
//SEG385 [157] (byte) render_playfield::i#1 ← ++ (byte) render_playfield::i#2 -- vbuz1=_inc_vbuz1
inc i
//SEG386 [158] (byte) render_playfield::c#1 ← ++ (byte) render_playfield::c#2 -- vbuz1=_inc_vbuz1
inc c
//SEG387 [159] if((byte) render_playfield::c#1!=(const byte) PLAYFIELD_COLS#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto render_playfield::@2 -- vbuz1_neq_vbuc1_then_la1
lda #PLAYFIELD_COLS-1+1
cmp c
bne b2_from_b2
jmp b3
//SEG388 render_playfield::@3
b3:
//SEG389 [160] (byte) render_playfield::l#1 ← ++ (byte) render_playfield::l#2 -- vbuz1=_inc_vbuz1
inc l
//SEG390 [161] if((byte) render_playfield::l#1!=(const byte) PLAYFIELD_LINES#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto render_playfield::@1 -- vbuz1_neq_vbuc1_then_la1
lda #PLAYFIELD_LINES-1+1
cmp l
bne b1_from_b3
jmp breturn
//SEG391 render_playfield::@return
breturn:
//SEG392 [162] return
rts
}
//SEG393 play_movement
// Perform any movement of the current piece
// key_event is the next keyboard_event() og $ff if no keyboard event is pending
// Returns a byte signaling whether rendering is needed. (0 no render, >0 render needed)
// play_movement(byte zeropage($2a) key_event)
play_movement: {
.label render = 9
.label return = 9
.label key_event = $2a
//SEG394 [163] (byte) play_move_down::key_event#0 ← (byte) play_movement::key_event#0 -- vbuaa=vbuz1
lda key_event
//SEG395 [164] call play_move_down
jsr play_move_down
//SEG396 [165] (byte) play_move_down::return#0 ← (byte) play_move_down::return#3 -- vbuaa=vbuxx
txa
jmp b2
//SEG397 play_movement::@2
b2:
//SEG398 [166] (byte) play_movement::render#1 ← (byte) play_move_down::return#0 -- vbuz1=vbuaa
sta render
//SEG399 [167] if((byte) game_over#15==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_movement::@1 -- vbuz1_eq_0_then_la1
lda game_over
cmp #0
beq b1
//SEG400 [168] phi from play_movement::@2 play_movement::@4 to play_movement::@return [phi:play_movement::@2/play_movement::@4->play_movement::@return]
breturn_from_b2:
breturn_from_b4:
//SEG401 [168] phi (byte) current_xpos#19 = (byte) current_xpos#22 [phi:play_movement::@2/play_movement::@4->play_movement::@return#0] -- register_copy
//SEG402 [168] phi (byte*) current_piece_gfx#18 = (byte*) current_piece_gfx#20 [phi:play_movement::@2/play_movement::@4->play_movement::@return#1] -- register_copy
//SEG403 [168] phi (byte) current_orientation#17 = (byte) current_orientation#20 [phi:play_movement::@2/play_movement::@4->play_movement::@return#2] -- register_copy
//SEG404 [168] phi (byte) play_movement::return#2 = (byte) play_movement::render#1 [phi:play_movement::@2/play_movement::@4->play_movement::@return#3] -- register_copy
jmp breturn
//SEG405 play_movement::@return
breturn:
//SEG406 [169] return
rts
//SEG407 play_movement::@1
b1:
//SEG408 [170] (byte) play_move_leftright::key_event#0 ← (byte) play_movement::key_event#0 -- vbuaa=vbuz1
lda key_event
//SEG409 [171] call play_move_leftright
jsr play_move_leftright
//SEG410 [172] (byte) play_move_leftright::return#0 ← (byte) play_move_leftright::return#2
jmp b3
//SEG411 play_movement::@3
b3:
//SEG412 [173] (byte~) play_movement::$3 ← (byte) play_move_leftright::return#0
//SEG413 [174] (byte) play_movement::render#2 ← (byte) play_movement::render#1 + (byte~) play_movement::$3 -- vbuz1=vbuz1_plus_vbuaa
clc
adc render
sta render
//SEG414 [175] (byte) play_move_rotate::key_event#0 ← (byte) play_movement::key_event#0 -- vbuaa=vbuz1
lda key_event
//SEG415 [176] call play_move_rotate
jsr play_move_rotate
//SEG416 [177] (byte) play_move_rotate::return#0 ← (byte) play_move_rotate::return#2
jmp b4
//SEG417 play_movement::@4
b4:
//SEG418 [178] (byte~) play_movement::$4 ← (byte) play_move_rotate::return#0
//SEG419 [179] (byte) play_movement::return#0 ← (byte) play_movement::render#2 + (byte~) play_movement::$4 -- vbuz1=vbuz1_plus_vbuaa
clc
adc return
sta return
jmp breturn_from_b4
}
//SEG420 play_move_rotate
// Rotate the current piece based on key-presses
// Return non-zero if a render is needed
// play_move_rotate(byte register(A) key_event)
play_move_rotate: {
.label orientation = $a
//SEG421 [180] if((byte) play_move_rotate::key_event#0==(const byte) KEY_Z#0) goto play_move_rotate::@1 -- vbuaa_eq_vbuc1_then_la1
cmp #KEY_Z
beq b1
jmp b4
//SEG422 play_move_rotate::@4
b4:
//SEG423 [181] if((byte) play_move_rotate::key_event#0==(const byte) KEY_X#0) goto play_move_rotate::@2 -- vbuaa_eq_vbuc1_then_la1
cmp #KEY_X
beq b2
//SEG424 [182] phi from play_move_rotate::@4 play_move_rotate::@6 to play_move_rotate::@return [phi:play_move_rotate::@4/play_move_rotate::@6->play_move_rotate::@return]
breturn_from_b4:
breturn_from_b6:
//SEG425 [182] phi (byte*) current_piece_gfx#21 = (byte*) current_piece_gfx#20 [phi:play_move_rotate::@4/play_move_rotate::@6->play_move_rotate::@return#0] -- register_copy
//SEG426 [182] phi (byte) current_orientation#25 = (byte) current_orientation#20 [phi:play_move_rotate::@4/play_move_rotate::@6->play_move_rotate::@return#1] -- register_copy
//SEG427 [182] phi (byte) play_move_rotate::return#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_move_rotate::@4/play_move_rotate::@6->play_move_rotate::@return#2] -- vbuaa=vbuc1
lda #0
jmp breturn
//SEG428 play_move_rotate::@return
breturn:
//SEG429 [183] return
rts
//SEG430 play_move_rotate::@2
b2:
//SEG431 [184] (byte/signed word/word/dword/signed dword~) play_move_rotate::$5 ← (byte) current_orientation#20 + (byte/signed byte/word/signed word/dword/signed dword) $10 -- vbuxx=vbuz1_plus_vbuc1
lax current_orientation
axs #-[$10]
//SEG432 [185] (byte) play_move_rotate::orientation#2 ← (byte/signed word/word/dword/signed dword~) play_move_rotate::$5 & (byte/signed byte/word/signed word/dword/signed dword) $3f -- vbuz1=vbuxx_band_vbuc1
lda #$3f
sax orientation
//SEG433 [186] phi from play_move_rotate::@1 play_move_rotate::@2 to play_move_rotate::@3 [phi:play_move_rotate::@1/play_move_rotate::@2->play_move_rotate::@3]
b3_from_b1:
b3_from_b2:
//SEG434 [186] phi (byte) play_move_rotate::orientation#3 = (byte) play_move_rotate::orientation#1 [phi:play_move_rotate::@1/play_move_rotate::@2->play_move_rotate::@3#0] -- register_copy
jmp b3
//SEG435 play_move_rotate::@3
b3:
//SEG436 [187] (byte) play_collision::xpos#3 ← (byte) current_xpos#26 -- vbuz1=vbuz2
lda current_xpos
sta play_collision.xpos
//SEG437 [188] (byte) play_collision::ypos#3 ← (byte) current_ypos#19 -- vbuz1=vbuz2
lda current_ypos
sta play_collision.ypos
//SEG438 [189] (byte) play_collision::orientation#3 ← (byte) play_move_rotate::orientation#3 -- vbuxx=vbuz1
ldx orientation
//SEG439 [190] (byte*~) current_piece#103 ← (byte*) current_piece#15 -- pbuz1=pbuz2
lda current_piece
sta current_piece_103
lda current_piece+1
sta current_piece_103+1
//SEG440 [191] call play_collision
//SEG441 [199] phi from play_move_rotate::@3 to play_collision [phi:play_move_rotate::@3->play_collision]
play_collision_from_b3:
//SEG442 [199] phi (byte) play_collision::xpos#6 = (byte) play_collision::xpos#3 [phi:play_move_rotate::@3->play_collision#0] -- register_copy
//SEG443 [199] phi (byte) play_collision::ypos#5 = (byte) play_collision::ypos#3 [phi:play_move_rotate::@3->play_collision#1] -- register_copy
//SEG444 [199] phi (byte) play_collision::orientation#5 = (byte) play_collision::orientation#3 [phi:play_move_rotate::@3->play_collision#2] -- register_copy
//SEG445 [199] phi (byte*) current_piece#17 = (byte*~) current_piece#103 [phi:play_move_rotate::@3->play_collision#3] -- register_copy
jsr play_collision
//SEG446 [192] (byte) play_collision::return#14 ← (byte) play_collision::return#15
jmp b6
//SEG447 play_move_rotate::@6
b6:
//SEG448 [193] (byte~) play_move_rotate::$2 ← (byte) play_collision::return#14
//SEG449 [194] if((byte~) play_move_rotate::$2!=(const byte) COLLISION_NONE#0) goto play_move_rotate::@return -- vbuaa_neq_vbuc1_then_la1
cmp #COLLISION_NONE
bne breturn_from_b6
jmp b5
//SEG450 play_move_rotate::@5
b5:
//SEG451 [195] (byte) current_orientation#7 ← (byte) play_move_rotate::orientation#3 -- vbuz1=vbuz2
lda orientation
sta current_orientation
//SEG452 [196] (byte*) current_piece_gfx#7 ← (byte*) current_piece#15 + (byte) current_orientation#7 -- pbuz1=pbuz2_plus_vbuz3
lda current_orientation
clc
adc current_piece
sta current_piece_gfx
lda #0
adc current_piece+1
sta current_piece_gfx+1
//SEG453 [182] phi from play_move_rotate::@5 to play_move_rotate::@return [phi:play_move_rotate::@5->play_move_rotate::@return]
breturn_from_b5:
//SEG454 [182] phi (byte*) current_piece_gfx#21 = (byte*) current_piece_gfx#7 [phi:play_move_rotate::@5->play_move_rotate::@return#0] -- register_copy
//SEG455 [182] phi (byte) current_orientation#25 = (byte) current_orientation#7 [phi:play_move_rotate::@5->play_move_rotate::@return#1] -- register_copy
//SEG456 [182] phi (byte) play_move_rotate::return#2 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:play_move_rotate::@5->play_move_rotate::@return#2] -- vbuaa=vbuc1
lda #1
jmp breturn
//SEG457 play_move_rotate::@1
b1:
//SEG458 [197] (byte/signed word/word/dword/signed dword~) play_move_rotate::$7 ← (byte) current_orientation#20 - (byte/signed byte/word/signed word/dword/signed dword) $10 -- vbuxx=vbuz1_minus_vbuc1
lax current_orientation
axs #$10
//SEG459 [198] (byte) play_move_rotate::orientation#1 ← (byte/signed word/word/dword/signed dword~) play_move_rotate::$7 & (byte/signed byte/word/signed word/dword/signed dword) $3f -- vbuz1=vbuxx_band_vbuc1
lda #$3f
sax orientation
jmp b3_from_b1
}
//SEG460 play_collision
// Test if there is a collision between the current piece moved to (x, y) and anything on the playfield or the playfield boundaries
// Returns information about the type of the collision detected
// play_collision(byte zeropage($c) xpos, byte zeropage($b) ypos, byte register(X) orientation)
play_collision: {
.label xpos = $c
.label ypos = $b
.label piece_gfx = 5
.label ypos2 = $b
.label playfield_line = 7
.label i = $2b
.label col = $f
.label l = $d
.label i_2 = $e
.label i_3 = $e
.label i_11 = $e
.label i_13 = $e
//SEG461 [200] (byte*) play_collision::piece_gfx#0 ← (byte*) current_piece#17 + (byte) play_collision::orientation#5 -- pbuz1=pbuz1_plus_vbuxx
txa
clc
adc piece_gfx
sta piece_gfx
bcc !+
inc piece_gfx+1
!:
//SEG462 [201] (byte) play_collision::ypos2#0 ← (byte) play_collision::ypos#5 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuz1=vbuz1_rol_1
asl ypos2
//SEG463 [202] phi from play_collision to play_collision::@1 [phi:play_collision->play_collision::@1]
b1_from_play_collision:
//SEG464 [202] phi (byte) play_collision::l#6 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_collision->play_collision::@1#0] -- vbuz1=vbuc1
lda #0
sta l
//SEG465 [202] phi (byte) play_collision::i#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_collision->play_collision::@1#1] -- vbuz1=vbuc1
lda #0
sta i_3
//SEG466 [202] phi (byte) play_collision::ypos2#2 = (byte) play_collision::ypos2#0 [phi:play_collision->play_collision::@1#2] -- register_copy
jmp b1
//SEG467 play_collision::@1
b1:
//SEG468 [203] (byte*) play_collision::playfield_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte) play_collision::ypos2#2) -- pbuz1=pptc1_derefidx_vbuz2
ldy ypos2
lda playfield_lines,y
sta playfield_line
lda playfield_lines+1,y
sta playfield_line+1
//SEG469 [204] (byte~) play_collision::col#9 ← (byte) play_collision::xpos#6 -- vbuz1=vbuz2
lda xpos
sta col
//SEG470 [205] phi from play_collision::@1 to play_collision::@2 [phi:play_collision::@1->play_collision::@2]
b2_from_b1:
//SEG471 [205] phi (byte) play_collision::c#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_collision::@1->play_collision::@2#0] -- vbuxx=vbuc1
ldx #0
//SEG472 [205] phi (byte) play_collision::col#2 = (byte~) play_collision::col#9 [phi:play_collision::@1->play_collision::@2#1] -- register_copy
//SEG473 [205] phi (byte) play_collision::i#2 = (byte) play_collision::i#3 [phi:play_collision::@1->play_collision::@2#2] -- register_copy
jmp b2
//SEG474 play_collision::@2
b2:
//SEG475 [206] (byte) play_collision::i#1 ← ++ (byte) play_collision::i#2 -- vbuz1=_inc_vbuz2
ldy i_2
iny
sty i
//SEG476 [207] if(*((byte*) play_collision::piece_gfx#0 + (byte) play_collision::i#2)==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_collision::@3 -- pbuz1_derefidx_vbuz2_eq_0_then_la1
ldy i_2
lda (piece_gfx),y
cmp #0
beq b3
jmp b7
//SEG477 play_collision::@7
b7:
//SEG478 [208] if((byte) play_collision::ypos2#2<(byte/signed byte/word/signed word/dword/signed dword) 2*(const byte) PLAYFIELD_LINES#0) goto play_collision::@4 -- vbuz1_lt_vbuc1_then_la1
lda ypos2
cmp #2*PLAYFIELD_LINES
bcc b4
//SEG479 [209] phi from play_collision::@7 to play_collision::@return [phi:play_collision::@7->play_collision::@return]
breturn_from_b7:
//SEG480 [209] phi (byte) play_collision::return#15 = (const byte) COLLISION_BOTTOM#0 [phi:play_collision::@7->play_collision::@return#0] -- vbuaa=vbuc1
lda #COLLISION_BOTTOM
jmp breturn
//SEG481 play_collision::@return
breturn:
//SEG482 [210] return
rts
//SEG483 play_collision::@4
b4:
//SEG484 [211] (byte~) play_collision::$7 ← (byte) play_collision::col#2 & (byte/word/signed word/dword/signed dword) $80 -- vbuaa=vbuz1_band_vbuc1
lda #$80
and col
//SEG485 [212] if((byte~) play_collision::$7==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_collision::@5 -- vbuaa_eq_0_then_la1
cmp #0
beq b5
//SEG486 [209] phi from play_collision::@4 to play_collision::@return [phi:play_collision::@4->play_collision::@return]
breturn_from_b4:
//SEG487 [209] phi (byte) play_collision::return#15 = (const byte) COLLISION_LEFT#0 [phi:play_collision::@4->play_collision::@return#0] -- vbuaa=vbuc1
lda #COLLISION_LEFT
jmp breturn
//SEG488 play_collision::@5
b5:
//SEG489 [213] if((byte) play_collision::col#2<(const byte) PLAYFIELD_COLS#0) goto play_collision::@6 -- vbuz1_lt_vbuc1_then_la1
lda col
cmp #PLAYFIELD_COLS
bcc b6
//SEG490 [209] phi from play_collision::@5 to play_collision::@return [phi:play_collision::@5->play_collision::@return]
breturn_from_b5:
//SEG491 [209] phi (byte) play_collision::return#15 = (const byte) COLLISION_RIGHT#0 [phi:play_collision::@5->play_collision::@return#0] -- vbuaa=vbuc1
lda #COLLISION_RIGHT
jmp breturn
//SEG492 play_collision::@6
b6:
//SEG493 [214] if(*((byte*) play_collision::playfield_line#0 + (byte) play_collision::col#2)==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_collision::@3 -- pbuz1_derefidx_vbuz2_eq_0_then_la1
ldy col
lda (playfield_line),y
cmp #0
beq b3
//SEG494 [209] phi from play_collision::@6 to play_collision::@return [phi:play_collision::@6->play_collision::@return]
breturn_from_b6:
//SEG495 [209] phi (byte) play_collision::return#15 = (const byte) COLLISION_PLAYFIELD#0 [phi:play_collision::@6->play_collision::@return#0] -- vbuaa=vbuc1
lda #COLLISION_PLAYFIELD
jmp breturn
//SEG496 play_collision::@3
b3:
//SEG497 [215] (byte) play_collision::col#1 ← ++ (byte) play_collision::col#2 -- vbuz1=_inc_vbuz1
inc col
//SEG498 [216] (byte) play_collision::c#1 ← ++ (byte) play_collision::c#2 -- vbuxx=_inc_vbuxx
inx
//SEG499 [217] if((byte) play_collision::c#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto play_collision::@10 -- vbuxx_neq_vbuc1_then_la1
cpx #4
bne b10
jmp b8
//SEG500 play_collision::@8
b8:
//SEG501 [218] (byte) play_collision::ypos2#1 ← (byte) play_collision::ypos2#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 -- vbuz1=vbuz1_plus_2
lda ypos2
clc
adc #2
sta ypos2
//SEG502 [219] (byte) play_collision::l#1 ← ++ (byte) play_collision::l#6 -- vbuz1=_inc_vbuz1
inc l
//SEG503 [220] if((byte) play_collision::l#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto play_collision::@9 -- vbuz1_neq_vbuc1_then_la1
lda #4
cmp l
bne b9
//SEG504 [209] phi from play_collision::@8 to play_collision::@return [phi:play_collision::@8->play_collision::@return]
breturn_from_b8:
//SEG505 [209] phi (byte) play_collision::return#15 = (const byte) COLLISION_NONE#0 [phi:play_collision::@8->play_collision::@return#0] -- vbuaa=vbuc1
lda #COLLISION_NONE
jmp breturn
//SEG506 play_collision::@9
b9:
//SEG507 [221] (byte~) play_collision::i#11 ← (byte) play_collision::i#1 -- vbuz1=vbuz2
lda i
sta i_11
//SEG508 [202] phi from play_collision::@9 to play_collision::@1 [phi:play_collision::@9->play_collision::@1]
b1_from_b9:
//SEG509 [202] phi (byte) play_collision::l#6 = (byte) play_collision::l#1 [phi:play_collision::@9->play_collision::@1#0] -- register_copy
//SEG510 [202] phi (byte) play_collision::i#3 = (byte~) play_collision::i#11 [phi:play_collision::@9->play_collision::@1#1] -- register_copy
//SEG511 [202] phi (byte) play_collision::ypos2#2 = (byte) play_collision::ypos2#1 [phi:play_collision::@9->play_collision::@1#2] -- register_copy
jmp b1
//SEG512 play_collision::@10
b10:
//SEG513 [222] (byte~) play_collision::i#13 ← (byte) play_collision::i#1 -- vbuz1=vbuz2
lda i
sta i_13
//SEG514 [205] phi from play_collision::@10 to play_collision::@2 [phi:play_collision::@10->play_collision::@2]
b2_from_b10:
//SEG515 [205] phi (byte) play_collision::c#2 = (byte) play_collision::c#1 [phi:play_collision::@10->play_collision::@2#0] -- register_copy
//SEG516 [205] phi (byte) play_collision::col#2 = (byte) play_collision::col#1 [phi:play_collision::@10->play_collision::@2#1] -- register_copy
//SEG517 [205] phi (byte) play_collision::i#2 = (byte~) play_collision::i#13 [phi:play_collision::@10->play_collision::@2#2] -- register_copy
jmp b2
}
//SEG518 play_move_leftright
// Move left/right or rotate the current piece
// Return non-zero if a render is needed
// play_move_leftright(byte register(A) key_event)
play_move_leftright: {
//SEG519 [223] if((byte) play_move_leftright::key_event#0==(const byte) KEY_COMMA#0) goto play_move_leftright::@1 -- vbuaa_eq_vbuc1_then_la1
// Handle keyboard events
cmp #KEY_COMMA
beq b1
jmp b2
//SEG520 play_move_leftright::@2
b2:
//SEG521 [224] if((byte) play_move_leftright::key_event#0!=(const byte) KEY_DOT#0) goto play_move_leftright::@return -- vbuaa_neq_vbuc1_then_la1
cmp #KEY_DOT
bne breturn_from_b2
jmp b3
//SEG522 play_move_leftright::@3
b3:
//SEG523 [225] (byte) play_collision::xpos#2 ← (byte) current_xpos#22 + (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuz1=vbuz2_plus_1
ldy current_xpos
iny
sty play_collision.xpos
//SEG524 [226] (byte) play_collision::ypos#2 ← (byte) current_ypos#19 -- vbuz1=vbuz2
lda current_ypos
sta play_collision.ypos
//SEG525 [227] (byte) play_collision::orientation#2 ← (byte) current_orientation#20 -- vbuxx=vbuz1
ldx current_orientation
//SEG526 [228] (byte*~) current_piece#102 ← (byte*) current_piece#15 -- pbuz1=pbuz2
lda current_piece
sta current_piece_102
lda current_piece+1
sta current_piece_102+1
//SEG527 [229] call play_collision
//SEG528 [199] phi from play_move_leftright::@3 to play_collision [phi:play_move_leftright::@3->play_collision]
play_collision_from_b3:
//SEG529 [199] phi (byte) play_collision::xpos#6 = (byte) play_collision::xpos#2 [phi:play_move_leftright::@3->play_collision#0] -- register_copy
//SEG530 [199] phi (byte) play_collision::ypos#5 = (byte) play_collision::ypos#2 [phi:play_move_leftright::@3->play_collision#1] -- register_copy
//SEG531 [199] phi (byte) play_collision::orientation#5 = (byte) play_collision::orientation#2 [phi:play_move_leftright::@3->play_collision#2] -- register_copy
//SEG532 [199] phi (byte*) current_piece#17 = (byte*~) current_piece#102 [phi:play_move_leftright::@3->play_collision#3] -- register_copy
jsr play_collision
//SEG533 [230] (byte) play_collision::return#13 ← (byte) play_collision::return#15
jmp b7
//SEG534 play_move_leftright::@7
b7:
//SEG535 [231] (byte~) play_move_leftright::$4 ← (byte) play_collision::return#13
//SEG536 [232] if((byte~) play_move_leftright::$4!=(const byte) COLLISION_NONE#0) goto play_move_leftright::@return -- vbuaa_neq_vbuc1_then_la1
cmp #COLLISION_NONE
bne breturn_from_b7
jmp b4
//SEG537 play_move_leftright::@4
b4:
//SEG538 [233] (byte) current_xpos#6 ← ++ (byte) current_xpos#22 -- vbuz1=_inc_vbuz1
inc current_xpos
//SEG539 [234] phi from play_move_leftright::@4 play_move_leftright::@5 to play_move_leftright::@return [phi:play_move_leftright::@4/play_move_leftright::@5->play_move_leftright::@return]
breturn_from_b4:
breturn_from_b5:
//SEG540 [234] phi (byte) current_xpos#26 = (byte) current_xpos#6 [phi:play_move_leftright::@4/play_move_leftright::@5->play_move_leftright::@return#0] -- register_copy
//SEG541 [234] phi (byte) play_move_leftright::return#2 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:play_move_leftright::@4/play_move_leftright::@5->play_move_leftright::@return#1] -- vbuaa=vbuc1
lda #1
jmp breturn
//SEG542 [234] phi from play_move_leftright::@2 play_move_leftright::@6 play_move_leftright::@7 to play_move_leftright::@return [phi:play_move_leftright::@2/play_move_leftright::@6/play_move_leftright::@7->play_move_leftright::@return]
breturn_from_b2:
breturn_from_b6:
breturn_from_b7:
//SEG543 [234] phi (byte) current_xpos#26 = (byte) current_xpos#22 [phi:play_move_leftright::@2/play_move_leftright::@6/play_move_leftright::@7->play_move_leftright::@return#0] -- register_copy
//SEG544 [234] phi (byte) play_move_leftright::return#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_move_leftright::@2/play_move_leftright::@6/play_move_leftright::@7->play_move_leftright::@return#1] -- vbuaa=vbuc1
lda #0
jmp breturn
//SEG545 play_move_leftright::@return
breturn:
//SEG546 [235] return
rts
//SEG547 play_move_leftright::@1
b1:
//SEG548 [236] (byte) play_collision::xpos#1 ← (byte) current_xpos#22 - (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuz1=vbuz2_minus_1
ldx current_xpos
dex
stx play_collision.xpos
//SEG549 [237] (byte) play_collision::ypos#1 ← (byte) current_ypos#19 -- vbuz1=vbuz2
lda current_ypos
sta play_collision.ypos
//SEG550 [238] (byte) play_collision::orientation#1 ← (byte) current_orientation#20 -- vbuxx=vbuz1
ldx current_orientation
//SEG551 [239] (byte*~) current_piece#101 ← (byte*) current_piece#15 -- pbuz1=pbuz2
lda current_piece
sta current_piece_101
lda current_piece+1
sta current_piece_101+1
//SEG552 [240] call play_collision
//SEG553 [199] phi from play_move_leftright::@1 to play_collision [phi:play_move_leftright::@1->play_collision]
play_collision_from_b1:
//SEG554 [199] phi (byte) play_collision::xpos#6 = (byte) play_collision::xpos#1 [phi:play_move_leftright::@1->play_collision#0] -- register_copy
//SEG555 [199] phi (byte) play_collision::ypos#5 = (byte) play_collision::ypos#1 [phi:play_move_leftright::@1->play_collision#1] -- register_copy
//SEG556 [199] phi (byte) play_collision::orientation#5 = (byte) play_collision::orientation#1 [phi:play_move_leftright::@1->play_collision#2] -- register_copy
//SEG557 [199] phi (byte*) current_piece#17 = (byte*~) current_piece#101 [phi:play_move_leftright::@1->play_collision#3] -- register_copy
jsr play_collision
//SEG558 [241] (byte) play_collision::return#1 ← (byte) play_collision::return#15
jmp b6
//SEG559 play_move_leftright::@6
b6:
//SEG560 [242] (byte~) play_move_leftright::$8 ← (byte) play_collision::return#1
//SEG561 [243] if((byte~) play_move_leftright::$8!=(const byte) COLLISION_NONE#0) goto play_move_leftright::@return -- vbuaa_neq_vbuc1_then_la1
cmp #COLLISION_NONE
bne breturn_from_b6
jmp b5
//SEG562 play_move_leftright::@5
b5:
//SEG563 [244] (byte) current_xpos#8 ← -- (byte) current_xpos#22 -- vbuz1=_dec_vbuz1
dec current_xpos
jmp breturn_from_b5
}
//SEG564 play_move_down
// Move down the current piece
// Return non-zero if a render is needed
// play_move_down(byte register(A) key_event)
play_move_down: {
//SEG565 [245] (byte) current_movedown_counter#12 ← ++ (byte) current_movedown_counter#16 -- vbuz1=_inc_vbuz1
inc current_movedown_counter
//SEG566 [246] if((byte) play_move_down::key_event#0!=(const byte) KEY_SPACE#0) goto play_move_down::@1 -- vbuaa_neq_vbuc1_then_la1
cmp #KEY_SPACE
bne b1_from_play_move_down
//SEG567 [247] phi from play_move_down to play_move_down::@4 [phi:play_move_down->play_move_down::@4]
b4_from_play_move_down:
jmp b4
//SEG568 play_move_down::@4
b4:
//SEG569 [248] phi from play_move_down::@4 to play_move_down::@1 [phi:play_move_down::@4->play_move_down::@1]
b1_from_b4:
//SEG570 [248] phi (byte) play_move_down::movedown#10 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:play_move_down::@4->play_move_down::@1#0] -- vbuxx=vbuc1
ldx #1
jmp b1
//SEG571 [248] phi from play_move_down to play_move_down::@1 [phi:play_move_down->play_move_down::@1]
b1_from_play_move_down:
//SEG572 [248] phi (byte) play_move_down::movedown#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_move_down->play_move_down::@1#0] -- vbuxx=vbuc1
ldx #0
jmp b1
//SEG573 play_move_down::@1
b1:
//SEG574 [249] call keyboard_event_pressed
//SEG575 [377] phi from play_move_down::@1 to keyboard_event_pressed [phi:play_move_down::@1->keyboard_event_pressed]
keyboard_event_pressed_from_b1:
//SEG576 [377] phi (byte) keyboard_event_pressed::keycode#5 = (const byte) KEY_SPACE#0 [phi:play_move_down::@1->keyboard_event_pressed#0] -- vbuz1=vbuc1
lda #KEY_SPACE
sta keyboard_event_pressed.keycode
jsr keyboard_event_pressed
//SEG577 [250] (byte) keyboard_event_pressed::return#12 ← (byte) keyboard_event_pressed::return#11
jmp b12
//SEG578 play_move_down::@12
b12:
//SEG579 [251] (byte~) play_move_down::$2 ← (byte) keyboard_event_pressed::return#12
//SEG580 [252] if((byte~) play_move_down::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_move_down::@2 -- vbuaa_eq_0_then_la1
cmp #0
beq b2_from_b12
jmp b5
//SEG581 play_move_down::@5
b5:
//SEG582 [253] if((byte) current_movedown_counter#12<(const byte) current_movedown_fast#0) goto play_move_down::@2 -- vbuz1_lt_vbuc1_then_la1
lda current_movedown_counter
cmp #current_movedown_fast
bcc b2_from_b5
jmp b6
//SEG583 play_move_down::@6
b6:
//SEG584 [254] (byte) play_move_down::movedown#2 ← ++ (byte) play_move_down::movedown#10 -- vbuxx=_inc_vbuxx
inx
//SEG585 [255] phi from play_move_down::@12 play_move_down::@5 play_move_down::@6 to play_move_down::@2 [phi:play_move_down::@12/play_move_down::@5/play_move_down::@6->play_move_down::@2]
b2_from_b12:
b2_from_b5:
b2_from_b6:
//SEG586 [255] phi (byte) play_move_down::movedown#7 = (byte) play_move_down::movedown#10 [phi:play_move_down::@12/play_move_down::@5/play_move_down::@6->play_move_down::@2#0] -- register_copy
jmp b2
//SEG587 play_move_down::@2
b2:
//SEG588 [256] if((byte) current_movedown_counter#12<(byte) current_movedown_slow#14) goto play_move_down::@3 -- vbuz1_lt_vbuz2_then_la1
lda current_movedown_counter
cmp current_movedown_slow
bcc b3_from_b2
jmp b7
//SEG589 play_move_down::@7
b7:
//SEG590 [257] (byte) play_move_down::movedown#3 ← ++ (byte) play_move_down::movedown#7 -- vbuxx=_inc_vbuxx
inx
//SEG591 [258] phi from play_move_down::@2 play_move_down::@7 to play_move_down::@3 [phi:play_move_down::@2/play_move_down::@7->play_move_down::@3]
b3_from_b2:
b3_from_b7:
//SEG592 [258] phi (byte) play_move_down::movedown#6 = (byte) play_move_down::movedown#7 [phi:play_move_down::@2/play_move_down::@7->play_move_down::@3#0] -- register_copy
jmp b3
//SEG593 play_move_down::@3
b3:
//SEG594 [259] if((byte) play_move_down::movedown#6==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_move_down::@return -- vbuxx_eq_0_then_la1
cpx #0
beq breturn_from_b3
jmp b8
//SEG595 play_move_down::@8
b8:
//SEG596 [260] (byte) play_collision::ypos#0 ← (byte) current_ypos#100 + (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuz1=vbuz2_plus_1
ldy current_ypos
iny
sty play_collision.ypos
//SEG597 [261] (byte) play_collision::xpos#0 ← (byte) current_xpos#124 -- vbuz1=vbuz2
lda current_xpos
sta play_collision.xpos
//SEG598 [262] (byte) play_collision::orientation#0 ← (byte) current_orientation#13 -- vbuxx=vbuz1
ldx current_orientation
//SEG599 [263] (byte*~) current_piece#100 ← (byte*) current_piece#10 -- pbuz1=pbuz2
lda current_piece
sta current_piece_100
lda current_piece+1
sta current_piece_100+1
//SEG600 [264] call play_collision
//SEG601 [199] phi from play_move_down::@8 to play_collision [phi:play_move_down::@8->play_collision]
play_collision_from_b8:
//SEG602 [199] phi (byte) play_collision::xpos#6 = (byte) play_collision::xpos#0 [phi:play_move_down::@8->play_collision#0] -- register_copy
//SEG603 [199] phi (byte) play_collision::ypos#5 = (byte) play_collision::ypos#0 [phi:play_move_down::@8->play_collision#1] -- register_copy
//SEG604 [199] phi (byte) play_collision::orientation#5 = (byte) play_collision::orientation#0 [phi:play_move_down::@8->play_collision#2] -- register_copy
//SEG605 [199] phi (byte*) current_piece#17 = (byte*~) current_piece#100 [phi:play_move_down::@8->play_collision#3] -- register_copy
jsr play_collision
//SEG606 [265] (byte) play_collision::return#0 ← (byte) play_collision::return#15
jmp b13
//SEG607 play_move_down::@13
b13:
//SEG608 [266] (byte~) play_move_down::$12 ← (byte) play_collision::return#0
//SEG609 [267] if((byte~) play_move_down::$12==(const byte) COLLISION_NONE#0) goto play_move_down::@10 -- vbuaa_eq_vbuc1_then_la1
cmp #COLLISION_NONE
beq b10
//SEG610 [268] phi from play_move_down::@13 to play_move_down::@9 [phi:play_move_down::@13->play_move_down::@9]
b9_from_b13:
jmp b9
//SEG611 play_move_down::@9
b9:
//SEG612 [269] call play_lock_current
jsr play_lock_current
//SEG613 [270] phi from play_move_down::@9 to play_move_down::@14 [phi:play_move_down::@9->play_move_down::@14]
b14_from_b9:
jmp b14
//SEG614 play_move_down::@14
b14:
//SEG615 [271] call play_remove_lines
//SEG616 [337] phi from play_move_down::@14 to play_remove_lines [phi:play_move_down::@14->play_remove_lines]
play_remove_lines_from_b14:
jsr play_remove_lines
//SEG617 [272] (byte) play_remove_lines::return#0 ← (byte) play_remove_lines::removed#8 -- vbuaa=vbuz1
lda play_remove_lines.removed
jmp b15
//SEG618 play_move_down::@15
b15:
//SEG619 [273] (byte) play_move_down::removed#0 ← (byte) play_remove_lines::return#0
//SEG620 [274] (byte) play_update_score::removed#0 ← (byte) play_move_down::removed#0 -- vbuxx=vbuaa
tax
//SEG621 [275] call play_update_score
jsr play_update_score
//SEG622 [276] phi from play_move_down::@15 to play_move_down::@16 [phi:play_move_down::@15->play_move_down::@16]
b16_from_b15:
jmp b16
//SEG623 play_move_down::@16
b16:
//SEG624 [277] call play_spawn_current
//SEG625 [283] phi from play_move_down::@16 to play_spawn_current [phi:play_move_down::@16->play_spawn_current]
play_spawn_current_from_b16:
//SEG626 [283] phi (byte) game_over#65 = (byte) game_over#10 [phi:play_move_down::@16->play_spawn_current#0] -- register_copy
//SEG627 [283] phi (byte) next_piece_idx#17 = (byte) next_piece_idx#10 [phi:play_move_down::@16->play_spawn_current#1] -- register_copy
jsr play_spawn_current
//SEG628 [278] (byte*~) current_piece#106 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$0) -- pbuz1=pptc1_derefidx_vbuz2
ldy play_spawn_current._0
lda PIECES,y
sta current_piece
lda PIECES+1,y
sta current_piece+1
//SEG629 [279] phi from play_move_down::@16 to play_move_down::@11 [phi:play_move_down::@16->play_move_down::@11]
b11_from_b16:
//SEG630 [279] phi (byte) next_piece_idx#30 = (byte) play_spawn_current::piece_idx#2 [phi:play_move_down::@16->play_move_down::@11#0] -- register_copy
//SEG631 [279] phi (byte) game_over#27 = (byte) game_over#52 [phi:play_move_down::@16->play_move_down::@11#1] -- register_copy
//SEG632 [279] phi (byte) current_xpos#43 = (byte) current_xpos#103 [phi:play_move_down::@16->play_move_down::@11#2] -- register_copy
//SEG633 [279] phi (byte*) current_piece_gfx#35 = (byte*) current_piece_gfx#74 [phi:play_move_down::@16->play_move_down::@11#3] -- register_copy
//SEG634 [279] phi (byte) current_orientation#37 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_move_down::@16->play_move_down::@11#4] -- vbuz1=vbuc1
lda #0
sta current_orientation
//SEG635 [279] phi (byte) current_piece_char#29 = (byte) current_piece_char#5 [phi:play_move_down::@16->play_move_down::@11#5] -- register_copy
//SEG636 [279] phi (byte*) current_piece#28 = (byte*~) current_piece#106 [phi:play_move_down::@16->play_move_down::@11#6] -- register_copy
//SEG637 [279] phi (byte) level_bcd#31 = (byte) level_bcd#19 [phi:play_move_down::@16->play_move_down::@11#7] -- register_copy
//SEG638 [279] phi (byte) current_movedown_slow#37 = (byte) current_movedown_slow#23 [phi:play_move_down::@16->play_move_down::@11#8] -- register_copy
//SEG639 [279] phi (byte) level#33 = (byte) level#19 [phi:play_move_down::@16->play_move_down::@11#9] -- register_copy
//SEG640 [279] phi (dword) score_bcd#26 = (dword) score_bcd#16 [phi:play_move_down::@16->play_move_down::@11#10] -- register_copy
//SEG641 [279] phi (word) lines_bcd#26 = (word) lines_bcd#17 [phi:play_move_down::@16->play_move_down::@11#11] -- register_copy
//SEG642 [279] phi (byte) current_ypos#38 = (byte) current_ypos#6 [phi:play_move_down::@16->play_move_down::@11#12] -- register_copy
jmp b11
//SEG643 play_move_down::@11
b11:
//SEG644 [280] phi from play_move_down::@11 to play_move_down::@return [phi:play_move_down::@11->play_move_down::@return]
breturn_from_b11:
//SEG645 [280] phi (byte) next_piece_idx#16 = (byte) next_piece_idx#30 [phi:play_move_down::@11->play_move_down::@return#0] -- register_copy
//SEG646 [280] phi (byte) game_over#15 = (byte) game_over#27 [phi:play_move_down::@11->play_move_down::@return#1] -- register_copy
//SEG647 [280] phi (byte) current_xpos#22 = (byte) current_xpos#43 [phi:play_move_down::@11->play_move_down::@return#2] -- register_copy
//SEG648 [280] phi (byte*) current_piece_gfx#20 = (byte*) current_piece_gfx#35 [phi:play_move_down::@11->play_move_down::@return#3] -- register_copy
//SEG649 [280] phi (byte) current_orientation#20 = (byte) current_orientation#37 [phi:play_move_down::@11->play_move_down::@return#4] -- register_copy
//SEG650 [280] phi (byte) current_piece_char#16 = (byte) current_piece_char#29 [phi:play_move_down::@11->play_move_down::@return#5] -- register_copy
//SEG651 [280] phi (byte*) current_piece#15 = (byte*) current_piece#28 [phi:play_move_down::@11->play_move_down::@return#6] -- register_copy
//SEG652 [280] phi (byte) level_bcd#17 = (byte) level_bcd#31 [phi:play_move_down::@11->play_move_down::@return#7] -- register_copy
//SEG653 [280] phi (byte) current_movedown_slow#21 = (byte) current_movedown_slow#37 [phi:play_move_down::@11->play_move_down::@return#8] -- register_copy
//SEG654 [280] phi (byte) level#17 = (byte) level#33 [phi:play_move_down::@11->play_move_down::@return#9] -- register_copy
//SEG655 [280] phi (dword) score_bcd#14 = (dword) score_bcd#26 [phi:play_move_down::@11->play_move_down::@return#10] -- register_copy
//SEG656 [280] phi (word) lines_bcd#15 = (word) lines_bcd#26 [phi:play_move_down::@11->play_move_down::@return#11] -- register_copy
//SEG657 [280] phi (byte) current_ypos#19 = (byte) current_ypos#38 [phi:play_move_down::@11->play_move_down::@return#12] -- register_copy
//SEG658 [280] phi (byte) current_movedown_counter#14 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_move_down::@11->play_move_down::@return#13] -- vbuz1=vbuc1
lda #0
sta current_movedown_counter
//SEG659 [280] phi (byte) play_move_down::return#3 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:play_move_down::@11->play_move_down::@return#14] -- vbuxx=vbuc1
ldx #1
jmp breturn
//SEG660 [280] phi from play_move_down::@3 to play_move_down::@return [phi:play_move_down::@3->play_move_down::@return]
breturn_from_b3:
//SEG661 [280] phi (byte) next_piece_idx#16 = (byte) next_piece_idx#10 [phi:play_move_down::@3->play_move_down::@return#0] -- register_copy
//SEG662 [280] phi (byte) game_over#15 = (byte) game_over#10 [phi:play_move_down::@3->play_move_down::@return#1] -- register_copy
//SEG663 [280] phi (byte) current_xpos#22 = (byte) current_xpos#124 [phi:play_move_down::@3->play_move_down::@return#2] -- register_copy
//SEG664 [280] phi (byte*) current_piece_gfx#20 = (byte*) current_piece_gfx#114 [phi:play_move_down::@3->play_move_down::@return#3] -- register_copy
//SEG665 [280] phi (byte) current_orientation#20 = (byte) current_orientation#13 [phi:play_move_down::@3->play_move_down::@return#4] -- register_copy
//SEG666 [280] phi (byte) current_piece_char#16 = (byte) current_piece_char#10 [phi:play_move_down::@3->play_move_down::@return#5] -- register_copy
//SEG667 [280] phi (byte*) current_piece#15 = (byte*) current_piece#10 [phi:play_move_down::@3->play_move_down::@return#6] -- register_copy
//SEG668 [280] phi (byte) level_bcd#17 = (byte) level_bcd#11 [phi:play_move_down::@3->play_move_down::@return#7] -- register_copy
//SEG669 [280] phi (byte) current_movedown_slow#21 = (byte) current_movedown_slow#14 [phi:play_move_down::@3->play_move_down::@return#8] -- register_copy
//SEG670 [280] phi (byte) level#17 = (byte) level#10 [phi:play_move_down::@3->play_move_down::@return#9] -- register_copy
//SEG671 [280] phi (dword) score_bcd#14 = (dword) score_bcd#18 [phi:play_move_down::@3->play_move_down::@return#10] -- register_copy
//SEG672 [280] phi (word) lines_bcd#15 = (word) lines_bcd#19 [phi:play_move_down::@3->play_move_down::@return#11] -- register_copy
//SEG673 [280] phi (byte) current_ypos#19 = (byte) current_ypos#100 [phi:play_move_down::@3->play_move_down::@return#12] -- register_copy
//SEG674 [280] phi (byte) current_movedown_counter#14 = (byte) current_movedown_counter#12 [phi:play_move_down::@3->play_move_down::@return#13] -- register_copy
//SEG675 [280] phi (byte) play_move_down::return#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_move_down::@3->play_move_down::@return#14] -- vbuxx=vbuc1
ldx #0
jmp breturn
//SEG676 play_move_down::@return
breturn:
//SEG677 [281] return
rts
//SEG678 play_move_down::@10
b10:
//SEG679 [282] (byte) current_ypos#3 ← ++ (byte) current_ypos#100 -- vbuz1=_inc_vbuz1
inc current_ypos
//SEG680 [279] phi from play_move_down::@10 to play_move_down::@11 [phi:play_move_down::@10->play_move_down::@11]
b11_from_b10:
//SEG681 [279] phi (byte) next_piece_idx#30 = (byte) next_piece_idx#10 [phi:play_move_down::@10->play_move_down::@11#0] -- register_copy
//SEG682 [279] phi (byte) game_over#27 = (byte) game_over#10 [phi:play_move_down::@10->play_move_down::@11#1] -- register_copy
//SEG683 [279] phi (byte) current_xpos#43 = (byte) current_xpos#124 [phi:play_move_down::@10->play_move_down::@11#2] -- register_copy
//SEG684 [279] phi (byte*) current_piece_gfx#35 = (byte*) current_piece_gfx#114 [phi:play_move_down::@10->play_move_down::@11#3] -- register_copy
//SEG685 [279] phi (byte) current_orientation#37 = (byte) current_orientation#13 [phi:play_move_down::@10->play_move_down::@11#4] -- register_copy
//SEG686 [279] phi (byte) current_piece_char#29 = (byte) current_piece_char#10 [phi:play_move_down::@10->play_move_down::@11#5] -- register_copy
//SEG687 [279] phi (byte*) current_piece#28 = (byte*) current_piece#10 [phi:play_move_down::@10->play_move_down::@11#6] -- register_copy
//SEG688 [279] phi (byte) level_bcd#31 = (byte) level_bcd#11 [phi:play_move_down::@10->play_move_down::@11#7] -- register_copy
//SEG689 [279] phi (byte) current_movedown_slow#37 = (byte) current_movedown_slow#14 [phi:play_move_down::@10->play_move_down::@11#8] -- register_copy
//SEG690 [279] phi (byte) level#33 = (byte) level#10 [phi:play_move_down::@10->play_move_down::@11#9] -- register_copy
//SEG691 [279] phi (dword) score_bcd#26 = (dword) score_bcd#18 [phi:play_move_down::@10->play_move_down::@11#10] -- register_copy
//SEG692 [279] phi (word) lines_bcd#26 = (word) lines_bcd#19 [phi:play_move_down::@10->play_move_down::@11#11] -- register_copy
//SEG693 [279] phi (byte) current_ypos#38 = (byte) current_ypos#3 [phi:play_move_down::@10->play_move_down::@11#12] -- register_copy
jmp b11
}
//SEG694 play_spawn_current
// Spawn a new piece
// Moves the next piece into the current and spawns a new next piece
play_spawn_current: {
.label _0 = 4
.label piece_idx = $21
//SEG695 [284] (byte) play_spawn_current::current_piece_idx#0 ← (byte) next_piece_idx#17 -- vbuxx=vbuz1
// Move next piece into current
ldx next_piece_idx
//SEG696 [285] (byte~) play_spawn_current::$0 ← (byte) play_spawn_current::current_piece_idx#0 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuz1=vbuxx_rol_1
txa
asl
sta _0
//SEG697 [286] (byte) current_piece_char#5 ← *((const byte[]) PIECES_CHARS#0 + (byte) play_spawn_current::current_piece_idx#0) -- vbuz1=pbuc1_derefidx_vbuxx
lda PIECES_CHARS,x
sta current_piece_char
//SEG698 [287] (byte*) current_piece_gfx#74 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$0) -- pbuz1=pptc1_derefidx_vbuz2
ldy _0
lda PIECES,y
sta current_piece_gfx
lda PIECES+1,y
sta current_piece_gfx+1
//SEG699 [288] (byte) current_xpos#103 ← *((const byte[]) PIECES_START_X#0 + (byte) play_spawn_current::current_piece_idx#0) -- vbuz1=pbuc1_derefidx_vbuxx
lda PIECES_START_X,x
sta current_xpos
//SEG700 [289] (byte) current_ypos#6 ← *((const byte[]) PIECES_START_Y#0 + (byte) play_spawn_current::current_piece_idx#0) -- vbuz1=pbuc1_derefidx_vbuxx
lda PIECES_START_Y,x
sta current_ypos
//SEG701 [290] (byte) play_collision::xpos#4 ← (byte) current_xpos#103 -- vbuz1=vbuz2
lda current_xpos
sta play_collision.xpos
//SEG702 [291] (byte) play_collision::ypos#4 ← (byte) current_ypos#6 -- vbuz1=vbuz2
lda current_ypos
sta play_collision.ypos
//SEG703 [292] (byte*~) current_piece#104 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$0) -- pbuz1=pptc1_derefidx_vbuz2
ldy _0
lda PIECES,y
sta current_piece_104
lda PIECES+1,y
sta current_piece_104+1
//SEG704 [293] call play_collision
//SEG705 [199] phi from play_spawn_current to play_collision [phi:play_spawn_current->play_collision]
play_collision_from_play_spawn_current:
//SEG706 [199] phi (byte) play_collision::xpos#6 = (byte) play_collision::xpos#4 [phi:play_spawn_current->play_collision#0] -- register_copy
//SEG707 [199] phi (byte) play_collision::ypos#5 = (byte) play_collision::ypos#4 [phi:play_spawn_current->play_collision#1] -- register_copy
//SEG708 [199] phi (byte) play_collision::orientation#5 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_spawn_current->play_collision#2] -- vbuxx=vbuc1
ldx #0
//SEG709 [199] phi (byte*) current_piece#17 = (byte*~) current_piece#104 [phi:play_spawn_current->play_collision#3] -- register_copy
jsr play_collision
//SEG710 [294] (byte) play_collision::return#10 ← (byte) play_collision::return#15
jmp b4
//SEG711 play_spawn_current::@4
b4:
//SEG712 [295] (byte~) play_spawn_current::$2 ← (byte) play_collision::return#10
//SEG713 [296] if((byte~) play_spawn_current::$2!=(const byte) COLLISION_PLAYFIELD#0) goto play_spawn_current::@5 -- vbuaa_neq_vbuc1_then_la1
cmp #COLLISION_PLAYFIELD
bne b5_from_b4
//SEG714 [297] phi from play_spawn_current::@4 to play_spawn_current::@1 [phi:play_spawn_current::@4->play_spawn_current::@1]
b1_from_b4:
//SEG715 [297] phi (byte) game_over#52 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:play_spawn_current::@4->play_spawn_current::@1#0] -- vbuz1=vbuc1
lda #1
sta game_over
jmp b1
//SEG716 play_spawn_current::@1
b1:
//SEG717 [298] phi from play_spawn_current::@1 to play_spawn_current::@2 [phi:play_spawn_current::@1->play_spawn_current::@2]
b2_from_b1:
//SEG718 [298] phi (byte) play_spawn_current::piece_idx#2 = (byte/signed byte/word/signed word/dword/signed dword) 7 [phi:play_spawn_current::@1->play_spawn_current::@2#0] -- vbuz1=vbuc1
lda #7
sta piece_idx
jmp b2
//SEG719 play_spawn_current::@2
b2:
//SEG720 [299] if((byte) play_spawn_current::piece_idx#2==(byte/signed byte/word/signed word/dword/signed dword) 7) goto play_spawn_current::sid_rnd1 -- vbuz1_eq_vbuc1_then_la1
lda #7
cmp piece_idx
beq sid_rnd1
jmp breturn
//SEG721 play_spawn_current::@return
breturn:
//SEG722 [300] return
rts
//SEG723 play_spawn_current::sid_rnd1
sid_rnd1:
//SEG724 [301] (byte) play_spawn_current::sid_rnd1_return#0 ← *((const byte*) SID_VOICE3_OSC#0) -- vbuaa=_deref_pbuc1
lda SID_VOICE3_OSC
jmp b3
//SEG725 play_spawn_current::@3
b3:
//SEG726 [302] (byte) play_spawn_current::piece_idx#1 ← (byte) play_spawn_current::sid_rnd1_return#0 & (byte/signed byte/word/signed word/dword/signed dword) 7 -- vbuz1=vbuaa_band_vbuc1
and #7
sta piece_idx
//SEG727 [298] phi from play_spawn_current::@3 to play_spawn_current::@2 [phi:play_spawn_current::@3->play_spawn_current::@2]
b2_from_b3:
//SEG728 [298] phi (byte) play_spawn_current::piece_idx#2 = (byte) play_spawn_current::piece_idx#1 [phi:play_spawn_current::@3->play_spawn_current::@2#0] -- register_copy
jmp b2
//SEG729 [303] phi from play_spawn_current::@4 to play_spawn_current::@5 [phi:play_spawn_current::@4->play_spawn_current::@5]
b5_from_b4:
jmp b5
//SEG730 play_spawn_current::@5
b5:
//SEG731 [297] phi from play_spawn_current::@5 to play_spawn_current::@1 [phi:play_spawn_current::@5->play_spawn_current::@1]
b1_from_b5:
//SEG732 [297] phi (byte) game_over#52 = (byte) game_over#65 [phi:play_spawn_current::@5->play_spawn_current::@1#0] -- register_copy
jmp b1
}
//SEG733 play_update_score
// Update the score based on the number of lines removed
// play_update_score(byte register(X) removed)
play_update_score: {
.label lines_before = 4
.label add_bcd = $2c
//SEG734 [304] if((byte) play_update_score::removed#0==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_update_score::@return -- vbuxx_eq_0_then_la1
cpx #0
beq breturn_from_play_update_score
jmp b1
//SEG735 play_update_score::@1
b1:
//SEG736 [305] (byte~) play_update_score::$2 ← < (word) lines_bcd#19 -- vbuaa=_lo_vwuz1
lda lines_bcd
//SEG737 [306] (byte) play_update_score::lines_before#0 ← (byte~) play_update_score::$2 & (byte/word/signed word/dword/signed dword) $f0 -- vbuz1=vbuaa_band_vbuc1
and #$f0
sta lines_before
//SEG738 [307] (byte~) play_update_score::$4 ← (byte) play_update_score::removed#0 << (byte/signed byte/word/signed word/dword/signed dword) 2 -- vbuaa=vbuxx_rol_2
txa
asl
asl
//SEG739 [308] (dword) play_update_score::add_bcd#0 ← *((const dword[5]) score_add_bcd#0 + (byte~) play_update_score::$4) -- vduz1=pduc1_derefidx_vbuaa
tay
lda score_add_bcd,y
sta add_bcd
lda score_add_bcd+1,y
sta add_bcd+1
lda score_add_bcd+2,y
sta add_bcd+2
lda score_add_bcd+3,y
sta add_bcd+3
//SEG740 asm { sed }
sed
//SEG741 [310] (word) lines_bcd#30 ← (word) lines_bcd#19 + (byte) play_update_score::removed#0 -- vwuz1=vwuz1_plus_vbuxx
txa
clc
adc lines_bcd
sta lines_bcd
bcc !+
inc lines_bcd+1
!:
//SEG742 [311] (dword) score_bcd#30 ← (dword) score_bcd#18 + (dword) play_update_score::add_bcd#0 -- vduz1=vduz1_plus_vduz2
lda score_bcd
clc
adc add_bcd
sta score_bcd
lda score_bcd+1
adc add_bcd+1
sta score_bcd+1
lda score_bcd+2
adc add_bcd+2
sta score_bcd+2
lda score_bcd+3
adc add_bcd+3
sta score_bcd+3
//SEG743 asm { cld }
cld
//SEG744 [313] (byte~) play_update_score::$5 ← < (word) lines_bcd#30 -- vbuaa=_lo_vwuz1
lda lines_bcd
//SEG745 [314] (byte) play_update_score::lines_after#0 ← (byte~) play_update_score::$5 & (byte/word/signed word/dword/signed dword) $f0 -- vbuaa=vbuaa_band_vbuc1
and #$f0
//SEG746 [315] if((byte) play_update_score::lines_before#0==(byte) play_update_score::lines_after#0) goto play_update_score::@return -- vbuz1_eq_vbuaa_then_la1
cmp lines_before
beq breturn_from_b1
//SEG747 [316] phi from play_update_score::@1 to play_update_score::@2 [phi:play_update_score::@1->play_update_score::@2]
b2_from_b1:
jmp b2
//SEG748 play_update_score::@2
b2:
//SEG749 [317] call play_increase_level
jsr play_increase_level
//SEG750 [318] phi from play_update_score play_update_score::@1 play_update_score::@2 to play_update_score::@return [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return]
breturn_from_play_update_score:
breturn_from_b1:
breturn_from_b2:
//SEG751 [318] phi (byte) level_bcd#19 = (byte) level_bcd#11 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#0] -- register_copy
//SEG752 [318] phi (byte) current_movedown_slow#23 = (byte) current_movedown_slow#14 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#1] -- register_copy
//SEG753 [318] phi (byte) level#19 = (byte) level#10 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#2] -- register_copy
//SEG754 [318] phi (dword) score_bcd#16 = (dword) score_bcd#18 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#3] -- register_copy
//SEG755 [318] phi (word) lines_bcd#17 = (word) lines_bcd#19 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#4] -- register_copy
jmp breturn
//SEG756 play_update_score::@return
breturn:
//SEG757 [319] return
rts
}
//SEG758 play_increase_level
// Increase the level
play_increase_level: {
//SEG759 [320] (byte) level#21 ← ++ (byte) level#10 -- vbuz1=_inc_vbuz1
inc level
//SEG760 [321] if((byte) level#21>=(byte/signed byte/word/signed word/dword/signed dword) $1d+(byte/signed byte/word/signed word/dword/signed dword) 1) goto play_increase_level::@1 -- vbuz1_ge_vbuc1_then_la1
// Update speed of moving tetrominos down
lda level
cmp #$1d+1
bcs b1_from_play_increase_level
jmp b3
//SEG761 play_increase_level::@3
b3:
//SEG762 [322] (byte) current_movedown_slow#10 ← *((const byte[]) MOVEDOWN_SLOW_SPEEDS#0 + (byte) level#21) -- vbuz1=pbuc1_derefidx_vbuz2
ldy level
lda MOVEDOWN_SLOW_SPEEDS,y
sta current_movedown_slow
//SEG763 [323] phi from play_increase_level::@3 to play_increase_level::@1 [phi:play_increase_level::@3->play_increase_level::@1]
b1_from_b3:
//SEG764 [323] phi (byte) current_movedown_slow#69 = (byte) current_movedown_slow#10 [phi:play_increase_level::@3->play_increase_level::@1#0] -- register_copy
jmp b1
//SEG765 [323] phi from play_increase_level to play_increase_level::@1 [phi:play_increase_level->play_increase_level::@1]
b1_from_play_increase_level:
//SEG766 [323] phi (byte) current_movedown_slow#69 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:play_increase_level->play_increase_level::@1#0] -- vbuz1=vbuc1
lda #1
sta current_movedown_slow
jmp b1
//SEG767 play_increase_level::@1
b1:
//SEG768 [324] (byte) level_bcd#21 ← ++ (byte) level_bcd#11 -- vbuz1=_inc_vbuz1
inc level_bcd
//SEG769 [325] (byte~) play_increase_level::$1 ← (byte) level_bcd#21 & (byte/signed byte/word/signed word/dword/signed dword) $f -- vbuaa=vbuz1_band_vbuc1
lda #$f
and level_bcd
//SEG770 [326] if((byte~) play_increase_level::$1!=(byte/signed byte/word/signed word/dword/signed dword) $a) goto play_increase_level::@2 -- vbuaa_neq_vbuc1_then_la1
cmp #$a
bne b2_from_b1
jmp b4
//SEG771 play_increase_level::@4
b4:
//SEG772 [327] (byte) level_bcd#8 ← (byte) level_bcd#21 + (byte/signed byte/word/signed word/dword/signed dword) 6 -- vbuz1=vbuz1_plus_vbuc1
// If level low nybble hits $a change to $10
lax level_bcd
axs #-[6]
stx level_bcd
//SEG773 [328] phi from play_increase_level::@1 play_increase_level::@4 to play_increase_level::@2 [phi:play_increase_level::@1/play_increase_level::@4->play_increase_level::@2]
b2_from_b1:
b2_from_b4:
//SEG774 [328] phi (byte) level_bcd#64 = (byte) level_bcd#21 [phi:play_increase_level::@1/play_increase_level::@4->play_increase_level::@2#0] -- register_copy
jmp b2
//SEG775 play_increase_level::@2
b2:
//SEG776 asm { sed }
// Increase the score values gained
sed
//SEG777 [330] phi from play_increase_level::@2 to play_increase_level::@5 [phi:play_increase_level::@2->play_increase_level::@5]
b5_from_b2:
//SEG778 [330] phi (byte) play_increase_level::b#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_increase_level::@2->play_increase_level::@5#0] -- vbuxx=vbuc1
ldx #0
jmp b5
//SEG779 [330] phi from play_increase_level::@5 to play_increase_level::@5 [phi:play_increase_level::@5->play_increase_level::@5]
b5_from_b5:
//SEG780 [330] phi (byte) play_increase_level::b#2 = (byte) play_increase_level::b#1 [phi:play_increase_level::@5->play_increase_level::@5#0] -- register_copy
jmp b5
//SEG781 play_increase_level::@5
b5:
//SEG782 [331] (byte) play_increase_level::b4#0 ← (byte) play_increase_level::b#2 << (byte/signed byte/word/signed word/dword/signed dword) 2 -- vbuaa=vbuxx_rol_2
txa
asl
asl
//SEG783 [332] *((const dword[5]) score_add_bcd#0 + (byte) play_increase_level::b4#0) ← *((const dword[5]) score_add_bcd#0 + (byte) play_increase_level::b4#0) + *((const dword[]) SCORE_BASE_BCD#0 + (byte) play_increase_level::b4#0) -- pduc1_derefidx_vbuaa=pduc1_derefidx_vbuaa_plus_pduc2_derefidx_vbuaa
tay
clc
lda score_add_bcd,y
adc SCORE_BASE_BCD,y
sta score_add_bcd,y
lda score_add_bcd+1,y
adc SCORE_BASE_BCD+1,y
sta score_add_bcd+1,y
lda score_add_bcd+2,y
adc SCORE_BASE_BCD+2,y
sta score_add_bcd+2,y
lda score_add_bcd+3,y
adc SCORE_BASE_BCD+3,y
sta score_add_bcd+3,y
//SEG784 [333] (byte) play_increase_level::b#1 ← ++ (byte) play_increase_level::b#2 -- vbuxx=_inc_vbuxx
inx
//SEG785 [334] if((byte) play_increase_level::b#1!=(byte/signed byte/word/signed word/dword/signed dword) 5) goto play_increase_level::@5 -- vbuxx_neq_vbuc1_then_la1
cpx #5
bne b5_from_b5
jmp b6
//SEG786 play_increase_level::@6
b6:
//SEG787 asm { cld }
cld
jmp breturn
//SEG788 play_increase_level::@return
breturn:
//SEG789 [336] return
rts
}
//SEG790 play_remove_lines
// Look through the playfield for lines - and remove any lines found
// Utilizes two cursors on the playfield - one reading cells and one writing cells
// Whenever a full line is detected the writing cursor is instructed to write to the same line once more.
// Returns the number of lines removed
play_remove_lines: {
.label c = $c
.label x = $a
.label y = 4
.label removed = 9
.label full = $b
//SEG791 [338] phi from play_remove_lines to play_remove_lines::@1 [phi:play_remove_lines->play_remove_lines::@1]
b1_from_play_remove_lines:
//SEG792 [338] phi (byte) play_remove_lines::removed#11 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_remove_lines->play_remove_lines::@1#0] -- vbuz1=vbuc1
lda #0
sta removed
//SEG793 [338] phi (byte) play_remove_lines::y#8 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_remove_lines->play_remove_lines::@1#1] -- vbuz1=vbuc1
lda #0
sta y
//SEG794 [338] phi (byte) play_remove_lines::w#12 = (const byte) PLAYFIELD_LINES#0*(const byte) PLAYFIELD_COLS#0-(byte/signed byte/word/signed word/dword/signed dword) 1 [phi:play_remove_lines->play_remove_lines::@1#2] -- vbuxx=vbuc1
ldx #PLAYFIELD_LINES*PLAYFIELD_COLS-1
//SEG795 [338] phi (byte) play_remove_lines::r#3 = (const byte) PLAYFIELD_LINES#0*(const byte) PLAYFIELD_COLS#0-(byte/signed byte/word/signed word/dword/signed dword) 1 [phi:play_remove_lines->play_remove_lines::@1#3] -- vbuyy=vbuc1
ldy #PLAYFIELD_LINES*PLAYFIELD_COLS-1
jmp b1
// Read all lines and rewrite them
//SEG796 [338] phi from play_remove_lines::@6 to play_remove_lines::@1 [phi:play_remove_lines::@6->play_remove_lines::@1]
b1_from_b6:
//SEG797 [338] phi (byte) play_remove_lines::removed#11 = (byte) play_remove_lines::removed#8 [phi:play_remove_lines::@6->play_remove_lines::@1#0] -- register_copy
//SEG798 [338] phi (byte) play_remove_lines::y#8 = (byte) play_remove_lines::y#1 [phi:play_remove_lines::@6->play_remove_lines::@1#1] -- register_copy
//SEG799 [338] phi (byte) play_remove_lines::w#12 = (byte) play_remove_lines::w#11 [phi:play_remove_lines::@6->play_remove_lines::@1#2] -- register_copy
//SEG800 [338] phi (byte) play_remove_lines::r#3 = (byte) play_remove_lines::r#1 [phi:play_remove_lines::@6->play_remove_lines::@1#3] -- register_copy
jmp b1
//SEG801 play_remove_lines::@1
b1:
//SEG802 [339] phi from play_remove_lines::@1 to play_remove_lines::@2 [phi:play_remove_lines::@1->play_remove_lines::@2]
b2_from_b1:
//SEG803 [339] phi (byte) play_remove_lines::full#4 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:play_remove_lines::@1->play_remove_lines::@2#0] -- vbuz1=vbuc1
lda #1
sta full
//SEG804 [339] phi (byte) play_remove_lines::x#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_remove_lines::@1->play_remove_lines::@2#1] -- vbuz1=vbuc1
lda #0
sta x
//SEG805 [339] phi (byte) play_remove_lines::w#4 = (byte) play_remove_lines::w#12 [phi:play_remove_lines::@1->play_remove_lines::@2#2] -- register_copy
//SEG806 [339] phi (byte) play_remove_lines::r#2 = (byte) play_remove_lines::r#3 [phi:play_remove_lines::@1->play_remove_lines::@2#3] -- register_copy
jmp b2
//SEG807 [339] phi from play_remove_lines::@3 to play_remove_lines::@2 [phi:play_remove_lines::@3->play_remove_lines::@2]
b2_from_b3:
//SEG808 [339] phi (byte) play_remove_lines::full#4 = (byte) play_remove_lines::full#2 [phi:play_remove_lines::@3->play_remove_lines::@2#0] -- register_copy
//SEG809 [339] phi (byte) play_remove_lines::x#2 = (byte) play_remove_lines::x#1 [phi:play_remove_lines::@3->play_remove_lines::@2#1] -- register_copy
//SEG810 [339] phi (byte) play_remove_lines::w#4 = (byte) play_remove_lines::w#1 [phi:play_remove_lines::@3->play_remove_lines::@2#2] -- register_copy
//SEG811 [339] phi (byte) play_remove_lines::r#2 = (byte) play_remove_lines::r#1 [phi:play_remove_lines::@3->play_remove_lines::@2#3] -- register_copy
jmp b2
//SEG812 play_remove_lines::@2
b2:
//SEG813 [340] (byte) play_remove_lines::c#0 ← *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::r#2) -- vbuz1=pbuc1_derefidx_vbuyy
lda playfield,y
sta c
//SEG814 [341] (byte) play_remove_lines::r#1 ← -- (byte) play_remove_lines::r#2 -- vbuyy=_dec_vbuyy
dey
//SEG815 [342] if((byte) play_remove_lines::c#0!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_remove_lines::@9 -- vbuz1_neq_0_then_la1
lda c
cmp #0
bne b9_from_b2
//SEG816 [343] phi from play_remove_lines::@2 to play_remove_lines::@3 [phi:play_remove_lines::@2->play_remove_lines::@3]
b3_from_b2:
//SEG817 [343] phi (byte) play_remove_lines::full#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_remove_lines::@2->play_remove_lines::@3#0] -- vbuz1=vbuc1
lda #0
sta full
jmp b3
//SEG818 play_remove_lines::@3
b3:
//SEG819 [344] *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::w#4) ← (byte) play_remove_lines::c#0 -- pbuc1_derefidx_vbuxx=vbuz1
lda c
sta playfield,x
//SEG820 [345] (byte) play_remove_lines::w#1 ← -- (byte) play_remove_lines::w#4 -- vbuxx=_dec_vbuxx
dex
//SEG821 [346] (byte) play_remove_lines::x#1 ← ++ (byte) play_remove_lines::x#2 -- vbuz1=_inc_vbuz1
inc x
//SEG822 [347] if((byte) play_remove_lines::x#1!=(const byte) PLAYFIELD_COLS#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto play_remove_lines::@2 -- vbuz1_neq_vbuc1_then_la1
lda #PLAYFIELD_COLS-1+1
cmp x
bne b2_from_b3
jmp b4
//SEG823 play_remove_lines::@4
b4:
//SEG824 [348] if((byte) play_remove_lines::full#2!=(byte/signed byte/word/signed word/dword/signed dword) 1) goto play_remove_lines::@6 -- vbuz1_neq_vbuc1_then_la1
lda #1
cmp full
bne b6_from_b4
jmp b5
//SEG825 play_remove_lines::@5
b5:
//SEG826 [349] (byte) play_remove_lines::w#2 ← (byte) play_remove_lines::w#1 + (const byte) PLAYFIELD_COLS#0 -- vbuxx=vbuxx_plus_vbuc1
txa
axs #-[PLAYFIELD_COLS]
//SEG827 [350] (byte) play_remove_lines::removed#1 ← ++ (byte) play_remove_lines::removed#11 -- vbuz1=_inc_vbuz1
inc removed
//SEG828 [351] phi from play_remove_lines::@4 play_remove_lines::@5 to play_remove_lines::@6 [phi:play_remove_lines::@4/play_remove_lines::@5->play_remove_lines::@6]
b6_from_b4:
b6_from_b5:
//SEG829 [351] phi (byte) play_remove_lines::removed#8 = (byte) play_remove_lines::removed#11 [phi:play_remove_lines::@4/play_remove_lines::@5->play_remove_lines::@6#0] -- register_copy
//SEG830 [351] phi (byte) play_remove_lines::w#11 = (byte) play_remove_lines::w#1 [phi:play_remove_lines::@4/play_remove_lines::@5->play_remove_lines::@6#1] -- register_copy
jmp b6
//SEG831 play_remove_lines::@6
b6:
//SEG832 [352] (byte) play_remove_lines::y#1 ← ++ (byte) play_remove_lines::y#8 -- vbuz1=_inc_vbuz1
inc y
//SEG833 [353] if((byte) play_remove_lines::y#1!=(const byte) PLAYFIELD_LINES#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto play_remove_lines::@1 -- vbuz1_neq_vbuc1_then_la1
lda #PLAYFIELD_LINES-1+1
cmp y
bne b1_from_b6
//SEG834 [354] phi from play_remove_lines::@6 play_remove_lines::@8 to play_remove_lines::@7 [phi:play_remove_lines::@6/play_remove_lines::@8->play_remove_lines::@7]
b7_from_b6:
b7_from_b8:
//SEG835 [354] phi (byte) play_remove_lines::w#6 = (byte) play_remove_lines::w#11 [phi:play_remove_lines::@6/play_remove_lines::@8->play_remove_lines::@7#0] -- register_copy
jmp b7
// Write zeros in the rest of the lines
//SEG836 play_remove_lines::@7
b7:
//SEG837 [355] if((byte) play_remove_lines::w#6!=(byte/word/signed word/dword/signed dword) $ff) goto play_remove_lines::@8 -- vbuxx_neq_vbuc1_then_la1
cpx #$ff
bne b8
jmp breturn
//SEG838 play_remove_lines::@return
breturn:
//SEG839 [356] return
rts
//SEG840 play_remove_lines::@8
b8:
//SEG841 [357] *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::w#6) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- pbuc1_derefidx_vbuxx=vbuc2
lda #0
sta playfield,x
//SEG842 [358] (byte) play_remove_lines::w#3 ← -- (byte) play_remove_lines::w#6 -- vbuxx=_dec_vbuxx
dex
jmp b7_from_b8
//SEG843 [359] phi from play_remove_lines::@2 to play_remove_lines::@9 [phi:play_remove_lines::@2->play_remove_lines::@9]
b9_from_b2:
jmp b9
//SEG844 play_remove_lines::@9
b9:
//SEG845 [343] phi from play_remove_lines::@9 to play_remove_lines::@3 [phi:play_remove_lines::@9->play_remove_lines::@3]
b3_from_b9:
//SEG846 [343] phi (byte) play_remove_lines::full#2 = (byte) play_remove_lines::full#4 [phi:play_remove_lines::@9->play_remove_lines::@3#0] -- register_copy
jmp b3
}
//SEG847 play_lock_current
// Lock the current piece onto the playfield
play_lock_current: {
.label ypos2 = $10
.label playfield_line = 5
.label col = $a
.label i = $b
.label l = 4
.label i_2 = 9
.label i_3 = 9
.label i_7 = 9
.label i_9 = 9
//SEG848 [360] (byte) play_lock_current::ypos2#0 ← (byte) current_ypos#100 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuz1=vbuz1_rol_1
asl ypos2
//SEG849 [361] phi from play_lock_current to play_lock_current::@1 [phi:play_lock_current->play_lock_current::@1]
b1_from_play_lock_current:
//SEG850 [361] phi (byte) play_lock_current::l#6 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_lock_current->play_lock_current::@1#0] -- vbuz1=vbuc1
lda #0
sta l
//SEG851 [361] phi (byte) play_lock_current::i#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_lock_current->play_lock_current::@1#1] -- vbuz1=vbuc1
lda #0
sta i_3
//SEG852 [361] phi (byte) play_lock_current::ypos2#2 = (byte) play_lock_current::ypos2#0 [phi:play_lock_current->play_lock_current::@1#2] -- register_copy
jmp b1
//SEG853 play_lock_current::@1
b1:
//SEG854 [362] (byte*) play_lock_current::playfield_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte) play_lock_current::ypos2#2) -- pbuz1=pptc1_derefidx_vbuz2
ldy ypos2
lda playfield_lines,y
sta playfield_line
lda playfield_lines+1,y
sta playfield_line+1
//SEG855 [363] (byte) play_lock_current::col#0 ← (byte) current_xpos#124 -- vbuz1=vbuz2
lda current_xpos
sta col
//SEG856 [364] phi from play_lock_current::@1 to play_lock_current::@2 [phi:play_lock_current::@1->play_lock_current::@2]
b2_from_b1:
//SEG857 [364] phi (byte) play_lock_current::c#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_lock_current::@1->play_lock_current::@2#0] -- vbuxx=vbuc1
ldx #0
//SEG858 [364] phi (byte) play_lock_current::col#2 = (byte) play_lock_current::col#0 [phi:play_lock_current::@1->play_lock_current::@2#1] -- register_copy
//SEG859 [364] phi (byte) play_lock_current::i#2 = (byte) play_lock_current::i#3 [phi:play_lock_current::@1->play_lock_current::@2#2] -- register_copy
jmp b2
//SEG860 play_lock_current::@2
b2:
//SEG861 [365] (byte) play_lock_current::i#1 ← ++ (byte) play_lock_current::i#2 -- vbuz1=_inc_vbuz2
ldy i_2
iny
sty i
//SEG862 [366] if(*((byte*) current_piece_gfx#114 + (byte) play_lock_current::i#2)==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_lock_current::@3 -- pbuz1_derefidx_vbuz2_eq_0_then_la1
ldy i_2
lda (current_piece_gfx),y
cmp #0
beq b3
jmp b4
//SEG863 play_lock_current::@4
b4:
//SEG864 [367] *((byte*) play_lock_current::playfield_line#0 + (byte) play_lock_current::col#2) ← (byte) current_piece_char#10 -- pbuz1_derefidx_vbuz2=vbuz3
lda current_piece_char
ldy col
sta (playfield_line),y
jmp b3
//SEG865 play_lock_current::@3
b3:
//SEG866 [368] (byte) play_lock_current::col#1 ← ++ (byte) play_lock_current::col#2 -- vbuz1=_inc_vbuz1
inc col
//SEG867 [369] (byte) play_lock_current::c#1 ← ++ (byte) play_lock_current::c#2 -- vbuxx=_inc_vbuxx
inx
//SEG868 [370] if((byte) play_lock_current::c#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto play_lock_current::@7 -- vbuxx_neq_vbuc1_then_la1
cpx #4
bne b7
jmp b5
//SEG869 play_lock_current::@5
b5:
//SEG870 [371] (byte) play_lock_current::ypos2#1 ← (byte) play_lock_current::ypos2#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 -- vbuz1=vbuz1_plus_2
lda ypos2
clc
adc #2
sta ypos2
//SEG871 [372] (byte) play_lock_current::l#1 ← ++ (byte) play_lock_current::l#6 -- vbuz1=_inc_vbuz1
inc l
//SEG872 [373] if((byte) play_lock_current::l#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto play_lock_current::@6 -- vbuz1_neq_vbuc1_then_la1
lda #4
cmp l
bne b6
jmp breturn
//SEG873 play_lock_current::@return
breturn:
//SEG874 [374] return
rts
//SEG875 play_lock_current::@6
b6:
//SEG876 [375] (byte~) play_lock_current::i#7 ← (byte) play_lock_current::i#1 -- vbuz1=vbuz2
lda i
sta i_7
//SEG877 [361] phi from play_lock_current::@6 to play_lock_current::@1 [phi:play_lock_current::@6->play_lock_current::@1]
b1_from_b6:
//SEG878 [361] phi (byte) play_lock_current::l#6 = (byte) play_lock_current::l#1 [phi:play_lock_current::@6->play_lock_current::@1#0] -- register_copy
//SEG879 [361] phi (byte) play_lock_current::i#3 = (byte~) play_lock_current::i#7 [phi:play_lock_current::@6->play_lock_current::@1#1] -- register_copy
//SEG880 [361] phi (byte) play_lock_current::ypos2#2 = (byte) play_lock_current::ypos2#1 [phi:play_lock_current::@6->play_lock_current::@1#2] -- register_copy
jmp b1
//SEG881 play_lock_current::@7
b7:
//SEG882 [376] (byte~) play_lock_current::i#9 ← (byte) play_lock_current::i#1 -- vbuz1=vbuz2
lda i
sta i_9
//SEG883 [364] phi from play_lock_current::@7 to play_lock_current::@2 [phi:play_lock_current::@7->play_lock_current::@2]
b2_from_b7:
//SEG884 [364] phi (byte) play_lock_current::c#2 = (byte) play_lock_current::c#1 [phi:play_lock_current::@7->play_lock_current::@2#0] -- register_copy
//SEG885 [364] phi (byte) play_lock_current::col#2 = (byte) play_lock_current::col#1 [phi:play_lock_current::@7->play_lock_current::@2#1] -- register_copy
//SEG886 [364] phi (byte) play_lock_current::i#2 = (byte~) play_lock_current::i#9 [phi:play_lock_current::@7->play_lock_current::@2#2] -- register_copy
jmp b2
}
//SEG887 keyboard_event_pressed
// Determine if a specific key is currently pressed based on the last keyboard_event_scan()
// Returns 0 is not pressed and non-0 if pressed
// keyboard_event_pressed(byte zeropage(9) keycode)
keyboard_event_pressed: {
.label row_bits = $a
.label keycode = 9
//SEG888 [378] (byte~) keyboard_event_pressed::$0 ← (byte) keyboard_event_pressed::keycode#5 >> (byte/signed byte/word/signed word/dword/signed dword) 3 -- vbuaa=vbuz1_ror_3
lda keycode
lsr
lsr
lsr
//SEG889 [379] (byte) keyboard_event_pressed::row_bits#0 ← *((const byte[8]) keyboard_scan_values#0 + (byte~) keyboard_event_pressed::$0) -- vbuz1=pbuc1_derefidx_vbuaa
tay
lda keyboard_scan_values,y
sta row_bits
//SEG890 [380] (byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#5 & (byte/signed byte/word/signed word/dword/signed dword) 7 -- vbuaa=vbuz1_band_vbuc1
lda #7
and keycode
//SEG891 [381] (byte) keyboard_event_pressed::return#11 ← (byte) keyboard_event_pressed::row_bits#0 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte~) keyboard_event_pressed::$1) -- vbuaa=vbuz1_band_pbuc1_derefidx_vbuaa
tay
lda keyboard_matrix_col_bitmask,y
and row_bits
jmp breturn
//SEG892 keyboard_event_pressed::@return
breturn:
//SEG893 [382] return
rts
}
//SEG894 keyboard_event_get
// Get the next event from the keyboard event buffer.
// Returns $ff if there is no event waiting. As all events are <$7f it is enough to examine bit 7 when determining if there is any event to process.
// The buffer is filled by keyboard_event_scan()
keyboard_event_get: {
//SEG895 [383] if((byte) keyboard_events_size#13==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_get::@return -- vbuz1_eq_0_then_la1
lda keyboard_events_size
cmp #0
beq breturn_from_keyboard_event_get
jmp b1
//SEG896 keyboard_event_get::@1
b1:
//SEG897 [384] (byte) keyboard_events_size#4 ← -- (byte) keyboard_events_size#13 -- vbuz1=_dec_vbuz1
dec keyboard_events_size
//SEG898 [385] (byte) keyboard_event_get::return#1 ← *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#4) -- vbuxx=pbuc1_derefidx_vbuz1
ldy keyboard_events_size
ldx keyboard_events,y
//SEG899 [386] phi from keyboard_event_get::@1 to keyboard_event_get::@return [phi:keyboard_event_get::@1->keyboard_event_get::@return]
breturn_from_b1:
//SEG900 [386] phi (byte) keyboard_events_size#16 = (byte) keyboard_events_size#4 [phi:keyboard_event_get::@1->keyboard_event_get::@return#0] -- register_copy
//SEG901 [386] phi (byte) keyboard_event_get::return#2 = (byte) keyboard_event_get::return#1 [phi:keyboard_event_get::@1->keyboard_event_get::@return#1] -- register_copy
jmp breturn
//SEG902 [386] phi from keyboard_event_get to keyboard_event_get::@return [phi:keyboard_event_get->keyboard_event_get::@return]
breturn_from_keyboard_event_get:
//SEG903 [386] phi (byte) keyboard_events_size#16 = (byte) keyboard_events_size#13 [phi:keyboard_event_get->keyboard_event_get::@return#0] -- register_copy
//SEG904 [386] phi (byte) keyboard_event_get::return#2 = (byte/word/signed word/dword/signed dword) $ff [phi:keyboard_event_get->keyboard_event_get::@return#1] -- vbuxx=vbuc1
ldx #$ff
jmp breturn
//SEG905 keyboard_event_get::@return
breturn:
//SEG906 [387] return
rts
}
//SEG907 keyboard_event_scan
// Scans the entire matrix to determine which keys have been pressed/depressed.
// Generates keyboard events into the event buffer. Events can be read using keyboard_event_get().
// Handles debounce and only generates events when the status of a key changes.
// Also stores current status of modifiers in keyboard_modifiers.
keyboard_event_scan: {
.label row_scan = $b
.label keycode = $a
.label row = 9
//SEG908 [389] phi from keyboard_event_scan to keyboard_event_scan::@7 [phi:keyboard_event_scan->keyboard_event_scan::@7]
b7_from_keyboard_event_scan:
//SEG909 [389] phi (byte) keyboard_events_size#30 = (byte) keyboard_events_size#19 [phi:keyboard_event_scan->keyboard_event_scan::@7#0] -- register_copy
//SEG910 [389] phi (byte) keyboard_event_scan::keycode#11 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:keyboard_event_scan->keyboard_event_scan::@7#1] -- vbuz1=vbuc1
lda #0
sta keycode
//SEG911 [389] phi (byte) keyboard_event_scan::row#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:keyboard_event_scan->keyboard_event_scan::@7#2] -- vbuz1=vbuc1
lda #0
sta row
jmp b7
//SEG912 [389] phi from keyboard_event_scan::@8 to keyboard_event_scan::@7 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7]
b7_from_b8:
//SEG913 [389] phi (byte) keyboard_events_size#30 = (byte) keyboard_events_size#13 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7#0] -- register_copy
//SEG914 [389] phi (byte) keyboard_event_scan::keycode#11 = (byte) keyboard_event_scan::keycode#14 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7#1] -- register_copy
//SEG915 [389] phi (byte) keyboard_event_scan::row#2 = (byte) keyboard_event_scan::row#1 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7#2] -- register_copy
jmp b7
//SEG916 keyboard_event_scan::@7
b7:
//SEG917 [390] (byte) keyboard_matrix_read::rowid#0 ← (byte) keyboard_event_scan::row#2 -- vbuxx=vbuz1
ldx row
//SEG918 [391] call keyboard_matrix_read
jsr keyboard_matrix_read
//SEG919 [392] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0
jmp b19
//SEG920 keyboard_event_scan::@19
b19:
//SEG921 [393] (byte) keyboard_event_scan::row_scan#0 ← (byte) keyboard_matrix_read::return#2 -- vbuz1=vbuaa
sta row_scan
//SEG922 [394] if((byte) keyboard_event_scan::row_scan#0!=*((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2)) goto keyboard_event_scan::@9 -- vbuz1_neq_pbuc1_derefidx_vbuz2_then_la1
lda row_scan
ldy row
cmp keyboard_scan_values,y
bne b9_from_b19
jmp b16
//SEG923 keyboard_event_scan::@16
b16:
//SEG924 [395] (byte) keyboard_event_scan::keycode#1 ← (byte) keyboard_event_scan::keycode#11 + (byte/signed byte/word/signed word/dword/signed dword) 8 -- vbuz1=vbuz1_plus_vbuc1
lax keycode
axs #-[8]
stx keycode
//SEG925 [396] phi from keyboard_event_scan::@15 keyboard_event_scan::@16 to keyboard_event_scan::@8 [phi:keyboard_event_scan::@15/keyboard_event_scan::@16->keyboard_event_scan::@8]
b8_from_b15:
b8_from_b16:
//SEG926 [396] phi (byte) keyboard_events_size#13 = (byte) keyboard_events_size#29 [phi:keyboard_event_scan::@15/keyboard_event_scan::@16->keyboard_event_scan::@8#0] -- register_copy
//SEG927 [396] phi (byte) keyboard_event_scan::keycode#14 = (byte) keyboard_event_scan::keycode#15 [phi:keyboard_event_scan::@15/keyboard_event_scan::@16->keyboard_event_scan::@8#1] -- register_copy
jmp b8
//SEG928 keyboard_event_scan::@8
b8:
//SEG929 [397] (byte) keyboard_event_scan::row#1 ← ++ (byte) keyboard_event_scan::row#2 -- vbuz1=_inc_vbuz1
inc row
//SEG930 [398] if((byte) keyboard_event_scan::row#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto keyboard_event_scan::@7 -- vbuz1_neq_vbuc1_then_la1
lda #8
cmp row
bne b7_from_b8
//SEG931 [399] phi from keyboard_event_scan::@8 to keyboard_event_scan::@17 [phi:keyboard_event_scan::@8->keyboard_event_scan::@17]
b17_from_b8:
jmp b17
//SEG932 keyboard_event_scan::@17
b17:
//SEG933 [400] call keyboard_event_pressed
//SEG934 [377] phi from keyboard_event_scan::@17 to keyboard_event_pressed [phi:keyboard_event_scan::@17->keyboard_event_pressed]
keyboard_event_pressed_from_b17:
//SEG935 [377] phi (byte) keyboard_event_pressed::keycode#5 = (const byte) KEY_LSHIFT#0 [phi:keyboard_event_scan::@17->keyboard_event_pressed#0] -- vbuz1=vbuc1
lda #KEY_LSHIFT
sta keyboard_event_pressed.keycode
jsr keyboard_event_pressed
//SEG936 [401] (byte) keyboard_event_pressed::return#0 ← (byte) keyboard_event_pressed::return#11
jmp b20
//SEG937 keyboard_event_scan::@20
b20:
//SEG938 [402] (byte~) keyboard_event_scan::$0 ← (byte) keyboard_event_pressed::return#0
//SEG939 [403] if((byte~) keyboard_event_scan::$0==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@1 -- vbuaa_eq_0_then_la1
cmp #0
beq b1_from_b20
//SEG940 [404] phi from keyboard_event_scan::@20 to keyboard_event_scan::@18 [phi:keyboard_event_scan::@20->keyboard_event_scan::@18]
b18_from_b20:
jmp b18
//SEG941 keyboard_event_scan::@18
b18:
//SEG942 [405] phi from keyboard_event_scan::@18 keyboard_event_scan::@20 to keyboard_event_scan::@1 [phi:keyboard_event_scan::@18/keyboard_event_scan::@20->keyboard_event_scan::@1]
b1_from_b18:
b1_from_b20:
jmp b1
//SEG943 keyboard_event_scan::@1
b1:
//SEG944 [406] call keyboard_event_pressed
//SEG945 [377] phi from keyboard_event_scan::@1 to keyboard_event_pressed [phi:keyboard_event_scan::@1->keyboard_event_pressed]
keyboard_event_pressed_from_b1:
//SEG946 [377] phi (byte) keyboard_event_pressed::keycode#5 = (const byte) KEY_RSHIFT#0 [phi:keyboard_event_scan::@1->keyboard_event_pressed#0] -- vbuz1=vbuc1
lda #KEY_RSHIFT
sta keyboard_event_pressed.keycode
jsr keyboard_event_pressed
//SEG947 [407] (byte) keyboard_event_pressed::return#1 ← (byte) keyboard_event_pressed::return#11
jmp b21
//SEG948 keyboard_event_scan::@21
b21:
//SEG949 [408] (byte~) keyboard_event_scan::$3 ← (byte) keyboard_event_pressed::return#1
//SEG950 [409] if((byte~) keyboard_event_scan::$3==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@2 -- vbuaa_eq_0_then_la1
cmp #0
beq b2_from_b21
//SEG951 [410] phi from keyboard_event_scan::@21 to keyboard_event_scan::@4 [phi:keyboard_event_scan::@21->keyboard_event_scan::@4]
b4_from_b21:
jmp b4
//SEG952 keyboard_event_scan::@4
b4:
//SEG953 [411] phi from keyboard_event_scan::@21 keyboard_event_scan::@4 to keyboard_event_scan::@2 [phi:keyboard_event_scan::@21/keyboard_event_scan::@4->keyboard_event_scan::@2]
b2_from_b21:
b2_from_b4:
jmp b2
//SEG954 keyboard_event_scan::@2
b2:
//SEG955 [412] call keyboard_event_pressed
//SEG956 [377] phi from keyboard_event_scan::@2 to keyboard_event_pressed [phi:keyboard_event_scan::@2->keyboard_event_pressed]
keyboard_event_pressed_from_b2:
//SEG957 [377] phi (byte) keyboard_event_pressed::keycode#5 = (const byte) KEY_CTRL#0 [phi:keyboard_event_scan::@2->keyboard_event_pressed#0] -- vbuz1=vbuc1
lda #KEY_CTRL
sta keyboard_event_pressed.keycode
jsr keyboard_event_pressed
//SEG958 [413] (byte) keyboard_event_pressed::return#2 ← (byte) keyboard_event_pressed::return#11
jmp b22
//SEG959 keyboard_event_scan::@22
b22:
//SEG960 [414] (byte~) keyboard_event_scan::$6 ← (byte) keyboard_event_pressed::return#2
//SEG961 [415] if((byte~) keyboard_event_scan::$6==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@3 -- vbuaa_eq_0_then_la1
cmp #0
beq b3_from_b22
//SEG962 [416] phi from keyboard_event_scan::@22 to keyboard_event_scan::@5 [phi:keyboard_event_scan::@22->keyboard_event_scan::@5]
b5_from_b22:
jmp b5
//SEG963 keyboard_event_scan::@5
b5:
//SEG964 [417] phi from keyboard_event_scan::@22 keyboard_event_scan::@5 to keyboard_event_scan::@3 [phi:keyboard_event_scan::@22/keyboard_event_scan::@5->keyboard_event_scan::@3]
b3_from_b22:
b3_from_b5:
jmp b3
//SEG965 keyboard_event_scan::@3
b3:
//SEG966 [418] call keyboard_event_pressed
//SEG967 [377] phi from keyboard_event_scan::@3 to keyboard_event_pressed [phi:keyboard_event_scan::@3->keyboard_event_pressed]
keyboard_event_pressed_from_b3:
//SEG968 [377] phi (byte) keyboard_event_pressed::keycode#5 = (const byte) KEY_COMMODORE#0 [phi:keyboard_event_scan::@3->keyboard_event_pressed#0] -- vbuz1=vbuc1
lda #KEY_COMMODORE
sta keyboard_event_pressed.keycode
jsr keyboard_event_pressed
//SEG969 [419] (byte) keyboard_event_pressed::return#10 ← (byte) keyboard_event_pressed::return#11
jmp b23
//SEG970 keyboard_event_scan::@23
b23:
//SEG971 [420] (byte~) keyboard_event_scan::$9 ← (byte) keyboard_event_pressed::return#10
//SEG972 [421] if((byte~) keyboard_event_scan::$9==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@return -- vbuaa_eq_0_then_la1
cmp #0
beq breturn
//SEG973 [422] phi from keyboard_event_scan::@23 to keyboard_event_scan::@6 [phi:keyboard_event_scan::@23->keyboard_event_scan::@6]
b6_from_b23:
jmp b6
//SEG974 keyboard_event_scan::@6
b6:
jmp breturn
//SEG975 keyboard_event_scan::@return
breturn:
//SEG976 [423] return
rts
// Something has changed on the keyboard row - check each column
//SEG977 [424] phi from keyboard_event_scan::@10 to keyboard_event_scan::@9 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9]
b9_from_b10:
//SEG978 [424] phi (byte) keyboard_events_size#10 = (byte) keyboard_events_size#29 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9#0] -- register_copy
//SEG979 [424] phi (byte) keyboard_event_scan::keycode#10 = (byte) keyboard_event_scan::keycode#15 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9#1] -- register_copy
//SEG980 [424] phi (byte) keyboard_event_scan::col#2 = (byte) keyboard_event_scan::col#1 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9#2] -- register_copy
jmp b9
//SEG981 [424] phi from keyboard_event_scan::@19 to keyboard_event_scan::@9 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9]
b9_from_b19:
//SEG982 [424] phi (byte) keyboard_events_size#10 = (byte) keyboard_events_size#30 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9#0] -- register_copy
//SEG983 [424] phi (byte) keyboard_event_scan::keycode#10 = (byte) keyboard_event_scan::keycode#11 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9#1] -- register_copy
//SEG984 [424] phi (byte) keyboard_event_scan::col#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9#2] -- vbuxx=vbuc1
ldx #0
jmp b9
//SEG985 keyboard_event_scan::@9
b9:
//SEG986 [425] (byte~) keyboard_event_scan::$15 ← (byte) keyboard_event_scan::row_scan#0 ^ *((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2) -- vbuaa=vbuz1_bxor_pbuc1_derefidx_vbuz2
lda row_scan
ldy row
eor keyboard_scan_values,y
//SEG987 [426] (byte~) keyboard_event_scan::$16 ← (byte~) keyboard_event_scan::$15 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte) keyboard_event_scan::col#2) -- vbuaa=vbuaa_band_pbuc1_derefidx_vbuxx
and keyboard_matrix_col_bitmask,x
//SEG988 [427] if((byte~) keyboard_event_scan::$16==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@10 -- vbuaa_eq_0_then_la1
cmp #0
beq b10_from_b9
jmp b12
//SEG989 keyboard_event_scan::@12
b12:
//SEG990 [428] if((byte) keyboard_events_size#10==(byte/signed byte/word/signed word/dword/signed dword) 8) goto keyboard_event_scan::@10 -- vbuz1_eq_vbuc1_then_la1
lda #8
cmp keyboard_events_size
beq b10_from_b12
jmp b13
//SEG991 keyboard_event_scan::@13
b13:
//SEG992 [429] (byte) keyboard_event_scan::event_type#0 ← (byte) keyboard_event_scan::row_scan#0 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte) keyboard_event_scan::col#2) -- vbuaa=vbuz1_band_pbuc1_derefidx_vbuxx
lda keyboard_matrix_col_bitmask,x
and row_scan
//SEG993 [430] if((byte) keyboard_event_scan::event_type#0==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@11 -- vbuaa_eq_0_then_la1
cmp #0
beq b11
jmp b14
//SEG994 keyboard_event_scan::@14
b14:
//SEG995 [431] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte) keyboard_event_scan::keycode#10 -- pbuc1_derefidx_vbuz1=vbuz2
// Key pressed
lda keycode
ldy keyboard_events_size
sta keyboard_events,y
//SEG996 [432] (byte) keyboard_events_size#2 ← ++ (byte) keyboard_events_size#10 -- vbuz1=_inc_vbuz1
inc keyboard_events_size
//SEG997 [433] phi from keyboard_event_scan::@11 keyboard_event_scan::@12 keyboard_event_scan::@14 keyboard_event_scan::@9 to keyboard_event_scan::@10 [phi:keyboard_event_scan::@11/keyboard_event_scan::@12/keyboard_event_scan::@14/keyboard_event_scan::@9->keyboard_event_scan::@10]
b10_from_b11:
b10_from_b12:
b10_from_b14:
b10_from_b9:
//SEG998 [433] phi (byte) keyboard_events_size#29 = (byte) keyboard_events_size#1 [phi:keyboard_event_scan::@11/keyboard_event_scan::@12/keyboard_event_scan::@14/keyboard_event_scan::@9->keyboard_event_scan::@10#0] -- register_copy
jmp b10
//SEG999 keyboard_event_scan::@10
b10:
//SEG1000 [434] (byte) keyboard_event_scan::keycode#15 ← ++ (byte) keyboard_event_scan::keycode#10 -- vbuz1=_inc_vbuz1
inc keycode
//SEG1001 [435] (byte) keyboard_event_scan::col#1 ← ++ (byte) keyboard_event_scan::col#2 -- vbuxx=_inc_vbuxx
inx
//SEG1002 [436] if((byte) keyboard_event_scan::col#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto keyboard_event_scan::@9 -- vbuxx_neq_vbuc1_then_la1
cpx #8
bne b9_from_b10
jmp b15
//SEG1003 keyboard_event_scan::@15
b15:
//SEG1004 [437] *((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2) ← (byte) keyboard_event_scan::row_scan#0 -- pbuc1_derefidx_vbuz1=vbuz2
// Store the current keyboard status for the row to debounce
lda row_scan
ldy row
sta keyboard_scan_values,y
jmp b8_from_b15
//SEG1005 keyboard_event_scan::@11
b11:
//SEG1006 [438] (byte/word/dword~) keyboard_event_scan::$23 ← (byte) keyboard_event_scan::keycode#10 | (byte/signed byte/word/signed word/dword/signed dword) $40 -- vbuaa=vbuz1_bor_vbuc1
lda #$40
ora keycode
//SEG1007 [439] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte/word/dword~) keyboard_event_scan::$23 -- pbuc1_derefidx_vbuz1=vbuaa
// Key released
ldy keyboard_events_size
sta keyboard_events,y
//SEG1008 [440] (byte) keyboard_events_size#1 ← ++ (byte) keyboard_events_size#10 -- vbuz1=_inc_vbuz1
inc keyboard_events_size
jmp b10_from_b11
}
//SEG1009 keyboard_matrix_read
// Read a single row of the keyboard matrix
// The row ID (0-7) of the keyboard matrix row to read. See the C64 key matrix for row IDs.
// Returns the keys pressed on the row as bits according to the C64 key matrix.
// Notice: If the C64 normal interrupt is still running it will occasionally interrupt right between the read & write
// leading to erroneous readings. You must disable kill the normal interrupt or sei/cli around calls to the keyboard matrix reader.
// keyboard_matrix_read(byte register(X) rowid)
keyboard_matrix_read: {
//SEG1010 [441] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#0) -- _deref_pbuc1=pbuc2_derefidx_vbuxx
lda keyboard_matrix_row_bitmask,x
sta CIA1_PORT_A
//SEG1011 [442] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B#0) -- vbuaa=_bnot__deref_pbuc1
lda CIA1_PORT_B
eor #$ff
jmp breturn
//SEG1012 keyboard_matrix_read::@return
breturn:
//SEG1013 [443] return
rts
}
//SEG1014 render_show
// Update $D018 to show the current screen (used for double buffering)
render_show: {
.const toD0181_return = (>(PLAYFIELD_SCREEN_1&$3fff)*4)|(>PLAYFIELD_CHARSET)/4&$f
.const toD0182_return = (>(PLAYFIELD_SCREEN_2&$3fff)*4)|(>PLAYFIELD_CHARSET)/4&$f
//SEG1015 [444] if((byte) render_screen_show#16==(byte/signed byte/word/signed word/dword/signed dword) 0) goto render_show::toD0181 -- vbuz1_eq_0_then_la1
lda render_screen_show
cmp #0
beq toD0181_from_render_show
//SEG1016 [445] phi from render_show to render_show::toD0182 [phi:render_show->render_show::toD0182]
toD0182_from_render_show:
jmp toD0182
//SEG1017 render_show::toD0182
toD0182:
//SEG1018 [446] phi from render_show::toD0182 to render_show::@1 [phi:render_show::toD0182->render_show::@1]
b1_from_toD0182:
//SEG1019 [446] phi (byte) render_show::d018val#3 = (const byte) render_show::toD0182_return#0 [phi:render_show::toD0182->render_show::@1#0] -- vbuaa=vbuc1
lda #toD0182_return
jmp b1
//SEG1020 render_show::@1
b1:
//SEG1021 [447] *((const byte*) D018#0) ← (byte) render_show::d018val#3 -- _deref_pbuc1=vbuaa
sta D018
//SEG1022 [448] *((const byte*) BGCOL2#0) ← *((const byte[]) PIECES_COLORS_1#0 + (byte) level#10) -- _deref_pbuc1=pbuc2_derefidx_vbuz1
ldy level
lda PIECES_COLORS_1,y
sta BGCOL2
//SEG1023 [449] *((const byte*) BGCOL3#0) ← *((const byte[]) PIECES_COLORS_2#0 + (byte) level#10) -- _deref_pbuc1=pbuc2_derefidx_vbuz1
ldy level
lda PIECES_COLORS_2,y
sta BGCOL3
//SEG1024 [450] (byte) render_screen_showing#1 ← (byte) render_screen_show#16 -- vbuz1=vbuz2
lda render_screen_show
sta render_screen_showing
jmp breturn
//SEG1025 render_show::@return
breturn:
//SEG1026 [451] return
rts
//SEG1027 [452] phi from render_show to render_show::toD0181 [phi:render_show->render_show::toD0181]
toD0181_from_render_show:
jmp toD0181
//SEG1028 render_show::toD0181
toD0181:
//SEG1029 [446] phi from render_show::toD0181 to render_show::@1 [phi:render_show::toD0181->render_show::@1]
b1_from_toD0181:
//SEG1030 [446] phi (byte) render_show::d018val#3 = (const byte) render_show::toD0181_return#0 [phi:render_show::toD0181->render_show::@1#0] -- vbuaa=vbuc1
lda #toD0181_return
jmp b1
}
//SEG1031 play_init
// Initialize play data tables
play_init: {
.label pli = 5
.label idx = 2
//SEG1032 [454] phi from play_init to play_init::@1 [phi:play_init->play_init::@1]
b1_from_play_init:
//SEG1033 [454] phi (byte) play_init::idx#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_init->play_init::@1#0] -- vbuz1=vbuc1
lda #0
sta idx
//SEG1034 [454] phi (byte*) play_init::pli#2 = (const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 [phi:play_init->play_init::@1#1] -- pbuz1=pbuc1
lda #<playfield
sta pli
lda #>playfield
sta pli+1
//SEG1035 [454] phi (byte) play_init::j#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_init->play_init::@1#2] -- vbuyy=vbuc1
ldy #0
jmp b1
//SEG1036 [454] phi from play_init::@1 to play_init::@1 [phi:play_init::@1->play_init::@1]
b1_from_b1:
//SEG1037 [454] phi (byte) play_init::idx#2 = (byte) play_init::idx#1 [phi:play_init::@1->play_init::@1#0] -- register_copy
//SEG1038 [454] phi (byte*) play_init::pli#2 = (byte*) play_init::pli#1 [phi:play_init::@1->play_init::@1#1] -- register_copy
//SEG1039 [454] phi (byte) play_init::j#2 = (byte) play_init::j#1 [phi:play_init::@1->play_init::@1#2] -- register_copy
jmp b1
//SEG1040 play_init::@1
b1:
//SEG1041 [455] (byte~) play_init::$2 ← (byte) play_init::j#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuxx=vbuyy_rol_1
tya
asl
tax
//SEG1042 [456] *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte~) play_init::$2) ← (byte*) play_init::pli#2 -- pptc1_derefidx_vbuxx=pbuz1
lda pli
sta playfield_lines,x
lda pli+1
sta playfield_lines+1,x
//SEG1043 [457] *((const byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx#0 + (byte) play_init::j#2) ← (byte) play_init::idx#2 -- pbuc1_derefidx_vbuyy=vbuz1
lda idx
sta playfield_lines_idx,y
//SEG1044 [458] (byte*) play_init::pli#1 ← (byte*) play_init::pli#2 + (const byte) PLAYFIELD_COLS#0 -- pbuz1=pbuz1_plus_vbuc1
lda #PLAYFIELD_COLS
clc
adc pli
sta pli
bcc !+
inc pli+1
!:
//SEG1045 [459] (byte) play_init::idx#1 ← (byte) play_init::idx#2 + (const byte) PLAYFIELD_COLS#0 -- vbuz1=vbuz1_plus_vbuc1
lax idx
axs #-[PLAYFIELD_COLS]
stx idx
//SEG1046 [460] (byte) play_init::j#1 ← ++ (byte) play_init::j#2 -- vbuyy=_inc_vbuyy
iny
//SEG1047 [461] if((byte) play_init::j#1!=(const byte) PLAYFIELD_LINES#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto play_init::@1 -- vbuyy_neq_vbuc1_then_la1
cpy #PLAYFIELD_LINES-1+1
bne b1_from_b1
jmp b2
//SEG1048 play_init::@2
b2:
//SEG1049 [462] *((const byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx#0+(const byte) PLAYFIELD_LINES#0) ← (const byte) PLAYFIELD_COLS#0*(const byte) PLAYFIELD_LINES#0 -- _deref_pbuc1=vbuc2
lda #PLAYFIELD_COLS*PLAYFIELD_LINES
sta playfield_lines_idx+PLAYFIELD_LINES
//SEG1050 [463] (byte) current_movedown_slow#1 ← *((const byte[]) MOVEDOWN_SLOW_SPEEDS#0) -- vbuz1=_deref_pbuc1
// Set initial speed of moving down a tetromino
lda MOVEDOWN_SLOW_SPEEDS
sta current_movedown_slow
//SEG1051 [464] phi from play_init::@2 to play_init::@3 [phi:play_init::@2->play_init::@3]
b3_from_b2:
//SEG1052 [464] phi (byte) play_init::b#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_init::@2->play_init::@3#0] -- vbuxx=vbuc1
ldx #0
jmp b3
// Set the initial score add values
//SEG1053 [464] phi from play_init::@3 to play_init::@3 [phi:play_init::@3->play_init::@3]
b3_from_b3:
//SEG1054 [464] phi (byte) play_init::b#2 = (byte) play_init::b#1 [phi:play_init::@3->play_init::@3#0] -- register_copy
jmp b3
//SEG1055 play_init::@3
b3:
//SEG1056 [465] (byte) play_init::b4#0 ← (byte) play_init::b#2 << (byte/signed byte/word/signed word/dword/signed dword) 2 -- vbuaa=vbuxx_rol_2
txa
asl
asl
//SEG1057 [466] *((const dword[5]) score_add_bcd#0 + (byte) play_init::b4#0) ← *((const dword[]) SCORE_BASE_BCD#0 + (byte) play_init::b4#0) -- pduc1_derefidx_vbuaa=pduc2_derefidx_vbuaa
tay
lda SCORE_BASE_BCD,y
sta score_add_bcd,y
lda SCORE_BASE_BCD+1,y
sta score_add_bcd+1,y
lda SCORE_BASE_BCD+2,y
sta score_add_bcd+2,y
lda SCORE_BASE_BCD+3,y
sta score_add_bcd+3,y
//SEG1058 [467] (byte) play_init::b#1 ← ++ (byte) play_init::b#2 -- vbuxx=_inc_vbuxx
inx
//SEG1059 [468] if((byte) play_init::b#1!=(byte/signed byte/word/signed word/dword/signed dword) 5) goto play_init::@3 -- vbuxx_neq_vbuc1_then_la1
cpx #5
bne b3_from_b3
jmp breturn
//SEG1060 play_init::@return
breturn:
//SEG1061 [469] return
rts
}
//SEG1062 sprites_irq_init
// Setup the IRQ
sprites_irq_init: {
//SEG1063 asm { sei }
sei
//SEG1064 [471] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2
// Acknowledge any IRQ and setup the next one
lda #IRQ_RASTER
sta IRQ_STATUS
//SEG1065 asm { ldaCIA1_INTERRUPT }
lda CIA1_INTERRUPT
//SEG1066 [473] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0 -- _deref_pbuc1=vbuc2
// Disable kernal & basic
lda #PROCPORT_DDR_MEMORY_MASK
sta PROCPORT_DDR
//SEG1067 [474] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 -- _deref_pbuc1=vbuc2
lda #PROCPORT_RAM_IO
sta PROCPORT
//SEG1068 [475] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0 -- _deref_pbuc1=vbuc2
// Disable CIA 1 Timer IRQ
lda #CIA_INTERRUPT_CLEAR
sta CIA1_INTERRUPT
//SEG1069 [476] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte/signed byte/word/signed word/dword/signed dword) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2
// Set raster line
lda #$7f
and VIC_CONTROL
sta VIC_CONTROL
//SEG1070 [477] *((const byte*) RASTER#0) ← (const byte) IRQ_RASTER_FIRST#0 -- _deref_pbuc1=vbuc2
lda #IRQ_RASTER_FIRST
sta RASTER
//SEG1071 [478] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2
// Enable Raster Interrupt
lda #IRQ_RASTER
sta IRQ_ENABLE
//SEG1072 [479] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_CLOBBER)(void()) sprites_irq() -- _deref_pptc1=pprc2
// Set the IRQ routine
lda #<sprites_irq
sta HARDWARE_IRQ
lda #>sprites_irq
sta HARDWARE_IRQ+1
//SEG1073 asm { cli }
cli
jmp breturn
//SEG1074 sprites_irq_init::@return
breturn:
//SEG1075 [481] return
rts
}
//SEG1076 sprites_init
// Setup the sprites
sprites_init: {
.label xpos = 2
//SEG1077 [482] *((const byte*) SPRITES_ENABLE#0) ← (byte/signed byte/word/signed word/dword/signed dword) $f -- _deref_pbuc1=vbuc2
lda #$f
sta SPRITES_ENABLE
//SEG1078 [483] *((const byte*) SPRITES_MC#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- _deref_pbuc1=vbuc2
lda #0
sta SPRITES_MC
//SEG1079 [484] *((const byte*) SPRITES_EXPAND_Y#0) ← *((const byte*) SPRITES_MC#0) -- _deref_pbuc1=_deref_pbuc2
lda SPRITES_MC
sta SPRITES_EXPAND_Y
//SEG1080 [485] *((const byte*) SPRITES_EXPAND_X#0) ← *((const byte*) SPRITES_EXPAND_Y#0) -- _deref_pbuc1=_deref_pbuc2
lda SPRITES_EXPAND_Y
sta SPRITES_EXPAND_X
//SEG1081 [486] phi from sprites_init to sprites_init::@1 [phi:sprites_init->sprites_init::@1]
b1_from_sprites_init:
//SEG1082 [486] phi (byte) sprites_init::xpos#2 = (byte/signed byte/word/signed word/dword/signed dword) $18+(byte/signed byte/word/signed word/dword/signed dword) $f*(byte/signed byte/word/signed word/dword/signed dword) 8 [phi:sprites_init->sprites_init::@1#0] -- vbuz1=vbuc1
lda #$18+$f*8
sta xpos
//SEG1083 [486] phi (byte) sprites_init::s#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sprites_init->sprites_init::@1#1] -- vbuyy=vbuc1
ldy #0
jmp b1
//SEG1084 [486] phi from sprites_init::@1 to sprites_init::@1 [phi:sprites_init::@1->sprites_init::@1]
b1_from_b1:
//SEG1085 [486] phi (byte) sprites_init::xpos#2 = (byte) sprites_init::xpos#1 [phi:sprites_init::@1->sprites_init::@1#0] -- register_copy
//SEG1086 [486] phi (byte) sprites_init::s#2 = (byte) sprites_init::s#1 [phi:sprites_init::@1->sprites_init::@1#1] -- register_copy
jmp b1
//SEG1087 sprites_init::@1
b1:
//SEG1088 [487] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuxx=vbuyy_rol_1
tya
asl
tax
//SEG1089 [488] *((const byte*) SPRITES_XPOS#0 + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2 -- pbuc1_derefidx_vbuxx=vbuz1
lda xpos
sta SPRITES_XPOS,x
//SEG1090 [489] *((const byte*) SPRITES_COLS#0 + (byte) sprites_init::s#2) ← (const byte) BLACK#0 -- pbuc1_derefidx_vbuyy=vbuc2
lda #BLACK
sta SPRITES_COLS,y
//SEG1091 [490] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte/signed byte/word/signed word/dword/signed dword) $18 -- vbuz1=vbuz1_plus_vbuc1
lax xpos
axs #-[$18]
stx xpos
//SEG1092 [491] (byte) sprites_init::s#1 ← ++ (byte) sprites_init::s#2 -- vbuyy=_inc_vbuyy
iny
//SEG1093 [492] if((byte) sprites_init::s#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto sprites_init::@1 -- vbuyy_neq_vbuc1_then_la1
cpy #4
bne b1_from_b1
jmp breturn
//SEG1094 sprites_init::@return
breturn:
//SEG1095 [493] return
rts
}
//SEG1096 render_init
// Initialize rendering
render_init: {
.const vicSelectGfxBank1_toDd001_return = 3^(>PLAYFIELD_CHARSET)/$40
.label li_1 = 5
.label li_2 = 7
jmp vicSelectGfxBank1
//SEG1097 render_init::vicSelectGfxBank1
vicSelectGfxBank1:
//SEG1098 [495] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte/signed byte/word/signed word/dword/signed dword) 3 -- _deref_pbuc1=vbuc2
lda #3
sta CIA2_PORT_A_DDR
//SEG1099 [496] phi from render_init::vicSelectGfxBank1 to render_init::vicSelectGfxBank1_toDd001 [phi:render_init::vicSelectGfxBank1->render_init::vicSelectGfxBank1_toDd001]
vicSelectGfxBank1_toDd001_from_vicSelectGfxBank1:
jmp vicSelectGfxBank1_toDd001
//SEG1100 render_init::vicSelectGfxBank1_toDd001
vicSelectGfxBank1_toDd001:
jmp vicSelectGfxBank1_b1
//SEG1101 render_init::vicSelectGfxBank1_@1
vicSelectGfxBank1_b1:
//SEG1102 [497] *((const byte*) CIA2_PORT_A#0) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2
lda #vicSelectGfxBank1_toDd001_return
sta CIA2_PORT_A
jmp b2
//SEG1103 render_init::@2
b2:
//SEG1104 [498] *((const byte*) D011#0) ← (const byte) VIC_ECM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte/signed byte/word/signed word/dword/signed dword) 3 -- _deref_pbuc1=vbuc2
// Enable Extended Background Color Mode
lda #VIC_ECM|VIC_DEN|VIC_RSEL|3
sta D011
//SEG1105 [499] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 -- _deref_pbuc1=vbuc2
lda #BLACK
sta BORDERCOL
//SEG1106 [500] *((const byte*) BGCOL1#0) ← (const byte) BLACK#0 -- _deref_pbuc1=vbuc2
lda #BLACK
sta BGCOL1
//SEG1107 [501] *((const byte*) BGCOL2#0) ← *((const byte[]) PIECES_COLORS_1#0) -- _deref_pbuc1=_deref_pbuc2
lda PIECES_COLORS_1
sta BGCOL2
//SEG1108 [502] *((const byte*) BGCOL3#0) ← *((const byte[]) PIECES_COLORS_2#0) -- _deref_pbuc1=_deref_pbuc2
lda PIECES_COLORS_2
sta BGCOL3
//SEG1109 [503] *((const byte*) BGCOL4#0) ← (const byte) GREY#0 -- _deref_pbuc1=vbuc2
lda #GREY
sta BGCOL4
//SEG1110 [504] call render_screen_original
//SEG1111 [517] phi from render_init::@2 to render_screen_original [phi:render_init::@2->render_screen_original]
render_screen_original_from_b2:
//SEG1112 [517] phi (byte*) render_screen_original::screen#9 = (const byte*) PLAYFIELD_SCREEN_1#0 [phi:render_init::@2->render_screen_original#0] -- pbuz1=pbuc1
lda #<PLAYFIELD_SCREEN_1
sta render_screen_original.screen
lda #>PLAYFIELD_SCREEN_1
sta render_screen_original.screen+1
jsr render_screen_original
//SEG1113 [505] phi from render_init::@2 to render_init::@3 [phi:render_init::@2->render_init::@3]
b3_from_b2:
jmp b3
//SEG1114 render_init::@3
b3:
//SEG1115 [506] call render_screen_original
//SEG1116 [517] phi from render_init::@3 to render_screen_original [phi:render_init::@3->render_screen_original]
render_screen_original_from_b3:
//SEG1117 [517] phi (byte*) render_screen_original::screen#9 = (const byte*) PLAYFIELD_SCREEN_2#0 [phi:render_init::@3->render_screen_original#0] -- pbuz1=pbuc1
lda #<PLAYFIELD_SCREEN_2
sta render_screen_original.screen
lda #>PLAYFIELD_SCREEN_2
sta render_screen_original.screen+1
jsr render_screen_original
//SEG1118 [507] phi from render_init::@3 to render_init::@1 [phi:render_init::@3->render_init::@1]
b1_from_b3:
//SEG1119 [507] phi (byte*) render_init::li_2#2 = (const byte*) PLAYFIELD_SCREEN_2#0+(byte/signed byte/word/signed word/dword/signed dword) 2*(byte/signed byte/word/signed word/dword/signed dword) $28+(byte/signed byte/word/signed word/dword/signed dword) $10 [phi:render_init::@3->render_init::@1#0] -- pbuz1=pbuc1
lda #<PLAYFIELD_SCREEN_2+2*$28+$10
sta li_2
lda #>PLAYFIELD_SCREEN_2+2*$28+$10
sta li_2+1
//SEG1120 [507] phi (byte*) render_init::li_1#2 = (const byte*) PLAYFIELD_SCREEN_1#0+(byte/signed byte/word/signed word/dword/signed dword) 2*(byte/signed byte/word/signed word/dword/signed dword) $28+(byte/signed byte/word/signed word/dword/signed dword) $10 [phi:render_init::@3->render_init::@1#1] -- pbuz1=pbuc1
lda #<PLAYFIELD_SCREEN_1+2*$28+$10
sta li_1
lda #>PLAYFIELD_SCREEN_1+2*$28+$10
sta li_1+1
//SEG1121 [507] phi (byte) render_init::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render_init::@3->render_init::@1#2] -- vbuxx=vbuc1
ldx #0
jmp b1
//SEG1122 [507] phi from render_init::@1 to render_init::@1 [phi:render_init::@1->render_init::@1]
b1_from_b1:
//SEG1123 [507] phi (byte*) render_init::li_2#2 = (byte*) render_init::li_2#1 [phi:render_init::@1->render_init::@1#0] -- register_copy
//SEG1124 [507] phi (byte*) render_init::li_1#2 = (byte*) render_init::li_1#1 [phi:render_init::@1->render_init::@1#1] -- register_copy
//SEG1125 [507] phi (byte) render_init::i#2 = (byte) render_init::i#1 [phi:render_init::@1->render_init::@1#2] -- register_copy
jmp b1
//SEG1126 render_init::@1
b1:
//SEG1127 [508] (byte~) render_init::$13 ← (byte) render_init::i#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuaa=vbuxx_rol_1
txa
asl
//SEG1128 [509] *((const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_init::$13) ← (byte*) render_init::li_1#2 -- pptc1_derefidx_vbuaa=pbuz1
tay
lda li_1
sta screen_lines_1,y
lda li_1+1
sta screen_lines_1+1,y
//SEG1129 [510] (byte~) render_init::$14 ← (byte) render_init::i#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuaa=vbuxx_rol_1
txa
asl
//SEG1130 [511] *((const byte*[PLAYFIELD_LINES#0]) screen_lines_2#0 + (byte~) render_init::$14) ← (byte*) render_init::li_2#2 -- pptc1_derefidx_vbuaa=pbuz1
tay
lda li_2
sta screen_lines_2,y
lda li_2+1
sta screen_lines_2+1,y
//SEG1131 [512] (byte*) render_init::li_1#1 ← (byte*) render_init::li_1#2 + (byte/signed byte/word/signed word/dword/signed dword) $28 -- pbuz1=pbuz1_plus_vbuc1
lda #$28
clc
adc li_1
sta li_1
bcc !+
inc li_1+1
!:
//SEG1132 [513] (byte*) render_init::li_2#1 ← (byte*) render_init::li_2#2 + (byte/signed byte/word/signed word/dword/signed dword) $28 -- pbuz1=pbuz1_plus_vbuc1
lda #$28
clc
adc li_2
sta li_2
bcc !+
inc li_2+1
!:
//SEG1133 [514] (byte) render_init::i#1 ← ++ (byte) render_init::i#2 -- vbuxx=_inc_vbuxx
inx
//SEG1134 [515] if((byte) render_init::i#1!=(const byte) PLAYFIELD_LINES#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto render_init::@1 -- vbuxx_neq_vbuc1_then_la1
cpx #PLAYFIELD_LINES-1+1
bne b1_from_b1
jmp breturn
//SEG1135 render_init::@return
breturn:
//SEG1136 [516] return
rts
}
//SEG1137 render_screen_original
// Copy the original screen data to the passed screen
// Also copies colors to $d800
// render_screen_original(byte* zeropage($11) screen)
render_screen_original: {
.const SPACE = 0
.label screen = $11
.label cols = $1a
.label oscr = 5
.label ocols = 7
.label y = 2
//SEG1138 [518] phi from render_screen_original to render_screen_original::@1 [phi:render_screen_original->render_screen_original::@1]
b1_from_render_screen_original:
//SEG1139 [518] phi (byte) render_screen_original::y#6 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render_screen_original->render_screen_original::@1#0] -- vbuz1=vbuc1
lda #0
sta y
//SEG1140 [518] phi (byte*) render_screen_original::ocols#4 = (const byte*) PLAYFIELD_COLORS_ORIGINAL#0+(byte/signed byte/word/signed word/dword/signed dword) $20*(byte/signed byte/word/signed word/dword/signed dword) 2 [phi:render_screen_original->render_screen_original::@1#1] -- pbuz1=pbuc1
lda #<PLAYFIELD_COLORS_ORIGINAL+$20*2
sta ocols
lda #>PLAYFIELD_COLORS_ORIGINAL+$20*2
sta ocols+1
//SEG1141 [518] phi (byte*) render_screen_original::oscr#4 = (const byte*) PLAYFIELD_SCREEN_ORIGINAL#0+(byte/signed byte/word/signed word/dword/signed dword) $20*(byte/signed byte/word/signed word/dword/signed dword) 2 [phi:render_screen_original->render_screen_original::@1#2] -- pbuz1=pbuc1
lda #<PLAYFIELD_SCREEN_ORIGINAL+$20*2
sta oscr
lda #>PLAYFIELD_SCREEN_ORIGINAL+$20*2
sta oscr+1
//SEG1142 [518] phi (byte*) render_screen_original::cols#7 = (const byte*) COLS#0 [phi:render_screen_original->render_screen_original::@1#3] -- pbuz1=pbuc1
lda #<COLS
sta cols
lda #>COLS
sta cols+1
//SEG1143 [518] phi (byte*) render_screen_original::screen#8 = (byte*) render_screen_original::screen#9 [phi:render_screen_original->render_screen_original::@1#4] -- register_copy
jmp b1
//SEG1144 [518] phi from render_screen_original::@5 to render_screen_original::@1 [phi:render_screen_original::@5->render_screen_original::@1]
b1_from_b5:
//SEG1145 [518] phi (byte) render_screen_original::y#6 = (byte) render_screen_original::y#1 [phi:render_screen_original::@5->render_screen_original::@1#0] -- register_copy
//SEG1146 [518] phi (byte*) render_screen_original::ocols#4 = (byte*) render_screen_original::ocols#1 [phi:render_screen_original::@5->render_screen_original::@1#1] -- register_copy
//SEG1147 [518] phi (byte*) render_screen_original::oscr#4 = (byte*) render_screen_original::oscr#1 [phi:render_screen_original::@5->render_screen_original::@1#2] -- register_copy
//SEG1148 [518] phi (byte*) render_screen_original::cols#7 = (byte*) render_screen_original::cols#3 [phi:render_screen_original::@5->render_screen_original::@1#3] -- register_copy
//SEG1149 [518] phi (byte*) render_screen_original::screen#8 = (byte*) render_screen_original::screen#10 [phi:render_screen_original::@5->render_screen_original::@1#4] -- register_copy
jmp b1
//SEG1150 render_screen_original::@1
b1:
//SEG1151 [519] phi from render_screen_original::@1 to render_screen_original::@2 [phi:render_screen_original::@1->render_screen_original::@2]
b2_from_b1:
//SEG1152 [519] phi (byte) render_screen_original::x#4 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render_screen_original::@1->render_screen_original::@2#0] -- vbuxx=vbuc1
ldx #0
//SEG1153 [519] phi (byte*) render_screen_original::cols#4 = (byte*) render_screen_original::cols#7 [phi:render_screen_original::@1->render_screen_original::@2#1] -- register_copy
//SEG1154 [519] phi (byte*) render_screen_original::screen#5 = (byte*) render_screen_original::screen#8 [phi:render_screen_original::@1->render_screen_original::@2#2] -- register_copy
jmp b2
//SEG1155 [519] phi from render_screen_original::@2 to render_screen_original::@2 [phi:render_screen_original::@2->render_screen_original::@2]
b2_from_b2:
//SEG1156 [519] phi (byte) render_screen_original::x#4 = (byte) render_screen_original::x#1 [phi:render_screen_original::@2->render_screen_original::@2#0] -- register_copy
//SEG1157 [519] phi (byte*) render_screen_original::cols#4 = (byte*) render_screen_original::cols#1 [phi:render_screen_original::@2->render_screen_original::@2#1] -- register_copy
//SEG1158 [519] phi (byte*) render_screen_original::screen#5 = (byte*) render_screen_original::screen#2 [phi:render_screen_original::@2->render_screen_original::@2#2] -- register_copy
jmp b2
//SEG1159 render_screen_original::@2
b2:
//SEG1160 [520] *((byte*) render_screen_original::screen#5) ← (const byte) render_screen_original::SPACE#0 -- _deref_pbuz1=vbuc1
lda #SPACE
ldy #0
sta (screen),y
//SEG1161 [521] (byte*) render_screen_original::screen#2 ← ++ (byte*) render_screen_original::screen#5 -- pbuz1=_inc_pbuz1
inc screen
bne !+
inc screen+1
!:
//SEG1162 [522] *((byte*) render_screen_original::cols#4) ← (const byte) BLACK#0 -- _deref_pbuz1=vbuc1
lda #BLACK
ldy #0
sta (cols),y
//SEG1163 [523] (byte*) render_screen_original::cols#1 ← ++ (byte*) render_screen_original::cols#4 -- pbuz1=_inc_pbuz1
inc cols
bne !+
inc cols+1
!:
//SEG1164 [524] (byte) render_screen_original::x#1 ← ++ (byte) render_screen_original::x#4 -- vbuxx=_inc_vbuxx
inx
//SEG1165 [525] if((byte) render_screen_original::x#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto render_screen_original::@2 -- vbuxx_neq_vbuc1_then_la1
cpx #4
bne b2_from_b2
//SEG1166 [526] phi from render_screen_original::@2 render_screen_original::@3 to render_screen_original::@3 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3]
b3_from_b2:
b3_from_b3:
//SEG1167 [526] phi (byte) render_screen_original::x#5 = (byte) render_screen_original::x#1 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#0] -- register_copy
//SEG1168 [526] phi (byte*) render_screen_original::cols#5 = (byte*) render_screen_original::cols#1 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#1] -- register_copy
//SEG1169 [526] phi (byte*) render_screen_original::ocols#2 = (byte*) render_screen_original::ocols#4 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#2] -- register_copy
//SEG1170 [526] phi (byte*) render_screen_original::screen#6 = (byte*) render_screen_original::screen#2 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#3] -- register_copy
//SEG1171 [526] phi (byte*) render_screen_original::oscr#2 = (byte*) render_screen_original::oscr#4 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#4] -- register_copy
jmp b3
//SEG1172 render_screen_original::@3
b3:
//SEG1173 [527] *((byte*) render_screen_original::screen#6) ← *((byte*) render_screen_original::oscr#2) -- _deref_pbuz1=_deref_pbuz2
ldy #0
lda (oscr),y
ldy #0
sta (screen),y
//SEG1174 [528] (byte*) render_screen_original::screen#3 ← ++ (byte*) render_screen_original::screen#6 -- pbuz1=_inc_pbuz1
inc screen
bne !+
inc screen+1
!:
//SEG1175 [529] (byte*) render_screen_original::oscr#1 ← ++ (byte*) render_screen_original::oscr#2 -- pbuz1=_inc_pbuz1
inc oscr
bne !+
inc oscr+1
!:
//SEG1176 [530] *((byte*) render_screen_original::cols#5) ← *((byte*) render_screen_original::ocols#2) -- _deref_pbuz1=_deref_pbuz2
ldy #0
lda (ocols),y
ldy #0
sta (cols),y
//SEG1177 [531] (byte*) render_screen_original::cols#2 ← ++ (byte*) render_screen_original::cols#5 -- pbuz1=_inc_pbuz1
inc cols
bne !+
inc cols+1
!:
//SEG1178 [532] (byte*) render_screen_original::ocols#1 ← ++ (byte*) render_screen_original::ocols#2 -- pbuz1=_inc_pbuz1
inc ocols
bne !+
inc ocols+1
!:
//SEG1179 [533] (byte) render_screen_original::x#2 ← ++ (byte) render_screen_original::x#5 -- vbuxx=_inc_vbuxx
inx
//SEG1180 [534] if((byte) render_screen_original::x#2!=(byte/signed byte/word/signed word/dword/signed dword) $24) goto render_screen_original::@3 -- vbuxx_neq_vbuc1_then_la1
cpx #$24
bne b3_from_b3
//SEG1181 [535] phi from render_screen_original::@3 render_screen_original::@4 to render_screen_original::@4 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4]
b4_from_b3:
b4_from_b4:
//SEG1182 [535] phi (byte) render_screen_original::x#6 = (byte) render_screen_original::x#2 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4#0] -- register_copy
//SEG1183 [535] phi (byte*) render_screen_original::cols#6 = (byte*) render_screen_original::cols#2 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4#1] -- register_copy
//SEG1184 [535] phi (byte*) render_screen_original::screen#7 = (byte*) render_screen_original::screen#3 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4#2] -- register_copy
jmp b4
//SEG1185 render_screen_original::@4
b4:
//SEG1186 [536] *((byte*) render_screen_original::screen#7) ← (const byte) render_screen_original::SPACE#0 -- _deref_pbuz1=vbuc1
lda #SPACE
ldy #0
sta (screen),y
//SEG1187 [537] (byte*) render_screen_original::screen#10 ← ++ (byte*) render_screen_original::screen#7 -- pbuz1=_inc_pbuz1
inc screen
bne !+
inc screen+1
!:
//SEG1188 [538] *((byte*) render_screen_original::cols#6) ← (const byte) BLACK#0 -- _deref_pbuz1=vbuc1
lda #BLACK
ldy #0
sta (cols),y
//SEG1189 [539] (byte*) render_screen_original::cols#3 ← ++ (byte*) render_screen_original::cols#6 -- pbuz1=_inc_pbuz1
inc cols
bne !+
inc cols+1
!:
//SEG1190 [540] (byte) render_screen_original::x#3 ← ++ (byte) render_screen_original::x#6 -- vbuxx=_inc_vbuxx
inx
//SEG1191 [541] if((byte) render_screen_original::x#3!=(byte/signed byte/word/signed word/dword/signed dword) $28) goto render_screen_original::@4 -- vbuxx_neq_vbuc1_then_la1
cpx #$28
bne b4_from_b4
jmp b5
//SEG1192 render_screen_original::@5
b5:
//SEG1193 [542] (byte) render_screen_original::y#1 ← ++ (byte) render_screen_original::y#6 -- vbuz1=_inc_vbuz1
inc y
//SEG1194 [543] if((byte) render_screen_original::y#1!=(byte/signed byte/word/signed word/dword/signed dword) $19) goto render_screen_original::@1 -- vbuz1_neq_vbuc1_then_la1
lda #$19
cmp y
bne b1_from_b5
jmp breturn
//SEG1195 render_screen_original::@return
breturn:
//SEG1196 [544] return
rts
}
//SEG1197 sid_rnd_init
// Initialize SID voice 3 for random number generation
sid_rnd_init: {
//SEG1198 [545] *((const word*) SID_VOICE3_FREQ#0) ← (word/dword/signed dword) $ffff -- _deref_pwuc1=vwuc2
lda #<$ffff
sta SID_VOICE3_FREQ
lda #>$ffff
sta SID_VOICE3_FREQ+1
//SEG1199 [546] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 -- _deref_pbuc1=vbuc2
lda #SID_CONTROL_NOISE
sta SID_VOICE3_CONTROL
jmp breturn
//SEG1200 sid_rnd_init::@return
breturn:
//SEG1201 [547] return
rts
}
//SEG1202 sprites_irq
// Raster Interrupt Routine - sets up the sprites covering the playfield
// Repeats 10 timers every 2 lines from line IRQ_RASTER_FIRST
// Utilizes duplicated gfx in the sprites to allow for some leeway in updating the sprite pointers
sprites_irq: {
.const toSpritePtr2_return = PLAYFIELD_SPRITES/$40
.label raster_sprite_gfx_modify = $24
//SEG1203 entry interrupt(HARDWARE_CLOBBER)
sta rega+1
stx regx+1
//SEG1204 asm { cld }
//(*BGCOL)++;
// Clear decimal flag (because it is used by the score algorithm)
cld
//SEG1205 [549] (byte) sprites_irq::ypos#0 ← (byte) irq_sprite_ypos#0 -- vbuaa=vbuz1
// Place the sprites
lda irq_sprite_ypos
//SEG1206 [550] *((const byte*) SPRITES_YPOS#0) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuaa
sta SPRITES_YPOS
//SEG1207 [551] *((const byte*) SPRITES_YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuaa
sta SPRITES_YPOS+2
//SEG1208 [552] *((const byte*) SPRITES_YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 4) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuaa
sta SPRITES_YPOS+4
//SEG1209 [553] *((const byte*) SPRITES_YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 6) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuaa
sta SPRITES_YPOS+6
//SEG1210 [554] (byte/signed word/word/dword/signed dword~) sprites_irq::$0 ← (byte) irq_raster_next#0 + (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuxx=vbuz1_plus_1
ldx irq_raster_next
inx
//SEG1211 [555] (byte) sprites_irq::raster_sprite_gfx_modify#0 ← (byte/signed word/word/dword/signed dword~) sprites_irq::$0 -- vbuz1=vbuxx
// Wait for the y-position before changing sprite pointers
stx raster_sprite_gfx_modify
jmp b8
//SEG1212 sprites_irq::@8
b8:
//SEG1213 [556] if(*((const byte*) RASTER#0)<(byte) sprites_irq::raster_sprite_gfx_modify#0) goto sprites_irq::@8 -- _deref_pbuc1_lt_vbuz1_then_la1
lda RASTER
cmp raster_sprite_gfx_modify
bcc b8
jmp b9
//SEG1214 sprites_irq::@9
b9:
//SEG1215 [557] (byte) sprites_irq::ptr#0 ← (byte) irq_sprite_ptr#0 -- vbuxx=vbuz1
ldx irq_sprite_ptr
//SEG1216 [558] if((byte) render_screen_showing#0==(byte/signed byte/word/signed word/dword/signed dword) 0) goto sprites_irq::@1 -- vbuz1_eq_0_then_la1
lda render_screen_showing
cmp #0
beq b1
jmp b10
//SEG1217 sprites_irq::@10
b10:
//SEG1218 [559] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0) ← (byte) sprites_irq::ptr#0 -- _deref_pbuc1=vbuxx
stx PLAYFIELD_SPRITE_PTRS_2
//SEG1219 [560] (byte) sprites_irq::ptr#3 ← ++ (byte) sprites_irq::ptr#0 -- vbuaa=_inc_vbuxx
inx
txa
//SEG1220 [561] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte) sprites_irq::ptr#3 -- _deref_pbuc1=vbuaa
sta PLAYFIELD_SPRITE_PTRS_2+1
//SEG1221 [562] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte) sprites_irq::ptr#3 -- _deref_pbuc1=vbuaa
sta PLAYFIELD_SPRITE_PTRS_2+2
//SEG1222 [563] (byte) sprites_irq::ptr#4 ← ++ (byte) sprites_irq::ptr#3 -- vbuaa=_inc_vbuaa
clc
adc #1
//SEG1223 [564] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte) sprites_irq::ptr#4 -- _deref_pbuc1=vbuaa
sta PLAYFIELD_SPRITE_PTRS_2+3
jmp b2
//SEG1224 sprites_irq::@2
b2:
//SEG1225 [565] (byte) irq_cnt#1 ← ++ (byte) irq_cnt#0 -- vbuz1=_inc_vbuz1
inc irq_cnt
//SEG1226 [566] if((byte) irq_cnt#1==(byte/signed byte/word/signed word/dword/signed dword) 9) goto sprites_irq::@3 -- vbuz1_eq_vbuc1_then_la1
lda #9
cmp irq_cnt
beq b3
jmp b6
//SEG1227 sprites_irq::@6
b6:
//SEG1228 [567] if((byte) irq_cnt#1==(byte/signed byte/word/signed word/dword/signed dword) $a) goto sprites_irq::@4 -- vbuz1_eq_vbuc1_then_la1
lda #$a
cmp irq_cnt
beq b4
jmp b7
//SEG1229 sprites_irq::@7
b7:
//SEG1230 [568] (byte) irq_raster_next#3 ← (byte) irq_raster_next#0 + (byte/signed byte/word/signed word/dword/signed dword) $14 -- vbuz1=vbuz1_plus_vbuc1
lax irq_raster_next
axs #-[$14]
stx irq_raster_next
//SEG1231 [569] (byte) irq_sprite_ypos#3 ← (byte) irq_sprite_ypos#0 + (byte/signed byte/word/signed word/dword/signed dword) $15 -- vbuz1=vbuz1_plus_vbuc1
lax irq_sprite_ypos
axs #-[$15]
stx irq_sprite_ypos
//SEG1232 [570] (byte) irq_sprite_ptr#3 ← (byte) irq_sprite_ptr#0 + (byte/signed byte/word/signed word/dword/signed dword) 3 -- vbuz1=vbuz1_plus_vbuc1
lax irq_sprite_ptr
axs #-[3]
stx irq_sprite_ptr
//SEG1233 [571] phi from sprites_irq::@11 sprites_irq::@4 sprites_irq::@7 to sprites_irq::@5 [phi:sprites_irq::@11/sprites_irq::@4/sprites_irq::@7->sprites_irq::@5]
b5_from_b11:
b5_from_b4:
b5_from_b7:
//SEG1234 [571] phi (byte) irq_raster_next#4 = (byte) irq_raster_next#1 [phi:sprites_irq::@11/sprites_irq::@4/sprites_irq::@7->sprites_irq::@5#0] -- register_copy
jmp b5
//SEG1235 sprites_irq::@5
b5:
//SEG1236 [572] *((const byte*) RASTER#0) ← (byte) irq_raster_next#4 -- _deref_pbuc1=vbuz1
// Setup next interrupt
lda irq_raster_next
sta RASTER
//SEG1237 [573] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2
// Acknowledge the IRQ and setup the next one
lda #IRQ_RASTER
sta IRQ_STATUS
jmp breturn
//SEG1238 sprites_irq::@return
breturn:
//SEG1239 [574] return - exit interrupt(HARDWARE_CLOBBER)
rega:
lda #00
regx:
ldx #00
rti
//SEG1240 sprites_irq::@4
b4:
//SEG1241 [575] (byte) irq_cnt#2 ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- vbuz1=vbuc1
lda #0
sta irq_cnt
//SEG1242 [576] (byte) irq_raster_next#2 ← (const byte) IRQ_RASTER_FIRST#0 -- vbuz1=vbuc1
lda #IRQ_RASTER_FIRST
sta irq_raster_next
//SEG1243 [577] (byte) irq_sprite_ypos#2 ← (byte) irq_sprite_ypos#0 + (byte/signed byte/word/signed word/dword/signed dword) $15 -- vbuz1=vbuz1_plus_vbuc1
lax irq_sprite_ypos
axs #-[$15]
stx irq_sprite_ypos
//SEG1244 [578] (byte) irq_sprite_ptr#2 ← (byte) irq_sprite_ptr#0 + (byte/signed byte/word/signed word/dword/signed dword) 3 -- vbuz1=vbuz1_plus_vbuc1
lax irq_sprite_ptr
axs #-[3]
stx irq_sprite_ptr
jmp b5_from_b4
//SEG1245 sprites_irq::@3
b3:
//SEG1246 [579] (byte) irq_raster_next#1 ← (byte) irq_raster_next#0 + (byte/signed byte/word/signed word/dword/signed dword) $15 -- vbuz1=vbuz1_plus_vbuc1
lax irq_raster_next
axs #-[$15]
stx irq_raster_next
//SEG1247 [580] (byte) irq_sprite_ypos#1 ← (const byte) SPRITES_FIRST_YPOS#0 -- vbuz1=vbuc1
lda #SPRITES_FIRST_YPOS
sta irq_sprite_ypos
//SEG1248 [581] phi from sprites_irq::@3 to sprites_irq::toSpritePtr2 [phi:sprites_irq::@3->sprites_irq::toSpritePtr2]
toSpritePtr2_from_b3:
jmp toSpritePtr2
//SEG1249 sprites_irq::toSpritePtr2
toSpritePtr2:
jmp b11
//SEG1250 sprites_irq::@11
b11:
//SEG1251 [582] (byte) irq_sprite_ptr#1 ← (const byte) sprites_irq::toSpritePtr2_return#0 -- vbuz1=vbuc1
lda #toSpritePtr2_return
sta irq_sprite_ptr
jmp b5_from_b11
//SEG1252 sprites_irq::@1
b1:
//SEG1253 [583] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0) ← (byte) sprites_irq::ptr#0 -- _deref_pbuc1=vbuxx
stx PLAYFIELD_SPRITE_PTRS_1
//SEG1254 [584] (byte) sprites_irq::ptr#1 ← ++ (byte) sprites_irq::ptr#0 -- vbuxx=_inc_vbuxx
inx
//SEG1255 [585] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte) sprites_irq::ptr#1 -- _deref_pbuc1=vbuxx
stx PLAYFIELD_SPRITE_PTRS_1+1
//SEG1256 [586] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte) sprites_irq::ptr#1 -- _deref_pbuc1=vbuxx
stx PLAYFIELD_SPRITE_PTRS_1+2
//SEG1257 [587] (byte) sprites_irq::ptr#2 ← ++ (byte) sprites_irq::ptr#1 -- vbuaa=_inc_vbuxx
inx
txa
//SEG1258 [588] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte) sprites_irq::ptr#2 -- _deref_pbuc1=vbuaa
sta PLAYFIELD_SPRITE_PTRS_1+3
jmp b2
}
// Keyboard row bitmask as expected by CIA#1 Port A when reading a specific keyboard matrix row (rows are numbered 0-7)
keyboard_matrix_row_bitmask: .byte $fe, $fd, $fb, $f7, $ef, $df, $bf, $7f
// Keyboard matrix column bitmasks for a specific keybooard matrix column when reading the keyboard. (columns are numbered 0-7)
keyboard_matrix_col_bitmask: .byte 1, 2, 4, 8, $10, $20, $40, $80
// Keyboard event buffer. Contains keycodes for key presses/releases. Presses are represented by the keycode. Releases by keycode | $40. The buffer is filled by keyboard_scan()
keyboard_events: .fill 8, 0
// The values scanned values for each row. Set by keyboard_scan() and used by keyboard_get_event()
keyboard_scan_values: .fill 8, 0
// The T-piece
.align $40
PIECE_T: .byte 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0
// The S-piece
.align $40
PIECE_S: .byte 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0
// The Z-piece
.align $40
PIECE_Z: .byte 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0
// The L-piece
.align $40
PIECE_L: .byte 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0
// The J-piece
.align $40
PIECE_J: .byte 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0
// The O-piece
.align $40
PIECE_O: .byte 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0
// The I-piece
.align $40
PIECE_I: .byte 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0
// The chars to use for the different pieces - when inside the playing area
PIECES_CHARS: .byte $65, $66, $a6, $66, $65, $65, $a6
// The chars to use for the different pieces - when outside the playing area (eg. the next area).
PIECES_NEXT_CHARS: .byte $63, $64, $a4, $64, $63, $63, $a4
// The initial X/Y for each piece
PIECES_START_X: .byte 4, 4, 4, 4, 4, 4, 4
PIECES_START_Y: .byte 1, 1, 1, 1, 1, 0, 1
// The speed of moving down the piece when soft-drop is not activated
// This array holds the number of frames per move by level (0-29). For all levels 29+ the value is 1.
MOVEDOWN_SLOW_SPEEDS: .byte $30, $2b, $26, $21, $1c, $17, $12, $d, 8, 6, 5, 5, 5, 4, 4, 4, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1
// Base Score values for removing 0-4 lines (in BCD)
// These values are added to score_add_bcd for each level gained.
SCORE_BASE_BCD: .dword 0, $40, $100, $300, $1200
// Score values for removing 0-4 lines (in BCD)
// These values are updated based on the players level and the base values from SCORE_BASE_BCD
score_add_bcd: .fill 4*5, 0
// The color #1 to use for the pieces for each level
PIECES_COLORS_1: .byte BLUE, GREEN, PURPLE, BLUE, RED, LIGHT_GREEN, RED, BLUE, LIGHT_BLUE, RED, BLUE, GREEN, PURPLE, BLUE, RED, LIGHT_GREEN, RED, BLUE, LIGHT_BLUE, RED, BLUE, GREEN, PURPLE, BLUE, RED, LIGHT_GREEN, RED, BLUE, LIGHT_BLUE, RED
// The color #2 to use for the pieces for each level
PIECES_COLORS_2: .byte CYAN, LIGHT_GREEN, PINK, LIGHT_GREEN, LIGHT_GREEN, LIGHT_BLUE, DARK_GREY, PURPLE, RED, ORANGE, CYAN, LIGHT_GREEN, PINK, LIGHT_GREEN, LIGHT_GREEN, LIGHT_BLUE, DARK_GREY, PURPLE, RED, ORANGE, CYAN, LIGHT_GREEN, PINK, LIGHT_GREEN, LIGHT_GREEN, LIGHT_BLUE, DARK_GREY, PURPLE, RED, ORANGE
// Pointers to the screen address for rendering each playfield line
// The lines for screen 1 is aligned with $80 and screen 2 with $40 - so XOR'ing with $40 gives screen 2 lines.
.align $80
screen_lines_1: .fill 2*PLAYFIELD_LINES, 0
.align $40
screen_lines_2: .fill 2*PLAYFIELD_LINES, 0
// Pointers to the playfield address for each playfield line
playfield_lines: .fill 2*PLAYFIELD_LINES, 0
// The playfield. 0 is empty non-zero is color.
// The playfield is layed out line by line, meaning the first 10 bytes are line 1, the next 10 line 2 and so forth,
playfield: .fill PLAYFIELD_LINES*PLAYFIELD_COLS, 0
// The different pieces
PIECES: .word PIECE_T, PIECE_S, PIECE_Z, PIECE_J, PIECE_O, PIECE_I, PIECE_L
// Indixes into the playfield for each playfield line
playfield_lines_idx: .fill PLAYFIELD_LINES+1, 0
.pc = PLAYFIELD_CHARSET "PLAYFIELD_CHARSET"
.fill 8,$00 // Place a filled char at the start of the charset
.import binary "playfield-screen.imap"
.pc = PLAYFIELD_SCREEN_ORIGINAL "PLAYFIELD_SCREEN_ORIGINAL"
// Load chars for the screen
.var screen = LoadBinary("playfield-screen.iscr")
// Load extended colors for the screen
.var extended = LoadBinary("playfield-extended.col")
// screen.get(i)+1 because the charset is loaded into PLAYFIELD_CHARSET+8
// extended.get(i)-1 because the extended colors are 1-based (1/2/3/4)
// <<6 to move extended colors to the upper 2 bits
.fill screen.getSize(), ( (screen.get(i)+1) | (extended.get(i)-1)<<6 )
.pc = PLAYFIELD_COLORS_ORIGINAL "PLAYFIELD_COLORS_ORIGINAL"
.import binary "playfield-screen.col"
.pc = PLAYFIELD_SPRITES "PLAYFIELD_SPRITES"
.var sprites = LoadPicture("playfield-sprites.png", List().add($010101, $000000))
// Put the sprites into memory
.for(var sy=0;sy<10;sy++) {
.var sprite_gfx_y = sy*20
.for(var sx=0;sx<3;sx++) {
.for (var y=0;y<21; y++) {
.var gfx_y = sprite_gfx_y + mod(2100+y-sprite_gfx_y,21)
.for (var c=0; c<3; c++) {
.byte sprites.getSinglecolorByte(sx*3+c,gfx_y)
}
}
.byte 0
}
}
ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp b3
Removing instruction jmp toSpritePtr1
Removing instruction jmp b5
Removing instruction jmp b4
Removing instruction jmp bend
Removing instruction jmp b8
Removing instruction jmp b9
Removing instruction jmp b10
Removing instruction jmp b11
Removing instruction jmp b12
Removing instruction jmp b13
Removing instruction jmp b14
Removing instruction jmp b15
Removing instruction jmp b16
Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp b3
Removing instruction jmp b17
Removing instruction jmp b18
Removing instruction jmp b19
Removing instruction jmp b5
Removing instruction jmp b20
Removing instruction jmp b6
Removing instruction jmp b7
Removing instruction jmp b21
Removing instruction jmp b22
Removing instruction jmp b23
Removing instruction jmp b24
Removing instruction jmp breturn
Removing instruction jmp b2
Removing instruction jmp b1
Removing instruction jmp b3
Removing instruction jmp b4
Removing instruction jmp b5
Removing instruction jmp b6
Removing instruction jmp b7
Removing instruction jmp breturn
Removing instruction jmp b2
Removing instruction jmp b1
Removing instruction jmp breturn
Removing instruction jmp b2
Removing instruction jmp b1
Removing instruction jmp b3
Removing instruction jmp b4
Removing instruction jmp b7
Removing instruction jmp b6
Removing instruction jmp b8
Removing instruction jmp breturn
Removing instruction jmp b1
Removing instruction jmp b7
Removing instruction jmp b3
Removing instruction jmp breturn
Removing instruction jmp b4
Removing instruction jmp b6
Removing instruction jmp b5
Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp b3
Removing instruction jmp breturn
Removing instruction jmp b2
Removing instruction jmp breturn
Removing instruction jmp b3
Removing instruction jmp b4
Removing instruction jmp b4
Removing instruction jmp breturn
Removing instruction jmp b3
Removing instruction jmp b6
Removing instruction jmp b5
Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp b7
Removing instruction jmp breturn
Removing instruction jmp b8
Removing instruction jmp b2
Removing instruction jmp b3
Removing instruction jmp b7
Removing instruction jmp b4
Removing instruction jmp breturn
Removing instruction jmp b6
Removing instruction jmp b5
Removing instruction jmp b4
Removing instruction jmp b1
Removing instruction jmp b12
Removing instruction jmp b5
Removing instruction jmp b6
Removing instruction jmp b2
Removing instruction jmp b7
Removing instruction jmp b3
Removing instruction jmp b8
Removing instruction jmp b13
Removing instruction jmp b9
Removing instruction jmp b14
Removing instruction jmp b15
Removing instruction jmp b16
Removing instruction jmp b11
Removing instruction jmp breturn
Removing instruction jmp b4
Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp breturn
Removing instruction jmp b3
Removing instruction jmp b5
Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp breturn
Removing instruction jmp b3
Removing instruction jmp b1
Removing instruction jmp b4
Removing instruction jmp b2
Removing instruction jmp b5
Removing instruction jmp b6
Removing instruction jmp breturn
Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp b3
Removing instruction jmp b4
Removing instruction jmp b5
Removing instruction jmp b6
Removing instruction jmp b7
Removing instruction jmp breturn
Removing instruction jmp b9
Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp b4
Removing instruction jmp b3
Removing instruction jmp b5
Removing instruction jmp breturn
Removing instruction jmp breturn
Removing instruction jmp b1
Removing instruction jmp breturn
Removing instruction jmp b7
Removing instruction jmp b19
Removing instruction jmp b16
Removing instruction jmp b8
Removing instruction jmp b17
Removing instruction jmp b20
Removing instruction jmp b18
Removing instruction jmp b1
Removing instruction jmp b21
Removing instruction jmp b4
Removing instruction jmp b2
Removing instruction jmp b22
Removing instruction jmp b5
Removing instruction jmp b3
Removing instruction jmp b23
Removing instruction jmp b6
Removing instruction jmp breturn
Removing instruction jmp b9
Removing instruction jmp b12
Removing instruction jmp b13
Removing instruction jmp b14
Removing instruction jmp b10
Removing instruction jmp b15
Removing instruction jmp breturn
Removing instruction jmp toD0182
Removing instruction jmp b1
Removing instruction jmp breturn
Removing instruction jmp toD0181
Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp b3
Removing instruction jmp breturn
Removing instruction jmp breturn
Removing instruction jmp b1
Removing instruction jmp breturn
Removing instruction jmp vicSelectGfxBank1
Removing instruction jmp vicSelectGfxBank1_toDd001
Removing instruction jmp vicSelectGfxBank1_b1
Removing instruction jmp b2
Removing instruction jmp b3
Removing instruction jmp b1
Removing instruction jmp breturn
Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp b3
Removing instruction jmp b4
Removing instruction jmp b5
Removing instruction jmp breturn
Removing instruction jmp breturn
Removing instruction jmp b8
Removing instruction jmp b9
Removing instruction jmp b10
Removing instruction jmp b2
Removing instruction jmp b6
Removing instruction jmp b7
Removing instruction jmp b5
Removing instruction jmp breturn
Removing instruction jmp toSpritePtr2
Removing instruction jmp b11
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Replacing instruction lda #0 with TYA
Replacing instruction lda #0 with TYA
Replacing instruction lda #0 with TYA
Replacing instruction ldy #0 with TAY
Removing instruction lda #0
Removing instruction lda current_orientation
Removing instruction lda #0
Removing instruction ldy _0
Removing instruction lda #0
Removing instruction lda c
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda row_scan
Removing instruction ldy level
Removing instruction lda SPRITES_MC
Removing instruction lda SPRITES_EXPAND_Y
Removing instruction lda #BLACK
Removing instruction ldy #0
Removing instruction ldy #0
Succesful ASM optimization Pass5UnnecesaryLoadElimination
Replacing label b1_from_b6 with b1
Replacing label b1_from_render_bcd with b1
Replacing label b4_from_b6 with b4
Replacing label b3_from_b8 with b3
Replacing label b1_from_b3 with b1
Replacing label b4_from_b5 with b4
Replacing label b3_from_b5 with b3
Replacing label b2_from_b2 with b2
Replacing label b1_from_b3 with b1
Replacing label breturn_from_b4 with breturn
Replacing label b3_from_b1 with b3
Replacing label breturn_from_b2 with breturn_from_b7
Replacing label breturn_from_b6 with breturn_from_b7
Replacing label b2_from_b12 with b2
Replacing label b2_from_b5 with b2
Replacing label b3_from_b2 with b3
Replacing label b5_from_b4 with b5
Replacing label breturn_from_play_update_score with breturn
Replacing label breturn_from_b1 with breturn
Replacing label b2_from_b1 with b2
Replacing label b5_from_b5 with b5
Replacing label b9_from_b2 with b9
Replacing label b2_from_b3 with b2
Replacing label b6_from_b4 with b6
Replacing label b1_from_b6 with b1
Replacing label b7_from_b8 with b7
Replacing label b1_from_b20 with b1
Replacing label b2_from_b21 with b2
Replacing label b3_from_b22 with b3
Replacing label breturn with b6
Replacing label b10_from_b9 with b10
Replacing label b10_from_b12 with b10
Replacing label b8_from_b15 with b8
Replacing label b10_from_b11 with b10
Replacing label toD0181_from_render_show with toD0181
Replacing label b1_from_b1 with b1
Replacing label b3_from_b3 with b3
Replacing label b1_from_b1 with b1
Replacing label b1_from_b1 with b1
Replacing label b2_from_b2 with b2
Replacing label b3_from_b3 with b3
Replacing label b4_from_b4 with b4
Replacing label b1_from_b5 with b1
Replacing label b5_from_b4 with b5
Replacing label b5_from_b11 with b5
Removing instruction b1:
Removing instruction b2:
Removing instruction toSpritePtr1_from_b3:
Removing instruction toSpritePtr1:
Removing instruction b4_from_b5:
Removing instruction main_from_b4:
Removing instruction bend_from_b4:
Removing instruction b9_from_b8:
Removing instruction b10_from_b9:
Removing instruction b11_from_b10:
Removing instruction play_init_from_b11:
Removing instruction b12_from_b11:
Removing instruction play_spawn_current_from_b12:
Removing instruction b13_from_b12:
Removing instruction play_spawn_current_from_b13:
Removing instruction b14_from_b13:
Removing instruction render_playfield_from_b14:
Removing instruction b1_from_b6:
Removing instruction b3_from_b2:
Removing instruction b17_from_b3:
Removing instruction keyboard_event_scan_from_b17:
Removing instruction b18_from_b17:
Removing instruction b20:
Removing instruction b23_from_b22:
Removing instruction b24_from_b23:
Removing instruction b2_from_render_score:
Removing instruction b1_from_b2:
Removing instruction b1_from_render_bcd:
Removing instruction b1_from_b2:
Removing instruction b2_from_render_next:
Removing instruction b1_from_b2:
Removing instruction b3_from_b8:
Removing instruction b4_from_b3:
Removing instruction b4_from_b6:
Removing instruction b1_from_b3:
Removing instruction b3_from_b5:
Removing instruction b3_from_b7:
Removing instruction b4_from_b5:
Removing instruction b1_from_b3:
Removing instruction b2_from_b2:
Removing instruction breturn_from_b2:
Removing instruction breturn_from_b4:
Removing instruction breturn_from_b4:
Removing instruction b3_from_b1:
Removing instruction b3_from_b2:
Removing instruction breturn_from_b4:
Removing instruction breturn_from_b2:
Removing instruction breturn_from_b6:
Removing instruction b4_from_play_move_down:
Removing instruction b1_from_b4:
Removing instruction keyboard_event_pressed_from_b1:
Removing instruction b2_from_b12:
Removing instruction b2_from_b5:
Removing instruction b2_from_b6:
Removing instruction b3_from_b2:
Removing instruction b3_from_b7:
Removing instruction b9_from_b13:
Removing instruction b14_from_b9:
Removing instruction play_remove_lines_from_b14:
Removing instruction b16_from_b15:
Removing instruction play_spawn_current_from_b16:
Removing instruction breturn_from_b11:
Removing instruction b2_from_b1:
Removing instruction b5_from_b4:
Removing instruction b1_from_b5:
Removing instruction b2_from_b1:
Removing instruction breturn_from_play_update_score:
Removing instruction breturn_from_b1:
Removing instruction breturn_from_b2:
Removing instruction b2_from_b1:
Removing instruction b2_from_b4:
Removing instruction b5_from_b5:
Removing instruction b1_from_b6:
Removing instruction b2_from_b1:
Removing instruction b2_from_b3:
Removing instruction b6_from_b4:
Removing instruction b6_from_b5:
Removing instruction b7_from_b6:
Removing instruction b9_from_b2:
Removing instruction b3_from_b9:
Removing instruction b7_from_b8:
Removing instruction b8_from_b15:
Removing instruction b8_from_b16:
Removing instruction b17_from_b8:
Removing instruction keyboard_event_pressed_from_b17:
Removing instruction b18_from_b20:
Removing instruction b18:
Removing instruction b1_from_b18:
Removing instruction b1_from_b20:
Removing instruction keyboard_event_pressed_from_b1:
Removing instruction b4_from_b21:
Removing instruction b4:
Removing instruction b2_from_b21:
Removing instruction b2_from_b4:
Removing instruction keyboard_event_pressed_from_b2:
Removing instruction b5_from_b22:
Removing instruction b5:
Removing instruction b3_from_b22:
Removing instruction b3_from_b5:
Removing instruction keyboard_event_pressed_from_b3:
Removing instruction b6_from_b23:
Removing instruction breturn:
Removing instruction b10_from_b11:
Removing instruction b10_from_b12:
Removing instruction b10_from_b14:
Removing instruction b10_from_b9:
Removing instruction toD0182_from_render_show:
Removing instruction b1_from_toD0182:
Removing instruction toD0181_from_render_show:
Removing instruction b1_from_toD0181:
Removing instruction b1_from_b1:
Removing instruction b3_from_b3:
Removing instruction b1_from_b1:
Removing instruction vicSelectGfxBank1_toDd001_from_vicSelectGfxBank1:
Removing instruction vicSelectGfxBank1_toDd001:
Removing instruction b3_from_b2:
Removing instruction render_screen_original_from_b3:
Removing instruction b1_from_b1:
Removing instruction b1_from_b5:
Removing instruction b2_from_b1:
Removing instruction b2_from_b2:
Removing instruction b3_from_b2:
Removing instruction b3_from_b3:
Removing instruction b4_from_b3:
Removing instruction b4_from_b4:
Removing instruction b5_from_b11:
Removing instruction b5_from_b4:
Removing instruction b5_from_b7:
Removing instruction breturn:
Removing instruction toSpritePtr2_from_b3:
Removing instruction toSpritePtr2:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction b3:
Removing instruction b5:
Removing instruction b4:
Removing instruction bend:
Removing instruction b8:
Removing instruction render_init_from_b8:
Removing instruction b9:
Removing instruction b10:
Removing instruction b11:
Removing instruction b12:
Removing instruction b13:
Removing instruction b14:
Removing instruction b15:
Removing instruction render_moving_from_b15:
Removing instruction b16:
Removing instruction render_next_from_b16:
Removing instruction b1_from_b16:
Removing instruction b3:
Removing instruction b17:
Removing instruction b18:
Removing instruction b19:
Removing instruction b6:
Removing instruction b7:
Removing instruction render_playfield_from_b7:
Removing instruction b21:
Removing instruction render_moving_from_b21:
Removing instruction b22:
Removing instruction render_next_from_b22:
Removing instruction b23:
Removing instruction b24:
Removing instruction b1_from_b24:
Removing instruction breturn:
Removing instruction b2:
Removing instruction render_bcd_from_b1:
Removing instruction b3:
Removing instruction render_bcd_from_b3:
Removing instruction b4:
Removing instruction render_bcd_from_b4:
Removing instruction b5:
Removing instruction render_bcd_from_b5:
Removing instruction b6:
Removing instruction render_bcd_from_b6:
Removing instruction b7:
Removing instruction render_bcd_from_b7:
Removing instruction breturn:
Removing instruction b2:
Removing instruction breturn:
Removing instruction b2:
Removing instruction b3_from_b1:
Removing instruction b7:
Removing instruction b8:
Removing instruction breturn:
Removing instruction b1_from_render_moving:
Removing instruction b7:
Removing instruction breturn:
Removing instruction b4_from_b2:
Removing instruction b6:
Removing instruction b1_from_render_playfield:
Removing instruction b2_from_b1:
Removing instruction b3:
Removing instruction breturn:
Removing instruction b2:
Removing instruction b3:
Removing instruction b4:
Removing instruction b4:
Removing instruction play_collision_from_b3:
Removing instruction b6:
Removing instruction b5:
Removing instruction breturn_from_b5:
Removing instruction b1_from_play_collision:
Removing instruction b2_from_b1:
Removing instruction b7:
Removing instruction breturn_from_b7:
Removing instruction breturn_from_b4:
Removing instruction breturn_from_b5:
Removing instruction breturn_from_b6:
Removing instruction b8:
Removing instruction breturn_from_b8:
Removing instruction b1_from_b9:
Removing instruction b2_from_b10:
Removing instruction b2:
Removing instruction b3:
Removing instruction play_collision_from_b3:
Removing instruction b7:
Removing instruction b4:
Removing instruction play_collision_from_b1:
Removing instruction b6:
Removing instruction b5:
Removing instruction b4:
Removing instruction b12:
Removing instruction b5:
Removing instruction b6:
Removing instruction b7:
Removing instruction b8:
Removing instruction play_collision_from_b8:
Removing instruction b13:
Removing instruction b9:
Removing instruction b14:
Removing instruction b15:
Removing instruction b16:
Removing instruction b11_from_b16:
Removing instruction b11_from_b10:
Removing instruction play_collision_from_play_spawn_current:
Removing instruction b4:
Removing instruction b1_from_b4:
Removing instruction breturn:
Removing instruction b3:
Removing instruction b2_from_b3:
Removing instruction b1:
Removing instruction b2:
Removing instruction b3:
Removing instruction b1_from_b3:
Removing instruction b4:
Removing instruction b5_from_b2:
Removing instruction b6:
Removing instruction breturn:
Removing instruction b1_from_play_remove_lines:
Removing instruction b3_from_b2:
Removing instruction b4:
Removing instruction b5:
Removing instruction b7:
Removing instruction breturn:
Removing instruction b1_from_play_lock_current:
Removing instruction b2_from_b1:
Removing instruction b4:
Removing instruction b5:
Removing instruction breturn:
Removing instruction b1_from_b6:
Removing instruction b2_from_b7:
Removing instruction breturn:
Removing instruction b1:
Removing instruction breturn_from_b1:
Removing instruction b7_from_keyboard_event_scan:
Removing instruction b19:
Removing instruction b16:
Removing instruction b17:
Removing instruction b20:
Removing instruction b21:
Removing instruction b22:
Removing instruction b23:
Removing instruction b12:
Removing instruction b13:
Removing instruction b14:
Removing instruction b15:
Removing instruction breturn:
Removing instruction toD0182:
Removing instruction breturn:
Removing instruction b1_from_play_init:
Removing instruction b2:
Removing instruction b3_from_b2:
Removing instruction breturn:
Removing instruction breturn:
Removing instruction b1_from_sprites_init:
Removing instruction breturn:
Removing instruction vicSelectGfxBank1:
Removing instruction vicSelectGfxBank1_b1:
Removing instruction b2:
Removing instruction render_screen_original_from_b2:
Removing instruction b3:
Removing instruction b1_from_b3:
Removing instruction breturn:
Removing instruction b1_from_render_screen_original:
Removing instruction b5:
Removing instruction breturn:
Removing instruction breturn:
Removing instruction b9:
Removing instruction b10:
Removing instruction b6:
Removing instruction b7:
Removing instruction b11:
Succesful ASM optimization Pass5UnusedLabelElimination
Replacing jump to rts with rts in jmp breturn
Replacing jump to rts with rts in jmp breturn
Replacing jump to rts with rts in jmp breturn
Replacing jump to rts with rts in jmp breturn
Replacing jump to rts with rts in jmp breturn
Replacing jump to rts with rts in jmp breturn
Replacing jump to rts with rts in jmp breturn
Replacing jump to rts with rts in jmp breturn
Skipping double jump to b1 in bne b5
Skipping double jump to b3 in bne b9
Replacing jump to rts with rts in jmp breturn
Skipping double jump to b9 in bne b9_from_b10
Succesful ASM optimization Pass5DoubleJumpElimination
Relabelling long label b1_from_render_score to b2
Relabelling long label b1_from_render_next to b2
Relabelling long label breturn_from_b6 to b4
Relabelling long label breturn_from_b5 to b2
Relabelling long label breturn_from_b7 to b3
Relabelling long label b1_from_play_move_down to b4
Relabelling long label breturn_from_b3 to b5
Relabelling long label b1_from_play_increase_level to b3
Relabelling long label b7_from_b8 to b4
Relabelling long label breturn_from_keyboard_event_get to b1
Relabelling long label b9_from_b10 to b4
Relabelling long label b9_from_b19 to b5
Succesful ASM optimization Pass5RelabelLongLabels
Adding RTS to root block
Succesful ASM optimization Pass5AddMainRts
Removing instruction jmp b1
Removing instruction jmp b3
Removing instruction jmp b4
Removing instruction jmp b1
Removing instruction jmp b4
Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp b5
Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp b7
Removing instruction beq b1
Removing instruction beq b2
Removing instruction beq b3
Removing instruction beq b6
Removing instruction jmp b1
Removing instruction jmp b3
Removing instruction jmp b1
Removing instruction jmp b1
Removing instruction jmp b1
Removing instruction jmp b2
Succesful ASM optimization Pass5NextJumpElimination
Replacing instruction ldy level with TAY
Removing instruction breturn:
Removing instruction breturn:
Removing instruction breturn:
Removing instruction breturn:
Removing instruction breturn:
Removing instruction b5:
Removing instruction b9:
Removing instruction breturn:
Removing instruction b1:
Removing instruction b2:
Removing instruction b3:
Removing instruction b6:
Removing instruction b4:
Succesful ASM optimization Pass5UnusedLabelElimination
Removing unreachable instruction jmp b1
Removing unreachable instruction jmp b3
Removing unreachable instruction jmp b9
Succesful ASM optimization Pass5UnreachableCodeElimination
FINAL SYMBOL TABLE
(label) @1
(label) @2
(label) @3
(label) @4
(label) @5
(label) @begin
(label) @end
(byte*) BGCOL1
(const byte*) BGCOL1#0 BGCOL1 = ((byte*))(word/dword/signed dword) $d021
(byte*) BGCOL2
(const byte*) BGCOL2#0 BGCOL2 = ((byte*))(word/dword/signed dword) $d022
(byte*) BGCOL3
(const byte*) BGCOL3#0 BGCOL3 = ((byte*))(word/dword/signed dword) $d023
(byte*) BGCOL4
(const byte*) BGCOL4#0 BGCOL4 = ((byte*))(word/dword/signed dword) $d024
(byte) BLACK
(const byte) BLACK#0 BLACK = (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) BLUE
(const byte) BLUE#0 BLUE = (byte/signed byte/word/signed word/dword/signed dword) 6
(byte*) BORDERCOL
(const byte*) BORDERCOL#0 BORDERCOL = ((byte*))(word/dword/signed dword) $d020
(byte*) CIA1_INTERRUPT
(const byte*) CIA1_INTERRUPT#0 CIA1_INTERRUPT = ((byte*))(word/dword/signed dword) $dc0d
(byte*) CIA1_PORT_A
(const byte*) CIA1_PORT_A#0 CIA1_PORT_A = ((byte*))(word/dword/signed dword) $dc00
(byte*) CIA1_PORT_B
(const byte*) CIA1_PORT_B#0 CIA1_PORT_B = ((byte*))(word/dword/signed dword) $dc01
(byte*) CIA2_PORT_A
(const byte*) CIA2_PORT_A#0 CIA2_PORT_A = ((byte*))(word/dword/signed dword) $dd00
(byte*) CIA2_PORT_A_DDR
(const byte*) CIA2_PORT_A_DDR#0 CIA2_PORT_A_DDR = ((byte*))(word/dword/signed dword) $dd02
(byte) CIA_INTERRUPT_CLEAR
(const byte) CIA_INTERRUPT_CLEAR#0 CIA_INTERRUPT_CLEAR = (byte/signed byte/word/signed word/dword/signed dword) $7f
(byte) COLLISION_BOTTOM
(const byte) COLLISION_BOTTOM#0 COLLISION_BOTTOM = (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) COLLISION_LEFT
(const byte) COLLISION_LEFT#0 COLLISION_LEFT = (byte/signed byte/word/signed word/dword/signed dword) 4
(byte) COLLISION_NONE
(const byte) COLLISION_NONE#0 COLLISION_NONE = (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) COLLISION_PLAYFIELD
(const byte) COLLISION_PLAYFIELD#0 COLLISION_PLAYFIELD = (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) COLLISION_RIGHT
(const byte) COLLISION_RIGHT#0 COLLISION_RIGHT = (byte/signed byte/word/signed word/dword/signed dword) 8
(byte*) COLS
(const byte*) COLS#0 COLS = ((byte*))(word/dword/signed dword) $d800
(byte) CYAN
(const byte) CYAN#0 CYAN = (byte/signed byte/word/signed word/dword/signed dword) 3
(byte*) D011
(const byte*) D011#0 D011 = ((byte*))(word/dword/signed dword) $d011
(byte*) D018
(const byte*) D018#0 D018 = ((byte*))(word/dword/signed dword) $d018
(byte) DARK_GREY
(const byte) DARK_GREY#0 DARK_GREY = (byte/signed byte/word/signed word/dword/signed dword) $b
(byte) GREEN
(const byte) GREEN#0 GREEN = (byte/signed byte/word/signed word/dword/signed dword) 5
(byte) GREY
(const byte) GREY#0 GREY = (byte/signed byte/word/signed word/dword/signed dword) $c
(void()**) HARDWARE_IRQ
(const void()**) HARDWARE_IRQ#0 HARDWARE_IRQ = ((void()**))(word/dword/signed dword) $fffe
(byte*) IRQ_ENABLE
(const byte*) IRQ_ENABLE#0 IRQ_ENABLE = ((byte*))(word/dword/signed dword) $d01a
(byte) IRQ_RASTER
(const byte) IRQ_RASTER#0 IRQ_RASTER = (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) IRQ_RASTER_FIRST
(const byte) IRQ_RASTER_FIRST#0 IRQ_RASTER_FIRST = (const byte) SPRITES_FIRST_YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) $13
(byte*) IRQ_STATUS
(const byte*) IRQ_STATUS#0 IRQ_STATUS = ((byte*))(word/dword/signed dword) $d019
(byte) KEY_COMMA
(const byte) KEY_COMMA#0 KEY_COMMA = (byte/signed byte/word/signed word/dword/signed dword) $2f
(byte) KEY_COMMODORE
(const byte) KEY_COMMODORE#0 KEY_COMMODORE = (byte/signed byte/word/signed word/dword/signed dword) $3d
(byte) KEY_CTRL
(const byte) KEY_CTRL#0 KEY_CTRL = (byte/signed byte/word/signed word/dword/signed dword) $3a
(byte) KEY_DOT
(const byte) KEY_DOT#0 KEY_DOT = (byte/signed byte/word/signed word/dword/signed dword) $2c
(byte) KEY_LSHIFT
(const byte) KEY_LSHIFT#0 KEY_LSHIFT = (byte/signed byte/word/signed word/dword/signed dword) $f
(byte) KEY_MODIFIER_COMMODORE
(byte) KEY_MODIFIER_CTRL
(byte) KEY_MODIFIER_LSHIFT
(byte) KEY_MODIFIER_RSHIFT
(byte) KEY_RSHIFT
(const byte) KEY_RSHIFT#0 KEY_RSHIFT = (byte/signed byte/word/signed word/dword/signed dword) $34
(byte) KEY_SPACE
(const byte) KEY_SPACE#0 KEY_SPACE = (byte/signed byte/word/signed word/dword/signed dword) $3c
(byte) KEY_X
(const byte) KEY_X#0 KEY_X = (byte/signed byte/word/signed word/dword/signed dword) $17
(byte) KEY_Z
(const byte) KEY_Z#0 KEY_Z = (byte/signed byte/word/signed word/dword/signed dword) $c
(byte) LIGHT_BLUE
(const byte) LIGHT_BLUE#0 LIGHT_BLUE = (byte/signed byte/word/signed word/dword/signed dword) $e
(byte) LIGHT_GREEN
(const byte) LIGHT_GREEN#0 LIGHT_GREEN = (byte/signed byte/word/signed word/dword/signed dword) $d
(byte[]) MOVEDOWN_SLOW_SPEEDS
(const byte[]) MOVEDOWN_SLOW_SPEEDS#0 MOVEDOWN_SLOW_SPEEDS = { (byte/signed byte/word/signed word/dword/signed dword) $30, (byte/signed byte/word/signed word/dword/signed dword) $2b, (byte/signed byte/word/signed word/dword/signed dword) $26, (byte/signed byte/word/signed word/dword/signed dword) $21, (byte/signed byte/word/signed word/dword/signed dword) $1c, (byte/signed byte/word/signed word/dword/signed dword) $17, (byte/signed byte/word/signed word/dword/signed dword) $12, (byte/signed byte/word/signed word/dword/signed dword) $d, (byte/signed byte/word/signed word/dword/signed dword) 8, (byte/signed byte/word/signed word/dword/signed dword) 6, (byte/signed byte/word/signed word/dword/signed dword) 5, (byte/signed byte/word/signed word/dword/signed dword) 5, (byte/signed byte/word/signed word/dword/signed dword) 5, (byte/signed byte/word/signed word/dword/signed dword) 4, (byte/signed byte/word/signed word/dword/signed dword) 4, (byte/signed byte/word/signed word/dword/signed dword) 4, (byte/signed byte/word/signed word/dword/signed dword) 3, (byte/signed byte/word/signed word/dword/signed dword) 3, (byte/signed byte/word/signed word/dword/signed dword) 3, (byte/signed byte/word/signed word/dword/signed dword) 2, (byte/signed byte/word/signed word/dword/signed dword) 2, (byte/signed byte/word/signed word/dword/signed dword) 2, (byte/signed byte/word/signed word/dword/signed dword) 2, (byte/signed byte/word/signed word/dword/signed dword) 2, (byte/signed byte/word/signed word/dword/signed dword) 2, (byte/signed byte/word/signed word/dword/signed dword) 2, (byte/signed byte/word/signed word/dword/signed dword) 2, (byte/signed byte/word/signed word/dword/signed dword) 2, (byte/signed byte/word/signed word/dword/signed dword) 2, (byte/signed byte/word/signed word/dword/signed dword) 1 }
(byte) ORANGE
(const byte) ORANGE#0 ORANGE = (byte/signed byte/word/signed word/dword/signed dword) 8
(word[]) PIECES
(const word[]) PIECES#0 PIECES = { ((word))(const byte[4*4*4]) PIECE_T#0, ((word))(const byte[4*4*4]) PIECE_S#0, ((word))(const byte[4*4*4]) PIECE_Z#0, ((word))(const byte[4*4*4]) PIECE_J#0, ((word))(const byte[4*4*4]) PIECE_O#0, ((word))(const byte[4*4*4]) PIECE_I#0, ((word))(const byte[4*4*4]) PIECE_L#0 }
(byte[]) PIECES_CHARS
(const byte[]) PIECES_CHARS#0 PIECES_CHARS = { (byte/signed byte/word/signed word/dword/signed dword) $65, (byte/signed byte/word/signed word/dword/signed dword) $66, (byte/word/signed word/dword/signed dword) $a6, (byte/signed byte/word/signed word/dword/signed dword) $66, (byte/signed byte/word/signed word/dword/signed dword) $65, (byte/signed byte/word/signed word/dword/signed dword) $65, (byte/word/signed word/dword/signed dword) $a6 }
(byte[]) PIECES_COLORS_1
(const byte[]) PIECES_COLORS_1#0 PIECES_COLORS_1 = { (const byte) BLUE#0, (const byte) GREEN#0, (const byte) PURPLE#0, (const byte) BLUE#0, (const byte) RED#0, (const byte) LIGHT_GREEN#0, (const byte) RED#0, (const byte) BLUE#0, (const byte) LIGHT_BLUE#0, (const byte) RED#0, (const byte) BLUE#0, (const byte) GREEN#0, (const byte) PURPLE#0, (const byte) BLUE#0, (const byte) RED#0, (const byte) LIGHT_GREEN#0, (const byte) RED#0, (const byte) BLUE#0, (const byte) LIGHT_BLUE#0, (const byte) RED#0, (const byte) BLUE#0, (const byte) GREEN#0, (const byte) PURPLE#0, (const byte) BLUE#0, (const byte) RED#0, (const byte) LIGHT_GREEN#0, (const byte) RED#0, (const byte) BLUE#0, (const byte) LIGHT_BLUE#0, (const byte) RED#0 }
(byte[]) PIECES_COLORS_2
(const byte[]) PIECES_COLORS_2#0 PIECES_COLORS_2 = { (const byte) CYAN#0, (const byte) LIGHT_GREEN#0, (const byte) PINK#0, (const byte) LIGHT_GREEN#0, (const byte) LIGHT_GREEN#0, (const byte) LIGHT_BLUE#0, (const byte) DARK_GREY#0, (const byte) PURPLE#0, (const byte) RED#0, (const byte) ORANGE#0, (const byte) CYAN#0, (const byte) LIGHT_GREEN#0, (const byte) PINK#0, (const byte) LIGHT_GREEN#0, (const byte) LIGHT_GREEN#0, (const byte) LIGHT_BLUE#0, (const byte) DARK_GREY#0, (const byte) PURPLE#0, (const byte) RED#0, (const byte) ORANGE#0, (const byte) CYAN#0, (const byte) LIGHT_GREEN#0, (const byte) PINK#0, (const byte) LIGHT_GREEN#0, (const byte) LIGHT_GREEN#0, (const byte) LIGHT_BLUE#0, (const byte) DARK_GREY#0, (const byte) PURPLE#0, (const byte) RED#0, (const byte) ORANGE#0 }
(byte[]) PIECES_NEXT_CHARS
(const byte[]) PIECES_NEXT_CHARS#0 PIECES_NEXT_CHARS = { (byte/signed byte/word/signed word/dword/signed dword) $63, (byte/signed byte/word/signed word/dword/signed dword) $64, (byte/word/signed word/dword/signed dword) $a4, (byte/signed byte/word/signed word/dword/signed dword) $64, (byte/signed byte/word/signed word/dword/signed dword) $63, (byte/signed byte/word/signed word/dword/signed dword) $63, (byte/word/signed word/dword/signed dword) $a4 }
(byte[]) PIECES_START_X
(const byte[]) PIECES_START_X#0 PIECES_START_X = { (byte/signed byte/word/signed word/dword/signed dword) 4, (byte/signed byte/word/signed word/dword/signed dword) 4, (byte/signed byte/word/signed word/dword/signed dword) 4, (byte/signed byte/word/signed word/dword/signed dword) 4, (byte/signed byte/word/signed word/dword/signed dword) 4, (byte/signed byte/word/signed word/dword/signed dword) 4, (byte/signed byte/word/signed word/dword/signed dword) 4 }
(byte[]) PIECES_START_Y
(const byte[]) PIECES_START_Y#0 PIECES_START_Y = { (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1 }
(byte[4*4*4]) PIECE_I
(const byte[4*4*4]) PIECE_I#0 PIECE_I = { (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0 }
(byte[4*4*4]) PIECE_J
(const byte[4*4*4]) PIECE_J#0 PIECE_J = { (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0 }
(byte[4*4*4]) PIECE_L
(const byte[4*4*4]) PIECE_L#0 PIECE_L = { (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0 }
(byte[4*4*4]) PIECE_O
(const byte[4*4*4]) PIECE_O#0 PIECE_O = { (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0 }
(byte[4*4*4]) PIECE_S
(const byte[4*4*4]) PIECE_S#0 PIECE_S = { (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0 }
(byte[4*4*4]) PIECE_T
(const byte[4*4*4]) PIECE_T#0 PIECE_T = { (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0 }
(byte[4*4*4]) PIECE_Z
(const byte[4*4*4]) PIECE_Z#0 PIECE_Z = { (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0 }
(byte) PINK
(const byte) PINK#0 PINK = (byte/signed byte/word/signed word/dword/signed dword) $a
(byte*) PLAYFIELD_CHARSET
(const byte*) PLAYFIELD_CHARSET#0 PLAYFIELD_CHARSET = ((byte*))(word/signed word/dword/signed dword) $2800
(byte*) PLAYFIELD_COLORS_ORIGINAL
(const byte*) PLAYFIELD_COLORS_ORIGINAL#0 PLAYFIELD_COLORS_ORIGINAL = ((byte*))(word/signed word/dword/signed dword) $1c00
(byte) PLAYFIELD_COLS
(const byte) PLAYFIELD_COLS#0 PLAYFIELD_COLS = (byte/signed byte/word/signed word/dword/signed dword) $a
(byte) PLAYFIELD_LINES
(const byte) PLAYFIELD_LINES#0 PLAYFIELD_LINES = (byte/signed byte/word/signed word/dword/signed dword) $16
(byte*) PLAYFIELD_SCREEN_1
(const byte*) PLAYFIELD_SCREEN_1#0 PLAYFIELD_SCREEN_1 = ((byte*))(word/signed word/dword/signed dword) $400
(byte*) PLAYFIELD_SCREEN_2
(const byte*) PLAYFIELD_SCREEN_2#0 PLAYFIELD_SCREEN_2 = ((byte*))(word/signed word/dword/signed dword) $2c00
(byte*) PLAYFIELD_SCREEN_ORIGINAL
(const byte*) PLAYFIELD_SCREEN_ORIGINAL#0 PLAYFIELD_SCREEN_ORIGINAL = ((byte*))(word/signed word/dword/signed dword) $1800
(byte*) PLAYFIELD_SPRITES
(const byte*) PLAYFIELD_SPRITES#0 PLAYFIELD_SPRITES = ((byte*))(word/signed word/dword/signed dword) $2000
(byte*) PLAYFIELD_SPRITE_PTRS_1
(const byte*) PLAYFIELD_SPRITE_PTRS_1#0 PLAYFIELD_SPRITE_PTRS_1 = (const byte*) PLAYFIELD_SCREEN_1#0+(const word) SPRITE_PTRS#0
(byte*) PLAYFIELD_SPRITE_PTRS_2
(const byte*) PLAYFIELD_SPRITE_PTRS_2#0 PLAYFIELD_SPRITE_PTRS_2 = (const byte*) PLAYFIELD_SCREEN_2#0+(const word) SPRITE_PTRS#0
(byte*) PROCPORT
(const byte*) PROCPORT#0 PROCPORT = ((byte*))(byte/signed byte/word/signed word/dword/signed dword) 1
(byte*) PROCPORT_DDR
(const byte*) PROCPORT_DDR#0 PROCPORT_DDR = ((byte*))(byte/signed byte/word/signed word/dword/signed dword) 0
(byte) PROCPORT_DDR_MEMORY_MASK
(const byte) PROCPORT_DDR_MEMORY_MASK#0 PROCPORT_DDR_MEMORY_MASK = (byte/signed byte/word/signed word/dword/signed dword) 7
(byte) PROCPORT_RAM_IO
(const byte) PROCPORT_RAM_IO#0 PROCPORT_RAM_IO = (byte/signed byte/word/signed word/dword/signed dword) $35
(byte) PURPLE
(const byte) PURPLE#0 PURPLE = (byte/signed byte/word/signed word/dword/signed dword) 4
(byte*) RASTER
(const byte*) RASTER#0 RASTER = ((byte*))(word/dword/signed dword) $d012
(byte) RED
(const byte) RED#0 RED = (byte/signed byte/word/signed word/dword/signed dword) 2
(dword[]) SCORE_BASE_BCD
(const dword[]) SCORE_BASE_BCD#0 SCORE_BASE_BCD = { (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) $40, (word/signed word/dword/signed dword) $100, (word/signed word/dword/signed dword) $300, (word/signed word/dword/signed dword) $1200 }
(byte) SID_CONTROL_NOISE
(const byte) SID_CONTROL_NOISE#0 SID_CONTROL_NOISE = (byte/word/signed word/dword/signed dword) $80
(byte*) SID_VOICE3_CONTROL
(const byte*) SID_VOICE3_CONTROL#0 SID_VOICE3_CONTROL = ((byte*))(word/dword/signed dword) $d412
(word*) SID_VOICE3_FREQ
(const word*) SID_VOICE3_FREQ#0 SID_VOICE3_FREQ = ((word*))(word/dword/signed dword) $d40e
(byte*) SID_VOICE3_OSC
(const byte*) SID_VOICE3_OSC#0 SID_VOICE3_OSC = ((byte*))(word/dword/signed dword) $d41b
(byte*) SPRITES_COLS
(const byte*) SPRITES_COLS#0 SPRITES_COLS = ((byte*))(word/dword/signed dword) $d027
(byte*) SPRITES_ENABLE
(const byte*) SPRITES_ENABLE#0 SPRITES_ENABLE = ((byte*))(word/dword/signed dword) $d015
(byte*) SPRITES_EXPAND_X
(const byte*) SPRITES_EXPAND_X#0 SPRITES_EXPAND_X = ((byte*))(word/dword/signed dword) $d01d
(byte*) SPRITES_EXPAND_Y
(const byte*) SPRITES_EXPAND_Y#0 SPRITES_EXPAND_Y = ((byte*))(word/dword/signed dword) $d017
(byte) SPRITES_FIRST_YPOS
(const byte) SPRITES_FIRST_YPOS#0 SPRITES_FIRST_YPOS = (byte/signed byte/word/signed word/dword/signed dword) $31
(byte*) SPRITES_MC
(const byte*) SPRITES_MC#0 SPRITES_MC = ((byte*))(word/dword/signed dword) $d01c
(byte*) SPRITES_XPOS
(const byte*) SPRITES_XPOS#0 SPRITES_XPOS = ((byte*))(word/dword/signed dword) $d000
(byte*) SPRITES_YPOS
(const byte*) SPRITES_YPOS#0 SPRITES_YPOS = ((byte*))(word/dword/signed dword) $d001
(word) SPRITE_PTRS
(const word) SPRITE_PTRS#0 SPRITE_PTRS = (word/signed word/dword/signed dword) $3f8
(byte*) VIC_CONTROL
(const byte*) VIC_CONTROL#0 VIC_CONTROL = ((byte*))(word/dword/signed dword) $d011
(byte) VIC_DEN
(const byte) VIC_DEN#0 VIC_DEN = (byte/signed byte/word/signed word/dword/signed dword) $10
(byte) VIC_ECM
(const byte) VIC_ECM#0 VIC_ECM = (byte/signed byte/word/signed word/dword/signed dword) $40
(byte) VIC_RSEL
(const byte) VIC_RSEL#0 VIC_RSEL = (byte/signed byte/word/signed word/dword/signed dword) 8
(byte) current_movedown_counter
(byte) current_movedown_counter#12 current_movedown_counter zp ZP_BYTE:4 0.5333333333333333
(byte) current_movedown_counter#14 current_movedown_counter zp ZP_BYTE:4 3.081081081081081
(byte) current_movedown_counter#16 current_movedown_counter zp ZP_BYTE:4 8.769230769230768
(byte) current_movedown_fast
(const byte) current_movedown_fast#0 current_movedown_fast = (byte/signed byte/word/signed word/dword/signed dword) $a
(byte) current_movedown_slow
(byte) current_movedown_slow#1 current_movedown_slow zp ZP_BYTE:24 0.18181818181818182
(byte) current_movedown_slow#10 current_movedown_slow zp ZP_BYTE:24 4.0
(byte) current_movedown_slow#14 current_movedown_slow zp ZP_BYTE:24 2.214285714285714
(byte) current_movedown_slow#21 current_movedown_slow zp ZP_BYTE:24 3.135135135135135
(byte) current_movedown_slow#23 current_movedown_slow zp ZP_BYTE:24 1.3333333333333333
(byte) current_movedown_slow#37 current_movedown_slow zp ZP_BYTE:24 6.0
(byte) current_movedown_slow#69 current_movedown_slow zp ZP_BYTE:24 0.26666666666666666
(byte) current_orientation
(byte) current_orientation#13 current_orientation zp ZP_BYTE:29 3.189189189189189
(byte) current_orientation#17 current_orientation zp ZP_BYTE:29 5.523809523809523
(byte) current_orientation#20 current_orientation zp ZP_BYTE:29 0.36734693877551017
(byte) current_orientation#25 current_orientation zp ZP_BYTE:29 1.3333333333333333
(byte) current_orientation#37 current_orientation zp ZP_BYTE:29 4.0
(byte) current_orientation#7 current_orientation zp ZP_BYTE:29 3.0
(byte*) current_piece
(byte*) current_piece#10 current_piece zp ZP_WORD:26 3.243243243243243
(byte*~) current_piece#100 current_piece#100 zp ZP_WORD:5 4.0
(byte*~) current_piece#101 current_piece#101 zp ZP_WORD:5 4.0
(byte*~) current_piece#102 current_piece#102 zp ZP_WORD:5 4.0
(byte*~) current_piece#103 current_piece#103 zp ZP_WORD:5 4.0
(byte*~) current_piece#104 current_piece#104 zp ZP_WORD:5 4.0
(byte*~) current_piece#106 current_piece zp ZP_WORD:26 4.0
(byte*) current_piece#15 current_piece zp ZP_WORD:26 1.5897435897435892
(byte*) current_piece#17 current_piece#17 zp ZP_WORD:5 12.0
(byte*) current_piece#28 current_piece zp ZP_WORD:26 6.0
(byte*~) current_piece#98 current_piece zp ZP_WORD:26 4.0
(byte) current_piece_char
(byte) current_piece_char#10 current_piece_char zp ZP_BYTE:28 187.38888888888889
(byte~) current_piece_char#108 current_piece_char#108 zp ZP_BYTE:11 4.0
(byte~) current_piece_char#109 current_piece_char#109 zp ZP_BYTE:11 22.0
(byte) current_piece_char#16 current_piece_char zp ZP_BYTE:28 3.4324324324324325
(byte) current_piece_char#29 current_piece_char zp ZP_BYTE:28 6.0
(byte) current_piece_char#5 current_piece_char zp ZP_BYTE:28 0.25806451612903225
(byte) current_piece_char#68 current_piece_char#68 zp ZP_BYTE:11 50.699999999999996
(byte*) current_piece_gfx
(byte*) current_piece_gfx#114 current_piece_gfx zp ZP_WORD:30 187.38888888888889
(byte*~) current_piece_gfx#120 current_piece_gfx#120 zp ZP_WORD:5 2.0
(byte*~) current_piece_gfx#121 current_piece_gfx#121 zp ZP_WORD:5 11.0
(byte*) current_piece_gfx#18 current_piece_gfx zp ZP_WORD:30 6.047619047619047
(byte*) current_piece_gfx#20 current_piece_gfx zp ZP_WORD:30 0.37037037037037035
(byte*) current_piece_gfx#21 current_piece_gfx zp ZP_WORD:30 1.3333333333333333
(byte*) current_piece_gfx#35 current_piece_gfx zp ZP_WORD:30 6.0
(byte*) current_piece_gfx#64 current_piece_gfx#64 zp ZP_WORD:5 50.699999999999996
(byte*) current_piece_gfx#7 current_piece_gfx zp ZP_WORD:30 4.0
(byte*) current_piece_gfx#74 current_piece_gfx zp ZP_WORD:30 0.26666666666666666
(byte) current_xpos
(byte) current_xpos#103 current_xpos zp ZP_BYTE:32 0.3448275862068966
(byte) current_xpos#124 current_xpos zp ZP_BYTE:32 20.75925925925926
(byte~) current_xpos#130 current_xpos#130 zp ZP_BYTE:10 1.3333333333333333
(byte~) current_xpos#131 current_xpos#131 zp ZP_BYTE:10 7.333333333333333
(byte) current_xpos#19 current_xpos zp ZP_BYTE:32 6.047619047619047
(byte) current_xpos#22 current_xpos zp ZP_BYTE:32 0.7999999999999999
(byte) current_xpos#26 current_xpos zp ZP_BYTE:32 0.4666666666666666
(byte) current_xpos#43 current_xpos zp ZP_BYTE:32 6.0
(byte) current_xpos#59 current_xpos#59 zp ZP_BYTE:10 5.7
(byte) current_xpos#6 current_xpos zp ZP_BYTE:32 4.0
(byte) current_xpos#8 current_xpos zp ZP_BYTE:32 4.0
(byte) current_ypos
(byte) current_ypos#100 current_ypos zp ZP_BYTE:16 3.297297297297297
(byte~) current_ypos#106 reg byte x 1.0
(byte~) current_ypos#107 reg byte x 4.4
(byte) current_ypos#13 reg byte x 15.0
(byte) current_ypos#19 current_ypos zp ZP_BYTE:16 1.7051282051282046
(byte) current_ypos#3 current_ypos zp ZP_BYTE:16 4.0
(byte) current_ypos#38 current_ypos zp ZP_BYTE:16 6.0
(byte) current_ypos#6 current_ypos zp ZP_BYTE:16 0.3571428571428571
(byte) game_over
(byte) game_over#10 game_over zp ZP_BYTE:34 4.804347826086958
(byte) game_over#15 game_over zp ZP_BYTE:34 3.189189189189189
(byte) game_over#27 game_over zp ZP_BYTE:34 6.0
(byte) game_over#52 game_over zp ZP_BYTE:34 0.38095238095238093
(byte) game_over#65 game_over zp ZP_BYTE:34 0.4
(byte) irq_cnt
(byte) irq_cnt#0 irq_cnt zp ZP_BYTE:41 0.17391304347826086
(byte) irq_cnt#1 irq_cnt zp ZP_BYTE:41 3.0
(byte) irq_cnt#2 irq_cnt zp ZP_BYTE:41 20.0
(byte) irq_raster_next
(byte) irq_raster_next#0 irq_raster_next zp ZP_BYTE:38 0.3076923076923077
(byte) irq_raster_next#1 irq_raster_next zp ZP_BYTE:38 1.0
(byte) irq_raster_next#2 irq_raster_next zp ZP_BYTE:38 1.3333333333333333
(byte) irq_raster_next#3 irq_raster_next zp ZP_BYTE:38 1.3333333333333333
(byte) irq_raster_next#4 irq_raster_next zp ZP_BYTE:38 8.0
(byte) irq_sprite_ptr
(byte) irq_sprite_ptr#0 irq_sprite_ptr zp ZP_BYTE:40 0.25806451612903225
(byte) irq_sprite_ptr#1 irq_sprite_ptr zp ZP_BYTE:40 20.0
(byte) irq_sprite_ptr#2 irq_sprite_ptr zp ZP_BYTE:40 20.0
(byte) irq_sprite_ptr#3 irq_sprite_ptr zp ZP_BYTE:40 20.0
(byte) irq_sprite_ypos
(byte) irq_sprite_ypos#0 irq_sprite_ypos zp ZP_BYTE:39 0.27586206896551724
(byte) irq_sprite_ypos#1 irq_sprite_ypos zp ZP_BYTE:39 20.0
(byte) irq_sprite_ypos#2 irq_sprite_ypos zp ZP_BYTE:39 20.0
(byte) irq_sprite_ypos#3 irq_sprite_ypos zp ZP_BYTE:39 20.0
(byte()) keyboard_event_get()
(label) keyboard_event_get::@1
(label) keyboard_event_get::@return
(byte) keyboard_event_get::return
(byte) keyboard_event_get::return#1 reg byte x 4.0
(byte) keyboard_event_get::return#2 reg byte x 34.33333333333333
(byte) keyboard_event_get::return#3 reg byte x 202.0
(byte()) keyboard_event_pressed((byte) keyboard_event_pressed::keycode)
(byte~) keyboard_event_pressed::$0 reg byte a 4.0
(byte~) keyboard_event_pressed::$1 reg byte a 4.0
(label) keyboard_event_pressed::@return
(byte) keyboard_event_pressed::keycode
(byte) keyboard_event_pressed::keycode#5 keycode zp ZP_BYTE:9 1.3333333333333333
(byte) keyboard_event_pressed::return
(byte) keyboard_event_pressed::return#0 reg byte a 4.0
(byte) keyboard_event_pressed::return#1 reg byte a 4.0
(byte) keyboard_event_pressed::return#10 reg byte a 4.0
(byte) keyboard_event_pressed::return#11 reg byte a 1.714285714285714
(byte) keyboard_event_pressed::return#12 reg byte a 4.0
(byte) keyboard_event_pressed::return#2 reg byte a 4.0
(byte) keyboard_event_pressed::row_bits
(byte) keyboard_event_pressed::row_bits#0 row_bits zp ZP_BYTE:10 2.0
(void()) keyboard_event_scan()
(byte~) keyboard_event_scan::$0 reg byte a 4.0
(byte~) keyboard_event_scan::$15 reg byte a 20002.0
(byte~) keyboard_event_scan::$16 reg byte a 20002.0
(byte/word/dword~) keyboard_event_scan::$23 reg byte a 20002.0
(byte~) keyboard_event_scan::$3 reg byte a 4.0
(byte~) keyboard_event_scan::$6 reg byte a 4.0
(byte~) keyboard_event_scan::$9 reg byte a 4.0
(label) keyboard_event_scan::@1
(label) keyboard_event_scan::@10
(label) keyboard_event_scan::@11
(label) keyboard_event_scan::@12
(label) keyboard_event_scan::@13
(label) keyboard_event_scan::@14
(label) keyboard_event_scan::@15
(label) keyboard_event_scan::@16
(label) keyboard_event_scan::@17
(label) keyboard_event_scan::@18
(label) keyboard_event_scan::@19
(label) keyboard_event_scan::@2
(label) keyboard_event_scan::@20
(label) keyboard_event_scan::@21
(label) keyboard_event_scan::@22
(label) keyboard_event_scan::@23
(label) keyboard_event_scan::@3
(label) keyboard_event_scan::@4
(label) keyboard_event_scan::@5
(label) keyboard_event_scan::@6
(label) keyboard_event_scan::@7
(label) keyboard_event_scan::@8
(label) keyboard_event_scan::@9
(label) keyboard_event_scan::@return
(byte) keyboard_event_scan::col
(byte) keyboard_event_scan::col#1 reg byte x 15001.5
(byte) keyboard_event_scan::col#2 reg byte x 2857.4285714285716
(byte) keyboard_event_scan::event_type
(byte) keyboard_event_scan::event_type#0 reg byte a 20002.0
(byte) keyboard_event_scan::keycode
(byte) keyboard_event_scan::keycode#1 keycode zp ZP_BYTE:10 2002.0
(byte) keyboard_event_scan::keycode#10 keycode zp ZP_BYTE:10 3154.230769230769
(byte) keyboard_event_scan::keycode#11 keycode zp ZP_BYTE:10 500.5
(byte) keyboard_event_scan::keycode#14 keycode zp ZP_BYTE:10 1001.0
(byte) keyboard_event_scan::keycode#15 keycode zp ZP_BYTE:10 5250.75
(byte) keyboard_event_scan::row
(byte) keyboard_event_scan::row#1 row zp ZP_BYTE:9 1501.5
(byte) keyboard_event_scan::row#2 row zp ZP_BYTE:9 600.24
(byte) keyboard_event_scan::row_scan
(byte) keyboard_event_scan::row_scan#0 row_scan zp ZP_BYTE:11 1278.0555555555554
(byte[8]) keyboard_events
(const byte[8]) keyboard_events#0 keyboard_events = { fill( 8, 0) }
(byte) keyboard_events_size
(byte) keyboard_events_size#1 keyboard_events_size zp ZP_BYTE:35 20002.0
(byte) keyboard_events_size#10 keyboard_events_size zp ZP_BYTE:35 8100.9000000000015
(byte) keyboard_events_size#13 keyboard_events_size zp ZP_BYTE:35 97.06451612903226
(byte) keyboard_events_size#16 keyboard_events_size zp ZP_BYTE:35 4.461538461538461
(byte) keyboard_events_size#19 keyboard_events_size zp ZP_BYTE:35 18.999999999999996
(byte) keyboard_events_size#2 keyboard_events_size zp ZP_BYTE:35 20002.0
(byte) keyboard_events_size#29 keyboard_events_size zp ZP_BYTE:35 10201.2
(byte) keyboard_events_size#30 keyboard_events_size zp ZP_BYTE:35 429.2857142857143
(byte) keyboard_events_size#4 keyboard_events_size zp ZP_BYTE:35 3.0
(byte[8]) keyboard_matrix_col_bitmask
(const byte[8]) keyboard_matrix_col_bitmask#0 keyboard_matrix_col_bitmask = { (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 2, (byte/signed byte/word/signed word/dword/signed dword) 4, (byte/signed byte/word/signed word/dword/signed dword) 8, (byte/signed byte/word/signed word/dword/signed dword) $10, (byte/signed byte/word/signed word/dword/signed dword) $20, (byte/signed byte/word/signed word/dword/signed dword) $40, (byte/word/signed word/dword/signed dword) $80 }
(byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid)
(label) keyboard_matrix_read::@return
(byte) keyboard_matrix_read::return
(byte) keyboard_matrix_read::return#0 reg byte a 334.33333333333337
(byte) keyboard_matrix_read::return#2 reg byte a 2002.0
(byte) keyboard_matrix_read::row_pressed_bits
(byte) keyboard_matrix_read::rowid
(byte) keyboard_matrix_read::rowid#0 reg byte x 1003.0
(byte[8]) keyboard_matrix_row_bitmask
(const byte[8]) keyboard_matrix_row_bitmask#0 keyboard_matrix_row_bitmask = { (byte/word/signed word/dword/signed dword) $fe, (byte/word/signed word/dword/signed dword) $fd, (byte/word/signed word/dword/signed dword) $fb, (byte/word/signed word/dword/signed dword) $f7, (byte/word/signed word/dword/signed dword) $ef, (byte/word/signed word/dword/signed dword) $df, (byte/word/signed word/dword/signed dword) $bf, (byte/signed byte/word/signed word/dword/signed dword) $7f }
(byte) keyboard_modifiers
(byte[8]) keyboard_scan_values
(const byte[8]) keyboard_scan_values#0 keyboard_scan_values = { fill( 8, 0) }
(byte) level
(byte) level#10 level zp ZP_BYTE:23 1.909090909090909
(byte) level#17 level zp ZP_BYTE:23 3.135135135135135
(byte) level#19 level zp ZP_BYTE:23 1.3333333333333333
(byte) level#21 level zp ZP_BYTE:23 0.4444444444444444
(byte) level#33 level zp ZP_BYTE:23 6.0
(byte) level_bcd
(byte) level_bcd#11 level_bcd zp ZP_BYTE:25 2.0
(byte) level_bcd#17 level_bcd zp ZP_BYTE:25 1.9999999999999998
(byte) level_bcd#19 level_bcd zp ZP_BYTE:25 1.3333333333333333
(byte) level_bcd#21 level_bcd zp ZP_BYTE:25 2.6666666666666665
(byte) level_bcd#31 level_bcd zp ZP_BYTE:25 6.0
(byte) level_bcd#64 level_bcd zp ZP_BYTE:25 0.6000000000000001
(byte) level_bcd#8 level_bcd zp ZP_BYTE:25 4.0
(word) lines_bcd
(word) lines_bcd#15 lines_bcd zp ZP_WORD:17 2.0338983050847457
(word) lines_bcd#17 lines_bcd zp ZP_WORD:17 1.3333333333333333
(word) lines_bcd#19 lines_bcd zp ZP_WORD:17 2.4400000000000004
(word) lines_bcd#26 lines_bcd zp ZP_WORD:17 6.0
(word) lines_bcd#30 lines_bcd zp ZP_WORD:17 1.0
(void()) main()
(label) main::@1
(label) main::@10
(label) main::@11
(label) main::@12
(label) main::@13
(label) main::@14
(label) main::@15
(label) main::@16
(label) main::@17
(label) main::@18
(label) main::@19
(label) main::@2
(label) main::@20
(label) main::@21
(label) main::@22
(label) main::@23
(label) main::@24
(label) main::@3
(label) main::@4
(label) main::@5
(label) main::@6
(label) main::@7
(label) main::@8
(label) main::@9
(byte) main::key_event
(byte) main::key_event#0 reg byte x 101.0
(byte) main::render
(byte) main::render#1 reg byte a 202.0
(byte) next_piece_idx
(byte) next_piece_idx#10 next_piece_idx zp ZP_BYTE:33 2.608695652173914
(byte) next_piece_idx#12 reg byte x 3.4
(byte) next_piece_idx#16 next_piece_idx zp ZP_BYTE:33 3.4324324324324325
(byte) next_piece_idx#17 next_piece_idx zp ZP_BYTE:33 6.0
(byte) next_piece_idx#30 next_piece_idx zp ZP_BYTE:33 6.0
(byte~) next_piece_idx#84 reg byte x 4.0
(byte~) next_piece_idx#85 reg byte x 22.0
(byte()) play_collision((byte) play_collision::xpos , (byte) play_collision::ypos , (byte) play_collision::orientation)
(byte~) play_collision::$7 reg byte a 20002.0
(label) play_collision::@1
(label) play_collision::@10
(label) play_collision::@2
(label) play_collision::@3
(label) play_collision::@4
(label) play_collision::@5
(label) play_collision::@6
(label) play_collision::@7
(label) play_collision::@8
(label) play_collision::@9
(label) play_collision::@return
(byte) play_collision::c
(byte) play_collision::c#1 reg byte x 10001.0
(byte) play_collision::c#2 reg byte x 2222.4444444444443
(byte) play_collision::col
(byte) play_collision::col#1 col zp ZP_BYTE:15 5000.5
(byte) play_collision::col#2 col zp ZP_BYTE:15 6375.75
(byte~) play_collision::col#9 col zp ZP_BYTE:15 2002.0
(byte) play_collision::i
(byte) play_collision::i#1 i zp ZP_BYTE:43 1615.6153846153845
(byte~) play_collision::i#11 i#11 zp ZP_BYTE:14 2002.0
(byte~) play_collision::i#13 i#13 zp ZP_BYTE:14 20002.0
(byte) play_collision::i#2 i#2 zp ZP_BYTE:14 15502.0
(byte) play_collision::i#3 i#3 zp ZP_BYTE:14 667.3333333333334
(byte) play_collision::l
(byte) play_collision::l#1 l zp ZP_BYTE:13 1001.0
(byte) play_collision::l#6 l zp ZP_BYTE:13 125.125
(byte) play_collision::orientation
(byte) play_collision::orientation#0 reg byte x 2.0
(byte) play_collision::orientation#1 reg byte x 2.0
(byte) play_collision::orientation#2 reg byte x 2.0
(byte) play_collision::orientation#3 reg byte x 2.0
(byte) play_collision::orientation#5 reg byte x 10.0
(byte*) play_collision::piece_gfx
(byte*) play_collision::piece_gfx#0 piece_gfx zp ZP_WORD:5 476.3333333333333
(byte*) play_collision::playfield_line
(byte*) play_collision::playfield_line#0 playfield_line zp ZP_WORD:7 785.8571428571429
(byte) play_collision::return
(byte) play_collision::return#0 reg byte a 4.0
(byte) play_collision::return#1 reg byte a 4.0
(byte) play_collision::return#10 reg byte a 4.0
(byte) play_collision::return#13 reg byte a 4.0
(byte) play_collision::return#14 reg byte a 4.0
(byte) play_collision::return#15 reg byte a 1.4285714285714284
(byte) play_collision::xpos
(byte) play_collision::xpos#0 xpos zp ZP_BYTE:12 1.3333333333333333
(byte) play_collision::xpos#1 xpos zp ZP_BYTE:12 1.0
(byte) play_collision::xpos#2 xpos zp ZP_BYTE:12 1.0
(byte) play_collision::xpos#3 xpos zp ZP_BYTE:12 1.0
(byte) play_collision::xpos#4 xpos zp ZP_BYTE:12 1.3333333333333333
(byte) play_collision::xpos#6 xpos zp ZP_BYTE:12 45.95454545454545
(byte) play_collision::ypos
(byte) play_collision::ypos#0 ypos zp ZP_BYTE:11 1.0
(byte) play_collision::ypos#1 ypos zp ZP_BYTE:11 1.3333333333333333
(byte) play_collision::ypos#2 ypos zp ZP_BYTE:11 1.3333333333333333
(byte) play_collision::ypos#3 ypos zp ZP_BYTE:11 1.3333333333333333
(byte) play_collision::ypos#4 ypos zp ZP_BYTE:11 2.0
(byte) play_collision::ypos#5 ypos zp ZP_BYTE:11 6.0
(byte) play_collision::ypos2
(byte) play_collision::ypos2#0 ypos2 zp ZP_BYTE:11 4.0
(byte) play_collision::ypos2#1 ypos2 zp ZP_BYTE:11 500.5
(byte) play_collision::ypos2#2 ypos2 zp ZP_BYTE:11 867.0666666666667
(void()) play_increase_level()
(byte~) play_increase_level::$1 reg byte a 4.0
(label) play_increase_level::@1
(label) play_increase_level::@2
(label) play_increase_level::@3
(label) play_increase_level::@4
(label) play_increase_level::@5
(label) play_increase_level::@6
(label) play_increase_level::@return
(byte) play_increase_level::b
(byte) play_increase_level::b#1 reg byte x 1501.5
(byte) play_increase_level::b#2 reg byte x 1001.0
(byte) play_increase_level::b4
(byte) play_increase_level::b4#0 reg byte a 4004.0
(void()) play_init()
(byte~) play_init::$2 reg byte x 22.0
(label) play_init::@1
(label) play_init::@2
(label) play_init::@3
(label) play_init::@return
(byte) play_init::b
(byte) play_init::b#1 reg byte x 16.5
(byte) play_init::b#2 reg byte x 11.0
(byte) play_init::b4
(byte) play_init::b4#0 reg byte a 33.0
(byte) play_init::idx
(byte) play_init::idx#1 idx zp ZP_BYTE:2 7.333333333333333
(byte) play_init::idx#2 idx zp ZP_BYTE:2 6.6000000000000005
(byte) play_init::j
(byte) play_init::j#1 reg byte y 16.5
(byte) play_init::j#2 reg byte y 7.333333333333333
(byte*) play_init::pli
(byte*) play_init::pli#1 pli zp ZP_WORD:5 5.5
(byte*) play_init::pli#2 pli zp ZP_WORD:5 8.25
(void()) play_lock_current()
(label) play_lock_current::@1
(label) play_lock_current::@2
(label) play_lock_current::@3
(label) play_lock_current::@4
(label) play_lock_current::@5
(label) play_lock_current::@6
(label) play_lock_current::@7
(label) play_lock_current::@return
(byte) play_lock_current::c
(byte) play_lock_current::c#1 reg byte x 10001.0
(byte) play_lock_current::c#2 reg byte x 4000.4
(byte) play_lock_current::col
(byte) play_lock_current::col#0 col zp ZP_BYTE:10 2002.0
(byte) play_lock_current::col#1 col zp ZP_BYTE:10 5000.5
(byte) play_lock_current::col#2 col zp ZP_BYTE:10 7751.0
(byte) play_lock_current::i
(byte) play_lock_current::i#1 i zp ZP_BYTE:11 2333.6666666666665
(byte) play_lock_current::i#2 i#2 zp ZP_BYTE:9 15502.0
(byte) play_lock_current::i#3 i#3 zp ZP_BYTE:9 667.3333333333334
(byte~) play_lock_current::i#7 i#7 zp ZP_BYTE:9 2002.0
(byte~) play_lock_current::i#9 i#9 zp ZP_BYTE:9 20002.0
(byte) play_lock_current::l
(byte) play_lock_current::l#1 l zp ZP_BYTE:4 1001.0
(byte) play_lock_current::l#6 l zp ZP_BYTE:4 166.83333333333334
(byte*) play_lock_current::playfield_line
(byte*) play_lock_current::playfield_line#0 playfield_line zp ZP_WORD:5 1100.2
(byte) play_lock_current::ypos2
(byte) play_lock_current::ypos2#0 ypos2 zp ZP_BYTE:16 4.0
(byte) play_lock_current::ypos2#1 ypos2 zp ZP_BYTE:16 500.5
(byte) play_lock_current::ypos2#2 ypos2 zp ZP_BYTE:16 273.1818181818182
(byte()) play_move_down((byte) play_move_down::key_event)
(byte~) play_move_down::$12 reg byte a 4.0
(byte~) play_move_down::$2 reg byte a 4.0
(label) play_move_down::@1
(label) play_move_down::@10
(label) play_move_down::@11
(label) play_move_down::@12
(label) play_move_down::@13
(label) play_move_down::@14
(label) play_move_down::@15
(label) play_move_down::@16
(label) play_move_down::@2
(label) play_move_down::@3
(label) play_move_down::@4
(label) play_move_down::@5
(label) play_move_down::@6
(label) play_move_down::@7
(label) play_move_down::@8
(label) play_move_down::@9
(label) play_move_down::@return
(byte) play_move_down::key_event
(byte) play_move_down::key_event#0 reg byte a 2.0
(byte) play_move_down::movedown
(byte) play_move_down::movedown#10 reg byte x 1.0
(byte) play_move_down::movedown#2 reg byte x 4.0
(byte) play_move_down::movedown#3 reg byte x 4.0
(byte) play_move_down::movedown#6 reg byte x 6.0
(byte) play_move_down::movedown#7 reg byte x 5.0
(byte) play_move_down::removed
(byte) play_move_down::removed#0 reg byte a 4.0
(byte) play_move_down::return
(byte) play_move_down::return#0 reg byte a 4.0
(byte) play_move_down::return#3 reg byte x 0.6666666666666666
(byte()) play_move_leftright((byte) play_move_leftright::key_event)
(byte~) play_move_leftright::$4 reg byte a 4.0
(byte~) play_move_leftright::$8 reg byte a 4.0
(label) play_move_leftright::@1
(label) play_move_leftright::@2
(label) play_move_leftright::@3
(label) play_move_leftright::@4
(label) play_move_leftright::@5
(label) play_move_leftright::@6
(label) play_move_leftright::@7
(label) play_move_leftright::@return
(byte) play_move_leftright::key_event
(byte) play_move_leftright::key_event#0 reg byte a 3.0
(byte) play_move_leftright::return
(byte) play_move_leftright::return#0 reg byte a 4.0
(byte) play_move_leftright::return#2 reg byte a 0.6666666666666666
(byte()) play_move_rotate((byte) play_move_rotate::key_event)
(byte~) play_move_rotate::$2 reg byte a 4.0
(byte/signed word/word/dword/signed dword~) play_move_rotate::$5 reg byte x 4.0
(byte/signed word/word/dword/signed dword~) play_move_rotate::$7 reg byte x 4.0
(label) play_move_rotate::@1
(label) play_move_rotate::@2
(label) play_move_rotate::@3
(label) play_move_rotate::@4
(label) play_move_rotate::@5
(label) play_move_rotate::@6
(label) play_move_rotate::@return
(byte) play_move_rotate::key_event
(byte) play_move_rotate::key_event#0 reg byte a 3.0
(byte) play_move_rotate::orientation
(byte) play_move_rotate::orientation#1 orientation zp ZP_BYTE:10 4.0
(byte) play_move_rotate::orientation#2 orientation zp ZP_BYTE:10 4.0
(byte) play_move_rotate::orientation#3 orientation zp ZP_BYTE:10 0.8888888888888888
(byte) play_move_rotate::return
(byte) play_move_rotate::return#0 reg byte a 4.0
(byte) play_move_rotate::return#2 reg byte a 0.6666666666666666
(byte()) play_movement((byte) play_movement::key_event)
(byte~) play_movement::$3 reg byte a 4.0
(byte~) play_movement::$4 reg byte a 4.0
(label) play_movement::@1
(label) play_movement::@2
(label) play_movement::@3
(label) play_movement::@4
(label) play_movement::@return
(byte) play_movement::key_event
(byte) play_movement::key_event#0 key_event zp ZP_BYTE:42 9.727272727272727
(byte) play_movement::render
(byte) play_movement::render#1 render zp ZP_BYTE:9 1.0
(byte) play_movement::render#2 render zp ZP_BYTE:9 0.8
(byte) play_movement::return
(byte) play_movement::return#0 return zp ZP_BYTE:9 4.0
(byte) play_movement::return#2 return zp ZP_BYTE:9 34.99999999999999
(byte) play_movement::return#3 reg byte a 202.0
(byte()) play_remove_lines()
(label) play_remove_lines::@1
(label) play_remove_lines::@2
(label) play_remove_lines::@3
(label) play_remove_lines::@4
(label) play_remove_lines::@5
(label) play_remove_lines::@6
(label) play_remove_lines::@7
(label) play_remove_lines::@8
(label) play_remove_lines::@9
(label) play_remove_lines::@return
(byte) play_remove_lines::c
(byte) play_remove_lines::c#0 c zp ZP_BYTE:12 6000.6
(byte) play_remove_lines::full
(byte) play_remove_lines::full#2 full zp ZP_BYTE:11 4200.6
(byte) play_remove_lines::full#4 full zp ZP_BYTE:11 4000.4
(byte) play_remove_lines::r
(byte) play_remove_lines::r#1 reg byte y 1500.2142857142858
(byte) play_remove_lines::r#2 reg byte y 15502.0
(byte) play_remove_lines::r#3 reg byte y 2002.0
(byte) play_remove_lines::removed
(byte) play_remove_lines::removed#1 removed zp ZP_BYTE:9 2002.0
(byte) play_remove_lines::removed#11 removed zp ZP_BYTE:9 231.0
(byte) play_remove_lines::removed#8 removed zp ZP_BYTE:9 333.8888888888889
(byte) play_remove_lines::return
(byte) play_remove_lines::return#0 reg byte a 4.0
(byte) play_remove_lines::w
(byte) play_remove_lines::w#1 reg byte x 5501.0
(byte) play_remove_lines::w#11 reg byte x 1334.6666666666667
(byte) play_remove_lines::w#12 reg byte x 2002.0
(byte) play_remove_lines::w#2 reg byte x 1001.0
(byte) play_remove_lines::w#3 reg byte x 2002.0
(byte) play_remove_lines::w#4 reg byte x 4429.142857142857
(byte) play_remove_lines::w#6 reg byte x 1668.3333333333335
(byte) play_remove_lines::x
(byte) play_remove_lines::x#1 x zp ZP_BYTE:10 15001.5
(byte) play_remove_lines::x#2 x zp ZP_BYTE:10 2500.25
(byte) play_remove_lines::y
(byte) play_remove_lines::y#1 y zp ZP_BYTE:4 1501.5
(byte) play_remove_lines::y#8 y zp ZP_BYTE:4 133.46666666666667
(void()) play_spawn_current()
(byte~) play_spawn_current::$0 $0 zp ZP_BYTE:4 0.06666666666666667
(byte~) play_spawn_current::$2 reg byte a 4.0
(label) play_spawn_current::@1
(label) play_spawn_current::@2
(label) play_spawn_current::@3
(label) play_spawn_current::@4
(label) play_spawn_current::@5
(label) play_spawn_current::@return
(byte) play_spawn_current::current_piece_idx
(byte) play_spawn_current::current_piece_idx#0 reg byte x 2.0
(byte) play_spawn_current::piece_idx
(byte) play_spawn_current::piece_idx#1 piece_idx zp ZP_BYTE:33 2002.0
(byte) play_spawn_current::piece_idx#2 piece_idx zp ZP_BYTE:33 111.66666666666667
(label) play_spawn_current::sid_rnd1
(byte) play_spawn_current::sid_rnd1_return
(byte) play_spawn_current::sid_rnd1_return#0 reg byte a 2002.0
(void()) play_update_score((byte) play_update_score::removed)
(byte~) play_update_score::$2 reg byte a 4.0
(byte~) play_update_score::$4 reg byte a 4.0
(byte~) play_update_score::$5 reg byte a 4.0
(label) play_update_score::@1
(label) play_update_score::@2
(label) play_update_score::@return
(dword) play_update_score::add_bcd
(dword) play_update_score::add_bcd#0 add_bcd zp ZP_DWORD:44 1.3333333333333333
(byte) play_update_score::lines_after
(byte) play_update_score::lines_after#0 reg byte a 4.0
(byte) play_update_score::lines_before
(byte) play_update_score::lines_before#0 lines_before zp ZP_BYTE:4 0.4444444444444444
(byte) play_update_score::removed
(byte) play_update_score::removed#0 reg byte x 1.1428571428571428
(byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield
(const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 playfield = { fill( PLAYFIELD_LINES#0*PLAYFIELD_COLS#0, 0) }
(byte*[PLAYFIELD_LINES#0]) playfield_lines
(const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 playfield_lines = { fill( PLAYFIELD_LINES#0, 0) }
(byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx
(const byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx#0 playfield_lines_idx = { fill( PLAYFIELD_LINES#0+1, 0) }
(void()) render_bcd((byte*) render_bcd::screen , (word) render_bcd::offset , (byte) render_bcd::bcd , (byte) render_bcd::only_low)
(byte~) render_bcd::$3 reg byte a 4.0
(byte~) render_bcd::$4 reg byte a 4.0
(byte~) render_bcd::$5 reg byte a 4.0
(byte~) render_bcd::$6 reg byte a 4.0
(label) render_bcd::@1
(label) render_bcd::@2
(label) render_bcd::@return
(byte) render_bcd::ZERO_CHAR
(const byte) render_bcd::ZERO_CHAR#0 ZERO_CHAR = (byte/signed byte/word/signed word/dword/signed dword) $35
(byte) render_bcd::bcd
(byte) render_bcd::bcd#0 reg byte x 4.0
(byte) render_bcd::bcd#1 reg byte x 4.0
(byte) render_bcd::bcd#2 reg byte x 4.0
(byte) render_bcd::bcd#3 reg byte x 2.0
(byte) render_bcd::bcd#4 reg byte x 2.0
(byte) render_bcd::bcd#5 reg byte x 4.0
(byte) render_bcd::bcd#6 reg byte x 2.0
(word) render_bcd::offset
(word) render_bcd::offset#6 offset zp ZP_WORD:7 2.0
(byte) render_bcd::only_low
(byte) render_bcd::only_low#6 reg byte y 1.0
(byte*) render_bcd::screen
(byte*) render_bcd::screen#0 screen zp ZP_WORD:5 2.0
(byte*) render_bcd::screen#1 screen zp ZP_WORD:5 2.0
(byte*) render_bcd::screen#2 screen zp ZP_WORD:5 2.0
(byte*) render_bcd::screen#3 screen zp ZP_WORD:5 4.0
(byte*) render_bcd::screen#4 screen zp ZP_WORD:5 4.0
(byte*) render_bcd::screen#5 screen zp ZP_WORD:5 2.0
(byte*) render_bcd::screen#6 screen zp ZP_WORD:5 14.0
(byte*) render_bcd::screen_pos
(byte*) render_bcd::screen_pos#0 screen_pos zp ZP_WORD:7 1.6
(byte*) render_bcd::screen_pos#2 screen_pos zp ZP_WORD:7 4.0
(byte*) render_bcd::screen_pos#3 screen_pos zp ZP_WORD:7 2.0
(void()) render_init()
(byte~) render_init::$13 reg byte a 22.0
(byte~) render_init::$14 reg byte a 22.0
(label) render_init::@1
(label) render_init::@2
(label) render_init::@3
(label) render_init::@return
(byte) render_init::i
(byte) render_init::i#1 reg byte x 16.5
(byte) render_init::i#2 reg byte x 6.285714285714286
(byte*) render_init::li_1
(byte*) render_init::li_1#1 li_1 zp ZP_WORD:5 5.5
(byte*) render_init::li_1#2 li_1 zp ZP_WORD:5 6.6000000000000005
(byte*) render_init::li_2
(byte*) render_init::li_2#1 li_2 zp ZP_WORD:7 7.333333333333333
(byte*) render_init::li_2#2 li_2 zp ZP_WORD:7 5.5
(label) render_init::vicSelectGfxBank1
(byte~) render_init::vicSelectGfxBank1_$0
(label) render_init::vicSelectGfxBank1_@1
(byte*) render_init::vicSelectGfxBank1_gfx
(label) render_init::vicSelectGfxBank1_toDd001
(word~) render_init::vicSelectGfxBank1_toDd001_$0
(byte~) render_init::vicSelectGfxBank1_toDd001_$1
(byte/signed word/word/dword/signed dword~) render_init::vicSelectGfxBank1_toDd001_$2
(byte/word/dword~) render_init::vicSelectGfxBank1_toDd001_$3
(byte*) render_init::vicSelectGfxBank1_toDd001_gfx
(byte) render_init::vicSelectGfxBank1_toDd001_return
(const byte) render_init::vicSelectGfxBank1_toDd001_return#0 vicSelectGfxBank1_toDd001_return = (byte/signed byte/word/signed word/dword/signed dword) 3^>((word))(const byte*) PLAYFIELD_CHARSET#0/(byte/signed byte/word/signed word/dword/signed dword) $40
(void()) render_moving()
(byte~) render_moving::$2 reg byte a 202.0
(label) render_moving::@1
(label) render_moving::@2
(label) render_moving::@3
(label) render_moving::@4
(label) render_moving::@5
(label) render_moving::@6
(label) render_moving::@7
(label) render_moving::@return
(byte) render_moving::c
(byte) render_moving::c#1 reg byte x 1501.5
(byte) render_moving::c#2 reg byte x 333.6666666666667
(byte) render_moving::current_cell
(byte) render_moving::current_cell#0 reg byte a 1001.0
(byte) render_moving::i
(byte) render_moving::i#1 i zp ZP_BYTE:14 202.0
(byte) render_moving::i#2 i zp ZP_BYTE:14 500.5
(byte) render_moving::i#3 i zp ZP_BYTE:14 60.599999999999994
(byte) render_moving::i#4 i zp ZP_BYTE:14 1552.0
(byte) render_moving::i#8 i zp ZP_BYTE:14 300.75
(byte) render_moving::l
(byte) render_moving::l#1 l zp ZP_BYTE:13 151.5
(byte) render_moving::l#4 l zp ZP_BYTE:13 12.625
(byte*) render_moving::screen_line
(byte*) render_moving::screen_line#0 screen_line zp ZP_WORD:7 110.19999999999999
(byte) render_moving::xpos
(byte) render_moving::xpos#0 xpos zp ZP_BYTE:15 202.0
(byte) render_moving::xpos#1 xpos zp ZP_BYTE:15 667.3333333333334
(byte) render_moving::xpos#2 xpos zp ZP_BYTE:15 620.8
(byte) render_moving::ypos2
(byte) render_moving::ypos2#0 ypos2 zp ZP_BYTE:12 4.0
(byte) render_moving::ypos2#1 ypos2 zp ZP_BYTE:12 67.33333333333333
(byte) render_moving::ypos2#2 ypos2 zp ZP_BYTE:12 27.06666666666667
(void()) render_next()
(byte~) render_next::$4 reg byte y 1.0
(label) render_next::@1
(label) render_next::@2
(label) render_next::@3
(label) render_next::@4
(label) render_next::@5
(label) render_next::@6
(label) render_next::@7
(label) render_next::@8
(label) render_next::@return
(byte) render_next::c
(byte) render_next::c#1 reg byte x 1501.5
(byte) render_next::c#2 reg byte x 286.0
(byte) render_next::cell
(byte) render_next::cell#0 reg byte a 1001.0
(byte) render_next::l
(byte) render_next::l#1 l zp ZP_BYTE:9 151.5
(byte) render_next::l#7 l zp ZP_BYTE:9 18.363636363636363
(word) render_next::next_area_offset
(const word) render_next::next_area_offset#0 next_area_offset = (byte/signed byte/word/signed word/dword/signed dword) $28*(byte/signed byte/word/signed word/dword/signed dword) $c+(byte/signed byte/word/signed word/dword/signed dword) $18+(byte/signed byte/word/signed word/dword/signed dword) 4
(byte) render_next::next_piece_char
(byte) render_next::next_piece_char#0 next_piece_char zp ZP_BYTE:10 66.86666666666667
(byte*) render_next::next_piece_gfx
(byte*) render_next::next_piece_gfx#1 next_piece_gfx zp ZP_WORD:5 210.29999999999998
(byte*) render_next::next_piece_gfx#2 next_piece_gfx zp ZP_WORD:5 1552.0
(byte*) render_next::next_piece_gfx#3 next_piece_gfx zp ZP_WORD:5 204.0
(byte*~) render_next::next_piece_gfx#9 next_piece_gfx zp ZP_WORD:5 4.0
(byte*) render_next::screen_next_area
(byte*) render_next::screen_next_area#10 screen_next_area zp ZP_WORD:7 204.0
(byte*) render_next::screen_next_area#11 screen_next_area zp ZP_WORD:7 0.5
(byte*) render_next::screen_next_area#3 screen_next_area zp ZP_WORD:7 701.0
(byte*) render_next::screen_next_area#4 screen_next_area zp ZP_WORD:7 67.33333333333333
(byte*) render_next::screen_next_area#5 screen_next_area zp ZP_WORD:7 684.1666666666667
(void()) render_playfield()
(byte~) render_playfield::$2 reg byte a 202.0
(byte~) render_playfield::$3 reg byte a 202.0
(label) render_playfield::@1
(label) render_playfield::@2
(label) render_playfield::@3
(label) render_playfield::@return
(byte) render_playfield::c
(byte) render_playfield::c#1 c zp ZP_BYTE:11 1501.5
(byte) render_playfield::c#2 c zp ZP_BYTE:11 500.5
(byte) render_playfield::i
(byte) render_playfield::i#1 i zp ZP_BYTE:10 420.59999999999997
(byte) render_playfield::i#2 i zp ZP_BYTE:10 1034.6666666666667
(byte) render_playfield::i#3 i zp ZP_BYTE:10 50.5
(byte) render_playfield::l
(byte) render_playfield::l#1 l zp ZP_BYTE:9 151.5
(byte) render_playfield::l#2 l zp ZP_BYTE:9 30.299999999999997
(byte*) render_playfield::screen_line
(byte*) render_playfield::screen_line#0 screen_line zp ZP_WORD:5 202.0
(byte*) render_playfield::screen_line#1 screen_line zp ZP_WORD:5 500.5
(byte*) render_playfield::screen_line#2 screen_line zp ZP_WORD:5 1552.0
(void()) render_score()
(label) render_score::@1
(label) render_score::@2
(label) render_score::@3
(label) render_score::@4
(label) render_score::@5
(label) render_score::@6
(label) render_score::@7
(label) render_score::@return
(word) render_score::level_offset
(const word) render_score::level_offset#0 level_offset = (byte/signed byte/word/signed word/dword/signed dword) $28*(byte/signed byte/word/signed word/dword/signed dword) $13+(byte/signed byte/word/signed word/dword/signed dword) $1f
(word) render_score::lines_offset
(const word) render_score::lines_offset#0 lines_offset = (byte/signed byte/word/signed word/dword/signed dword) $28*(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) $16
(byte*) render_score::score_bytes
(const byte*) render_score::score_bytes#0 score_bytes = ((byte*))&(dword) score_bcd#14
(word) render_score::score_offset
(const word) render_score::score_offset#0 score_offset = (byte/signed byte/word/signed word/dword/signed dword) $28*(byte/signed byte/word/signed word/dword/signed dword) 5+(byte/signed byte/word/signed word/dword/signed dword) $1c
(byte*) render_score::screen
(byte*) render_score::screen#3 screen zp ZP_WORD:5 0.75
(void()) render_screen_original((byte*) render_screen_original::screen)
(label) render_screen_original::@1
(label) render_screen_original::@2
(label) render_screen_original::@3
(label) render_screen_original::@4
(label) render_screen_original::@5
(label) render_screen_original::@return
(byte) render_screen_original::SPACE
(const byte) render_screen_original::SPACE#0 SPACE = (byte/signed byte/word/signed word/dword/signed dword) 0
(byte*) render_screen_original::cols
(byte*) render_screen_original::cols#1 cols zp ZP_WORD:26 101.0
(byte*) render_screen_original::cols#2 cols zp ZP_WORD:26 75.75
(byte*) render_screen_original::cols#3 cols zp ZP_WORD:26 42.599999999999994
(byte*) render_screen_original::cols#4 cols zp ZP_WORD:26 78.5
(byte*) render_screen_original::cols#5 cols zp ZP_WORD:26 80.8
(byte*) render_screen_original::cols#6 cols zp ZP_WORD:26 101.0
(byte*) render_screen_original::cols#7 cols zp ZP_WORD:26 22.0
(byte*) render_screen_original::ocols
(byte*) render_screen_original::ocols#1 ocols zp ZP_WORD:7 17.75
(byte*) render_screen_original::ocols#2 ocols zp ZP_WORD:7 67.33333333333333
(byte*) render_screen_original::ocols#4 ocols zp ZP_WORD:7 14.0
(byte*) render_screen_original::oscr
(byte*) render_screen_original::oscr#1 oscr zp ZP_WORD:5 14.2
(byte*) render_screen_original::oscr#2 oscr zp ZP_WORD:5 134.66666666666666
(byte*) render_screen_original::oscr#4 oscr zp ZP_WORD:5 14.0
(byte*) render_screen_original::screen
(byte*) render_screen_original::screen#10 screen zp ZP_WORD:17 30.42857142857143
(byte*) render_screen_original::screen#2 screen zp ZP_WORD:17 60.599999999999994
(byte*) render_screen_original::screen#3 screen zp ZP_WORD:17 43.285714285714285
(byte*) render_screen_original::screen#5 screen zp ZP_WORD:17 157.0
(byte*) render_screen_original::screen#6 screen zp ZP_WORD:17 202.0
(byte*) render_screen_original::screen#7 screen zp ZP_WORD:17 202.0
(byte*) render_screen_original::screen#8 screen zp ZP_WORD:17 24.0
(byte*) render_screen_original::screen#9 screen zp ZP_WORD:17 2.0
(byte) render_screen_original::x
(byte) render_screen_original::x#1 reg byte x 202.0
(byte) render_screen_original::x#2 reg byte x 202.0
(byte) render_screen_original::x#3 reg byte x 151.5
(byte) render_screen_original::x#4 reg byte x 40.4
(byte) render_screen_original::x#5 reg byte x 43.285714285714285
(byte) render_screen_original::x#6 reg byte x 60.599999999999994
(byte) render_screen_original::y
(byte) render_screen_original::y#1 y zp ZP_BYTE:2 16.5
(byte) render_screen_original::y#6 y zp ZP_BYTE:2 0.9166666666666666
(byte) render_screen_render
(byte) render_screen_render#11 render_screen_render zp ZP_BYTE:3 3.25
(byte) render_screen_render#15 reg byte a 13.0
(byte) render_screen_render#18 render_screen_render zp ZP_BYTE:3 0.923076923076923
(byte) render_screen_render#22 reg byte x 8.615384615384615
(byte) render_screen_render#33 render_screen_render#33 zp ZP_BYTE:9 5.6
(byte~) render_screen_render#68 reg byte a 11.0
(byte~) render_screen_render#69 render_screen_render#69 zp ZP_BYTE:9 5.5
(byte~) render_screen_render#70 reg byte x 22.0
(byte) render_screen_show
(byte) render_screen_show#13 render_screen_show zp ZP_BYTE:2 4.333333333333333
(byte) render_screen_show#16 render_screen_show zp ZP_BYTE:2 0.425
(byte) render_screen_showing
(byte) render_screen_showing#0 render_screen_showing zp ZP_BYTE:37 0.4
(byte) render_screen_showing#1 render_screen_showing zp ZP_BYTE:37 20.0
(void()) render_screen_swap()
(label) render_screen_swap::@return
(void()) render_show()
(label) render_show::@1
(label) render_show::@return
(byte) render_show::d018val
(byte) render_show::d018val#3 reg byte a 2.0
(label) render_show::toD0181
(word~) render_show::toD0181_$0
(word~) render_show::toD0181_$1
(word/signed dword/dword~) render_show::toD0181_$2
(byte/word~) render_show::toD0181_$3
(word~) render_show::toD0181_$4
(byte~) render_show::toD0181_$5
(byte/signed word/word/dword/signed dword~) render_show::toD0181_$6
(byte/word/dword~) render_show::toD0181_$7
(byte/word/dword~) render_show::toD0181_$8
(byte*) render_show::toD0181_gfx
(byte) render_show::toD0181_return
(const byte) render_show::toD0181_return#0 toD0181_return = >((word))(const byte*) PLAYFIELD_SCREEN_1#0&(word/signed word/dword/signed dword) $3fff*(byte/signed byte/word/signed word/dword/signed dword) 4|>((word))(const byte*) PLAYFIELD_CHARSET#0/(byte/signed byte/word/signed word/dword/signed dword) 4&(byte/signed byte/word/signed word/dword/signed dword) $f
(byte*) render_show::toD0181_screen
(label) render_show::toD0182
(word~) render_show::toD0182_$0
(word~) render_show::toD0182_$1
(word/signed dword/dword~) render_show::toD0182_$2
(byte/word~) render_show::toD0182_$3
(word~) render_show::toD0182_$4
(byte~) render_show::toD0182_$5
(byte/signed word/word/dword/signed dword~) render_show::toD0182_$6
(byte/word/dword~) render_show::toD0182_$7
(byte/word/dword~) render_show::toD0182_$8
(byte*) render_show::toD0182_gfx
(byte) render_show::toD0182_return
(const byte) render_show::toD0182_return#0 toD0182_return = >((word))(const byte*) PLAYFIELD_SCREEN_2#0&(word/signed word/dword/signed dword) $3fff*(byte/signed byte/word/signed word/dword/signed dword) 4|>((word))(const byte*) PLAYFIELD_CHARSET#0/(byte/signed byte/word/signed word/dword/signed dword) 4&(byte/signed byte/word/signed word/dword/signed dword) $f
(byte*) render_show::toD0182_screen
(dword[5]) score_add_bcd
(const dword[5]) score_add_bcd#0 score_add_bcd = { fill( 5, 0) }
(dword) score_bcd
(dword) score_bcd#14 score_bcd zp ZP_DWORD:19 3.135135135135135
(dword) score_bcd#16 score_bcd zp ZP_DWORD:19 1.3333333333333333
(dword) score_bcd#18 score_bcd zp ZP_DWORD:19 2.352941176470588
(dword) score_bcd#26 score_bcd zp ZP_DWORD:19 6.0
(dword) score_bcd#30 score_bcd zp ZP_DWORD:19 0.8571428571428571
(byte*[PLAYFIELD_LINES#0]) screen_lines_1
(const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 screen_lines_1 = { fill( PLAYFIELD_LINES#0, 0) }
(byte*[PLAYFIELD_LINES#0]) screen_lines_2
(const byte*[PLAYFIELD_LINES#0]) screen_lines_2#0 screen_lines_2 = { fill( PLAYFIELD_LINES#0, 0) }
(void()) sid_rnd_init()
(label) sid_rnd_init::@return
(void()) sprites_init()
(label) sprites_init::@1
(label) sprites_init::@return
(byte) sprites_init::s
(byte) sprites_init::s#1 reg byte y 16.5
(byte) sprites_init::s#2 reg byte y 8.8
(byte) sprites_init::s2
(byte) sprites_init::s2#0 reg byte x 22.0
(byte) sprites_init::xpos
(byte) sprites_init::xpos#1 xpos zp ZP_BYTE:2 7.333333333333333
(byte) sprites_init::xpos#2 xpos zp ZP_BYTE:2 8.25
interrupt(HARDWARE_CLOBBER)(void()) sprites_irq()
(byte/signed word/word/dword/signed dword~) sprites_irq::$0 reg byte x 4.0
(label) sprites_irq::@1
(label) sprites_irq::@10
(label) sprites_irq::@11
(label) sprites_irq::@2
(label) sprites_irq::@3
(label) sprites_irq::@4
(label) sprites_irq::@5
(label) sprites_irq::@6
(label) sprites_irq::@7
(label) sprites_irq::@8
(label) sprites_irq::@9
(label) sprites_irq::@return
(byte) sprites_irq::ptr
(byte) sprites_irq::ptr#0 reg byte x 2.5
(byte) sprites_irq::ptr#1 reg byte x 2.6666666666666665
(byte) sprites_irq::ptr#2 reg byte a 4.0
(byte) sprites_irq::ptr#3 reg byte a 2.6666666666666665
(byte) sprites_irq::ptr#4 reg byte a 4.0
(byte) sprites_irq::raster_sprite_gfx_modify
(byte) sprites_irq::raster_sprite_gfx_modify#0 raster_sprite_gfx_modify zp ZP_BYTE:36 6.5
(label) sprites_irq::toSpritePtr2
(word~) sprites_irq::toSpritePtr2_$0
(word/signed dword/dword~) sprites_irq::toSpritePtr2_$1
(byte~) sprites_irq::toSpritePtr2_$2
(byte) sprites_irq::toSpritePtr2_return
(const byte) sprites_irq::toSpritePtr2_return#0 toSpritePtr2_return = ((byte))((word))(const byte*) PLAYFIELD_SPRITES#0/(byte/signed byte/word/signed word/dword/signed dword) $40
(byte*) sprites_irq::toSpritePtr2_sprite
(byte) sprites_irq::ypos
(byte) sprites_irq::ypos#0 reg byte a 2.5
(void()) sprites_irq_init()
(label) sprites_irq_init::@return
(label) toSpritePtr1
(word~) toSpritePtr1_$0
(word/signed dword/dword~) toSpritePtr1_$1
(byte~) toSpritePtr1_$2
(byte) toSpritePtr1_return
(const byte) toSpritePtr1_return#0 toSpritePtr1_return = ((byte))((word))(const byte*) PLAYFIELD_SPRITES#0/(byte/signed byte/word/signed word/dword/signed dword) $40
(byte*) toSpritePtr1_sprite
zp ZP_BYTE:2 [ render_screen_show#16 render_screen_show#13 play_init::idx#2 play_init::idx#1 sprites_init::xpos#2 sprites_init::xpos#1 render_screen_original::y#6 render_screen_original::y#1 ]
zp ZP_BYTE:3 [ render_screen_render#18 render_screen_render#11 ]
zp ZP_BYTE:4 [ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 play_remove_lines::y#8 play_remove_lines::y#1 play_lock_current::l#6 play_lock_current::l#1 play_spawn_current::$0 play_update_score::lines_before#0 ]
zp ZP_WORD:5 [ render_score::screen#3 render_bcd::screen#6 render_bcd::screen#0 render_bcd::screen#1 render_bcd::screen#2 render_bcd::screen#3 render_bcd::screen#4 render_bcd::screen#5 render_next::next_piece_gfx#2 render_next::next_piece_gfx#3 render_next::next_piece_gfx#1 render_next::next_piece_gfx#9 current_piece_gfx#64 current_piece_gfx#120 current_piece_gfx#121 render_playfield::screen_line#2 render_playfield::screen_line#0 render_playfield::screen_line#1 current_piece#17 current_piece#100 current_piece#101 current_piece#102 current_piece#103 current_piece#104 play_collision::piece_gfx#0 play_init::pli#2 play_init::pli#1 render_init::li_1#2 render_init::li_1#1 render_screen_original::oscr#2 render_screen_original::oscr#4 render_screen_original::oscr#1 play_lock_current::playfield_line#0 ]
zp ZP_WORD:7 [ render_bcd::offset#6 render_bcd::screen_pos#3 render_bcd::screen_pos#0 render_bcd::screen_pos#2 render_next::screen_next_area#5 render_next::screen_next_area#10 render_next::screen_next_area#4 render_next::screen_next_area#11 render_next::screen_next_area#3 render_init::li_2#2 render_init::li_2#1 render_screen_original::ocols#2 render_screen_original::ocols#4 render_screen_original::ocols#1 render_moving::screen_line#0 play_collision::playfield_line#0 ]
reg byte y [ render_bcd::only_low#6 ]
reg byte x [ render_bcd::bcd#6 render_bcd::bcd#0 render_bcd::bcd#1 render_bcd::bcd#2 render_bcd::bcd#3 render_bcd::bcd#4 render_bcd::bcd#5 ]
reg byte a [ render_screen_render#15 render_screen_render#68 ]
reg byte x [ next_piece_idx#12 next_piece_idx#84 next_piece_idx#85 ]
zp ZP_BYTE:9 [ render_next::l#7 render_next::l#1 render_screen_render#33 render_screen_render#69 render_playfield::l#2 render_playfield::l#1 play_movement::return#2 play_movement::render#1 play_movement::return#0 play_movement::render#2 play_remove_lines::removed#11 play_remove_lines::removed#8 play_remove_lines::removed#1 play_lock_current::i#2 play_lock_current::i#3 play_lock_current::i#7 play_lock_current::i#9 keyboard_event_pressed::keycode#5 keyboard_event_scan::row#2 keyboard_event_scan::row#1 ]
reg byte x [ render_next::c#2 render_next::c#1 ]
reg byte x [ current_ypos#13 current_ypos#106 current_ypos#107 ]
zp ZP_BYTE:10 [ current_xpos#59 current_xpos#130 current_xpos#131 render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 play_remove_lines::x#2 play_remove_lines::x#1 play_lock_current::col#2 play_lock_current::col#0 play_lock_current::col#1 keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#15 keyboard_event_scan::keycode#1 render_next::next_piece_char#0 keyboard_event_pressed::row_bits#0 ]
zp ZP_BYTE:11 [ current_piece_char#68 current_piece_char#108 current_piece_char#109 render_playfield::c#2 render_playfield::c#1 play_collision::ypos#5 play_collision::ypos#0 play_collision::ypos#1 play_collision::ypos#2 play_collision::ypos#3 play_collision::ypos#4 play_collision::ypos2#2 play_collision::ypos2#0 play_collision::ypos2#1 play_remove_lines::full#4 play_remove_lines::full#2 play_lock_current::i#1 keyboard_event_scan::row_scan#0 ]
zp ZP_BYTE:12 [ render_moving::ypos2#2 render_moving::ypos2#0 render_moving::ypos2#1 play_collision::xpos#6 play_collision::xpos#0 play_collision::xpos#1 play_collision::xpos#2 play_collision::xpos#3 play_collision::xpos#4 play_remove_lines::c#0 ]
zp ZP_BYTE:13 [ render_moving::l#4 render_moving::l#1 play_collision::l#6 play_collision::l#1 ]
zp ZP_BYTE:14 [ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 play_collision::i#2 play_collision::i#3 play_collision::i#11 play_collision::i#13 ]
zp ZP_BYTE:15 [ render_moving::xpos#2 render_moving::xpos#0 render_moving::xpos#1 play_collision::col#2 play_collision::col#9 play_collision::col#1 ]
reg byte x [ render_moving::c#2 render_moving::c#1 ]
reg byte x [ render_screen_render#22 render_screen_render#70 ]
reg byte a [ play_move_rotate::return#2 ]
reg byte x [ play_collision::orientation#5 play_collision::orientation#0 play_collision::orientation#1 play_collision::orientation#2 play_collision::orientation#3 ]
reg byte x [ play_collision::c#2 play_collision::c#1 ]
reg byte a [ play_collision::return#15 ]
reg byte a [ play_move_leftright::return#2 ]
reg byte x [ play_move_down::movedown#6 play_move_down::movedown#7 play_move_down::movedown#10 play_move_down::movedown#2 play_move_down::movedown#3 ]
zp ZP_BYTE:16 [ current_ypos#38 current_ypos#3 current_ypos#100 current_ypos#19 current_ypos#6 play_lock_current::ypos2#2 play_lock_current::ypos2#0 play_lock_current::ypos2#1 ]
zp ZP_WORD:17 [ lines_bcd#26 lines_bcd#19 lines_bcd#15 lines_bcd#17 lines_bcd#30 render_screen_original::screen#7 render_screen_original::screen#6 render_screen_original::screen#5 render_screen_original::screen#8 render_screen_original::screen#9 render_screen_original::screen#10 render_screen_original::screen#2 render_screen_original::screen#3 ]
zp ZP_DWORD:19 [ score_bcd#26 score_bcd#18 score_bcd#14 score_bcd#16 score_bcd#30 ]
zp ZP_BYTE:23 [ level#33 level#10 level#17 level#19 level#21 ]
zp ZP_BYTE:24 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#21 current_movedown_slow#1 current_movedown_slow#23 current_movedown_slow#69 current_movedown_slow#10 ]
zp ZP_BYTE:25 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#64 level_bcd#21 level_bcd#8 ]
zp ZP_WORD:26 [ current_piece#28 current_piece#10 current_piece#15 current_piece#98 current_piece#106 render_screen_original::cols#6 render_screen_original::cols#5 render_screen_original::cols#4 render_screen_original::cols#7 render_screen_original::cols#3 render_screen_original::cols#1 render_screen_original::cols#2 ]
zp ZP_BYTE:28 [ current_piece_char#29 current_piece_char#10 current_piece_char#16 current_piece_char#5 ]
zp ZP_BYTE:29 [ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ]
zp ZP_WORD:30 [ current_piece_gfx#35 current_piece_gfx#114 current_piece_gfx#18 current_piece_gfx#74 current_piece_gfx#20 current_piece_gfx#21 current_piece_gfx#7 ]
zp ZP_BYTE:32 [ current_xpos#43 current_xpos#124 current_xpos#19 current_xpos#103 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ]
reg byte x [ play_move_down::return#3 ]
zp ZP_BYTE:33 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#2 play_spawn_current::piece_idx#1 ]
zp ZP_BYTE:34 [ game_over#65 game_over#27 game_over#10 game_over#15 game_over#52 ]
reg byte x [ play_increase_level::b#2 play_increase_level::b#1 ]
reg byte y [ play_remove_lines::r#2 play_remove_lines::r#3 play_remove_lines::r#1 ]
reg byte x [ play_remove_lines::w#6 play_remove_lines::w#3 play_remove_lines::w#4 play_remove_lines::w#12 play_remove_lines::w#11 play_remove_lines::w#1 play_remove_lines::w#2 ]
reg byte x [ play_lock_current::c#2 play_lock_current::c#1 ]
reg byte x [ keyboard_event_get::return#2 keyboard_event_get::return#1 ]
reg byte x [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ]
zp ZP_BYTE:35 [ keyboard_events_size#10 keyboard_events_size#30 keyboard_events_size#19 keyboard_events_size#16 keyboard_events_size#13 keyboard_events_size#4 keyboard_events_size#29 keyboard_events_size#1 keyboard_events_size#2 ]
reg byte a [ render_show::d018val#3 ]
reg byte y [ play_init::j#2 play_init::j#1 ]
reg byte x [ play_init::b#2 play_init::b#1 ]
reg byte y [ sprites_init::s#2 sprites_init::s#1 ]
reg byte x [ render_init::i#2 render_init::i#1 ]
reg byte x [ render_screen_original::x#6 render_screen_original::x#5 render_screen_original::x#4 render_screen_original::x#1 render_screen_original::x#2 render_screen_original::x#3 ]
zp ZP_BYTE:36 [ sprites_irq::raster_sprite_gfx_modify#0 ]
zp ZP_BYTE:37 [ render_screen_showing#0 render_screen_showing#1 ]
zp ZP_BYTE:38 [ irq_raster_next#0 irq_raster_next#4 irq_raster_next#1 irq_raster_next#2 irq_raster_next#3 ]
zp ZP_BYTE:39 [ irq_sprite_ypos#0 irq_sprite_ypos#1 irq_sprite_ypos#2 irq_sprite_ypos#3 ]
zp ZP_BYTE:40 [ irq_sprite_ptr#0 irq_sprite_ptr#1 irq_sprite_ptr#2 irq_sprite_ptr#3 ]
zp ZP_BYTE:41 [ irq_cnt#0 irq_cnt#1 irq_cnt#2 ]
reg byte x [ keyboard_event_get::return#3 ]
reg byte x [ main::key_event#0 ]
zp ZP_BYTE:42 [ play_movement::key_event#0 ]
reg byte a [ play_movement::return#3 ]
reg byte a [ main::render#1 ]
reg byte a [ render_bcd::$5 ]
reg byte a [ render_bcd::$6 ]
reg byte a [ render_bcd::$3 ]
reg byte a [ render_bcd::$4 ]
reg byte y [ render_next::$4 ]
reg byte a [ render_next::cell#0 ]
reg byte a [ render_moving::$2 ]
reg byte a [ render_moving::current_cell#0 ]
reg byte a [ render_playfield::$2 ]
reg byte a [ render_playfield::$3 ]
reg byte a [ play_move_down::key_event#0 ]
reg byte a [ play_move_down::return#0 ]
reg byte a [ play_move_leftright::key_event#0 ]
reg byte a [ play_move_leftright::return#0 ]
reg byte a [ play_movement::$3 ]
reg byte a [ play_move_rotate::key_event#0 ]
reg byte a [ play_move_rotate::return#0 ]
reg byte a [ play_movement::$4 ]
reg byte x [ play_move_rotate::$5 ]
reg byte a [ play_collision::return#14 ]
reg byte a [ play_move_rotate::$2 ]
reg byte x [ play_move_rotate::$7 ]
zp ZP_BYTE:43 [ play_collision::i#1 ]
reg byte a [ play_collision::$7 ]
reg byte a [ play_collision::return#13 ]
reg byte a [ play_move_leftright::$4 ]
reg byte a [ play_collision::return#1 ]
reg byte a [ play_move_leftright::$8 ]
reg byte a [ keyboard_event_pressed::return#12 ]
reg byte a [ play_move_down::$2 ]
reg byte a [ play_collision::return#0 ]
reg byte a [ play_move_down::$12 ]
reg byte a [ play_remove_lines::return#0 ]
reg byte a [ play_move_down::removed#0 ]
reg byte x [ play_update_score::removed#0 ]
reg byte x [ play_spawn_current::current_piece_idx#0 ]
reg byte a [ play_collision::return#10 ]
reg byte a [ play_spawn_current::$2 ]
reg byte a [ play_spawn_current::sid_rnd1_return#0 ]
reg byte a [ play_update_score::$2 ]
reg byte a [ play_update_score::$4 ]
zp ZP_DWORD:44 [ play_update_score::add_bcd#0 ]
reg byte a [ play_update_score::$5 ]
reg byte a [ play_update_score::lines_after#0 ]
reg byte a [ play_increase_level::$1 ]
reg byte a [ play_increase_level::b4#0 ]
reg byte a [ keyboard_event_pressed::$0 ]
reg byte a [ keyboard_event_pressed::$1 ]
reg byte a [ keyboard_event_pressed::return#11 ]
reg byte x [ keyboard_matrix_read::rowid#0 ]
reg byte a [ keyboard_matrix_read::return#2 ]
reg byte a [ keyboard_event_pressed::return#0 ]
reg byte a [ keyboard_event_scan::$0 ]
reg byte a [ keyboard_event_pressed::return#1 ]
reg byte a [ keyboard_event_scan::$3 ]
reg byte a [ keyboard_event_pressed::return#2 ]
reg byte a [ keyboard_event_scan::$6 ]
reg byte a [ keyboard_event_pressed::return#10 ]
reg byte a [ keyboard_event_scan::$9 ]
reg byte a [ keyboard_event_scan::$15 ]
reg byte a [ keyboard_event_scan::$16 ]
reg byte a [ keyboard_event_scan::event_type#0 ]
reg byte a [ keyboard_event_scan::$23 ]
reg byte a [ keyboard_matrix_read::return#0 ]
reg byte x [ play_init::$2 ]
reg byte a [ play_init::b4#0 ]
reg byte x [ sprites_init::s2#0 ]
reg byte a [ render_init::$13 ]
reg byte a [ render_init::$14 ]
reg byte a [ sprites_irq::ypos#0 ]
reg byte x [ sprites_irq::$0 ]
reg byte x [ sprites_irq::ptr#0 ]
reg byte a [ sprites_irq::ptr#3 ]
reg byte a [ sprites_irq::ptr#4 ]
reg byte x [ sprites_irq::ptr#1 ]
reg byte a [ sprites_irq::ptr#2 ]
FINAL ASSEMBLER
Score: 3348847
//SEG0 File Comments
// Tetris Game for the Commodore 64
// The tetris game tries to match NES tetris gameplay pretty closely
// Source: https://meatfighter.com/nintendotetrisai/
//SEG1 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(bbegin)
.pc = $80d "Program"
//SEG2 Global Constants & labels
// Processor port data direction register
.label PROCPORT_DDR = 0
// Mask for PROCESSOR_PORT_DDR which allows only memory configuration to be written
.const PROCPORT_DDR_MEMORY_MASK = 7
// Processor Port Register controlling RAM/ROM configuration and the datasette
.label PROCPORT = 1
// RAM in $A000, $E000 I/O in $D000
.const PROCPORT_RAM_IO = $35
// The offset of the sprite pointers from the screen start address
.const SPRITE_PTRS = $3f8
.label SPRITES_XPOS = $d000
.label SPRITES_YPOS = $d001
.label RASTER = $d012
.label SPRITES_ENABLE = $d015
.label SPRITES_EXPAND_Y = $d017
.label SPRITES_MC = $d01c
.label SPRITES_EXPAND_X = $d01d
.label BORDERCOL = $d020
.label BGCOL1 = $d021
.label BGCOL2 = $d022
.label BGCOL3 = $d023
.label BGCOL4 = $d024
.label SPRITES_COLS = $d027
.label VIC_CONTROL = $d011
.label D011 = $d011
.const VIC_ECM = $40
.const VIC_DEN = $10
.const VIC_RSEL = 8
.label D018 = $d018
// VIC II IRQ Status Register
.label IRQ_STATUS = $d019
// VIC II IRQ Enable Register
.label IRQ_ENABLE = $d01a
// Bits for the IRQ Status/Enable Registers
.const IRQ_RASTER = 1
// Color Ram
.label COLS = $d800
// CIA#1 Port A: keyboard matrix columns and joystick #2
.label CIA1_PORT_A = $dc00
// CIA#1 Port B: keyboard matrix rows and joystick #1.
.label CIA1_PORT_B = $dc01
// CIA#1 Interrupt Status & Control Register
.label CIA1_INTERRUPT = $dc0d
// Value that disables all CIA interrupts when stored to the CIA Interrupt registers
.const CIA_INTERRUPT_CLEAR = $7f
// CIA#2 Port A: Serial bus, RS-232, VIC memory bank
.label CIA2_PORT_A = $dd00
// CIA #2 Port A data direction register.
.label CIA2_PORT_A_DDR = $dd02
// The vector used when the HARDWARE serves IRQ interrupts
.label HARDWARE_IRQ = $fffe
// The colors of the C64
.const BLACK = 0
.const RED = 2
.const CYAN = 3
.const PURPLE = 4
.const GREEN = 5
.const BLUE = 6
.const ORANGE = 8
.const PINK = $a
.const DARK_GREY = $b
.const GREY = $c
.const LIGHT_GREEN = $d
.const LIGHT_BLUE = $e
.const KEY_Z = $c
.const KEY_LSHIFT = $f
.const KEY_X = $17
.const KEY_DOT = $2c
.const KEY_COMMA = $2f
.const KEY_RSHIFT = $34
.const KEY_CTRL = $3a
.const KEY_SPACE = $3c
.const KEY_COMMODORE = $3d
// SID registers for random number generation
.label SID_VOICE3_FREQ = $d40e
.label SID_VOICE3_CONTROL = $d412
.const SID_CONTROL_NOISE = $80
.label SID_VOICE3_OSC = $d41b
// Address of the first screen
.label PLAYFIELD_SCREEN_1 = $400
// Address of the second screen
.label PLAYFIELD_SCREEN_2 = $2c00
// Address of the original playscreen chars
.label PLAYFIELD_SCREEN_ORIGINAL = $1800
// Address of the original playscreen colors
.label PLAYFIELD_COLORS_ORIGINAL = $1c00
// Address of the sprites covering the playfield
.label PLAYFIELD_SPRITES = $2000
// Address of the charset
.label PLAYFIELD_CHARSET = $2800
// The size of the playfield
.const PLAYFIELD_LINES = $16
.const PLAYFIELD_COLS = $a
// The Y-position of the first sprite row
.const SPRITES_FIRST_YPOS = $31
// The rate of moving down the current piece fast (number of frames between moves if movedown is not forced)
.const current_movedown_fast = $a
// No collision
.const COLLISION_NONE = 0
// Playfield piece collision (cell on top of other cell on the playfield)
.const COLLISION_PLAYFIELD = 1
// Bottom collision (cell below bottom of the playfield)
.const COLLISION_BOTTOM = 2
// Left side collision (cell beyond the left side of the playfield)
.const COLLISION_LEFT = 4
// Right side collision (cell beyond the right side of the playfield)
.const COLLISION_RIGHT = 8
// Screen Sprite pointers on screen 1
.label PLAYFIELD_SPRITE_PTRS_1 = PLAYFIELD_SCREEN_1+SPRITE_PTRS
// Screen Sprite pointers on screen 2
.label PLAYFIELD_SPRITE_PTRS_2 = PLAYFIELD_SCREEN_2+SPRITE_PTRS
// The line of the first IRQ
.const IRQ_RASTER_FIRST = SPRITES_FIRST_YPOS+$13
.const toSpritePtr1_return = PLAYFIELD_SPRITES/$40
.label keyboard_events_size = $23
.label render_screen_showing = $25
.label irq_raster_next = $26
.label irq_sprite_ypos = $27
.label irq_sprite_ptr = $28
.label irq_cnt = $29
.label current_movedown_slow = $18
.label current_ypos = $10
.label current_xpos = $20
.label current_orientation = $1d
.label current_piece_gfx = $1e
.label current_piece_char = $1c
.label level_bcd = $19
.label current_piece = $1a
.label game_over = $22
.label next_piece_idx = $21
.label level = $17
.label render_screen_render = 3
.label render_screen_show = 2
.label current_movedown_counter = 4
.label lines_bcd = $11
.label score_bcd = $13
.label current_piece_17 = 5
.label render_screen_render_33 = 9
.label current_xpos_59 = $a
.label current_piece_gfx_64 = 5
.label current_piece_char_68 = $b
.label render_screen_render_69 = 9
.label current_xpos_130 = $a
.label current_xpos_131 = $a
.label current_piece_gfx_120 = 5
.label current_piece_gfx_121 = 5
.label current_piece_char_108 = $b
.label current_piece_char_109 = $b
.label current_piece_100 = 5
.label current_piece_101 = 5
.label current_piece_102 = 5
.label current_piece_103 = 5
.label current_piece_104 = 5
//SEG3 @begin
bbegin:
//SEG4 @1
//SEG5 [1] (byte) render_screen_showing#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- vbuz1=vbuc1
// The screen currently being showed to the user. $00 for screen 1 / $40 for screen 2.
lda #0
sta render_screen_showing
//SEG6 kickasm(location (const byte*) PLAYFIELD_CHARSET#0) {{ .fill 8,$00 // Place a filled char at the start of the charset .import binary "playfield-screen.imap" }}
//SEG7 kickasm(location (const byte*) PLAYFIELD_SCREEN_ORIGINAL#0) {{ // Load chars for the screen .var screen = LoadBinary("playfield-screen.iscr") // Load extended colors for the screen .var extended = LoadBinary("playfield-extended.col") // screen.get(i)+1 because the charset is loaded into PLAYFIELD_CHARSET+8 // extended.get(i)-1 because the extended colors are 1-based (1/2/3/4) // <<6 to move extended colors to the upper 2 bits .fill screen.getSize(), ( (screen.get(i)+1) | (extended.get(i)-1)<<6 ) }}
//SEG8 kickasm(location (const byte*) PLAYFIELD_COLORS_ORIGINAL#0) {{ .import binary "playfield-screen.col" }}
// Original Color Data
//SEG9 @2
//SEG10 kickasm(location (const byte*) PLAYFIELD_SPRITES#0) {{ .var sprites = LoadPicture("playfield-sprites.png", List().add($010101, $000000)) // Put the sprites into memory .for(var sy=0;sy<10;sy++) { .var sprite_gfx_y = sy*20 .for(var sx=0;sx<3;sx++) { .for (var y=0;y<21; y++) { .var gfx_y = sprite_gfx_y + mod(2100+y-sprite_gfx_y,21) .for (var c=0; c<3; c++) { .byte sprites.getSinglecolorByte(sx*3+c,gfx_y) } } .byte 0 } } }}
//SEG11 @3
//SEG12 [6] (byte) irq_raster_next#0 ← (const byte) IRQ_RASTER_FIRST#0 -- vbuz1=vbuc1
// The raster line of the next IRQ
lda #IRQ_RASTER_FIRST
sta irq_raster_next
//SEG13 [7] (byte) irq_sprite_ypos#0 ← (const byte) SPRITES_FIRST_YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) $15 -- vbuz1=vbuc1
// Y-pos of the sprites on the next IRQ
lda #SPRITES_FIRST_YPOS+$15
sta irq_sprite_ypos
//SEG14 [8] phi from @3 to toSpritePtr1 [phi:@3->toSpritePtr1]
//SEG15 toSpritePtr1
//SEG16 @5
//SEG17 [9] (byte) irq_sprite_ptr#0 ← (const byte) toSpritePtr1_return#0+(byte/signed byte/word/signed word/dword/signed dword) 3 -- vbuz1=vbuc1
// Index of the sprites to show on the next IRQ
lda #toSpritePtr1_return+3
sta irq_sprite_ptr
//SEG18 [10] (byte) irq_cnt#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- vbuz1=vbuc1
// Counting the 10 IRQs
lda #0
sta irq_cnt
//SEG19 [11] phi from @5 to @4 [phi:@5->@4]
//SEG20 @4
//SEG21 [12] call main
//SEG22 [14] phi from @4 to main [phi:@4->main]
jsr main
rts
//SEG23 [13] phi from @4 to @end [phi:@4->@end]
//SEG24 @end
//SEG25 main
main: {
//SEG26 [15] call sid_rnd_init
jsr sid_rnd_init
//SEG27 main::@8
//SEG28 asm { sei }
sei
//SEG29 [17] call render_init
//SEG30 [494] phi from main::@8 to render_init [phi:main::@8->render_init]
jsr render_init
//SEG31 [18] phi from main::@8 to main::@9 [phi:main::@8->main::@9]
//SEG32 main::@9
//SEG33 [19] call sprites_init
jsr sprites_init
//SEG34 [20] phi from main::@9 to main::@10 [phi:main::@9->main::@10]
//SEG35 main::@10
//SEG36 [21] call sprites_irq_init
jsr sprites_irq_init
//SEG37 [22] phi from main::@10 to main::@11 [phi:main::@10->main::@11]
//SEG38 main::@11
//SEG39 [23] call play_init
//SEG40 [453] phi from main::@11 to play_init [phi:main::@11->play_init]
jsr play_init
//SEG41 [24] phi from main::@11 to main::@12 [phi:main::@11->main::@12]
//SEG42 main::@12
//SEG43 [25] call play_spawn_current
//SEG44 [283] phi from main::@12 to play_spawn_current [phi:main::@12->play_spawn_current]
//SEG45 [283] phi (byte) game_over#65 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@12->play_spawn_current#0] -- vbuz1=vbuc1
lda #0
sta game_over
//SEG46 [283] phi (byte) next_piece_idx#17 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@12->play_spawn_current#1] -- vbuz1=vbuc1
sta next_piece_idx
jsr play_spawn_current
//SEG47 [26] phi from main::@12 to main::@13 [phi:main::@12->main::@13]
//SEG48 main::@13
//SEG49 [27] call play_spawn_current
//SEG50 [283] phi from main::@13 to play_spawn_current [phi:main::@13->play_spawn_current]
//SEG51 [283] phi (byte) game_over#65 = (byte) game_over#52 [phi:main::@13->play_spawn_current#0] -- register_copy
//SEG52 [283] phi (byte) next_piece_idx#17 = (byte) play_spawn_current::piece_idx#2 [phi:main::@13->play_spawn_current#1] -- register_copy
jsr play_spawn_current
//SEG53 [28] phi from main::@13 to main::@14 [phi:main::@13->main::@14]
//SEG54 main::@14
//SEG55 [29] call render_playfield
//SEG56 [149] phi from main::@14 to render_playfield [phi:main::@14->render_playfield]
//SEG57 [149] phi (byte) render_screen_render#22 = (byte/signed byte/word/signed word/dword/signed dword) $40 [phi:main::@14->render_playfield#0] -- vbuxx=vbuc1
ldx #$40
jsr render_playfield
//SEG58 main::@15
//SEG59 [30] (byte~) current_ypos#106 ← (byte) current_ypos#6 -- vbuxx=vbuz1
ldx current_ypos
//SEG60 [31] (byte~) current_xpos#130 ← (byte) current_xpos#103 -- vbuz1=vbuz2
lda current_xpos
sta current_xpos_130
//SEG61 [32] (byte*~) current_piece_gfx#120 ← (byte*) current_piece_gfx#74 -- pbuz1=pbuz2
lda current_piece_gfx
sta current_piece_gfx_120
lda current_piece_gfx+1
sta current_piece_gfx_120+1
//SEG62 [33] (byte~) current_piece_char#108 ← (byte) current_piece_char#5 -- vbuz1=vbuz2
lda current_piece_char
sta current_piece_char_108
//SEG63 [34] call render_moving
//SEG64 [128] phi from main::@15 to render_moving [phi:main::@15->render_moving]
//SEG65 [128] phi (byte) current_piece_char#68 = (byte~) current_piece_char#108 [phi:main::@15->render_moving#0] -- register_copy
//SEG66 [128] phi (byte*) current_piece_gfx#64 = (byte*~) current_piece_gfx#120 [phi:main::@15->render_moving#1] -- register_copy
//SEG67 [128] phi (byte) current_xpos#59 = (byte~) current_xpos#130 [phi:main::@15->render_moving#2] -- register_copy
//SEG68 [128] phi (byte) render_screen_render#33 = (byte/signed byte/word/signed word/dword/signed dword) $40 [phi:main::@15->render_moving#3] -- vbuz1=vbuc1
lda #$40
sta render_screen_render_33
//SEG69 [128] phi (byte) current_ypos#13 = (byte~) current_ypos#106 [phi:main::@15->render_moving#4] -- register_copy
jsr render_moving
//SEG70 main::@16
//SEG71 [35] (byte~) next_piece_idx#84 ← (byte) play_spawn_current::piece_idx#2 -- vbuxx=vbuz1
ldx play_spawn_current.piece_idx
//SEG72 [36] call render_next
//SEG73 [107] phi from main::@16 to render_next [phi:main::@16->render_next]
//SEG74 [107] phi (byte) next_piece_idx#12 = (byte~) next_piece_idx#84 [phi:main::@16->render_next#0] -- register_copy
//SEG75 [107] phi (byte) render_screen_render#15 = (byte/signed byte/word/signed word/dword/signed dword) $40 [phi:main::@16->render_next#1] -- vbuaa=vbuc1
lda #$40
jsr render_next
//SEG76 [37] (byte*~) current_piece#98 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$0) -- pbuz1=pptc1_derefidx_vbuz2
ldy play_spawn_current._0
lda PIECES,y
sta current_piece
lda PIECES+1,y
sta current_piece+1
//SEG77 [38] phi from main::@16 to main::@1 [phi:main::@16->main::@1]
//SEG78 [38] phi (byte) level_bcd#11 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@16->main::@1#0] -- vbuz1=vbuc1
lda #0
sta level_bcd
//SEG79 [38] phi (byte) level#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@16->main::@1#1] -- vbuz1=vbuc1
sta level
//SEG80 [38] phi (dword) score_bcd#18 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@16->main::@1#2] -- vduz1=vbuc1
sta score_bcd
sta score_bcd+1
sta score_bcd+2
sta score_bcd+3
//SEG81 [38] phi (word) lines_bcd#19 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@16->main::@1#3] -- vwuz1=vbuc1
sta lines_bcd
sta lines_bcd+1
//SEG82 [38] phi (byte) current_movedown_counter#16 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@16->main::@1#4] -- vbuz1=vbuc1
sta current_movedown_counter
//SEG83 [38] phi (byte) keyboard_events_size#19 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@16->main::@1#5] -- vbuz1=vbuc1
sta keyboard_events_size
//SEG84 [38] phi (byte) next_piece_idx#10 = (byte) play_spawn_current::piece_idx#2 [phi:main::@16->main::@1#6] -- register_copy
//SEG85 [38] phi (byte) game_over#10 = (byte) game_over#52 [phi:main::@16->main::@1#7] -- register_copy
//SEG86 [38] phi (byte) current_ypos#100 = (byte) current_ypos#6 [phi:main::@16->main::@1#8] -- register_copy
//SEG87 [38] phi (byte) current_xpos#124 = (byte) current_xpos#103 [phi:main::@16->main::@1#9] -- register_copy
//SEG88 [38] phi (byte*) current_piece_gfx#114 = (byte*) current_piece_gfx#74 [phi:main::@16->main::@1#10] -- register_copy
//SEG89 [38] phi (byte) current_orientation#13 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@16->main::@1#11] -- vbuz1=vbuc1
sta current_orientation
//SEG90 [38] phi (byte) current_piece_char#10 = (byte) current_piece_char#5 [phi:main::@16->main::@1#12] -- register_copy
//SEG91 [38] phi (byte*) current_piece#10 = (byte*~) current_piece#98 [phi:main::@16->main::@1#13] -- register_copy
//SEG92 [38] phi (byte) current_movedown_slow#14 = (byte) current_movedown_slow#1 [phi:main::@16->main::@1#14] -- register_copy
//SEG93 [38] phi (byte) render_screen_render#18 = (byte/signed byte/word/signed word/dword/signed dword) $40 [phi:main::@16->main::@1#15] -- vbuz1=vbuc1
lda #$40
sta render_screen_render
//SEG94 [38] phi (byte) render_screen_show#16 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@16->main::@1#16] -- vbuz1=vbuc1
lda #0
sta render_screen_show
//SEG95 [38] phi from main::@6 to main::@1 [phi:main::@6->main::@1]
//SEG96 [38] phi (byte) level_bcd#11 = (byte) level_bcd#17 [phi:main::@6->main::@1#0] -- register_copy
//SEG97 [38] phi (byte) level#10 = (byte) level#17 [phi:main::@6->main::@1#1] -- register_copy
//SEG98 [38] phi (dword) score_bcd#18 = (dword) score_bcd#14 [phi:main::@6->main::@1#2] -- register_copy
//SEG99 [38] phi (word) lines_bcd#19 = (word) lines_bcd#15 [phi:main::@6->main::@1#3] -- register_copy
//SEG100 [38] phi (byte) current_movedown_counter#16 = (byte) current_movedown_counter#14 [phi:main::@6->main::@1#4] -- register_copy
//SEG101 [38] phi (byte) keyboard_events_size#19 = (byte) keyboard_events_size#16 [phi:main::@6->main::@1#5] -- register_copy
//SEG102 [38] phi (byte) next_piece_idx#10 = (byte) next_piece_idx#16 [phi:main::@6->main::@1#6] -- register_copy
//SEG103 [38] phi (byte) game_over#10 = (byte) game_over#15 [phi:main::@6->main::@1#7] -- register_copy
//SEG104 [38] phi (byte) current_ypos#100 = (byte) current_ypos#19 [phi:main::@6->main::@1#8] -- register_copy
//SEG105 [38] phi (byte) current_xpos#124 = (byte) current_xpos#19 [phi:main::@6->main::@1#9] -- register_copy
//SEG106 [38] phi (byte*) current_piece_gfx#114 = (byte*) current_piece_gfx#18 [phi:main::@6->main::@1#10] -- register_copy
//SEG107 [38] phi (byte) current_orientation#13 = (byte) current_orientation#17 [phi:main::@6->main::@1#11] -- register_copy
//SEG108 [38] phi (byte) current_piece_char#10 = (byte) current_piece_char#16 [phi:main::@6->main::@1#12] -- register_copy
//SEG109 [38] phi (byte*) current_piece#10 = (byte*) current_piece#15 [phi:main::@6->main::@1#13] -- register_copy
//SEG110 [38] phi (byte) current_movedown_slow#14 = (byte) current_movedown_slow#21 [phi:main::@6->main::@1#14] -- register_copy
//SEG111 main::@1
b1:
// Wait for a frame to pass
//SEG112 main::@2
b2:
//SEG113 [39] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) $ff) goto main::@2 -- _deref_pbuc1_neq_vbuc2_then_la1
lda #$ff
cmp RASTER
bne b2
//SEG114 [40] phi from main::@2 to main::@3 [phi:main::@2->main::@3]
//SEG115 main::@3
//SEG116 [41] call render_show
jsr render_show
//SEG117 [42] phi from main::@3 to main::@17 [phi:main::@3->main::@17]
//SEG118 main::@17
//SEG119 [43] call keyboard_event_scan
//SEG120 [388] phi from main::@17 to keyboard_event_scan [phi:main::@17->keyboard_event_scan]
jsr keyboard_event_scan
//SEG121 [44] phi from main::@17 to main::@18 [phi:main::@17->main::@18]
//SEG122 main::@18
//SEG123 [45] call keyboard_event_get
jsr keyboard_event_get
//SEG124 [46] (byte) keyboard_event_get::return#3 ← (byte) keyboard_event_get::return#2
//SEG125 main::@19
//SEG126 [47] (byte) main::key_event#0 ← (byte) keyboard_event_get::return#3
//SEG127 [48] if((byte) game_over#10==(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@4 -- vbuz1_eq_0_then_la1
lda game_over
cmp #0
beq b4
//SEG128 main::@5
b5:
//SEG129 [49] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_inc__deref_pbuc1
inc BORDERCOL
jmp b5
//SEG130 main::@4
b4:
//SEG131 [50] (byte) play_movement::key_event#0 ← (byte) main::key_event#0 -- vbuz1=vbuxx
stx play_movement.key_event
//SEG132 [51] call play_movement
jsr play_movement
//SEG133 [52] (byte) play_movement::return#3 ← (byte) play_movement::return#2 -- vbuaa=vbuz1
lda play_movement.return
//SEG134 main::@20
//SEG135 [53] (byte) main::render#1 ← (byte) play_movement::return#3
//SEG136 main::@6
//SEG137 [54] if((byte) main::render#1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@1 -- vbuaa_eq_0_then_la1
cmp #0
beq b1
//SEG138 main::@7
//SEG139 [55] (byte~) render_screen_render#70 ← (byte) render_screen_render#18 -- vbuxx=vbuz1
ldx render_screen_render
//SEG140 [56] call render_playfield
//SEG141 [149] phi from main::@7 to render_playfield [phi:main::@7->render_playfield]
//SEG142 [149] phi (byte) render_screen_render#22 = (byte~) render_screen_render#70 [phi:main::@7->render_playfield#0] -- register_copy
jsr render_playfield
//SEG143 main::@21
//SEG144 [57] (byte~) current_ypos#107 ← (byte) current_ypos#19 -- vbuxx=vbuz1
ldx current_ypos
//SEG145 [58] (byte~) render_screen_render#69 ← (byte) render_screen_render#18 -- vbuz1=vbuz2
lda render_screen_render
sta render_screen_render_69
//SEG146 [59] (byte~) current_xpos#131 ← (byte) current_xpos#19 -- vbuz1=vbuz2
lda current_xpos
sta current_xpos_131
//SEG147 [60] (byte*~) current_piece_gfx#121 ← (byte*) current_piece_gfx#18 -- pbuz1=pbuz2
lda current_piece_gfx
sta current_piece_gfx_121
lda current_piece_gfx+1
sta current_piece_gfx_121+1
//SEG148 [61] (byte~) current_piece_char#109 ← (byte) current_piece_char#16 -- vbuz1=vbuz2
lda current_piece_char
sta current_piece_char_109
//SEG149 [62] call render_moving
//SEG150 [128] phi from main::@21 to render_moving [phi:main::@21->render_moving]
//SEG151 [128] phi (byte) current_piece_char#68 = (byte~) current_piece_char#109 [phi:main::@21->render_moving#0] -- register_copy
//SEG152 [128] phi (byte*) current_piece_gfx#64 = (byte*~) current_piece_gfx#121 [phi:main::@21->render_moving#1] -- register_copy
//SEG153 [128] phi (byte) current_xpos#59 = (byte~) current_xpos#131 [phi:main::@21->render_moving#2] -- register_copy
//SEG154 [128] phi (byte) render_screen_render#33 = (byte~) render_screen_render#69 [phi:main::@21->render_moving#3] -- register_copy
//SEG155 [128] phi (byte) current_ypos#13 = (byte~) current_ypos#107 [phi:main::@21->render_moving#4] -- register_copy
jsr render_moving
//SEG156 main::@22
//SEG157 [63] (byte~) render_screen_render#68 ← (byte) render_screen_render#18 -- vbuaa=vbuz1
lda render_screen_render
//SEG158 [64] (byte~) next_piece_idx#85 ← (byte) next_piece_idx#16 -- vbuxx=vbuz1
ldx next_piece_idx
//SEG159 [65] call render_next
//SEG160 [107] phi from main::@22 to render_next [phi:main::@22->render_next]
//SEG161 [107] phi (byte) next_piece_idx#12 = (byte~) next_piece_idx#85 [phi:main::@22->render_next#0] -- register_copy
//SEG162 [107] phi (byte) render_screen_render#15 = (byte~) render_screen_render#68 [phi:main::@22->render_next#1] -- register_copy
jsr render_next
//SEG163 [66] phi from main::@22 to main::@23 [phi:main::@22->main::@23]
//SEG164 main::@23
//SEG165 [67] call render_score
jsr render_score
//SEG166 [68] phi from main::@23 to main::@24 [phi:main::@23->main::@24]
//SEG167 main::@24
//SEG168 [69] call render_screen_swap
jsr render_screen_swap
//SEG169 [38] phi from main::@24 to main::@1 [phi:main::@24->main::@1]
//SEG170 [38] phi (byte) level_bcd#11 = (byte) level_bcd#17 [phi:main::@24->main::@1#0] -- register_copy
//SEG171 [38] phi (byte) level#10 = (byte) level#17 [phi:main::@24->main::@1#1] -- register_copy
//SEG172 [38] phi (dword) score_bcd#18 = (dword) score_bcd#14 [phi:main::@24->main::@1#2] -- register_copy
//SEG173 [38] phi (word) lines_bcd#19 = (word) lines_bcd#15 [phi:main::@24->main::@1#3] -- register_copy
//SEG174 [38] phi (byte) current_movedown_counter#16 = (byte) current_movedown_counter#14 [phi:main::@24->main::@1#4] -- register_copy
//SEG175 [38] phi (byte) keyboard_events_size#19 = (byte) keyboard_events_size#16 [phi:main::@24->main::@1#5] -- register_copy
//SEG176 [38] phi (byte) next_piece_idx#10 = (byte) next_piece_idx#16 [phi:main::@24->main::@1#6] -- register_copy
//SEG177 [38] phi (byte) game_over#10 = (byte) game_over#15 [phi:main::@24->main::@1#7] -- register_copy
//SEG178 [38] phi (byte) current_ypos#100 = (byte) current_ypos#19 [phi:main::@24->main::@1#8] -- register_copy
//SEG179 [38] phi (byte) current_xpos#124 = (byte) current_xpos#19 [phi:main::@24->main::@1#9] -- register_copy
//SEG180 [38] phi (byte*) current_piece_gfx#114 = (byte*) current_piece_gfx#18 [phi:main::@24->main::@1#10] -- register_copy
//SEG181 [38] phi (byte) current_orientation#13 = (byte) current_orientation#17 [phi:main::@24->main::@1#11] -- register_copy
//SEG182 [38] phi (byte) current_piece_char#10 = (byte) current_piece_char#16 [phi:main::@24->main::@1#12] -- register_copy
//SEG183 [38] phi (byte*) current_piece#10 = (byte*) current_piece#15 [phi:main::@24->main::@1#13] -- register_copy
//SEG184 [38] phi (byte) current_movedown_slow#14 = (byte) current_movedown_slow#21 [phi:main::@24->main::@1#14] -- register_copy
//SEG185 [38] phi (byte) render_screen_render#18 = (byte) render_screen_render#11 [phi:main::@24->main::@1#15] -- register_copy
//SEG186 [38] phi (byte) render_screen_show#16 = (byte) render_screen_show#13 [phi:main::@24->main::@1#16] -- register_copy
jmp b1
}
//SEG187 render_screen_swap
// Swap rendering to the other screen (used for double buffering)
render_screen_swap: {
//SEG188 [70] (byte) render_screen_render#11 ← (byte) render_screen_render#18 ^ (byte/signed byte/word/signed word/dword/signed dword) $40 -- vbuz1=vbuz1_bxor_vbuc1
lda #$40
eor render_screen_render
sta render_screen_render
//SEG189 [71] (byte) render_screen_show#13 ← (byte) render_screen_show#16 ^ (byte/signed byte/word/signed word/dword/signed dword) $40 -- vbuz1=vbuz1_bxor_vbuc1
lda #$40
eor render_screen_show
sta render_screen_show
//SEG190 render_screen_swap::@return
//SEG191 [72] return
rts
}
//SEG192 render_score
// Show the current score
render_score: {
.label score_bytes = score_bcd
.const score_offset = $28*5+$1c
.const lines_offset = $28*1+$16
.const level_offset = $28*$13+$1f
.label screen = 5
//SEG193 [73] if((byte) render_screen_render#18==(byte/signed byte/word/signed word/dword/signed dword) 0) goto render_score::@1 -- vbuz1_eq_0_then_la1
lda render_screen_render
cmp #0
beq b2
//SEG194 [74] phi from render_score to render_score::@2 [phi:render_score->render_score::@2]
//SEG195 render_score::@2
//SEG196 [75] phi from render_score::@2 to render_score::@1 [phi:render_score::@2->render_score::@1]
//SEG197 [75] phi (byte*) render_score::screen#3 = (const byte*) PLAYFIELD_SCREEN_2#0 [phi:render_score::@2->render_score::@1#0] -- pbuz1=pbuc1
lda #<PLAYFIELD_SCREEN_2
sta screen
lda #>PLAYFIELD_SCREEN_2
sta screen+1
jmp b1
//SEG198 [75] phi from render_score to render_score::@1 [phi:render_score->render_score::@1]
b2:
//SEG199 [75] phi (byte*) render_score::screen#3 = (const byte*) PLAYFIELD_SCREEN_1#0 [phi:render_score->render_score::@1#0] -- pbuz1=pbuc1
lda #<PLAYFIELD_SCREEN_1
sta screen
lda #>PLAYFIELD_SCREEN_1
sta screen+1
//SEG200 render_score::@1
b1:
//SEG201 [76] (byte*) render_bcd::screen#0 ← (byte*) render_score::screen#3
//SEG202 [77] (byte) render_bcd::bcd#0 ← *((const byte*) render_score::score_bytes#0+(byte/signed byte/word/signed word/dword/signed dword) 2) -- vbuxx=_deref_pbuc1
ldx score_bytes+2
//SEG203 [78] call render_bcd
//SEG204 [95] phi from render_score::@1 to render_bcd [phi:render_score::@1->render_bcd]
//SEG205 [95] phi (byte) render_bcd::bcd#6 = (byte) render_bcd::bcd#0 [phi:render_score::@1->render_bcd#0] -- register_copy
//SEG206 [95] phi (byte) render_bcd::only_low#6 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render_score::@1->render_bcd#1] -- vbuyy=vbuc1
ldy #0
//SEG207 [95] phi (word) render_bcd::offset#6 = (const word) render_score::score_offset#0 [phi:render_score::@1->render_bcd#2] -- vwuz1=vwuc1
lda #<score_offset
sta render_bcd.offset
lda #>score_offset
sta render_bcd.offset+1
//SEG208 [95] phi (byte*) render_bcd::screen#6 = (byte*) render_bcd::screen#0 [phi:render_score::@1->render_bcd#3] -- register_copy
jsr render_bcd
//SEG209 render_score::@3
//SEG210 [79] (byte*) render_bcd::screen#1 ← (byte*) render_score::screen#3
//SEG211 [80] (byte) render_bcd::bcd#1 ← *((const byte*) render_score::score_bytes#0+(byte/signed byte/word/signed word/dword/signed dword) 1) -- vbuxx=_deref_pbuc1
ldx score_bytes+1
//SEG212 [81] call render_bcd
//SEG213 [95] phi from render_score::@3 to render_bcd [phi:render_score::@3->render_bcd]
//SEG214 [95] phi (byte) render_bcd::bcd#6 = (byte) render_bcd::bcd#1 [phi:render_score::@3->render_bcd#0] -- register_copy
//SEG215 [95] phi (byte) render_bcd::only_low#6 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render_score::@3->render_bcd#1] -- vbuyy=vbuc1
ldy #0
//SEG216 [95] phi (word) render_bcd::offset#6 = (const word) render_score::score_offset#0+(byte/signed byte/word/signed word/dword/signed dword) 2 [phi:render_score::@3->render_bcd#2] -- vwuz1=vbuc1
lda #score_offset+2
sta render_bcd.offset
tya
sta render_bcd.offset+1
//SEG217 [95] phi (byte*) render_bcd::screen#6 = (byte*) render_bcd::screen#1 [phi:render_score::@3->render_bcd#3] -- register_copy
jsr render_bcd
//SEG218 render_score::@4
//SEG219 [82] (byte*) render_bcd::screen#2 ← (byte*) render_score::screen#3
//SEG220 [83] (byte) render_bcd::bcd#2 ← *((const byte*) render_score::score_bytes#0) -- vbuxx=_deref_pbuc1
ldx score_bytes
//SEG221 [84] call render_bcd
//SEG222 [95] phi from render_score::@4 to render_bcd [phi:render_score::@4->render_bcd]
//SEG223 [95] phi (byte) render_bcd::bcd#6 = (byte) render_bcd::bcd#2 [phi:render_score::@4->render_bcd#0] -- register_copy
//SEG224 [95] phi (byte) render_bcd::only_low#6 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render_score::@4->render_bcd#1] -- vbuyy=vbuc1
ldy #0
//SEG225 [95] phi (word) render_bcd::offset#6 = (const word) render_score::score_offset#0+(byte/signed byte/word/signed word/dword/signed dword) 4 [phi:render_score::@4->render_bcd#2] -- vwuz1=vbuc1
lda #score_offset+4
sta render_bcd.offset
tya
sta render_bcd.offset+1
//SEG226 [95] phi (byte*) render_bcd::screen#6 = (byte*) render_bcd::screen#2 [phi:render_score::@4->render_bcd#3] -- register_copy
jsr render_bcd
//SEG227 render_score::@5
//SEG228 [85] (byte) render_bcd::bcd#3 ← > (word) lines_bcd#15 -- vbuxx=_hi_vwuz1
lda lines_bcd+1
tax
//SEG229 [86] (byte*) render_bcd::screen#3 ← (byte*) render_score::screen#3
//SEG230 [87] call render_bcd
//SEG231 [95] phi from render_score::@5 to render_bcd [phi:render_score::@5->render_bcd]
//SEG232 [95] phi (byte) render_bcd::bcd#6 = (byte) render_bcd::bcd#3 [phi:render_score::@5->render_bcd#0] -- register_copy
//SEG233 [95] phi (byte) render_bcd::only_low#6 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:render_score::@5->render_bcd#1] -- vbuyy=vbuc1
ldy #1
//SEG234 [95] phi (word) render_bcd::offset#6 = (const word) render_score::lines_offset#0 [phi:render_score::@5->render_bcd#2] -- vwuz1=vwuc1
lda #<lines_offset
sta render_bcd.offset
lda #>lines_offset
sta render_bcd.offset+1
//SEG235 [95] phi (byte*) render_bcd::screen#6 = (byte*) render_bcd::screen#3 [phi:render_score::@5->render_bcd#3] -- register_copy
jsr render_bcd
//SEG236 render_score::@6
//SEG237 [88] (byte) render_bcd::bcd#4 ← < (word) lines_bcd#15 -- vbuxx=_lo_vwuz1
lda lines_bcd
tax
//SEG238 [89] (byte*) render_bcd::screen#4 ← (byte*) render_score::screen#3
//SEG239 [90] call render_bcd
//SEG240 [95] phi from render_score::@6 to render_bcd [phi:render_score::@6->render_bcd]
//SEG241 [95] phi (byte) render_bcd::bcd#6 = (byte) render_bcd::bcd#4 [phi:render_score::@6->render_bcd#0] -- register_copy
//SEG242 [95] phi (byte) render_bcd::only_low#6 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render_score::@6->render_bcd#1] -- vbuyy=vbuc1
ldy #0
//SEG243 [95] phi (word) render_bcd::offset#6 = (const word) render_score::lines_offset#0+(byte/signed byte/word/signed word/dword/signed dword) 1 [phi:render_score::@6->render_bcd#2] -- vwuz1=vbuc1
lda #lines_offset+1
sta render_bcd.offset
tya
sta render_bcd.offset+1
//SEG244 [95] phi (byte*) render_bcd::screen#6 = (byte*) render_bcd::screen#4 [phi:render_score::@6->render_bcd#3] -- register_copy
jsr render_bcd
//SEG245 render_score::@7
//SEG246 [91] (byte*) render_bcd::screen#5 ← (byte*) render_score::screen#3
//SEG247 [92] (byte) render_bcd::bcd#5 ← (byte) level_bcd#17 -- vbuxx=vbuz1
ldx level_bcd
//SEG248 [93] call render_bcd
//SEG249 [95] phi from render_score::@7 to render_bcd [phi:render_score::@7->render_bcd]
//SEG250 [95] phi (byte) render_bcd::bcd#6 = (byte) render_bcd::bcd#5 [phi:render_score::@7->render_bcd#0] -- register_copy
//SEG251 [95] phi (byte) render_bcd::only_low#6 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render_score::@7->render_bcd#1] -- vbuyy=vbuc1
ldy #0
//SEG252 [95] phi (word) render_bcd::offset#6 = (const word) render_score::level_offset#0 [phi:render_score::@7->render_bcd#2] -- vwuz1=vwuc1
lda #<level_offset
sta render_bcd.offset
lda #>level_offset
sta render_bcd.offset+1
//SEG253 [95] phi (byte*) render_bcd::screen#6 = (byte*) render_bcd::screen#5 [phi:render_score::@7->render_bcd#3] -- register_copy
jsr render_bcd
//SEG254 render_score::@return
//SEG255 [94] return
rts
}
//SEG256 render_bcd
// Render BCD digits on a screen.
// - screen: pointer to the screen to render on
// - offset: offset on the screen
// - bcd: The BCD-value to render
// - only_low: if non-zero only renders the low digit
// render_bcd(byte* zeropage(5) screen, word zeropage(7) offset, byte register(X) bcd, byte register(Y) only_low)
render_bcd: {
.const ZERO_CHAR = $35
.label screen = 5
.label screen_pos = 7
.label offset = 7
//SEG257 [96] (byte*) render_bcd::screen_pos#0 ← (byte*) render_bcd::screen#6 + (word) render_bcd::offset#6 -- pbuz1=pbuz2_plus_vwuz1
lda screen_pos
clc
adc screen
sta screen_pos
lda screen_pos+1
adc screen+1
sta screen_pos+1
//SEG258 [97] if((byte) render_bcd::only_low#6!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto render_bcd::@1 -- vbuyy_neq_0_then_la1
cpy #0
bne b1
//SEG259 render_bcd::@2
//SEG260 [98] (byte~) render_bcd::$5 ← (byte) render_bcd::bcd#6 >> (byte/signed byte/word/signed word/dword/signed dword) 4 -- vbuaa=vbuxx_ror_4
txa
lsr
lsr
lsr
lsr
//SEG261 [99] (byte~) render_bcd::$6 ← (const byte) render_bcd::ZERO_CHAR#0 + (byte~) render_bcd::$5 -- vbuaa=vbuc1_plus_vbuaa
clc
adc #ZERO_CHAR
//SEG262 [100] *((byte*) render_bcd::screen_pos#0) ← (byte~) render_bcd::$6 -- _deref_pbuz1=vbuaa
ldy #0
sta (screen_pos),y
//SEG263 [101] (byte*) render_bcd::screen_pos#2 ← ++ (byte*) render_bcd::screen_pos#0 -- pbuz1=_inc_pbuz1
inc screen_pos
bne !+
inc screen_pos+1
!:
//SEG264 [102] phi from render_bcd render_bcd::@2 to render_bcd::@1 [phi:render_bcd/render_bcd::@2->render_bcd::@1]
//SEG265 [102] phi (byte*) render_bcd::screen_pos#3 = (byte*) render_bcd::screen_pos#0 [phi:render_bcd/render_bcd::@2->render_bcd::@1#0] -- register_copy
//SEG266 render_bcd::@1
b1:
//SEG267 [103] (byte~) render_bcd::$3 ← (byte) render_bcd::bcd#6 & (byte/signed byte/word/signed word/dword/signed dword) $f -- vbuaa=vbuxx_band_vbuc1
txa
and #$f
//SEG268 [104] (byte~) render_bcd::$4 ← (const byte) render_bcd::ZERO_CHAR#0 + (byte~) render_bcd::$3 -- vbuaa=vbuc1_plus_vbuaa
clc
adc #ZERO_CHAR
//SEG269 [105] *((byte*) render_bcd::screen_pos#3) ← (byte~) render_bcd::$4 -- _deref_pbuz1=vbuaa
ldy #0
sta (screen_pos),y
//SEG270 render_bcd::@return
//SEG271 [106] return
rts
}
//SEG272 render_next
// Render the next tetromino in the "next" area
render_next: {
.const next_area_offset = $28*$c+$18+4
.label next_piece_char = $a
.label next_piece_gfx = 5
.label screen_next_area = 7
.label l = 9
//SEG273 [108] if((byte) render_screen_render#15==(byte/signed byte/word/signed word/dword/signed dword) 0) goto render_next::@1 -- vbuaa_eq_0_then_la1
cmp #0
beq b2
//SEG274 [109] phi from render_next to render_next::@2 [phi:render_next->render_next::@2]
//SEG275 render_next::@2
//SEG276 [110] phi from render_next::@2 to render_next::@1 [phi:render_next::@2->render_next::@1]
//SEG277 [110] phi (byte*) render_next::screen_next_area#11 = (const byte*) PLAYFIELD_SCREEN_2#0+(const word) render_next::next_area_offset#0 [phi:render_next::@2->render_next::@1#0] -- pbuz1=pbuc1
lda #<PLAYFIELD_SCREEN_2+next_area_offset
sta screen_next_area
lda #>PLAYFIELD_SCREEN_2+next_area_offset
sta screen_next_area+1
jmp b1
//SEG278 [110] phi from render_next to render_next::@1 [phi:render_next->render_next::@1]
b2:
//SEG279 [110] phi (byte*) render_next::screen_next_area#11 = (const byte*) PLAYFIELD_SCREEN_1#0+(const word) render_next::next_area_offset#0 [phi:render_next->render_next::@1#0] -- pbuz1=pbuc1
lda #<PLAYFIELD_SCREEN_1+next_area_offset
sta screen_next_area
lda #>PLAYFIELD_SCREEN_1+next_area_offset
sta screen_next_area+1
//SEG280 render_next::@1
b1:
//SEG281 [111] (byte~) render_next::$4 ← (byte) next_piece_idx#12 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuyy=vbuxx_rol_1
txa
asl
tay
//SEG282 [112] (byte) render_next::next_piece_char#0 ← *((const byte[]) PIECES_NEXT_CHARS#0 + (byte) next_piece_idx#12) -- vbuz1=pbuc1_derefidx_vbuxx
lda PIECES_NEXT_CHARS,x
sta next_piece_char
//SEG283 [113] (byte*~) render_next::next_piece_gfx#9 ← (byte*)*((const word[]) PIECES#0 + (byte~) render_next::$4) -- pbuz1=pptc1_derefidx_vbuyy
lda PIECES,y
sta next_piece_gfx
lda PIECES+1,y
sta next_piece_gfx+1
//SEG284 [114] phi from render_next::@1 to render_next::@3 [phi:render_next::@1->render_next::@3]
//SEG285 [114] phi (byte) render_next::l#7 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render_next::@1->render_next::@3#0] -- vbuz1=vbuc1
lda #0
sta l
//SEG286 [114] phi (byte*) render_next::screen_next_area#10 = (byte*) render_next::screen_next_area#11 [phi:render_next::@1->render_next::@3#1] -- register_copy
//SEG287 [114] phi (byte*) render_next::next_piece_gfx#3 = (byte*~) render_next::next_piece_gfx#9 [phi:render_next::@1->render_next::@3#2] -- register_copy
//SEG288 [114] phi from render_next::@8 to render_next::@3 [phi:render_next::@8->render_next::@3]
//SEG289 [114] phi (byte) render_next::l#7 = (byte) render_next::l#1 [phi:render_next::@8->render_next::@3#0] -- register_copy
//SEG290 [114] phi (byte*) render_next::screen_next_area#10 = (byte*) render_next::screen_next_area#4 [phi:render_next::@8->render_next::@3#1] -- register_copy
//SEG291 [114] phi (byte*) render_next::next_piece_gfx#3 = (byte*) render_next::next_piece_gfx#1 [phi:render_next::@8->render_next::@3#2] -- register_copy
//SEG292 render_next::@3
b3:
//SEG293 [115] phi from render_next::@3 to render_next::@4 [phi:render_next::@3->render_next::@4]
//SEG294 [115] phi (byte) render_next::c#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render_next::@3->render_next::@4#0] -- vbuxx=vbuc1
ldx #0
//SEG295 [115] phi (byte*) render_next::screen_next_area#5 = (byte*) render_next::screen_next_area#10 [phi:render_next::@3->render_next::@4#1] -- register_copy
//SEG296 [115] phi (byte*) render_next::next_piece_gfx#2 = (byte*) render_next::next_piece_gfx#3 [phi:render_next::@3->render_next::@4#2] -- register_copy
//SEG297 [115] phi from render_next::@6 to render_next::@4 [phi:render_next::@6->render_next::@4]
//SEG298 [115] phi (byte) render_next::c#2 = (byte) render_next::c#1 [phi:render_next::@6->render_next::@4#0] -- register_copy
//SEG299 [115] phi (byte*) render_next::screen_next_area#5 = (byte*) render_next::screen_next_area#3 [phi:render_next::@6->render_next::@4#1] -- register_copy
//SEG300 [115] phi (byte*) render_next::next_piece_gfx#2 = (byte*) render_next::next_piece_gfx#1 [phi:render_next::@6->render_next::@4#2] -- register_copy
//SEG301 render_next::@4
b4:
//SEG302 [116] (byte) render_next::cell#0 ← *((byte*) render_next::next_piece_gfx#2) -- vbuaa=_deref_pbuz1
ldy #0
lda (next_piece_gfx),y
//SEG303 [117] (byte*) render_next::next_piece_gfx#1 ← ++ (byte*) render_next::next_piece_gfx#2 -- pbuz1=_inc_pbuz1
inc next_piece_gfx
bne !+
inc next_piece_gfx+1
!:
//SEG304 [118] if((byte) render_next::cell#0!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto render_next::@5 -- vbuaa_neq_0_then_la1
cmp #0
bne b5
//SEG305 render_next::@7
//SEG306 [119] *((byte*) render_next::screen_next_area#5) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- _deref_pbuz1=vbuc1
lda #0
tay
sta (screen_next_area),y
//SEG307 render_next::@6
b6:
//SEG308 [120] (byte*) render_next::screen_next_area#3 ← ++ (byte*) render_next::screen_next_area#5 -- pbuz1=_inc_pbuz1
inc screen_next_area
bne !+
inc screen_next_area+1
!:
//SEG309 [121] (byte) render_next::c#1 ← ++ (byte) render_next::c#2 -- vbuxx=_inc_vbuxx
inx
//SEG310 [122] if((byte) render_next::c#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto render_next::@4 -- vbuxx_neq_vbuc1_then_la1
cpx #4
bne b4
//SEG311 render_next::@8
//SEG312 [123] (byte*) render_next::screen_next_area#4 ← (byte*) render_next::screen_next_area#3 + (byte/signed byte/word/signed word/dword/signed dword) $24 -- pbuz1=pbuz1_plus_vbuc1
lda #$24
clc
adc screen_next_area
sta screen_next_area
bcc !+
inc screen_next_area+1
!:
//SEG313 [124] (byte) render_next::l#1 ← ++ (byte) render_next::l#7 -- vbuz1=_inc_vbuz1
inc l
//SEG314 [125] if((byte) render_next::l#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto render_next::@3 -- vbuz1_neq_vbuc1_then_la1
lda #4
cmp l
bne b3
//SEG315 render_next::@return
//SEG316 [126] return
rts
//SEG317 render_next::@5
b5:
//SEG318 [127] *((byte*) render_next::screen_next_area#5) ← (byte) render_next::next_piece_char#0 -- _deref_pbuz1=vbuz2
lda next_piece_char
ldy #0
sta (screen_next_area),y
jmp b6
}
//SEG319 render_moving
// Render the current moving piece at position (current_xpos, current_ypos)
// Ignores cases where parts of the tetromino is outside the playfield (sides/bottom) since the movement collision routine prevents this.
render_moving: {
.label ypos2 = $c
.label screen_line = 7
.label xpos = $f
.label i = $e
.label l = $d
//SEG320 [129] (byte) render_moving::ypos2#0 ← (byte) current_ypos#13 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuz1=vbuxx_rol_1
txa
asl
sta ypos2
//SEG321 [130] phi from render_moving to render_moving::@1 [phi:render_moving->render_moving::@1]
//SEG322 [130] phi (byte) render_moving::l#4 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render_moving->render_moving::@1#0] -- vbuz1=vbuc1
lda #0
sta l
//SEG323 [130] phi (byte) render_moving::i#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render_moving->render_moving::@1#1] -- vbuz1=vbuc1
sta i
//SEG324 [130] phi (byte) render_moving::ypos2#2 = (byte) render_moving::ypos2#0 [phi:render_moving->render_moving::@1#2] -- register_copy
//SEG325 [130] phi from render_moving::@3 to render_moving::@1 [phi:render_moving::@3->render_moving::@1]
//SEG326 [130] phi (byte) render_moving::l#4 = (byte) render_moving::l#1 [phi:render_moving::@3->render_moving::@1#0] -- register_copy
//SEG327 [130] phi (byte) render_moving::i#3 = (byte) render_moving::i#8 [phi:render_moving::@3->render_moving::@1#1] -- register_copy
//SEG328 [130] phi (byte) render_moving::ypos2#2 = (byte) render_moving::ypos2#1 [phi:render_moving::@3->render_moving::@1#2] -- register_copy
//SEG329 render_moving::@1
b1:
//SEG330 [131] if((byte) render_moving::ypos2#2>=(byte/signed byte/word/signed word/dword/signed dword) 2+(byte/signed byte/word/signed word/dword/signed dword) 1) goto render_moving::@2 -- vbuz1_ge_vbuc1_then_la1
lda ypos2
cmp #2+1
bcs b2
//SEG331 render_moving::@7
//SEG332 [132] (byte) render_moving::i#1 ← (byte) render_moving::i#3 + (byte/signed byte/word/signed word/dword/signed dword) 4 -- vbuz1=vbuz1_plus_vbuc1
lax i
axs #-[4]
stx i
//SEG333 [133] phi from render_moving::@5 render_moving::@7 to render_moving::@3 [phi:render_moving::@5/render_moving::@7->render_moving::@3]
//SEG334 [133] phi (byte) render_moving::i#8 = (byte) render_moving::i#2 [phi:render_moving::@5/render_moving::@7->render_moving::@3#0] -- register_copy
//SEG335 render_moving::@3
b3:
//SEG336 [134] (byte) render_moving::ypos2#1 ← (byte) render_moving::ypos2#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 -- vbuz1=vbuz1_plus_2
lda ypos2
clc
adc #2
sta ypos2
//SEG337 [135] (byte) render_moving::l#1 ← ++ (byte) render_moving::l#4 -- vbuz1=_inc_vbuz1
inc l
//SEG338 [136] if((byte) render_moving::l#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto render_moving::@1 -- vbuz1_neq_vbuc1_then_la1
lda #4
cmp l
bne b1
//SEG339 render_moving::@return
//SEG340 [137] return
rts
//SEG341 render_moving::@2
b2:
//SEG342 [138] (byte~) render_moving::$2 ← (byte) render_screen_render#33 + (byte) render_moving::ypos2#2 -- vbuaa=vbuz1_plus_vbuz2
lda render_screen_render_33
clc
adc ypos2
//SEG343 [139] (byte*) render_moving::screen_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_moving::$2) -- pbuz1=pptc1_derefidx_vbuaa
tay
lda screen_lines_1,y
sta screen_line
lda screen_lines_1+1,y
sta screen_line+1
//SEG344 [140] (byte) render_moving::xpos#0 ← (byte) current_xpos#59 -- vbuz1=vbuz2
lda current_xpos_59
sta xpos
//SEG345 [141] phi from render_moving::@2 to render_moving::@4 [phi:render_moving::@2->render_moving::@4]
//SEG346 [141] phi (byte) render_moving::c#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render_moving::@2->render_moving::@4#0] -- vbuxx=vbuc1
ldx #0
//SEG347 [141] phi (byte) render_moving::xpos#2 = (byte) render_moving::xpos#0 [phi:render_moving::@2->render_moving::@4#1] -- register_copy
//SEG348 [141] phi (byte) render_moving::i#4 = (byte) render_moving::i#3 [phi:render_moving::@2->render_moving::@4#2] -- register_copy
//SEG349 [141] phi from render_moving::@5 to render_moving::@4 [phi:render_moving::@5->render_moving::@4]
//SEG350 [141] phi (byte) render_moving::c#2 = (byte) render_moving::c#1 [phi:render_moving::@5->render_moving::@4#0] -- register_copy
//SEG351 [141] phi (byte) render_moving::xpos#2 = (byte) render_moving::xpos#1 [phi:render_moving::@5->render_moving::@4#1] -- register_copy
//SEG352 [141] phi (byte) render_moving::i#4 = (byte) render_moving::i#2 [phi:render_moving::@5->render_moving::@4#2] -- register_copy
//SEG353 render_moving::@4
b4:
//SEG354 [142] (byte) render_moving::current_cell#0 ← *((byte*) current_piece_gfx#64 + (byte) render_moving::i#4) -- vbuaa=pbuz1_derefidx_vbuz2
ldy i
lda (current_piece_gfx_64),y
//SEG355 [143] (byte) render_moving::i#2 ← ++ (byte) render_moving::i#4 -- vbuz1=_inc_vbuz1
inc i
//SEG356 [144] if((byte) render_moving::current_cell#0==(byte/signed byte/word/signed word/dword/signed dword) 0) goto render_moving::@5 -- vbuaa_eq_0_then_la1
cmp #0
beq b5
//SEG357 render_moving::@6
//SEG358 [145] *((byte*) render_moving::screen_line#0 + (byte) render_moving::xpos#2) ← (byte) current_piece_char#68 -- pbuz1_derefidx_vbuz2=vbuz3
lda current_piece_char_68
ldy xpos
sta (screen_line),y
//SEG359 render_moving::@5
b5:
//SEG360 [146] (byte) render_moving::xpos#1 ← ++ (byte) render_moving::xpos#2 -- vbuz1=_inc_vbuz1
inc xpos
//SEG361 [147] (byte) render_moving::c#1 ← ++ (byte) render_moving::c#2 -- vbuxx=_inc_vbuxx
inx
//SEG362 [148] if((byte) render_moving::c#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto render_moving::@4 -- vbuxx_neq_vbuc1_then_la1
cpx #4
bne b4
jmp b3
}
//SEG363 render_playfield
// Render the static playfield on the screen (all pieces already locked into place)
render_playfield: {
.label screen_line = 5
.label i = $a
.label c = $b
.label l = 9
//SEG364 [150] phi from render_playfield to render_playfield::@1 [phi:render_playfield->render_playfield::@1]
//SEG365 [150] phi (byte) render_playfield::i#3 = (const byte) PLAYFIELD_COLS#0*(byte/signed byte/word/signed word/dword/signed dword) 2 [phi:render_playfield->render_playfield::@1#0] -- vbuz1=vbuc1
lda #PLAYFIELD_COLS*2
sta i
//SEG366 [150] phi (byte) render_playfield::l#2 = (byte/signed byte/word/signed word/dword/signed dword) 2 [phi:render_playfield->render_playfield::@1#1] -- vbuz1=vbuc1
lda #2
sta l
//SEG367 [150] phi from render_playfield::@3 to render_playfield::@1 [phi:render_playfield::@3->render_playfield::@1]
//SEG368 [150] phi (byte) render_playfield::i#3 = (byte) render_playfield::i#1 [phi:render_playfield::@3->render_playfield::@1#0] -- register_copy
//SEG369 [150] phi (byte) render_playfield::l#2 = (byte) render_playfield::l#1 [phi:render_playfield::@3->render_playfield::@1#1] -- register_copy
//SEG370 render_playfield::@1
b1:
//SEG371 [151] (byte~) render_playfield::$2 ← (byte) render_playfield::l#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuaa=vbuz1_rol_1
lda l
asl
//SEG372 [152] (byte~) render_playfield::$3 ← (byte) render_screen_render#22 + (byte~) render_playfield::$2 -- vbuaa=vbuxx_plus_vbuaa
stx $ff
clc
adc $ff
//SEG373 [153] (byte*) render_playfield::screen_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_playfield::$3) -- pbuz1=pptc1_derefidx_vbuaa
tay
lda screen_lines_1,y
sta screen_line
lda screen_lines_1+1,y
sta screen_line+1
//SEG374 [154] phi from render_playfield::@1 to render_playfield::@2 [phi:render_playfield::@1->render_playfield::@2]
//SEG375 [154] phi (byte) render_playfield::c#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render_playfield::@1->render_playfield::@2#0] -- vbuz1=vbuc1
lda #0
sta c
//SEG376 [154] phi (byte*) render_playfield::screen_line#2 = (byte*) render_playfield::screen_line#0 [phi:render_playfield::@1->render_playfield::@2#1] -- register_copy
//SEG377 [154] phi (byte) render_playfield::i#2 = (byte) render_playfield::i#3 [phi:render_playfield::@1->render_playfield::@2#2] -- register_copy
//SEG378 [154] phi from render_playfield::@2 to render_playfield::@2 [phi:render_playfield::@2->render_playfield::@2]
//SEG379 [154] phi (byte) render_playfield::c#2 = (byte) render_playfield::c#1 [phi:render_playfield::@2->render_playfield::@2#0] -- register_copy
//SEG380 [154] phi (byte*) render_playfield::screen_line#2 = (byte*) render_playfield::screen_line#1 [phi:render_playfield::@2->render_playfield::@2#1] -- register_copy
//SEG381 [154] phi (byte) render_playfield::i#2 = (byte) render_playfield::i#1 [phi:render_playfield::@2->render_playfield::@2#2] -- register_copy
//SEG382 render_playfield::@2
b2:
//SEG383 [155] *((byte*) render_playfield::screen_line#2) ← *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) render_playfield::i#2) -- _deref_pbuz1=pbuc1_derefidx_vbuz2
ldy i
lda playfield,y
ldy #0
sta (screen_line),y
//SEG384 [156] (byte*) render_playfield::screen_line#1 ← ++ (byte*) render_playfield::screen_line#2 -- pbuz1=_inc_pbuz1
inc screen_line
bne !+
inc screen_line+1
!:
//SEG385 [157] (byte) render_playfield::i#1 ← ++ (byte) render_playfield::i#2 -- vbuz1=_inc_vbuz1
inc i
//SEG386 [158] (byte) render_playfield::c#1 ← ++ (byte) render_playfield::c#2 -- vbuz1=_inc_vbuz1
inc c
//SEG387 [159] if((byte) render_playfield::c#1!=(const byte) PLAYFIELD_COLS#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto render_playfield::@2 -- vbuz1_neq_vbuc1_then_la1
lda #PLAYFIELD_COLS-1+1
cmp c
bne b2
//SEG388 render_playfield::@3
//SEG389 [160] (byte) render_playfield::l#1 ← ++ (byte) render_playfield::l#2 -- vbuz1=_inc_vbuz1
inc l
//SEG390 [161] if((byte) render_playfield::l#1!=(const byte) PLAYFIELD_LINES#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto render_playfield::@1 -- vbuz1_neq_vbuc1_then_la1
lda #PLAYFIELD_LINES-1+1
cmp l
bne b1
//SEG391 render_playfield::@return
//SEG392 [162] return
rts
}
//SEG393 play_movement
// Perform any movement of the current piece
// key_event is the next keyboard_event() og $ff if no keyboard event is pending
// Returns a byte signaling whether rendering is needed. (0 no render, >0 render needed)
// play_movement(byte zeropage($2a) key_event)
play_movement: {
.label render = 9
.label return = 9
.label key_event = $2a
//SEG394 [163] (byte) play_move_down::key_event#0 ← (byte) play_movement::key_event#0 -- vbuaa=vbuz1
lda key_event
//SEG395 [164] call play_move_down
jsr play_move_down
//SEG396 [165] (byte) play_move_down::return#0 ← (byte) play_move_down::return#3 -- vbuaa=vbuxx
txa
//SEG397 play_movement::@2
//SEG398 [166] (byte) play_movement::render#1 ← (byte) play_move_down::return#0 -- vbuz1=vbuaa
sta render
//SEG399 [167] if((byte) game_over#15==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_movement::@1 -- vbuz1_eq_0_then_la1
lda game_over
cmp #0
beq b1
//SEG400 [168] phi from play_movement::@2 play_movement::@4 to play_movement::@return [phi:play_movement::@2/play_movement::@4->play_movement::@return]
//SEG401 [168] phi (byte) current_xpos#19 = (byte) current_xpos#22 [phi:play_movement::@2/play_movement::@4->play_movement::@return#0] -- register_copy
//SEG402 [168] phi (byte*) current_piece_gfx#18 = (byte*) current_piece_gfx#20 [phi:play_movement::@2/play_movement::@4->play_movement::@return#1] -- register_copy
//SEG403 [168] phi (byte) current_orientation#17 = (byte) current_orientation#20 [phi:play_movement::@2/play_movement::@4->play_movement::@return#2] -- register_copy
//SEG404 [168] phi (byte) play_movement::return#2 = (byte) play_movement::render#1 [phi:play_movement::@2/play_movement::@4->play_movement::@return#3] -- register_copy
//SEG405 play_movement::@return
//SEG406 [169] return
rts
//SEG407 play_movement::@1
b1:
//SEG408 [170] (byte) play_move_leftright::key_event#0 ← (byte) play_movement::key_event#0 -- vbuaa=vbuz1
lda key_event
//SEG409 [171] call play_move_leftright
jsr play_move_leftright
//SEG410 [172] (byte) play_move_leftright::return#0 ← (byte) play_move_leftright::return#2
//SEG411 play_movement::@3
//SEG412 [173] (byte~) play_movement::$3 ← (byte) play_move_leftright::return#0
//SEG413 [174] (byte) play_movement::render#2 ← (byte) play_movement::render#1 + (byte~) play_movement::$3 -- vbuz1=vbuz1_plus_vbuaa
clc
adc render
sta render
//SEG414 [175] (byte) play_move_rotate::key_event#0 ← (byte) play_movement::key_event#0 -- vbuaa=vbuz1
lda key_event
//SEG415 [176] call play_move_rotate
jsr play_move_rotate
//SEG416 [177] (byte) play_move_rotate::return#0 ← (byte) play_move_rotate::return#2
//SEG417 play_movement::@4
//SEG418 [178] (byte~) play_movement::$4 ← (byte) play_move_rotate::return#0
//SEG419 [179] (byte) play_movement::return#0 ← (byte) play_movement::render#2 + (byte~) play_movement::$4 -- vbuz1=vbuz1_plus_vbuaa
clc
adc return
sta return
rts
}
//SEG420 play_move_rotate
// Rotate the current piece based on key-presses
// Return non-zero if a render is needed
// play_move_rotate(byte register(A) key_event)
play_move_rotate: {
.label orientation = $a
//SEG421 [180] if((byte) play_move_rotate::key_event#0==(const byte) KEY_Z#0) goto play_move_rotate::@1 -- vbuaa_eq_vbuc1_then_la1
cmp #KEY_Z
beq b1
//SEG422 play_move_rotate::@4
//SEG423 [181] if((byte) play_move_rotate::key_event#0==(const byte) KEY_X#0) goto play_move_rotate::@2 -- vbuaa_eq_vbuc1_then_la1
cmp #KEY_X
beq b2
//SEG424 [182] phi from play_move_rotate::@4 play_move_rotate::@6 to play_move_rotate::@return [phi:play_move_rotate::@4/play_move_rotate::@6->play_move_rotate::@return]
b4:
//SEG425 [182] phi (byte*) current_piece_gfx#21 = (byte*) current_piece_gfx#20 [phi:play_move_rotate::@4/play_move_rotate::@6->play_move_rotate::@return#0] -- register_copy
//SEG426 [182] phi (byte) current_orientation#25 = (byte) current_orientation#20 [phi:play_move_rotate::@4/play_move_rotate::@6->play_move_rotate::@return#1] -- register_copy
//SEG427 [182] phi (byte) play_move_rotate::return#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_move_rotate::@4/play_move_rotate::@6->play_move_rotate::@return#2] -- vbuaa=vbuc1
lda #0
//SEG428 play_move_rotate::@return
//SEG429 [183] return
rts
//SEG430 play_move_rotate::@2
b2:
//SEG431 [184] (byte/signed word/word/dword/signed dword~) play_move_rotate::$5 ← (byte) current_orientation#20 + (byte/signed byte/word/signed word/dword/signed dword) $10 -- vbuxx=vbuz1_plus_vbuc1
lax current_orientation
axs #-[$10]
//SEG432 [185] (byte) play_move_rotate::orientation#2 ← (byte/signed word/word/dword/signed dword~) play_move_rotate::$5 & (byte/signed byte/word/signed word/dword/signed dword) $3f -- vbuz1=vbuxx_band_vbuc1
lda #$3f
sax orientation
//SEG433 [186] phi from play_move_rotate::@1 play_move_rotate::@2 to play_move_rotate::@3 [phi:play_move_rotate::@1/play_move_rotate::@2->play_move_rotate::@3]
//SEG434 [186] phi (byte) play_move_rotate::orientation#3 = (byte) play_move_rotate::orientation#1 [phi:play_move_rotate::@1/play_move_rotate::@2->play_move_rotate::@3#0] -- register_copy
//SEG435 play_move_rotate::@3
b3:
//SEG436 [187] (byte) play_collision::xpos#3 ← (byte) current_xpos#26 -- vbuz1=vbuz2
lda current_xpos
sta play_collision.xpos
//SEG437 [188] (byte) play_collision::ypos#3 ← (byte) current_ypos#19 -- vbuz1=vbuz2
lda current_ypos
sta play_collision.ypos
//SEG438 [189] (byte) play_collision::orientation#3 ← (byte) play_move_rotate::orientation#3 -- vbuxx=vbuz1
ldx orientation
//SEG439 [190] (byte*~) current_piece#103 ← (byte*) current_piece#15 -- pbuz1=pbuz2
lda current_piece
sta current_piece_103
lda current_piece+1
sta current_piece_103+1
//SEG440 [191] call play_collision
//SEG441 [199] phi from play_move_rotate::@3 to play_collision [phi:play_move_rotate::@3->play_collision]
//SEG442 [199] phi (byte) play_collision::xpos#6 = (byte) play_collision::xpos#3 [phi:play_move_rotate::@3->play_collision#0] -- register_copy
//SEG443 [199] phi (byte) play_collision::ypos#5 = (byte) play_collision::ypos#3 [phi:play_move_rotate::@3->play_collision#1] -- register_copy
//SEG444 [199] phi (byte) play_collision::orientation#5 = (byte) play_collision::orientation#3 [phi:play_move_rotate::@3->play_collision#2] -- register_copy
//SEG445 [199] phi (byte*) current_piece#17 = (byte*~) current_piece#103 [phi:play_move_rotate::@3->play_collision#3] -- register_copy
jsr play_collision
//SEG446 [192] (byte) play_collision::return#14 ← (byte) play_collision::return#15
//SEG447 play_move_rotate::@6
//SEG448 [193] (byte~) play_move_rotate::$2 ← (byte) play_collision::return#14
//SEG449 [194] if((byte~) play_move_rotate::$2!=(const byte) COLLISION_NONE#0) goto play_move_rotate::@return -- vbuaa_neq_vbuc1_then_la1
cmp #COLLISION_NONE
bne b4
//SEG450 play_move_rotate::@5
//SEG451 [195] (byte) current_orientation#7 ← (byte) play_move_rotate::orientation#3 -- vbuz1=vbuz2
lda orientation
sta current_orientation
//SEG452 [196] (byte*) current_piece_gfx#7 ← (byte*) current_piece#15 + (byte) current_orientation#7 -- pbuz1=pbuz2_plus_vbuz3
clc
adc current_piece
sta current_piece_gfx
lda #0
adc current_piece+1
sta current_piece_gfx+1
//SEG453 [182] phi from play_move_rotate::@5 to play_move_rotate::@return [phi:play_move_rotate::@5->play_move_rotate::@return]
//SEG454 [182] phi (byte*) current_piece_gfx#21 = (byte*) current_piece_gfx#7 [phi:play_move_rotate::@5->play_move_rotate::@return#0] -- register_copy
//SEG455 [182] phi (byte) current_orientation#25 = (byte) current_orientation#7 [phi:play_move_rotate::@5->play_move_rotate::@return#1] -- register_copy
//SEG456 [182] phi (byte) play_move_rotate::return#2 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:play_move_rotate::@5->play_move_rotate::@return#2] -- vbuaa=vbuc1
lda #1
rts
//SEG457 play_move_rotate::@1
b1:
//SEG458 [197] (byte/signed word/word/dword/signed dword~) play_move_rotate::$7 ← (byte) current_orientation#20 - (byte/signed byte/word/signed word/dword/signed dword) $10 -- vbuxx=vbuz1_minus_vbuc1
lax current_orientation
axs #$10
//SEG459 [198] (byte) play_move_rotate::orientation#1 ← (byte/signed word/word/dword/signed dword~) play_move_rotate::$7 & (byte/signed byte/word/signed word/dword/signed dword) $3f -- vbuz1=vbuxx_band_vbuc1
lda #$3f
sax orientation
jmp b3
}
//SEG460 play_collision
// Test if there is a collision between the current piece moved to (x, y) and anything on the playfield or the playfield boundaries
// Returns information about the type of the collision detected
// play_collision(byte zeropage($c) xpos, byte zeropage($b) ypos, byte register(X) orientation)
play_collision: {
.label xpos = $c
.label ypos = $b
.label piece_gfx = 5
.label ypos2 = $b
.label playfield_line = 7
.label i = $2b
.label col = $f
.label l = $d
.label i_2 = $e
.label i_3 = $e
.label i_11 = $e
.label i_13 = $e
//SEG461 [200] (byte*) play_collision::piece_gfx#0 ← (byte*) current_piece#17 + (byte) play_collision::orientation#5 -- pbuz1=pbuz1_plus_vbuxx
txa
clc
adc piece_gfx
sta piece_gfx
bcc !+
inc piece_gfx+1
!:
//SEG462 [201] (byte) play_collision::ypos2#0 ← (byte) play_collision::ypos#5 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuz1=vbuz1_rol_1
asl ypos2
//SEG463 [202] phi from play_collision to play_collision::@1 [phi:play_collision->play_collision::@1]
//SEG464 [202] phi (byte) play_collision::l#6 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_collision->play_collision::@1#0] -- vbuz1=vbuc1
lda #0
sta l
//SEG465 [202] phi (byte) play_collision::i#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_collision->play_collision::@1#1] -- vbuz1=vbuc1
sta i_3
//SEG466 [202] phi (byte) play_collision::ypos2#2 = (byte) play_collision::ypos2#0 [phi:play_collision->play_collision::@1#2] -- register_copy
//SEG467 play_collision::@1
b1:
//SEG468 [203] (byte*) play_collision::playfield_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte) play_collision::ypos2#2) -- pbuz1=pptc1_derefidx_vbuz2
ldy ypos2
lda playfield_lines,y
sta playfield_line
lda playfield_lines+1,y
sta playfield_line+1
//SEG469 [204] (byte~) play_collision::col#9 ← (byte) play_collision::xpos#6 -- vbuz1=vbuz2
lda xpos
sta col
//SEG470 [205] phi from play_collision::@1 to play_collision::@2 [phi:play_collision::@1->play_collision::@2]
//SEG471 [205] phi (byte) play_collision::c#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_collision::@1->play_collision::@2#0] -- vbuxx=vbuc1
ldx #0
//SEG472 [205] phi (byte) play_collision::col#2 = (byte~) play_collision::col#9 [phi:play_collision::@1->play_collision::@2#1] -- register_copy
//SEG473 [205] phi (byte) play_collision::i#2 = (byte) play_collision::i#3 [phi:play_collision::@1->play_collision::@2#2] -- register_copy
//SEG474 play_collision::@2
b2:
//SEG475 [206] (byte) play_collision::i#1 ← ++ (byte) play_collision::i#2 -- vbuz1=_inc_vbuz2
ldy i_2
iny
sty i
//SEG476 [207] if(*((byte*) play_collision::piece_gfx#0 + (byte) play_collision::i#2)==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_collision::@3 -- pbuz1_derefidx_vbuz2_eq_0_then_la1
ldy i_2
lda (piece_gfx),y
cmp #0
beq b3
//SEG477 play_collision::@7
//SEG478 [208] if((byte) play_collision::ypos2#2<(byte/signed byte/word/signed word/dword/signed dword) 2*(const byte) PLAYFIELD_LINES#0) goto play_collision::@4 -- vbuz1_lt_vbuc1_then_la1
lda ypos2
cmp #2*PLAYFIELD_LINES
bcc b4
//SEG479 [209] phi from play_collision::@7 to play_collision::@return [phi:play_collision::@7->play_collision::@return]
//SEG480 [209] phi (byte) play_collision::return#15 = (const byte) COLLISION_BOTTOM#0 [phi:play_collision::@7->play_collision::@return#0] -- vbuaa=vbuc1
lda #COLLISION_BOTTOM
//SEG481 play_collision::@return
//SEG482 [210] return
rts
//SEG483 play_collision::@4
b4:
//SEG484 [211] (byte~) play_collision::$7 ← (byte) play_collision::col#2 & (byte/word/signed word/dword/signed dword) $80 -- vbuaa=vbuz1_band_vbuc1
lda #$80
and col
//SEG485 [212] if((byte~) play_collision::$7==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_collision::@5 -- vbuaa_eq_0_then_la1
cmp #0
beq b5
//SEG486 [209] phi from play_collision::@4 to play_collision::@return [phi:play_collision::@4->play_collision::@return]
//SEG487 [209] phi (byte) play_collision::return#15 = (const byte) COLLISION_LEFT#0 [phi:play_collision::@4->play_collision::@return#0] -- vbuaa=vbuc1
lda #COLLISION_LEFT
rts
//SEG488 play_collision::@5
b5:
//SEG489 [213] if((byte) play_collision::col#2<(const byte) PLAYFIELD_COLS#0) goto play_collision::@6 -- vbuz1_lt_vbuc1_then_la1
lda col
cmp #PLAYFIELD_COLS
bcc b6
//SEG490 [209] phi from play_collision::@5 to play_collision::@return [phi:play_collision::@5->play_collision::@return]
//SEG491 [209] phi (byte) play_collision::return#15 = (const byte) COLLISION_RIGHT#0 [phi:play_collision::@5->play_collision::@return#0] -- vbuaa=vbuc1
lda #COLLISION_RIGHT
rts
//SEG492 play_collision::@6
b6:
//SEG493 [214] if(*((byte*) play_collision::playfield_line#0 + (byte) play_collision::col#2)==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_collision::@3 -- pbuz1_derefidx_vbuz2_eq_0_then_la1
ldy col
lda (playfield_line),y
cmp #0
beq b3
//SEG494 [209] phi from play_collision::@6 to play_collision::@return [phi:play_collision::@6->play_collision::@return]
//SEG495 [209] phi (byte) play_collision::return#15 = (const byte) COLLISION_PLAYFIELD#0 [phi:play_collision::@6->play_collision::@return#0] -- vbuaa=vbuc1
lda #COLLISION_PLAYFIELD
rts
//SEG496 play_collision::@3
b3:
//SEG497 [215] (byte) play_collision::col#1 ← ++ (byte) play_collision::col#2 -- vbuz1=_inc_vbuz1
inc col
//SEG498 [216] (byte) play_collision::c#1 ← ++ (byte) play_collision::c#2 -- vbuxx=_inc_vbuxx
inx
//SEG499 [217] if((byte) play_collision::c#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto play_collision::@10 -- vbuxx_neq_vbuc1_then_la1
cpx #4
bne b10
//SEG500 play_collision::@8
//SEG501 [218] (byte) play_collision::ypos2#1 ← (byte) play_collision::ypos2#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 -- vbuz1=vbuz1_plus_2
lda ypos2
clc
adc #2
sta ypos2
//SEG502 [219] (byte) play_collision::l#1 ← ++ (byte) play_collision::l#6 -- vbuz1=_inc_vbuz1
inc l
//SEG503 [220] if((byte) play_collision::l#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto play_collision::@9 -- vbuz1_neq_vbuc1_then_la1
lda #4
cmp l
bne b9
//SEG504 [209] phi from play_collision::@8 to play_collision::@return [phi:play_collision::@8->play_collision::@return]
//SEG505 [209] phi (byte) play_collision::return#15 = (const byte) COLLISION_NONE#0 [phi:play_collision::@8->play_collision::@return#0] -- vbuaa=vbuc1
lda #COLLISION_NONE
rts
//SEG506 play_collision::@9
b9:
//SEG507 [221] (byte~) play_collision::i#11 ← (byte) play_collision::i#1 -- vbuz1=vbuz2
lda i
sta i_11
//SEG508 [202] phi from play_collision::@9 to play_collision::@1 [phi:play_collision::@9->play_collision::@1]
//SEG509 [202] phi (byte) play_collision::l#6 = (byte) play_collision::l#1 [phi:play_collision::@9->play_collision::@1#0] -- register_copy
//SEG510 [202] phi (byte) play_collision::i#3 = (byte~) play_collision::i#11 [phi:play_collision::@9->play_collision::@1#1] -- register_copy
//SEG511 [202] phi (byte) play_collision::ypos2#2 = (byte) play_collision::ypos2#1 [phi:play_collision::@9->play_collision::@1#2] -- register_copy
jmp b1
//SEG512 play_collision::@10
b10:
//SEG513 [222] (byte~) play_collision::i#13 ← (byte) play_collision::i#1 -- vbuz1=vbuz2
lda i
sta i_13
//SEG514 [205] phi from play_collision::@10 to play_collision::@2 [phi:play_collision::@10->play_collision::@2]
//SEG515 [205] phi (byte) play_collision::c#2 = (byte) play_collision::c#1 [phi:play_collision::@10->play_collision::@2#0] -- register_copy
//SEG516 [205] phi (byte) play_collision::col#2 = (byte) play_collision::col#1 [phi:play_collision::@10->play_collision::@2#1] -- register_copy
//SEG517 [205] phi (byte) play_collision::i#2 = (byte~) play_collision::i#13 [phi:play_collision::@10->play_collision::@2#2] -- register_copy
jmp b2
}
//SEG518 play_move_leftright
// Move left/right or rotate the current piece
// Return non-zero if a render is needed
// play_move_leftright(byte register(A) key_event)
play_move_leftright: {
//SEG519 [223] if((byte) play_move_leftright::key_event#0==(const byte) KEY_COMMA#0) goto play_move_leftright::@1 -- vbuaa_eq_vbuc1_then_la1
// Handle keyboard events
cmp #KEY_COMMA
beq b1
//SEG520 play_move_leftright::@2
//SEG521 [224] if((byte) play_move_leftright::key_event#0!=(const byte) KEY_DOT#0) goto play_move_leftright::@return -- vbuaa_neq_vbuc1_then_la1
cmp #KEY_DOT
bne b3
//SEG522 play_move_leftright::@3
//SEG523 [225] (byte) play_collision::xpos#2 ← (byte) current_xpos#22 + (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuz1=vbuz2_plus_1
ldy current_xpos
iny
sty play_collision.xpos
//SEG524 [226] (byte) play_collision::ypos#2 ← (byte) current_ypos#19 -- vbuz1=vbuz2
lda current_ypos
sta play_collision.ypos
//SEG525 [227] (byte) play_collision::orientation#2 ← (byte) current_orientation#20 -- vbuxx=vbuz1
ldx current_orientation
//SEG526 [228] (byte*~) current_piece#102 ← (byte*) current_piece#15 -- pbuz1=pbuz2
lda current_piece
sta current_piece_102
lda current_piece+1
sta current_piece_102+1
//SEG527 [229] call play_collision
//SEG528 [199] phi from play_move_leftright::@3 to play_collision [phi:play_move_leftright::@3->play_collision]
//SEG529 [199] phi (byte) play_collision::xpos#6 = (byte) play_collision::xpos#2 [phi:play_move_leftright::@3->play_collision#0] -- register_copy
//SEG530 [199] phi (byte) play_collision::ypos#5 = (byte) play_collision::ypos#2 [phi:play_move_leftright::@3->play_collision#1] -- register_copy
//SEG531 [199] phi (byte) play_collision::orientation#5 = (byte) play_collision::orientation#2 [phi:play_move_leftright::@3->play_collision#2] -- register_copy
//SEG532 [199] phi (byte*) current_piece#17 = (byte*~) current_piece#102 [phi:play_move_leftright::@3->play_collision#3] -- register_copy
jsr play_collision
//SEG533 [230] (byte) play_collision::return#13 ← (byte) play_collision::return#15
//SEG534 play_move_leftright::@7
//SEG535 [231] (byte~) play_move_leftright::$4 ← (byte) play_collision::return#13
//SEG536 [232] if((byte~) play_move_leftright::$4!=(const byte) COLLISION_NONE#0) goto play_move_leftright::@return -- vbuaa_neq_vbuc1_then_la1
cmp #COLLISION_NONE
bne b3
//SEG537 play_move_leftright::@4
//SEG538 [233] (byte) current_xpos#6 ← ++ (byte) current_xpos#22 -- vbuz1=_inc_vbuz1
inc current_xpos
//SEG539 [234] phi from play_move_leftright::@4 play_move_leftright::@5 to play_move_leftright::@return [phi:play_move_leftright::@4/play_move_leftright::@5->play_move_leftright::@return]
b2:
//SEG540 [234] phi (byte) current_xpos#26 = (byte) current_xpos#6 [phi:play_move_leftright::@4/play_move_leftright::@5->play_move_leftright::@return#0] -- register_copy
//SEG541 [234] phi (byte) play_move_leftright::return#2 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:play_move_leftright::@4/play_move_leftright::@5->play_move_leftright::@return#1] -- vbuaa=vbuc1
lda #1
rts
//SEG542 [234] phi from play_move_leftright::@2 play_move_leftright::@6 play_move_leftright::@7 to play_move_leftright::@return [phi:play_move_leftright::@2/play_move_leftright::@6/play_move_leftright::@7->play_move_leftright::@return]
b3:
//SEG543 [234] phi (byte) current_xpos#26 = (byte) current_xpos#22 [phi:play_move_leftright::@2/play_move_leftright::@6/play_move_leftright::@7->play_move_leftright::@return#0] -- register_copy
//SEG544 [234] phi (byte) play_move_leftright::return#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_move_leftright::@2/play_move_leftright::@6/play_move_leftright::@7->play_move_leftright::@return#1] -- vbuaa=vbuc1
lda #0
//SEG545 play_move_leftright::@return
//SEG546 [235] return
rts
//SEG547 play_move_leftright::@1
b1:
//SEG548 [236] (byte) play_collision::xpos#1 ← (byte) current_xpos#22 - (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuz1=vbuz2_minus_1
ldx current_xpos
dex
stx play_collision.xpos
//SEG549 [237] (byte) play_collision::ypos#1 ← (byte) current_ypos#19 -- vbuz1=vbuz2
lda current_ypos
sta play_collision.ypos
//SEG550 [238] (byte) play_collision::orientation#1 ← (byte) current_orientation#20 -- vbuxx=vbuz1
ldx current_orientation
//SEG551 [239] (byte*~) current_piece#101 ← (byte*) current_piece#15 -- pbuz1=pbuz2
lda current_piece
sta current_piece_101
lda current_piece+1
sta current_piece_101+1
//SEG552 [240] call play_collision
//SEG553 [199] phi from play_move_leftright::@1 to play_collision [phi:play_move_leftright::@1->play_collision]
//SEG554 [199] phi (byte) play_collision::xpos#6 = (byte) play_collision::xpos#1 [phi:play_move_leftright::@1->play_collision#0] -- register_copy
//SEG555 [199] phi (byte) play_collision::ypos#5 = (byte) play_collision::ypos#1 [phi:play_move_leftright::@1->play_collision#1] -- register_copy
//SEG556 [199] phi (byte) play_collision::orientation#5 = (byte) play_collision::orientation#1 [phi:play_move_leftright::@1->play_collision#2] -- register_copy
//SEG557 [199] phi (byte*) current_piece#17 = (byte*~) current_piece#101 [phi:play_move_leftright::@1->play_collision#3] -- register_copy
jsr play_collision
//SEG558 [241] (byte) play_collision::return#1 ← (byte) play_collision::return#15
//SEG559 play_move_leftright::@6
//SEG560 [242] (byte~) play_move_leftright::$8 ← (byte) play_collision::return#1
//SEG561 [243] if((byte~) play_move_leftright::$8!=(const byte) COLLISION_NONE#0) goto play_move_leftright::@return -- vbuaa_neq_vbuc1_then_la1
cmp #COLLISION_NONE
bne b3
//SEG562 play_move_leftright::@5
//SEG563 [244] (byte) current_xpos#8 ← -- (byte) current_xpos#22 -- vbuz1=_dec_vbuz1
dec current_xpos
jmp b2
}
//SEG564 play_move_down
// Move down the current piece
// Return non-zero if a render is needed
// play_move_down(byte register(A) key_event)
play_move_down: {
//SEG565 [245] (byte) current_movedown_counter#12 ← ++ (byte) current_movedown_counter#16 -- vbuz1=_inc_vbuz1
inc current_movedown_counter
//SEG566 [246] if((byte) play_move_down::key_event#0!=(const byte) KEY_SPACE#0) goto play_move_down::@1 -- vbuaa_neq_vbuc1_then_la1
cmp #KEY_SPACE
bne b4
//SEG567 [247] phi from play_move_down to play_move_down::@4 [phi:play_move_down->play_move_down::@4]
//SEG568 play_move_down::@4
//SEG569 [248] phi from play_move_down::@4 to play_move_down::@1 [phi:play_move_down::@4->play_move_down::@1]
//SEG570 [248] phi (byte) play_move_down::movedown#10 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:play_move_down::@4->play_move_down::@1#0] -- vbuxx=vbuc1
ldx #1
jmp b1
//SEG571 [248] phi from play_move_down to play_move_down::@1 [phi:play_move_down->play_move_down::@1]
b4:
//SEG572 [248] phi (byte) play_move_down::movedown#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_move_down->play_move_down::@1#0] -- vbuxx=vbuc1
ldx #0
//SEG573 play_move_down::@1
b1:
//SEG574 [249] call keyboard_event_pressed
//SEG575 [377] phi from play_move_down::@1 to keyboard_event_pressed [phi:play_move_down::@1->keyboard_event_pressed]
//SEG576 [377] phi (byte) keyboard_event_pressed::keycode#5 = (const byte) KEY_SPACE#0 [phi:play_move_down::@1->keyboard_event_pressed#0] -- vbuz1=vbuc1
lda #KEY_SPACE
sta keyboard_event_pressed.keycode
jsr keyboard_event_pressed
//SEG577 [250] (byte) keyboard_event_pressed::return#12 ← (byte) keyboard_event_pressed::return#11
//SEG578 play_move_down::@12
//SEG579 [251] (byte~) play_move_down::$2 ← (byte) keyboard_event_pressed::return#12
//SEG580 [252] if((byte~) play_move_down::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_move_down::@2 -- vbuaa_eq_0_then_la1
cmp #0
beq b2
//SEG581 play_move_down::@5
//SEG582 [253] if((byte) current_movedown_counter#12<(const byte) current_movedown_fast#0) goto play_move_down::@2 -- vbuz1_lt_vbuc1_then_la1
lda current_movedown_counter
cmp #current_movedown_fast
bcc b2
//SEG583 play_move_down::@6
//SEG584 [254] (byte) play_move_down::movedown#2 ← ++ (byte) play_move_down::movedown#10 -- vbuxx=_inc_vbuxx
inx
//SEG585 [255] phi from play_move_down::@12 play_move_down::@5 play_move_down::@6 to play_move_down::@2 [phi:play_move_down::@12/play_move_down::@5/play_move_down::@6->play_move_down::@2]
//SEG586 [255] phi (byte) play_move_down::movedown#7 = (byte) play_move_down::movedown#10 [phi:play_move_down::@12/play_move_down::@5/play_move_down::@6->play_move_down::@2#0] -- register_copy
//SEG587 play_move_down::@2
b2:
//SEG588 [256] if((byte) current_movedown_counter#12<(byte) current_movedown_slow#14) goto play_move_down::@3 -- vbuz1_lt_vbuz2_then_la1
lda current_movedown_counter
cmp current_movedown_slow
bcc b3
//SEG589 play_move_down::@7
//SEG590 [257] (byte) play_move_down::movedown#3 ← ++ (byte) play_move_down::movedown#7 -- vbuxx=_inc_vbuxx
inx
//SEG591 [258] phi from play_move_down::@2 play_move_down::@7 to play_move_down::@3 [phi:play_move_down::@2/play_move_down::@7->play_move_down::@3]
//SEG592 [258] phi (byte) play_move_down::movedown#6 = (byte) play_move_down::movedown#7 [phi:play_move_down::@2/play_move_down::@7->play_move_down::@3#0] -- register_copy
//SEG593 play_move_down::@3
b3:
//SEG594 [259] if((byte) play_move_down::movedown#6==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_move_down::@return -- vbuxx_eq_0_then_la1
cpx #0
beq b5
//SEG595 play_move_down::@8
//SEG596 [260] (byte) play_collision::ypos#0 ← (byte) current_ypos#100 + (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuz1=vbuz2_plus_1
ldy current_ypos
iny
sty play_collision.ypos
//SEG597 [261] (byte) play_collision::xpos#0 ← (byte) current_xpos#124 -- vbuz1=vbuz2
lda current_xpos
sta play_collision.xpos
//SEG598 [262] (byte) play_collision::orientation#0 ← (byte) current_orientation#13 -- vbuxx=vbuz1
ldx current_orientation
//SEG599 [263] (byte*~) current_piece#100 ← (byte*) current_piece#10 -- pbuz1=pbuz2
lda current_piece
sta current_piece_100
lda current_piece+1
sta current_piece_100+1
//SEG600 [264] call play_collision
//SEG601 [199] phi from play_move_down::@8 to play_collision [phi:play_move_down::@8->play_collision]
//SEG602 [199] phi (byte) play_collision::xpos#6 = (byte) play_collision::xpos#0 [phi:play_move_down::@8->play_collision#0] -- register_copy
//SEG603 [199] phi (byte) play_collision::ypos#5 = (byte) play_collision::ypos#0 [phi:play_move_down::@8->play_collision#1] -- register_copy
//SEG604 [199] phi (byte) play_collision::orientation#5 = (byte) play_collision::orientation#0 [phi:play_move_down::@8->play_collision#2] -- register_copy
//SEG605 [199] phi (byte*) current_piece#17 = (byte*~) current_piece#100 [phi:play_move_down::@8->play_collision#3] -- register_copy
jsr play_collision
//SEG606 [265] (byte) play_collision::return#0 ← (byte) play_collision::return#15
//SEG607 play_move_down::@13
//SEG608 [266] (byte~) play_move_down::$12 ← (byte) play_collision::return#0
//SEG609 [267] if((byte~) play_move_down::$12==(const byte) COLLISION_NONE#0) goto play_move_down::@10 -- vbuaa_eq_vbuc1_then_la1
cmp #COLLISION_NONE
beq b10
//SEG610 [268] phi from play_move_down::@13 to play_move_down::@9 [phi:play_move_down::@13->play_move_down::@9]
//SEG611 play_move_down::@9
//SEG612 [269] call play_lock_current
jsr play_lock_current
//SEG613 [270] phi from play_move_down::@9 to play_move_down::@14 [phi:play_move_down::@9->play_move_down::@14]
//SEG614 play_move_down::@14
//SEG615 [271] call play_remove_lines
//SEG616 [337] phi from play_move_down::@14 to play_remove_lines [phi:play_move_down::@14->play_remove_lines]
jsr play_remove_lines
//SEG617 [272] (byte) play_remove_lines::return#0 ← (byte) play_remove_lines::removed#8 -- vbuaa=vbuz1
lda play_remove_lines.removed
//SEG618 play_move_down::@15
//SEG619 [273] (byte) play_move_down::removed#0 ← (byte) play_remove_lines::return#0
//SEG620 [274] (byte) play_update_score::removed#0 ← (byte) play_move_down::removed#0 -- vbuxx=vbuaa
tax
//SEG621 [275] call play_update_score
jsr play_update_score
//SEG622 [276] phi from play_move_down::@15 to play_move_down::@16 [phi:play_move_down::@15->play_move_down::@16]
//SEG623 play_move_down::@16
//SEG624 [277] call play_spawn_current
//SEG625 [283] phi from play_move_down::@16 to play_spawn_current [phi:play_move_down::@16->play_spawn_current]
//SEG626 [283] phi (byte) game_over#65 = (byte) game_over#10 [phi:play_move_down::@16->play_spawn_current#0] -- register_copy
//SEG627 [283] phi (byte) next_piece_idx#17 = (byte) next_piece_idx#10 [phi:play_move_down::@16->play_spawn_current#1] -- register_copy
jsr play_spawn_current
//SEG628 [278] (byte*~) current_piece#106 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$0) -- pbuz1=pptc1_derefidx_vbuz2
ldy play_spawn_current._0
lda PIECES,y
sta current_piece
lda PIECES+1,y
sta current_piece+1
//SEG629 [279] phi from play_move_down::@16 to play_move_down::@11 [phi:play_move_down::@16->play_move_down::@11]
//SEG630 [279] phi (byte) next_piece_idx#30 = (byte) play_spawn_current::piece_idx#2 [phi:play_move_down::@16->play_move_down::@11#0] -- register_copy
//SEG631 [279] phi (byte) game_over#27 = (byte) game_over#52 [phi:play_move_down::@16->play_move_down::@11#1] -- register_copy
//SEG632 [279] phi (byte) current_xpos#43 = (byte) current_xpos#103 [phi:play_move_down::@16->play_move_down::@11#2] -- register_copy
//SEG633 [279] phi (byte*) current_piece_gfx#35 = (byte*) current_piece_gfx#74 [phi:play_move_down::@16->play_move_down::@11#3] -- register_copy
//SEG634 [279] phi (byte) current_orientation#37 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_move_down::@16->play_move_down::@11#4] -- vbuz1=vbuc1
lda #0
sta current_orientation
//SEG635 [279] phi (byte) current_piece_char#29 = (byte) current_piece_char#5 [phi:play_move_down::@16->play_move_down::@11#5] -- register_copy
//SEG636 [279] phi (byte*) current_piece#28 = (byte*~) current_piece#106 [phi:play_move_down::@16->play_move_down::@11#6] -- register_copy
//SEG637 [279] phi (byte) level_bcd#31 = (byte) level_bcd#19 [phi:play_move_down::@16->play_move_down::@11#7] -- register_copy
//SEG638 [279] phi (byte) current_movedown_slow#37 = (byte) current_movedown_slow#23 [phi:play_move_down::@16->play_move_down::@11#8] -- register_copy
//SEG639 [279] phi (byte) level#33 = (byte) level#19 [phi:play_move_down::@16->play_move_down::@11#9] -- register_copy
//SEG640 [279] phi (dword) score_bcd#26 = (dword) score_bcd#16 [phi:play_move_down::@16->play_move_down::@11#10] -- register_copy
//SEG641 [279] phi (word) lines_bcd#26 = (word) lines_bcd#17 [phi:play_move_down::@16->play_move_down::@11#11] -- register_copy
//SEG642 [279] phi (byte) current_ypos#38 = (byte) current_ypos#6 [phi:play_move_down::@16->play_move_down::@11#12] -- register_copy
//SEG643 play_move_down::@11
b11:
//SEG644 [280] phi from play_move_down::@11 to play_move_down::@return [phi:play_move_down::@11->play_move_down::@return]
//SEG645 [280] phi (byte) next_piece_idx#16 = (byte) next_piece_idx#30 [phi:play_move_down::@11->play_move_down::@return#0] -- register_copy
//SEG646 [280] phi (byte) game_over#15 = (byte) game_over#27 [phi:play_move_down::@11->play_move_down::@return#1] -- register_copy
//SEG647 [280] phi (byte) current_xpos#22 = (byte) current_xpos#43 [phi:play_move_down::@11->play_move_down::@return#2] -- register_copy
//SEG648 [280] phi (byte*) current_piece_gfx#20 = (byte*) current_piece_gfx#35 [phi:play_move_down::@11->play_move_down::@return#3] -- register_copy
//SEG649 [280] phi (byte) current_orientation#20 = (byte) current_orientation#37 [phi:play_move_down::@11->play_move_down::@return#4] -- register_copy
//SEG650 [280] phi (byte) current_piece_char#16 = (byte) current_piece_char#29 [phi:play_move_down::@11->play_move_down::@return#5] -- register_copy
//SEG651 [280] phi (byte*) current_piece#15 = (byte*) current_piece#28 [phi:play_move_down::@11->play_move_down::@return#6] -- register_copy
//SEG652 [280] phi (byte) level_bcd#17 = (byte) level_bcd#31 [phi:play_move_down::@11->play_move_down::@return#7] -- register_copy
//SEG653 [280] phi (byte) current_movedown_slow#21 = (byte) current_movedown_slow#37 [phi:play_move_down::@11->play_move_down::@return#8] -- register_copy
//SEG654 [280] phi (byte) level#17 = (byte) level#33 [phi:play_move_down::@11->play_move_down::@return#9] -- register_copy
//SEG655 [280] phi (dword) score_bcd#14 = (dword) score_bcd#26 [phi:play_move_down::@11->play_move_down::@return#10] -- register_copy
//SEG656 [280] phi (word) lines_bcd#15 = (word) lines_bcd#26 [phi:play_move_down::@11->play_move_down::@return#11] -- register_copy
//SEG657 [280] phi (byte) current_ypos#19 = (byte) current_ypos#38 [phi:play_move_down::@11->play_move_down::@return#12] -- register_copy
//SEG658 [280] phi (byte) current_movedown_counter#14 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_move_down::@11->play_move_down::@return#13] -- vbuz1=vbuc1
lda #0
sta current_movedown_counter
//SEG659 [280] phi (byte) play_move_down::return#3 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:play_move_down::@11->play_move_down::@return#14] -- vbuxx=vbuc1
ldx #1
rts
//SEG660 [280] phi from play_move_down::@3 to play_move_down::@return [phi:play_move_down::@3->play_move_down::@return]
b5:
//SEG661 [280] phi (byte) next_piece_idx#16 = (byte) next_piece_idx#10 [phi:play_move_down::@3->play_move_down::@return#0] -- register_copy
//SEG662 [280] phi (byte) game_over#15 = (byte) game_over#10 [phi:play_move_down::@3->play_move_down::@return#1] -- register_copy
//SEG663 [280] phi (byte) current_xpos#22 = (byte) current_xpos#124 [phi:play_move_down::@3->play_move_down::@return#2] -- register_copy
//SEG664 [280] phi (byte*) current_piece_gfx#20 = (byte*) current_piece_gfx#114 [phi:play_move_down::@3->play_move_down::@return#3] -- register_copy
//SEG665 [280] phi (byte) current_orientation#20 = (byte) current_orientation#13 [phi:play_move_down::@3->play_move_down::@return#4] -- register_copy
//SEG666 [280] phi (byte) current_piece_char#16 = (byte) current_piece_char#10 [phi:play_move_down::@3->play_move_down::@return#5] -- register_copy
//SEG667 [280] phi (byte*) current_piece#15 = (byte*) current_piece#10 [phi:play_move_down::@3->play_move_down::@return#6] -- register_copy
//SEG668 [280] phi (byte) level_bcd#17 = (byte) level_bcd#11 [phi:play_move_down::@3->play_move_down::@return#7] -- register_copy
//SEG669 [280] phi (byte) current_movedown_slow#21 = (byte) current_movedown_slow#14 [phi:play_move_down::@3->play_move_down::@return#8] -- register_copy
//SEG670 [280] phi (byte) level#17 = (byte) level#10 [phi:play_move_down::@3->play_move_down::@return#9] -- register_copy
//SEG671 [280] phi (dword) score_bcd#14 = (dword) score_bcd#18 [phi:play_move_down::@3->play_move_down::@return#10] -- register_copy
//SEG672 [280] phi (word) lines_bcd#15 = (word) lines_bcd#19 [phi:play_move_down::@3->play_move_down::@return#11] -- register_copy
//SEG673 [280] phi (byte) current_ypos#19 = (byte) current_ypos#100 [phi:play_move_down::@3->play_move_down::@return#12] -- register_copy
//SEG674 [280] phi (byte) current_movedown_counter#14 = (byte) current_movedown_counter#12 [phi:play_move_down::@3->play_move_down::@return#13] -- register_copy
//SEG675 [280] phi (byte) play_move_down::return#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_move_down::@3->play_move_down::@return#14] -- vbuxx=vbuc1
ldx #0
//SEG676 play_move_down::@return
//SEG677 [281] return
rts
//SEG678 play_move_down::@10
b10:
//SEG679 [282] (byte) current_ypos#3 ← ++ (byte) current_ypos#100 -- vbuz1=_inc_vbuz1
inc current_ypos
//SEG680 [279] phi from play_move_down::@10 to play_move_down::@11 [phi:play_move_down::@10->play_move_down::@11]
//SEG681 [279] phi (byte) next_piece_idx#30 = (byte) next_piece_idx#10 [phi:play_move_down::@10->play_move_down::@11#0] -- register_copy
//SEG682 [279] phi (byte) game_over#27 = (byte) game_over#10 [phi:play_move_down::@10->play_move_down::@11#1] -- register_copy
//SEG683 [279] phi (byte) current_xpos#43 = (byte) current_xpos#124 [phi:play_move_down::@10->play_move_down::@11#2] -- register_copy
//SEG684 [279] phi (byte*) current_piece_gfx#35 = (byte*) current_piece_gfx#114 [phi:play_move_down::@10->play_move_down::@11#3] -- register_copy
//SEG685 [279] phi (byte) current_orientation#37 = (byte) current_orientation#13 [phi:play_move_down::@10->play_move_down::@11#4] -- register_copy
//SEG686 [279] phi (byte) current_piece_char#29 = (byte) current_piece_char#10 [phi:play_move_down::@10->play_move_down::@11#5] -- register_copy
//SEG687 [279] phi (byte*) current_piece#28 = (byte*) current_piece#10 [phi:play_move_down::@10->play_move_down::@11#6] -- register_copy
//SEG688 [279] phi (byte) level_bcd#31 = (byte) level_bcd#11 [phi:play_move_down::@10->play_move_down::@11#7] -- register_copy
//SEG689 [279] phi (byte) current_movedown_slow#37 = (byte) current_movedown_slow#14 [phi:play_move_down::@10->play_move_down::@11#8] -- register_copy
//SEG690 [279] phi (byte) level#33 = (byte) level#10 [phi:play_move_down::@10->play_move_down::@11#9] -- register_copy
//SEG691 [279] phi (dword) score_bcd#26 = (dword) score_bcd#18 [phi:play_move_down::@10->play_move_down::@11#10] -- register_copy
//SEG692 [279] phi (word) lines_bcd#26 = (word) lines_bcd#19 [phi:play_move_down::@10->play_move_down::@11#11] -- register_copy
//SEG693 [279] phi (byte) current_ypos#38 = (byte) current_ypos#3 [phi:play_move_down::@10->play_move_down::@11#12] -- register_copy
jmp b11
}
//SEG694 play_spawn_current
// Spawn a new piece
// Moves the next piece into the current and spawns a new next piece
play_spawn_current: {
.label _0 = 4
.label piece_idx = $21
//SEG695 [284] (byte) play_spawn_current::current_piece_idx#0 ← (byte) next_piece_idx#17 -- vbuxx=vbuz1
// Move next piece into current
ldx next_piece_idx
//SEG696 [285] (byte~) play_spawn_current::$0 ← (byte) play_spawn_current::current_piece_idx#0 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuz1=vbuxx_rol_1
txa
asl
sta _0
//SEG697 [286] (byte) current_piece_char#5 ← *((const byte[]) PIECES_CHARS#0 + (byte) play_spawn_current::current_piece_idx#0) -- vbuz1=pbuc1_derefidx_vbuxx
lda PIECES_CHARS,x
sta current_piece_char
//SEG698 [287] (byte*) current_piece_gfx#74 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$0) -- pbuz1=pptc1_derefidx_vbuz2
ldy _0
lda PIECES,y
sta current_piece_gfx
lda PIECES+1,y
sta current_piece_gfx+1
//SEG699 [288] (byte) current_xpos#103 ← *((const byte[]) PIECES_START_X#0 + (byte) play_spawn_current::current_piece_idx#0) -- vbuz1=pbuc1_derefidx_vbuxx
lda PIECES_START_X,x
sta current_xpos
//SEG700 [289] (byte) current_ypos#6 ← *((const byte[]) PIECES_START_Y#0 + (byte) play_spawn_current::current_piece_idx#0) -- vbuz1=pbuc1_derefidx_vbuxx
lda PIECES_START_Y,x
sta current_ypos
//SEG701 [290] (byte) play_collision::xpos#4 ← (byte) current_xpos#103 -- vbuz1=vbuz2
lda current_xpos
sta play_collision.xpos
//SEG702 [291] (byte) play_collision::ypos#4 ← (byte) current_ypos#6 -- vbuz1=vbuz2
lda current_ypos
sta play_collision.ypos
//SEG703 [292] (byte*~) current_piece#104 ← (byte*)*((const word[]) PIECES#0 + (byte~) play_spawn_current::$0) -- pbuz1=pptc1_derefidx_vbuz2
lda PIECES,y
sta current_piece_104
lda PIECES+1,y
sta current_piece_104+1
//SEG704 [293] call play_collision
//SEG705 [199] phi from play_spawn_current to play_collision [phi:play_spawn_current->play_collision]
//SEG706 [199] phi (byte) play_collision::xpos#6 = (byte) play_collision::xpos#4 [phi:play_spawn_current->play_collision#0] -- register_copy
//SEG707 [199] phi (byte) play_collision::ypos#5 = (byte) play_collision::ypos#4 [phi:play_spawn_current->play_collision#1] -- register_copy
//SEG708 [199] phi (byte) play_collision::orientation#5 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_spawn_current->play_collision#2] -- vbuxx=vbuc1
ldx #0
//SEG709 [199] phi (byte*) current_piece#17 = (byte*~) current_piece#104 [phi:play_spawn_current->play_collision#3] -- register_copy
jsr play_collision
//SEG710 [294] (byte) play_collision::return#10 ← (byte) play_collision::return#15
//SEG711 play_spawn_current::@4
//SEG712 [295] (byte~) play_spawn_current::$2 ← (byte) play_collision::return#10
//SEG713 [296] if((byte~) play_spawn_current::$2!=(const byte) COLLISION_PLAYFIELD#0) goto play_spawn_current::@5 -- vbuaa_neq_vbuc1_then_la1
cmp #COLLISION_PLAYFIELD
bne b1
//SEG714 [297] phi from play_spawn_current::@4 to play_spawn_current::@1 [phi:play_spawn_current::@4->play_spawn_current::@1]
//SEG715 [297] phi (byte) game_over#52 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:play_spawn_current::@4->play_spawn_current::@1#0] -- vbuz1=vbuc1
lda #1
sta game_over
//SEG716 play_spawn_current::@1
b1:
//SEG717 [298] phi from play_spawn_current::@1 to play_spawn_current::@2 [phi:play_spawn_current::@1->play_spawn_current::@2]
//SEG718 [298] phi (byte) play_spawn_current::piece_idx#2 = (byte/signed byte/word/signed word/dword/signed dword) 7 [phi:play_spawn_current::@1->play_spawn_current::@2#0] -- vbuz1=vbuc1
lda #7
sta piece_idx
//SEG719 play_spawn_current::@2
b2:
//SEG720 [299] if((byte) play_spawn_current::piece_idx#2==(byte/signed byte/word/signed word/dword/signed dword) 7) goto play_spawn_current::sid_rnd1 -- vbuz1_eq_vbuc1_then_la1
lda #7
cmp piece_idx
beq sid_rnd1
//SEG721 play_spawn_current::@return
//SEG722 [300] return
rts
//SEG723 play_spawn_current::sid_rnd1
sid_rnd1:
//SEG724 [301] (byte) play_spawn_current::sid_rnd1_return#0 ← *((const byte*) SID_VOICE3_OSC#0) -- vbuaa=_deref_pbuc1
lda SID_VOICE3_OSC
//SEG725 play_spawn_current::@3
//SEG726 [302] (byte) play_spawn_current::piece_idx#1 ← (byte) play_spawn_current::sid_rnd1_return#0 & (byte/signed byte/word/signed word/dword/signed dword) 7 -- vbuz1=vbuaa_band_vbuc1
and #7
sta piece_idx
//SEG727 [298] phi from play_spawn_current::@3 to play_spawn_current::@2 [phi:play_spawn_current::@3->play_spawn_current::@2]
//SEG728 [298] phi (byte) play_spawn_current::piece_idx#2 = (byte) play_spawn_current::piece_idx#1 [phi:play_spawn_current::@3->play_spawn_current::@2#0] -- register_copy
jmp b2
//SEG729 [303] phi from play_spawn_current::@4 to play_spawn_current::@5 [phi:play_spawn_current::@4->play_spawn_current::@5]
//SEG730 play_spawn_current::@5
//SEG731 [297] phi from play_spawn_current::@5 to play_spawn_current::@1 [phi:play_spawn_current::@5->play_spawn_current::@1]
//SEG732 [297] phi (byte) game_over#52 = (byte) game_over#65 [phi:play_spawn_current::@5->play_spawn_current::@1#0] -- register_copy
}
//SEG733 play_update_score
// Update the score based on the number of lines removed
// play_update_score(byte register(X) removed)
play_update_score: {
.label lines_before = 4
.label add_bcd = $2c
//SEG734 [304] if((byte) play_update_score::removed#0==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_update_score::@return -- vbuxx_eq_0_then_la1
cpx #0
beq breturn
//SEG735 play_update_score::@1
//SEG736 [305] (byte~) play_update_score::$2 ← < (word) lines_bcd#19 -- vbuaa=_lo_vwuz1
lda lines_bcd
//SEG737 [306] (byte) play_update_score::lines_before#0 ← (byte~) play_update_score::$2 & (byte/word/signed word/dword/signed dword) $f0 -- vbuz1=vbuaa_band_vbuc1
and #$f0
sta lines_before
//SEG738 [307] (byte~) play_update_score::$4 ← (byte) play_update_score::removed#0 << (byte/signed byte/word/signed word/dword/signed dword) 2 -- vbuaa=vbuxx_rol_2
txa
asl
asl
//SEG739 [308] (dword) play_update_score::add_bcd#0 ← *((const dword[5]) score_add_bcd#0 + (byte~) play_update_score::$4) -- vduz1=pduc1_derefidx_vbuaa
tay
lda score_add_bcd,y
sta add_bcd
lda score_add_bcd+1,y
sta add_bcd+1
lda score_add_bcd+2,y
sta add_bcd+2
lda score_add_bcd+3,y
sta add_bcd+3
//SEG740 asm { sed }
sed
//SEG741 [310] (word) lines_bcd#30 ← (word) lines_bcd#19 + (byte) play_update_score::removed#0 -- vwuz1=vwuz1_plus_vbuxx
txa
clc
adc lines_bcd
sta lines_bcd
bcc !+
inc lines_bcd+1
!:
//SEG742 [311] (dword) score_bcd#30 ← (dword) score_bcd#18 + (dword) play_update_score::add_bcd#0 -- vduz1=vduz1_plus_vduz2
lda score_bcd
clc
adc add_bcd
sta score_bcd
lda score_bcd+1
adc add_bcd+1
sta score_bcd+1
lda score_bcd+2
adc add_bcd+2
sta score_bcd+2
lda score_bcd+3
adc add_bcd+3
sta score_bcd+3
//SEG743 asm { cld }
cld
//SEG744 [313] (byte~) play_update_score::$5 ← < (word) lines_bcd#30 -- vbuaa=_lo_vwuz1
lda lines_bcd
//SEG745 [314] (byte) play_update_score::lines_after#0 ← (byte~) play_update_score::$5 & (byte/word/signed word/dword/signed dword) $f0 -- vbuaa=vbuaa_band_vbuc1
and #$f0
//SEG746 [315] if((byte) play_update_score::lines_before#0==(byte) play_update_score::lines_after#0) goto play_update_score::@return -- vbuz1_eq_vbuaa_then_la1
cmp lines_before
beq breturn
//SEG747 [316] phi from play_update_score::@1 to play_update_score::@2 [phi:play_update_score::@1->play_update_score::@2]
//SEG748 play_update_score::@2
//SEG749 [317] call play_increase_level
jsr play_increase_level
//SEG750 [318] phi from play_update_score play_update_score::@1 play_update_score::@2 to play_update_score::@return [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return]
//SEG751 [318] phi (byte) level_bcd#19 = (byte) level_bcd#11 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#0] -- register_copy
//SEG752 [318] phi (byte) current_movedown_slow#23 = (byte) current_movedown_slow#14 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#1] -- register_copy
//SEG753 [318] phi (byte) level#19 = (byte) level#10 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#2] -- register_copy
//SEG754 [318] phi (dword) score_bcd#16 = (dword) score_bcd#18 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#3] -- register_copy
//SEG755 [318] phi (word) lines_bcd#17 = (word) lines_bcd#19 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#4] -- register_copy
//SEG756 play_update_score::@return
breturn:
//SEG757 [319] return
rts
}
//SEG758 play_increase_level
// Increase the level
play_increase_level: {
//SEG759 [320] (byte) level#21 ← ++ (byte) level#10 -- vbuz1=_inc_vbuz1
inc level
//SEG760 [321] if((byte) level#21>=(byte/signed byte/word/signed word/dword/signed dword) $1d+(byte/signed byte/word/signed word/dword/signed dword) 1) goto play_increase_level::@1 -- vbuz1_ge_vbuc1_then_la1
// Update speed of moving tetrominos down
lda level
cmp #$1d+1
bcs b3
//SEG761 play_increase_level::@3
//SEG762 [322] (byte) current_movedown_slow#10 ← *((const byte[]) MOVEDOWN_SLOW_SPEEDS#0 + (byte) level#21) -- vbuz1=pbuc1_derefidx_vbuz2
tay
lda MOVEDOWN_SLOW_SPEEDS,y
sta current_movedown_slow
//SEG763 [323] phi from play_increase_level::@3 to play_increase_level::@1 [phi:play_increase_level::@3->play_increase_level::@1]
//SEG764 [323] phi (byte) current_movedown_slow#69 = (byte) current_movedown_slow#10 [phi:play_increase_level::@3->play_increase_level::@1#0] -- register_copy
jmp b1
//SEG765 [323] phi from play_increase_level to play_increase_level::@1 [phi:play_increase_level->play_increase_level::@1]
b3:
//SEG766 [323] phi (byte) current_movedown_slow#69 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:play_increase_level->play_increase_level::@1#0] -- vbuz1=vbuc1
lda #1
sta current_movedown_slow
//SEG767 play_increase_level::@1
b1:
//SEG768 [324] (byte) level_bcd#21 ← ++ (byte) level_bcd#11 -- vbuz1=_inc_vbuz1
inc level_bcd
//SEG769 [325] (byte~) play_increase_level::$1 ← (byte) level_bcd#21 & (byte/signed byte/word/signed word/dword/signed dword) $f -- vbuaa=vbuz1_band_vbuc1
lda #$f
and level_bcd
//SEG770 [326] if((byte~) play_increase_level::$1!=(byte/signed byte/word/signed word/dword/signed dword) $a) goto play_increase_level::@2 -- vbuaa_neq_vbuc1_then_la1
cmp #$a
bne b2
//SEG771 play_increase_level::@4
//SEG772 [327] (byte) level_bcd#8 ← (byte) level_bcd#21 + (byte/signed byte/word/signed word/dword/signed dword) 6 -- vbuz1=vbuz1_plus_vbuc1
// If level low nybble hits $a change to $10
lax level_bcd
axs #-[6]
stx level_bcd
//SEG773 [328] phi from play_increase_level::@1 play_increase_level::@4 to play_increase_level::@2 [phi:play_increase_level::@1/play_increase_level::@4->play_increase_level::@2]
//SEG774 [328] phi (byte) level_bcd#64 = (byte) level_bcd#21 [phi:play_increase_level::@1/play_increase_level::@4->play_increase_level::@2#0] -- register_copy
//SEG775 play_increase_level::@2
b2:
//SEG776 asm { sed }
// Increase the score values gained
sed
//SEG777 [330] phi from play_increase_level::@2 to play_increase_level::@5 [phi:play_increase_level::@2->play_increase_level::@5]
//SEG778 [330] phi (byte) play_increase_level::b#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_increase_level::@2->play_increase_level::@5#0] -- vbuxx=vbuc1
ldx #0
//SEG779 [330] phi from play_increase_level::@5 to play_increase_level::@5 [phi:play_increase_level::@5->play_increase_level::@5]
//SEG780 [330] phi (byte) play_increase_level::b#2 = (byte) play_increase_level::b#1 [phi:play_increase_level::@5->play_increase_level::@5#0] -- register_copy
//SEG781 play_increase_level::@5
b5:
//SEG782 [331] (byte) play_increase_level::b4#0 ← (byte) play_increase_level::b#2 << (byte/signed byte/word/signed word/dword/signed dword) 2 -- vbuaa=vbuxx_rol_2
txa
asl
asl
//SEG783 [332] *((const dword[5]) score_add_bcd#0 + (byte) play_increase_level::b4#0) ← *((const dword[5]) score_add_bcd#0 + (byte) play_increase_level::b4#0) + *((const dword[]) SCORE_BASE_BCD#0 + (byte) play_increase_level::b4#0) -- pduc1_derefidx_vbuaa=pduc1_derefidx_vbuaa_plus_pduc2_derefidx_vbuaa
tay
clc
lda score_add_bcd,y
adc SCORE_BASE_BCD,y
sta score_add_bcd,y
lda score_add_bcd+1,y
adc SCORE_BASE_BCD+1,y
sta score_add_bcd+1,y
lda score_add_bcd+2,y
adc SCORE_BASE_BCD+2,y
sta score_add_bcd+2,y
lda score_add_bcd+3,y
adc SCORE_BASE_BCD+3,y
sta score_add_bcd+3,y
//SEG784 [333] (byte) play_increase_level::b#1 ← ++ (byte) play_increase_level::b#2 -- vbuxx=_inc_vbuxx
inx
//SEG785 [334] if((byte) play_increase_level::b#1!=(byte/signed byte/word/signed word/dword/signed dword) 5) goto play_increase_level::@5 -- vbuxx_neq_vbuc1_then_la1
cpx #5
bne b5
//SEG786 play_increase_level::@6
//SEG787 asm { cld }
cld
//SEG788 play_increase_level::@return
//SEG789 [336] return
rts
}
//SEG790 play_remove_lines
// Look through the playfield for lines - and remove any lines found
// Utilizes two cursors on the playfield - one reading cells and one writing cells
// Whenever a full line is detected the writing cursor is instructed to write to the same line once more.
// Returns the number of lines removed
play_remove_lines: {
.label c = $c
.label x = $a
.label y = 4
.label removed = 9
.label full = $b
//SEG791 [338] phi from play_remove_lines to play_remove_lines::@1 [phi:play_remove_lines->play_remove_lines::@1]
//SEG792 [338] phi (byte) play_remove_lines::removed#11 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_remove_lines->play_remove_lines::@1#0] -- vbuz1=vbuc1
lda #0
sta removed
//SEG793 [338] phi (byte) play_remove_lines::y#8 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_remove_lines->play_remove_lines::@1#1] -- vbuz1=vbuc1
sta y
//SEG794 [338] phi (byte) play_remove_lines::w#12 = (const byte) PLAYFIELD_LINES#0*(const byte) PLAYFIELD_COLS#0-(byte/signed byte/word/signed word/dword/signed dword) 1 [phi:play_remove_lines->play_remove_lines::@1#2] -- vbuxx=vbuc1
ldx #PLAYFIELD_LINES*PLAYFIELD_COLS-1
//SEG795 [338] phi (byte) play_remove_lines::r#3 = (const byte) PLAYFIELD_LINES#0*(const byte) PLAYFIELD_COLS#0-(byte/signed byte/word/signed word/dword/signed dword) 1 [phi:play_remove_lines->play_remove_lines::@1#3] -- vbuyy=vbuc1
ldy #PLAYFIELD_LINES*PLAYFIELD_COLS-1
// Read all lines and rewrite them
//SEG796 [338] phi from play_remove_lines::@6 to play_remove_lines::@1 [phi:play_remove_lines::@6->play_remove_lines::@1]
//SEG797 [338] phi (byte) play_remove_lines::removed#11 = (byte) play_remove_lines::removed#8 [phi:play_remove_lines::@6->play_remove_lines::@1#0] -- register_copy
//SEG798 [338] phi (byte) play_remove_lines::y#8 = (byte) play_remove_lines::y#1 [phi:play_remove_lines::@6->play_remove_lines::@1#1] -- register_copy
//SEG799 [338] phi (byte) play_remove_lines::w#12 = (byte) play_remove_lines::w#11 [phi:play_remove_lines::@6->play_remove_lines::@1#2] -- register_copy
//SEG800 [338] phi (byte) play_remove_lines::r#3 = (byte) play_remove_lines::r#1 [phi:play_remove_lines::@6->play_remove_lines::@1#3] -- register_copy
//SEG801 play_remove_lines::@1
b1:
//SEG802 [339] phi from play_remove_lines::@1 to play_remove_lines::@2 [phi:play_remove_lines::@1->play_remove_lines::@2]
//SEG803 [339] phi (byte) play_remove_lines::full#4 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:play_remove_lines::@1->play_remove_lines::@2#0] -- vbuz1=vbuc1
lda #1
sta full
//SEG804 [339] phi (byte) play_remove_lines::x#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_remove_lines::@1->play_remove_lines::@2#1] -- vbuz1=vbuc1
lda #0
sta x
//SEG805 [339] phi (byte) play_remove_lines::w#4 = (byte) play_remove_lines::w#12 [phi:play_remove_lines::@1->play_remove_lines::@2#2] -- register_copy
//SEG806 [339] phi (byte) play_remove_lines::r#2 = (byte) play_remove_lines::r#3 [phi:play_remove_lines::@1->play_remove_lines::@2#3] -- register_copy
//SEG807 [339] phi from play_remove_lines::@3 to play_remove_lines::@2 [phi:play_remove_lines::@3->play_remove_lines::@2]
//SEG808 [339] phi (byte) play_remove_lines::full#4 = (byte) play_remove_lines::full#2 [phi:play_remove_lines::@3->play_remove_lines::@2#0] -- register_copy
//SEG809 [339] phi (byte) play_remove_lines::x#2 = (byte) play_remove_lines::x#1 [phi:play_remove_lines::@3->play_remove_lines::@2#1] -- register_copy
//SEG810 [339] phi (byte) play_remove_lines::w#4 = (byte) play_remove_lines::w#1 [phi:play_remove_lines::@3->play_remove_lines::@2#2] -- register_copy
//SEG811 [339] phi (byte) play_remove_lines::r#2 = (byte) play_remove_lines::r#1 [phi:play_remove_lines::@3->play_remove_lines::@2#3] -- register_copy
//SEG812 play_remove_lines::@2
b2:
//SEG813 [340] (byte) play_remove_lines::c#0 ← *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::r#2) -- vbuz1=pbuc1_derefidx_vbuyy
lda playfield,y
sta c
//SEG814 [341] (byte) play_remove_lines::r#1 ← -- (byte) play_remove_lines::r#2 -- vbuyy=_dec_vbuyy
dey
//SEG815 [342] if((byte) play_remove_lines::c#0!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_remove_lines::@9 -- vbuz1_neq_0_then_la1
cmp #0
bne b3
//SEG816 [343] phi from play_remove_lines::@2 to play_remove_lines::@3 [phi:play_remove_lines::@2->play_remove_lines::@3]
//SEG817 [343] phi (byte) play_remove_lines::full#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_remove_lines::@2->play_remove_lines::@3#0] -- vbuz1=vbuc1
lda #0
sta full
//SEG818 play_remove_lines::@3
b3:
//SEG819 [344] *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::w#4) ← (byte) play_remove_lines::c#0 -- pbuc1_derefidx_vbuxx=vbuz1
lda c
sta playfield,x
//SEG820 [345] (byte) play_remove_lines::w#1 ← -- (byte) play_remove_lines::w#4 -- vbuxx=_dec_vbuxx
dex
//SEG821 [346] (byte) play_remove_lines::x#1 ← ++ (byte) play_remove_lines::x#2 -- vbuz1=_inc_vbuz1
inc x
//SEG822 [347] if((byte) play_remove_lines::x#1!=(const byte) PLAYFIELD_COLS#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto play_remove_lines::@2 -- vbuz1_neq_vbuc1_then_la1
lda #PLAYFIELD_COLS-1+1
cmp x
bne b2
//SEG823 play_remove_lines::@4
//SEG824 [348] if((byte) play_remove_lines::full#2!=(byte/signed byte/word/signed word/dword/signed dword) 1) goto play_remove_lines::@6 -- vbuz1_neq_vbuc1_then_la1
lda #1
cmp full
bne b6
//SEG825 play_remove_lines::@5
//SEG826 [349] (byte) play_remove_lines::w#2 ← (byte) play_remove_lines::w#1 + (const byte) PLAYFIELD_COLS#0 -- vbuxx=vbuxx_plus_vbuc1
txa
axs #-[PLAYFIELD_COLS]
//SEG827 [350] (byte) play_remove_lines::removed#1 ← ++ (byte) play_remove_lines::removed#11 -- vbuz1=_inc_vbuz1
inc removed
//SEG828 [351] phi from play_remove_lines::@4 play_remove_lines::@5 to play_remove_lines::@6 [phi:play_remove_lines::@4/play_remove_lines::@5->play_remove_lines::@6]
//SEG829 [351] phi (byte) play_remove_lines::removed#8 = (byte) play_remove_lines::removed#11 [phi:play_remove_lines::@4/play_remove_lines::@5->play_remove_lines::@6#0] -- register_copy
//SEG830 [351] phi (byte) play_remove_lines::w#11 = (byte) play_remove_lines::w#1 [phi:play_remove_lines::@4/play_remove_lines::@5->play_remove_lines::@6#1] -- register_copy
//SEG831 play_remove_lines::@6
b6:
//SEG832 [352] (byte) play_remove_lines::y#1 ← ++ (byte) play_remove_lines::y#8 -- vbuz1=_inc_vbuz1
inc y
//SEG833 [353] if((byte) play_remove_lines::y#1!=(const byte) PLAYFIELD_LINES#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto play_remove_lines::@1 -- vbuz1_neq_vbuc1_then_la1
lda #PLAYFIELD_LINES-1+1
cmp y
bne b1
//SEG834 [354] phi from play_remove_lines::@6 play_remove_lines::@8 to play_remove_lines::@7 [phi:play_remove_lines::@6/play_remove_lines::@8->play_remove_lines::@7]
b4:
//SEG835 [354] phi (byte) play_remove_lines::w#6 = (byte) play_remove_lines::w#11 [phi:play_remove_lines::@6/play_remove_lines::@8->play_remove_lines::@7#0] -- register_copy
// Write zeros in the rest of the lines
//SEG836 play_remove_lines::@7
//SEG837 [355] if((byte) play_remove_lines::w#6!=(byte/word/signed word/dword/signed dword) $ff) goto play_remove_lines::@8 -- vbuxx_neq_vbuc1_then_la1
cpx #$ff
bne b8
//SEG838 play_remove_lines::@return
//SEG839 [356] return
rts
//SEG840 play_remove_lines::@8
b8:
//SEG841 [357] *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::w#6) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- pbuc1_derefidx_vbuxx=vbuc2
lda #0
sta playfield,x
//SEG842 [358] (byte) play_remove_lines::w#3 ← -- (byte) play_remove_lines::w#6 -- vbuxx=_dec_vbuxx
dex
jmp b4
//SEG843 [359] phi from play_remove_lines::@2 to play_remove_lines::@9 [phi:play_remove_lines::@2->play_remove_lines::@9]
//SEG844 play_remove_lines::@9
//SEG845 [343] phi from play_remove_lines::@9 to play_remove_lines::@3 [phi:play_remove_lines::@9->play_remove_lines::@3]
//SEG846 [343] phi (byte) play_remove_lines::full#2 = (byte) play_remove_lines::full#4 [phi:play_remove_lines::@9->play_remove_lines::@3#0] -- register_copy
}
//SEG847 play_lock_current
// Lock the current piece onto the playfield
play_lock_current: {
.label ypos2 = $10
.label playfield_line = 5
.label col = $a
.label i = $b
.label l = 4
.label i_2 = 9
.label i_3 = 9
.label i_7 = 9
.label i_9 = 9
//SEG848 [360] (byte) play_lock_current::ypos2#0 ← (byte) current_ypos#100 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuz1=vbuz1_rol_1
asl ypos2
//SEG849 [361] phi from play_lock_current to play_lock_current::@1 [phi:play_lock_current->play_lock_current::@1]
//SEG850 [361] phi (byte) play_lock_current::l#6 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_lock_current->play_lock_current::@1#0] -- vbuz1=vbuc1
lda #0
sta l
//SEG851 [361] phi (byte) play_lock_current::i#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_lock_current->play_lock_current::@1#1] -- vbuz1=vbuc1
sta i_3
//SEG852 [361] phi (byte) play_lock_current::ypos2#2 = (byte) play_lock_current::ypos2#0 [phi:play_lock_current->play_lock_current::@1#2] -- register_copy
//SEG853 play_lock_current::@1
b1:
//SEG854 [362] (byte*) play_lock_current::playfield_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte) play_lock_current::ypos2#2) -- pbuz1=pptc1_derefidx_vbuz2
ldy ypos2
lda playfield_lines,y
sta playfield_line
lda playfield_lines+1,y
sta playfield_line+1
//SEG855 [363] (byte) play_lock_current::col#0 ← (byte) current_xpos#124 -- vbuz1=vbuz2
lda current_xpos
sta col
//SEG856 [364] phi from play_lock_current::@1 to play_lock_current::@2 [phi:play_lock_current::@1->play_lock_current::@2]
//SEG857 [364] phi (byte) play_lock_current::c#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_lock_current::@1->play_lock_current::@2#0] -- vbuxx=vbuc1
ldx #0
//SEG858 [364] phi (byte) play_lock_current::col#2 = (byte) play_lock_current::col#0 [phi:play_lock_current::@1->play_lock_current::@2#1] -- register_copy
//SEG859 [364] phi (byte) play_lock_current::i#2 = (byte) play_lock_current::i#3 [phi:play_lock_current::@1->play_lock_current::@2#2] -- register_copy
//SEG860 play_lock_current::@2
b2:
//SEG861 [365] (byte) play_lock_current::i#1 ← ++ (byte) play_lock_current::i#2 -- vbuz1=_inc_vbuz2
ldy i_2
iny
sty i
//SEG862 [366] if(*((byte*) current_piece_gfx#114 + (byte) play_lock_current::i#2)==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_lock_current::@3 -- pbuz1_derefidx_vbuz2_eq_0_then_la1
ldy i_2
lda (current_piece_gfx),y
cmp #0
beq b3
//SEG863 play_lock_current::@4
//SEG864 [367] *((byte*) play_lock_current::playfield_line#0 + (byte) play_lock_current::col#2) ← (byte) current_piece_char#10 -- pbuz1_derefidx_vbuz2=vbuz3
lda current_piece_char
ldy col
sta (playfield_line),y
//SEG865 play_lock_current::@3
b3:
//SEG866 [368] (byte) play_lock_current::col#1 ← ++ (byte) play_lock_current::col#2 -- vbuz1=_inc_vbuz1
inc col
//SEG867 [369] (byte) play_lock_current::c#1 ← ++ (byte) play_lock_current::c#2 -- vbuxx=_inc_vbuxx
inx
//SEG868 [370] if((byte) play_lock_current::c#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto play_lock_current::@7 -- vbuxx_neq_vbuc1_then_la1
cpx #4
bne b7
//SEG869 play_lock_current::@5
//SEG870 [371] (byte) play_lock_current::ypos2#1 ← (byte) play_lock_current::ypos2#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 -- vbuz1=vbuz1_plus_2
lda ypos2
clc
adc #2
sta ypos2
//SEG871 [372] (byte) play_lock_current::l#1 ← ++ (byte) play_lock_current::l#6 -- vbuz1=_inc_vbuz1
inc l
//SEG872 [373] if((byte) play_lock_current::l#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto play_lock_current::@6 -- vbuz1_neq_vbuc1_then_la1
lda #4
cmp l
bne b6
//SEG873 play_lock_current::@return
//SEG874 [374] return
rts
//SEG875 play_lock_current::@6
b6:
//SEG876 [375] (byte~) play_lock_current::i#7 ← (byte) play_lock_current::i#1 -- vbuz1=vbuz2
lda i
sta i_7
//SEG877 [361] phi from play_lock_current::@6 to play_lock_current::@1 [phi:play_lock_current::@6->play_lock_current::@1]
//SEG878 [361] phi (byte) play_lock_current::l#6 = (byte) play_lock_current::l#1 [phi:play_lock_current::@6->play_lock_current::@1#0] -- register_copy
//SEG879 [361] phi (byte) play_lock_current::i#3 = (byte~) play_lock_current::i#7 [phi:play_lock_current::@6->play_lock_current::@1#1] -- register_copy
//SEG880 [361] phi (byte) play_lock_current::ypos2#2 = (byte) play_lock_current::ypos2#1 [phi:play_lock_current::@6->play_lock_current::@1#2] -- register_copy
jmp b1
//SEG881 play_lock_current::@7
b7:
//SEG882 [376] (byte~) play_lock_current::i#9 ← (byte) play_lock_current::i#1 -- vbuz1=vbuz2
lda i
sta i_9
//SEG883 [364] phi from play_lock_current::@7 to play_lock_current::@2 [phi:play_lock_current::@7->play_lock_current::@2]
//SEG884 [364] phi (byte) play_lock_current::c#2 = (byte) play_lock_current::c#1 [phi:play_lock_current::@7->play_lock_current::@2#0] -- register_copy
//SEG885 [364] phi (byte) play_lock_current::col#2 = (byte) play_lock_current::col#1 [phi:play_lock_current::@7->play_lock_current::@2#1] -- register_copy
//SEG886 [364] phi (byte) play_lock_current::i#2 = (byte~) play_lock_current::i#9 [phi:play_lock_current::@7->play_lock_current::@2#2] -- register_copy
jmp b2
}
//SEG887 keyboard_event_pressed
// Determine if a specific key is currently pressed based on the last keyboard_event_scan()
// Returns 0 is not pressed and non-0 if pressed
// keyboard_event_pressed(byte zeropage(9) keycode)
keyboard_event_pressed: {
.label row_bits = $a
.label keycode = 9
//SEG888 [378] (byte~) keyboard_event_pressed::$0 ← (byte) keyboard_event_pressed::keycode#5 >> (byte/signed byte/word/signed word/dword/signed dword) 3 -- vbuaa=vbuz1_ror_3
lda keycode
lsr
lsr
lsr
//SEG889 [379] (byte) keyboard_event_pressed::row_bits#0 ← *((const byte[8]) keyboard_scan_values#0 + (byte~) keyboard_event_pressed::$0) -- vbuz1=pbuc1_derefidx_vbuaa
tay
lda keyboard_scan_values,y
sta row_bits
//SEG890 [380] (byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#5 & (byte/signed byte/word/signed word/dword/signed dword) 7 -- vbuaa=vbuz1_band_vbuc1
lda #7
and keycode
//SEG891 [381] (byte) keyboard_event_pressed::return#11 ← (byte) keyboard_event_pressed::row_bits#0 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte~) keyboard_event_pressed::$1) -- vbuaa=vbuz1_band_pbuc1_derefidx_vbuaa
tay
lda keyboard_matrix_col_bitmask,y
and row_bits
//SEG892 keyboard_event_pressed::@return
//SEG893 [382] return
rts
}
//SEG894 keyboard_event_get
// Get the next event from the keyboard event buffer.
// Returns $ff if there is no event waiting. As all events are <$7f it is enough to examine bit 7 when determining if there is any event to process.
// The buffer is filled by keyboard_event_scan()
keyboard_event_get: {
//SEG895 [383] if((byte) keyboard_events_size#13==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_get::@return -- vbuz1_eq_0_then_la1
lda keyboard_events_size
cmp #0
beq b1
//SEG896 keyboard_event_get::@1
//SEG897 [384] (byte) keyboard_events_size#4 ← -- (byte) keyboard_events_size#13 -- vbuz1=_dec_vbuz1
dec keyboard_events_size
//SEG898 [385] (byte) keyboard_event_get::return#1 ← *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#4) -- vbuxx=pbuc1_derefidx_vbuz1
ldy keyboard_events_size
ldx keyboard_events,y
//SEG899 [386] phi from keyboard_event_get::@1 to keyboard_event_get::@return [phi:keyboard_event_get::@1->keyboard_event_get::@return]
//SEG900 [386] phi (byte) keyboard_events_size#16 = (byte) keyboard_events_size#4 [phi:keyboard_event_get::@1->keyboard_event_get::@return#0] -- register_copy
//SEG901 [386] phi (byte) keyboard_event_get::return#2 = (byte) keyboard_event_get::return#1 [phi:keyboard_event_get::@1->keyboard_event_get::@return#1] -- register_copy
rts
//SEG902 [386] phi from keyboard_event_get to keyboard_event_get::@return [phi:keyboard_event_get->keyboard_event_get::@return]
b1:
//SEG903 [386] phi (byte) keyboard_events_size#16 = (byte) keyboard_events_size#13 [phi:keyboard_event_get->keyboard_event_get::@return#0] -- register_copy
//SEG904 [386] phi (byte) keyboard_event_get::return#2 = (byte/word/signed word/dword/signed dword) $ff [phi:keyboard_event_get->keyboard_event_get::@return#1] -- vbuxx=vbuc1
ldx #$ff
//SEG905 keyboard_event_get::@return
//SEG906 [387] return
rts
}
//SEG907 keyboard_event_scan
// Scans the entire matrix to determine which keys have been pressed/depressed.
// Generates keyboard events into the event buffer. Events can be read using keyboard_event_get().
// Handles debounce and only generates events when the status of a key changes.
// Also stores current status of modifiers in keyboard_modifiers.
keyboard_event_scan: {
.label row_scan = $b
.label keycode = $a
.label row = 9
//SEG908 [389] phi from keyboard_event_scan to keyboard_event_scan::@7 [phi:keyboard_event_scan->keyboard_event_scan::@7]
//SEG909 [389] phi (byte) keyboard_events_size#30 = (byte) keyboard_events_size#19 [phi:keyboard_event_scan->keyboard_event_scan::@7#0] -- register_copy
//SEG910 [389] phi (byte) keyboard_event_scan::keycode#11 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:keyboard_event_scan->keyboard_event_scan::@7#1] -- vbuz1=vbuc1
lda #0
sta keycode
//SEG911 [389] phi (byte) keyboard_event_scan::row#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:keyboard_event_scan->keyboard_event_scan::@7#2] -- vbuz1=vbuc1
sta row
//SEG912 [389] phi from keyboard_event_scan::@8 to keyboard_event_scan::@7 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7]
//SEG913 [389] phi (byte) keyboard_events_size#30 = (byte) keyboard_events_size#13 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7#0] -- register_copy
//SEG914 [389] phi (byte) keyboard_event_scan::keycode#11 = (byte) keyboard_event_scan::keycode#14 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7#1] -- register_copy
//SEG915 [389] phi (byte) keyboard_event_scan::row#2 = (byte) keyboard_event_scan::row#1 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7#2] -- register_copy
//SEG916 keyboard_event_scan::@7
b7:
//SEG917 [390] (byte) keyboard_matrix_read::rowid#0 ← (byte) keyboard_event_scan::row#2 -- vbuxx=vbuz1
ldx row
//SEG918 [391] call keyboard_matrix_read
jsr keyboard_matrix_read
//SEG919 [392] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0
//SEG920 keyboard_event_scan::@19
//SEG921 [393] (byte) keyboard_event_scan::row_scan#0 ← (byte) keyboard_matrix_read::return#2 -- vbuz1=vbuaa
sta row_scan
//SEG922 [394] if((byte) keyboard_event_scan::row_scan#0!=*((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2)) goto keyboard_event_scan::@9 -- vbuz1_neq_pbuc1_derefidx_vbuz2_then_la1
ldy row
cmp keyboard_scan_values,y
bne b5
//SEG923 keyboard_event_scan::@16
//SEG924 [395] (byte) keyboard_event_scan::keycode#1 ← (byte) keyboard_event_scan::keycode#11 + (byte/signed byte/word/signed word/dword/signed dword) 8 -- vbuz1=vbuz1_plus_vbuc1
lax keycode
axs #-[8]
stx keycode
//SEG925 [396] phi from keyboard_event_scan::@15 keyboard_event_scan::@16 to keyboard_event_scan::@8 [phi:keyboard_event_scan::@15/keyboard_event_scan::@16->keyboard_event_scan::@8]
//SEG926 [396] phi (byte) keyboard_events_size#13 = (byte) keyboard_events_size#29 [phi:keyboard_event_scan::@15/keyboard_event_scan::@16->keyboard_event_scan::@8#0] -- register_copy
//SEG927 [396] phi (byte) keyboard_event_scan::keycode#14 = (byte) keyboard_event_scan::keycode#15 [phi:keyboard_event_scan::@15/keyboard_event_scan::@16->keyboard_event_scan::@8#1] -- register_copy
//SEG928 keyboard_event_scan::@8
b8:
//SEG929 [397] (byte) keyboard_event_scan::row#1 ← ++ (byte) keyboard_event_scan::row#2 -- vbuz1=_inc_vbuz1
inc row
//SEG930 [398] if((byte) keyboard_event_scan::row#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto keyboard_event_scan::@7 -- vbuz1_neq_vbuc1_then_la1
lda #8
cmp row
bne b7
//SEG931 [399] phi from keyboard_event_scan::@8 to keyboard_event_scan::@17 [phi:keyboard_event_scan::@8->keyboard_event_scan::@17]
//SEG932 keyboard_event_scan::@17
//SEG933 [400] call keyboard_event_pressed
//SEG934 [377] phi from keyboard_event_scan::@17 to keyboard_event_pressed [phi:keyboard_event_scan::@17->keyboard_event_pressed]
//SEG935 [377] phi (byte) keyboard_event_pressed::keycode#5 = (const byte) KEY_LSHIFT#0 [phi:keyboard_event_scan::@17->keyboard_event_pressed#0] -- vbuz1=vbuc1
lda #KEY_LSHIFT
sta keyboard_event_pressed.keycode
jsr keyboard_event_pressed
//SEG936 [401] (byte) keyboard_event_pressed::return#0 ← (byte) keyboard_event_pressed::return#11
//SEG937 keyboard_event_scan::@20
//SEG938 [402] (byte~) keyboard_event_scan::$0 ← (byte) keyboard_event_pressed::return#0
//SEG939 [403] if((byte~) keyboard_event_scan::$0==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@1 -- vbuaa_eq_0_then_la1
cmp #0
//SEG940 [404] phi from keyboard_event_scan::@20 to keyboard_event_scan::@18 [phi:keyboard_event_scan::@20->keyboard_event_scan::@18]
//SEG941 keyboard_event_scan::@18
//SEG942 [405] phi from keyboard_event_scan::@18 keyboard_event_scan::@20 to keyboard_event_scan::@1 [phi:keyboard_event_scan::@18/keyboard_event_scan::@20->keyboard_event_scan::@1]
//SEG943 keyboard_event_scan::@1
//SEG944 [406] call keyboard_event_pressed
//SEG945 [377] phi from keyboard_event_scan::@1 to keyboard_event_pressed [phi:keyboard_event_scan::@1->keyboard_event_pressed]
//SEG946 [377] phi (byte) keyboard_event_pressed::keycode#5 = (const byte) KEY_RSHIFT#0 [phi:keyboard_event_scan::@1->keyboard_event_pressed#0] -- vbuz1=vbuc1
lda #KEY_RSHIFT
sta keyboard_event_pressed.keycode
jsr keyboard_event_pressed
//SEG947 [407] (byte) keyboard_event_pressed::return#1 ← (byte) keyboard_event_pressed::return#11
//SEG948 keyboard_event_scan::@21
//SEG949 [408] (byte~) keyboard_event_scan::$3 ← (byte) keyboard_event_pressed::return#1
//SEG950 [409] if((byte~) keyboard_event_scan::$3==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@2 -- vbuaa_eq_0_then_la1
cmp #0
//SEG951 [410] phi from keyboard_event_scan::@21 to keyboard_event_scan::@4 [phi:keyboard_event_scan::@21->keyboard_event_scan::@4]
//SEG952 keyboard_event_scan::@4
//SEG953 [411] phi from keyboard_event_scan::@21 keyboard_event_scan::@4 to keyboard_event_scan::@2 [phi:keyboard_event_scan::@21/keyboard_event_scan::@4->keyboard_event_scan::@2]
//SEG954 keyboard_event_scan::@2
//SEG955 [412] call keyboard_event_pressed
//SEG956 [377] phi from keyboard_event_scan::@2 to keyboard_event_pressed [phi:keyboard_event_scan::@2->keyboard_event_pressed]
//SEG957 [377] phi (byte) keyboard_event_pressed::keycode#5 = (const byte) KEY_CTRL#0 [phi:keyboard_event_scan::@2->keyboard_event_pressed#0] -- vbuz1=vbuc1
lda #KEY_CTRL
sta keyboard_event_pressed.keycode
jsr keyboard_event_pressed
//SEG958 [413] (byte) keyboard_event_pressed::return#2 ← (byte) keyboard_event_pressed::return#11
//SEG959 keyboard_event_scan::@22
//SEG960 [414] (byte~) keyboard_event_scan::$6 ← (byte) keyboard_event_pressed::return#2
//SEG961 [415] if((byte~) keyboard_event_scan::$6==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@3 -- vbuaa_eq_0_then_la1
cmp #0
//SEG962 [416] phi from keyboard_event_scan::@22 to keyboard_event_scan::@5 [phi:keyboard_event_scan::@22->keyboard_event_scan::@5]
//SEG963 keyboard_event_scan::@5
//SEG964 [417] phi from keyboard_event_scan::@22 keyboard_event_scan::@5 to keyboard_event_scan::@3 [phi:keyboard_event_scan::@22/keyboard_event_scan::@5->keyboard_event_scan::@3]
//SEG965 keyboard_event_scan::@3
//SEG966 [418] call keyboard_event_pressed
//SEG967 [377] phi from keyboard_event_scan::@3 to keyboard_event_pressed [phi:keyboard_event_scan::@3->keyboard_event_pressed]
//SEG968 [377] phi (byte) keyboard_event_pressed::keycode#5 = (const byte) KEY_COMMODORE#0 [phi:keyboard_event_scan::@3->keyboard_event_pressed#0] -- vbuz1=vbuc1
lda #KEY_COMMODORE
sta keyboard_event_pressed.keycode
jsr keyboard_event_pressed
//SEG969 [419] (byte) keyboard_event_pressed::return#10 ← (byte) keyboard_event_pressed::return#11
//SEG970 keyboard_event_scan::@23
//SEG971 [420] (byte~) keyboard_event_scan::$9 ← (byte) keyboard_event_pressed::return#10
//SEG972 [421] if((byte~) keyboard_event_scan::$9==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@return -- vbuaa_eq_0_then_la1
cmp #0
//SEG973 [422] phi from keyboard_event_scan::@23 to keyboard_event_scan::@6 [phi:keyboard_event_scan::@23->keyboard_event_scan::@6]
//SEG974 keyboard_event_scan::@6
//SEG975 keyboard_event_scan::@return
//SEG976 [423] return
rts
// Something has changed on the keyboard row - check each column
//SEG977 [424] phi from keyboard_event_scan::@10 to keyboard_event_scan::@9 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9]
//SEG978 [424] phi (byte) keyboard_events_size#10 = (byte) keyboard_events_size#29 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9#0] -- register_copy
//SEG979 [424] phi (byte) keyboard_event_scan::keycode#10 = (byte) keyboard_event_scan::keycode#15 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9#1] -- register_copy
//SEG980 [424] phi (byte) keyboard_event_scan::col#2 = (byte) keyboard_event_scan::col#1 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9#2] -- register_copy
//SEG981 [424] phi from keyboard_event_scan::@19 to keyboard_event_scan::@9 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9]
b5:
//SEG982 [424] phi (byte) keyboard_events_size#10 = (byte) keyboard_events_size#30 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9#0] -- register_copy
//SEG983 [424] phi (byte) keyboard_event_scan::keycode#10 = (byte) keyboard_event_scan::keycode#11 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9#1] -- register_copy
//SEG984 [424] phi (byte) keyboard_event_scan::col#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9#2] -- vbuxx=vbuc1
ldx #0
//SEG985 keyboard_event_scan::@9
b9:
//SEG986 [425] (byte~) keyboard_event_scan::$15 ← (byte) keyboard_event_scan::row_scan#0 ^ *((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2) -- vbuaa=vbuz1_bxor_pbuc1_derefidx_vbuz2
lda row_scan
ldy row
eor keyboard_scan_values,y
//SEG987 [426] (byte~) keyboard_event_scan::$16 ← (byte~) keyboard_event_scan::$15 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte) keyboard_event_scan::col#2) -- vbuaa=vbuaa_band_pbuc1_derefidx_vbuxx
and keyboard_matrix_col_bitmask,x
//SEG988 [427] if((byte~) keyboard_event_scan::$16==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@10 -- vbuaa_eq_0_then_la1
cmp #0
beq b10
//SEG989 keyboard_event_scan::@12
//SEG990 [428] if((byte) keyboard_events_size#10==(byte/signed byte/word/signed word/dword/signed dword) 8) goto keyboard_event_scan::@10 -- vbuz1_eq_vbuc1_then_la1
lda #8
cmp keyboard_events_size
beq b10
//SEG991 keyboard_event_scan::@13
//SEG992 [429] (byte) keyboard_event_scan::event_type#0 ← (byte) keyboard_event_scan::row_scan#0 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte) keyboard_event_scan::col#2) -- vbuaa=vbuz1_band_pbuc1_derefidx_vbuxx
lda keyboard_matrix_col_bitmask,x
and row_scan
//SEG993 [430] if((byte) keyboard_event_scan::event_type#0==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@11 -- vbuaa_eq_0_then_la1
cmp #0
beq b11
//SEG994 keyboard_event_scan::@14
//SEG995 [431] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte) keyboard_event_scan::keycode#10 -- pbuc1_derefidx_vbuz1=vbuz2
// Key pressed
lda keycode
ldy keyboard_events_size
sta keyboard_events,y
//SEG996 [432] (byte) keyboard_events_size#2 ← ++ (byte) keyboard_events_size#10 -- vbuz1=_inc_vbuz1
inc keyboard_events_size
//SEG997 [433] phi from keyboard_event_scan::@11 keyboard_event_scan::@12 keyboard_event_scan::@14 keyboard_event_scan::@9 to keyboard_event_scan::@10 [phi:keyboard_event_scan::@11/keyboard_event_scan::@12/keyboard_event_scan::@14/keyboard_event_scan::@9->keyboard_event_scan::@10]
//SEG998 [433] phi (byte) keyboard_events_size#29 = (byte) keyboard_events_size#1 [phi:keyboard_event_scan::@11/keyboard_event_scan::@12/keyboard_event_scan::@14/keyboard_event_scan::@9->keyboard_event_scan::@10#0] -- register_copy
//SEG999 keyboard_event_scan::@10
b10:
//SEG1000 [434] (byte) keyboard_event_scan::keycode#15 ← ++ (byte) keyboard_event_scan::keycode#10 -- vbuz1=_inc_vbuz1
inc keycode
//SEG1001 [435] (byte) keyboard_event_scan::col#1 ← ++ (byte) keyboard_event_scan::col#2 -- vbuxx=_inc_vbuxx
inx
//SEG1002 [436] if((byte) keyboard_event_scan::col#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto keyboard_event_scan::@9 -- vbuxx_neq_vbuc1_then_la1
cpx #8
bne b9
//SEG1003 keyboard_event_scan::@15
//SEG1004 [437] *((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2) ← (byte) keyboard_event_scan::row_scan#0 -- pbuc1_derefidx_vbuz1=vbuz2
// Store the current keyboard status for the row to debounce
lda row_scan
ldy row
sta keyboard_scan_values,y
jmp b8
//SEG1005 keyboard_event_scan::@11
b11:
//SEG1006 [438] (byte/word/dword~) keyboard_event_scan::$23 ← (byte) keyboard_event_scan::keycode#10 | (byte/signed byte/word/signed word/dword/signed dword) $40 -- vbuaa=vbuz1_bor_vbuc1
lda #$40
ora keycode
//SEG1007 [439] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte/word/dword~) keyboard_event_scan::$23 -- pbuc1_derefidx_vbuz1=vbuaa
// Key released
ldy keyboard_events_size
sta keyboard_events,y
//SEG1008 [440] (byte) keyboard_events_size#1 ← ++ (byte) keyboard_events_size#10 -- vbuz1=_inc_vbuz1
inc keyboard_events_size
jmp b10
}
//SEG1009 keyboard_matrix_read
// Read a single row of the keyboard matrix
// The row ID (0-7) of the keyboard matrix row to read. See the C64 key matrix for row IDs.
// Returns the keys pressed on the row as bits according to the C64 key matrix.
// Notice: If the C64 normal interrupt is still running it will occasionally interrupt right between the read & write
// leading to erroneous readings. You must disable kill the normal interrupt or sei/cli around calls to the keyboard matrix reader.
// keyboard_matrix_read(byte register(X) rowid)
keyboard_matrix_read: {
//SEG1010 [441] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#0) -- _deref_pbuc1=pbuc2_derefidx_vbuxx
lda keyboard_matrix_row_bitmask,x
sta CIA1_PORT_A
//SEG1011 [442] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B#0) -- vbuaa=_bnot__deref_pbuc1
lda CIA1_PORT_B
eor #$ff
//SEG1012 keyboard_matrix_read::@return
//SEG1013 [443] return
rts
}
//SEG1014 render_show
// Update $D018 to show the current screen (used for double buffering)
render_show: {
.const toD0181_return = (>(PLAYFIELD_SCREEN_1&$3fff)*4)|(>PLAYFIELD_CHARSET)/4&$f
.const toD0182_return = (>(PLAYFIELD_SCREEN_2&$3fff)*4)|(>PLAYFIELD_CHARSET)/4&$f
//SEG1015 [444] if((byte) render_screen_show#16==(byte/signed byte/word/signed word/dword/signed dword) 0) goto render_show::toD0181 -- vbuz1_eq_0_then_la1
lda render_screen_show
cmp #0
beq toD0181
//SEG1016 [445] phi from render_show to render_show::toD0182 [phi:render_show->render_show::toD0182]
//SEG1017 render_show::toD0182
//SEG1018 [446] phi from render_show::toD0182 to render_show::@1 [phi:render_show::toD0182->render_show::@1]
//SEG1019 [446] phi (byte) render_show::d018val#3 = (const byte) render_show::toD0182_return#0 [phi:render_show::toD0182->render_show::@1#0] -- vbuaa=vbuc1
lda #toD0182_return
//SEG1020 render_show::@1
b1:
//SEG1021 [447] *((const byte*) D018#0) ← (byte) render_show::d018val#3 -- _deref_pbuc1=vbuaa
sta D018
//SEG1022 [448] *((const byte*) BGCOL2#0) ← *((const byte[]) PIECES_COLORS_1#0 + (byte) level#10) -- _deref_pbuc1=pbuc2_derefidx_vbuz1
ldy level
lda PIECES_COLORS_1,y
sta BGCOL2
//SEG1023 [449] *((const byte*) BGCOL3#0) ← *((const byte[]) PIECES_COLORS_2#0 + (byte) level#10) -- _deref_pbuc1=pbuc2_derefidx_vbuz1
lda PIECES_COLORS_2,y
sta BGCOL3
//SEG1024 [450] (byte) render_screen_showing#1 ← (byte) render_screen_show#16 -- vbuz1=vbuz2
lda render_screen_show
sta render_screen_showing
//SEG1025 render_show::@return
//SEG1026 [451] return
rts
//SEG1027 [452] phi from render_show to render_show::toD0181 [phi:render_show->render_show::toD0181]
//SEG1028 render_show::toD0181
toD0181:
//SEG1029 [446] phi from render_show::toD0181 to render_show::@1 [phi:render_show::toD0181->render_show::@1]
//SEG1030 [446] phi (byte) render_show::d018val#3 = (const byte) render_show::toD0181_return#0 [phi:render_show::toD0181->render_show::@1#0] -- vbuaa=vbuc1
lda #toD0181_return
jmp b1
}
//SEG1031 play_init
// Initialize play data tables
play_init: {
.label pli = 5
.label idx = 2
//SEG1032 [454] phi from play_init to play_init::@1 [phi:play_init->play_init::@1]
//SEG1033 [454] phi (byte) play_init::idx#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_init->play_init::@1#0] -- vbuz1=vbuc1
lda #0
sta idx
//SEG1034 [454] phi (byte*) play_init::pli#2 = (const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 [phi:play_init->play_init::@1#1] -- pbuz1=pbuc1
lda #<playfield
sta pli
lda #>playfield
sta pli+1
//SEG1035 [454] phi (byte) play_init::j#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_init->play_init::@1#2] -- vbuyy=vbuc1
ldy #0
//SEG1036 [454] phi from play_init::@1 to play_init::@1 [phi:play_init::@1->play_init::@1]
//SEG1037 [454] phi (byte) play_init::idx#2 = (byte) play_init::idx#1 [phi:play_init::@1->play_init::@1#0] -- register_copy
//SEG1038 [454] phi (byte*) play_init::pli#2 = (byte*) play_init::pli#1 [phi:play_init::@1->play_init::@1#1] -- register_copy
//SEG1039 [454] phi (byte) play_init::j#2 = (byte) play_init::j#1 [phi:play_init::@1->play_init::@1#2] -- register_copy
//SEG1040 play_init::@1
b1:
//SEG1041 [455] (byte~) play_init::$2 ← (byte) play_init::j#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuxx=vbuyy_rol_1
tya
asl
tax
//SEG1042 [456] *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte~) play_init::$2) ← (byte*) play_init::pli#2 -- pptc1_derefidx_vbuxx=pbuz1
lda pli
sta playfield_lines,x
lda pli+1
sta playfield_lines+1,x
//SEG1043 [457] *((const byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx#0 + (byte) play_init::j#2) ← (byte) play_init::idx#2 -- pbuc1_derefidx_vbuyy=vbuz1
lda idx
sta playfield_lines_idx,y
//SEG1044 [458] (byte*) play_init::pli#1 ← (byte*) play_init::pli#2 + (const byte) PLAYFIELD_COLS#0 -- pbuz1=pbuz1_plus_vbuc1
lda #PLAYFIELD_COLS
clc
adc pli
sta pli
bcc !+
inc pli+1
!:
//SEG1045 [459] (byte) play_init::idx#1 ← (byte) play_init::idx#2 + (const byte) PLAYFIELD_COLS#0 -- vbuz1=vbuz1_plus_vbuc1
lax idx
axs #-[PLAYFIELD_COLS]
stx idx
//SEG1046 [460] (byte) play_init::j#1 ← ++ (byte) play_init::j#2 -- vbuyy=_inc_vbuyy
iny
//SEG1047 [461] if((byte) play_init::j#1!=(const byte) PLAYFIELD_LINES#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto play_init::@1 -- vbuyy_neq_vbuc1_then_la1
cpy #PLAYFIELD_LINES-1+1
bne b1
//SEG1048 play_init::@2
//SEG1049 [462] *((const byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx#0+(const byte) PLAYFIELD_LINES#0) ← (const byte) PLAYFIELD_COLS#0*(const byte) PLAYFIELD_LINES#0 -- _deref_pbuc1=vbuc2
lda #PLAYFIELD_COLS*PLAYFIELD_LINES
sta playfield_lines_idx+PLAYFIELD_LINES
//SEG1050 [463] (byte) current_movedown_slow#1 ← *((const byte[]) MOVEDOWN_SLOW_SPEEDS#0) -- vbuz1=_deref_pbuc1
// Set initial speed of moving down a tetromino
lda MOVEDOWN_SLOW_SPEEDS
sta current_movedown_slow
//SEG1051 [464] phi from play_init::@2 to play_init::@3 [phi:play_init::@2->play_init::@3]
//SEG1052 [464] phi (byte) play_init::b#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:play_init::@2->play_init::@3#0] -- vbuxx=vbuc1
ldx #0
// Set the initial score add values
//SEG1053 [464] phi from play_init::@3 to play_init::@3 [phi:play_init::@3->play_init::@3]
//SEG1054 [464] phi (byte) play_init::b#2 = (byte) play_init::b#1 [phi:play_init::@3->play_init::@3#0] -- register_copy
//SEG1055 play_init::@3
b3:
//SEG1056 [465] (byte) play_init::b4#0 ← (byte) play_init::b#2 << (byte/signed byte/word/signed word/dword/signed dword) 2 -- vbuaa=vbuxx_rol_2
txa
asl
asl
//SEG1057 [466] *((const dword[5]) score_add_bcd#0 + (byte) play_init::b4#0) ← *((const dword[]) SCORE_BASE_BCD#0 + (byte) play_init::b4#0) -- pduc1_derefidx_vbuaa=pduc2_derefidx_vbuaa
tay
lda SCORE_BASE_BCD,y
sta score_add_bcd,y
lda SCORE_BASE_BCD+1,y
sta score_add_bcd+1,y
lda SCORE_BASE_BCD+2,y
sta score_add_bcd+2,y
lda SCORE_BASE_BCD+3,y
sta score_add_bcd+3,y
//SEG1058 [467] (byte) play_init::b#1 ← ++ (byte) play_init::b#2 -- vbuxx=_inc_vbuxx
inx
//SEG1059 [468] if((byte) play_init::b#1!=(byte/signed byte/word/signed word/dword/signed dword) 5) goto play_init::@3 -- vbuxx_neq_vbuc1_then_la1
cpx #5
bne b3
//SEG1060 play_init::@return
//SEG1061 [469] return
rts
}
//SEG1062 sprites_irq_init
// Setup the IRQ
sprites_irq_init: {
//SEG1063 asm { sei }
sei
//SEG1064 [471] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2
// Acknowledge any IRQ and setup the next one
lda #IRQ_RASTER
sta IRQ_STATUS
//SEG1065 asm { ldaCIA1_INTERRUPT }
lda CIA1_INTERRUPT
//SEG1066 [473] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0 -- _deref_pbuc1=vbuc2
// Disable kernal & basic
lda #PROCPORT_DDR_MEMORY_MASK
sta PROCPORT_DDR
//SEG1067 [474] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 -- _deref_pbuc1=vbuc2
lda #PROCPORT_RAM_IO
sta PROCPORT
//SEG1068 [475] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0 -- _deref_pbuc1=vbuc2
// Disable CIA 1 Timer IRQ
lda #CIA_INTERRUPT_CLEAR
sta CIA1_INTERRUPT
//SEG1069 [476] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte/signed byte/word/signed word/dword/signed dword) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2
// Set raster line
lda #$7f
and VIC_CONTROL
sta VIC_CONTROL
//SEG1070 [477] *((const byte*) RASTER#0) ← (const byte) IRQ_RASTER_FIRST#0 -- _deref_pbuc1=vbuc2
lda #IRQ_RASTER_FIRST
sta RASTER
//SEG1071 [478] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2
// Enable Raster Interrupt
lda #IRQ_RASTER
sta IRQ_ENABLE
//SEG1072 [479] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_CLOBBER)(void()) sprites_irq() -- _deref_pptc1=pprc2
// Set the IRQ routine
lda #<sprites_irq
sta HARDWARE_IRQ
lda #>sprites_irq
sta HARDWARE_IRQ+1
//SEG1073 asm { cli }
cli
//SEG1074 sprites_irq_init::@return
//SEG1075 [481] return
rts
}
//SEG1076 sprites_init
// Setup the sprites
sprites_init: {
.label xpos = 2
//SEG1077 [482] *((const byte*) SPRITES_ENABLE#0) ← (byte/signed byte/word/signed word/dword/signed dword) $f -- _deref_pbuc1=vbuc2
lda #$f
sta SPRITES_ENABLE
//SEG1078 [483] *((const byte*) SPRITES_MC#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- _deref_pbuc1=vbuc2
lda #0
sta SPRITES_MC
//SEG1079 [484] *((const byte*) SPRITES_EXPAND_Y#0) ← *((const byte*) SPRITES_MC#0) -- _deref_pbuc1=_deref_pbuc2
sta SPRITES_EXPAND_Y
//SEG1080 [485] *((const byte*) SPRITES_EXPAND_X#0) ← *((const byte*) SPRITES_EXPAND_Y#0) -- _deref_pbuc1=_deref_pbuc2
sta SPRITES_EXPAND_X
//SEG1081 [486] phi from sprites_init to sprites_init::@1 [phi:sprites_init->sprites_init::@1]
//SEG1082 [486] phi (byte) sprites_init::xpos#2 = (byte/signed byte/word/signed word/dword/signed dword) $18+(byte/signed byte/word/signed word/dword/signed dword) $f*(byte/signed byte/word/signed word/dword/signed dword) 8 [phi:sprites_init->sprites_init::@1#0] -- vbuz1=vbuc1
lda #$18+$f*8
sta xpos
//SEG1083 [486] phi (byte) sprites_init::s#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sprites_init->sprites_init::@1#1] -- vbuyy=vbuc1
ldy #0
//SEG1084 [486] phi from sprites_init::@1 to sprites_init::@1 [phi:sprites_init::@1->sprites_init::@1]
//SEG1085 [486] phi (byte) sprites_init::xpos#2 = (byte) sprites_init::xpos#1 [phi:sprites_init::@1->sprites_init::@1#0] -- register_copy
//SEG1086 [486] phi (byte) sprites_init::s#2 = (byte) sprites_init::s#1 [phi:sprites_init::@1->sprites_init::@1#1] -- register_copy
//SEG1087 sprites_init::@1
b1:
//SEG1088 [487] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuxx=vbuyy_rol_1
tya
asl
tax
//SEG1089 [488] *((const byte*) SPRITES_XPOS#0 + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2 -- pbuc1_derefidx_vbuxx=vbuz1
lda xpos
sta SPRITES_XPOS,x
//SEG1090 [489] *((const byte*) SPRITES_COLS#0 + (byte) sprites_init::s#2) ← (const byte) BLACK#0 -- pbuc1_derefidx_vbuyy=vbuc2
lda #BLACK
sta SPRITES_COLS,y
//SEG1091 [490] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte/signed byte/word/signed word/dword/signed dword) $18 -- vbuz1=vbuz1_plus_vbuc1
lax xpos
axs #-[$18]
stx xpos
//SEG1092 [491] (byte) sprites_init::s#1 ← ++ (byte) sprites_init::s#2 -- vbuyy=_inc_vbuyy
iny
//SEG1093 [492] if((byte) sprites_init::s#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto sprites_init::@1 -- vbuyy_neq_vbuc1_then_la1
cpy #4
bne b1
//SEG1094 sprites_init::@return
//SEG1095 [493] return
rts
}
//SEG1096 render_init
// Initialize rendering
render_init: {
.const vicSelectGfxBank1_toDd001_return = 3^(>PLAYFIELD_CHARSET)/$40
.label li_1 = 5
.label li_2 = 7
//SEG1097 render_init::vicSelectGfxBank1
//SEG1098 [495] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte/signed byte/word/signed word/dword/signed dword) 3 -- _deref_pbuc1=vbuc2
lda #3
sta CIA2_PORT_A_DDR
//SEG1099 [496] phi from render_init::vicSelectGfxBank1 to render_init::vicSelectGfxBank1_toDd001 [phi:render_init::vicSelectGfxBank1->render_init::vicSelectGfxBank1_toDd001]
//SEG1100 render_init::vicSelectGfxBank1_toDd001
//SEG1101 render_init::vicSelectGfxBank1_@1
//SEG1102 [497] *((const byte*) CIA2_PORT_A#0) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2
lda #vicSelectGfxBank1_toDd001_return
sta CIA2_PORT_A
//SEG1103 render_init::@2
//SEG1104 [498] *((const byte*) D011#0) ← (const byte) VIC_ECM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte/signed byte/word/signed word/dword/signed dword) 3 -- _deref_pbuc1=vbuc2
// Enable Extended Background Color Mode
lda #VIC_ECM|VIC_DEN|VIC_RSEL|3
sta D011
//SEG1105 [499] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 -- _deref_pbuc1=vbuc2
lda #BLACK
sta BORDERCOL
//SEG1106 [500] *((const byte*) BGCOL1#0) ← (const byte) BLACK#0 -- _deref_pbuc1=vbuc2
sta BGCOL1
//SEG1107 [501] *((const byte*) BGCOL2#0) ← *((const byte[]) PIECES_COLORS_1#0) -- _deref_pbuc1=_deref_pbuc2
lda PIECES_COLORS_1
sta BGCOL2
//SEG1108 [502] *((const byte*) BGCOL3#0) ← *((const byte[]) PIECES_COLORS_2#0) -- _deref_pbuc1=_deref_pbuc2
lda PIECES_COLORS_2
sta BGCOL3
//SEG1109 [503] *((const byte*) BGCOL4#0) ← (const byte) GREY#0 -- _deref_pbuc1=vbuc2
lda #GREY
sta BGCOL4
//SEG1110 [504] call render_screen_original
//SEG1111 [517] phi from render_init::@2 to render_screen_original [phi:render_init::@2->render_screen_original]
//SEG1112 [517] phi (byte*) render_screen_original::screen#9 = (const byte*) PLAYFIELD_SCREEN_1#0 [phi:render_init::@2->render_screen_original#0] -- pbuz1=pbuc1
lda #<PLAYFIELD_SCREEN_1
sta render_screen_original.screen
lda #>PLAYFIELD_SCREEN_1
sta render_screen_original.screen+1
jsr render_screen_original
//SEG1113 [505] phi from render_init::@2 to render_init::@3 [phi:render_init::@2->render_init::@3]
//SEG1114 render_init::@3
//SEG1115 [506] call render_screen_original
//SEG1116 [517] phi from render_init::@3 to render_screen_original [phi:render_init::@3->render_screen_original]
//SEG1117 [517] phi (byte*) render_screen_original::screen#9 = (const byte*) PLAYFIELD_SCREEN_2#0 [phi:render_init::@3->render_screen_original#0] -- pbuz1=pbuc1
lda #<PLAYFIELD_SCREEN_2
sta render_screen_original.screen
lda #>PLAYFIELD_SCREEN_2
sta render_screen_original.screen+1
jsr render_screen_original
//SEG1118 [507] phi from render_init::@3 to render_init::@1 [phi:render_init::@3->render_init::@1]
//SEG1119 [507] phi (byte*) render_init::li_2#2 = (const byte*) PLAYFIELD_SCREEN_2#0+(byte/signed byte/word/signed word/dword/signed dword) 2*(byte/signed byte/word/signed word/dword/signed dword) $28+(byte/signed byte/word/signed word/dword/signed dword) $10 [phi:render_init::@3->render_init::@1#0] -- pbuz1=pbuc1
lda #<PLAYFIELD_SCREEN_2+2*$28+$10
sta li_2
lda #>PLAYFIELD_SCREEN_2+2*$28+$10
sta li_2+1
//SEG1120 [507] phi (byte*) render_init::li_1#2 = (const byte*) PLAYFIELD_SCREEN_1#0+(byte/signed byte/word/signed word/dword/signed dword) 2*(byte/signed byte/word/signed word/dword/signed dword) $28+(byte/signed byte/word/signed word/dword/signed dword) $10 [phi:render_init::@3->render_init::@1#1] -- pbuz1=pbuc1
lda #<PLAYFIELD_SCREEN_1+2*$28+$10
sta li_1
lda #>PLAYFIELD_SCREEN_1+2*$28+$10
sta li_1+1
//SEG1121 [507] phi (byte) render_init::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render_init::@3->render_init::@1#2] -- vbuxx=vbuc1
ldx #0
//SEG1122 [507] phi from render_init::@1 to render_init::@1 [phi:render_init::@1->render_init::@1]
//SEG1123 [507] phi (byte*) render_init::li_2#2 = (byte*) render_init::li_2#1 [phi:render_init::@1->render_init::@1#0] -- register_copy
//SEG1124 [507] phi (byte*) render_init::li_1#2 = (byte*) render_init::li_1#1 [phi:render_init::@1->render_init::@1#1] -- register_copy
//SEG1125 [507] phi (byte) render_init::i#2 = (byte) render_init::i#1 [phi:render_init::@1->render_init::@1#2] -- register_copy
//SEG1126 render_init::@1
b1:
//SEG1127 [508] (byte~) render_init::$13 ← (byte) render_init::i#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuaa=vbuxx_rol_1
txa
asl
//SEG1128 [509] *((const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_init::$13) ← (byte*) render_init::li_1#2 -- pptc1_derefidx_vbuaa=pbuz1
tay
lda li_1
sta screen_lines_1,y
lda li_1+1
sta screen_lines_1+1,y
//SEG1129 [510] (byte~) render_init::$14 ← (byte) render_init::i#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuaa=vbuxx_rol_1
txa
asl
//SEG1130 [511] *((const byte*[PLAYFIELD_LINES#0]) screen_lines_2#0 + (byte~) render_init::$14) ← (byte*) render_init::li_2#2 -- pptc1_derefidx_vbuaa=pbuz1
tay
lda li_2
sta screen_lines_2,y
lda li_2+1
sta screen_lines_2+1,y
//SEG1131 [512] (byte*) render_init::li_1#1 ← (byte*) render_init::li_1#2 + (byte/signed byte/word/signed word/dword/signed dword) $28 -- pbuz1=pbuz1_plus_vbuc1
lda #$28
clc
adc li_1
sta li_1
bcc !+
inc li_1+1
!:
//SEG1132 [513] (byte*) render_init::li_2#1 ← (byte*) render_init::li_2#2 + (byte/signed byte/word/signed word/dword/signed dword) $28 -- pbuz1=pbuz1_plus_vbuc1
lda #$28
clc
adc li_2
sta li_2
bcc !+
inc li_2+1
!:
//SEG1133 [514] (byte) render_init::i#1 ← ++ (byte) render_init::i#2 -- vbuxx=_inc_vbuxx
inx
//SEG1134 [515] if((byte) render_init::i#1!=(const byte) PLAYFIELD_LINES#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto render_init::@1 -- vbuxx_neq_vbuc1_then_la1
cpx #PLAYFIELD_LINES-1+1
bne b1
//SEG1135 render_init::@return
//SEG1136 [516] return
rts
}
//SEG1137 render_screen_original
// Copy the original screen data to the passed screen
// Also copies colors to $d800
// render_screen_original(byte* zeropage($11) screen)
render_screen_original: {
.const SPACE = 0
.label screen = $11
.label cols = $1a
.label oscr = 5
.label ocols = 7
.label y = 2
//SEG1138 [518] phi from render_screen_original to render_screen_original::@1 [phi:render_screen_original->render_screen_original::@1]
//SEG1139 [518] phi (byte) render_screen_original::y#6 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render_screen_original->render_screen_original::@1#0] -- vbuz1=vbuc1
lda #0
sta y
//SEG1140 [518] phi (byte*) render_screen_original::ocols#4 = (const byte*) PLAYFIELD_COLORS_ORIGINAL#0+(byte/signed byte/word/signed word/dword/signed dword) $20*(byte/signed byte/word/signed word/dword/signed dword) 2 [phi:render_screen_original->render_screen_original::@1#1] -- pbuz1=pbuc1
lda #<PLAYFIELD_COLORS_ORIGINAL+$20*2
sta ocols
lda #>PLAYFIELD_COLORS_ORIGINAL+$20*2
sta ocols+1
//SEG1141 [518] phi (byte*) render_screen_original::oscr#4 = (const byte*) PLAYFIELD_SCREEN_ORIGINAL#0+(byte/signed byte/word/signed word/dword/signed dword) $20*(byte/signed byte/word/signed word/dword/signed dword) 2 [phi:render_screen_original->render_screen_original::@1#2] -- pbuz1=pbuc1
lda #<PLAYFIELD_SCREEN_ORIGINAL+$20*2
sta oscr
lda #>PLAYFIELD_SCREEN_ORIGINAL+$20*2
sta oscr+1
//SEG1142 [518] phi (byte*) render_screen_original::cols#7 = (const byte*) COLS#0 [phi:render_screen_original->render_screen_original::@1#3] -- pbuz1=pbuc1
lda #<COLS
sta cols
lda #>COLS
sta cols+1
//SEG1143 [518] phi (byte*) render_screen_original::screen#8 = (byte*) render_screen_original::screen#9 [phi:render_screen_original->render_screen_original::@1#4] -- register_copy
//SEG1144 [518] phi from render_screen_original::@5 to render_screen_original::@1 [phi:render_screen_original::@5->render_screen_original::@1]
//SEG1145 [518] phi (byte) render_screen_original::y#6 = (byte) render_screen_original::y#1 [phi:render_screen_original::@5->render_screen_original::@1#0] -- register_copy
//SEG1146 [518] phi (byte*) render_screen_original::ocols#4 = (byte*) render_screen_original::ocols#1 [phi:render_screen_original::@5->render_screen_original::@1#1] -- register_copy
//SEG1147 [518] phi (byte*) render_screen_original::oscr#4 = (byte*) render_screen_original::oscr#1 [phi:render_screen_original::@5->render_screen_original::@1#2] -- register_copy
//SEG1148 [518] phi (byte*) render_screen_original::cols#7 = (byte*) render_screen_original::cols#3 [phi:render_screen_original::@5->render_screen_original::@1#3] -- register_copy
//SEG1149 [518] phi (byte*) render_screen_original::screen#8 = (byte*) render_screen_original::screen#10 [phi:render_screen_original::@5->render_screen_original::@1#4] -- register_copy
//SEG1150 render_screen_original::@1
b1:
//SEG1151 [519] phi from render_screen_original::@1 to render_screen_original::@2 [phi:render_screen_original::@1->render_screen_original::@2]
//SEG1152 [519] phi (byte) render_screen_original::x#4 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render_screen_original::@1->render_screen_original::@2#0] -- vbuxx=vbuc1
ldx #0
//SEG1153 [519] phi (byte*) render_screen_original::cols#4 = (byte*) render_screen_original::cols#7 [phi:render_screen_original::@1->render_screen_original::@2#1] -- register_copy
//SEG1154 [519] phi (byte*) render_screen_original::screen#5 = (byte*) render_screen_original::screen#8 [phi:render_screen_original::@1->render_screen_original::@2#2] -- register_copy
//SEG1155 [519] phi from render_screen_original::@2 to render_screen_original::@2 [phi:render_screen_original::@2->render_screen_original::@2]
//SEG1156 [519] phi (byte) render_screen_original::x#4 = (byte) render_screen_original::x#1 [phi:render_screen_original::@2->render_screen_original::@2#0] -- register_copy
//SEG1157 [519] phi (byte*) render_screen_original::cols#4 = (byte*) render_screen_original::cols#1 [phi:render_screen_original::@2->render_screen_original::@2#1] -- register_copy
//SEG1158 [519] phi (byte*) render_screen_original::screen#5 = (byte*) render_screen_original::screen#2 [phi:render_screen_original::@2->render_screen_original::@2#2] -- register_copy
//SEG1159 render_screen_original::@2
b2:
//SEG1160 [520] *((byte*) render_screen_original::screen#5) ← (const byte) render_screen_original::SPACE#0 -- _deref_pbuz1=vbuc1
lda #SPACE
ldy #0
sta (screen),y
//SEG1161 [521] (byte*) render_screen_original::screen#2 ← ++ (byte*) render_screen_original::screen#5 -- pbuz1=_inc_pbuz1
inc screen
bne !+
inc screen+1
!:
//SEG1162 [522] *((byte*) render_screen_original::cols#4) ← (const byte) BLACK#0 -- _deref_pbuz1=vbuc1
lda #BLACK
ldy #0
sta (cols),y
//SEG1163 [523] (byte*) render_screen_original::cols#1 ← ++ (byte*) render_screen_original::cols#4 -- pbuz1=_inc_pbuz1
inc cols
bne !+
inc cols+1
!:
//SEG1164 [524] (byte) render_screen_original::x#1 ← ++ (byte) render_screen_original::x#4 -- vbuxx=_inc_vbuxx
inx
//SEG1165 [525] if((byte) render_screen_original::x#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto render_screen_original::@2 -- vbuxx_neq_vbuc1_then_la1
cpx #4
bne b2
//SEG1166 [526] phi from render_screen_original::@2 render_screen_original::@3 to render_screen_original::@3 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3]
//SEG1167 [526] phi (byte) render_screen_original::x#5 = (byte) render_screen_original::x#1 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#0] -- register_copy
//SEG1168 [526] phi (byte*) render_screen_original::cols#5 = (byte*) render_screen_original::cols#1 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#1] -- register_copy
//SEG1169 [526] phi (byte*) render_screen_original::ocols#2 = (byte*) render_screen_original::ocols#4 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#2] -- register_copy
//SEG1170 [526] phi (byte*) render_screen_original::screen#6 = (byte*) render_screen_original::screen#2 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#3] -- register_copy
//SEG1171 [526] phi (byte*) render_screen_original::oscr#2 = (byte*) render_screen_original::oscr#4 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#4] -- register_copy
//SEG1172 render_screen_original::@3
b3:
//SEG1173 [527] *((byte*) render_screen_original::screen#6) ← *((byte*) render_screen_original::oscr#2) -- _deref_pbuz1=_deref_pbuz2
ldy #0
lda (oscr),y
sta (screen),y
//SEG1174 [528] (byte*) render_screen_original::screen#3 ← ++ (byte*) render_screen_original::screen#6 -- pbuz1=_inc_pbuz1
inc screen
bne !+
inc screen+1
!:
//SEG1175 [529] (byte*) render_screen_original::oscr#1 ← ++ (byte*) render_screen_original::oscr#2 -- pbuz1=_inc_pbuz1
inc oscr
bne !+
inc oscr+1
!:
//SEG1176 [530] *((byte*) render_screen_original::cols#5) ← *((byte*) render_screen_original::ocols#2) -- _deref_pbuz1=_deref_pbuz2
ldy #0
lda (ocols),y
sta (cols),y
//SEG1177 [531] (byte*) render_screen_original::cols#2 ← ++ (byte*) render_screen_original::cols#5 -- pbuz1=_inc_pbuz1
inc cols
bne !+
inc cols+1
!:
//SEG1178 [532] (byte*) render_screen_original::ocols#1 ← ++ (byte*) render_screen_original::ocols#2 -- pbuz1=_inc_pbuz1
inc ocols
bne !+
inc ocols+1
!:
//SEG1179 [533] (byte) render_screen_original::x#2 ← ++ (byte) render_screen_original::x#5 -- vbuxx=_inc_vbuxx
inx
//SEG1180 [534] if((byte) render_screen_original::x#2!=(byte/signed byte/word/signed word/dword/signed dword) $24) goto render_screen_original::@3 -- vbuxx_neq_vbuc1_then_la1
cpx #$24
bne b3
//SEG1181 [535] phi from render_screen_original::@3 render_screen_original::@4 to render_screen_original::@4 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4]
//SEG1182 [535] phi (byte) render_screen_original::x#6 = (byte) render_screen_original::x#2 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4#0] -- register_copy
//SEG1183 [535] phi (byte*) render_screen_original::cols#6 = (byte*) render_screen_original::cols#2 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4#1] -- register_copy
//SEG1184 [535] phi (byte*) render_screen_original::screen#7 = (byte*) render_screen_original::screen#3 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4#2] -- register_copy
//SEG1185 render_screen_original::@4
b4:
//SEG1186 [536] *((byte*) render_screen_original::screen#7) ← (const byte) render_screen_original::SPACE#0 -- _deref_pbuz1=vbuc1
lda #SPACE
ldy #0
sta (screen),y
//SEG1187 [537] (byte*) render_screen_original::screen#10 ← ++ (byte*) render_screen_original::screen#7 -- pbuz1=_inc_pbuz1
inc screen
bne !+
inc screen+1
!:
//SEG1188 [538] *((byte*) render_screen_original::cols#6) ← (const byte) BLACK#0 -- _deref_pbuz1=vbuc1
lda #BLACK
ldy #0
sta (cols),y
//SEG1189 [539] (byte*) render_screen_original::cols#3 ← ++ (byte*) render_screen_original::cols#6 -- pbuz1=_inc_pbuz1
inc cols
bne !+
inc cols+1
!:
//SEG1190 [540] (byte) render_screen_original::x#3 ← ++ (byte) render_screen_original::x#6 -- vbuxx=_inc_vbuxx
inx
//SEG1191 [541] if((byte) render_screen_original::x#3!=(byte/signed byte/word/signed word/dword/signed dword) $28) goto render_screen_original::@4 -- vbuxx_neq_vbuc1_then_la1
cpx #$28
bne b4
//SEG1192 render_screen_original::@5
//SEG1193 [542] (byte) render_screen_original::y#1 ← ++ (byte) render_screen_original::y#6 -- vbuz1=_inc_vbuz1
inc y
//SEG1194 [543] if((byte) render_screen_original::y#1!=(byte/signed byte/word/signed word/dword/signed dword) $19) goto render_screen_original::@1 -- vbuz1_neq_vbuc1_then_la1
lda #$19
cmp y
bne b1
//SEG1195 render_screen_original::@return
//SEG1196 [544] return
rts
}
//SEG1197 sid_rnd_init
// Initialize SID voice 3 for random number generation
sid_rnd_init: {
//SEG1198 [545] *((const word*) SID_VOICE3_FREQ#0) ← (word/dword/signed dword) $ffff -- _deref_pwuc1=vwuc2
lda #<$ffff
sta SID_VOICE3_FREQ
lda #>$ffff
sta SID_VOICE3_FREQ+1
//SEG1199 [546] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 -- _deref_pbuc1=vbuc2
lda #SID_CONTROL_NOISE
sta SID_VOICE3_CONTROL
//SEG1200 sid_rnd_init::@return
//SEG1201 [547] return
rts
}
//SEG1202 sprites_irq
// Raster Interrupt Routine - sets up the sprites covering the playfield
// Repeats 10 timers every 2 lines from line IRQ_RASTER_FIRST
// Utilizes duplicated gfx in the sprites to allow for some leeway in updating the sprite pointers
sprites_irq: {
.const toSpritePtr2_return = PLAYFIELD_SPRITES/$40
.label raster_sprite_gfx_modify = $24
//SEG1203 entry interrupt(HARDWARE_CLOBBER)
sta rega+1
stx regx+1
//SEG1204 asm { cld }
//(*BGCOL)++;
// Clear decimal flag (because it is used by the score algorithm)
cld
//SEG1205 [549] (byte) sprites_irq::ypos#0 ← (byte) irq_sprite_ypos#0 -- vbuaa=vbuz1
// Place the sprites
lda irq_sprite_ypos
//SEG1206 [550] *((const byte*) SPRITES_YPOS#0) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuaa
sta SPRITES_YPOS
//SEG1207 [551] *((const byte*) SPRITES_YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuaa
sta SPRITES_YPOS+2
//SEG1208 [552] *((const byte*) SPRITES_YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 4) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuaa
sta SPRITES_YPOS+4
//SEG1209 [553] *((const byte*) SPRITES_YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 6) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuaa
sta SPRITES_YPOS+6
//SEG1210 [554] (byte/signed word/word/dword/signed dword~) sprites_irq::$0 ← (byte) irq_raster_next#0 + (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuxx=vbuz1_plus_1
ldx irq_raster_next
inx
//SEG1211 [555] (byte) sprites_irq::raster_sprite_gfx_modify#0 ← (byte/signed word/word/dword/signed dword~) sprites_irq::$0 -- vbuz1=vbuxx
// Wait for the y-position before changing sprite pointers
stx raster_sprite_gfx_modify
//SEG1212 sprites_irq::@8
b8:
//SEG1213 [556] if(*((const byte*) RASTER#0)<(byte) sprites_irq::raster_sprite_gfx_modify#0) goto sprites_irq::@8 -- _deref_pbuc1_lt_vbuz1_then_la1
lda RASTER
cmp raster_sprite_gfx_modify
bcc b8
//SEG1214 sprites_irq::@9
//SEG1215 [557] (byte) sprites_irq::ptr#0 ← (byte) irq_sprite_ptr#0 -- vbuxx=vbuz1
ldx irq_sprite_ptr
//SEG1216 [558] if((byte) render_screen_showing#0==(byte/signed byte/word/signed word/dword/signed dword) 0) goto sprites_irq::@1 -- vbuz1_eq_0_then_la1
lda render_screen_showing
cmp #0
beq b1
//SEG1217 sprites_irq::@10
//SEG1218 [559] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0) ← (byte) sprites_irq::ptr#0 -- _deref_pbuc1=vbuxx
stx PLAYFIELD_SPRITE_PTRS_2
//SEG1219 [560] (byte) sprites_irq::ptr#3 ← ++ (byte) sprites_irq::ptr#0 -- vbuaa=_inc_vbuxx
inx
txa
//SEG1220 [561] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte) sprites_irq::ptr#3 -- _deref_pbuc1=vbuaa
sta PLAYFIELD_SPRITE_PTRS_2+1
//SEG1221 [562] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte) sprites_irq::ptr#3 -- _deref_pbuc1=vbuaa
sta PLAYFIELD_SPRITE_PTRS_2+2
//SEG1222 [563] (byte) sprites_irq::ptr#4 ← ++ (byte) sprites_irq::ptr#3 -- vbuaa=_inc_vbuaa
clc
adc #1
//SEG1223 [564] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte) sprites_irq::ptr#4 -- _deref_pbuc1=vbuaa
sta PLAYFIELD_SPRITE_PTRS_2+3
//SEG1224 sprites_irq::@2
b2:
//SEG1225 [565] (byte) irq_cnt#1 ← ++ (byte) irq_cnt#0 -- vbuz1=_inc_vbuz1
inc irq_cnt
//SEG1226 [566] if((byte) irq_cnt#1==(byte/signed byte/word/signed word/dword/signed dword) 9) goto sprites_irq::@3 -- vbuz1_eq_vbuc1_then_la1
lda #9
cmp irq_cnt
beq b3
//SEG1227 sprites_irq::@6
//SEG1228 [567] if((byte) irq_cnt#1==(byte/signed byte/word/signed word/dword/signed dword) $a) goto sprites_irq::@4 -- vbuz1_eq_vbuc1_then_la1
lda #$a
cmp irq_cnt
beq b4
//SEG1229 sprites_irq::@7
//SEG1230 [568] (byte) irq_raster_next#3 ← (byte) irq_raster_next#0 + (byte/signed byte/word/signed word/dword/signed dword) $14 -- vbuz1=vbuz1_plus_vbuc1
lax irq_raster_next
axs #-[$14]
stx irq_raster_next
//SEG1231 [569] (byte) irq_sprite_ypos#3 ← (byte) irq_sprite_ypos#0 + (byte/signed byte/word/signed word/dword/signed dword) $15 -- vbuz1=vbuz1_plus_vbuc1
lax irq_sprite_ypos
axs #-[$15]
stx irq_sprite_ypos
//SEG1232 [570] (byte) irq_sprite_ptr#3 ← (byte) irq_sprite_ptr#0 + (byte/signed byte/word/signed word/dword/signed dword) 3 -- vbuz1=vbuz1_plus_vbuc1
lax irq_sprite_ptr
axs #-[3]
stx irq_sprite_ptr
//SEG1233 [571] phi from sprites_irq::@11 sprites_irq::@4 sprites_irq::@7 to sprites_irq::@5 [phi:sprites_irq::@11/sprites_irq::@4/sprites_irq::@7->sprites_irq::@5]
//SEG1234 [571] phi (byte) irq_raster_next#4 = (byte) irq_raster_next#1 [phi:sprites_irq::@11/sprites_irq::@4/sprites_irq::@7->sprites_irq::@5#0] -- register_copy
//SEG1235 sprites_irq::@5
b5:
//SEG1236 [572] *((const byte*) RASTER#0) ← (byte) irq_raster_next#4 -- _deref_pbuc1=vbuz1
// Setup next interrupt
lda irq_raster_next
sta RASTER
//SEG1237 [573] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2
// Acknowledge the IRQ and setup the next one
lda #IRQ_RASTER
sta IRQ_STATUS
//SEG1238 sprites_irq::@return
//SEG1239 [574] return - exit interrupt(HARDWARE_CLOBBER)
rega:
lda #00
regx:
ldx #00
rti
//SEG1240 sprites_irq::@4
b4:
//SEG1241 [575] (byte) irq_cnt#2 ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- vbuz1=vbuc1
lda #0
sta irq_cnt
//SEG1242 [576] (byte) irq_raster_next#2 ← (const byte) IRQ_RASTER_FIRST#0 -- vbuz1=vbuc1
lda #IRQ_RASTER_FIRST
sta irq_raster_next
//SEG1243 [577] (byte) irq_sprite_ypos#2 ← (byte) irq_sprite_ypos#0 + (byte/signed byte/word/signed word/dword/signed dword) $15 -- vbuz1=vbuz1_plus_vbuc1
lax irq_sprite_ypos
axs #-[$15]
stx irq_sprite_ypos
//SEG1244 [578] (byte) irq_sprite_ptr#2 ← (byte) irq_sprite_ptr#0 + (byte/signed byte/word/signed word/dword/signed dword) 3 -- vbuz1=vbuz1_plus_vbuc1
lax irq_sprite_ptr
axs #-[3]
stx irq_sprite_ptr
jmp b5
//SEG1245 sprites_irq::@3
b3:
//SEG1246 [579] (byte) irq_raster_next#1 ← (byte) irq_raster_next#0 + (byte/signed byte/word/signed word/dword/signed dword) $15 -- vbuz1=vbuz1_plus_vbuc1
lax irq_raster_next
axs #-[$15]
stx irq_raster_next
//SEG1247 [580] (byte) irq_sprite_ypos#1 ← (const byte) SPRITES_FIRST_YPOS#0 -- vbuz1=vbuc1
lda #SPRITES_FIRST_YPOS
sta irq_sprite_ypos
//SEG1248 [581] phi from sprites_irq::@3 to sprites_irq::toSpritePtr2 [phi:sprites_irq::@3->sprites_irq::toSpritePtr2]
//SEG1249 sprites_irq::toSpritePtr2
//SEG1250 sprites_irq::@11
//SEG1251 [582] (byte) irq_sprite_ptr#1 ← (const byte) sprites_irq::toSpritePtr2_return#0 -- vbuz1=vbuc1
lda #toSpritePtr2_return
sta irq_sprite_ptr
jmp b5
//SEG1252 sprites_irq::@1
b1:
//SEG1253 [583] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0) ← (byte) sprites_irq::ptr#0 -- _deref_pbuc1=vbuxx
stx PLAYFIELD_SPRITE_PTRS_1
//SEG1254 [584] (byte) sprites_irq::ptr#1 ← ++ (byte) sprites_irq::ptr#0 -- vbuxx=_inc_vbuxx
inx
//SEG1255 [585] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte) sprites_irq::ptr#1 -- _deref_pbuc1=vbuxx
stx PLAYFIELD_SPRITE_PTRS_1+1
//SEG1256 [586] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte) sprites_irq::ptr#1 -- _deref_pbuc1=vbuxx
stx PLAYFIELD_SPRITE_PTRS_1+2
//SEG1257 [587] (byte) sprites_irq::ptr#2 ← ++ (byte) sprites_irq::ptr#1 -- vbuaa=_inc_vbuxx
inx
txa
//SEG1258 [588] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte) sprites_irq::ptr#2 -- _deref_pbuc1=vbuaa
sta PLAYFIELD_SPRITE_PTRS_1+3
jmp b2
}
// Keyboard row bitmask as expected by CIA#1 Port A when reading a specific keyboard matrix row (rows are numbered 0-7)
keyboard_matrix_row_bitmask: .byte $fe, $fd, $fb, $f7, $ef, $df, $bf, $7f
// Keyboard matrix column bitmasks for a specific keybooard matrix column when reading the keyboard. (columns are numbered 0-7)
keyboard_matrix_col_bitmask: .byte 1, 2, 4, 8, $10, $20, $40, $80
// Keyboard event buffer. Contains keycodes for key presses/releases. Presses are represented by the keycode. Releases by keycode | $40. The buffer is filled by keyboard_scan()
keyboard_events: .fill 8, 0
// The values scanned values for each row. Set by keyboard_scan() and used by keyboard_get_event()
keyboard_scan_values: .fill 8, 0
// The T-piece
.align $40
PIECE_T: .byte 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0
// The S-piece
.align $40
PIECE_S: .byte 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0
// The Z-piece
.align $40
PIECE_Z: .byte 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0
// The L-piece
.align $40
PIECE_L: .byte 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0
// The J-piece
.align $40
PIECE_J: .byte 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0
// The O-piece
.align $40
PIECE_O: .byte 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0
// The I-piece
.align $40
PIECE_I: .byte 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0
// The chars to use for the different pieces - when inside the playing area
PIECES_CHARS: .byte $65, $66, $a6, $66, $65, $65, $a6
// The chars to use for the different pieces - when outside the playing area (eg. the next area).
PIECES_NEXT_CHARS: .byte $63, $64, $a4, $64, $63, $63, $a4
// The initial X/Y for each piece
PIECES_START_X: .byte 4, 4, 4, 4, 4, 4, 4
PIECES_START_Y: .byte 1, 1, 1, 1, 1, 0, 1
// The speed of moving down the piece when soft-drop is not activated
// This array holds the number of frames per move by level (0-29). For all levels 29+ the value is 1.
MOVEDOWN_SLOW_SPEEDS: .byte $30, $2b, $26, $21, $1c, $17, $12, $d, 8, 6, 5, 5, 5, 4, 4, 4, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1
// Base Score values for removing 0-4 lines (in BCD)
// These values are added to score_add_bcd for each level gained.
SCORE_BASE_BCD: .dword 0, $40, $100, $300, $1200
// Score values for removing 0-4 lines (in BCD)
// These values are updated based on the players level and the base values from SCORE_BASE_BCD
score_add_bcd: .fill 4*5, 0
// The color #1 to use for the pieces for each level
PIECES_COLORS_1: .byte BLUE, GREEN, PURPLE, BLUE, RED, LIGHT_GREEN, RED, BLUE, LIGHT_BLUE, RED, BLUE, GREEN, PURPLE, BLUE, RED, LIGHT_GREEN, RED, BLUE, LIGHT_BLUE, RED, BLUE, GREEN, PURPLE, BLUE, RED, LIGHT_GREEN, RED, BLUE, LIGHT_BLUE, RED
// The color #2 to use for the pieces for each level
PIECES_COLORS_2: .byte CYAN, LIGHT_GREEN, PINK, LIGHT_GREEN, LIGHT_GREEN, LIGHT_BLUE, DARK_GREY, PURPLE, RED, ORANGE, CYAN, LIGHT_GREEN, PINK, LIGHT_GREEN, LIGHT_GREEN, LIGHT_BLUE, DARK_GREY, PURPLE, RED, ORANGE, CYAN, LIGHT_GREEN, PINK, LIGHT_GREEN, LIGHT_GREEN, LIGHT_BLUE, DARK_GREY, PURPLE, RED, ORANGE
// Pointers to the screen address for rendering each playfield line
// The lines for screen 1 is aligned with $80 and screen 2 with $40 - so XOR'ing with $40 gives screen 2 lines.
.align $80
screen_lines_1: .fill 2*PLAYFIELD_LINES, 0
.align $40
screen_lines_2: .fill 2*PLAYFIELD_LINES, 0
// Pointers to the playfield address for each playfield line
playfield_lines: .fill 2*PLAYFIELD_LINES, 0
// The playfield. 0 is empty non-zero is color.
// The playfield is layed out line by line, meaning the first 10 bytes are line 1, the next 10 line 2 and so forth,
playfield: .fill PLAYFIELD_LINES*PLAYFIELD_COLS, 0
// The different pieces
PIECES: .word PIECE_T, PIECE_S, PIECE_Z, PIECE_J, PIECE_O, PIECE_I, PIECE_L
// Indixes into the playfield for each playfield line
playfield_lines_idx: .fill PLAYFIELD_LINES+1, 0
.pc = PLAYFIELD_CHARSET "PLAYFIELD_CHARSET"
.fill 8,$00 // Place a filled char at the start of the charset
.import binary "playfield-screen.imap"
.pc = PLAYFIELD_SCREEN_ORIGINAL "PLAYFIELD_SCREEN_ORIGINAL"
// Load chars for the screen
.var screen = LoadBinary("playfield-screen.iscr")
// Load extended colors for the screen
.var extended = LoadBinary("playfield-extended.col")
// screen.get(i)+1 because the charset is loaded into PLAYFIELD_CHARSET+8
// extended.get(i)-1 because the extended colors are 1-based (1/2/3/4)
// <<6 to move extended colors to the upper 2 bits
.fill screen.getSize(), ( (screen.get(i)+1) | (extended.get(i)-1)<<6 )
.pc = PLAYFIELD_COLORS_ORIGINAL "PLAYFIELD_COLORS_ORIGINAL"
.import binary "playfield-screen.col"
.pc = PLAYFIELD_SPRITES "PLAYFIELD_SPRITES"
.var sprites = LoadPicture("playfield-sprites.png", List().add($010101, $000000))
// Put the sprites into memory
.for(var sy=0;sy<10;sy++) {
.var sprite_gfx_y = sy*20
.for(var sx=0;sx<3;sx++) {
.for (var y=0;y<21; y++) {
.var gfx_y = sprite_gfx_y + mod(2100+y-sprite_gfx_y,21)
.for (var c=0; c<3; c++) {
.byte sprites.getSinglecolorByte(sx*3+c,gfx_y)
}
}
.byte 0
}
}