1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2025-02-21 22:29:07 +00:00

Fixed test.

This commit is contained in:
jespergravgaard 2018-12-03 01:49:28 +01:00
parent a79e318bcd
commit 0073fedf4f
6 changed files with 4563 additions and 2682 deletions

View File

@ -20,7 +20,7 @@ public class CompileLog {
/**
* Should fragment synthesis be verbose.
*/
private boolean verboseFragmentLog = true;
private boolean verboseFragmentLog = false;
/**
* Should ASM optimization be verbose.
@ -66,7 +66,7 @@ public class CompileLog {
/**
* Should the log be output to System.out while being built
*/
private boolean sysOut = true;
private boolean sysOut = false;
public CompileLog() {
this.log = new StringBuilder();

View File

@ -41,7 +41,7 @@ public class TestPrograms {
public static void tearDown() {
CompileLog log = new CompileLog();
log.setSysOut(true);
AsmFragmentTemplateUsages.logUsages(log, false, false, false, false, true, true);
AsmFragmentTemplateUsages.logUsages(log, false, false, false, false, false, false);
}
@Test

View File

@ -43,18 +43,18 @@
.label current_piece_color = $12
.label current_movedown_counter = 3
.label current_piece_15 = 5
.label current_xpos_62 = 4
.label current_piece_gfx_62 = 5
.label current_piece_color_64 = 7
.label current_xpos_93 = 4
.label current_piece_gfx_84 = 5
.label current_xpos_63 = 4
.label current_piece_gfx_63 = 5
.label current_piece_color_65 = 7
.label current_xpos_94 = 4
.label current_piece_gfx_85 = 5
.label current_piece_color_72 = 7
.label current_piece_gfx_86 = 5
.label current_piece_color_73 = 7
.label current_piece_69 = 5
.label current_piece_color_74 = 7
.label current_piece_70 = 5
.label current_piece_71 = 5
.label current_piece_72 = 5
.label current_piece_73 = 5
jsr main
main: {
.label key_event = $14
@ -65,13 +65,13 @@ main: {
jsr spawn_current
jsr render_playfield
lda current_piece_gfx
sta current_piece_gfx_84
sta current_piece_gfx_85
lda current_piece_gfx+1
sta current_piece_gfx_84+1
sta current_piece_gfx_85+1
lda current_piece_color
sta current_piece_color_72
sta current_piece_color_73
lda #3
sta current_xpos_62
sta current_xpos_63
ldx #0
jsr render_current
ldy spawn_current._3
@ -119,13 +119,13 @@ main: {
jsr render_playfield
ldx current_ypos
lda current_xpos
sta current_xpos_93
sta current_xpos_94
lda current_piece_gfx
sta current_piece_gfx_85
sta current_piece_gfx_86
lda current_piece_gfx+1
sta current_piece_gfx_85+1
sta current_piece_gfx_86+1
lda current_piece_color
sta current_piece_color_73
sta current_piece_color_74
jsr render_current
dec BORDERCOL
b10:
@ -153,19 +153,19 @@ render_current: {
sta screen_line
lda screen_lines+1,y
sta screen_line+1
lda current_xpos_62
lda current_xpos_63
sta xpos
ldx #0
b3:
ldy i
lda (current_piece_gfx_62),y
lda (current_piece_gfx_63),y
inc i
cmp #0
beq b4
lda xpos
cmp #PLAYFIELD_COLS
bcs b4
lda current_piece_color_64
lda current_piece_color_65
ldy xpos
sta (screen_line),y
b4:
@ -241,9 +241,9 @@ play_move_rotate: {
ldy current_ypos
ldx orientation
lda current_piece
sta current_piece_72
sta current_piece_73
lda current_piece+1
sta current_piece_72+1
sta current_piece_73+1
jsr collision
cmp #0
bne b3
@ -368,9 +368,9 @@ play_move_leftright: {
ldy current_ypos
ldx current_orientation
lda current_piece
sta current_piece_71
sta current_piece_72
lda current_piece+1
sta current_piece_71+1
sta current_piece_72+1
jsr collision
cmp #COLLISION_NONE
bne b3
@ -389,9 +389,9 @@ play_move_leftright: {
ldy current_ypos
ldx current_orientation
lda current_piece
sta current_piece_70
sta current_piece_71
lda current_piece+1
sta current_piece_70+1
sta current_piece_71+1
jsr collision
cmp #COLLISION_NONE
bne b3
@ -430,13 +430,14 @@ play_move_down: {
sta collision.xpos
ldx current_orientation
lda current_piece
sta current_piece_69
sta current_piece_70
lda current_piece+1
sta current_piece_69+1
sta current_piece_70+1
jsr collision
cmp #COLLISION_NONE
beq b6
jsr lock_current
jsr remove_lines
jsr spawn_current
ldy spawn_current._3
lda PIECES,y
@ -490,6 +491,110 @@ sid_rnd: {
lda SID_VOICE3_OSC
rts
}
remove_lines: {
.label done = 2
lda #0
sta done
b1:
jsr find_line
lda find_line.return
cmp #$ff
bne b2
lda #1
sta done
b3:
lda done
cmp #0
beq b1
rts
b2:
sta remove_line.ypos
jsr remove_line
jmp b3
}
remove_line: {
.label ypos = 3
.label x = 4
.label y = 3
lda ypos
tay
lda playfield_lines_idx+1,y
tay
dey
ldx ypos
lda playfield_lines_idx,x
tax
dex
b1:
lda #0
sta x
b2:
lda playfield,x
sta playfield,y
dey
dex
inc x
lda x
cmp #PLAYFIELD_COLS-1+1
bne b2
dec y
lda y
cmp #1
bne b1
rts
}
find_line: {
.label i = 8
.label y = 7
.label return = 7
.label i_2 = 3
.label filled = 4
.label i_3 = 3
.label i_8 = 3
.label i_10 = 3
lda #0
sta y
sta i_3
b1:
lda #1
sta filled
ldx #0
b2:
ldy i_2
iny
sty i
ldy i_2
lda playfield,y
cmp #0
bne b3
lda #0
sta filled
b3:
inx
cpx #PLAYFIELD_COLS-1+1
bne b12
lda filled
cmp #1
bne b4
breturn:
rts
b4:
inc y
lda y
cmp #PLAYFIELD_LINES-1+1
bne b11
lda #$ff
sta return
jmp breturn
b11:
lda i
sta i_8
jmp b1
b12:
lda i
sta i_10
jmp b2
}
lock_current: {
.label ypos2 = 2
.label playfield_line = 5
@ -662,9 +767,10 @@ keyboard_matrix_read: {
rts
}
init: {
.label _13 = $c
.label _14 = $c
.label li = 5
.label pli = 5
.label idx = 2
.label line = 5
.label l = 2
ldx #$a0
@ -702,6 +808,8 @@ init: {
inx
cpx #PLAYFIELD_LINES+2+1
bne b1
lda #0
sta idx
lda #<playfield
sta pli
lda #>playfield
@ -715,16 +823,24 @@ init: {
sta playfield_lines,y
lda pli+1
sta playfield_lines+1,y
lda idx
sta playfield_lines_idx,x
lda pli
clc
adc #$a
adc #PLAYFIELD_COLS
sta pli
bcc !+
inc pli+1
!:
lda #PLAYFIELD_COLS
clc
adc idx
sta idx
inx
cpx #PLAYFIELD_LINES-1+1
bne b2
lda #PLAYFIELD_COLS*PLAYFIELD_LINES
sta playfield_lines_idx+PLAYFIELD_LINES
lda #0
sta l
lda #<COLS+$e
@ -737,13 +853,13 @@ init: {
txa
clc
adc line
sta _13
sta _14
lda #0
adc line+1
sta _13+1
sta _14+1
lda #DARK_GREY
ldy #0
sta (_13),y
sta (_14),y
inx
cpx #PLAYFIELD_COLS+1+1
bne b4
@ -817,4 +933,5 @@ sid_rnd_init: {
playfield_lines: .fill 2*PLAYFIELD_LINES, 0
PIECES: .word PIECE_T, PIECE_S, PIECE_Z, PIECE_J, PIECE_O, PIECE_I, PIECE_L
playfield: .fill PLAYFIELD_LINES*PLAYFIELD_COLS, 0
playfield_lines_idx: .fill PLAYFIELD_LINES+1, 0
screen_lines: .fill 2*(PLAYFIELD_LINES+3), 0

View File

@ -1,13 +1,13 @@
@begin: scope:[] from
[0] phi()
to:@23
@23: scope:[] from @begin
to:@26
@26: scope:[] from @begin
[1] phi()
[2] call main
to:@end
@end: scope:[] from @23
@end: scope:[] from @26
[3] phi()
main: scope:[main] from @23
main: scope:[main] from @26
[4] phi()
[5] call sid_rnd_init
to:main::@21
@ -24,10 +24,10 @@ main::@23: scope:[main] from main::@22
[11] call render_playfield
to:main::@24
main::@24: scope:[main] from main::@23
[12] (byte*~) current_piece_gfx#84 ← (byte*) current_piece_gfx#10
[13] (byte~) current_piece_color#72 ← (byte) current_piece_color#15
[12] (byte*~) current_piece_gfx#85 ← (byte*) current_piece_gfx#10
[13] (byte~) current_piece_color#73 ← (byte) current_piece_color#15
[14] call render_current
[15] (byte*~) current_piece#68 ← (byte*)*((const word[]) PIECES#0 + (byte~) spawn_current::$3)
[15] (byte*~) current_piece#69 ← (byte*)*((const word[]) PIECES#0 + (byte~) spawn_current::$3)
to:main::@1
main::@1: scope:[main] from main::@10 main::@24
[16] (byte) current_movedown_counter#15 ← phi( main::@10/(byte) current_movedown_counter#12 main::@24/(byte/signed byte/word/signed word/dword/signed dword) 0 )
@ -37,7 +37,7 @@ main::@1: scope:[main] from main::@10 main::@24
[16] (byte) current_xpos#16 ← phi( main::@10/(byte) current_xpos#23 main::@24/(byte/signed byte/word/signed word/dword/signed dword) 3 )
[16] (byte*) current_piece_gfx#15 ← phi( main::@10/(byte*) current_piece_gfx#18 main::@24/(byte*) current_piece_gfx#10 )
[16] (byte) current_orientation#15 ← phi( main::@10/(byte) current_orientation#23 main::@24/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[16] (byte*) current_piece#11 ← phi( main::@10/(byte*) current_piece#13 main::@24/(byte*~) current_piece#68 )
[16] (byte*) current_piece#11 ← phi( main::@10/(byte*) current_piece#13 main::@24/(byte*~) current_piece#69 )
to:main::@4
main::@4: scope:[main] from main::@1 main::@4
[17] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto main::@4
@ -84,10 +84,10 @@ main::@19: scope:[main] from main::@30
[42] call render_playfield
to:main::@31
main::@31: scope:[main] from main::@19
[43] (byte~) current_ypos#68 ← (byte) current_ypos#16
[44] (byte~) current_xpos#93 ← (byte) current_xpos#23
[45] (byte*~) current_piece_gfx#85 ← (byte*) current_piece_gfx#18
[46] (byte~) current_piece_color#73 ← (byte) current_piece_color#13
[43] (byte~) current_ypos#69 ← (byte) current_ypos#16
[44] (byte~) current_xpos#94 ← (byte) current_xpos#23
[45] (byte*~) current_piece_gfx#86 ← (byte*) current_piece_gfx#18
[46] (byte~) current_piece_color#74 ← (byte) current_piece_color#13
[47] call render_current
to:main::@32
main::@32: scope:[main] from main::@31
@ -97,10 +97,10 @@ main::@10: scope:[main] from main::@30 main::@32
[49] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0)
to:main::@1
render_current: scope:[render_current] from main::@24 main::@31
[50] (byte) current_piece_color#64 ← phi( main::@24/(byte~) current_piece_color#72 main::@31/(byte~) current_piece_color#73 )
[50] (byte*) current_piece_gfx#62 ← phi( main::@24/(byte*~) current_piece_gfx#84 main::@31/(byte*~) current_piece_gfx#85 )
[50] (byte) current_xpos#62 ← phi( main::@24/(byte/signed byte/word/signed word/dword/signed dword) 3 main::@31/(byte~) current_xpos#93 )
[50] (byte) current_ypos#22 ← phi( main::@24/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@31/(byte~) current_ypos#68 )
[50] (byte) current_piece_color#65 ← phi( main::@24/(byte~) current_piece_color#73 main::@31/(byte~) current_piece_color#74 )
[50] (byte*) current_piece_gfx#63 ← phi( main::@24/(byte*~) current_piece_gfx#85 main::@31/(byte*~) current_piece_gfx#86 )
[50] (byte) current_xpos#63 ← phi( main::@24/(byte/signed byte/word/signed word/dword/signed dword) 3 main::@31/(byte~) current_xpos#94 )
[50] (byte) current_ypos#22 ← phi( main::@24/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@31/(byte~) current_ypos#69 )
[51] (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
@ -111,13 +111,13 @@ render_current::@1: scope:[render_current] from render_current render_current::
to:render_current::@6
render_current::@6: scope:[render_current] from render_current::@1
[54] (byte*) render_current::screen_line#0 ← *((const byte*[PLAYFIELD_LINES#0+3]) screen_lines#0 + (byte) render_current::ypos2#2)
[55] (byte) render_current::xpos#0 ← (byte) current_xpos#62
[55] (byte) render_current::xpos#0 ← (byte) current_xpos#63
to:render_current::@3
render_current::@3: scope:[render_current] from render_current::@4 render_current::@6
[56] (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 )
[56] (byte) render_current::xpos#2 ← phi( render_current::@4/(byte) render_current::xpos#1 render_current::@6/(byte) render_current::xpos#0 )
[56] (byte) render_current::i#2 ← phi( render_current::@4/(byte) render_current::i#1 render_current::@6/(byte) render_current::i#4 )
[57] (byte) render_current::current_cell#0 ← *((byte*) current_piece_gfx#62 + (byte) render_current::i#2)
[57] (byte) render_current::current_cell#0 ← *((byte*) current_piece_gfx#63 + (byte) render_current::i#2)
[58] (byte) render_current::i#1 ← ++ (byte) render_current::i#2
[59] 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
@ -125,7 +125,7 @@ render_current::@7: scope:[render_current] from render_current::@3
[60] 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
[61] *((byte*) render_current::screen_line#0 + (byte) render_current::xpos#2) ← (byte) current_piece_color#64
[61] *((byte*) render_current::screen_line#0 + (byte) render_current::xpos#2) ← (byte) current_piece_color#65
to:render_current::@4
render_current::@4: scope:[render_current] from render_current::@3 render_current::@7 render_current::@8
[62] (byte) render_current::xpos#1 ← ++ (byte) render_current::xpos#2
@ -188,7 +188,7 @@ play_move_rotate::@4: scope:[play_move_rotate] from play_move_rotate::@1 play_m
[90] (byte) collision::xpos#3 ← (byte) current_xpos#23
[91] (byte) collision::ypos#3 ← (byte) current_ypos#16
[92] (byte) collision::orientation#3 ← (byte) play_move_rotate::orientation#3
[93] (byte*~) current_piece#72 ← (byte*) current_piece#13
[93] (byte*~) current_piece#73 ← (byte*) current_piece#13
[94] call collision
[95] (byte) collision::return#13 ← (byte) collision::return#14
to:play_move_rotate::@14
@ -208,7 +208,7 @@ collision: scope:[collision] from play_move_down::@12 play_move_leftright::@1 p
[102] (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 )
[102] (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 )
[102] (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 )
[102] (byte*) current_piece#15 ← phi( play_move_down::@12/(byte*~) current_piece#69 play_move_leftright::@1/(byte*~) current_piece#70 play_move_leftright::@7/(byte*~) current_piece#71 play_move_rotate::@4/(byte*~) current_piece#72 )
[102] (byte*) current_piece#15 ← phi( play_move_down::@12/(byte*~) current_piece#70 play_move_leftright::@1/(byte*~) current_piece#71 play_move_leftright::@7/(byte*~) current_piece#72 play_move_rotate::@4/(byte*~) current_piece#73 )
[103] (byte*) collision::piece_gfx#0 ← (byte*) current_piece#15 + (byte) collision::orientation#4
[104] (byte) collision::ypos2#0 ← (byte) collision::ypos#4 << (byte/signed byte/word/signed word/dword/signed dword) 1
to:collision::@1
@ -269,7 +269,7 @@ play_move_leftright::@7: scope:[play_move_leftright] from play_move_leftright::
[128] (byte) collision::xpos#2 ← (byte) current_xpos#19 + (byte/signed byte/word/signed word/dword/signed dword) 1
[129] (byte) collision::ypos#2 ← (byte) current_ypos#16
[130] (byte) collision::orientation#2 ← (byte) current_orientation#18
[131] (byte*~) current_piece#71 ← (byte*) current_piece#13
[131] (byte*~) current_piece#72 ← (byte*) current_piece#13
[132] call collision
[133] (byte) collision::return#12 ← (byte) collision::return#14
to:play_move_leftright::@15
@ -289,7 +289,7 @@ play_move_leftright::@1: scope:[play_move_leftright] from play_move_leftright
[139] (byte) collision::xpos#1 ← (byte) current_xpos#19 - (byte/signed byte/word/signed word/dword/signed dword) 1
[140] (byte) collision::ypos#1 ← (byte) current_ypos#16
[141] (byte) collision::orientation#1 ← (byte) current_orientation#18
[142] (byte*~) current_piece#70 ← (byte*) current_piece#13
[142] (byte*~) current_piece#71 ← (byte*) current_piece#13
[143] call collision
[144] (byte) collision::return#1 ← (byte) collision::return#14
to:play_move_leftright::@14
@ -337,7 +337,7 @@ play_move_down::@12: scope:[play_move_down] from play_move_down::@4
[163] (byte) collision::ypos#0 ← (byte) current_ypos#12 + (byte/signed byte/word/signed word/dword/signed dword) 1
[164] (byte) collision::xpos#0 ← (byte) current_xpos#16
[165] (byte) collision::orientation#0 ← (byte) current_orientation#15
[166] (byte*~) current_piece#69 ← (byte*) current_piece#11
[166] (byte*~) current_piece#70 ← (byte*) current_piece#11
[167] call collision
[168] (byte) collision::return#0 ← (byte) collision::return#14
to:play_move_down::@18
@ -351,301 +351,400 @@ play_move_down::@13: scope:[play_move_down] from play_move_down::@18
to:play_move_down::@19
play_move_down::@19: scope:[play_move_down] from play_move_down::@13
[173] phi()
[174] call spawn_current
[175] (byte*~) current_piece#73 ← (byte*)*((const word[]) PIECES#0 + (byte~) spawn_current::$3)
[174] call remove_lines
to:play_move_down::@20
play_move_down::@20: scope:[play_move_down] from play_move_down::@19
[175] phi()
[176] call spawn_current
[177] (byte*~) current_piece#74 ← (byte*)*((const word[]) PIECES#0 + (byte~) spawn_current::$3)
to:play_move_down::@7
play_move_down::@7: scope:[play_move_down] from play_move_down::@19 play_move_down::@6
[176] (byte) current_piece_color#23 ← phi( play_move_down::@19/(byte) current_piece_color#15 play_move_down::@6/(byte) current_piece_color#11 )
[176] (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 )
[176] (byte*) current_piece_gfx#29 ← phi( play_move_down::@19/(byte*) current_piece_gfx#10 play_move_down::@6/(byte*) current_piece_gfx#15 )
[176] (byte) current_orientation#33 ← phi( play_move_down::@19/(byte/signed byte/word/signed word/dword/signed dword) 0 play_move_down::@6/(byte) current_orientation#15 )
[176] (byte*) current_piece#23 ← phi( play_move_down::@19/(byte*~) current_piece#73 play_move_down::@6/(byte*) current_piece#11 )
[176] (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 )
play_move_down::@7: scope:[play_move_down] from play_move_down::@20 play_move_down::@6
[178] (byte) current_piece_color#23 ← phi( play_move_down::@20/(byte) current_piece_color#15 play_move_down::@6/(byte) current_piece_color#11 )
[178] (byte) current_xpos#36 ← phi( play_move_down::@20/(byte/signed byte/word/signed word/dword/signed dword) 3 play_move_down::@6/(byte) current_xpos#16 )
[178] (byte*) current_piece_gfx#29 ← phi( play_move_down::@20/(byte*) current_piece_gfx#10 play_move_down::@6/(byte*) current_piece_gfx#15 )
[178] (byte) current_orientation#33 ← phi( play_move_down::@20/(byte/signed byte/word/signed word/dword/signed dword) 0 play_move_down::@6/(byte) current_orientation#15 )
[178] (byte*) current_piece#23 ← phi( play_move_down::@20/(byte*~) current_piece#74 play_move_down::@6/(byte*) current_piece#11 )
[178] (byte) current_ypos#31 ← phi( play_move_down::@20/(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
[177] (byte) current_piece_color#13 ← phi( play_move_down::@4/(byte) current_piece_color#11 play_move_down::@7/(byte) current_piece_color#23 )
[177] (byte) current_xpos#19 ← phi( play_move_down::@4/(byte) current_xpos#16 play_move_down::@7/(byte) current_xpos#36 )
[177] (byte*) current_piece_gfx#17 ← phi( play_move_down::@4/(byte*) current_piece_gfx#15 play_move_down::@7/(byte*) current_piece_gfx#29 )
[177] (byte) current_orientation#18 ← phi( play_move_down::@4/(byte) current_orientation#15 play_move_down::@7/(byte) current_orientation#33 )
[177] (byte*) current_piece#13 ← phi( play_move_down::@4/(byte*) current_piece#11 play_move_down::@7/(byte*) current_piece#23 )
[177] (byte) current_ypos#16 ← phi( play_move_down::@4/(byte) current_ypos#12 play_move_down::@7/(byte) current_ypos#31 )
[177] (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 )
[177] (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 )
[178] return
[179] (byte) current_piece_color#13 ← phi( play_move_down::@4/(byte) current_piece_color#11 play_move_down::@7/(byte) current_piece_color#23 )
[179] (byte) current_xpos#19 ← phi( play_move_down::@4/(byte) current_xpos#16 play_move_down::@7/(byte) current_xpos#36 )
[179] (byte*) current_piece_gfx#17 ← phi( play_move_down::@4/(byte*) current_piece_gfx#15 play_move_down::@7/(byte*) current_piece_gfx#29 )
[179] (byte) current_orientation#18 ← phi( play_move_down::@4/(byte) current_orientation#15 play_move_down::@7/(byte) current_orientation#33 )
[179] (byte*) current_piece#13 ← phi( play_move_down::@4/(byte*) current_piece#11 play_move_down::@7/(byte*) current_piece#23 )
[179] (byte) current_ypos#16 ← phi( play_move_down::@4/(byte) current_ypos#12 play_move_down::@7/(byte) current_ypos#31 )
[179] (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 )
[179] (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 )
[180] return
to:@return
play_move_down::@6: scope:[play_move_down] from play_move_down::@18
[179] (byte) current_ypos#4 ← ++ (byte) current_ypos#12
[181] (byte) current_ypos#4 ← ++ (byte) current_ypos#12
to:play_move_down::@7
spawn_current: scope:[spawn_current] from main::@22 play_move_down::@19
[180] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0)
spawn_current: scope:[spawn_current] from main::@22 play_move_down::@20
[182] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0)
to:spawn_current::@1
spawn_current::@1: scope:[spawn_current] from spawn_current spawn_current::@7
[181] (byte) spawn_current::piece_idx#2 ← phi( spawn_current/(byte/signed byte/word/signed word/dword/signed dword) 7 spawn_current::@7/(byte) spawn_current::piece_idx#1 )
[182] if((byte) spawn_current::piece_idx#2==(byte/signed byte/word/signed word/dword/signed dword) 7) goto spawn_current::@2
[183] (byte) spawn_current::piece_idx#2 ← phi( spawn_current/(byte/signed byte/word/signed word/dword/signed dword) 7 spawn_current::@7/(byte) spawn_current::piece_idx#1 )
[184] if((byte) spawn_current::piece_idx#2==(byte/signed byte/word/signed word/dword/signed dword) 7) goto spawn_current::@2
to:spawn_current::@3
spawn_current::@3: scope:[spawn_current] from spawn_current::@1
[183] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0)
[184] (byte~) spawn_current::$3 ← (byte) spawn_current::piece_idx#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
[185] (byte*) current_piece_gfx#10 ← (byte*)*((const word[]) PIECES#0 + (byte~) spawn_current::$3) + (byte/signed byte/word/signed word/dword/signed dword) 0
[186] (byte) current_piece_color#15 ← *((const byte[]) PIECES_COLORS#0 + (byte) spawn_current::piece_idx#2)
[185] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0)
[186] (byte~) spawn_current::$3 ← (byte) spawn_current::piece_idx#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
[187] (byte*) current_piece_gfx#10 ← (byte*)*((const word[]) PIECES#0 + (byte~) spawn_current::$3) + (byte/signed byte/word/signed word/dword/signed dword) 0
[188] (byte) current_piece_color#15 ← *((const byte[]) PIECES_COLORS#0 + (byte) spawn_current::piece_idx#2)
to:spawn_current::@return
spawn_current::@return: scope:[spawn_current] from spawn_current::@3
[187] return
[189] return
to:@return
spawn_current::@2: scope:[spawn_current] from spawn_current::@1
[188] phi()
[189] call sid_rnd
[190] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0
[190] phi()
[191] call sid_rnd
[192] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0
to:spawn_current::@7
spawn_current::@7: scope:[spawn_current] from spawn_current::@2
[191] (byte~) spawn_current::$1 ← (byte) sid_rnd::return#2
[192] (byte) spawn_current::piece_idx#1 ← (byte~) spawn_current::$1 & (byte/signed byte/word/signed word/dword/signed dword) 7
[193] (byte~) spawn_current::$1 ← (byte) sid_rnd::return#2
[194] (byte) spawn_current::piece_idx#1 ← (byte~) spawn_current::$1 & (byte/signed byte/word/signed word/dword/signed dword) 7
to:spawn_current::@1
sid_rnd: scope:[sid_rnd] from spawn_current::@2
[193] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0)
[195] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0)
to:sid_rnd::@return
sid_rnd::@return: scope:[sid_rnd] from sid_rnd
[194] return
[196] return
to:@return
remove_lines: scope:[remove_lines] from play_move_down::@19
[197] phi()
to:remove_lines::@1
remove_lines::@1: scope:[remove_lines] from remove_lines remove_lines::@3
[198] (byte) remove_lines::done#3 ← phi( remove_lines/(byte/signed byte/word/signed word/dword/signed dword) 0 remove_lines::@3/(byte) remove_lines::done#2 )
[199] call find_line
[200] (byte) find_line::return#0 ← (byte) find_line::return#2
to:remove_lines::@7
remove_lines::@7: scope:[remove_lines] from remove_lines::@1
[201] (byte) remove_lines::line_ypos#0 ← (byte) find_line::return#0
[202] if((byte) remove_lines::line_ypos#0!=(byte/word/signed word/dword/signed dword) 255) goto remove_lines::@2
to:remove_lines::@3
remove_lines::@3: scope:[remove_lines] from remove_lines::@2 remove_lines::@7
[203] (byte) remove_lines::done#2 ← phi( remove_lines::@7/(byte/signed byte/word/signed word/dword/signed dword) 1 remove_lines::@2/(byte) remove_lines::done#3 )
[204] if((byte) remove_lines::done#2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto remove_lines::@1
to:remove_lines::@return
remove_lines::@return: scope:[remove_lines] from remove_lines::@3
[205] return
to:@return
remove_lines::@2: scope:[remove_lines] from remove_lines::@7
[206] (byte) remove_line::ypos#0 ← (byte) remove_lines::line_ypos#0
[207] call remove_line
to:remove_lines::@3
remove_line: scope:[remove_line] from remove_lines::@2
[208] (byte~) remove_line::$0 ← (byte) remove_line::ypos#0
[209] (byte) remove_line::i2#0 ← *((const byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte~) remove_line::$0) - (byte/signed byte/word/signed word/dword/signed dword) 1
[210] (byte) remove_line::i1#0 ← *((const byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx#0 + (byte) remove_line::ypos#0) - (byte/signed byte/word/signed word/dword/signed dword) 1
to:remove_line::@1
remove_line::@1: scope:[remove_line] from remove_line remove_line::@3
[211] (byte) remove_line::y#4 ← phi( remove_line/(byte) remove_line::ypos#0 remove_line::@3/(byte) remove_line::y#1 )
[211] (byte) remove_line::i2#3 ← phi( remove_line/(byte) remove_line::i2#0 remove_line::@3/(byte) remove_line::i2#1 )
[211] (byte) remove_line::i1#3 ← phi( remove_line/(byte) remove_line::i1#0 remove_line::@3/(byte) remove_line::i1#1 )
to:remove_line::@2
remove_line::@2: scope:[remove_line] from remove_line::@1 remove_line::@2
[212] (byte) remove_line::x#2 ← phi( remove_line::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 remove_line::@2/(byte) remove_line::x#1 )
[212] (byte) remove_line::i2#2 ← phi( remove_line::@1/(byte) remove_line::i2#3 remove_line::@2/(byte) remove_line::i2#1 )
[212] (byte) remove_line::i1#2 ← phi( remove_line::@1/(byte) remove_line::i1#3 remove_line::@2/(byte) remove_line::i1#1 )
[213] *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) remove_line::i2#2) ← *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) remove_line::i1#2)
[214] (byte) remove_line::i2#1 ← -- (byte) remove_line::i2#2
[215] (byte) remove_line::i1#1 ← -- (byte) remove_line::i1#2
[216] (byte) remove_line::x#1 ← ++ (byte) remove_line::x#2
[217] if((byte) remove_line::x#1!=(const byte) PLAYFIELD_COLS#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto remove_line::@2
to:remove_line::@3
remove_line::@3: scope:[remove_line] from remove_line::@2
[218] (byte) remove_line::y#1 ← -- (byte) remove_line::y#4
[219] if((byte) remove_line::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 1) goto remove_line::@1
to:remove_line::@return
remove_line::@return: scope:[remove_line] from remove_line::@3
[220] return
to:@return
find_line: scope:[find_line] from remove_lines::@1
[221] phi()
to:find_line::@1
find_line::@1: scope:[find_line] from find_line find_line::@11
[222] (byte) find_line::y#8 ← phi( find_line/(byte/signed byte/word/signed word/dword/signed dword) 0 find_line::@11/(byte) find_line::y#1 )
[222] (byte) find_line::i#3 ← phi( find_line/(byte/signed byte/word/signed word/dword/signed dword) 0 find_line::@11/(byte~) find_line::i#8 )
to:find_line::@2
find_line::@2: scope:[find_line] from find_line::@1 find_line::@12
[223] (byte) find_line::filled#4 ← phi( find_line::@1/(byte/signed byte/word/signed word/dword/signed dword) 1 find_line::@12/(byte) find_line::filled#2 )
[223] (byte) find_line::x#2 ← phi( find_line::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 find_line::@12/(byte) find_line::x#1 )
[223] (byte) find_line::i#2 ← phi( find_line::@1/(byte) find_line::i#3 find_line::@12/(byte~) find_line::i#10 )
[224] (byte) find_line::i#1 ← ++ (byte) find_line::i#2
[225] if(*((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) find_line::i#2)!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto find_line::@13
to:find_line::@3
find_line::@3: scope:[find_line] from find_line::@13 find_line::@2
[226] (byte) find_line::filled#2 ← phi( find_line::@13/(byte) find_line::filled#4 find_line::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[227] (byte) find_line::x#1 ← ++ (byte) find_line::x#2
[228] if((byte) find_line::x#1!=(const byte) PLAYFIELD_COLS#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto find_line::@12
to:find_line::@6
find_line::@6: scope:[find_line] from find_line::@3
[229] if((byte) find_line::filled#2!=(byte/signed byte/word/signed word/dword/signed dword) 1) goto find_line::@4
to:find_line::@return
find_line::@return: scope:[find_line] from find_line::@4 find_line::@6
[230] (byte) find_line::return#2 ← phi( find_line::@6/(byte) find_line::y#8 find_line::@4/(byte/word/signed word/dword/signed dword) 255 )
[231] return
to:@return
find_line::@4: scope:[find_line] from find_line::@6
[232] (byte) find_line::y#1 ← ++ (byte) find_line::y#8
[233] if((byte) find_line::y#1!=(const byte) PLAYFIELD_LINES#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto find_line::@11
to:find_line::@return
find_line::@11: scope:[find_line] from find_line::@4
[234] (byte~) find_line::i#8 ← (byte) find_line::i#1
to:find_line::@1
find_line::@12: scope:[find_line] from find_line::@3
[235] (byte~) find_line::i#10 ← (byte) find_line::i#1
to:find_line::@2
find_line::@13: scope:[find_line] from find_line::@2
[236] phi()
to:find_line::@3
lock_current: scope:[lock_current] from play_move_down::@13
[195] (byte) lock_current::ypos2#0 ← (byte) current_ypos#12 << (byte/signed byte/word/signed word/dword/signed dword) 1
[237] (byte) lock_current::ypos2#0 ← (byte) current_ypos#12 << (byte/signed byte/word/signed word/dword/signed dword) 1
to:lock_current::@1
lock_current::@1: scope:[lock_current] from lock_current lock_current::@7
[196] (byte) lock_current::l#6 ← phi( lock_current/(byte/signed byte/word/signed word/dword/signed dword) 0 lock_current::@7/(byte) lock_current::l#1 )
[196] (byte) lock_current::i#3 ← phi( lock_current/(byte/signed byte/word/signed word/dword/signed dword) 0 lock_current::@7/(byte~) lock_current::i#7 )
[196] (byte) lock_current::ypos2#2 ← phi( lock_current/(byte) lock_current::ypos2#0 lock_current::@7/(byte) lock_current::ypos2#1 )
[197] (byte*) lock_current::playfield_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte) lock_current::ypos2#2)
[198] (byte) lock_current::col#0 ← (byte) current_xpos#16
[238] (byte) lock_current::l#6 ← phi( lock_current/(byte/signed byte/word/signed word/dword/signed dword) 0 lock_current::@7/(byte) lock_current::l#1 )
[238] (byte) lock_current::i#3 ← phi( lock_current/(byte/signed byte/word/signed word/dword/signed dword) 0 lock_current::@7/(byte~) lock_current::i#7 )
[238] (byte) lock_current::ypos2#2 ← phi( lock_current/(byte) lock_current::ypos2#0 lock_current::@7/(byte) lock_current::ypos2#1 )
[239] (byte*) lock_current::playfield_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte) lock_current::ypos2#2)
[240] (byte) lock_current::col#0 ← (byte) current_xpos#16
to:lock_current::@2
lock_current::@2: scope:[lock_current] from lock_current::@1 lock_current::@8
[199] (byte) lock_current::c#2 ← phi( lock_current::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 lock_current::@8/(byte) lock_current::c#1 )
[199] (byte) lock_current::col#2 ← phi( lock_current::@1/(byte) lock_current::col#0 lock_current::@8/(byte) lock_current::col#1 )
[199] (byte) lock_current::i#2 ← phi( lock_current::@1/(byte) lock_current::i#3 lock_current::@8/(byte~) lock_current::i#9 )
[200] (byte) lock_current::i#1 ← ++ (byte) lock_current::i#2
[201] if(*((byte*) current_piece_gfx#15 + (byte) lock_current::i#2)==(byte/signed byte/word/signed word/dword/signed dword) 0) goto lock_current::@3
[241] (byte) lock_current::c#2 ← phi( lock_current::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 lock_current::@8/(byte) lock_current::c#1 )
[241] (byte) lock_current::col#2 ← phi( lock_current::@1/(byte) lock_current::col#0 lock_current::@8/(byte) lock_current::col#1 )
[241] (byte) lock_current::i#2 ← phi( lock_current::@1/(byte) lock_current::i#3 lock_current::@8/(byte~) lock_current::i#9 )
[242] (byte) lock_current::i#1 ← ++ (byte) lock_current::i#2
[243] if(*((byte*) current_piece_gfx#15 + (byte) lock_current::i#2)==(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
[202] *((byte*) lock_current::playfield_line#0 + (byte) lock_current::col#2) ← (byte) current_piece_color#11
[244] *((byte*) lock_current::playfield_line#0 + (byte) lock_current::col#2) ← (byte) current_piece_color#11
to:lock_current::@3
lock_current::@3: scope:[lock_current] from lock_current::@2 lock_current::@4
[203] (byte) lock_current::col#1 ← ++ (byte) lock_current::col#2
[204] (byte) lock_current::c#1 ← ++ (byte) lock_current::c#2
[205] if((byte) lock_current::c#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto lock_current::@8
[245] (byte) lock_current::col#1 ← ++ (byte) lock_current::col#2
[246] (byte) lock_current::c#1 ← ++ (byte) lock_current::c#2
[247] if((byte) lock_current::c#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto lock_current::@8
to:lock_current::@5
lock_current::@5: scope:[lock_current] from lock_current::@3
[206] (byte) lock_current::ypos2#1 ← (byte) lock_current::ypos2#2 + (byte/signed byte/word/signed word/dword/signed dword) 2
[207] (byte) lock_current::l#1 ← ++ (byte) lock_current::l#6
[208] if((byte) lock_current::l#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto lock_current::@7
[248] (byte) lock_current::ypos2#1 ← (byte) lock_current::ypos2#2 + (byte/signed byte/word/signed word/dword/signed dword) 2
[249] (byte) lock_current::l#1 ← ++ (byte) lock_current::l#6
[250] if((byte) lock_current::l#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto lock_current::@7
to:lock_current::@return
lock_current::@return: scope:[lock_current] from lock_current::@5
[209] return
[251] return
to:@return
lock_current::@7: scope:[lock_current] from lock_current::@5
[210] (byte~) lock_current::i#7 ← (byte) lock_current::i#1
[252] (byte~) lock_current::i#7 ← (byte) lock_current::i#1
to:lock_current::@1
lock_current::@8: scope:[lock_current] from lock_current::@3
[211] (byte~) lock_current::i#9 ← (byte) lock_current::i#1
[253] (byte~) lock_current::i#9 ← (byte) lock_current::i#1
to:lock_current::@2
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
[212] (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 )
[213] (byte~) keyboard_event_pressed::$0 ← (byte) keyboard_event_pressed::keycode#5 >> (byte/signed byte/word/signed word/dword/signed dword) 3
[214] (byte) keyboard_event_pressed::row_bits#0 ← *((const byte[8]) keyboard_scan_values#0 + (byte~) keyboard_event_pressed::$0)
[215] (byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#5 & (byte/signed byte/word/signed word/dword/signed dword) 7
[216] (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)
[254] (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 )
[255] (byte~) keyboard_event_pressed::$0 ← (byte) keyboard_event_pressed::keycode#5 >> (byte/signed byte/word/signed word/dword/signed dword) 3
[256] (byte) keyboard_event_pressed::row_bits#0 ← *((const byte[8]) keyboard_scan_values#0 + (byte~) keyboard_event_pressed::$0)
[257] (byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#5 & (byte/signed byte/word/signed word/dword/signed dword) 7
[258] (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
[217] return
[259] return
to:@return
keyboard_event_get: scope:[keyboard_event_get] from main::@26
[218] if((byte) keyboard_events_size#13==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_get::@return
[260] 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
[219] (byte) keyboard_events_size#4 ← -- (byte) keyboard_events_size#13
[220] (byte) keyboard_event_get::return#1 ← *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#4)
[261] (byte) keyboard_events_size#4 ← -- (byte) keyboard_events_size#13
[262] (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
[221] (byte) keyboard_events_size#16 ← phi( keyboard_event_get/(byte) keyboard_events_size#13 keyboard_event_get::@3/(byte) keyboard_events_size#4 )
[221] (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 )
[222] return
[263] (byte) keyboard_events_size#16 ← phi( keyboard_event_get/(byte) keyboard_events_size#13 keyboard_event_get::@3/(byte) keyboard_events_size#4 )
[263] (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 )
[264] return
to:@return
keyboard_event_scan: scope:[keyboard_event_scan] from main::@9
[223] phi()
[265] phi()
to:keyboard_event_scan::@1
keyboard_event_scan::@1: scope:[keyboard_event_scan] from keyboard_event_scan keyboard_event_scan::@3
[224] (byte) keyboard_events_size#29 ← phi( keyboard_event_scan/(byte) keyboard_events_size#19 keyboard_event_scan::@3/(byte) keyboard_events_size#13 )
[224] (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 )
[224] (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 )
[225] (byte) keyboard_matrix_read::rowid#0 ← (byte) keyboard_event_scan::row#2
[226] call keyboard_matrix_read
[227] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0
[266] (byte) keyboard_events_size#29 ← phi( keyboard_event_scan/(byte) keyboard_events_size#19 keyboard_event_scan::@3/(byte) keyboard_events_size#13 )
[266] (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 )
[266] (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 )
[267] (byte) keyboard_matrix_read::rowid#0 ← (byte) keyboard_event_scan::row#2
[268] call keyboard_matrix_read
[269] (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
[228] (byte) keyboard_event_scan::row_scan#0 ← (byte) keyboard_matrix_read::return#2
[229] 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
[270] (byte) keyboard_event_scan::row_scan#0 ← (byte) keyboard_matrix_read::return#2
[271] 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
[230] (byte) keyboard_event_scan::keycode#1 ← (byte) keyboard_event_scan::keycode#11 + (byte/signed byte/word/signed word/dword/signed dword) 8
[272] (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
[231] (byte) keyboard_events_size#13 ← phi( keyboard_event_scan::@13/(byte) keyboard_events_size#29 keyboard_event_scan::@19/(byte) keyboard_events_size#30 )
[231] (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 )
[232] (byte) keyboard_event_scan::row#1 ← ++ (byte) keyboard_event_scan::row#2
[233] if((byte) keyboard_event_scan::row#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto keyboard_event_scan::@1
[273] (byte) keyboard_events_size#13 ← phi( keyboard_event_scan::@13/(byte) keyboard_events_size#29 keyboard_event_scan::@19/(byte) keyboard_events_size#30 )
[273] (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 )
[274] (byte) keyboard_event_scan::row#1 ← ++ (byte) keyboard_event_scan::row#2
[275] 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
[234] phi()
[235] call keyboard_event_pressed
[236] (byte) keyboard_event_pressed::return#0 ← (byte) keyboard_event_pressed::return#11
[276] phi()
[277] call keyboard_event_pressed
[278] (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
[237] (byte~) keyboard_event_scan::$14 ← (byte) keyboard_event_pressed::return#0
[238] if((byte~) keyboard_event_scan::$14==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@9
[279] (byte~) keyboard_event_scan::$14 ← (byte) keyboard_event_pressed::return#0
[280] 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
[239] phi()
[281] phi()
to:keyboard_event_scan::@9
keyboard_event_scan::@9: scope:[keyboard_event_scan] from keyboard_event_scan::@21 keyboard_event_scan::@26
[240] phi()
[241] call keyboard_event_pressed
[242] (byte) keyboard_event_pressed::return#1 ← (byte) keyboard_event_pressed::return#11
[282] phi()
[283] call keyboard_event_pressed
[284] (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
[243] (byte~) keyboard_event_scan::$18 ← (byte) keyboard_event_pressed::return#1
[244] if((byte~) keyboard_event_scan::$18==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@10
[285] (byte~) keyboard_event_scan::$18 ← (byte) keyboard_event_pressed::return#1
[286] 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
[245] phi()
[287] phi()
to:keyboard_event_scan::@10
keyboard_event_scan::@10: scope:[keyboard_event_scan] from keyboard_event_scan::@22 keyboard_event_scan::@27
[246] phi()
[247] call keyboard_event_pressed
[248] (byte) keyboard_event_pressed::return#2 ← (byte) keyboard_event_pressed::return#11
[288] phi()
[289] call keyboard_event_pressed
[290] (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
[249] (byte~) keyboard_event_scan::$22 ← (byte) keyboard_event_pressed::return#2
[250] if((byte~) keyboard_event_scan::$22==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@11
[291] (byte~) keyboard_event_scan::$22 ← (byte) keyboard_event_pressed::return#2
[292] 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
[251] phi()
[293] phi()
to:keyboard_event_scan::@11
keyboard_event_scan::@11: scope:[keyboard_event_scan] from keyboard_event_scan::@23 keyboard_event_scan::@28
[252] phi()
[253] call keyboard_event_pressed
[254] (byte) keyboard_event_pressed::return#10 ← (byte) keyboard_event_pressed::return#11
[294] phi()
[295] call keyboard_event_pressed
[296] (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
[255] (byte~) keyboard_event_scan::$26 ← (byte) keyboard_event_pressed::return#10
[256] if((byte~) keyboard_event_scan::$26==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@return
[297] (byte~) keyboard_event_scan::$26 ← (byte) keyboard_event_pressed::return#10
[298] 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
[257] phi()
[299] phi()
to:keyboard_event_scan::@return
keyboard_event_scan::@return: scope:[keyboard_event_scan] from keyboard_event_scan::@24 keyboard_event_scan::@29
[258] return
[300] return
to:@return
keyboard_event_scan::@4: scope:[keyboard_event_scan] from keyboard_event_scan::@25 keyboard_event_scan::@5
[259] (byte) keyboard_events_size#10 ← phi( keyboard_event_scan::@25/(byte) keyboard_events_size#29 keyboard_event_scan::@5/(byte) keyboard_events_size#30 )
[259] (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 )
[259] (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 )
[260] (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)
[261] (byte~) keyboard_event_scan::$4 ← (byte~) keyboard_event_scan::$3 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte) keyboard_event_scan::col#2)
[262] if((byte~) keyboard_event_scan::$4==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@5
[301] (byte) keyboard_events_size#10 ← phi( keyboard_event_scan::@25/(byte) keyboard_events_size#29 keyboard_event_scan::@5/(byte) keyboard_events_size#30 )
[301] (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 )
[301] (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 )
[302] (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)
[303] (byte~) keyboard_event_scan::$4 ← (byte~) keyboard_event_scan::$3 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte) keyboard_event_scan::col#2)
[304] 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
[263] if((byte) keyboard_events_size#10==(byte/signed byte/word/signed word/dword/signed dword) 8) goto keyboard_event_scan::@5
[305] 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
[264] (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)
[265] if((byte) keyboard_event_scan::event_type#0==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@7
[306] (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)
[307] 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
[266] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte) keyboard_event_scan::keycode#10
[267] (byte) keyboard_events_size#2 ← ++ (byte) keyboard_events_size#10
[308] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte) keyboard_event_scan::keycode#10
[309] (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
[268] (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 )
[269] (byte) keyboard_event_scan::keycode#15 ← ++ (byte) keyboard_event_scan::keycode#10
[270] (byte) keyboard_event_scan::col#1 ← ++ (byte) keyboard_event_scan::col#2
[271] if((byte) keyboard_event_scan::col#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto keyboard_event_scan::@4
[310] (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 )
[311] (byte) keyboard_event_scan::keycode#15 ← ++ (byte) keyboard_event_scan::keycode#10
[312] (byte) keyboard_event_scan::col#1 ← ++ (byte) keyboard_event_scan::col#2
[313] 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
[272] *((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2) ← (byte) keyboard_event_scan::row_scan#0
[314] *((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
[273] (byte/word/dword~) keyboard_event_scan::$11 ← (byte) keyboard_event_scan::keycode#10 | (byte/signed byte/word/signed word/dword/signed dword) 64
[274] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte/word/dword~) keyboard_event_scan::$11
[275] (byte) keyboard_events_size#1 ← ++ (byte) keyboard_events_size#10
[315] (byte/word/dword~) keyboard_event_scan::$11 ← (byte) keyboard_event_scan::keycode#10 | (byte/signed byte/word/signed word/dword/signed dword) 64
[316] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte/word/dword~) keyboard_event_scan::$11
[317] (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
[276] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#0)
[277] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B#0)
[318] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#0)
[319] (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
[278] return
[320] return
to:@return
init: scope:[init] from main::@21
[279] phi()
[280] call fill
[321] phi()
[322] call fill
to:init::@9
init::@9: scope:[init] from init
[281] phi()
[282] call fill
[323] phi()
[324] call fill
to:init::@1
init::@1: scope:[init] from init::@1 init::@9
[283] (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 )
[283] (byte) init::i#2 ← phi( init::@1/(byte) init::i#1 init::@9/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[284] (byte~) init::$5 ← (byte) init::i#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
[285] *((const byte*[PLAYFIELD_LINES#0+3]) screen_lines#0 + (byte~) init::$5) ← (byte*) init::li#2
[286] (byte*) init::li#1 ← (byte*) init::li#2 + (byte/signed byte/word/signed word/dword/signed dword) 40
[287] (byte) init::i#1 ← ++ (byte) init::i#2
[288] 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
[325] (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 )
[325] (byte) init::i#2 ← phi( init::@1/(byte) init::i#1 init::@9/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[326] (byte~) init::$5 ← (byte) init::i#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
[327] *((const byte*[PLAYFIELD_LINES#0+3]) screen_lines#0 + (byte~) init::$5) ← (byte*) init::li#2
[328] (byte*) init::li#1 ← (byte*) init::li#2 + (byte/signed byte/word/signed word/dword/signed dword) 40
[329] (byte) init::i#1 ← ++ (byte) init::i#2
[330] 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
[289] (byte*) init::pli#2 ← phi( init::@2/(byte*) init::pli#1 init::@1/(const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 )
[289] (byte) init::j#2 ← phi( init::@2/(byte) init::j#1 init::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[290] (byte~) init::$8 ← (byte) init::j#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
[291] *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte~) init::$8) ← (byte*) init::pli#2
[292] (byte*) init::pli#1 ← (byte*) init::pli#2 + (byte/signed byte/word/signed word/dword/signed dword) 10
[293] (byte) init::j#1 ← ++ (byte) init::j#2
[294] 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
[331] (byte) init::idx#2 ← phi( init::@2/(byte) init::idx#1 init::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[331] (byte*) init::pli#2 ← phi( init::@2/(byte*) init::pli#1 init::@1/(const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 )
[331] (byte) init::j#2 ← phi( init::@2/(byte) init::j#1 init::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[332] (byte~) init::$8 ← (byte) init::j#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
[333] *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte~) init::$8) ← (byte*) init::pli#2
[334] *((const byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx#0 + (byte) init::j#2) ← (byte) init::idx#2
[335] (byte*) init::pli#1 ← (byte*) init::pli#2 + (const byte) PLAYFIELD_COLS#0
[336] (byte) init::idx#1 ← (byte) init::idx#2 + (const byte) PLAYFIELD_COLS#0
[337] (byte) init::j#1 ← ++ (byte) init::j#2
[338] 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::@6
init::@6: scope:[init] from init::@2
[339] *((const byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx#0+(const byte) PLAYFIELD_LINES#0) ← (const byte) PLAYFIELD_COLS#0*(const byte) PLAYFIELD_LINES#0
to:init::@3
init::@3: scope:[init] from init::@2 init::@7
[295] (byte) init::l#4 ← phi( init::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 init::@7/(byte) init::l#1 )
[295] (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 )
init::@3: scope:[init] from init::@6 init::@7
[340] (byte) init::l#4 ← phi( init::@6/(byte/signed byte/word/signed word/dword/signed dword) 0 init::@7/(byte) init::l#1 )
[340] (byte*) init::line#4 ← phi( init::@6/(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
[296] (byte) init::c#2 ← phi( init::@3/(byte/signed byte/word/signed word/dword/signed dword) 0 init::@4/(byte) init::c#1 )
[297] (byte*~) init::$13 ← (byte*) init::line#4 + (byte) init::c#2
[298] *((byte*~) init::$13) ← (const byte) DARK_GREY#0
[299] (byte) init::c#1 ← ++ (byte) init::c#2
[300] 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
[341] (byte) init::c#2 ← phi( init::@3/(byte/signed byte/word/signed word/dword/signed dword) 0 init::@4/(byte) init::c#1 )
[342] (byte*~) init::$14 ← (byte*) init::line#4 + (byte) init::c#2
[343] *((byte*~) init::$14) ← (const byte) DARK_GREY#0
[344] (byte) init::c#1 ← ++ (byte) init::c#2
[345] 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
[301] (byte*) init::line#1 ← (byte*) init::line#4 + (byte/signed byte/word/signed word/dword/signed dword) 40
[302] (byte) init::l#1 ← ++ (byte) init::l#4
[303] 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
[346] (byte*) init::line#1 ← (byte*) init::line#4 + (byte/signed byte/word/signed word/dword/signed dword) 40
[347] (byte) init::l#1 ← ++ (byte) init::l#4
[348] 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
[304] return
[349] return
to:@return
fill: scope:[fill] from init init::@9
[305] (byte) fill::val#3 ← phi( init/(byte/word/signed word/dword/signed dword) 160 init::@9/(const byte) BLACK#0 )
[305] (byte*) fill::addr#0 ← phi( init/(const byte*) SCREEN#0 init::@9/(const byte*) COLS#0 )
[306] (byte*) fill::end#0 ← (byte*) fill::addr#0 + (word/signed word/dword/signed dword) 1000
[350] (byte) fill::val#3 ← phi( init/(byte/word/signed word/dword/signed dword) 160 init::@9/(const byte) BLACK#0 )
[350] (byte*) fill::addr#0 ← phi( init/(const byte*) SCREEN#0 init::@9/(const byte*) COLS#0 )
[351] (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
[307] (byte*) fill::addr#2 ← phi( fill/(byte*) fill::addr#0 fill::@1/(byte*) fill::addr#1 )
[308] *((byte*) fill::addr#2) ← (byte) fill::val#3
[309] (byte*) fill::addr#1 ← ++ (byte*) fill::addr#2
[310] if((byte*) fill::addr#1!=(byte*) fill::end#0) goto fill::@1
[352] (byte*) fill::addr#2 ← phi( fill/(byte*) fill::addr#0 fill::@1/(byte*) fill::addr#1 )
[353] *((byte*) fill::addr#2) ← (byte) fill::val#3
[354] (byte*) fill::addr#1 ← ++ (byte*) fill::addr#2
[355] if((byte*) fill::addr#1!=(byte*) fill::end#0) goto fill::@1
to:fill::@return
fill::@return: scope:[fill] from fill::@1
[311] return
[356] return
to:@return
sid_rnd_init: scope:[sid_rnd_init] from main
[312] *((const word*) SID_VOICE3_FREQ#0) ← (word/dword/signed dword) 65535
[313] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0
[357] *((const word*) SID_VOICE3_FREQ#0) ← (word/dword/signed dword) 65535
[358] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0
to:sid_rnd_init::@return
sid_rnd_init::@return: scope:[sid_rnd_init] from sid_rnd_init
[314] return
[359] return
to:@return

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,4 @@
(label) @23
(label) @26
(label) @begin
(label) @end
(byte) BLACK
@ -165,46 +165,46 @@
(byte*) current_piece#13 current_piece zp ZP_WORD:12 0.3432835820895522
(byte*) current_piece#15 current_piece#15 zp ZP_WORD:5 10.0
(byte*) current_piece#23 current_piece zp ZP_WORD:12 6.0
(byte*~) current_piece#68 current_piece zp ZP_WORD:12 4.0
(byte*~) current_piece#69 current_piece#69 zp ZP_WORD:5 4.0
(byte*~) current_piece#69 current_piece zp ZP_WORD:12 4.0
(byte*~) current_piece#70 current_piece#70 zp ZP_WORD:5 4.0
(byte*~) current_piece#71 current_piece#71 zp ZP_WORD:5 4.0
(byte*~) current_piece#72 current_piece#72 zp ZP_WORD:5 4.0
(byte*~) current_piece#73 current_piece zp ZP_WORD:12 4.0
(byte*~) current_piece#73 current_piece#73 zp ZP_WORD:5 4.0
(byte*~) current_piece#74 current_piece zp ZP_WORD:12 4.0
(byte) current_piece_color
(byte) current_piece_color#11 current_piece_color zp ZP_BYTE:18 19.96078431372549
(byte) current_piece_color#13 current_piece_color zp ZP_BYTE:18 1.0
(byte) current_piece_color#15 current_piece_color zp ZP_BYTE:18 0.7272727272727273
(byte) current_piece_color#23 current_piece_color zp ZP_BYTE:18 6.0
(byte) current_piece_color#64 current_piece_color#64 zp ZP_BYTE:7 53.368421052631575
(byte~) current_piece_color#72 current_piece_color#72 zp ZP_BYTE:7 4.0
(byte~) current_piece_color#73 current_piece_color#73 zp ZP_BYTE:7 22.0
(byte) current_piece_color#65 current_piece_color#65 zp ZP_BYTE:7 53.368421052631575
(byte~) current_piece_color#73 current_piece_color#73 zp ZP_BYTE:7 4.0
(byte~) current_piece_color#74 current_piece_color#74 zp ZP_BYTE:7 22.0
(byte*) current_piece_gfx
(byte*) current_piece_gfx#10 current_piece_gfx zp ZP_WORD:15 0.6666666666666666
(byte*) current_piece_gfx#15 current_piece_gfx zp ZP_WORD:15 19.96078431372549
(byte*) current_piece_gfx#17 current_piece_gfx zp ZP_WORD:15 0.2962962962962963
(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 6.0
(byte*) current_piece_gfx#62 current_piece_gfx#62 zp ZP_WORD:5 53.368421052631575
(byte*) current_piece_gfx#63 current_piece_gfx#63 zp ZP_WORD:5 53.368421052631575
(byte*) current_piece_gfx#8 current_piece_gfx zp ZP_WORD:15 4.0
(byte*~) current_piece_gfx#84 current_piece_gfx#84 zp ZP_WORD:5 2.0
(byte*~) current_piece_gfx#85 current_piece_gfx#85 zp ZP_WORD:5 11.0
(byte*~) current_piece_gfx#85 current_piece_gfx#85 zp ZP_WORD:5 2.0
(byte*~) current_piece_gfx#86 current_piece_gfx#86 zp ZP_WORD:5 11.0
(byte) current_xpos
(byte) current_xpos#16 current_xpos zp ZP_BYTE:17 2.313725490196078
(byte) current_xpos#19 current_xpos zp ZP_BYTE:17 0.72
(byte) current_xpos#23 current_xpos zp ZP_BYTE:17 0.8500000000000003
(byte) current_xpos#36 current_xpos zp ZP_BYTE:17 4.0
(byte) current_xpos#62 current_xpos#62 zp ZP_BYTE:4 5.894736842105264
(byte) current_xpos#63 current_xpos#63 zp ZP_BYTE:4 5.894736842105264
(byte) current_xpos#7 current_xpos zp ZP_BYTE:17 4.0
(byte) current_xpos#9 current_xpos zp ZP_BYTE:17 4.0
(byte~) current_xpos#93 current_xpos#93 zp ZP_BYTE:4 7.333333333333333
(byte~) current_xpos#94 current_xpos#94 zp ZP_BYTE:4 7.333333333333333
(byte) current_ypos
(byte) current_ypos#12 current_ypos zp ZP_BYTE:2 0.5588235294117647
(byte) current_ypos#16 current_ypos zp ZP_BYTE:2 0.47761194029850734
(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#68 reg byte x 5.5
(byte~) current_ypos#69 reg byte x 5.5
(void()) fill((byte*) fill::start , (word) fill::size , (byte) fill::val)
(label) fill::@1
(label) fill::@return
@ -218,14 +218,43 @@
(byte*) fill::start
(byte) fill::val
(byte) fill::val#3 reg byte x 1.8333333333333333
(byte()) find_line()
(label) find_line::@1
(label) find_line::@11
(label) find_line::@12
(label) find_line::@13
(label) find_line::@2
(label) find_line::@3
(label) find_line::@4
(label) find_line::@6
(label) find_line::@return
(byte) find_line::filled
(byte) find_line::filled#2 filled zp ZP_BYTE:4 5250.75
(byte) find_line::filled#4 filled zp ZP_BYTE:4 5000.5
(byte) find_line::i
(byte) find_line::i#1 i zp ZP_BYTE:8 2333.6666666666665
(byte~) find_line::i#10 i#10 zp ZP_BYTE:3 20002.0
(byte) find_line::i#2 i#2 zp ZP_BYTE:3 15502.0
(byte) find_line::i#3 i#3 zp ZP_BYTE:3 2002.0
(byte~) find_line::i#8 i#8 zp ZP_BYTE:3 2002.0
(byte) find_line::return
(byte) find_line::return#0 reg byte a 202.0
(byte) find_line::return#2 return zp ZP_BYTE:7 367.33333333333337
(byte) find_line::x
(byte) find_line::x#1 reg byte x 10001.0
(byte) find_line::x#2 reg byte x 4000.4
(byte) find_line::y
(byte) find_line::y#1 y zp ZP_BYTE:7 1001.0
(byte) find_line::y#8 y zp ZP_BYTE:7 300.29999999999995
(void()) init()
(byte*~) init::$13 $13 zp ZP_WORD:12 202.0
(byte*~) init::$14 $14 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
(label) init::@2
(label) init::@3
(label) init::@4
(label) init::@6
(label) init::@7
(label) init::@9
(label) init::@return
@ -235,9 +264,12 @@
(byte) init::i
(byte) init::i#1 reg byte x 16.5
(byte) init::i#2 reg byte x 8.25
(byte) init::idx
(byte) init::idx#1 idx zp ZP_BYTE:2 7.333333333333333
(byte) init::idx#2 idx zp ZP_BYTE:2 6.6000000000000005
(byte) init::j
(byte) init::j#1 reg byte x 16.5
(byte) init::j#2 reg byte x 8.25
(byte) init::j#2 reg byte x 7.333333333333333
(byte) init::l
(byte) init::l#1 l zp ZP_BYTE:2 16.5
(byte) init::l#4 l zp ZP_BYTE:2 3.142857142857143
@ -248,8 +280,8 @@
(byte*) init::line#1 line zp ZP_WORD:5 7.333333333333333
(byte*) init::line#4 line zp ZP_WORD:5 20.499999999999996
(byte*) init::pli
(byte*) init::pli#1 pli zp ZP_WORD:5 7.333333333333333
(byte*) init::pli#2 pli zp ZP_WORD:5 11.0
(byte*) init::pli#1 pli zp ZP_WORD:5 5.5
(byte*) init::pli#2 pli zp ZP_WORD:5 8.25
(byte()) keyboard_event_get()
(label) keyboard_event_get::@3
(label) keyboard_event_get::@return
@ -417,6 +449,7 @@
(label) play_move_down::@18
(label) play_move_down::@19
(label) play_move_down::@2
(label) play_move_down::@20
(label) play_move_down::@4
(label) play_move_down::@6
(label) play_move_down::@7
@ -474,6 +507,43 @@
(const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 playfield = { fill( PLAYFIELD_LINES#0*PLAYFIELD_COLS#0, 0) }
(byte*[PLAYFIELD_LINES#0]) playfield_lines
(const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 playfield_lines = { fill( PLAYFIELD_LINES#0, 0) }
(byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx
(const byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx#0 playfield_lines_idx = { fill( PLAYFIELD_LINES#0+1, 0) }
(void()) remove_line((byte) remove_line::ypos)
(byte~) remove_line::$0 reg byte a 4.0
(label) remove_line::@1
(label) remove_line::@2
(label) remove_line::@3
(label) remove_line::@return
(byte) remove_line::i1
(byte) remove_line::i1#0 reg byte x 4.0
(byte) remove_line::i1#1 reg byte x 4200.6
(byte) remove_line::i1#2 reg byte x 10334.666666666666
(byte) remove_line::i1#3 reg byte x 2004.0
(byte) remove_line::i2
(byte) remove_line::i2#0 reg byte y 2.0
(byte) remove_line::i2#1 reg byte y 3500.5
(byte) remove_line::i2#2 reg byte y 15502.0
(byte) remove_line::i2#3 reg byte y 2004.0
(byte) remove_line::x
(byte) remove_line::x#1 x zp ZP_BYTE:4 15001.5
(byte) remove_line::x#2 x zp ZP_BYTE:4 5000.5
(byte) remove_line::y
(byte) remove_line::y#1 y zp ZP_BYTE:3 1501.5
(byte) remove_line::y#4 y zp ZP_BYTE:3 286.2857142857143
(byte) remove_line::ypos
(byte) remove_line::ypos#0 ypos zp ZP_BYTE:3 26.75
(void()) remove_lines()
(label) remove_lines::@1
(label) remove_lines::@2
(label) remove_lines::@3
(label) remove_lines::@7
(label) remove_lines::@return
(byte) remove_lines::done
(byte) remove_lines::done#2 done zp ZP_BYTE:2 151.5
(byte) remove_lines::done#3 done zp ZP_BYTE:2 28.857142857142858
(byte) remove_lines::line_ypos
(byte) remove_lines::line_ypos#0 reg byte a 151.5
(void()) render_current()
(label) render_current::@1
(label) render_current::@2
@ -547,13 +617,13 @@
(byte) spawn_current::piece_idx#1 reg byte x 202.0
(byte) spawn_current::piece_idx#2 reg byte x 41.199999999999996
zp ZP_BYTE:2 [ current_ypos#12 current_ypos#16 current_ypos#31 current_ypos#4 lock_current::ypos2#2 lock_current::ypos2#0 lock_current::ypos2#1 init::l#4 init::l#1 spawn_current::$3 ]
zp ZP_BYTE:3 [ current_movedown_counter#15 current_movedown_counter#12 current_movedown_counter#10 lock_current::l#6 lock_current::l#1 ]
reg byte x [ current_ypos#22 current_ypos#68 ]
zp ZP_BYTE:4 [ current_xpos#62 current_xpos#93 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#7 lock_current::i#9 keyboard_event_pressed::keycode#5 keyboard_event_scan::row#2 keyboard_event_scan::row#1 ]
zp ZP_WORD:5 [ current_piece_gfx#62 current_piece_gfx#84 current_piece_gfx#85 render_playfield::line#2 render_playfield::line#0 render_playfield::line#1 current_piece#15 current_piece#69 current_piece#70 current_piece#71 current_piece#72 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#64 current_piece_color#72 current_piece_color#73 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 lock_current::col#2 lock_current::col#0 lock_current::col#1 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 lock_current::i#1 keyboard_event_scan::row_scan#0 ]
zp ZP_BYTE:2 [ current_ypos#12 current_ypos#16 current_ypos#31 current_ypos#4 lock_current::ypos2#2 lock_current::ypos2#0 lock_current::ypos2#1 remove_lines::done#3 remove_lines::done#2 init::idx#2 init::idx#1 init::l#4 init::l#1 spawn_current::$3 ]
zp ZP_BYTE:3 [ current_movedown_counter#15 current_movedown_counter#12 current_movedown_counter#10 remove_line::y#4 remove_line::ypos#0 remove_line::y#1 find_line::i#2 find_line::i#3 find_line::i#8 find_line::i#10 lock_current::l#6 lock_current::l#1 ]
reg byte x [ current_ypos#22 current_ypos#69 ]
zp ZP_BYTE:4 [ current_xpos#63 current_xpos#94 render_playfield::l#2 render_playfield::l#1 play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 remove_line::x#2 remove_line::x#1 find_line::filled#4 find_line::filled#2 lock_current::i#2 lock_current::i#3 lock_current::i#7 lock_current::i#9 keyboard_event_pressed::keycode#5 keyboard_event_scan::row#2 keyboard_event_scan::row#1 ]
zp ZP_WORD:5 [ current_piece_gfx#63 current_piece_gfx#85 current_piece_gfx#86 render_playfield::line#2 render_playfield::line#0 render_playfield::line#1 current_piece#15 current_piece#70 current_piece#71 current_piece#72 current_piece#73 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#65 current_piece_color#73 current_piece_color#74 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 find_line::return#2 find_line::y#8 find_line::y#1 lock_current::col#2 lock_current::col#0 lock_current::col#1 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 find_line::i#1 lock_current::i#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 ]
@ -566,13 +636,16 @@ reg byte x [ collision::c#2 collision::c#1 ]
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#73 current_piece#11 current_piece#13 current_piece#68 init::$13 fill::end#0 ]
zp ZP_WORD:12 [ current_piece#23 current_piece#74 current_piece#11 current_piece#13 current_piece#69 init::$14 fill::end#0 ]
zp ZP_BYTE:14 [ current_orientation#33 current_orientation#15 current_orientation#23 current_orientation#8 current_orientation#18 ]
zp ZP_WORD:15 [ current_piece_gfx#29 current_piece_gfx#15 current_piece_gfx#18 current_piece_gfx#10 current_piece_gfx#8 current_piece_gfx#17 ]
zp ZP_BYTE:17 [ current_xpos#36 current_xpos#16 current_xpos#23 current_xpos#9 current_xpos#19 current_xpos#7 ]
zp ZP_BYTE:18 [ current_piece_color#23 current_piece_color#11 current_piece_color#13 current_piece_color#15 ]
reg byte x [ play_move_down::return#3 ]
reg byte x [ spawn_current::piece_idx#2 spawn_current::piece_idx#1 ]
reg byte x [ remove_line::i1#2 remove_line::i1#3 remove_line::i1#0 remove_line::i1#1 ]
reg byte y [ remove_line::i2#2 remove_line::i2#3 remove_line::i2#0 remove_line::i2#1 ]
reg byte x [ find_line::x#2 find_line::x#1 ]
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 ]
@ -614,6 +687,9 @@ reg byte a [ play_move_down::$12 ]
reg byte a [ sid_rnd::return#2 ]
reg byte a [ spawn_current::$1 ]
reg byte a [ sid_rnd::return#0 ]
reg byte a [ find_line::return#0 ]
reg byte a [ remove_lines::line_ypos#0 ]
reg byte a [ remove_line::$0 ]
reg byte a [ keyboard_event_pressed::$0 ]
reg byte a [ keyboard_event_pressed::$1 ]
reg byte a [ keyboard_event_pressed::return#11 ]