1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-09-08 02:54:41 +00:00

Working on Tetris.

This commit is contained in:
jespergravgaard 2018-12-02 23:10:02 +01:00
parent 44e2075896
commit eaa8d0c3fc
6 changed files with 6540 additions and 5929 deletions

View File

@ -49,7 +49,7 @@ public class TestPrograms {
compileAndCompare("examples/tetris/tetris");
}
/*
/*
@Test
public void testVarInitProblem() throws IOException, URISyntaxException {
compileAndCompare("var-init-problem");
@ -64,8 +64,8 @@ public class TestPrograms {
public void testTetrisNullPointer() throws IOException, URISyntaxException {
compileAndCompare("tetris-npe");
}
*/
*/
@Test
public void testFastMultiply8() throws IOException, URISyntaxException {
compileAndCompare("examples/fastmultiply/fastmultiply8.kc");

View File

@ -60,8 +60,9 @@ void main() {
keyboard_event_scan();
byte key_event = keyboard_event_get();
byte render = 0;
render += play_movedown(key_event);
render += play_moveother(key_event);
render += play_move_down(key_event);
render += play_move_leftright(key_event);
render += play_move_rotate(key_event);
if(render!=0) {
(*BORDERCOL)++;
render_playfield();
@ -74,7 +75,7 @@ void main() {
// Move down the current piece
// Return non-zero if a render is needed
byte play_movedown(byte key_event) {
byte play_move_down(byte key_event) {
// Handle moving down current piece
++current_movedown_counter;
byte movedown = 0;
@ -94,7 +95,7 @@ byte play_movedown(byte key_event) {
}
// Attempt movedown
if(movedown!=0) {
if(collision(current_ypos+1, current_xpos)==COLLISION_NONE) {
if(collision(current_xpos,current_ypos+1,current_piece_orientation)==COLLISION_NONE) {
// Move current piece down
current_ypos++;
} else {
@ -109,6 +110,44 @@ byte play_movedown(byte key_event) {
return 0;
}
// Move left/right or rotate the current piece
// Return non-zero if a render is needed
byte play_move_leftright(byte key_event) {
// Handle keyboard events
if(key_event==KEY_COMMA) {
if(collision(current_xpos-1,current_ypos,current_piece_orientation)==COLLISION_NONE) {
current_xpos--;
return 1;
}
} else if(key_event==KEY_DOT) {
if(collision(current_xpos+1,current_ypos,current_piece_orientation)==COLLISION_NONE) {
current_xpos++;
return 1;
}
}
return 0;
}
// Rotate the current piece based on key-presses
// Return non-zero if a render is needed
byte play_move_rotate(byte key_event) {
// Handle keyboard events
byte orientation = $80;
if(key_event==KEY_Z) {
orientation = (current_piece_orientation-$10)&$3f;
} else if(key_event==KEY_X) {
orientation = (current_piece_orientation+$10)&$3f;
} else {
return 0;
}
if((collision(current_xpos, current_ypos, orientation) & (COLLISION_LEFT|COLLISION_RIGHT)) == 0) {
current_piece_orientation = orientation;
current_piece_gfx = current_piece + current_piece_orientation;
return 1;
}
return 0;
}
// No collision
const byte COLLISION_NONE = 0;
// Playfield piece collision (cell on top of other cell on the playfield)
@ -122,18 +161,19 @@ const byte COLLISION_RIGHT = 8;
// 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
byte collision(byte ypos, byte xpos) {
byte collision(byte xpos, byte ypos, byte orientation) {
byte* piece_gfx = current_piece + orientation;
byte i = 0;
for(byte l:0..3) {
byte line = ypos + l;
byte* playfield_line = playfield_lines[line<<1];
byte ypos2 = ypos<<1;
for(byte l:0..3) {
byte* playfield_line = playfield_lines[ypos2];
byte col = xpos;
for(byte c:0..3) {
if(current_piece_gfx[i++]!=0) {
if(line>=PLAYFIELD_LINES) {
if(piece_gfx[i++]!=0) {
if(ypos2>=2*PLAYFIELD_LINES) {
// Below the playfield bottom
return COLLISION_BOTTOM;
}
byte col = xpos+c;
if((col&$80)!=0) {
// Beyond left side of the playfield
return COLLISION_LEFT;
@ -147,7 +187,9 @@ byte collision(byte ypos, byte xpos) {
return COLLISION_PLAYFIELD;
}
}
col++;
}
ypos2 += 2;
}
return COLLISION_NONE;
}
@ -178,36 +220,6 @@ void spawn_current() {
current_ypos = 0;
}
// Move left/right or rotate the current piece
// Return non-zero if a render is needed
byte play_moveother(byte key_event) {
byte render = 0;
// Handle other keyboard events
if((key_event&$80)==0) {
// New keyboard event
if(key_event==KEY_COMMA) {
if(collision(current_ypos,current_xpos-1)==COLLISION_NONE) {
current_xpos--;
render++;
}
} else if(key_event==KEY_DOT) {
if(collision(current_ypos,current_xpos+1)==COLLISION_NONE) {
current_xpos++;
render++;
}
} else if(key_event==KEY_Z) {
current_piece_orientation = (current_piece_orientation-$10)&$3f;
current_piece_gfx = current_piece + current_piece_orientation;
render++;
} else if(key_event==KEY_X) {
current_piece_orientation = (current_piece_orientation+$10)&$3f;
current_piece_gfx = current_piece + current_piece_orientation;
render++;
}
}
return render;
}
// Initialize the screen and data tables
void init() {
// Clear the screen
@ -242,33 +254,33 @@ void render_playfield() {
for(byte l:0..PLAYFIELD_LINES-1) {
byte* line = screen_lines[l<<1];
for(byte c:0..PLAYFIELD_COLS-1) {
*(line+c) = playfield[i++];
*(line++) = playfield[i++];
}
}
}
// Render the current moving piece at position (current_xpos, current_ypos)
void render_current() {
byte i = 0;
byte ypos2 = current_ypos<<1;
for(byte l:0..3) {
byte line = current_ypos + l;
if(line<PLAYFIELD_LINES) {
byte* screen_line = screen_lines[line<<1];
if(ypos2<2*PLAYFIELD_LINES) {
byte* screen_line = screen_lines[ypos2];
byte xpos = current_xpos;
for(byte c:0..3) {
byte current_cell = current_piece_gfx[i++];
if(current_cell!=0) {
byte xpos = current_xpos+c;
if(xpos<PLAYFIELD_COLS) {
screen_line[xpos] = current_piece_color;
}
}
xpos++;
}
}
ypos2 += 2;
}
}
// The T-piece
align($40) byte[4*4*4] piece_t = {
1, 1, 1, 0,

View File

@ -28,44 +28,42 @@
.const COLLISION_BOTTOM = 2
.const COLLISION_LEFT = 4
.const COLLISION_RIGHT = 8
.label keyboard_events_size = $12
.label keyboard_events_size = $13
.label current_ypos = 2
.label current_piece_orientation = $d
.label current_piece_gfx = $e
.label current_xpos = $11
.label current_piece = $b
.label current_piece_color = $10
.label current_xpos = $12
.label current_piece_orientation = $e
.label current_piece_gfx = $f
.label current_piece = $c
.label current_piece_color = $11
.label current_movedown_counter = 3
.label current_ypos_35 = 4
.label current_piece_gfx_46 = 5
.label current_piece_gfx_75 = 5
.label current_xpos_81 = 7
.label current_piece_color_62 = 8
.label current_ypos_75 = 4
.label current_piece_gfx_99 = 5
.label current_xpos_91 = 7
.label current_piece_color_69 = 8
.label current_piece_gfx_108 = 5
.label current_piece_gfx_109 = 5
.label current_piece_gfx_110 = 5
.label current_piece_15 = 5
.label current_xpos_62 = 4
.label current_piece_gfx_61 = 5
.label current_piece_color_63 = 7
.label current_xpos_92 = 4
.label current_piece_gfx_82 = 5
.label current_piece_color_70 = 7
.label current_piece_67 = 5
.label current_piece_68 = 5
.label current_piece_69 = 5
.label current_piece_70 = 5
jsr main
main: {
.label key_event = $a
.label render = $13
.label key_event = $14
.label render = $15
sei
jsr init
jsr spawn_current
jsr render_playfield
lda #GREEN
sta current_piece_color_62
lda #3
sta current_xpos_81
sta current_piece_color_63
lda #<piece_t
sta current_piece_gfx_75
sta current_piece_gfx_61
lda #>piece_t
sta current_piece_gfx_75+1
lda #0
sta current_ypos_35
sta current_piece_gfx_61+1
lda #3
sta current_xpos_62
ldx #0
jsr render_current
lda #0
sta current_movedown_counter
@ -97,29 +95,33 @@ main: {
jsr keyboard_event_scan
jsr keyboard_event_get
sta key_event
jsr play_movedown
jsr play_move_down
txa
clc
adc #0
sta render
ldx key_event
jsr play_moveother
lda key_event
jsr play_move_leftright
clc
adc render
sta render
lda key_event
jsr play_move_rotate
clc
adc render
cmp #0
beq b10
inc BORDERCOL
jsr render_playfield
lda current_ypos
sta current_ypos_75
lda current_piece_gfx
sta current_piece_gfx_99
lda current_piece_gfx+1
sta current_piece_gfx_99+1
ldx current_ypos
lda current_xpos
sta current_xpos_91
sta current_xpos_92
lda current_piece_gfx
sta current_piece_gfx_82
lda current_piece_gfx+1
sta current_piece_gfx_82+1
lda current_piece_color
sta current_piece_color_69
sta current_piece_color_70
jsr render_current
dec BORDERCOL
b10:
@ -127,44 +129,51 @@ main: {
jmp b4
}
render_current: {
.label ypos2 = 8
.label l = 9
.label screen_line = $14
.label screen_line = $16
.label xpos = $b
.label i = $a
txa
asl
sta ypos2
lda #0
sta i
sta l
b1:
lda current_ypos_35
clc
adc l
cmp #PLAYFIELD_LINES
lda ypos2
cmp #2*PLAYFIELD_LINES
bcs b2
asl
tay
lda screen_lines,y
sta screen_line
lda screen_lines+1,y
sta screen_line+1
lda current_xpos_62
sta xpos
ldx #0
b3:
ldy i
lda (current_piece_gfx_75),y
lda (current_piece_gfx_61),y
inc i
cmp #0
beq b4
txa
clc
adc current_xpos_81
lda xpos
cmp #PLAYFIELD_COLS
bcs b4
tay
lda current_piece_color_62
lda current_piece_color_63
ldy xpos
sta (screen_line),y
b4:
inc xpos
inx
cpx #4
bne b3
b2:
lda ypos2
clc
adc #2
sta ypos2
inc l
lda l
cmp #4
@ -172,7 +181,6 @@ render_current: {
rts
}
render_playfield: {
.label _3 = $14
.label line = 5
.label i = 7
.label l = 4
@ -189,17 +197,14 @@ render_playfield: {
sta line+1
ldx #0
b2:
txa
clc
adc line
sta _3
lda #0
adc line+1
sta _3+1
ldy i
lda playfield,y
ldy #0
sta (_3),y
sta (line),y
inc line
bne !+
inc line+1
!:
inc i
inx
cpx #PLAYFIELD_COLS-1+1
@ -210,23 +215,36 @@ render_playfield: {
bne b1
rts
}
play_moveother: {
txa
and #$80
cmp #0
bne b6
cpx #KEY_COMMA
play_move_rotate: {
.label orientation = 4
cmp #KEY_Z
beq b1
cmp #KEY_X
beq b2
cpx #KEY_DOT
beq b3
cpx #KEY_Z
beq b4
cpx #KEY_X
bne b6
b3:
lda #0
breturn:
rts
b2:
lda #$10
clc
adc current_piece_orientation
and #$3f
sta orientation
b4:
lda current_xpos
sta collision.xpos
ldy current_ypos
ldx orientation
lda current_piece
sta current_piece_70
lda current_piece+1
sta current_piece_70+1
jsr collision
and #COLLISION_LEFT|COLLISION_RIGHT
cmp #0
bne b3
lda orientation
sta current_piece_orientation
clc
adc current_piece
@ -234,123 +252,93 @@ play_moveother: {
lda #0
adc current_piece+1
sta current_piece_gfx+1
b5:
lda #1
jmp b1
b6:
lda #0
jmp breturn
b1:
rts
b4:
lda current_piece_orientation
sec
sbc #$10
and #$3f
sta current_piece_orientation
clc
adc current_piece
sta current_piece_gfx
lda #0
adc current_piece+1
sta current_piece_gfx+1
jmp b5
b3:
ldy current_xpos
iny
sty collision.xpos
lda current_ypos
sta collision.ypos
lda current_piece_gfx
sta current_piece_gfx_110
lda current_piece_gfx+1
sta current_piece_gfx_110+1
jsr collision
cmp #COLLISION_NONE
bne b6
inc current_xpos
jmp b5
b2:
ldx current_xpos
dex
stx collision.xpos
lda current_ypos
sta collision.ypos
lda current_piece_gfx
sta current_piece_gfx_109
lda current_piece_gfx+1
sta current_piece_gfx_109+1
jsr collision
cmp #COLLISION_NONE
bne b6
dec current_xpos
jmp b5
sta orientation
jmp b4
}
collision: {
.label ypos = 4
.label xpos = 7
.label line = $16
.label playfield_line = $14
.label i = $17
.label l = 8
.label i_2 = 9
.label i_3 = 9
.label i_11 = 9
.label i_13 = 9
lda #0
sta i_3
sta l
b1:
lda ypos
.label piece_gfx = 5
.label ypos2 = 8
.label playfield_line = $16
.label i = $18
.label col = $b
.label l = 9
.label i_2 = $a
.label i_3 = $a
.label i_11 = $a
.label i_13 = $a
txa
clc
adc l
sta line
adc piece_gfx
sta piece_gfx
lda #0
adc piece_gfx+1
sta piece_gfx+1
tya
asl
tay
sta ypos2
lda #0
sta l
sta i_3
b1:
ldy ypos2
lda playfield_lines,y
sta playfield_line
lda playfield_lines+1,y
sta playfield_line+1
lda xpos
sta col
ldx #0
b2:
ldy i_2
iny
sty i
ldy i_2
lda (current_piece_gfx_46),y
lda (piece_gfx),y
cmp #0
beq b3
lda line
cmp #PLAYFIELD_LINES
lda ypos2
cmp #2*PLAYFIELD_LINES
bcc b4
lda #COLLISION_BOTTOM
breturn:
rts
b4:
txa
clc
adc xpos
tay
tya
and #$80
lda #$80
and col
cmp #0
beq b5
lda #COLLISION_LEFT
jmp breturn
b5:
cpy #PLAYFIELD_COLS
lda col
cmp #PLAYFIELD_COLS
bcc b6
lda #COLLISION_RIGHT
jmp breturn
b6:
ldy col
lda (playfield_line),y
cmp #0
beq b3
lda #COLLISION_PLAYFIELD
jmp breturn
b3:
inc col
inx
cpx #4
bne b21
lda ypos2
clc
adc #2
sta ypos2
inc l
lda l
cmp #4
@ -366,7 +354,48 @@ collision: {
sta i_13
jmp b2
}
play_movedown: {
play_move_leftright: {
cmp #KEY_COMMA
beq b1
cmp #KEY_DOT
bne b3
ldy current_xpos
iny
sty collision.xpos
ldy current_ypos
ldx current_piece_orientation
lda current_piece
sta current_piece_69
lda current_piece+1
sta current_piece_69+1
jsr collision
cmp #COLLISION_NONE
bne b3
inc current_xpos
b2:
lda #1
jmp breturn
b3:
lda #0
breturn:
rts
b1:
ldx current_xpos
dex
stx collision.xpos
ldy current_ypos
ldx current_piece_orientation
lda current_piece
sta current_piece_68
lda current_piece+1
sta current_piece_68+1
jsr collision
cmp #COLLISION_NONE
bne b3
dec current_xpos
jmp b2
}
play_move_down: {
inc current_movedown_counter
cmp #KEY_SPACE
bne b3
@ -394,13 +423,13 @@ play_movedown: {
beq b5
ldy current_ypos
iny
sty collision.ypos
lda current_xpos
sta collision.xpos
lda current_piece_gfx
sta current_piece_gfx_108
lda current_piece_gfx+1
sta current_piece_gfx_108+1
ldx current_piece_orientation
lda current_piece
sta current_piece_67
lda current_piece+1
sta current_piece_67+1
jsr collision
cmp #COLLISION_NONE
beq b6
@ -593,7 +622,7 @@ keyboard_matrix_read: {
rts
}
init: {
.label _13 = $b
.label _13 = $c
.label li = 5
.label pli = 5
.label line = 5
@ -692,7 +721,7 @@ init: {
rts
}
fill: {
.label end = $b
.label end = $c
.label addr = 5
lda addr
clc

View File

@ -1,13 +1,13 @@
@begin: scope:[] from
[0] phi()
to:@20
@20: scope:[] from @begin
to:@21
@21: scope:[] from @begin
[1] phi()
[2] call main
to:@end
@end: scope:[] from @20
@end: scope:[] from @21
[3] phi()
main: scope:[main] from @20
main: scope:[main] from @21
asm { sei }
[5] call init
to:main::@21
@ -27,10 +27,10 @@ main::@1: scope:[main] from main::@10 main::@23
[12] (byte) current_movedown_counter#15 ← phi( main::@10/(byte) current_movedown_counter#12 main::@23/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[12] (byte) keyboard_events_size#19 ← phi( main::@10/(byte) keyboard_events_size#16 main::@23/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[12] (byte) current_ypos#12 ← phi( main::@10/(byte) current_ypos#16 main::@23/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[12] (byte) current_xpos#16 ← phi( main::@10/(byte) current_xpos#11 main::@23/(byte/signed byte/word/signed word/dword/signed dword) 3 )
[12] (byte) current_xpos#16 ← phi( main::@10/(byte) current_xpos#23 main::@23/(byte/signed byte/word/signed word/dword/signed dword) 3 )
[12] (byte) current_piece_color#11 ← phi( main::@10/(byte) current_piece_color#13 main::@23/(const byte) GREEN#0 )
[12] (byte*) current_piece_gfx#16 ← phi( main::@10/(byte*) current_piece_gfx#11 main::@23/(const byte[4*4*4]) piece_t#0 )
[12] (byte) current_piece_orientation#16 ← phi( main::@10/(byte) current_piece_orientation#11 main::@23/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[12] (byte*) current_piece_gfx#15 ← phi( main::@10/(byte*) current_piece_gfx#18 main::@23/(const byte[4*4*4]) piece_t#0 )
[12] (byte) current_piece_orientation#15 ← phi( main::@10/(byte) current_piece_orientation#23 main::@23/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[12] (byte*) current_piece#11 ← phi( main::@10/(byte*) current_piece#13 main::@23/(const byte[4*4*4]) piece_t#0 )
to:main::@4
main::@4: scope:[main] from main::@1 main::@4
@ -50,524 +50,557 @@ main::@25: scope:[main] from main::@9
to:main::@26
main::@26: scope:[main] from main::@25
[20] (byte) main::key_event#0 ← (byte) keyboard_event_get::return#3
[21] (byte) play_movedown::key_event#0 ← (byte) main::key_event#0
[22] call play_movedown
[23] (byte) play_movedown::return#0 ← (byte) play_movedown::return#3
[21] (byte) play_move_down::key_event#0 ← (byte) main::key_event#0
[22] call play_move_down
[23] (byte) play_move_down::return#0 ← (byte) play_move_down::return#3
to:main::@27
main::@27: scope:[main] from main::@26
[24] (byte~) main::$8 ← (byte) play_movedown::return#0
[24] (byte~) main::$8 ← (byte) play_move_down::return#0
[25] (byte) main::render#1 ← (byte/signed byte/word/signed word/dword/signed dword) 0 + (byte~) main::$8
[26] (byte) play_moveother::key_event#0 ← (byte) main::key_event#0
[27] call play_moveother
[28] (byte) play_moveother::return#0 ← (byte) play_moveother::return#1
[26] (byte) play_move_leftright::key_event#0 ← (byte) main::key_event#0
[27] call play_move_leftright
[28] (byte) play_move_leftright::return#0 ← (byte) play_move_leftright::return#2
to:main::@28
main::@28: scope:[main] from main::@27
[29] (byte~) main::$9 ← (byte) play_moveother::return#0
[29] (byte~) main::$9 ← (byte) play_move_leftright::return#0
[30] (byte) main::render#2 ← (byte) main::render#1 + (byte~) main::$9
[31] if((byte) main::render#2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@10
to:main::@19
main::@19: scope:[main] from main::@28
[32] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0)
[33] call render_playfield
[31] (byte) play_move_rotate::key_event#0 ← (byte) main::key_event#0
[32] call play_move_rotate
[33] (byte) play_move_rotate::return#0 ← (byte) play_move_rotate::return#2
to:main::@29
main::@29: scope:[main] from main::@19
[34] (byte~) current_ypos#75 ← (byte) current_ypos#16
[35] (byte*~) current_piece_gfx#99 ← (byte*) current_piece_gfx#11
[36] (byte~) current_xpos#91 ← (byte) current_xpos#11
[37] (byte~) current_piece_color#69 ← (byte) current_piece_color#13
[38] call render_current
main::@29: scope:[main] from main::@28
[34] (byte~) main::$10 ← (byte) play_move_rotate::return#0
[35] (byte) main::render#3 ← (byte) main::render#2 + (byte~) main::$10
[36] if((byte) main::render#3==(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@10
to:main::@19
main::@19: scope:[main] from main::@29
[37] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0)
[38] call render_playfield
to:main::@30
main::@30: scope:[main] from main::@29
[39] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0)
main::@30: scope:[main] from main::@19
[39] (byte~) current_ypos#72 ← (byte) current_ypos#16
[40] (byte~) current_xpos#92 ← (byte) current_xpos#23
[41] (byte*~) current_piece_gfx#82 ← (byte*) current_piece_gfx#18
[42] (byte~) current_piece_color#70 ← (byte) current_piece_color#13
[43] call render_current
to:main::@31
main::@31: scope:[main] from main::@30
[44] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0)
to:main::@10
main::@10: scope:[main] from main::@28 main::@30
[40] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0)
main::@10: scope:[main] from main::@29 main::@31
[45] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0)
to:main::@1
render_current: scope:[render_current] from main::@23 main::@29
[41] (byte) current_piece_color#62 ← phi( main::@23/(const byte) GREEN#0 main::@29/(byte~) current_piece_color#69 )
[41] (byte) current_xpos#81 ← phi( main::@23/(byte/signed byte/word/signed word/dword/signed dword) 3 main::@29/(byte~) current_xpos#91 )
[41] (byte*) current_piece_gfx#75 ← phi( main::@23/(const byte[4*4*4]) piece_t#0 main::@29/(byte*~) current_piece_gfx#99 )
[41] (byte) current_ypos#35 ← phi( main::@23/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@29/(byte~) current_ypos#75 )
render_current: scope:[render_current] from main::@23 main::@30
[46] (byte) current_piece_color#63 ← phi( main::@23/(const byte) GREEN#0 main::@30/(byte~) current_piece_color#70 )
[46] (byte*) current_piece_gfx#61 ← phi( main::@23/(const byte[4*4*4]) piece_t#0 main::@30/(byte*~) current_piece_gfx#82 )
[46] (byte) current_xpos#62 ← phi( main::@23/(byte/signed byte/word/signed word/dword/signed dword) 3 main::@30/(byte~) current_xpos#92 )
[46] (byte) current_ypos#22 ← phi( main::@23/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@30/(byte~) current_ypos#72 )
[47] (byte) render_current::ypos2#0 ← (byte) current_ypos#22 << (byte/signed byte/word/signed word/dword/signed dword) 1
to:render_current::@1
render_current::@1: scope:[render_current] from render_current render_current::@2
[42] (byte) render_current::i#4 ← phi( render_current/(byte/signed byte/word/signed word/dword/signed dword) 0 render_current::@2/(byte) render_current::i#8 )
[42] (byte) render_current::l#2 ← phi( render_current/(byte/signed byte/word/signed word/dword/signed dword) 0 render_current::@2/(byte) render_current::l#1 )
[43] (byte) render_current::line#0 ← (byte) current_ypos#35 + (byte) render_current::l#2
[44] if((byte) render_current::line#0>=(const byte) PLAYFIELD_LINES#0) goto render_current::@2
[48] (byte) render_current::i#4 ← phi( render_current/(byte/signed byte/word/signed word/dword/signed dword) 0 render_current::@2/(byte) render_current::i#8 )
[48] (byte) render_current::l#3 ← phi( render_current/(byte/signed byte/word/signed word/dword/signed dword) 0 render_current::@2/(byte) render_current::l#1 )
[48] (byte) render_current::ypos2#2 ← phi( render_current/(byte) render_current::ypos2#0 render_current::@2/(byte) render_current::ypos2#1 )
[49] if((byte) render_current::ypos2#2>=(byte/signed byte/word/signed word/dword/signed dword) 2*(const byte) PLAYFIELD_LINES#0) goto render_current::@2
to:render_current::@6
render_current::@6: scope:[render_current] from render_current::@1
[45] (byte~) render_current::$3 ← (byte) render_current::line#0 << (byte/signed byte/word/signed word/dword/signed dword) 1
[46] (byte*) render_current::screen_line#0 ← *((const byte*[PLAYFIELD_LINES#0+3]) screen_lines#0 + (byte~) render_current::$3)
[50] (byte*) render_current::screen_line#0 ← *((const byte*[PLAYFIELD_LINES#0+3]) screen_lines#0 + (byte) render_current::ypos2#2)
[51] (byte) render_current::xpos#0 ← (byte) current_xpos#62
to:render_current::@3
render_current::@3: scope:[render_current] from render_current::@4 render_current::@6
[47] (byte) render_current::c#2 ← phi( render_current::@4/(byte) render_current::c#1 render_current::@6/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[47] (byte) render_current::i#2 ← phi( render_current::@4/(byte) render_current::i#1 render_current::@6/(byte) render_current::i#4 )
[48] (byte) render_current::current_cell#0 ← *((byte*) current_piece_gfx#75 + (byte) render_current::i#2)
[49] (byte) render_current::i#1 ← ++ (byte) render_current::i#2
[50] if((byte) render_current::current_cell#0==(byte/signed byte/word/signed word/dword/signed dword) 0) goto render_current::@4
[52] (byte) render_current::c#2 ← phi( render_current::@4/(byte) render_current::c#1 render_current::@6/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[52] (byte) render_current::xpos#2 ← phi( render_current::@4/(byte) render_current::xpos#1 render_current::@6/(byte) render_current::xpos#0 )
[52] (byte) render_current::i#2 ← phi( render_current::@4/(byte) render_current::i#1 render_current::@6/(byte) render_current::i#4 )
[53] (byte) render_current::current_cell#0 ← *((byte*) current_piece_gfx#61 + (byte) render_current::i#2)
[54] (byte) render_current::i#1 ← ++ (byte) render_current::i#2
[55] if((byte) render_current::current_cell#0==(byte/signed byte/word/signed word/dword/signed dword) 0) goto render_current::@4
to:render_current::@7
render_current::@7: scope:[render_current] from render_current::@3
[51] (byte) render_current::xpos#0 ← (byte) current_xpos#81 + (byte) render_current::c#2
[52] if((byte) render_current::xpos#0>=(const byte) PLAYFIELD_COLS#0) goto render_current::@4
[56] if((byte) render_current::xpos#2>=(const byte) PLAYFIELD_COLS#0) goto render_current::@4
to:render_current::@8
render_current::@8: scope:[render_current] from render_current::@7
[53] *((byte*) render_current::screen_line#0 + (byte) render_current::xpos#0) ← (byte) current_piece_color#62
[57] *((byte*) render_current::screen_line#0 + (byte) render_current::xpos#2) ← (byte) current_piece_color#63
to:render_current::@4
render_current::@4: scope:[render_current] from render_current::@3 render_current::@7 render_current::@8
[54] (byte) render_current::c#1 ← ++ (byte) render_current::c#2
[55] if((byte) render_current::c#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto render_current::@3
[58] (byte) render_current::xpos#1 ← ++ (byte) render_current::xpos#2
[59] (byte) render_current::c#1 ← ++ (byte) render_current::c#2
[60] if((byte) render_current::c#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto render_current::@3
to:render_current::@2
render_current::@2: scope:[render_current] from render_current::@1 render_current::@4
[56] (byte) render_current::i#8 ← phi( render_current::@1/(byte) render_current::i#4 render_current::@4/(byte) render_current::i#1 )
[57] (byte) render_current::l#1 ← ++ (byte) render_current::l#2
[58] if((byte) render_current::l#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto render_current::@1
[61] (byte) render_current::i#8 ← phi( render_current::@1/(byte) render_current::i#4 render_current::@4/(byte) render_current::i#1 )
[62] (byte) render_current::ypos2#1 ← (byte) render_current::ypos2#2 + (byte/signed byte/word/signed word/dword/signed dword) 2
[63] (byte) render_current::l#1 ← ++ (byte) render_current::l#3
[64] if((byte) render_current::l#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto render_current::@1
to:render_current::@return
render_current::@return: scope:[render_current] from render_current::@2
[59] return
[65] return
to:@return
render_playfield: scope:[render_playfield] from main::@19 main::@22
[60] phi()
[66] phi()
to:render_playfield::@1
render_playfield::@1: scope:[render_playfield] from render_playfield render_playfield::@3
[61] (byte) render_playfield::i#3 ← phi( render_playfield/(byte/signed byte/word/signed word/dword/signed dword) 0 render_playfield::@3/(byte) render_playfield::i#1 )
[61] (byte) render_playfield::l#2 ← phi( render_playfield/(byte/signed byte/word/signed word/dword/signed dword) 0 render_playfield::@3/(byte) render_playfield::l#1 )
[62] (byte~) render_playfield::$1 ← (byte) render_playfield::l#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
[63] (byte*) render_playfield::line#0 ← *((const byte*[PLAYFIELD_LINES#0+3]) screen_lines#0 + (byte~) render_playfield::$1)
[67] (byte) render_playfield::i#3 ← phi( render_playfield/(byte/signed byte/word/signed word/dword/signed dword) 0 render_playfield::@3/(byte) render_playfield::i#1 )
[67] (byte) render_playfield::l#2 ← phi( render_playfield/(byte/signed byte/word/signed word/dword/signed dword) 0 render_playfield::@3/(byte) render_playfield::l#1 )
[68] (byte~) render_playfield::$1 ← (byte) render_playfield::l#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
[69] (byte*) render_playfield::line#0 ← *((const byte*[PLAYFIELD_LINES#0+3]) screen_lines#0 + (byte~) render_playfield::$1)
to:render_playfield::@2
render_playfield::@2: scope:[render_playfield] from render_playfield::@1 render_playfield::@2
[64] (byte) render_playfield::i#2 ← phi( render_playfield::@1/(byte) render_playfield::i#3 render_playfield::@2/(byte) render_playfield::i#1 )
[64] (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 )
[65] (byte*~) render_playfield::$3 ← (byte*) render_playfield::line#0 + (byte) render_playfield::c#2
[66] *((byte*~) render_playfield::$3) ← *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) render_playfield::i#2)
[67] (byte) render_playfield::i#1 ← ++ (byte) render_playfield::i#2
[68] (byte) render_playfield::c#1 ← ++ (byte) render_playfield::c#2
[69] 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
[70] (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 )
[70] (byte*) render_playfield::line#2 ← phi( render_playfield::@1/(byte*) render_playfield::line#0 render_playfield::@2/(byte*) render_playfield::line#1 )
[70] (byte) render_playfield::i#2 ← phi( render_playfield::@1/(byte) render_playfield::i#3 render_playfield::@2/(byte) render_playfield::i#1 )
[71] *((byte*) render_playfield::line#2) ← *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) render_playfield::i#2)
[72] (byte*) render_playfield::line#1 ← ++ (byte*) render_playfield::line#2
[73] (byte) render_playfield::i#1 ← ++ (byte) render_playfield::i#2
[74] (byte) render_playfield::c#1 ← ++ (byte) render_playfield::c#2
[75] 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
[70] (byte) render_playfield::l#1 ← ++ (byte) render_playfield::l#2
[71] 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
[76] (byte) render_playfield::l#1 ← ++ (byte) render_playfield::l#2
[77] 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
[72] return
[78] return
to:@return
play_moveother: scope:[play_moveother] from main::@27
[73] (byte~) play_moveother::$0 ← (byte) play_moveother::key_event#0 & (byte/word/signed word/dword/signed dword) 128
[74] if((byte~) play_moveother::$0!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_moveother::@1
to:play_moveother::@11
play_moveother::@11: scope:[play_moveother] from play_moveother
[75] if((byte) play_moveother::key_event#0==(const byte) KEY_COMMA#0) goto play_moveother::@2
to:play_moveother::@12
play_moveother::@12: scope:[play_moveother] from play_moveother::@11
[76] if((byte) play_moveother::key_event#0==(const byte) KEY_DOT#0) goto play_moveother::@3
to:play_moveother::@13
play_moveother::@13: scope:[play_moveother] from play_moveother::@12
[77] if((byte) play_moveother::key_event#0==(const byte) KEY_Z#0) goto play_moveother::@4
to:play_moveother::@14
play_moveother::@14: scope:[play_moveother] from play_moveother::@13
[78] if((byte) play_moveother::key_event#0!=(const byte) KEY_X#0) goto play_moveother::@1
to:play_moveother::@15
play_moveother::@15: scope:[play_moveother] from play_moveother::@14
[79] (byte/signed word/word/dword/signed dword~) play_moveother::$8 ← (byte) current_piece_orientation#18 + (byte/signed byte/word/signed word/dword/signed dword) 16
[80] (byte) current_piece_orientation#10 ← (byte/signed word/word/dword/signed dword~) play_moveother::$8 & (byte/signed byte/word/signed word/dword/signed dword) 63
[81] (byte*) current_piece_gfx#10 ← (byte*) current_piece#13 + (byte) current_piece_orientation#10
to:play_moveother::@1
play_moveother::@1: scope:[play_moveother] from play_moveother play_moveother::@14 play_moveother::@15 play_moveother::@18 play_moveother::@20 play_moveother::@22 play_moveother::@23 play_moveother::@4
[82] (byte) current_xpos#11 ← phi( play_moveother/(byte) current_xpos#19 play_moveother::@22/(byte) current_xpos#19 play_moveother::@15/(byte) current_xpos#19 play_moveother::@18/(byte) current_xpos#9 play_moveother::@20/(byte) current_xpos#10 play_moveother::@4/(byte) current_xpos#19 play_moveother::@14/(byte) current_xpos#19 play_moveother::@23/(byte) current_xpos#19 )
[82] (byte*) current_piece_gfx#11 ← phi( play_moveother/(byte*) current_piece_gfx#18 play_moveother::@22/(byte*) current_piece_gfx#18 play_moveother::@15/(byte*) current_piece_gfx#10 play_moveother::@18/(byte*) current_piece_gfx#18 play_moveother::@20/(byte*) current_piece_gfx#18 play_moveother::@4/(byte*) current_piece_gfx#9 play_moveother::@14/(byte*) current_piece_gfx#18 play_moveother::@23/(byte*) current_piece_gfx#18 )
[82] (byte) current_piece_orientation#11 ← phi( play_moveother/(byte) current_piece_orientation#18 play_moveother::@22/(byte) current_piece_orientation#18 play_moveother::@15/(byte) current_piece_orientation#10 play_moveother::@18/(byte) current_piece_orientation#18 play_moveother::@20/(byte) current_piece_orientation#18 play_moveother::@4/(byte) current_piece_orientation#9 play_moveother::@14/(byte) current_piece_orientation#18 play_moveother::@23/(byte) current_piece_orientation#18 )
[82] (byte) play_moveother::return#1 ← phi( play_moveother/(byte/signed byte/word/signed word/dword/signed dword) 0 play_moveother::@22/(byte/signed byte/word/signed word/dword/signed dword) 0 play_moveother::@15/(byte/signed byte/word/signed word/dword/signed dword) 1 play_moveother::@18/(byte/signed byte/word/signed word/dword/signed dword) 1 play_moveother::@20/(byte/signed byte/word/signed word/dword/signed dword) 1 play_moveother::@4/(byte/signed byte/word/signed word/dword/signed dword) 1 play_moveother::@14/(byte/signed byte/word/signed word/dword/signed dword) 0 play_moveother::@23/(byte/signed byte/word/signed word/dword/signed dword) 0 )
to:play_moveother::@return
play_moveother::@return: scope:[play_moveother] from play_moveother::@1
[83] return
play_move_rotate: scope:[play_move_rotate] from main::@28
[79] if((byte) play_move_rotate::key_event#0==(const byte) KEY_Z#0) goto play_move_rotate::@1
to:play_move_rotate::@6
play_move_rotate::@6: scope:[play_move_rotate] from play_move_rotate
[80] 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::@11 play_move_rotate::@14 play_move_rotate::@6
[81] (byte*) current_piece_gfx#18 ← phi( play_move_rotate::@11/(byte*) current_piece_gfx#8 play_move_rotate::@14/(byte*) current_piece_gfx#17 play_move_rotate::@6/(byte*) current_piece_gfx#17 )
[81] (byte) current_piece_orientation#23 ← phi( play_move_rotate::@11/(byte) current_piece_orientation#8 play_move_rotate::@14/(byte) current_piece_orientation#18 play_move_rotate::@6/(byte) current_piece_orientation#18 )
[81] (byte) play_move_rotate::return#2 ← phi( play_move_rotate::@11/(byte/signed byte/word/signed word/dword/signed dword) 1 play_move_rotate::@14/(byte/signed byte/word/signed word/dword/signed dword) 0 play_move_rotate::@6/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[82] return
to:@return
play_moveother::@4: scope:[play_moveother] from play_moveother::@13
[84] (byte/signed word/word/dword/signed dword~) play_moveother::$11 ← (byte) current_piece_orientation#18 - (byte/signed byte/word/signed word/dword/signed dword) 16
[85] (byte) current_piece_orientation#9 ← (byte/signed word/word/dword/signed dword~) play_moveother::$11 & (byte/signed byte/word/signed word/dword/signed dword) 63
[86] (byte*) current_piece_gfx#9 ← (byte*) current_piece#13 + (byte) current_piece_orientation#9
to:play_moveother::@1
play_moveother::@3: scope:[play_moveother] from play_moveother::@12
[87] (byte) collision::xpos#2 ← (byte) current_xpos#19 + (byte/signed byte/word/signed word/dword/signed dword) 1
[88] (byte) collision::ypos#2 ← (byte) current_ypos#16
[89] (byte*~) current_piece_gfx#110 ← (byte*) current_piece_gfx#18
play_move_rotate::@2: scope:[play_move_rotate] from play_move_rotate::@6
[83] (byte/signed word/word/dword/signed dword~) play_move_rotate::$2 ← (byte) current_piece_orientation#18 + (byte/signed byte/word/signed word/dword/signed dword) 16
[84] (byte) play_move_rotate::orientation#2 ← (byte/signed word/word/dword/signed dword~) play_move_rotate::$2 & (byte/signed byte/word/signed word/dword/signed dword) 63
to:play_move_rotate::@4
play_move_rotate::@4: scope:[play_move_rotate] from play_move_rotate::@1 play_move_rotate::@2
[85] (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 )
[86] (byte) collision::xpos#3 ← (byte) current_xpos#23
[87] (byte) collision::ypos#3 ← (byte) current_ypos#16
[88] (byte) collision::orientation#3 ← (byte) play_move_rotate::orientation#3
[89] (byte*~) current_piece#70 ← (byte*) current_piece#13
[90] call collision
[91] (byte) collision::return#12 ← (byte) collision::return#10
to:play_moveother::@23
play_moveother::@23: scope:[play_moveother] from play_moveother::@3
[92] (byte~) play_moveother::$15 ← (byte) collision::return#12
[93] if((byte~) play_moveother::$15!=(const byte) COLLISION_NONE#0) goto play_moveother::@1
to:play_moveother::@18
play_moveother::@18: scope:[play_moveother] from play_moveother::@23
[94] (byte) current_xpos#9 ← ++ (byte) current_xpos#19
to:play_moveother::@1
play_moveother::@2: scope:[play_moveother] from play_moveother::@11
[95] (byte) collision::xpos#1 ← (byte) current_xpos#19 - (byte/signed byte/word/signed word/dword/signed dword) 1
[96] (byte) collision::ypos#1 ← (byte) current_ypos#16
[97] (byte*~) current_piece_gfx#109 ← (byte*) current_piece_gfx#18
[98] call collision
[99] (byte) collision::return#11 ← (byte) collision::return#10
to:play_moveother::@22
play_moveother::@22: scope:[play_moveother] from play_moveother::@2
[100] (byte~) play_moveother::$19 ← (byte) collision::return#11
[101] if((byte~) play_moveother::$19!=(const byte) COLLISION_NONE#0) goto play_moveother::@1
to:play_moveother::@20
play_moveother::@20: scope:[play_moveother] from play_moveother::@22
[102] (byte) current_xpos#10 ← -- (byte) current_xpos#19
to:play_moveother::@1
collision: scope:[collision] from play_movedown::@12 play_moveother::@2 play_moveother::@3
[103] (byte) collision::xpos#8 ← phi( play_movedown::@12/(byte) collision::xpos#0 play_moveother::@2/(byte) collision::xpos#1 play_moveother::@3/(byte) collision::xpos#2 )
[103] (byte*) current_piece_gfx#46 ← phi( play_movedown::@12/(byte*~) current_piece_gfx#108 play_moveother::@2/(byte*~) current_piece_gfx#109 play_moveother::@3/(byte*~) current_piece_gfx#110 )
[103] (byte) collision::ypos#4 ← phi( play_movedown::@12/(byte) collision::ypos#0 play_moveother::@2/(byte) collision::ypos#1 play_moveother::@3/(byte) collision::ypos#2 )
[91] (byte) collision::return#13 ← (byte) collision::return#14
to:play_move_rotate::@14
play_move_rotate::@14: scope:[play_move_rotate] from play_move_rotate::@4
[92] (byte~) play_move_rotate::$6 ← (byte) collision::return#13
[93] (byte~) play_move_rotate::$8 ← (byte~) play_move_rotate::$6 & (const byte) COLLISION_LEFT#0|(const byte) COLLISION_RIGHT#0
[94] if((byte~) play_move_rotate::$8!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_move_rotate::@return
to:play_move_rotate::@11
play_move_rotate::@11: scope:[play_move_rotate] from play_move_rotate::@14
[95] (byte) current_piece_orientation#8 ← (byte) play_move_rotate::orientation#3
[96] (byte*) current_piece_gfx#8 ← (byte*) current_piece#13 + (byte) current_piece_orientation#8
to:play_move_rotate::@return
play_move_rotate::@1: scope:[play_move_rotate] from play_move_rotate
[97] (byte/signed word/word/dword/signed dword~) play_move_rotate::$4 ← (byte) current_piece_orientation#18 - (byte/signed byte/word/signed word/dword/signed dword) 16
[98] (byte) play_move_rotate::orientation#1 ← (byte/signed word/word/dword/signed dword~) play_move_rotate::$4 & (byte/signed byte/word/signed word/dword/signed dword) 63
to:play_move_rotate::@4
collision: scope:[collision] from play_move_down::@12 play_move_leftright::@1 play_move_leftright::@7 play_move_rotate::@4
[99] (byte) collision::xpos#5 ← phi( play_move_down::@12/(byte) collision::xpos#0 play_move_leftright::@1/(byte) collision::xpos#1 play_move_leftright::@7/(byte) collision::xpos#2 play_move_rotate::@4/(byte) collision::xpos#3 )
[99] (byte) collision::ypos#4 ← phi( play_move_down::@12/(byte) collision::ypos#0 play_move_leftright::@1/(byte) collision::ypos#1 play_move_leftright::@7/(byte) collision::ypos#2 play_move_rotate::@4/(byte) collision::ypos#3 )
[99] (byte) collision::orientation#4 ← phi( play_move_down::@12/(byte) collision::orientation#0 play_move_leftright::@1/(byte) collision::orientation#1 play_move_leftright::@7/(byte) collision::orientation#2 play_move_rotate::@4/(byte) collision::orientation#3 )
[99] (byte*) current_piece#15 ← phi( play_move_down::@12/(byte*~) current_piece#67 play_move_leftright::@1/(byte*~) current_piece#68 play_move_leftright::@7/(byte*~) current_piece#69 play_move_rotate::@4/(byte*~) current_piece#70 )
[100] (byte*) collision::piece_gfx#0 ← (byte*) current_piece#15 + (byte) collision::orientation#4
[101] (byte) collision::ypos2#0 ← (byte) collision::ypos#4 << (byte/signed byte/word/signed word/dword/signed dword) 1
to:collision::@1
collision::@1: scope:[collision] from collision collision::@20
[104] (byte) collision::i#3 ← phi( collision/(byte/signed byte/word/signed word/dword/signed dword) 0 collision::@20/(byte~) collision::i#11 )
[104] (byte) collision::l#2 ← phi( collision/(byte/signed byte/word/signed word/dword/signed dword) 0 collision::@20/(byte) collision::l#1 )
[105] (byte) collision::line#0 ← (byte) collision::ypos#4 + (byte) collision::l#2
[106] (byte~) collision::$1 ← (byte) collision::line#0 << (byte/signed byte/word/signed word/dword/signed dword) 1
[107] (byte*) collision::playfield_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte~) collision::$1)
[102] (byte) collision::l#6 ← phi( collision/(byte/signed byte/word/signed word/dword/signed dword) 0 collision::@20/(byte) collision::l#1 )
[102] (byte) collision::i#3 ← phi( collision/(byte/signed byte/word/signed word/dword/signed dword) 0 collision::@20/(byte~) collision::i#11 )
[102] (byte) collision::ypos2#2 ← phi( collision/(byte) collision::ypos2#0 collision::@20/(byte) collision::ypos2#1 )
[103] (byte*) collision::playfield_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte) collision::ypos2#2)
[104] (byte~) collision::col#9 ← (byte) collision::xpos#5
to:collision::@2
collision::@2: scope:[collision] from collision::@1 collision::@21
[108] (byte) collision::c#2 ← phi( collision::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 collision::@21/(byte) collision::c#1 )
[108] (byte) collision::i#2 ← phi( collision::@1/(byte) collision::i#3 collision::@21/(byte~) collision::i#13 )
[109] (byte) collision::i#1 ← ++ (byte) collision::i#2
[110] if(*((byte*) current_piece_gfx#46 + (byte) collision::i#2)==(byte/signed byte/word/signed word/dword/signed dword) 0) goto collision::@3
[105] (byte) collision::c#2 ← phi( collision::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 collision::@21/(byte) collision::c#1 )
[105] (byte) collision::col#2 ← phi( collision::@1/(byte~) collision::col#9 collision::@21/(byte) collision::col#1 )
[105] (byte) collision::i#2 ← phi( collision::@1/(byte) collision::i#3 collision::@21/(byte~) collision::i#13 )
[106] (byte) collision::i#1 ← ++ (byte) collision::i#2
[107] if(*((byte*) collision::piece_gfx#0 + (byte) collision::i#2)==(byte/signed byte/word/signed word/dword/signed dword) 0) goto collision::@3
to:collision::@8
collision::@8: scope:[collision] from collision::@2
[111] if((byte) collision::line#0<(const byte) PLAYFIELD_LINES#0) goto collision::@4
[108] if((byte) collision::ypos2#2<(byte/signed byte/word/signed word/dword/signed dword) 2*(const byte) PLAYFIELD_LINES#0) goto collision::@4
to:collision::@return
collision::@return: scope:[collision] from collision::@17 collision::@4 collision::@5 collision::@6 collision::@8
[112] (byte) collision::return#10 ← phi( collision::@4/(const byte) COLLISION_LEFT#0 collision::@5/(const byte) COLLISION_RIGHT#0 collision::@6/(const byte) COLLISION_PLAYFIELD#0 collision::@17/(const byte) COLLISION_NONE#0 collision::@8/(const byte) COLLISION_BOTTOM#0 )
[113] return
[109] (byte) collision::return#14 ← phi( collision::@4/(const byte) COLLISION_LEFT#0 collision::@5/(const byte) COLLISION_RIGHT#0 collision::@6/(const byte) COLLISION_PLAYFIELD#0 collision::@17/(const byte) COLLISION_NONE#0 collision::@8/(const byte) COLLISION_BOTTOM#0 )
[110] return
to:@return
collision::@4: scope:[collision] from collision::@8
[114] (byte) collision::col#0 ← (byte) collision::xpos#8 + (byte) collision::c#2
[115] (byte~) collision::$7 ← (byte) collision::col#0 & (byte/word/signed word/dword/signed dword) 128
[116] if((byte~) collision::$7==(byte/signed byte/word/signed word/dword/signed dword) 0) goto collision::@5
[111] (byte~) collision::$7 ← (byte) collision::col#2 & (byte/word/signed word/dword/signed dword) 128
[112] if((byte~) collision::$7==(byte/signed byte/word/signed word/dword/signed dword) 0) goto collision::@5
to:collision::@return
collision::@5: scope:[collision] from collision::@4
[117] if((byte) collision::col#0<(const byte) PLAYFIELD_COLS#0) goto collision::@6
[113] if((byte) collision::col#2<(const byte) PLAYFIELD_COLS#0) goto collision::@6
to:collision::@return
collision::@6: scope:[collision] from collision::@5
[118] if(*((byte*) collision::playfield_line#0 + (byte) collision::col#0)==(byte/signed byte/word/signed word/dword/signed dword) 0) goto collision::@3
[114] if(*((byte*) collision::playfield_line#0 + (byte) collision::col#2)==(byte/signed byte/word/signed word/dword/signed dword) 0) goto collision::@3
to:collision::@return
collision::@3: scope:[collision] from collision::@2 collision::@6
[119] (byte) collision::c#1 ← ++ (byte) collision::c#2
[120] if((byte) collision::c#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto collision::@21
[115] (byte) collision::col#1 ← ++ (byte) collision::col#2
[116] (byte) collision::c#1 ← ++ (byte) collision::c#2
[117] if((byte) collision::c#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto collision::@21
to:collision::@17
collision::@17: scope:[collision] from collision::@3
[121] (byte) collision::l#1 ← ++ (byte) collision::l#2
[122] if((byte) collision::l#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto collision::@20
[118] (byte) collision::ypos2#1 ← (byte) collision::ypos2#2 + (byte/signed byte/word/signed word/dword/signed dword) 2
[119] (byte) collision::l#1 ← ++ (byte) collision::l#6
[120] if((byte) collision::l#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto collision::@20
to:collision::@return
collision::@20: scope:[collision] from collision::@17
[123] (byte~) collision::i#11 ← (byte) collision::i#1
[121] (byte~) collision::i#11 ← (byte) collision::i#1
to:collision::@1
collision::@21: scope:[collision] from collision::@3
[124] (byte~) collision::i#13 ← (byte) collision::i#1
[122] (byte~) collision::i#13 ← (byte) collision::i#1
to:collision::@2
play_movedown: scope:[play_movedown] from main::@26
[125] (byte) current_movedown_counter#10 ← ++ (byte) current_movedown_counter#15
[126] if((byte) play_movedown::key_event#0!=(const byte) KEY_SPACE#0) goto play_movedown::@1
to:play_movedown::@8
play_movedown::@8: scope:[play_movedown] from play_movedown
[127] phi()
to:play_movedown::@1
play_movedown::@1: scope:[play_movedown] from play_movedown play_movedown::@8
[128] (byte) play_movedown::movedown#10 ← phi( play_movedown/(byte/signed byte/word/signed word/dword/signed dword) 0 play_movedown::@8/(byte/signed byte/word/signed word/dword/signed dword) 1 )
[129] call keyboard_event_pressed
[130] (byte) keyboard_event_pressed::return#12 ← (byte) keyboard_event_pressed::return#11
to:play_movedown::@17
play_movedown::@17: scope:[play_movedown] from play_movedown::@1
[131] (byte~) play_movedown::$2 ← (byte) keyboard_event_pressed::return#12
[132] if((byte~) play_movedown::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_movedown::@2
to:play_movedown::@9
play_movedown::@9: scope:[play_movedown] from play_movedown::@17
[133] if((byte) current_movedown_counter#10<(const byte) current_movedown_rate_fast#0) goto play_movedown::@2
to:play_movedown::@10
play_movedown::@10: scope:[play_movedown] from play_movedown::@9
[134] (byte) play_movedown::movedown#2 ← ++ (byte) play_movedown::movedown#10
to:play_movedown::@2
play_movedown::@2: scope:[play_movedown] from play_movedown::@10 play_movedown::@17 play_movedown::@9
[135] (byte) play_movedown::movedown#7 ← phi( play_movedown::@10/(byte) play_movedown::movedown#2 play_movedown::@17/(byte) play_movedown::movedown#10 play_movedown::@9/(byte) play_movedown::movedown#10 )
[136] if((byte) current_movedown_counter#10<(const byte) current_movedown_rate#0) goto play_movedown::@4
to:play_movedown::@11
play_movedown::@11: scope:[play_movedown] from play_movedown::@2
[137] (byte) play_movedown::movedown#3 ← ++ (byte) play_movedown::movedown#7
to:play_movedown::@4
play_movedown::@4: scope:[play_movedown] from play_movedown::@11 play_movedown::@2
[138] (byte) play_movedown::movedown#6 ← phi( play_movedown::@11/(byte) play_movedown::movedown#3 play_movedown::@2/(byte) play_movedown::movedown#7 )
[139] if((byte) play_movedown::movedown#6==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_movedown::@return
to:play_movedown::@12
play_movedown::@12: scope:[play_movedown] from play_movedown::@4
[140] (byte) collision::ypos#0 ← (byte) current_ypos#12 + (byte/signed byte/word/signed word/dword/signed dword) 1
[141] (byte) collision::xpos#0 ← (byte) current_xpos#16
[142] (byte*~) current_piece_gfx#108 ← (byte*) current_piece_gfx#16
[143] call collision
[144] (byte) collision::return#0 ← (byte) collision::return#10
to:play_movedown::@18
play_movedown::@18: scope:[play_movedown] from play_movedown::@12
[145] (byte~) play_movedown::$12 ← (byte) collision::return#0
[146] if((byte~) play_movedown::$12==(const byte) COLLISION_NONE#0) goto play_movedown::@6
to:play_movedown::@13
play_movedown::@13: scope:[play_movedown] from play_movedown::@18
[147] phi()
[148] call lock_current
to:play_movedown::@19
play_movedown::@19: scope:[play_movedown] from play_movedown::@13
[149] phi()
[150] call spawn_current
to:play_movedown::@7
play_movedown::@7: scope:[play_movedown] from play_movedown::@19 play_movedown::@6
[151] (byte) current_xpos#35 ← phi( play_movedown::@19/(byte/signed byte/word/signed word/dword/signed dword) 3 play_movedown::@6/(byte) current_xpos#16 )
[151] (byte) current_piece_color#23 ← phi( play_movedown::@19/(const byte) GREEN#0 play_movedown::@6/(byte) current_piece_color#11 )
[151] (byte*) current_piece_gfx#30 ← phi( play_movedown::@19/(const byte[4*4*4]) piece_t#0 play_movedown::@6/(byte*) current_piece_gfx#16 )
[151] (byte) current_piece_orientation#29 ← phi( play_movedown::@19/(byte/signed byte/word/signed word/dword/signed dword) 0 play_movedown::@6/(byte) current_piece_orientation#16 )
[151] (byte*) current_piece#23 ← phi( play_movedown::@19/(const byte[4*4*4]) piece_t#0 play_movedown::@6/(byte*) current_piece#11 )
[151] (byte) current_ypos#30 ← phi( play_movedown::@19/(byte/signed byte/word/signed word/dword/signed dword) 0 play_movedown::@6/(byte) current_ypos#4 )
to:play_movedown::@return
play_movedown::@return: scope:[play_movedown] from play_movedown::@4 play_movedown::@7
[152] (byte) current_xpos#19 ← phi( play_movedown::@4/(byte) current_xpos#16 play_movedown::@7/(byte) current_xpos#35 )
[152] (byte) current_piece_color#13 ← phi( play_movedown::@4/(byte) current_piece_color#11 play_movedown::@7/(byte) current_piece_color#23 )
[152] (byte*) current_piece_gfx#18 ← phi( play_movedown::@4/(byte*) current_piece_gfx#16 play_movedown::@7/(byte*) current_piece_gfx#30 )
[152] (byte) current_piece_orientation#18 ← phi( play_movedown::@4/(byte) current_piece_orientation#16 play_movedown::@7/(byte) current_piece_orientation#29 )
[152] (byte*) current_piece#13 ← phi( play_movedown::@4/(byte*) current_piece#11 play_movedown::@7/(byte*) current_piece#23 )
[152] (byte) current_ypos#16 ← phi( play_movedown::@4/(byte) current_ypos#12 play_movedown::@7/(byte) current_ypos#30 )
[152] (byte) current_movedown_counter#12 ← phi( play_movedown::@4/(byte) current_movedown_counter#10 play_movedown::@7/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[152] (byte) play_movedown::return#3 ← phi( play_movedown::@4/(byte/signed byte/word/signed word/dword/signed dword) 0 play_movedown::@7/(byte/signed byte/word/signed word/dword/signed dword) 1 )
[153] return
play_move_leftright: scope:[play_move_leftright] from main::@27
[123] if((byte) play_move_leftright::key_event#0==(const byte) KEY_COMMA#0) goto play_move_leftright::@1
to:play_move_leftright::@6
play_move_leftright::@6: scope:[play_move_leftright] from play_move_leftright
[124] if((byte) play_move_leftright::key_event#0!=(const byte) KEY_DOT#0) goto play_move_leftright::@return
to:play_move_leftright::@7
play_move_leftright::@7: scope:[play_move_leftright] from play_move_leftright::@6
[125] (byte) collision::xpos#2 ← (byte) current_xpos#19 + (byte/signed byte/word/signed word/dword/signed dword) 1
[126] (byte) collision::ypos#2 ← (byte) current_ypos#16
[127] (byte) collision::orientation#2 ← (byte) current_piece_orientation#18
[128] (byte*~) current_piece#69 ← (byte*) current_piece#13
[129] call collision
[130] (byte) collision::return#12 ← (byte) collision::return#14
to:play_move_leftright::@15
play_move_leftright::@15: scope:[play_move_leftright] from play_move_leftright::@7
[131] (byte~) play_move_leftright::$4 ← (byte) collision::return#12
[132] if((byte~) play_move_leftright::$4!=(const byte) COLLISION_NONE#0) goto play_move_leftright::@return
to:play_move_leftright::@8
play_move_leftright::@8: scope:[play_move_leftright] from play_move_leftright::@15
[133] (byte) current_xpos#7 ← ++ (byte) current_xpos#19
to:play_move_leftright::@return
play_move_leftright::@return: scope:[play_move_leftright] from play_move_leftright::@11 play_move_leftright::@14 play_move_leftright::@15 play_move_leftright::@6 play_move_leftright::@8
[134] (byte) current_xpos#23 ← phi( play_move_leftright::@11/(byte) current_xpos#9 play_move_leftright::@15/(byte) current_xpos#19 play_move_leftright::@8/(byte) current_xpos#7 play_move_leftright::@14/(byte) current_xpos#19 play_move_leftright::@6/(byte) current_xpos#19 )
[134] (byte) play_move_leftright::return#2 ← phi( play_move_leftright::@11/(byte/signed byte/word/signed word/dword/signed dword) 1 play_move_leftright::@15/(byte/signed byte/word/signed word/dword/signed dword) 0 play_move_leftright::@8/(byte/signed byte/word/signed word/dword/signed dword) 1 play_move_leftright::@14/(byte/signed byte/word/signed word/dword/signed dword) 0 play_move_leftright::@6/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[135] return
to:@return
play_movedown::@6: scope:[play_movedown] from play_movedown::@18
[154] (byte) current_ypos#4 ← ++ (byte) current_ypos#12
to:play_movedown::@7
spawn_current: scope:[spawn_current] from main::@21 play_movedown::@19
[155] phi()
play_move_leftright::@1: scope:[play_move_leftright] from play_move_leftright
[136] (byte) collision::xpos#1 ← (byte) current_xpos#19 - (byte/signed byte/word/signed word/dword/signed dword) 1
[137] (byte) collision::ypos#1 ← (byte) current_ypos#16
[138] (byte) collision::orientation#1 ← (byte) current_piece_orientation#18
[139] (byte*~) current_piece#68 ← (byte*) current_piece#13
[140] call collision
[141] (byte) collision::return#1 ← (byte) collision::return#14
to:play_move_leftright::@14
play_move_leftright::@14: scope:[play_move_leftright] from play_move_leftright::@1
[142] (byte~) play_move_leftright::$8 ← (byte) collision::return#1
[143] if((byte~) play_move_leftright::$8!=(const byte) COLLISION_NONE#0) goto play_move_leftright::@return
to:play_move_leftright::@11
play_move_leftright::@11: scope:[play_move_leftright] from play_move_leftright::@14
[144] (byte) current_xpos#9 ← -- (byte) current_xpos#19
to:play_move_leftright::@return
play_move_down: scope:[play_move_down] from main::@26
[145] (byte) current_movedown_counter#10 ← ++ (byte) current_movedown_counter#15
[146] if((byte) play_move_down::key_event#0!=(const byte) KEY_SPACE#0) goto play_move_down::@1
to:play_move_down::@8
play_move_down::@8: scope:[play_move_down] from play_move_down
[147] phi()
to:play_move_down::@1
play_move_down::@1: scope:[play_move_down] from play_move_down play_move_down::@8
[148] (byte) play_move_down::movedown#10 ← phi( play_move_down/(byte/signed byte/word/signed word/dword/signed dword) 0 play_move_down::@8/(byte/signed byte/word/signed word/dword/signed dword) 1 )
[149] call keyboard_event_pressed
[150] (byte) keyboard_event_pressed::return#12 ← (byte) keyboard_event_pressed::return#11
to:play_move_down::@17
play_move_down::@17: scope:[play_move_down] from play_move_down::@1
[151] (byte~) play_move_down::$2 ← (byte) keyboard_event_pressed::return#12
[152] 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::@9
play_move_down::@9: scope:[play_move_down] from play_move_down::@17
[153] if((byte) current_movedown_counter#10<(const byte) current_movedown_rate_fast#0) goto play_move_down::@2
to:play_move_down::@10
play_move_down::@10: scope:[play_move_down] from play_move_down::@9
[154] (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::@10 play_move_down::@17 play_move_down::@9
[155] (byte) play_move_down::movedown#7 ← phi( play_move_down::@10/(byte) play_move_down::movedown#2 play_move_down::@17/(byte) play_move_down::movedown#10 play_move_down::@9/(byte) play_move_down::movedown#10 )
[156] if((byte) current_movedown_counter#10<(const byte) current_movedown_rate#0) goto play_move_down::@4
to:play_move_down::@11
play_move_down::@11: scope:[play_move_down] from play_move_down::@2
[157] (byte) play_move_down::movedown#3 ← ++ (byte) play_move_down::movedown#7
to:play_move_down::@4
play_move_down::@4: scope:[play_move_down] from play_move_down::@11 play_move_down::@2
[158] (byte) play_move_down::movedown#6 ← phi( play_move_down::@11/(byte) play_move_down::movedown#3 play_move_down::@2/(byte) play_move_down::movedown#7 )
[159] 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::@12
play_move_down::@12: scope:[play_move_down] from play_move_down::@4
[160] (byte) collision::ypos#0 ← (byte) current_ypos#12 + (byte/signed byte/word/signed word/dword/signed dword) 1
[161] (byte) collision::xpos#0 ← (byte) current_xpos#16
[162] (byte) collision::orientation#0 ← (byte) current_piece_orientation#15
[163] (byte*~) current_piece#67 ← (byte*) current_piece#11
[164] call collision
[165] (byte) collision::return#0 ← (byte) collision::return#14
to:play_move_down::@18
play_move_down::@18: scope:[play_move_down] from play_move_down::@12
[166] (byte~) play_move_down::$12 ← (byte) collision::return#0
[167] if((byte~) play_move_down::$12==(const byte) COLLISION_NONE#0) goto play_move_down::@6
to:play_move_down::@13
play_move_down::@13: scope:[play_move_down] from play_move_down::@18
[168] phi()
[169] call lock_current
to:play_move_down::@19
play_move_down::@19: scope:[play_move_down] from play_move_down::@13
[170] phi()
[171] call spawn_current
to:play_move_down::@7
play_move_down::@7: scope:[play_move_down] from play_move_down::@19 play_move_down::@6
[172] (byte) current_xpos#36 ← phi( play_move_down::@19/(byte/signed byte/word/signed word/dword/signed dword) 3 play_move_down::@6/(byte) current_xpos#16 )
[172] (byte) current_piece_color#23 ← phi( play_move_down::@19/(const byte) GREEN#0 play_move_down::@6/(byte) current_piece_color#11 )
[172] (byte*) current_piece_gfx#29 ← phi( play_move_down::@19/(const byte[4*4*4]) piece_t#0 play_move_down::@6/(byte*) current_piece_gfx#15 )
[172] (byte) current_piece_orientation#33 ← phi( play_move_down::@19/(byte/signed byte/word/signed word/dword/signed dword) 0 play_move_down::@6/(byte) current_piece_orientation#15 )
[172] (byte*) current_piece#23 ← phi( play_move_down::@19/(const byte[4*4*4]) piece_t#0 play_move_down::@6/(byte*) current_piece#11 )
[172] (byte) current_ypos#31 ← phi( play_move_down::@19/(byte/signed byte/word/signed word/dword/signed dword) 0 play_move_down::@6/(byte) current_ypos#4 )
to:play_move_down::@return
play_move_down::@return: scope:[play_move_down] from play_move_down::@4 play_move_down::@7
[173] (byte) current_xpos#19 ← phi( play_move_down::@4/(byte) current_xpos#16 play_move_down::@7/(byte) current_xpos#36 )
[173] (byte) current_piece_color#13 ← phi( play_move_down::@4/(byte) current_piece_color#11 play_move_down::@7/(byte) current_piece_color#23 )
[173] (byte*) current_piece_gfx#17 ← phi( play_move_down::@4/(byte*) current_piece_gfx#15 play_move_down::@7/(byte*) current_piece_gfx#29 )
[173] (byte) current_piece_orientation#18 ← phi( play_move_down::@4/(byte) current_piece_orientation#15 play_move_down::@7/(byte) current_piece_orientation#33 )
[173] (byte*) current_piece#13 ← phi( play_move_down::@4/(byte*) current_piece#11 play_move_down::@7/(byte*) current_piece#23 )
[173] (byte) current_ypos#16 ← phi( play_move_down::@4/(byte) current_ypos#12 play_move_down::@7/(byte) current_ypos#31 )
[173] (byte) current_movedown_counter#12 ← phi( play_move_down::@4/(byte) current_movedown_counter#10 play_move_down::@7/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[173] (byte) play_move_down::return#3 ← phi( play_move_down::@4/(byte/signed byte/word/signed word/dword/signed dword) 0 play_move_down::@7/(byte/signed byte/word/signed word/dword/signed dword) 1 )
[174] return
to:@return
play_move_down::@6: scope:[play_move_down] from play_move_down::@18
[175] (byte) current_ypos#4 ← ++ (byte) current_ypos#12
to:play_move_down::@7
spawn_current: scope:[spawn_current] from main::@21 play_move_down::@19
[176] phi()
to:spawn_current::@return
spawn_current::@return: scope:[spawn_current] from spawn_current
[156] return
[177] return
to:@return
lock_current: scope:[lock_current] from play_movedown::@13
[157] phi()
lock_current: scope:[lock_current] from play_move_down::@13
[178] phi()
to:lock_current::@1
lock_current::@1: scope:[lock_current] from lock_current lock_current::@5
[158] (byte) lock_current::i#3 ← phi( lock_current/(byte/signed byte/word/signed word/dword/signed dword) 0 lock_current::@5/(byte) lock_current::i#1 )
[158] (byte) lock_current::l#2 ← phi( lock_current/(byte/signed byte/word/signed word/dword/signed dword) 0 lock_current::@5/(byte) lock_current::l#1 )
[159] (byte) lock_current::line#0 ← (byte) current_ypos#12 + (byte) lock_current::l#2
[160] (byte~) lock_current::$1 ← (byte) lock_current::line#0 << (byte/signed byte/word/signed word/dword/signed dword) 1
[161] (byte*) lock_current::playfield_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte~) lock_current::$1)
[179] (byte) lock_current::i#3 ← phi( lock_current/(byte/signed byte/word/signed word/dword/signed dword) 0 lock_current::@5/(byte) lock_current::i#1 )
[179] (byte) lock_current::l#2 ← phi( lock_current/(byte/signed byte/word/signed word/dword/signed dword) 0 lock_current::@5/(byte) lock_current::l#1 )
[180] (byte) lock_current::line#0 ← (byte) current_ypos#12 + (byte) lock_current::l#2
[181] (byte~) lock_current::$1 ← (byte) lock_current::line#0 << (byte/signed byte/word/signed word/dword/signed dword) 1
[182] (byte*) lock_current::playfield_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte~) lock_current::$1)
to:lock_current::@2
lock_current::@2: scope:[lock_current] from lock_current::@1 lock_current::@3
[162] (byte) lock_current::c#2 ← phi( lock_current::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 lock_current::@3/(byte) lock_current::c#1 )
[162] (byte) lock_current::i#2 ← phi( lock_current::@1/(byte) lock_current::i#3 lock_current::@3/(byte) lock_current::i#1 )
[163] (byte) lock_current::cell#0 ← *((byte*) current_piece_gfx#16 + (byte) lock_current::i#2)
[164] (byte) lock_current::i#1 ← ++ (byte) lock_current::i#2
[165] if((byte) lock_current::cell#0==(byte/signed byte/word/signed word/dword/signed dword) 0) goto lock_current::@3
[183] (byte) lock_current::c#2 ← phi( lock_current::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 lock_current::@3/(byte) lock_current::c#1 )
[183] (byte) lock_current::i#2 ← phi( lock_current::@1/(byte) lock_current::i#3 lock_current::@3/(byte) lock_current::i#1 )
[184] (byte) lock_current::cell#0 ← *((byte*) current_piece_gfx#15 + (byte) lock_current::i#2)
[185] (byte) lock_current::i#1 ← ++ (byte) lock_current::i#2
[186] if((byte) lock_current::cell#0==(byte/signed byte/word/signed word/dword/signed dword) 0) goto lock_current::@3
to:lock_current::@4
lock_current::@4: scope:[lock_current] from lock_current::@2
[166] (byte) lock_current::col#0 ← (byte) current_xpos#16 + (byte) lock_current::c#2
[167] *((byte*) lock_current::playfield_line#0 + (byte) lock_current::col#0) ← (byte) current_piece_color#11
[187] (byte) lock_current::col#0 ← (byte) current_xpos#16 + (byte) lock_current::c#2
[188] *((byte*) lock_current::playfield_line#0 + (byte) lock_current::col#0) ← (byte) current_piece_color#11
to:lock_current::@3
lock_current::@3: scope:[lock_current] from lock_current::@2 lock_current::@4
[168] (byte) lock_current::c#1 ← ++ (byte) lock_current::c#2
[169] if((byte) lock_current::c#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto lock_current::@2
[189] (byte) lock_current::c#1 ← ++ (byte) lock_current::c#2
[190] if((byte) lock_current::c#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto lock_current::@2
to:lock_current::@5
lock_current::@5: scope:[lock_current] from lock_current::@3
[170] (byte) lock_current::l#1 ← ++ (byte) lock_current::l#2
[171] if((byte) lock_current::l#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto lock_current::@1
[191] (byte) lock_current::l#1 ← ++ (byte) lock_current::l#2
[192] if((byte) lock_current::l#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto lock_current::@1
to:lock_current::@return
lock_current::@return: scope:[lock_current] from lock_current::@5
[172] return
[193] return
to:@return
keyboard_event_pressed: scope:[keyboard_event_pressed] from keyboard_event_scan::@10 keyboard_event_scan::@11 keyboard_event_scan::@20 keyboard_event_scan::@9 play_movedown::@1
[173] (byte) keyboard_event_pressed::keycode#5 ← phi( keyboard_event_scan::@10/(const byte) KEY_CTRL#0 keyboard_event_scan::@11/(const byte) KEY_COMMODORE#0 keyboard_event_scan::@20/(const byte) KEY_LSHIFT#0 keyboard_event_scan::@9/(const byte) KEY_RSHIFT#0 play_movedown::@1/(const byte) KEY_SPACE#0 )
[174] (byte~) keyboard_event_pressed::$0 ← (byte) keyboard_event_pressed::keycode#5 >> (byte/signed byte/word/signed word/dword/signed dword) 3
[175] (byte) keyboard_event_pressed::row_bits#0 ← *((const byte[8]) keyboard_scan_values#0 + (byte~) keyboard_event_pressed::$0)
[176] (byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#5 & (byte/signed byte/word/signed word/dword/signed dword) 7
[177] (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: scope:[keyboard_event_pressed] from keyboard_event_scan::@10 keyboard_event_scan::@11 keyboard_event_scan::@20 keyboard_event_scan::@9 play_move_down::@1
[194] (byte) keyboard_event_pressed::keycode#5 ← phi( keyboard_event_scan::@10/(const byte) KEY_CTRL#0 keyboard_event_scan::@11/(const byte) KEY_COMMODORE#0 keyboard_event_scan::@20/(const byte) KEY_LSHIFT#0 keyboard_event_scan::@9/(const byte) KEY_RSHIFT#0 play_move_down::@1/(const byte) KEY_SPACE#0 )
[195] (byte~) keyboard_event_pressed::$0 ← (byte) keyboard_event_pressed::keycode#5 >> (byte/signed byte/word/signed word/dword/signed dword) 3
[196] (byte) keyboard_event_pressed::row_bits#0 ← *((const byte[8]) keyboard_scan_values#0 + (byte~) keyboard_event_pressed::$0)
[197] (byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#5 & (byte/signed byte/word/signed word/dword/signed dword) 7
[198] (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
[178] return
[199] return
to:@return
keyboard_event_get: scope:[keyboard_event_get] from main::@25
[179] if((byte) keyboard_events_size#13==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_get::@return
[200] 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::@3
keyboard_event_get::@3: scope:[keyboard_event_get] from keyboard_event_get
[180] (byte) keyboard_events_size#4 ← -- (byte) keyboard_events_size#13
[181] (byte) keyboard_event_get::return#1 ← *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#4)
[201] (byte) keyboard_events_size#4 ← -- (byte) keyboard_events_size#13
[202] (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::@3
[182] (byte) keyboard_events_size#16 ← phi( keyboard_event_get/(byte) keyboard_events_size#13 keyboard_event_get::@3/(byte) keyboard_events_size#4 )
[182] (byte) keyboard_event_get::return#2 ← phi( keyboard_event_get/(byte/word/signed word/dword/signed dword) 255 keyboard_event_get::@3/(byte) keyboard_event_get::return#1 )
[183] return
[203] (byte) keyboard_events_size#16 ← phi( keyboard_event_get/(byte) keyboard_events_size#13 keyboard_event_get::@3/(byte) keyboard_events_size#4 )
[203] (byte) keyboard_event_get::return#2 ← phi( keyboard_event_get/(byte/word/signed word/dword/signed dword) 255 keyboard_event_get::@3/(byte) keyboard_event_get::return#1 )
[204] return
to:@return
keyboard_event_scan: scope:[keyboard_event_scan] from main::@9
[184] phi()
[205] phi()
to:keyboard_event_scan::@1
keyboard_event_scan::@1: scope:[keyboard_event_scan] from keyboard_event_scan keyboard_event_scan::@3
[185] (byte) keyboard_events_size#29 ← phi( keyboard_event_scan/(byte) keyboard_events_size#19 keyboard_event_scan::@3/(byte) keyboard_events_size#13 )
[185] (byte) keyboard_event_scan::keycode#11 ← phi( keyboard_event_scan/(byte/signed byte/word/signed word/dword/signed dword) 0 keyboard_event_scan::@3/(byte) keyboard_event_scan::keycode#14 )
[185] (byte) keyboard_event_scan::row#2 ← phi( keyboard_event_scan/(byte/signed byte/word/signed word/dword/signed dword) 0 keyboard_event_scan::@3/(byte) keyboard_event_scan::row#1 )
[186] (byte) keyboard_matrix_read::rowid#0 ← (byte) keyboard_event_scan::row#2
[187] call keyboard_matrix_read
[188] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0
[206] (byte) keyboard_events_size#29 ← phi( keyboard_event_scan/(byte) keyboard_events_size#19 keyboard_event_scan::@3/(byte) keyboard_events_size#13 )
[206] (byte) keyboard_event_scan::keycode#11 ← phi( keyboard_event_scan/(byte/signed byte/word/signed word/dword/signed dword) 0 keyboard_event_scan::@3/(byte) keyboard_event_scan::keycode#14 )
[206] (byte) keyboard_event_scan::row#2 ← phi( keyboard_event_scan/(byte/signed byte/word/signed word/dword/signed dword) 0 keyboard_event_scan::@3/(byte) keyboard_event_scan::row#1 )
[207] (byte) keyboard_matrix_read::rowid#0 ← (byte) keyboard_event_scan::row#2
[208] call keyboard_matrix_read
[209] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0
to:keyboard_event_scan::@25
keyboard_event_scan::@25: scope:[keyboard_event_scan] from keyboard_event_scan::@1
[189] (byte) keyboard_event_scan::row_scan#0 ← (byte) keyboard_matrix_read::return#2
[190] 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::@4
[210] (byte) keyboard_event_scan::row_scan#0 ← (byte) keyboard_matrix_read::return#2
[211] 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::@4
to:keyboard_event_scan::@13
keyboard_event_scan::@13: scope:[keyboard_event_scan] from keyboard_event_scan::@25
[191] (byte) keyboard_event_scan::keycode#1 ← (byte) keyboard_event_scan::keycode#11 + (byte/signed byte/word/signed word/dword/signed dword) 8
[212] (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::@3
keyboard_event_scan::@3: scope:[keyboard_event_scan] from keyboard_event_scan::@13 keyboard_event_scan::@19
[192] (byte) keyboard_events_size#13 ← phi( keyboard_event_scan::@13/(byte) keyboard_events_size#29 keyboard_event_scan::@19/(byte) keyboard_events_size#30 )
[192] (byte) keyboard_event_scan::keycode#14 ← phi( keyboard_event_scan::@13/(byte) keyboard_event_scan::keycode#1 keyboard_event_scan::@19/(byte) keyboard_event_scan::keycode#15 )
[193] (byte) keyboard_event_scan::row#1 ← ++ (byte) keyboard_event_scan::row#2
[194] if((byte) keyboard_event_scan::row#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto keyboard_event_scan::@1
[213] (byte) keyboard_events_size#13 ← phi( keyboard_event_scan::@13/(byte) keyboard_events_size#29 keyboard_event_scan::@19/(byte) keyboard_events_size#30 )
[213] (byte) keyboard_event_scan::keycode#14 ← phi( keyboard_event_scan::@13/(byte) keyboard_event_scan::keycode#1 keyboard_event_scan::@19/(byte) keyboard_event_scan::keycode#15 )
[214] (byte) keyboard_event_scan::row#1 ← ++ (byte) keyboard_event_scan::row#2
[215] if((byte) keyboard_event_scan::row#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto keyboard_event_scan::@1
to:keyboard_event_scan::@20
keyboard_event_scan::@20: scope:[keyboard_event_scan] from keyboard_event_scan::@3
[195] phi()
[196] call keyboard_event_pressed
[197] (byte) keyboard_event_pressed::return#0 ← (byte) keyboard_event_pressed::return#11
[216] phi()
[217] call keyboard_event_pressed
[218] (byte) keyboard_event_pressed::return#0 ← (byte) keyboard_event_pressed::return#11
to:keyboard_event_scan::@26
keyboard_event_scan::@26: scope:[keyboard_event_scan] from keyboard_event_scan::@20
[198] (byte~) keyboard_event_scan::$14 ← (byte) keyboard_event_pressed::return#0
[199] if((byte~) keyboard_event_scan::$14==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@9
[219] (byte~) keyboard_event_scan::$14 ← (byte) keyboard_event_pressed::return#0
[220] if((byte~) keyboard_event_scan::$14==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@9
to:keyboard_event_scan::@21
keyboard_event_scan::@21: scope:[keyboard_event_scan] from keyboard_event_scan::@26
[200] phi()
[221] phi()
to:keyboard_event_scan::@9
keyboard_event_scan::@9: scope:[keyboard_event_scan] from keyboard_event_scan::@21 keyboard_event_scan::@26
[201] phi()
[202] call keyboard_event_pressed
[203] (byte) keyboard_event_pressed::return#1 ← (byte) keyboard_event_pressed::return#11
[222] phi()
[223] call keyboard_event_pressed
[224] (byte) keyboard_event_pressed::return#1 ← (byte) keyboard_event_pressed::return#11
to:keyboard_event_scan::@27
keyboard_event_scan::@27: scope:[keyboard_event_scan] from keyboard_event_scan::@9
[204] (byte~) keyboard_event_scan::$18 ← (byte) keyboard_event_pressed::return#1
[205] if((byte~) keyboard_event_scan::$18==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@10
[225] (byte~) keyboard_event_scan::$18 ← (byte) keyboard_event_pressed::return#1
[226] if((byte~) keyboard_event_scan::$18==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@10
to:keyboard_event_scan::@22
keyboard_event_scan::@22: scope:[keyboard_event_scan] from keyboard_event_scan::@27
[206] phi()
[227] phi()
to:keyboard_event_scan::@10
keyboard_event_scan::@10: scope:[keyboard_event_scan] from keyboard_event_scan::@22 keyboard_event_scan::@27
[207] phi()
[208] call keyboard_event_pressed
[209] (byte) keyboard_event_pressed::return#2 ← (byte) keyboard_event_pressed::return#11
[228] phi()
[229] call keyboard_event_pressed
[230] (byte) keyboard_event_pressed::return#2 ← (byte) keyboard_event_pressed::return#11
to:keyboard_event_scan::@28
keyboard_event_scan::@28: scope:[keyboard_event_scan] from keyboard_event_scan::@10
[210] (byte~) keyboard_event_scan::$22 ← (byte) keyboard_event_pressed::return#2
[211] if((byte~) keyboard_event_scan::$22==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@11
[231] (byte~) keyboard_event_scan::$22 ← (byte) keyboard_event_pressed::return#2
[232] if((byte~) keyboard_event_scan::$22==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@11
to:keyboard_event_scan::@23
keyboard_event_scan::@23: scope:[keyboard_event_scan] from keyboard_event_scan::@28
[212] phi()
[233] phi()
to:keyboard_event_scan::@11
keyboard_event_scan::@11: scope:[keyboard_event_scan] from keyboard_event_scan::@23 keyboard_event_scan::@28
[213] phi()
[214] call keyboard_event_pressed
[215] (byte) keyboard_event_pressed::return#10 ← (byte) keyboard_event_pressed::return#11
[234] phi()
[235] call keyboard_event_pressed
[236] (byte) keyboard_event_pressed::return#10 ← (byte) keyboard_event_pressed::return#11
to:keyboard_event_scan::@29
keyboard_event_scan::@29: scope:[keyboard_event_scan] from keyboard_event_scan::@11
[216] (byte~) keyboard_event_scan::$26 ← (byte) keyboard_event_pressed::return#10
[217] if((byte~) keyboard_event_scan::$26==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@return
[237] (byte~) keyboard_event_scan::$26 ← (byte) keyboard_event_pressed::return#10
[238] if((byte~) keyboard_event_scan::$26==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@return
to:keyboard_event_scan::@24
keyboard_event_scan::@24: scope:[keyboard_event_scan] from keyboard_event_scan::@29
[218] phi()
[239] phi()
to:keyboard_event_scan::@return
keyboard_event_scan::@return: scope:[keyboard_event_scan] from keyboard_event_scan::@24 keyboard_event_scan::@29
[219] return
[240] return
to:@return
keyboard_event_scan::@4: scope:[keyboard_event_scan] from keyboard_event_scan::@25 keyboard_event_scan::@5
[220] (byte) keyboard_events_size#10 ← phi( keyboard_event_scan::@25/(byte) keyboard_events_size#29 keyboard_event_scan::@5/(byte) keyboard_events_size#30 )
[220] (byte) keyboard_event_scan::keycode#10 ← phi( keyboard_event_scan::@25/(byte) keyboard_event_scan::keycode#11 keyboard_event_scan::@5/(byte) keyboard_event_scan::keycode#15 )
[220] (byte) keyboard_event_scan::col#2 ← phi( keyboard_event_scan::@25/(byte/signed byte/word/signed word/dword/signed dword) 0 keyboard_event_scan::@5/(byte) keyboard_event_scan::col#1 )
[221] (byte~) keyboard_event_scan::$3 ← (byte) keyboard_event_scan::row_scan#0 ^ *((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2)
[222] (byte~) keyboard_event_scan::$4 ← (byte~) keyboard_event_scan::$3 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte) keyboard_event_scan::col#2)
[223] if((byte~) keyboard_event_scan::$4==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@5
[241] (byte) keyboard_events_size#10 ← phi( keyboard_event_scan::@25/(byte) keyboard_events_size#29 keyboard_event_scan::@5/(byte) keyboard_events_size#30 )
[241] (byte) keyboard_event_scan::keycode#10 ← phi( keyboard_event_scan::@25/(byte) keyboard_event_scan::keycode#11 keyboard_event_scan::@5/(byte) keyboard_event_scan::keycode#15 )
[241] (byte) keyboard_event_scan::col#2 ← phi( keyboard_event_scan::@25/(byte/signed byte/word/signed word/dword/signed dword) 0 keyboard_event_scan::@5/(byte) keyboard_event_scan::col#1 )
[242] (byte~) keyboard_event_scan::$3 ← (byte) keyboard_event_scan::row_scan#0 ^ *((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2)
[243] (byte~) keyboard_event_scan::$4 ← (byte~) keyboard_event_scan::$3 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte) keyboard_event_scan::col#2)
[244] if((byte~) keyboard_event_scan::$4==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@5
to:keyboard_event_scan::@15
keyboard_event_scan::@15: scope:[keyboard_event_scan] from keyboard_event_scan::@4
[224] if((byte) keyboard_events_size#10==(byte/signed byte/word/signed word/dword/signed dword) 8) goto keyboard_event_scan::@5
[245] if((byte) keyboard_events_size#10==(byte/signed byte/word/signed word/dword/signed dword) 8) goto keyboard_event_scan::@5
to:keyboard_event_scan::@16
keyboard_event_scan::@16: scope:[keyboard_event_scan] from keyboard_event_scan::@15
[225] (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)
[226] if((byte) keyboard_event_scan::event_type#0==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@7
[246] (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)
[247] if((byte) keyboard_event_scan::event_type#0==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@7
to:keyboard_event_scan::@17
keyboard_event_scan::@17: scope:[keyboard_event_scan] from keyboard_event_scan::@16
[227] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte) keyboard_event_scan::keycode#10
[228] (byte) keyboard_events_size#2 ← ++ (byte) keyboard_events_size#10
[248] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte) keyboard_event_scan::keycode#10
[249] (byte) keyboard_events_size#2 ← ++ (byte) keyboard_events_size#10
to:keyboard_event_scan::@5
keyboard_event_scan::@5: scope:[keyboard_event_scan] from keyboard_event_scan::@15 keyboard_event_scan::@17 keyboard_event_scan::@4 keyboard_event_scan::@7
[229] (byte) keyboard_events_size#30 ← phi( keyboard_event_scan::@17/(byte) keyboard_events_size#2 keyboard_event_scan::@4/(byte) keyboard_events_size#10 keyboard_event_scan::@15/(byte) keyboard_events_size#10 keyboard_event_scan::@7/(byte) keyboard_events_size#1 )
[230] (byte) keyboard_event_scan::keycode#15 ← ++ (byte) keyboard_event_scan::keycode#10
[231] (byte) keyboard_event_scan::col#1 ← ++ (byte) keyboard_event_scan::col#2
[232] if((byte) keyboard_event_scan::col#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto keyboard_event_scan::@4
[250] (byte) keyboard_events_size#30 ← phi( keyboard_event_scan::@17/(byte) keyboard_events_size#2 keyboard_event_scan::@4/(byte) keyboard_events_size#10 keyboard_event_scan::@15/(byte) keyboard_events_size#10 keyboard_event_scan::@7/(byte) keyboard_events_size#1 )
[251] (byte) keyboard_event_scan::keycode#15 ← ++ (byte) keyboard_event_scan::keycode#10
[252] (byte) keyboard_event_scan::col#1 ← ++ (byte) keyboard_event_scan::col#2
[253] if((byte) keyboard_event_scan::col#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto keyboard_event_scan::@4
to:keyboard_event_scan::@19
keyboard_event_scan::@19: scope:[keyboard_event_scan] from keyboard_event_scan::@5
[233] *((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2) ← (byte) keyboard_event_scan::row_scan#0
[254] *((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2) ← (byte) keyboard_event_scan::row_scan#0
to:keyboard_event_scan::@3
keyboard_event_scan::@7: scope:[keyboard_event_scan] from keyboard_event_scan::@16
[234] (byte/word/dword~) keyboard_event_scan::$11 ← (byte) keyboard_event_scan::keycode#10 | (byte/signed byte/word/signed word/dword/signed dword) 64
[235] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte/word/dword~) keyboard_event_scan::$11
[236] (byte) keyboard_events_size#1 ← ++ (byte) keyboard_events_size#10
[255] (byte/word/dword~) keyboard_event_scan::$11 ← (byte) keyboard_event_scan::keycode#10 | (byte/signed byte/word/signed word/dword/signed dword) 64
[256] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte/word/dword~) keyboard_event_scan::$11
[257] (byte) keyboard_events_size#1 ← ++ (byte) keyboard_events_size#10
to:keyboard_event_scan::@5
keyboard_matrix_read: scope:[keyboard_matrix_read] from keyboard_event_scan::@1
[237] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#0)
[238] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B#0)
[258] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#0)
[259] (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
[239] return
[260] return
to:@return
init: scope:[init] from main
[240] phi()
[241] call fill
[261] phi()
[262] call fill
to:init::@9
init::@9: scope:[init] from init
[242] phi()
[243] call fill
[263] phi()
[264] call fill
to:init::@1
init::@1: scope:[init] from init::@1 init::@9
[244] (byte*) init::li#2 ← phi( init::@1/(byte*) init::li#1 init::@9/(const byte*) COLS#0+(byte/signed byte/word/signed word/dword/signed dword) 40+(byte/signed byte/word/signed word/dword/signed dword) 15 )
[244] (byte) init::i#2 ← phi( init::@1/(byte) init::i#1 init::@9/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[245] (byte~) init::$5 ← (byte) init::i#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
[246] *((const byte*[PLAYFIELD_LINES#0+3]) screen_lines#0 + (byte~) init::$5) ← (byte*) init::li#2
[247] (byte*) init::li#1 ← (byte*) init::li#2 + (byte/signed byte/word/signed word/dword/signed dword) 40
[248] (byte) init::i#1 ← ++ (byte) init::i#2
[249] if((byte) init::i#1!=(const byte) PLAYFIELD_LINES#0+(byte/signed byte/word/signed word/dword/signed dword) 2+(byte/signed byte/word/signed word/dword/signed dword) 1) goto init::@1
[265] (byte*) init::li#2 ← phi( init::@1/(byte*) init::li#1 init::@9/(const byte*) COLS#0+(byte/signed byte/word/signed word/dword/signed dword) 40+(byte/signed byte/word/signed word/dword/signed dword) 15 )
[265] (byte) init::i#2 ← phi( init::@1/(byte) init::i#1 init::@9/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[266] (byte~) init::$5 ← (byte) init::i#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
[267] *((const byte*[PLAYFIELD_LINES#0+3]) screen_lines#0 + (byte~) init::$5) ← (byte*) init::li#2
[268] (byte*) init::li#1 ← (byte*) init::li#2 + (byte/signed byte/word/signed word/dword/signed dword) 40
[269] (byte) init::i#1 ← ++ (byte) init::i#2
[270] if((byte) init::i#1!=(const byte) PLAYFIELD_LINES#0+(byte/signed byte/word/signed word/dword/signed dword) 2+(byte/signed byte/word/signed word/dword/signed dword) 1) goto init::@1
to:init::@2
init::@2: scope:[init] from init::@1 init::@2
[250] (byte*) init::pli#2 ← phi( init::@2/(byte*) init::pli#1 init::@1/(const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 )
[250] (byte) init::j#2 ← phi( init::@2/(byte) init::j#1 init::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[251] (byte~) init::$8 ← (byte) init::j#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
[252] *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte~) init::$8) ← (byte*) init::pli#2
[253] (byte*) init::pli#1 ← (byte*) init::pli#2 + (byte/signed byte/word/signed word/dword/signed dword) 10
[254] (byte) init::j#1 ← ++ (byte) init::j#2
[255] if((byte) 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 init::@2
[271] (byte*) init::pli#2 ← phi( init::@2/(byte*) init::pli#1 init::@1/(const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 )
[271] (byte) init::j#2 ← phi( init::@2/(byte) init::j#1 init::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[272] (byte~) init::$8 ← (byte) init::j#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
[273] *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte~) init::$8) ← (byte*) init::pli#2
[274] (byte*) init::pli#1 ← (byte*) init::pli#2 + (byte/signed byte/word/signed word/dword/signed dword) 10
[275] (byte) init::j#1 ← ++ (byte) init::j#2
[276] if((byte) 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 init::@2
to:init::@3
init::@3: scope:[init] from init::@2 init::@7
[256] (byte) init::l#4 ← phi( init::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 init::@7/(byte) init::l#1 )
[256] (byte*) init::line#4 ← phi( init::@2/(const byte*) COLS#0+(byte/signed byte/word/signed word/dword/signed dword) 14 init::@7/(byte*) init::line#1 )
[277] (byte) init::l#4 ← phi( init::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 init::@7/(byte) init::l#1 )
[277] (byte*) init::line#4 ← phi( init::@2/(const byte*) COLS#0+(byte/signed byte/word/signed word/dword/signed dword) 14 init::@7/(byte*) init::line#1 )
to:init::@4
init::@4: scope:[init] from init::@3 init::@4
[257] (byte) init::c#2 ← phi( init::@3/(byte/signed byte/word/signed word/dword/signed dword) 0 init::@4/(byte) init::c#1 )
[258] (byte*~) init::$13 ← (byte*) init::line#4 + (byte) init::c#2
[259] *((byte*~) init::$13) ← (const byte) DARK_GREY#0
[260] (byte) init::c#1 ← ++ (byte) init::c#2
[261] if((byte) init::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 init::@4
[278] (byte) init::c#2 ← phi( init::@3/(byte/signed byte/word/signed word/dword/signed dword) 0 init::@4/(byte) init::c#1 )
[279] (byte*~) init::$13 ← (byte*) init::line#4 + (byte) init::c#2
[280] *((byte*~) init::$13) ← (const byte) DARK_GREY#0
[281] (byte) init::c#1 ← ++ (byte) init::c#2
[282] if((byte) init::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 init::@4
to:init::@7
init::@7: scope:[init] from init::@4
[262] (byte*) init::line#1 ← (byte*) init::line#4 + (byte/signed byte/word/signed word/dword/signed dword) 40
[263] (byte) init::l#1 ← ++ (byte) init::l#4
[264] if((byte) init::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 init::@3
[283] (byte*) init::line#1 ← (byte*) init::line#4 + (byte/signed byte/word/signed word/dword/signed dword) 40
[284] (byte) init::l#1 ← ++ (byte) init::l#4
[285] if((byte) init::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 init::@3
to:init::@return
init::@return: scope:[init] from init::@7
[265] return
[286] return
to:@return
fill: scope:[fill] from init init::@9
[266] (byte) fill::val#3 ← phi( init/(byte/word/signed word/dword/signed dword) 160 init::@9/(const byte) BLACK#0 )
[266] (byte*) fill::addr#0 ← phi( init/(const byte*) SCREEN#0 init::@9/(const byte*) COLS#0 )
[267] (byte*) fill::end#0 ← (byte*) fill::addr#0 + (word/signed word/dword/signed dword) 1000
[287] (byte) fill::val#3 ← phi( init/(byte/word/signed word/dword/signed dword) 160 init::@9/(const byte) BLACK#0 )
[287] (byte*) fill::addr#0 ← phi( init/(const byte*) SCREEN#0 init::@9/(const byte*) COLS#0 )
[288] (byte*) fill::end#0 ← (byte*) fill::addr#0 + (word/signed word/dword/signed dword) 1000
to:fill::@1
fill::@1: scope:[fill] from fill fill::@1
[268] (byte*) fill::addr#2 ← phi( fill/(byte*) fill::addr#0 fill::@1/(byte*) fill::addr#1 )
[269] *((byte*) fill::addr#2) ← (byte) fill::val#3
[270] (byte*) fill::addr#1 ← ++ (byte*) fill::addr#2
[271] if((byte*) fill::addr#1!=(byte*) fill::end#0) goto fill::@1
[289] (byte*) fill::addr#2 ← phi( fill/(byte*) fill::addr#0 fill::@1/(byte*) fill::addr#1 )
[290] *((byte*) fill::addr#2) ← (byte) fill::val#3
[291] (byte*) fill::addr#1 ← ++ (byte*) fill::addr#2
[292] if((byte*) fill::addr#1!=(byte*) fill::end#0) goto fill::@1
to:fill::@return
fill::@return: scope:[fill] from fill::@1
[272] return
[293] return
to:@return

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,4 @@
(label) @20
(label) @21
(label) @begin
(label) @end
(byte) BLACK
@ -55,8 +55,7 @@
(const byte*) RASTER#0 RASTER = ((byte*))(word/dword/signed dword) 53266
(byte*) SCREEN
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024
(byte()) collision((byte) collision::ypos , (byte) collision::xpos)
(byte~) collision::$1 reg byte a 202.0
(byte()) collision((byte) collision::xpos , (byte) collision::ypos , (byte) collision::orientation)
(byte~) collision::$7 reg byte a 2002.0
(label) collision::@1
(label) collision::@17
@ -71,91 +70,105 @@
(label) collision::@return
(byte) collision::c
(byte) collision::c#1 reg byte x 1001.0
(byte) collision::c#2 reg byte x 333.6666666666667
(byte) collision::c#2 reg byte x 222.44444444444446
(byte) collision::col
(byte) collision::col#0 reg byte y 1001.0
(byte) collision::col#1 col zp ZP_BYTE:11 500.5
(byte) collision::col#2 col zp ZP_BYTE:11 638.25
(byte~) collision::col#9 col zp ZP_BYTE:11 202.0
(byte) collision::i
(byte) collision::i#1 i zp ZP_BYTE:23 175.25
(byte~) collision::i#11 i#11 zp ZP_BYTE:9 202.0
(byte~) collision::i#13 i#13 zp ZP_BYTE:9 2002.0
(byte) collision::i#2 i#2 zp ZP_BYTE:9 1552.0
(byte) collision::i#3 i#3 zp ZP_BYTE:9 50.5
(byte) collision::i#1 i zp ZP_BYTE:24 161.76923076923077
(byte~) collision::i#11 i#11 zp ZP_BYTE:10 202.0
(byte~) collision::i#13 i#13 zp ZP_BYTE:10 2002.0
(byte) collision::i#2 i#2 zp ZP_BYTE:10 1552.0
(byte) collision::i#3 i#3 zp ZP_BYTE:10 67.33333333333333
(byte) collision::l
(byte) collision::l#1 l zp ZP_BYTE:8 101.0
(byte) collision::l#2 l zp ZP_BYTE:8 18.9375
(byte) collision::line
(byte) collision::line#0 line zp ZP_BYTE:22 80.2
(byte) collision::l#1 l zp ZP_BYTE:9 101.0
(byte) collision::l#6 l zp ZP_BYTE:9 12.625
(byte) collision::orientation
(byte) collision::orientation#0 reg byte x 2.0
(byte) collision::orientation#1 reg byte x 2.0
(byte) collision::orientation#2 reg byte x 2.0
(byte) collision::orientation#3 reg byte x 2.0
(byte) collision::orientation#4 reg byte x 10.0
(byte*) collision::piece_gfx
(byte*) collision::piece_gfx#0 piece_gfx zp ZP_WORD:5 47.76190476190476
(byte*) collision::playfield_line
(byte*) collision::playfield_line#0 playfield_line zp ZP_WORD:20 84.76923076923077
(byte*) collision::playfield_line#0 playfield_line zp ZP_WORD:22 78.71428571428571
(byte) collision::return
(byte) collision::return#0 reg byte a 4.0
(byte) collision::return#10 reg byte a 1.2000000000000002
(byte) collision::return#11 reg byte a 4.0
(byte) collision::return#1 reg byte a 4.0
(byte) collision::return#12 reg byte a 4.0
(byte) collision::return#13 reg byte a 4.0
(byte) collision::return#14 reg byte a 1.3333333333333333
(byte) collision::xpos
(byte) collision::xpos#0 xpos zp ZP_BYTE:7 2.0
(byte) collision::xpos#1 xpos zp ZP_BYTE:7 1.3333333333333333
(byte) collision::xpos#2 xpos zp ZP_BYTE:7 1.3333333333333333
(byte) collision::xpos#8 xpos zp ZP_BYTE:7 50.349999999999994
(byte) collision::xpos#0 xpos zp ZP_BYTE:7 1.3333333333333333
(byte) collision::xpos#1 xpos zp ZP_BYTE:7 1.0
(byte) collision::xpos#2 xpos zp ZP_BYTE:7 1.0
(byte) collision::xpos#3 xpos zp ZP_BYTE:7 1.0
(byte) collision::xpos#5 xpos zp ZP_BYTE:7 4.954545454545454
(byte) collision::ypos
(byte) collision::ypos#0 ypos zp ZP_BYTE:4 1.3333333333333333
(byte) collision::ypos#1 ypos zp ZP_BYTE:4 2.0
(byte) collision::ypos#2 ypos zp ZP_BYTE:4 2.0
(byte) collision::ypos#4 ypos zp ZP_BYTE:4 5.35
(byte) collision::ypos#0 reg byte y 1.0
(byte) collision::ypos#1 reg byte y 1.3333333333333333
(byte) collision::ypos#2 reg byte y 1.3333333333333333
(byte) collision::ypos#3 reg byte y 1.3333333333333333
(byte) collision::ypos#4 reg byte y 5.0
(byte) collision::ypos2
(byte) collision::ypos2#0 ypos2 zp ZP_BYTE:8 4.0
(byte) collision::ypos2#1 ypos2 zp ZP_BYTE:8 50.5
(byte) collision::ypos2#2 ypos2 zp ZP_BYTE:8 87.06666666666668
(byte) current_movedown_counter
(byte) current_movedown_counter#10 current_movedown_counter zp ZP_BYTE:3 0.5333333333333333
(byte) current_movedown_counter#12 current_movedown_counter zp ZP_BYTE:3 0.6190476190476191
(byte) current_movedown_counter#12 current_movedown_counter zp ZP_BYTE:3 0.5
(byte) current_movedown_counter#15 current_movedown_counter zp ZP_BYTE:3 1.3
(byte) current_movedown_rate
(const byte) current_movedown_rate#0 current_movedown_rate = (byte/signed byte/word/signed word/dword/signed dword) 50
(byte) current_movedown_rate_fast
(const byte) current_movedown_rate_fast#0 current_movedown_rate_fast = (byte/signed byte/word/signed word/dword/signed dword) 5
(byte*) current_piece
(byte*) current_piece#11 current_piece zp ZP_WORD:11 0.45454545454545453
(byte*) current_piece#13 current_piece zp ZP_WORD:11 0.37254901960784303
(byte*) current_piece#23 current_piece zp ZP_WORD:11 4.0
(byte*) current_piece#11 current_piece zp ZP_WORD:12 0.5
(byte*) current_piece#13 current_piece zp ZP_WORD:12 0.3382352941176471
(byte*) current_piece#15 current_piece#15 zp ZP_WORD:5 10.0
(byte*) current_piece#23 current_piece zp ZP_WORD:12 4.0
(byte*~) current_piece#67 current_piece#67 zp ZP_WORD:5 4.0
(byte*~) current_piece#68 current_piece#68 zp ZP_WORD:5 4.0
(byte*~) current_piece#69 current_piece#69 zp ZP_WORD:5 4.0
(byte*~) current_piece#70 current_piece#70 zp ZP_WORD:5 4.0
(byte) current_piece_color
(byte) current_piece_color#11 current_piece_color zp ZP_BYTE:16 20.73469387755102
(byte) current_piece_color#13 current_piece_color zp ZP_BYTE:16 1.2380952380952381
(byte) current_piece_color#23 current_piece_color zp ZP_BYTE:16 4.0
(byte) current_piece_color#62 current_piece_color#62 zp ZP_BYTE:8 56.22222222222223
(byte~) current_piece_color#69 current_piece_color#69 zp ZP_BYTE:8 22.0
(byte) current_piece_color#11 current_piece_color zp ZP_BYTE:17 20.32
(byte) current_piece_color#13 current_piece_color zp ZP_BYTE:17 1.0
(byte) current_piece_color#23 current_piece_color zp ZP_BYTE:17 4.0
(byte) current_piece_color#63 current_piece_color#63 zp ZP_BYTE:7 53.26315789473684
(byte~) current_piece_color#70 current_piece_color#70 zp ZP_BYTE:7 22.0
(byte*) current_piece_gfx
(byte*) current_piece_gfx#10 current_piece_gfx zp ZP_WORD:14 4.0
(byte*~) current_piece_gfx#108 current_piece_gfx#108 zp ZP_WORD:5 4.0
(byte*~) current_piece_gfx#109 current_piece_gfx#109 zp ZP_WORD:5 4.0
(byte*) current_piece_gfx#11 current_piece_gfx zp ZP_WORD:14 2.375
(byte*~) current_piece_gfx#110 current_piece_gfx#110 zp ZP_WORD:5 4.0
(byte*) current_piece_gfx#16 current_piece_gfx zp ZP_WORD:14 20.77551020408163
(byte*) current_piece_gfx#18 current_piece_gfx zp ZP_WORD:14 0.6896551724137933
(byte*) current_piece_gfx#30 current_piece_gfx zp ZP_WORD:14 4.0
(byte*) current_piece_gfx#46 current_piece_gfx#46 zp ZP_WORD:5 50.349999999999994
(byte*) current_piece_gfx#75 current_piece_gfx#75 zp ZP_WORD:5 56.22222222222223
(byte*) current_piece_gfx#9 current_piece_gfx zp ZP_WORD:14 4.0
(byte*~) current_piece_gfx#99 current_piece_gfx#99 zp ZP_WORD:5 7.333333333333333
(byte*) current_piece_gfx#15 current_piece_gfx zp ZP_WORD:15 20.32
(byte*) current_piece_gfx#17 current_piece_gfx zp ZP_WORD:15 0.2857142857142857
(byte*) current_piece_gfx#18 current_piece_gfx zp ZP_WORD:15 1.75
(byte*) current_piece_gfx#29 current_piece_gfx zp ZP_WORD:15 4.0
(byte*) current_piece_gfx#61 current_piece_gfx#61 zp ZP_WORD:5 53.26315789473684
(byte*) current_piece_gfx#8 current_piece_gfx zp ZP_WORD:15 4.0
(byte*~) current_piece_gfx#82 current_piece_gfx#82 zp ZP_WORD:5 11.0
(byte) current_piece_orientation
(byte) current_piece_orientation#10 current_piece_orientation zp ZP_BYTE:13 3.0
(byte) current_piece_orientation#11 current_piece_orientation zp ZP_BYTE:13 1.6875
(byte) current_piece_orientation#16 current_piece_orientation zp ZP_BYTE:13 0.45454545454545453
(byte) current_piece_orientation#18 current_piece_orientation zp ZP_BYTE:13 0.6896551724137933
(byte) current_piece_orientation#29 current_piece_orientation zp ZP_BYTE:13 4.0
(byte) current_piece_orientation#9 current_piece_orientation zp ZP_BYTE:13 3.0
(byte) current_piece_orientation#15 current_piece_orientation zp ZP_BYTE:14 0.5
(byte) current_piece_orientation#18 current_piece_orientation zp ZP_BYTE:14 0.32
(byte) current_piece_orientation#23 current_piece_orientation zp ZP_BYTE:14 1.0625
(byte) current_piece_orientation#33 current_piece_orientation zp ZP_BYTE:14 4.0
(byte) current_piece_orientation#8 current_piece_orientation zp ZP_BYTE:14 3.0
(byte) current_xpos
(byte) current_xpos#10 current_xpos zp ZP_BYTE:17 4.0
(byte) current_xpos#11 current_xpos zp ZP_BYTE:17 2.375
(byte) current_xpos#16 current_xpos zp ZP_BYTE:17 20.77551020408163
(byte) current_xpos#19 current_xpos zp ZP_BYTE:17 0.7272727272727271
(byte) current_xpos#35 current_xpos zp ZP_BYTE:17 4.0
(byte) current_xpos#81 current_xpos#81 zp ZP_BYTE:7 56.22222222222223
(byte) current_xpos#9 current_xpos zp ZP_BYTE:17 4.0
(byte~) current_xpos#91 current_xpos#91 zp ZP_BYTE:7 11.0
(byte) current_xpos#16 current_xpos zp ZP_BYTE:18 20.36
(byte) current_xpos#19 current_xpos zp ZP_BYTE:18 0.72
(byte) current_xpos#23 current_xpos zp ZP_BYTE:18 0.8292682926829271
(byte) current_xpos#36 current_xpos zp ZP_BYTE:18 4.0
(byte) current_xpos#62 current_xpos#62 zp ZP_BYTE:4 5.894736842105264
(byte) current_xpos#7 current_xpos zp ZP_BYTE:18 4.0
(byte) current_xpos#9 current_xpos zp ZP_BYTE:18 4.0
(byte~) current_xpos#92 current_xpos#92 zp ZP_BYTE:4 7.333333333333333
(byte) current_ypos
(byte) current_ypos#12 current_ypos zp ZP_BYTE:2 2.458333333333333
(byte) current_ypos#16 current_ypos zp ZP_BYTE:2 0.588235294117647
(byte) current_ypos#30 current_ypos zp ZP_BYTE:2 4.0
(byte) current_ypos#35 current_ypos#35 zp ZP_BYTE:4 6.222222222222221
(byte) current_ypos#12 current_ypos zp ZP_BYTE:2 2.4081632653061225
(byte) current_ypos#16 current_ypos zp ZP_BYTE:2 0.4705882352941177
(byte) current_ypos#22 reg byte x 13.0
(byte) current_ypos#31 current_ypos zp ZP_BYTE:2 4.0
(byte) current_ypos#4 current_ypos zp ZP_BYTE:2 4.0
(byte~) current_ypos#75 current_ypos#75 zp ZP_BYTE:4 5.5
(byte~) current_ypos#72 reg byte x 5.5
(void()) fill((byte*) fill::start , (word) fill::size , (byte) fill::val)
(label) fill::@1
(label) fill::@return
@ -164,13 +177,13 @@
(byte*) fill::addr#1 addr zp ZP_WORD:5 16.5
(byte*) fill::addr#2 addr zp ZP_WORD:5 17.5
(byte*) fill::end
(byte*) fill::end#0 end zp ZP_WORD:11 2.6
(byte*) fill::end#0 end zp ZP_WORD:12 2.6
(word) fill::size
(byte*) fill::start
(byte) fill::val
(byte) fill::val#3 reg byte x 1.8333333333333333
(void()) init()
(byte*~) init::$13 $13 zp ZP_WORD:11 202.0
(byte*~) init::$13 $13 zp ZP_WORD:12 202.0
(byte~) init::$5 reg byte a 22.0
(byte~) init::$8 reg byte a 22.0
(label) init::@1
@ -274,15 +287,15 @@
(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:18 2002.0
(byte) keyboard_events_size#10 keyboard_events_size zp ZP_BYTE:18 810.9000000000001
(byte) keyboard_events_size#13 keyboard_events_size zp ZP_BYTE:18 9.967741935483872
(byte) keyboard_events_size#16 keyboard_events_size zp ZP_BYTE:18 0.6
(byte) keyboard_events_size#19 keyboard_events_size zp ZP_BYTE:18 2.6
(byte) keyboard_events_size#2 keyboard_events_size zp ZP_BYTE:18 2002.0
(byte) keyboard_events_size#29 keyboard_events_size zp ZP_BYTE:18 43.57142857142858
(byte) keyboard_events_size#30 keyboard_events_size zp ZP_BYTE:18 1021.2
(byte) keyboard_events_size#4 keyboard_events_size zp ZP_BYTE:18 3.0
(byte) keyboard_events_size#1 keyboard_events_size zp ZP_BYTE:19 2002.0
(byte) keyboard_events_size#10 keyboard_events_size zp ZP_BYTE:19 810.9000000000001
(byte) keyboard_events_size#13 keyboard_events_size zp ZP_BYTE:19 9.967741935483872
(byte) keyboard_events_size#16 keyboard_events_size zp ZP_BYTE:19 0.49999999999999994
(byte) keyboard_events_size#19 keyboard_events_size zp ZP_BYTE:19 2.6
(byte) keyboard_events_size#2 keyboard_events_size zp ZP_BYTE:19 2002.0
(byte) keyboard_events_size#29 keyboard_events_size zp ZP_BYTE:19 43.57142857142858
(byte) keyboard_events_size#30 keyboard_events_size zp ZP_BYTE:19 1021.2
(byte) keyboard_events_size#4 keyboard_events_size zp ZP_BYTE:19 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) 16, (byte/signed byte/word/signed word/dword/signed dword) 32, (byte/signed byte/word/signed word/dword/signed dword) 64, (byte/word/signed word/dword/signed dword) 128 }
(byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid)
@ -325,6 +338,7 @@
(byte*) lock_current::playfield_line
(byte*) lock_current::playfield_line#0 playfield_line zp ZP_WORD:5 122.44444444444446
(void()) main()
(byte~) main::$10 reg byte a 22.0
(byte~) main::$8 reg byte a 22.0
(byte~) main::$9 reg byte a 22.0
(label) main::@1
@ -339,77 +353,89 @@
(label) main::@28
(label) main::@29
(label) main::@30
(label) main::@31
(label) main::@4
(label) main::@7
(label) main::@9
(byte) main::key_event
(byte) main::key_event#0 key_event zp ZP_BYTE:10 5.5
(byte) main::key_event#0 key_event zp ZP_BYTE:20 4.0
(byte) main::render
(byte) main::render#1 render zp ZP_BYTE:19 4.4
(byte) main::render#2 reg byte a 22.0
(byte) main::render#1 render zp ZP_BYTE:21 4.4
(byte) main::render#2 render zp ZP_BYTE:21 4.4
(byte) main::render#3 reg byte a 22.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) 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) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed 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) 0, (byte/signed byte/word/signed 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) 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) 0 }
(byte()) play_movedown((byte) play_movedown::key_event)
(byte~) play_movedown::$12 reg byte a 4.0
(byte~) play_movedown::$2 reg byte a 4.0
(label) play_movedown::@1
(label) play_movedown::@10
(label) play_movedown::@11
(label) play_movedown::@12
(label) play_movedown::@13
(label) play_movedown::@17
(label) play_movedown::@18
(label) play_movedown::@19
(label) play_movedown::@2
(label) play_movedown::@4
(label) play_movedown::@6
(label) play_movedown::@7
(label) play_movedown::@8
(label) play_movedown::@9
(label) play_movedown::@return
(byte) play_movedown::key_event
(byte) play_movedown::key_event#0 reg byte a 6.5
(byte) play_movedown::movedown
(byte) play_movedown::movedown#10 reg byte x 1.0
(byte) play_movedown::movedown#2 reg byte x 4.0
(byte) play_movedown::movedown#3 reg byte x 4.0
(byte) play_movedown::movedown#6 reg byte x 6.0
(byte) play_movedown::movedown#7 reg byte x 5.0
(byte) play_movedown::return
(byte) play_movedown::return#0 reg byte a 22.0
(byte) play_movedown::return#3 reg byte x 3.6666666666666665
(byte()) play_moveother((byte) play_moveother::key_event)
(byte~) play_moveother::$0 reg byte a 4.0
(byte/signed word/word/dword/signed dword~) play_moveother::$11 reg byte a 4.0
(byte~) play_moveother::$15 reg byte a 4.0
(byte~) play_moveother::$19 reg byte a 4.0
(byte/signed word/word/dword/signed dword~) play_moveother::$8 reg byte a 4.0
(label) play_moveother::@1
(label) play_moveother::@11
(label) play_moveother::@12
(label) play_moveother::@13
(label) play_moveother::@14
(label) play_moveother::@15
(label) play_moveother::@18
(label) play_moveother::@2
(label) play_moveother::@20
(label) play_moveother::@22
(label) play_moveother::@23
(label) play_moveother::@3
(label) play_moveother::@4
(label) play_moveother::@return
(byte) play_moveother::key_event
(byte) play_moveother::key_event#0 reg byte x 3.5000000000000004
(byte) play_moveother::render
(byte) play_moveother::return
(byte) play_moveother::return#0 reg byte a 22.0
(byte) play_moveother::return#1 reg byte a 3.6666666666666665
(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::@17
(label) play_move_down::@18
(label) play_move_down::@19
(label) play_move_down::@2
(label) play_move_down::@4
(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 6.5
(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::return
(byte) play_move_down::return#0 reg byte a 22.0
(byte) play_move_down::return#3 reg byte x 3.6666666666666665
(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::@11
(label) play_move_leftright::@14
(label) play_move_leftright::@15
(label) play_move_leftright::@6
(label) play_move_leftright::@7
(label) play_move_leftright::@8
(label) play_move_leftright::@return
(byte) play_move_leftright::key_event
(byte) play_move_leftright::key_event#0 reg byte a 7.5
(byte) play_move_leftright::return
(byte) play_move_leftright::return#0 reg byte a 22.0
(byte) play_move_leftright::return#2 reg byte a 3.6666666666666665
(byte()) play_move_rotate((byte) play_move_rotate::key_event)
(byte/signed word/word/dword/signed dword~) play_move_rotate::$2 reg byte a 4.0
(byte/signed word/word/dword/signed dword~) play_move_rotate::$4 reg byte a 4.0
(byte~) play_move_rotate::$6 reg byte a 4.0
(byte~) play_move_rotate::$8 reg byte a 4.0
(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::@6
(label) play_move_rotate::@return
(byte) play_move_rotate::key_event
(byte) play_move_rotate::key_event#0 reg byte a 7.5
(byte) play_move_rotate::orientation
(byte) play_move_rotate::orientation#1 orientation zp ZP_BYTE:4 4.0
(byte) play_move_rotate::orientation#2 orientation zp ZP_BYTE:4 4.0
(byte) play_move_rotate::orientation#3 orientation zp ZP_BYTE:4 0.8
(byte) play_move_rotate::return
(byte) play_move_rotate::return#0 reg byte a 22.0
(byte) play_move_rotate::return#2 reg byte a 3.6666666666666665
(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) }
(void()) render_current()
(byte~) render_current::$3 reg byte a 202.0
(label) render_current::@1
(label) render_current::@2
(label) render_current::@3
@ -420,33 +446,36 @@
(label) render_current::@return
(byte) render_current::c
(byte) render_current::c#1 reg byte x 1501.5
(byte) render_current::c#2 reg byte x 429.0
(byte) render_current::c#2 reg byte x 286.0
(byte) render_current::current_cell
(byte) render_current::current_cell#0 reg byte a 1001.0
(byte) render_current::i
(byte) render_current::i#1 i zp ZP_BYTE:10 429.0
(byte) render_current::i#2 i zp ZP_BYTE:10 1552.0
(byte) render_current::i#4 i zp ZP_BYTE:10 60.599999999999994
(byte) render_current::i#8 i zp ZP_BYTE:10 401.0
(byte) render_current::i#4 i zp ZP_BYTE:10 75.75
(byte) render_current::i#8 i zp ZP_BYTE:10 300.75
(byte) render_current::l
(byte) render_current::l#1 l zp ZP_BYTE:9 151.5
(byte) render_current::l#2 l zp ZP_BYTE:9 20.2
(byte) render_current::line
(byte) render_current::line#0 reg byte a 151.5
(byte) render_current::l#3 l zp ZP_BYTE:9 13.466666666666667
(byte*) render_current::screen_line
(byte*) render_current::screen_line#0 screen_line zp ZP_WORD:20 110.19999999999999
(byte*) render_current::screen_line#0 screen_line zp ZP_WORD:22 100.18181818181819
(byte) render_current::xpos
(byte) render_current::xpos#0 reg byte a 1501.5
(byte) render_current::xpos#0 xpos zp ZP_BYTE:11 202.0
(byte) render_current::xpos#1 xpos zp ZP_BYTE:11 667.3333333333334
(byte) render_current::xpos#2 xpos zp ZP_BYTE:11 684.1666666666667
(byte) render_current::ypos2
(byte) render_current::ypos2#0 ypos2 zp ZP_BYTE:8 4.0
(byte) render_current::ypos2#1 ypos2 zp ZP_BYTE:8 67.33333333333333
(byte) render_current::ypos2#2 ypos2 zp ZP_BYTE:8 29.000000000000004
(void()) render_playfield()
(byte~) render_playfield::$1 reg byte a 202.0
(byte*~) render_playfield::$3 $3 zp ZP_WORD:20 2002.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 reg byte x 1501.5
(byte) render_playfield::c#2 reg byte x 750.75
(byte) render_playfield::c#2 reg byte x 500.5
(byte) render_playfield::i
(byte) render_playfield::i#1 i zp ZP_BYTE:7 420.59999999999997
(byte) render_playfield::i#2 i zp ZP_BYTE:7 1034.6666666666667
@ -455,71 +484,78 @@
(byte) render_playfield::l#1 l zp ZP_BYTE:4 151.5
(byte) render_playfield::l#2 l zp ZP_BYTE:4 33.666666666666664
(byte*) render_playfield::line
(byte*) render_playfield::line#0 line zp ZP_WORD:5 157.42857142857142
(byte*) render_playfield::line#0 line zp ZP_WORD:5 202.0
(byte*) render_playfield::line#1 line zp ZP_WORD:5 500.5
(byte*) render_playfield::line#2 line zp ZP_WORD:5 1552.0
(byte*[PLAYFIELD_LINES#0+3]) screen_lines
(const byte*[PLAYFIELD_LINES#0+3]) screen_lines#0 screen_lines = { fill( PLAYFIELD_LINES#0+3, 0) }
(void()) spawn_current()
(label) spawn_current::@return
zp ZP_BYTE:2 [ current_ypos#12 current_ypos#16 current_ypos#30 current_ypos#4 init::l#4 init::l#1 ]
zp ZP_BYTE:2 [ current_ypos#12 current_ypos#16 current_ypos#31 current_ypos#4 init::l#4 init::l#1 ]
zp ZP_BYTE:3 [ current_movedown_counter#15 current_movedown_counter#12 current_movedown_counter#10 lock_current::l#2 lock_current::l#1 ]
zp ZP_BYTE:4 [ current_ypos#35 current_ypos#75 render_playfield::l#2 render_playfield::l#1 collision::ypos#4 collision::ypos#0 collision::ypos#1 collision::ypos#2 lock_current::i#2 lock_current::i#3 lock_current::i#1 keyboard_event_pressed::keycode#5 keyboard_event_scan::row#2 keyboard_event_scan::row#1 ]
zp ZP_WORD:5 [ current_piece_gfx#75 current_piece_gfx#99 current_piece_gfx#46 current_piece_gfx#108 current_piece_gfx#109 current_piece_gfx#110 init::li#2 init::li#1 init::pli#2 init::pli#1 init::line#4 init::line#1 fill::addr#2 fill::addr#0 fill::addr#1 render_playfield::line#0 lock_current::playfield_line#0 ]
zp ZP_BYTE:7 [ current_xpos#81 current_xpos#91 render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 collision::xpos#8 collision::xpos#0 collision::xpos#1 collision::xpos#2 keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#1 keyboard_event_scan::keycode#15 keyboard_event_pressed::row_bits#0 ]
zp ZP_BYTE:8 [ current_piece_color#62 current_piece_color#69 collision::l#2 collision::l#1 keyboard_event_scan::row_scan#0 ]
zp ZP_BYTE:9 [ render_current::l#2 render_current::l#1 collision::i#2 collision::i#3 collision::i#11 collision::i#13 ]
zp ZP_BYTE:10 [ render_current::i#2 render_current::i#1 render_current::i#4 render_current::i#8 main::key_event#0 ]
reg byte x [ current_ypos#22 current_ypos#72 ]
zp ZP_BYTE:4 [ current_xpos#62 current_xpos#92 render_playfield::l#2 render_playfield::l#1 play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 lock_current::i#2 lock_current::i#3 lock_current::i#1 keyboard_event_pressed::keycode#5 keyboard_event_scan::row#2 keyboard_event_scan::row#1 ]
zp ZP_WORD:5 [ current_piece_gfx#61 current_piece_gfx#82 render_playfield::line#2 render_playfield::line#0 render_playfield::line#1 current_piece#15 current_piece#67 current_piece#68 current_piece#69 current_piece#70 collision::piece_gfx#0 init::li#2 init::li#1 init::pli#2 init::pli#1 init::line#4 init::line#1 fill::addr#2 fill::addr#0 fill::addr#1 lock_current::playfield_line#0 ]
zp ZP_BYTE:7 [ current_piece_color#63 current_piece_color#70 render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 collision::xpos#5 collision::xpos#0 collision::xpos#1 collision::xpos#2 collision::xpos#3 keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#1 keyboard_event_scan::keycode#15 keyboard_event_pressed::row_bits#0 ]
zp ZP_BYTE:8 [ render_current::ypos2#2 render_current::ypos2#0 render_current::ypos2#1 collision::ypos2#2 collision::ypos2#0 collision::ypos2#1 keyboard_event_scan::row_scan#0 ]
zp ZP_BYTE:9 [ render_current::l#3 render_current::l#1 collision::l#6 collision::l#1 ]
zp ZP_BYTE:10 [ render_current::i#2 render_current::i#1 render_current::i#4 render_current::i#8 collision::i#2 collision::i#3 collision::i#11 collision::i#13 ]
zp ZP_BYTE:11 [ render_current::xpos#2 render_current::xpos#1 render_current::xpos#0 collision::col#2 collision::col#9 collision::col#1 ]
reg byte x [ render_current::c#2 render_current::c#1 ]
reg byte x [ render_playfield::c#2 render_playfield::c#1 ]
reg byte a [ play_moveother::return#1 ]
reg byte a [ play_move_rotate::return#2 ]
reg byte x [ collision::orientation#4 collision::orientation#0 collision::orientation#1 collision::orientation#2 collision::orientation#3 ]
reg byte y [ collision::ypos#4 collision::ypos#0 collision::ypos#1 collision::ypos#2 collision::ypos#3 ]
reg byte x [ collision::c#2 collision::c#1 ]
reg byte a [ collision::return#10 ]
reg byte x [ play_movedown::movedown#6 play_movedown::movedown#3 play_movedown::movedown#7 play_movedown::movedown#2 play_movedown::movedown#10 ]
zp ZP_WORD:11 [ current_piece#23 current_piece#11 current_piece#13 init::$13 fill::end#0 ]
zp ZP_BYTE:13 [ current_piece_orientation#29 current_piece_orientation#16 current_piece_orientation#11 current_piece_orientation#18 current_piece_orientation#10 current_piece_orientation#9 ]
zp ZP_WORD:14 [ current_piece_gfx#30 current_piece_gfx#16 current_piece_gfx#11 current_piece_gfx#18 current_piece_gfx#10 current_piece_gfx#9 ]
zp ZP_BYTE:16 [ current_piece_color#23 current_piece_color#11 current_piece_color#13 ]
zp ZP_BYTE:17 [ current_xpos#35 current_xpos#16 current_xpos#11 current_xpos#19 current_xpos#9 current_xpos#10 ]
reg byte x [ play_movedown::return#3 ]
reg byte a [ collision::return#14 ]
reg byte a [ play_move_leftright::return#2 ]
reg byte x [ play_move_down::movedown#6 play_move_down::movedown#3 play_move_down::movedown#7 play_move_down::movedown#2 play_move_down::movedown#10 ]
zp ZP_WORD:12 [ current_piece#23 current_piece#11 current_piece#13 init::$13 fill::end#0 ]
zp ZP_BYTE:14 [ current_piece_orientation#33 current_piece_orientation#15 current_piece_orientation#23 current_piece_orientation#8 current_piece_orientation#18 ]
zp ZP_WORD:15 [ current_piece_gfx#29 current_piece_gfx#15 current_piece_gfx#18 current_piece_gfx#8 current_piece_gfx#17 ]
zp ZP_BYTE:17 [ current_piece_color#23 current_piece_color#11 current_piece_color#13 ]
zp ZP_BYTE:18 [ current_xpos#36 current_xpos#16 current_xpos#23 current_xpos#9 current_xpos#19 current_xpos#7 ]
reg byte x [ play_move_down::return#3 ]
reg byte x [ lock_current::c#2 lock_current::c#1 ]
reg byte a [ 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:18 [ keyboard_events_size#10 keyboard_events_size#29 keyboard_events_size#19 keyboard_events_size#16 keyboard_events_size#13 keyboard_events_size#4 keyboard_events_size#30 keyboard_events_size#2 keyboard_events_size#1 ]
zp ZP_BYTE:19 [ keyboard_events_size#10 keyboard_events_size#29 keyboard_events_size#19 keyboard_events_size#16 keyboard_events_size#13 keyboard_events_size#4 keyboard_events_size#30 keyboard_events_size#2 keyboard_events_size#1 ]
reg byte x [ init::i#2 init::i#1 ]
reg byte x [ init::j#2 init::j#1 ]
reg byte x [ init::c#2 init::c#1 ]
reg byte x [ fill::val#3 ]
reg byte a [ keyboard_event_get::return#3 ]
reg byte a [ play_movedown::key_event#0 ]
reg byte a [ play_movedown::return#0 ]
zp ZP_BYTE:20 [ main::key_event#0 ]
reg byte a [ play_move_down::key_event#0 ]
reg byte a [ play_move_down::return#0 ]
reg byte a [ main::$8 ]
zp ZP_BYTE:19 [ main::render#1 ]
reg byte x [ play_moveother::key_event#0 ]
reg byte a [ play_moveother::return#0 ]
zp ZP_BYTE:21 [ main::render#1 main::render#2 ]
reg byte a [ play_move_leftright::key_event#0 ]
reg byte a [ play_move_leftright::return#0 ]
reg byte a [ main::$9 ]
reg byte a [ main::render#2 ]
reg byte a [ render_current::line#0 ]
reg byte a [ render_current::$3 ]
zp ZP_WORD:20 [ render_current::screen_line#0 render_playfield::$3 collision::playfield_line#0 ]
reg byte a [ play_move_rotate::key_event#0 ]
reg byte a [ play_move_rotate::return#0 ]
reg byte a [ main::$10 ]
reg byte a [ main::render#3 ]
zp ZP_WORD:22 [ render_current::screen_line#0 collision::playfield_line#0 ]
reg byte a [ render_current::current_cell#0 ]
reg byte a [ render_current::xpos#0 ]
reg byte a [ render_playfield::$1 ]
reg byte a [ play_moveother::$0 ]
reg byte a [ play_moveother::$8 ]
reg byte a [ play_moveother::$11 ]
reg byte a [ collision::return#12 ]
reg byte a [ play_moveother::$15 ]
reg byte a [ collision::return#11 ]
reg byte a [ play_moveother::$19 ]
zp ZP_BYTE:22 [ collision::line#0 ]
reg byte a [ collision::$1 ]
zp ZP_BYTE:23 [ collision::i#1 ]
reg byte y [ collision::col#0 ]
reg byte a [ play_move_rotate::$2 ]
reg byte a [ collision::return#13 ]
reg byte a [ play_move_rotate::$6 ]
reg byte a [ play_move_rotate::$8 ]
reg byte a [ play_move_rotate::$4 ]
zp ZP_BYTE:24 [ collision::i#1 ]
reg byte a [ collision::$7 ]
reg byte a [ collision::return#12 ]
reg byte a [ play_move_leftright::$4 ]
reg byte a [ collision::return#1 ]
reg byte a [ play_move_leftright::$8 ]
reg byte a [ keyboard_event_pressed::return#12 ]
reg byte a [ play_movedown::$2 ]
reg byte a [ play_move_down::$2 ]
reg byte a [ collision::return#0 ]
reg byte a [ play_movedown::$12 ]
reg byte a [ play_move_down::$12 ]
reg byte a [ lock_current::line#0 ]
reg byte a [ lock_current::$1 ]
reg byte a [ lock_current::cell#0 ]