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

Improved remove lines implementation

This commit is contained in:
jespergravgaard 2018-12-18 23:09:20 +01:00
parent 468def2d6a
commit 45b03818e4
6 changed files with 3223 additions and 3943 deletions

View File

@ -1,2 +1,3 @@
lda {z1}
cmp #0
bne {la1}

View File

@ -45,12 +45,6 @@ const byte current_movedown_fast = 5;
// Counts up to the next movedown of current piece
byte current_movedown_counter = 0;
// The screen
byte* SCREEN = $400;
// Pointers to the screen address for rendering each playfield line
byte*[PLAYFIELD_LINES+3] screen_lines;
void main() {
sid_rnd_init();
asm { sei }
@ -235,44 +229,32 @@ void spawn_current() {
}
// Look through the playfield for lines - and remove any lines found
// Utilizes two cursors on the playfield - one reading cells and one writing cells
// Whenever a full line is detected the writing cursor is instructed to write to the same line once more.
void remove_lines() {
byte done = 0;
do {
byte line_ypos = find_line();
if(line_ypos!=$ff) {
remove_line(line_ypos);
} else {
done = 1;
}
} while(done==0);
}
// Start both cursors at the end of the playfield
byte r = PLAYFIELD_LINES*PLAYFIELD_COLS-1;
byte w = PLAYFIELD_LINES*PLAYFIELD_COLS-1;
// Look through the playfield for lines - and return the ypos of any filled line.
// Returns $ff if no line was found
byte find_line() {
byte i = 0;
// Read all lines and rewrite them
for(byte y:0..PLAYFIELD_LINES-1) {
byte filled = 1;
byte full = 1;
for(byte x:0..PLAYFIELD_COLS-1) {
if(playfield[i++]==0) {
filled = 0;
byte c = playfield[r--];
if(c==0) {
full = 0;
}
playfield[w--] = c;
}
if(filled==1) {
return y;
// If the line is full then re-write it.
if(full==1) {
w = w + PLAYFIELD_COLS;
}
}
return $ff;
}
}
// Remove a single line by scrolling all lines above it down and emptying the top line
void remove_line(byte ypos) {
byte i2 = playfield_lines_idx[ypos+1]-1;
byte i1 = playfield_lines_idx[ypos]-1;
for(byte y=ypos;y!=1;y--) {
for(byte x:0..PLAYFIELD_COLS-1) {
playfield[i2--] = playfield[i1--];
}
// Write zeros in the rest of the lines
while(w!=$ff) {
playfield[w--] = 0;
}
}
@ -291,6 +273,12 @@ void tables_init() {
}
// The screen
byte* SCREEN = $400;
// Pointers to the screen address for rendering each playfield line
byte*[PLAYFIELD_LINES+3] screen_lines;
// Initialize rendering
void render_init() {
// Clear the screen

View File

@ -28,12 +28,12 @@
.const PLAYFIELD_COLS = $a
.const current_movedown_slow = $32
.const current_movedown_fast = 5
.label SCREEN = $400
.const COLLISION_NONE = 0
.const COLLISION_PLAYFIELD = 1
.const COLLISION_BOTTOM = 2
.const COLLISION_LEFT = 4
.const COLLISION_RIGHT = 8
.label SCREEN = $400
.label keyboard_events_size = $13
.label current_ypos = 2
.label current_xpos = $11
@ -44,17 +44,17 @@
.label current_movedown_counter = 3
.label current_piece_15 = 5
.label current_xpos_63 = 4
.label current_piece_gfx_63 = 5
.label current_piece_color_66 = 7
.label current_xpos_95 = 4
.label current_piece_gfx_86 = 5
.label current_piece_gfx_64 = 5
.label current_piece_color_67 = 7
.label current_xpos_96 = 4
.label current_piece_gfx_87 = 5
.label current_piece_color_74 = 7
.label current_piece_gfx_88 = 5
.label current_piece_color_75 = 7
.label current_piece_71 = 5
.label current_piece_color_76 = 7
.label current_piece_72 = 5
.label current_piece_73 = 5
.label current_piece_74 = 5
.label current_piece_75 = 5
jsr main
main: {
.label key_event = $14
@ -66,11 +66,11 @@ main: {
jsr spawn_current
jsr render_playfield
lda current_piece_gfx
sta current_piece_gfx_86
sta current_piece_gfx_87
lda current_piece_gfx+1
sta current_piece_gfx_86+1
sta current_piece_gfx_87+1
lda current_piece_color
sta current_piece_color_74
sta current_piece_color_75
lda #3
sta current_xpos_63
ldx #0
@ -119,13 +119,13 @@ main: {
jsr render_playfield
ldx current_ypos
lda current_xpos
sta current_xpos_95
sta current_xpos_96
lda current_piece_gfx
sta current_piece_gfx_87
sta current_piece_gfx_88
lda current_piece_gfx+1
sta current_piece_gfx_87+1
sta current_piece_gfx_88+1
lda current_piece_color
sta current_piece_color_75
sta current_piece_color_76
jsr render_current
b10:
dec BORDERCOL
@ -157,14 +157,14 @@ render_current: {
ldx #0
b3:
ldy i
lda (current_piece_gfx_63),y
lda (current_piece_gfx_64),y
inc i
cmp #0
beq b4
lda xpos
cmp #PLAYFIELD_COLS
bcs b4
lda current_piece_color_66
lda current_piece_color_67
ldy xpos
sta (screen_line),y
b4:
@ -240,9 +240,9 @@ play_move_rotate: {
ldy current_ypos
ldx orientation
lda current_piece
sta current_piece_74
sta current_piece_75
lda current_piece+1
sta current_piece_74+1
sta current_piece_75+1
jsr collision
cmp #COLLISION_NONE
bne b3
@ -367,9 +367,9 @@ play_move_leftright: {
ldy current_ypos
ldx current_orientation
lda current_piece
sta current_piece_73
sta current_piece_74
lda current_piece+1
sta current_piece_73+1
sta current_piece_74+1
jsr collision
cmp #COLLISION_NONE
bne b3
@ -388,9 +388,9 @@ play_move_leftright: {
ldy current_ypos
ldx current_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 #COLLISION_NONE
bne b3
@ -429,9 +429,9 @@ play_move_down: {
sta collision.xpos
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
beq b6
@ -489,108 +489,56 @@ sid_rnd: {
rts
}
remove_lines: {
.label done = 2
.label c = 7
.label x = 3
.label y = 2
.label full = 4
lda #0
sta done
sta y
ldx #PLAYFIELD_LINES*PLAYFIELD_COLS-1
ldy #PLAYFIELD_LINES*PLAYFIELD_COLS-1
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:
sta full
lda #0
sta x
b2:
lda playfield,x
sta playfield,y
lda playfield,y
sta c
dey
cmp #0
bne b3
lda #0
sta full
b3:
lda c
sta playfield,x
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
lda full
cmp #1
bne b4
breturn:
rts
txa
clc
adc #PLAYFIELD_COLS
tax
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
bne b1
b5:
cpx #$ff
bne b6
rts
b6:
lda #0
sta playfield,x
dex
jmp b5
}
lock_current: {
.label ypos2 = 2

View File

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

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,4 @@
(label) @27
(label) @25
(label) @begin
(label) @end
(byte) BLACK
@ -165,30 +165,30 @@
(byte*) current_piece#13 current_piece zp ZP_WORD:12 0.3484848484848484
(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#70 current_piece zp ZP_WORD:12 4.0
(byte*~) current_piece#71 current_piece#71 zp ZP_WORD:5 4.0
(byte*~) current_piece#71 current_piece zp ZP_WORD:12 4.0
(byte*~) current_piece#72 current_piece#72 zp ZP_WORD:5 4.0
(byte*~) current_piece#73 current_piece#73 zp ZP_WORD:5 4.0
(byte*~) current_piece#74 current_piece#74 zp ZP_WORD:5 4.0
(byte*~) current_piece#75 current_piece zp ZP_WORD:12 4.0
(byte*~) current_piece#75 current_piece#75 zp ZP_WORD:5 4.0
(byte*~) current_piece#76 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.04
(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#66 current_piece_color#66 zp ZP_BYTE:7 53.368421052631575
(byte~) current_piece_color#74 current_piece_color#74 zp ZP_BYTE:7 4.0
(byte~) current_piece_color#75 current_piece_color#75 zp ZP_BYTE:7 22.0
(byte) current_piece_color#67 current_piece_color#67 zp ZP_BYTE:7 53.368421052631575
(byte~) current_piece_color#75 current_piece_color#75 zp ZP_BYTE:7 4.0
(byte~) current_piece_color#76 current_piece_color#76 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.8666666666666665
(byte*) current_piece_gfx#29 current_piece_gfx zp ZP_WORD:15 6.0
(byte*) current_piece_gfx#63 current_piece_gfx#63 zp ZP_WORD:5 53.368421052631575
(byte*) current_piece_gfx#64 current_piece_gfx#64 zp ZP_WORD:5 53.368421052631575
(byte*) current_piece_gfx#8 current_piece_gfx zp ZP_WORD:15 4.0
(byte*~) current_piece_gfx#86 current_piece_gfx#86 zp ZP_WORD:5 2.0
(byte*~) current_piece_gfx#87 current_piece_gfx#87 zp ZP_WORD:5 11.0
(byte*~) current_piece_gfx#87 current_piece_gfx#87 zp ZP_WORD:5 2.0
(byte*~) current_piece_gfx#88 current_piece_gfx#88 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
@ -197,14 +197,14 @@
(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#95 current_xpos#95 zp ZP_BYTE:4 7.333333333333333
(byte~) current_xpos#96 current_xpos#96 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.48484848484848475
(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#70 reg byte x 5.5
(byte~) current_ypos#71 reg byte x 5.5
(void()) fill((byte*) fill::start , (word) fill::size , (byte) fill::val)
(label) fill::@1
(label) fill::@return
@ -218,34 +218,6 @@
(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
(byte()) keyboard_event_get()
(label) keyboard_event_get::@3
(label) keyboard_event_get::@return
@ -473,41 +445,40 @@
(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::@10
(label) remove_lines::@17
(label) remove_lines::@2
(label) remove_lines::@3
(label) remove_lines::@7
(label) remove_lines::@4
(label) remove_lines::@5
(label) remove_lines::@6
(label) remove_lines::@9
(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
(byte) remove_lines::c
(byte) remove_lines::c#0 c zp ZP_BYTE:7 600.5999999999999
(byte) remove_lines::full
(byte) remove_lines::full#2 full zp ZP_BYTE:4 420.59999999999997
(byte) remove_lines::full#4 full zp ZP_BYTE:4 400.4
(byte) remove_lines::r
(byte) remove_lines::r#1 reg byte y 161.76923076923077
(byte) remove_lines::r#2 reg byte y 1552.0
(byte) remove_lines::r#3 reg byte y 202.0
(byte) remove_lines::w
(byte) remove_lines::w#1 reg byte x 551.0
(byte) remove_lines::w#11 reg byte x 134.66666666666666
(byte) remove_lines::w#12 reg byte x 202.0
(byte) remove_lines::w#2 reg byte x 202.0
(byte) remove_lines::w#3 reg byte x 202.0
(byte) remove_lines::w#4 reg byte x 443.42857142857144
(byte) remove_lines::w#6 reg byte x 168.33333333333331
(byte) remove_lines::x
(byte) remove_lines::x#1 x zp ZP_BYTE:3 1501.5
(byte) remove_lines::x#2 x zp ZP_BYTE:3 250.25
(byte) remove_lines::y
(byte) remove_lines::y#1 y zp ZP_BYTE:2 151.5
(byte) remove_lines::y#8 y zp ZP_BYTE:2 14.428571428571429
(void()) render_current()
(label) render_current::@1
(label) render_current::@2
@ -619,13 +590,13 @@
(byte*) tables_init::pli#1 pli zp ZP_WORD:5 5.5
(byte*) tables_init::pli#2 pli zp ZP_WORD:5 8.25
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 tables_init::idx#2 tables_init::idx#1 render_init::l#4 render_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#70 ]
zp ZP_BYTE:4 [ current_xpos#63 current_xpos#95 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#86 current_piece_gfx#87 render_playfield::line#2 render_playfield::line#0 render_playfield::line#1 current_piece#15 current_piece#71 current_piece#72 current_piece#73 current_piece#74 collision::piece_gfx#0 tables_init::pli#2 tables_init::pli#1 render_init::li#2 render_init::li#1 render_init::line#4 render_init::line#1 fill::addr#2 fill::addr#0 fill::addr#1 lock_current::playfield_line#0 ]
zp ZP_BYTE:7 [ current_piece_color#66 current_piece_color#74 current_piece_color#75 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: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::y#8 remove_lines::y#1 tables_init::idx#2 tables_init::idx#1 render_init::l#4 render_init::l#1 spawn_current::$3 ]
zp ZP_BYTE:3 [ current_movedown_counter#15 current_movedown_counter#12 current_movedown_counter#10 remove_lines::x#2 remove_lines::x#1 lock_current::l#6 lock_current::l#1 ]
reg byte x [ current_ypos#22 current_ypos#71 ]
zp ZP_BYTE:4 [ current_xpos#63 current_xpos#96 render_playfield::l#2 render_playfield::l#1 play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 remove_lines::full#4 remove_lines::full#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#64 current_piece_gfx#87 current_piece_gfx#88 render_playfield::line#2 render_playfield::line#0 render_playfield::line#1 current_piece#15 current_piece#72 current_piece#73 current_piece#74 current_piece#75 collision::piece_gfx#0 tables_init::pli#2 tables_init::pli#1 render_init::li#2 render_init::li#1 render_init::line#4 render_init::line#1 fill::addr#2 fill::addr#0 fill::addr#1 lock_current::playfield_line#0 ]
zp ZP_BYTE:7 [ current_piece_color#67 current_piece_color#75 current_piece_color#76 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 remove_lines::c#0 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: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 ]
@ -638,16 +609,15 @@ 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#75 current_piece#11 current_piece#13 current_piece#70 render_init::$10 fill::end#0 ]
zp ZP_WORD:12 [ current_piece#23 current_piece#76 current_piece#11 current_piece#13 current_piece#71 render_init::$10 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 y [ remove_lines::r#2 remove_lines::r#3 remove_lines::r#1 ]
reg byte x [ remove_lines::w#6 remove_lines::w#4 remove_lines::w#12 remove_lines::w#11 remove_lines::w#1 remove_lines::w#2 remove_lines::w#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 ]
@ -689,9 +659,6 @@ 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 ]