1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-10-10 20:23:47 +00:00

Added level-based score increase, missing fragments and support for zero-filled DWORD-arrays.

This commit is contained in:
jespergravgaard 2018-12-31 00:05:38 +01:00
parent 40a2a7b1eb
commit e35ce855b0
14 changed files with 3978 additions and 3376 deletions

View File

@ -0,0 +1,14 @@
tay
clc
lda {c1},y
adc {c2},y
sta {c1},y
lda {c1}+1,y
adc {c2}+1,y
sta {c1}+1,y
lda {c1}+2,y
adc {c2}+2,y
sta {c1}+2,y
lda {c1}+3,y
adc {c2}+3,y
sta {c1}+3,y

View File

@ -0,0 +1,9 @@
tay
lda {c2},y
sta {c1},y
lda {c2}+1,y
sta {c1}+1,y
lda {c2}+2,y
sta {c1}+2,y
lda {c2}+3,y
sta {c1}+3,y

View File

@ -0,0 +1,13 @@
clc
lda {c1},x
adc {c2},x
sta {c1},x
lda {c1}+1,x
adc {c2}+1,x
sta {c1}+1,x
lda {c1}+2,x
adc {c2}+2,x
sta {c1}+2,x
lda {c1}+3,x
adc {c2}+3,x
sta {c1}+3,x

View File

@ -0,0 +1,8 @@
lda {c2},x
sta {c1},x
lda {c2}+1,x
sta {c1}+1,x
lda {c2}+2,x
sta {c1}+2,x
lda {c2}+3,x
sta {c1}+3,x

View File

@ -0,0 +1,13 @@
clc
lda {c1},y
adc {c2},y
sta {c1},y
lda {c1}+1,y
adc {c2}+1,y
sta {c1}+1,y
lda {c1}+2,y
adc {c2}+2,y
sta {c1}+2,y
lda {c1}+3,y
adc {c2}+3,y
sta {c1}+3,y

View File

@ -0,0 +1,8 @@
lda {c2},y
sta {c1},y
lda {c2}+1,y
sta {c1}+1,y
lda {c2}+2,y
sta {c1}+2,y
lda {c2}+3,y
sta {c1}+3,y

View File

@ -0,0 +1,14 @@
ldy {z1}
clc
lda {c1},y
adc {c2},y
sta {c1},y
lda {c1}+1,y
adc {c2}+1,y
sta {c1}+1,y
lda {c1}+2,y
adc {c2}+2,y
sta {c1}+2,y
lda {c1}+3,y
adc {c2}+3,y
sta {c1}+3,y

View File

@ -0,0 +1,9 @@
ldy {z1}
lda {c2},y
sta {c1},y
lda {c2}+1,y
sta {c1}+1,y
lda {c2}+2,y
sta {c1}+2,y
lda {c2}+3,y
sta {c1}+3,y

View File

@ -316,6 +316,14 @@ public class Pass4CodeGeneration {
String asmSize = AsmFormat.getAsmConstant(program, new ConstantBinary(new ConstantInteger(2L), Operators.MULTIPLY, arraySize), 99, scopeRef);
asm.addDataFilled(asmName.replace("#", "_").replace("$", "_"), AsmDataNumeric.Type.WORD, asmSize, size, "0");
added.add(asmName);
} else if(SymbolType.isDWord(constantArrayFilled.getElementType())) {
String asmSize = AsmFormat.getAsmConstant(program, new ConstantBinary(new ConstantInteger(4L), Operators.MULTIPLY, arraySize), 99, scopeRef);
asm.addDataFilled(asmName.replace("#", "_").replace("$", "_"), AsmDataNumeric.Type.DWORD, asmSize, size, "0");
added.add(asmName);
} else if(SymbolType.isSDWord(constantArrayFilled.getElementType())) {
String asmSize = AsmFormat.getAsmConstant(program, new ConstantBinary(new ConstantInteger(4L), Operators.MULTIPLY, arraySize), 99, scopeRef);
asm.addDataFilled(asmName.replace("#", "_").replace("$", "_"), AsmDataNumeric.Type.DWORD, asmSize, size, "0");
added.add(asmName);
} else if(constantArrayFilled.getElementType() instanceof SymbolTypePointer) {
String asmSize = AsmFormat.getAsmConstant(program, new ConstantBinary(new ConstantInteger(2L), Operators.MULTIPLY, arraySize), 99, scopeRef);
asm.addDataFilled(asmName.replace("#", "_").replace("$", "_"), AsmDataNumeric.Type.WORD, asmSize, size, "0");

View File

@ -27,8 +27,13 @@ const byte current_movedown_fast = 2;
// Counts up to the next movedown of current piece
byte current_movedown_counter = 0;
// Base Score values for removing 0-4 lines (in BCD)
// These values are added to score_add_bcd for each level gained.
const dword[] SCORE_BASE_BCD = { $0000, $0040, $0100, $0300, $1200 };
// Score values for removing 0-4 lines (in BCD)
dword[] score_add_bcd = { $0000, $0040, $0100, $0300, $1200 };
// These values are updated based on the players level and the base values from SCORE_BASE_BCD
dword[5] score_add_bcd;
// The speed of moving down the piece when soft-drop is not activated
// This array holds the number of frames per move by level (0-29). For all levels 29+ the value is 1.
@ -49,6 +54,12 @@ void play_init() {
// Set initial speed of moving down a tetromino
current_movedown_slow = MOVEDOWN_SLOW_SPEEDS[level];
// Set the initial score add values
for(byte b: 0..4) {
byte b4 = b<<2;
score_add_bcd[b4] = SCORE_BASE_BCD[b4];
}
}
// Move down the current piece
@ -278,5 +289,12 @@ void play_increase_level() {
// If level low nybble hits $a change to $10
level_bcd += 6;
}
// Increase the score values gained
asm { sed }
for(byte b: 0..4) {
byte b4 = b<<2;
score_add_bcd[b4] += SCORE_BASE_BCD[b4];
}
asm { cld }
}

View File

@ -777,12 +777,36 @@ play_increase_level: {
lda #$f
and level_bcd
cmp #$a
bne breturn
bne b3
lda #6
clc
adc level_bcd
sta level_bcd
breturn:
b3:
sed
ldx #0
b4:
txa
asl
asl
tay
clc
lda score_add_bcd,y
adc SCORE_BASE_BCD,y
sta score_add_bcd,y
lda score_add_bcd+1,y
adc SCORE_BASE_BCD+1,y
sta score_add_bcd+1,y
lda score_add_bcd+2,y
adc SCORE_BASE_BCD+2,y
sta score_add_bcd+2,y
lda score_add_bcd+3,y
adc SCORE_BASE_BCD+3,y
sta score_add_bcd+3,y
inx
cpx #5
bne b4
cld
rts
}
play_remove_lines: {
@ -1085,6 +1109,23 @@ play_init: {
sta playfield_lines_idx+PLAYFIELD_LINES
lda MOVEDOWN_SLOW_SPEEDS
sta current_movedown_slow
ldx #0
b2:
txa
asl
asl
tay
lda SCORE_BASE_BCD,y
sta score_add_bcd,y
lda SCORE_BASE_BCD+1,y
sta score_add_bcd+1,y
lda SCORE_BASE_BCD+2,y
sta score_add_bcd+2,y
lda SCORE_BASE_BCD+3,y
sta score_add_bcd+3,y
inx
cpx #5
bne b2
rts
}
sprites_irq_init: {
@ -1412,7 +1453,8 @@ sprites_irq: {
PIECES_CHARS: .byte $64, $65, $a5, $65, $64, $64, $a5
PIECES_START_X: .byte 4, 4, 4, 4, 4, 4, 4
PIECES_START_Y: .byte 1, 1, 1, 1, 1, 0, 1
score_add_bcd: .dword 0, $40, $100, $300, $1200
SCORE_BASE_BCD: .dword 0, $40, $100, $300, $1200
score_add_bcd: .fill 4*5, 0
MOVEDOWN_SLOW_SPEEDS: .byte $30, $2b, $26, $21, $1c, $17, $12, $d, 8, 6, 5, 5, 5, 4, 4, 4, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1
.align $80
screen_lines_1: .fill 2*PLAYFIELD_LINES, 0

View File

@ -518,7 +518,7 @@ play_move_down::@7: scope:[play_move_down] from play_move_down::@21 play_move_d
[246] (byte) current_orientation#29 ← phi( play_move_down::@21/(byte/signed byte/word/signed word/dword/signed dword) 0 play_move_down::@6/(byte) current_orientation#10 )
[246] (byte*) current_piece#20 ← phi( play_move_down::@21/(byte*~) current_piece#80 play_move_down::@6/(byte*) current_piece#16 )
[246] (byte) level_bcd#25 ← phi( play_move_down::@21/(byte) level_bcd#15 play_move_down::@6/(byte) level_bcd#20 )
[246] (byte) current_movedown_slow#30 ← phi( play_move_down::@21/(byte) current_movedown_slow#19 play_move_down::@6/(byte) current_movedown_slow#12 )
[246] (byte) current_movedown_slow#31 ← phi( play_move_down::@21/(byte) current_movedown_slow#19 play_move_down::@6/(byte) current_movedown_slow#12 )
[246] (byte) level#24 ← phi( play_move_down::@21/(byte) level#14 play_move_down::@6/(byte) level#19 )
[246] (dword) score_bcd#20 ← phi( play_move_down::@21/(dword) score_bcd#12 play_move_down::@6/(dword) score_bcd#14 )
[246] (word) lines_bcd#20 ← phi( play_move_down::@21/(word) lines_bcd#13 play_move_down::@6/(word) lines_bcd#15 )
@ -531,7 +531,7 @@ play_move_down::@return: scope:[play_move_down] from play_move_down::@4 play_mo
[247] (byte) current_orientation#14 ← phi( play_move_down::@4/(byte) current_orientation#10 play_move_down::@7/(byte) current_orientation#29 )
[247] (byte*) current_piece#10 ← phi( play_move_down::@4/(byte*) current_piece#16 play_move_down::@7/(byte*) current_piece#20 )
[247] (byte) level_bcd#13 ← phi( play_move_down::@4/(byte) level_bcd#20 play_move_down::@7/(byte) level_bcd#25 )
[247] (byte) current_movedown_slow#17 ← phi( play_move_down::@4/(byte) current_movedown_slow#12 play_move_down::@7/(byte) current_movedown_slow#30 )
[247] (byte) current_movedown_slow#17 ← phi( play_move_down::@4/(byte) current_movedown_slow#12 play_move_down::@7/(byte) current_movedown_slow#31 )
[247] (byte) level#12 ← phi( play_move_down::@4/(byte) level#19 play_move_down::@7/(byte) level#24 )
[247] (dword) score_bcd#10 ← phi( play_move_down::@4/(dword) score_bcd#14 play_move_down::@7/(dword) score_bcd#20 )
[247] (word) lines_bcd#11 ← phi( play_move_down::@4/(word) lines_bcd#15 play_move_down::@7/(word) lines_bcd#20 )
@ -582,7 +582,7 @@ play_update_score::@3: scope:[play_update_score] from play_update_score
[267] (byte~) play_update_score::$2 ← < (word) lines_bcd#15
[268] (byte) play_update_score::lines_before#0 ← (byte~) play_update_score::$2 & (byte/word/signed word/dword/signed dword) 240
[269] (byte~) play_update_score::$4 ← (byte) play_update_score::removed#0 << (byte/signed byte/word/signed word/dword/signed dword) 2
[270] (dword) play_update_score::add_bcd#0 ← *((const dword[]) score_add_bcd#0 + (byte~) play_update_score::$4)
[270] (dword) play_update_score::add_bcd#0 ← *((const dword[5]) score_add_bcd#0 + (byte~) play_update_score::$4)
asm { sed }
[272] (word) lines_bcd#23 ← (word) lines_bcd#15 + (byte) play_update_score::removed#0
[273] (dword) score_bcd#23 ← (dword) score_bcd#14 + (dword) play_update_score::add_bcd#0
@ -596,8 +596,8 @@ play_update_score::@4: scope:[play_update_score] from play_update_score::@3
[279] call play_increase_level
to:play_update_score::@return
play_update_score::@return: scope:[play_update_score] from play_update_score play_update_score::@3 play_update_score::@4
[280] (byte) level_bcd#15 ← phi( play_update_score/(byte) level_bcd#20 play_update_score::@3/(byte) level_bcd#20 play_update_score::@4/(byte) level_bcd#18 )
[280] (byte) current_movedown_slow#19 ← phi( play_update_score/(byte) current_movedown_slow#12 play_update_score::@3/(byte) current_movedown_slow#12 play_update_score::@4/(byte) current_movedown_slow#20 )
[280] (byte) level_bcd#15 ← phi( play_update_score/(byte) level_bcd#20 play_update_score::@3/(byte) level_bcd#20 play_update_score::@4/(byte) level_bcd#55 )
[280] (byte) current_movedown_slow#19 ← phi( play_update_score/(byte) current_movedown_slow#12 play_update_score::@3/(byte) current_movedown_slow#12 play_update_score::@4/(byte) current_movedown_slow#60 )
[280] (byte) level#14 ← phi( play_update_score/(byte) level#19 play_update_score::@3/(byte) level#19 play_update_score::@4/(byte) level#16 )
[280] (dword) score_bcd#12 ← phi( play_update_score/(dword) score_bcd#14 play_update_score::@3/(dword) score_bcd#23 play_update_score::@4/(dword) score_bcd#23 )
[280] (word) lines_bcd#13 ← phi( play_update_score/(word) lines_bcd#15 play_update_score::@3/(word) lines_bcd#23 play_update_score::@4/(word) lines_bcd#23 )
@ -606,492 +606,512 @@ play_update_score::@return: scope:[play_update_score] from play_update_score pl
play_increase_level: scope:[play_increase_level] from play_update_score::@4
[282] (byte) level#16 ← ++ (byte) level#19
[283] if((byte) level#16>(byte/signed byte/word/signed word/dword/signed dword) 29) goto play_increase_level::@2
to:play_increase_level::@4
play_increase_level::@4: scope:[play_increase_level] from play_increase_level
to:play_increase_level::@5
play_increase_level::@5: scope:[play_increase_level] from play_increase_level
[284] (byte) current_movedown_slow#8 ← *((const byte[]) MOVEDOWN_SLOW_SPEEDS#0 + (byte) level#16)
to:play_increase_level::@2
play_increase_level::@2: scope:[play_increase_level] from play_increase_level play_increase_level::@4
[285] (byte) current_movedown_slow#20 ← phi( play_increase_level/(byte/signed byte/word/signed word/dword/signed dword) 1 play_increase_level::@4/(byte) current_movedown_slow#8 )
play_increase_level::@2: scope:[play_increase_level] from play_increase_level play_increase_level::@5
[285] (byte) current_movedown_slow#60 ← phi( play_increase_level/(byte/signed byte/word/signed word/dword/signed dword) 1 play_increase_level::@5/(byte) current_movedown_slow#8 )
[286] (byte) level_bcd#17 ← ++ (byte) level_bcd#20
[287] (byte~) play_increase_level::$1 ← (byte) level_bcd#17 & (byte/signed byte/word/signed word/dword/signed dword) 15
[288] if((byte~) play_increase_level::$1!=(byte/signed byte/word/signed word/dword/signed dword) 10) goto play_increase_level::@return
to:play_increase_level::@6
play_increase_level::@6: scope:[play_increase_level] from play_increase_level::@2
[288] if((byte~) play_increase_level::$1!=(byte/signed byte/word/signed word/dword/signed dword) 10) goto play_increase_level::@3
to:play_increase_level::@7
play_increase_level::@7: scope:[play_increase_level] from play_increase_level::@2
[289] (byte) level_bcd#6 ← (byte) level_bcd#17 + (byte/signed byte/word/signed word/dword/signed dword) 6
to:play_increase_level::@3
play_increase_level::@3: scope:[play_increase_level] from play_increase_level::@2 play_increase_level::@7
[290] (byte) level_bcd#55 ← phi( play_increase_level::@2/(byte) level_bcd#17 play_increase_level::@7/(byte) level_bcd#6 )
asm { sed }
to:play_increase_level::@4
play_increase_level::@4: scope:[play_increase_level] from play_increase_level::@3 play_increase_level::@4
[292] (byte) play_increase_level::b#2 ← phi( play_increase_level::@3/(byte/signed byte/word/signed word/dword/signed dword) 0 play_increase_level::@4/(byte) play_increase_level::b#1 )
[293] (byte) play_increase_level::b4#0 ← (byte) play_increase_level::b#2 << (byte/signed byte/word/signed word/dword/signed dword) 2
[294] *((const dword[5]) score_add_bcd#0 + (byte) play_increase_level::b4#0) ← *((const dword[5]) score_add_bcd#0 + (byte) play_increase_level::b4#0) + *((const dword[]) SCORE_BASE_BCD#0 + (byte) play_increase_level::b4#0)
[295] (byte) play_increase_level::b#1 ← ++ (byte) play_increase_level::b#2
[296] if((byte) play_increase_level::b#1!=(byte/signed byte/word/signed word/dword/signed dword) 5) goto play_increase_level::@4
to:play_increase_level::@8
play_increase_level::@8: scope:[play_increase_level] from play_increase_level::@4
asm { cld }
to:play_increase_level::@return
play_increase_level::@return: scope:[play_increase_level] from play_increase_level::@2 play_increase_level::@6
[290] (byte) level_bcd#18 ← phi( play_increase_level::@2/(byte) level_bcd#17 play_increase_level::@6/(byte) level_bcd#6 )
[291] return
play_increase_level::@return: scope:[play_increase_level] from play_increase_level::@8
[298] return
to:@return
play_remove_lines: scope:[play_remove_lines] from play_move_down::@19
[292] phi()
[299] phi()
to:play_remove_lines::@1
play_remove_lines::@1: scope:[play_remove_lines] from play_remove_lines play_remove_lines::@4
[293] (byte) play_remove_lines::removed#11 ← phi( play_remove_lines/(byte/signed byte/word/signed word/dword/signed dword) 0 play_remove_lines::@4/(byte) play_remove_lines::removed#7 )
[293] (byte) play_remove_lines::y#8 ← phi( play_remove_lines/(byte/signed byte/word/signed word/dword/signed dword) 0 play_remove_lines::@4/(byte) play_remove_lines::y#1 )
[293] (byte) play_remove_lines::w#12 ← phi( play_remove_lines/(const byte) PLAYFIELD_LINES#0*(const byte) PLAYFIELD_COLS#0-(byte/signed byte/word/signed word/dword/signed dword) 1 play_remove_lines::@4/(byte) play_remove_lines::w#11 )
[293] (byte) play_remove_lines::r#3 ← phi( play_remove_lines/(const byte) PLAYFIELD_LINES#0*(const byte) PLAYFIELD_COLS#0-(byte/signed byte/word/signed word/dword/signed dword) 1 play_remove_lines::@4/(byte) play_remove_lines::r#1 )
[300] (byte) play_remove_lines::removed#11 ← phi( play_remove_lines/(byte/signed byte/word/signed word/dword/signed dword) 0 play_remove_lines::@4/(byte) play_remove_lines::removed#7 )
[300] (byte) play_remove_lines::y#8 ← phi( play_remove_lines/(byte/signed byte/word/signed word/dword/signed dword) 0 play_remove_lines::@4/(byte) play_remove_lines::y#1 )
[300] (byte) play_remove_lines::w#12 ← phi( play_remove_lines/(const byte) PLAYFIELD_LINES#0*(const byte) PLAYFIELD_COLS#0-(byte/signed byte/word/signed word/dword/signed dword) 1 play_remove_lines::@4/(byte) play_remove_lines::w#11 )
[300] (byte) play_remove_lines::r#3 ← phi( play_remove_lines/(const byte) PLAYFIELD_LINES#0*(const byte) PLAYFIELD_COLS#0-(byte/signed byte/word/signed word/dword/signed dword) 1 play_remove_lines::@4/(byte) play_remove_lines::r#1 )
to:play_remove_lines::@2
play_remove_lines::@2: scope:[play_remove_lines] from play_remove_lines::@1 play_remove_lines::@3
[294] (byte) play_remove_lines::full#4 ← phi( play_remove_lines::@1/(byte/signed byte/word/signed word/dword/signed dword) 1 play_remove_lines::@3/(byte) play_remove_lines::full#2 )
[294] (byte) play_remove_lines::x#2 ← phi( play_remove_lines::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 play_remove_lines::@3/(byte) play_remove_lines::x#1 )
[294] (byte) play_remove_lines::w#4 ← phi( play_remove_lines::@1/(byte) play_remove_lines::w#12 play_remove_lines::@3/(byte) play_remove_lines::w#1 )
[294] (byte) play_remove_lines::r#2 ← phi( play_remove_lines::@1/(byte) play_remove_lines::r#3 play_remove_lines::@3/(byte) play_remove_lines::r#1 )
[295] (byte) play_remove_lines::c#0 ← *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::r#2)
[296] (byte) play_remove_lines::r#1 ← -- (byte) play_remove_lines::r#2
[297] if((byte) play_remove_lines::c#0!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_remove_lines::@18
[301] (byte) play_remove_lines::full#4 ← phi( play_remove_lines::@1/(byte/signed byte/word/signed word/dword/signed dword) 1 play_remove_lines::@3/(byte) play_remove_lines::full#2 )
[301] (byte) play_remove_lines::x#2 ← phi( play_remove_lines::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 play_remove_lines::@3/(byte) play_remove_lines::x#1 )
[301] (byte) play_remove_lines::w#4 ← phi( play_remove_lines::@1/(byte) play_remove_lines::w#12 play_remove_lines::@3/(byte) play_remove_lines::w#1 )
[301] (byte) play_remove_lines::r#2 ← phi( play_remove_lines::@1/(byte) play_remove_lines::r#3 play_remove_lines::@3/(byte) play_remove_lines::r#1 )
[302] (byte) play_remove_lines::c#0 ← *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::r#2)
[303] (byte) play_remove_lines::r#1 ← -- (byte) play_remove_lines::r#2
[304] if((byte) play_remove_lines::c#0!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_remove_lines::@18
to:play_remove_lines::@3
play_remove_lines::@3: scope:[play_remove_lines] from play_remove_lines::@18 play_remove_lines::@2
[298] (byte) play_remove_lines::full#2 ← phi( play_remove_lines::@18/(byte) play_remove_lines::full#4 play_remove_lines::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[299] *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::w#4) ← (byte) play_remove_lines::c#0
[300] (byte) play_remove_lines::w#1 ← -- (byte) play_remove_lines::w#4
[301] (byte) play_remove_lines::x#1 ← ++ (byte) play_remove_lines::x#2
[302] if((byte) play_remove_lines::x#1!=(const byte) PLAYFIELD_COLS#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto play_remove_lines::@2
[305] (byte) play_remove_lines::full#2 ← phi( play_remove_lines::@18/(byte) play_remove_lines::full#4 play_remove_lines::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[306] *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::w#4) ← (byte) play_remove_lines::c#0
[307] (byte) play_remove_lines::w#1 ← -- (byte) play_remove_lines::w#4
[308] (byte) play_remove_lines::x#1 ← ++ (byte) play_remove_lines::x#2
[309] if((byte) play_remove_lines::x#1!=(const byte) PLAYFIELD_COLS#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto play_remove_lines::@2
to:play_remove_lines::@9
play_remove_lines::@9: scope:[play_remove_lines] from play_remove_lines::@3
[303] if((byte) play_remove_lines::full#2!=(byte/signed byte/word/signed word/dword/signed dword) 1) goto play_remove_lines::@4
[310] if((byte) play_remove_lines::full#2!=(byte/signed byte/word/signed word/dword/signed dword) 1) goto play_remove_lines::@4
to:play_remove_lines::@10
play_remove_lines::@10: scope:[play_remove_lines] from play_remove_lines::@9
[304] (byte) play_remove_lines::w#2 ← (byte) play_remove_lines::w#1 + (const byte) PLAYFIELD_COLS#0
[305] (byte) play_remove_lines::removed#1 ← ++ (byte) play_remove_lines::removed#11
[311] (byte) play_remove_lines::w#2 ← (byte) play_remove_lines::w#1 + (const byte) PLAYFIELD_COLS#0
[312] (byte) play_remove_lines::removed#1 ← ++ (byte) play_remove_lines::removed#11
to:play_remove_lines::@4
play_remove_lines::@4: scope:[play_remove_lines] from play_remove_lines::@10 play_remove_lines::@9
[306] (byte) play_remove_lines::removed#7 ← phi( play_remove_lines::@10/(byte) play_remove_lines::removed#1 play_remove_lines::@9/(byte) play_remove_lines::removed#11 )
[306] (byte) play_remove_lines::w#11 ← phi( play_remove_lines::@10/(byte) play_remove_lines::w#2 play_remove_lines::@9/(byte) play_remove_lines::w#1 )
[307] (byte) play_remove_lines::y#1 ← ++ (byte) play_remove_lines::y#8
[308] if((byte) play_remove_lines::y#1!=(const byte) PLAYFIELD_LINES#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto play_remove_lines::@1
[313] (byte) play_remove_lines::removed#7 ← phi( play_remove_lines::@10/(byte) play_remove_lines::removed#1 play_remove_lines::@9/(byte) play_remove_lines::removed#11 )
[313] (byte) play_remove_lines::w#11 ← phi( play_remove_lines::@10/(byte) play_remove_lines::w#2 play_remove_lines::@9/(byte) play_remove_lines::w#1 )
[314] (byte) play_remove_lines::y#1 ← ++ (byte) play_remove_lines::y#8
[315] if((byte) play_remove_lines::y#1!=(const byte) PLAYFIELD_LINES#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto play_remove_lines::@1
to:play_remove_lines::@5
play_remove_lines::@5: scope:[play_remove_lines] from play_remove_lines::@4 play_remove_lines::@6
[309] (byte) play_remove_lines::w#6 ← phi( play_remove_lines::@4/(byte) play_remove_lines::w#11 play_remove_lines::@6/(byte) play_remove_lines::w#3 )
[310] if((byte) play_remove_lines::w#6!=(byte/word/signed word/dword/signed dword) 255) goto play_remove_lines::@6
[316] (byte) play_remove_lines::w#6 ← phi( play_remove_lines::@4/(byte) play_remove_lines::w#11 play_remove_lines::@6/(byte) play_remove_lines::w#3 )
[317] if((byte) play_remove_lines::w#6!=(byte/word/signed word/dword/signed dword) 255) goto play_remove_lines::@6
to:play_remove_lines::@return
play_remove_lines::@return: scope:[play_remove_lines] from play_remove_lines::@5
[311] return
[318] return
to:@return
play_remove_lines::@6: scope:[play_remove_lines] from play_remove_lines::@5
[312] *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::w#6) ← (byte/signed byte/word/signed word/dword/signed dword) 0
[313] (byte) play_remove_lines::w#3 ← -- (byte) play_remove_lines::w#6
[319] *((const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 + (byte) play_remove_lines::w#6) ← (byte/signed byte/word/signed word/dword/signed dword) 0
[320] (byte) play_remove_lines::w#3 ← -- (byte) play_remove_lines::w#6
to:play_remove_lines::@5
play_remove_lines::@18: scope:[play_remove_lines] from play_remove_lines::@2
[314] phi()
[321] phi()
to:play_remove_lines::@3
play_lock_current: scope:[play_lock_current] from play_move_down::@13
[315] (byte) play_lock_current::ypos2#0 ← (byte) current_ypos#21 << (byte/signed byte/word/signed word/dword/signed dword) 1
[322] (byte) play_lock_current::ypos2#0 ← (byte) current_ypos#21 << (byte/signed byte/word/signed word/dword/signed dword) 1
to:play_lock_current::@1
play_lock_current::@1: scope:[play_lock_current] from play_lock_current play_lock_current::@7
[316] (byte) play_lock_current::l#6 ← phi( play_lock_current/(byte/signed byte/word/signed word/dword/signed dword) 0 play_lock_current::@7/(byte) play_lock_current::l#1 )
[316] (byte) play_lock_current::i#3 ← phi( play_lock_current/(byte/signed byte/word/signed word/dword/signed dword) 0 play_lock_current::@7/(byte~) play_lock_current::i#7 )
[316] (byte) play_lock_current::ypos2#2 ← phi( play_lock_current/(byte) play_lock_current::ypos2#0 play_lock_current::@7/(byte) play_lock_current::ypos2#1 )
[317] (byte*) play_lock_current::playfield_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte) play_lock_current::ypos2#2)
[318] (byte) play_lock_current::col#0 ← (byte) current_xpos#10
[323] (byte) play_lock_current::l#6 ← phi( play_lock_current/(byte/signed byte/word/signed word/dword/signed dword) 0 play_lock_current::@7/(byte) play_lock_current::l#1 )
[323] (byte) play_lock_current::i#3 ← phi( play_lock_current/(byte/signed byte/word/signed word/dword/signed dword) 0 play_lock_current::@7/(byte~) play_lock_current::i#7 )
[323] (byte) play_lock_current::ypos2#2 ← phi( play_lock_current/(byte) play_lock_current::ypos2#0 play_lock_current::@7/(byte) play_lock_current::ypos2#1 )
[324] (byte*) play_lock_current::playfield_line#0 ← *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte) play_lock_current::ypos2#2)
[325] (byte) play_lock_current::col#0 ← (byte) current_xpos#10
to:play_lock_current::@2
play_lock_current::@2: scope:[play_lock_current] from play_lock_current::@1 play_lock_current::@8
[319] (byte) play_lock_current::c#2 ← phi( play_lock_current::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 play_lock_current::@8/(byte) play_lock_current::c#1 )
[319] (byte) play_lock_current::col#2 ← phi( play_lock_current::@1/(byte) play_lock_current::col#0 play_lock_current::@8/(byte) play_lock_current::col#1 )
[319] (byte) play_lock_current::i#2 ← phi( play_lock_current::@1/(byte) play_lock_current::i#3 play_lock_current::@8/(byte~) play_lock_current::i#9 )
[320] (byte) play_lock_current::i#1 ← ++ (byte) play_lock_current::i#2
[321] if(*((byte*) current_piece_gfx#20 + (byte) play_lock_current::i#2)==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_lock_current::@3
[326] (byte) play_lock_current::c#2 ← phi( play_lock_current::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 play_lock_current::@8/(byte) play_lock_current::c#1 )
[326] (byte) play_lock_current::col#2 ← phi( play_lock_current::@1/(byte) play_lock_current::col#0 play_lock_current::@8/(byte) play_lock_current::col#1 )
[326] (byte) play_lock_current::i#2 ← phi( play_lock_current::@1/(byte) play_lock_current::i#3 play_lock_current::@8/(byte~) play_lock_current::i#9 )
[327] (byte) play_lock_current::i#1 ← ++ (byte) play_lock_current::i#2
[328] if(*((byte*) current_piece_gfx#20 + (byte) play_lock_current::i#2)==(byte/signed byte/word/signed word/dword/signed dword) 0) goto play_lock_current::@3
to:play_lock_current::@4
play_lock_current::@4: scope:[play_lock_current] from play_lock_current::@2
[322] *((byte*) play_lock_current::playfield_line#0 + (byte) play_lock_current::col#2) ← (byte) current_piece_char#15
[329] *((byte*) play_lock_current::playfield_line#0 + (byte) play_lock_current::col#2) ← (byte) current_piece_char#15
to:play_lock_current::@3
play_lock_current::@3: scope:[play_lock_current] from play_lock_current::@2 play_lock_current::@4
[323] (byte) play_lock_current::col#1 ← ++ (byte) play_lock_current::col#2
[324] (byte) play_lock_current::c#1 ← ++ (byte) play_lock_current::c#2
[325] if((byte) play_lock_current::c#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto play_lock_current::@8
[330] (byte) play_lock_current::col#1 ← ++ (byte) play_lock_current::col#2
[331] (byte) play_lock_current::c#1 ← ++ (byte) play_lock_current::c#2
[332] if((byte) play_lock_current::c#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto play_lock_current::@8
to:play_lock_current::@5
play_lock_current::@5: scope:[play_lock_current] from play_lock_current::@3
[326] (byte) play_lock_current::ypos2#1 ← (byte) play_lock_current::ypos2#2 + (byte/signed byte/word/signed word/dword/signed dword) 2
[327] (byte) play_lock_current::l#1 ← ++ (byte) play_lock_current::l#6
[328] if((byte) play_lock_current::l#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto play_lock_current::@7
[333] (byte) play_lock_current::ypos2#1 ← (byte) play_lock_current::ypos2#2 + (byte/signed byte/word/signed word/dword/signed dword) 2
[334] (byte) play_lock_current::l#1 ← ++ (byte) play_lock_current::l#6
[335] if((byte) play_lock_current::l#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto play_lock_current::@7
to:play_lock_current::@return
play_lock_current::@return: scope:[play_lock_current] from play_lock_current::@5
[329] return
[336] return
to:@return
play_lock_current::@7: scope:[play_lock_current] from play_lock_current::@5
[330] (byte~) play_lock_current::i#7 ← (byte) play_lock_current::i#1
[337] (byte~) play_lock_current::i#7 ← (byte) play_lock_current::i#1
to:play_lock_current::@1
play_lock_current::@8: scope:[play_lock_current] from play_lock_current::@3
[331] (byte~) play_lock_current::i#9 ← (byte) play_lock_current::i#1
[338] (byte~) play_lock_current::i#9 ← (byte) play_lock_current::i#1
to:play_lock_current::@2
keyboard_event_pressed: scope:[keyboard_event_pressed] from keyboard_event_scan::@10 keyboard_event_scan::@11 keyboard_event_scan::@20 keyboard_event_scan::@9 play_move_down::@1
[332] (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 )
[333] (byte~) keyboard_event_pressed::$0 ← (byte) keyboard_event_pressed::keycode#5 >> (byte/signed byte/word/signed word/dword/signed dword) 3
[334] (byte) keyboard_event_pressed::row_bits#0 ← *((const byte[8]) keyboard_scan_values#0 + (byte~) keyboard_event_pressed::$0)
[335] (byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#5 & (byte/signed byte/word/signed word/dword/signed dword) 7
[336] (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)
[339] (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 )
[340] (byte~) keyboard_event_pressed::$0 ← (byte) keyboard_event_pressed::keycode#5 >> (byte/signed byte/word/signed word/dword/signed dword) 3
[341] (byte) keyboard_event_pressed::row_bits#0 ← *((const byte[8]) keyboard_scan_values#0 + (byte~) keyboard_event_pressed::$0)
[342] (byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#5 & (byte/signed byte/word/signed word/dword/signed dword) 7
[343] (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
[337] return
[344] return
to:@return
keyboard_event_get: scope:[keyboard_event_get] from main::@24
[338] if((byte) keyboard_events_size#13==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_get::@return
[345] 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
[339] (byte) keyboard_events_size#4 ← -- (byte) keyboard_events_size#13
[340] (byte) keyboard_event_get::return#1 ← *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#4)
[346] (byte) keyboard_events_size#4 ← -- (byte) keyboard_events_size#13
[347] (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
[341] (byte) keyboard_events_size#16 ← phi( keyboard_event_get/(byte) keyboard_events_size#13 keyboard_event_get::@3/(byte) keyboard_events_size#4 )
[341] (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 )
[342] return
[348] (byte) keyboard_events_size#16 ← phi( keyboard_event_get/(byte) keyboard_events_size#13 keyboard_event_get::@3/(byte) keyboard_events_size#4 )
[348] (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 )
[349] return
to:@return
keyboard_event_scan: scope:[keyboard_event_scan] from main::@23
[343] phi()
[350] phi()
to:keyboard_event_scan::@1
keyboard_event_scan::@1: scope:[keyboard_event_scan] from keyboard_event_scan keyboard_event_scan::@3
[344] (byte) keyboard_events_size#29 ← phi( keyboard_event_scan/(byte) keyboard_events_size#19 keyboard_event_scan::@3/(byte) keyboard_events_size#13 )
[344] (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 )
[344] (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 )
[345] (byte) keyboard_matrix_read::rowid#0 ← (byte) keyboard_event_scan::row#2
[346] call keyboard_matrix_read
[347] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0
[351] (byte) keyboard_events_size#29 ← phi( keyboard_event_scan/(byte) keyboard_events_size#19 keyboard_event_scan::@3/(byte) keyboard_events_size#13 )
[351] (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 )
[351] (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 )
[352] (byte) keyboard_matrix_read::rowid#0 ← (byte) keyboard_event_scan::row#2
[353] call keyboard_matrix_read
[354] (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
[348] (byte) keyboard_event_scan::row_scan#0 ← (byte) keyboard_matrix_read::return#2
[349] 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
[355] (byte) keyboard_event_scan::row_scan#0 ← (byte) keyboard_matrix_read::return#2
[356] 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
[350] (byte) keyboard_event_scan::keycode#1 ← (byte) keyboard_event_scan::keycode#11 + (byte/signed byte/word/signed word/dword/signed dword) 8
[357] (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
[351] (byte) keyboard_events_size#13 ← phi( keyboard_event_scan::@13/(byte) keyboard_events_size#29 keyboard_event_scan::@19/(byte) keyboard_events_size#30 )
[351] (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 )
[352] (byte) keyboard_event_scan::row#1 ← ++ (byte) keyboard_event_scan::row#2
[353] if((byte) keyboard_event_scan::row#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto keyboard_event_scan::@1
[358] (byte) keyboard_events_size#13 ← phi( keyboard_event_scan::@13/(byte) keyboard_events_size#29 keyboard_event_scan::@19/(byte) keyboard_events_size#30 )
[358] (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 )
[359] (byte) keyboard_event_scan::row#1 ← ++ (byte) keyboard_event_scan::row#2
[360] 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
[354] phi()
[355] call keyboard_event_pressed
[356] (byte) keyboard_event_pressed::return#0 ← (byte) keyboard_event_pressed::return#11
[361] phi()
[362] call keyboard_event_pressed
[363] (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
[357] (byte~) keyboard_event_scan::$14 ← (byte) keyboard_event_pressed::return#0
[358] if((byte~) keyboard_event_scan::$14==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@9
[364] (byte~) keyboard_event_scan::$14 ← (byte) keyboard_event_pressed::return#0
[365] 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
[359] phi()
[366] phi()
to:keyboard_event_scan::@9
keyboard_event_scan::@9: scope:[keyboard_event_scan] from keyboard_event_scan::@21 keyboard_event_scan::@26
[360] (byte) keyboard_modifiers#11 ← phi( keyboard_event_scan::@21/(byte/signed byte/word/signed word/dword/signed dword) 0|(const byte) KEY_MODIFIER_LSHIFT#0 keyboard_event_scan::@26/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[361] call keyboard_event_pressed
[362] (byte) keyboard_event_pressed::return#1 ← (byte) keyboard_event_pressed::return#11
[367] (byte) keyboard_modifiers#11 ← phi( keyboard_event_scan::@21/(byte/signed byte/word/signed word/dword/signed dword) 0|(const byte) KEY_MODIFIER_LSHIFT#0 keyboard_event_scan::@26/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[368] call keyboard_event_pressed
[369] (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
[363] (byte~) keyboard_event_scan::$18 ← (byte) keyboard_event_pressed::return#1
[364] if((byte~) keyboard_event_scan::$18==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@10
[370] (byte~) keyboard_event_scan::$18 ← (byte) keyboard_event_pressed::return#1
[371] 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
[365] (byte) keyboard_modifiers#3 ← (byte) keyboard_modifiers#11 | (const byte) KEY_MODIFIER_RSHIFT#0
[372] (byte) keyboard_modifiers#3 ← (byte) keyboard_modifiers#11 | (const byte) KEY_MODIFIER_RSHIFT#0
to:keyboard_event_scan::@10
keyboard_event_scan::@10: scope:[keyboard_event_scan] from keyboard_event_scan::@22 keyboard_event_scan::@27
[366] (byte) keyboard_modifiers#12 ← phi( keyboard_event_scan::@22/(byte) keyboard_modifiers#3 keyboard_event_scan::@27/(byte) keyboard_modifiers#11 )
[367] call keyboard_event_pressed
[368] (byte) keyboard_event_pressed::return#2 ← (byte) keyboard_event_pressed::return#11
[373] (byte) keyboard_modifiers#12 ← phi( keyboard_event_scan::@22/(byte) keyboard_modifiers#3 keyboard_event_scan::@27/(byte) keyboard_modifiers#11 )
[374] call keyboard_event_pressed
[375] (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
[369] (byte~) keyboard_event_scan::$22 ← (byte) keyboard_event_pressed::return#2
[370] if((byte~) keyboard_event_scan::$22==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@11
[376] (byte~) keyboard_event_scan::$22 ← (byte) keyboard_event_pressed::return#2
[377] 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
[371] (byte) keyboard_modifiers#4 ← (byte) keyboard_modifiers#12 | (const byte) KEY_MODIFIER_CTRL#0
[378] (byte) keyboard_modifiers#4 ← (byte) keyboard_modifiers#12 | (const byte) KEY_MODIFIER_CTRL#0
to:keyboard_event_scan::@11
keyboard_event_scan::@11: scope:[keyboard_event_scan] from keyboard_event_scan::@23 keyboard_event_scan::@28
[372] (byte) keyboard_modifiers#13 ← phi( keyboard_event_scan::@23/(byte) keyboard_modifiers#4 keyboard_event_scan::@28/(byte) keyboard_modifiers#12 )
[373] call keyboard_event_pressed
[374] (byte) keyboard_event_pressed::return#10 ← (byte) keyboard_event_pressed::return#11
[379] (byte) keyboard_modifiers#13 ← phi( keyboard_event_scan::@23/(byte) keyboard_modifiers#4 keyboard_event_scan::@28/(byte) keyboard_modifiers#12 )
[380] call keyboard_event_pressed
[381] (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
[375] (byte~) keyboard_event_scan::$26 ← (byte) keyboard_event_pressed::return#10
[376] if((byte~) keyboard_event_scan::$26==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@return
[382] (byte~) keyboard_event_scan::$26 ← (byte) keyboard_event_pressed::return#10
[383] 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
[377] (byte) keyboard_modifiers#5 ← (byte) keyboard_modifiers#13 | (const byte) KEY_MODIFIER_COMMODORE#0
[384] (byte) keyboard_modifiers#5 ← (byte) keyboard_modifiers#13 | (const byte) KEY_MODIFIER_COMMODORE#0
to:keyboard_event_scan::@return
keyboard_event_scan::@return: scope:[keyboard_event_scan] from keyboard_event_scan::@24 keyboard_event_scan::@29
[378] return
[385] return
to:@return
keyboard_event_scan::@4: scope:[keyboard_event_scan] from keyboard_event_scan::@25 keyboard_event_scan::@5
[379] (byte) keyboard_events_size#10 ← phi( keyboard_event_scan::@25/(byte) keyboard_events_size#29 keyboard_event_scan::@5/(byte) keyboard_events_size#30 )
[379] (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 )
[379] (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 )
[380] (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)
[381] (byte~) keyboard_event_scan::$4 ← (byte~) keyboard_event_scan::$3 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte) keyboard_event_scan::col#2)
[382] if((byte~) keyboard_event_scan::$4==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@5
[386] (byte) keyboard_events_size#10 ← phi( keyboard_event_scan::@25/(byte) keyboard_events_size#29 keyboard_event_scan::@5/(byte) keyboard_events_size#30 )
[386] (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 )
[386] (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 )
[387] (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)
[388] (byte~) keyboard_event_scan::$4 ← (byte~) keyboard_event_scan::$3 & *((const byte[8]) keyboard_matrix_col_bitmask#0 + (byte) keyboard_event_scan::col#2)
[389] 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
[383] if((byte) keyboard_events_size#10==(byte/signed byte/word/signed word/dword/signed dword) 8) goto keyboard_event_scan::@5
[390] 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
[384] (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)
[385] if((byte) keyboard_event_scan::event_type#0==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@7
[391] (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)
[392] 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
[386] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte) keyboard_event_scan::keycode#10
[387] (byte) keyboard_events_size#2 ← ++ (byte) keyboard_events_size#10
[393] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte) keyboard_event_scan::keycode#10
[394] (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
[388] (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 )
[389] (byte) keyboard_event_scan::keycode#15 ← ++ (byte) keyboard_event_scan::keycode#10
[390] (byte) keyboard_event_scan::col#1 ← ++ (byte) keyboard_event_scan::col#2
[391] if((byte) keyboard_event_scan::col#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto keyboard_event_scan::@4
[395] (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 )
[396] (byte) keyboard_event_scan::keycode#15 ← ++ (byte) keyboard_event_scan::keycode#10
[397] (byte) keyboard_event_scan::col#1 ← ++ (byte) keyboard_event_scan::col#2
[398] 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
[392] *((const byte[8]) keyboard_scan_values#0 + (byte) keyboard_event_scan::row#2) ← (byte) keyboard_event_scan::row_scan#0
[399] *((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
[393] (byte/word/dword~) keyboard_event_scan::$11 ← (byte) keyboard_event_scan::keycode#10 | (byte/signed byte/word/signed word/dword/signed dword) 64
[394] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte/word/dword~) keyboard_event_scan::$11
[395] (byte) keyboard_events_size#1 ← ++ (byte) keyboard_events_size#10
[400] (byte/word/dword~) keyboard_event_scan::$11 ← (byte) keyboard_event_scan::keycode#10 | (byte/signed byte/word/signed word/dword/signed dword) 64
[401] *((const byte[8]) keyboard_events#0 + (byte) keyboard_events_size#10) ← (byte/word/dword~) keyboard_event_scan::$11
[402] (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
[396] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#0)
[397] (byte) keyboard_matrix_read::return#0 ← ~ *((const byte*) CIA1_PORT_B#0)
[403] *((const byte*) CIA1_PORT_A#0) ← *((const byte[8]) keyboard_matrix_row_bitmask#0 + (byte) keyboard_matrix_read::rowid#0)
[404] (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
[398] return
[405] return
to:@return
render_show: scope:[render_show] from main::@6
[399] if((byte) render_screen_show#16==(byte/signed byte/word/signed word/dword/signed dword) 0) goto render_show::toD0181
[406] if((byte) render_screen_show#16==(byte/signed byte/word/signed word/dword/signed dword) 0) goto render_show::toD0181
to:render_show::toD0182
render_show::toD0182: scope:[render_show] from render_show
[400] phi()
[407] phi()
to:render_show::@2
render_show::@2: scope:[render_show] from render_show::toD0181 render_show::toD0182
[401] (byte) render_show::d018val#3 ← phi( render_show::toD0181/(const byte) render_show::toD0181_return#0 render_show::toD0182/(const byte) render_show::toD0182_return#0 )
[402] *((const byte*) D018#0) ← (byte) render_show::d018val#3
[403] (byte) render_screen_showing#1 ← (byte) render_screen_show#16
[408] (byte) render_show::d018val#3 ← phi( render_show::toD0181/(const byte) render_show::toD0181_return#0 render_show::toD0182/(const byte) render_show::toD0182_return#0 )
[409] *((const byte*) D018#0) ← (byte) render_show::d018val#3
[410] (byte) render_screen_showing#1 ← (byte) render_screen_show#16
to:render_show::@return
render_show::@return: scope:[render_show] from render_show::@2
[404] return
[411] return
to:@return
render_show::toD0181: scope:[render_show] from render_show
[405] phi()
[412] phi()
to:render_show::@2
play_init: scope:[play_init] from main::@18
[406] phi()
[413] phi()
to:play_init::@1
play_init::@1: scope:[play_init] from play_init play_init::@1
[407] (byte) play_init::idx#2 ← phi( play_init/(byte/signed byte/word/signed word/dword/signed dword) 0 play_init::@1/(byte) play_init::idx#1 )
[407] (byte*) play_init::pli#2 ← phi( play_init/(const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 play_init::@1/(byte*) play_init::pli#1 )
[407] (byte) play_init::j#2 ← phi( play_init/(byte/signed byte/word/signed word/dword/signed dword) 0 play_init::@1/(byte) play_init::j#1 )
[408] (byte~) play_init::$1 ← (byte) play_init::j#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
[409] *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte~) play_init::$1) ← (byte*) play_init::pli#2
[410] *((const byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx#0 + (byte) play_init::j#2) ← (byte) play_init::idx#2
[411] (byte*) play_init::pli#1 ← (byte*) play_init::pli#2 + (const byte) PLAYFIELD_COLS#0
[412] (byte) play_init::idx#1 ← (byte) play_init::idx#2 + (const byte) PLAYFIELD_COLS#0
[413] (byte) play_init::j#1 ← ++ (byte) play_init::j#2
[414] if((byte) play_init::j#1!=(const byte) PLAYFIELD_LINES#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto play_init::@1
[414] (byte) play_init::idx#2 ← phi( play_init/(byte/signed byte/word/signed word/dword/signed dword) 0 play_init::@1/(byte) play_init::idx#1 )
[414] (byte*) play_init::pli#2 ← phi( play_init/(const byte[PLAYFIELD_LINES#0*PLAYFIELD_COLS#0]) playfield#0 play_init::@1/(byte*) play_init::pli#1 )
[414] (byte) play_init::j#2 ← phi( play_init/(byte/signed byte/word/signed word/dword/signed dword) 0 play_init::@1/(byte) play_init::j#1 )
[415] (byte~) play_init::$1 ← (byte) play_init::j#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
[416] *((const byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte~) play_init::$1) ← (byte*) play_init::pli#2
[417] *((const byte[PLAYFIELD_LINES#0+1]) playfield_lines_idx#0 + (byte) play_init::j#2) ← (byte) play_init::idx#2
[418] (byte*) play_init::pli#1 ← (byte*) play_init::pli#2 + (const byte) PLAYFIELD_COLS#0
[419] (byte) play_init::idx#1 ← (byte) play_init::idx#2 + (const byte) PLAYFIELD_COLS#0
[420] (byte) play_init::j#1 ← ++ (byte) play_init::j#2
[421] if((byte) play_init::j#1!=(const byte) PLAYFIELD_LINES#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto play_init::@1
to:play_init::@3
play_init::@3: scope:[play_init] from play_init::@1
[422] *((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
[423] (byte) current_movedown_slow#1 ← *((const byte[]) MOVEDOWN_SLOW_SPEEDS#0)
to:play_init::@2
play_init::@2: scope:[play_init] from play_init::@1
[415] *((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
[416] (byte) current_movedown_slow#1 ← *((const byte[]) MOVEDOWN_SLOW_SPEEDS#0)
play_init::@2: scope:[play_init] from play_init::@2 play_init::@3
[424] (byte) play_init::b#2 ← phi( play_init::@2/(byte) play_init::b#1 play_init::@3/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[425] (byte) play_init::b4#0 ← (byte) play_init::b#2 << (byte/signed byte/word/signed word/dword/signed dword) 2
[426] *((const dword[5]) score_add_bcd#0 + (byte) play_init::b4#0) ← *((const dword[]) SCORE_BASE_BCD#0 + (byte) play_init::b4#0)
[427] (byte) play_init::b#1 ← ++ (byte) play_init::b#2
[428] if((byte) play_init::b#1!=(byte/signed byte/word/signed word/dword/signed dword) 5) goto play_init::@2
to:play_init::@return
play_init::@return: scope:[play_init] from play_init::@2
[417] return
[429] return
to:@return
sprites_irq_init: scope:[sprites_irq_init] from main::@17
asm { sei }
[419] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0
[431] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0
asm { ldaCIA1_INTERRUPT }
[421] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0
[422] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0
[423] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0
[424] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte/signed byte/word/signed word/dword/signed dword) 127
[425] *((const byte*) RASTER#0) ← (const byte) IRQ_RASTER_FIRST#0
[426] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0
[427] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_CLOBBER)(void()) sprites_irq()
[433] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0
[434] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0
[435] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0
[436] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte/signed byte/word/signed word/dword/signed dword) 127
[437] *((const byte*) RASTER#0) ← (const byte) IRQ_RASTER_FIRST#0
[438] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0
[439] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_CLOBBER)(void()) sprites_irq()
asm { cli }
to:sprites_irq_init::@return
sprites_irq_init::@return: scope:[sprites_irq_init] from sprites_irq_init
[429] return
to:@return
sprites_init: scope:[sprites_init] from main::@16
[430] *((const byte*) SPRITES_ENABLE#0) ← (byte/signed byte/word/signed word/dword/signed dword) 15
[431] *((const byte*) SPRITES_MC#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
[432] *((const byte*) SPRITES_EXPAND_Y#0) ← *((const byte*) SPRITES_MC#0)
[433] *((const byte*) SPRITES_EXPAND_X#0) ← *((const byte*) SPRITES_EXPAND_Y#0)
to:sprites_init::@1
sprites_init::@1: scope:[sprites_init] from sprites_init sprites_init::@1
[434] (byte) sprites_init::xpos#2 ← phi( sprites_init/(byte/signed byte/word/signed word/dword/signed dword) 24+(byte/signed byte/word/signed word/dword/signed dword) 15*(byte/signed byte/word/signed word/dword/signed dword) 8 sprites_init::@1/(byte) sprites_init::xpos#1 )
[434] (byte) sprites_init::s#2 ← phi( sprites_init/(byte/signed byte/word/signed word/dword/signed dword) 0 sprites_init::@1/(byte) sprites_init::s#1 )
[435] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
[436] *((const byte*) SPRITES_XPOS#0 + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2
[437] *((const byte*) SPRITES_COLS#0 + (byte) sprites_init::s#2) ← (const byte) BLACK#0
[438] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte/signed byte/word/signed word/dword/signed dword) 24
[439] (byte) sprites_init::s#1 ← ++ (byte) sprites_init::s#2
[440] if((byte) sprites_init::s#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto sprites_init::@1
to:sprites_init::@return
sprites_init::@return: scope:[sprites_init] from sprites_init::@1
[441] return
to:@return
sprites_init: scope:[sprites_init] from main::@16
[442] *((const byte*) SPRITES_ENABLE#0) ← (byte/signed byte/word/signed word/dword/signed dword) 15
[443] *((const byte*) SPRITES_MC#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
[444] *((const byte*) SPRITES_EXPAND_Y#0) ← *((const byte*) SPRITES_MC#0)
[445] *((const byte*) SPRITES_EXPAND_X#0) ← *((const byte*) SPRITES_EXPAND_Y#0)
to:sprites_init::@1
sprites_init::@1: scope:[sprites_init] from sprites_init sprites_init::@1
[446] (byte) sprites_init::xpos#2 ← phi( sprites_init/(byte/signed byte/word/signed word/dword/signed dword) 24+(byte/signed byte/word/signed word/dword/signed dword) 15*(byte/signed byte/word/signed word/dword/signed dword) 8 sprites_init::@1/(byte) sprites_init::xpos#1 )
[446] (byte) sprites_init::s#2 ← phi( sprites_init/(byte/signed byte/word/signed word/dword/signed dword) 0 sprites_init::@1/(byte) sprites_init::s#1 )
[447] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
[448] *((const byte*) SPRITES_XPOS#0 + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2
[449] *((const byte*) SPRITES_COLS#0 + (byte) sprites_init::s#2) ← (const byte) BLACK#0
[450] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte/signed byte/word/signed word/dword/signed dword) 24
[451] (byte) sprites_init::s#1 ← ++ (byte) sprites_init::s#2
[452] if((byte) sprites_init::s#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto sprites_init::@1
to:sprites_init::@return
sprites_init::@return: scope:[sprites_init] from sprites_init::@1
[453] return
to:@return
render_init: scope:[render_init] from main::@15
[442] phi()
[454] phi()
to:render_init::vicSelectGfxBank1
render_init::vicSelectGfxBank1: scope:[render_init] from render_init
[443] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte/signed byte/word/signed word/dword/signed dword) 3
[455] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte/signed byte/word/signed word/dword/signed dword) 3
to:render_init::vicSelectGfxBank1_toDd001
render_init::vicSelectGfxBank1_toDd001: scope:[render_init] from render_init::vicSelectGfxBank1
[444] phi()
[456] phi()
to:render_init::vicSelectGfxBank1_@1
render_init::vicSelectGfxBank1_@1: scope:[render_init] from render_init::vicSelectGfxBank1_toDd001
[445] *((const byte*) CIA2_PORT_A#0) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0
[457] *((const byte*) CIA2_PORT_A#0) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0
to:render_init::@3
render_init::@3: scope:[render_init] from render_init::vicSelectGfxBank1_@1
[446] *((const byte*) D011#0) ← (const byte) VIC_ECM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte/signed byte/word/signed word/dword/signed dword) 3
[447] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0
[448] *((const byte*) BGCOL1#0) ← (const byte) BLACK#0
[449] *((const byte*) BGCOL2#0) ← (const byte) BLUE#0
[450] *((const byte*) BGCOL3#0) ← (const byte) CYAN#0
[451] *((const byte*) BGCOL4#0) ← (const byte) GREY#0
[452] call render_screen_original
[458] *((const byte*) D011#0) ← (const byte) VIC_ECM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte/signed byte/word/signed word/dword/signed dword) 3
[459] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0
[460] *((const byte*) BGCOL1#0) ← (const byte) BLACK#0
[461] *((const byte*) BGCOL2#0) ← (const byte) BLUE#0
[462] *((const byte*) BGCOL3#0) ← (const byte) CYAN#0
[463] *((const byte*) BGCOL4#0) ← (const byte) GREY#0
[464] call render_screen_original
to:render_init::@4
render_init::@4: scope:[render_init] from render_init::@3
[453] phi()
[454] call render_screen_original
[465] phi()
[466] call render_screen_original
to:render_init::@1
render_init::@1: scope:[render_init] from render_init::@1 render_init::@4
[455] (byte*) render_init::li_2#2 ← phi( render_init::@1/(byte*) render_init::li_2#1 render_init::@4/(const byte*) PLAYFIELD_SCREEN_2#0+(byte/signed byte/word/signed word/dword/signed dword) 2*(byte/signed byte/word/signed word/dword/signed dword) 40+(byte/signed byte/word/signed word/dword/signed dword) 16 )
[455] (byte*) render_init::li_1#2 ← phi( render_init::@1/(byte*) render_init::li_1#1 render_init::@4/(const byte*) PLAYFIELD_SCREEN_1#0+(byte/signed byte/word/signed word/dword/signed dword) 2*(byte/signed byte/word/signed word/dword/signed dword) 40+(byte/signed byte/word/signed word/dword/signed dword) 16 )
[455] (byte) render_init::i#2 ← phi( render_init::@1/(byte) render_init::i#1 render_init::@4/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[456] (byte~) render_init::$13 ← (byte) render_init::i#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
[457] *((const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_init::$13) ← (byte*) render_init::li_1#2
[458] (byte~) render_init::$14 ← (byte) render_init::i#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
[459] *((const byte*[PLAYFIELD_LINES#0]) screen_lines_2#0 + (byte~) render_init::$14) ← (byte*) render_init::li_2#2
[460] (byte*) render_init::li_1#1 ← (byte*) render_init::li_1#2 + (byte/signed byte/word/signed word/dword/signed dword) 40
[461] (byte*) render_init::li_2#1 ← (byte*) render_init::li_2#2 + (byte/signed byte/word/signed word/dword/signed dword) 40
[462] (byte) render_init::i#1 ← ++ (byte) render_init::i#2
[463] if((byte) render_init::i#1!=(const byte) PLAYFIELD_LINES#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto render_init::@1
[467] (byte*) render_init::li_2#2 ← phi( render_init::@1/(byte*) render_init::li_2#1 render_init::@4/(const byte*) PLAYFIELD_SCREEN_2#0+(byte/signed byte/word/signed word/dword/signed dword) 2*(byte/signed byte/word/signed word/dword/signed dword) 40+(byte/signed byte/word/signed word/dword/signed dword) 16 )
[467] (byte*) render_init::li_1#2 ← phi( render_init::@1/(byte*) render_init::li_1#1 render_init::@4/(const byte*) PLAYFIELD_SCREEN_1#0+(byte/signed byte/word/signed word/dword/signed dword) 2*(byte/signed byte/word/signed word/dword/signed dword) 40+(byte/signed byte/word/signed word/dword/signed dword) 16 )
[467] (byte) render_init::i#2 ← phi( render_init::@1/(byte) render_init::i#1 render_init::@4/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[468] (byte~) render_init::$13 ← (byte) render_init::i#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
[469] *((const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_init::$13) ← (byte*) render_init::li_1#2
[470] (byte~) render_init::$14 ← (byte) render_init::i#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
[471] *((const byte*[PLAYFIELD_LINES#0]) screen_lines_2#0 + (byte~) render_init::$14) ← (byte*) render_init::li_2#2
[472] (byte*) render_init::li_1#1 ← (byte*) render_init::li_1#2 + (byte/signed byte/word/signed word/dword/signed dword) 40
[473] (byte*) render_init::li_2#1 ← (byte*) render_init::li_2#2 + (byte/signed byte/word/signed word/dword/signed dword) 40
[474] (byte) render_init::i#1 ← ++ (byte) render_init::i#2
[475] if((byte) render_init::i#1!=(const byte) PLAYFIELD_LINES#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto render_init::@1
to:render_init::@return
render_init::@return: scope:[render_init] from render_init::@1
[464] return
[476] return
to:@return
render_screen_original: scope:[render_screen_original] from render_init::@3 render_init::@4
[465] (byte*) render_screen_original::screen#9 ← phi( render_init::@3/(const byte*) PLAYFIELD_SCREEN_1#0 render_init::@4/(const byte*) PLAYFIELD_SCREEN_2#0 )
[477] (byte*) render_screen_original::screen#9 ← phi( render_init::@3/(const byte*) PLAYFIELD_SCREEN_1#0 render_init::@4/(const byte*) PLAYFIELD_SCREEN_2#0 )
to:render_screen_original::@1
render_screen_original::@1: scope:[render_screen_original] from render_screen_original render_screen_original::@7
[466] (byte) render_screen_original::y#6 ← phi( render_screen_original/(byte/signed byte/word/signed word/dword/signed dword) 0 render_screen_original::@7/(byte) render_screen_original::y#1 )
[466] (byte*) render_screen_original::ocols#4 ← phi( render_screen_original/(const byte*) PLAYFIELD_COLORS_ORIGINAL#0+(byte/signed byte/word/signed word/dword/signed dword) 32*(byte/signed byte/word/signed word/dword/signed dword) 2 render_screen_original::@7/(byte*) render_screen_original::ocols#1 )
[466] (byte*) render_screen_original::oscr#4 ← phi( render_screen_original/(const byte*) PLAYFIELD_SCREEN_ORIGINAL#0+(byte/signed byte/word/signed word/dword/signed dword) 32*(byte/signed byte/word/signed word/dword/signed dword) 2 render_screen_original::@7/(byte*) render_screen_original::oscr#1 )
[466] (byte*) render_screen_original::cols#7 ← phi( render_screen_original/(const byte*) COLS#0 render_screen_original::@7/(byte*) render_screen_original::cols#3 )
[466] (byte*) render_screen_original::screen#8 ← phi( render_screen_original/(byte*) render_screen_original::screen#9 render_screen_original::@7/(byte*) render_screen_original::screen#10 )
[478] (byte) render_screen_original::y#6 ← phi( render_screen_original/(byte/signed byte/word/signed word/dword/signed dword) 0 render_screen_original::@7/(byte) render_screen_original::y#1 )
[478] (byte*) render_screen_original::ocols#4 ← phi( render_screen_original/(const byte*) PLAYFIELD_COLORS_ORIGINAL#0+(byte/signed byte/word/signed word/dword/signed dword) 32*(byte/signed byte/word/signed word/dword/signed dword) 2 render_screen_original::@7/(byte*) render_screen_original::ocols#1 )
[478] (byte*) render_screen_original::oscr#4 ← phi( render_screen_original/(const byte*) PLAYFIELD_SCREEN_ORIGINAL#0+(byte/signed byte/word/signed word/dword/signed dword) 32*(byte/signed byte/word/signed word/dword/signed dword) 2 render_screen_original::@7/(byte*) render_screen_original::oscr#1 )
[478] (byte*) render_screen_original::cols#7 ← phi( render_screen_original/(const byte*) COLS#0 render_screen_original::@7/(byte*) render_screen_original::cols#3 )
[478] (byte*) render_screen_original::screen#8 ← phi( render_screen_original/(byte*) render_screen_original::screen#9 render_screen_original::@7/(byte*) render_screen_original::screen#10 )
to:render_screen_original::@2
render_screen_original::@2: scope:[render_screen_original] from render_screen_original::@1 render_screen_original::@2
[467] (byte) render_screen_original::x#4 ← phi( render_screen_original::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 render_screen_original::@2/(byte) render_screen_original::x#1 )
[467] (byte*) render_screen_original::cols#4 ← phi( render_screen_original::@1/(byte*) render_screen_original::cols#7 render_screen_original::@2/(byte*) render_screen_original::cols#1 )
[467] (byte*) render_screen_original::screen#5 ← phi( render_screen_original::@1/(byte*) render_screen_original::screen#8 render_screen_original::@2/(byte*) render_screen_original::screen#2 )
[468] *((byte*) render_screen_original::screen#5) ← (const byte) render_screen_original::SPACE#0
[469] (byte*) render_screen_original::screen#2 ← ++ (byte*) render_screen_original::screen#5
[470] *((byte*) render_screen_original::cols#4) ← (const byte) BLACK#0
[471] (byte*) render_screen_original::cols#1 ← ++ (byte*) render_screen_original::cols#4
[472] (byte) render_screen_original::x#1 ← ++ (byte) render_screen_original::x#4
[473] if((byte) render_screen_original::x#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto render_screen_original::@2
[479] (byte) render_screen_original::x#4 ← phi( render_screen_original::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 render_screen_original::@2/(byte) render_screen_original::x#1 )
[479] (byte*) render_screen_original::cols#4 ← phi( render_screen_original::@1/(byte*) render_screen_original::cols#7 render_screen_original::@2/(byte*) render_screen_original::cols#1 )
[479] (byte*) render_screen_original::screen#5 ← phi( render_screen_original::@1/(byte*) render_screen_original::screen#8 render_screen_original::@2/(byte*) render_screen_original::screen#2 )
[480] *((byte*) render_screen_original::screen#5) ← (const byte) render_screen_original::SPACE#0
[481] (byte*) render_screen_original::screen#2 ← ++ (byte*) render_screen_original::screen#5
[482] *((byte*) render_screen_original::cols#4) ← (const byte) BLACK#0
[483] (byte*) render_screen_original::cols#1 ← ++ (byte*) render_screen_original::cols#4
[484] (byte) render_screen_original::x#1 ← ++ (byte) render_screen_original::x#4
[485] if((byte) render_screen_original::x#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto render_screen_original::@2
to:render_screen_original::@3
render_screen_original::@3: scope:[render_screen_original] from render_screen_original::@2 render_screen_original::@3
[474] (byte) render_screen_original::x#5 ← phi( render_screen_original::@2/(byte) render_screen_original::x#1 render_screen_original::@3/(byte) render_screen_original::x#2 )
[474] (byte*) render_screen_original::cols#5 ← phi( render_screen_original::@2/(byte*) render_screen_original::cols#1 render_screen_original::@3/(byte*) render_screen_original::cols#2 )
[474] (byte*) render_screen_original::ocols#2 ← phi( render_screen_original::@2/(byte*) render_screen_original::ocols#4 render_screen_original::@3/(byte*) render_screen_original::ocols#1 )
[474] (byte*) render_screen_original::screen#6 ← phi( render_screen_original::@2/(byte*) render_screen_original::screen#2 render_screen_original::@3/(byte*) render_screen_original::screen#3 )
[474] (byte*) render_screen_original::oscr#2 ← phi( render_screen_original::@2/(byte*) render_screen_original::oscr#4 render_screen_original::@3/(byte*) render_screen_original::oscr#1 )
[475] *((byte*) render_screen_original::screen#6) ← *((byte*) render_screen_original::oscr#2)
[476] (byte*) render_screen_original::screen#3 ← ++ (byte*) render_screen_original::screen#6
[477] (byte*) render_screen_original::oscr#1 ← ++ (byte*) render_screen_original::oscr#2
[478] *((byte*) render_screen_original::cols#5) ← *((byte*) render_screen_original::ocols#2)
[479] (byte*) render_screen_original::cols#2 ← ++ (byte*) render_screen_original::cols#5
[480] (byte*) render_screen_original::ocols#1 ← ++ (byte*) render_screen_original::ocols#2
[481] (byte) render_screen_original::x#2 ← ++ (byte) render_screen_original::x#5
[482] if((byte) render_screen_original::x#2!=(byte/signed byte/word/signed word/dword/signed dword) 36) goto render_screen_original::@3
[486] (byte) render_screen_original::x#5 ← phi( render_screen_original::@2/(byte) render_screen_original::x#1 render_screen_original::@3/(byte) render_screen_original::x#2 )
[486] (byte*) render_screen_original::cols#5 ← phi( render_screen_original::@2/(byte*) render_screen_original::cols#1 render_screen_original::@3/(byte*) render_screen_original::cols#2 )
[486] (byte*) render_screen_original::ocols#2 ← phi( render_screen_original::@2/(byte*) render_screen_original::ocols#4 render_screen_original::@3/(byte*) render_screen_original::ocols#1 )
[486] (byte*) render_screen_original::screen#6 ← phi( render_screen_original::@2/(byte*) render_screen_original::screen#2 render_screen_original::@3/(byte*) render_screen_original::screen#3 )
[486] (byte*) render_screen_original::oscr#2 ← phi( render_screen_original::@2/(byte*) render_screen_original::oscr#4 render_screen_original::@3/(byte*) render_screen_original::oscr#1 )
[487] *((byte*) render_screen_original::screen#6) ← *((byte*) render_screen_original::oscr#2)
[488] (byte*) render_screen_original::screen#3 ← ++ (byte*) render_screen_original::screen#6
[489] (byte*) render_screen_original::oscr#1 ← ++ (byte*) render_screen_original::oscr#2
[490] *((byte*) render_screen_original::cols#5) ← *((byte*) render_screen_original::ocols#2)
[491] (byte*) render_screen_original::cols#2 ← ++ (byte*) render_screen_original::cols#5
[492] (byte*) render_screen_original::ocols#1 ← ++ (byte*) render_screen_original::ocols#2
[493] (byte) render_screen_original::x#2 ← ++ (byte) render_screen_original::x#5
[494] if((byte) render_screen_original::x#2!=(byte/signed byte/word/signed word/dword/signed dword) 36) goto render_screen_original::@3
to:render_screen_original::@4
render_screen_original::@4: scope:[render_screen_original] from render_screen_original::@3 render_screen_original::@4
[483] (byte) render_screen_original::x#6 ← phi( render_screen_original::@3/(byte) render_screen_original::x#2 render_screen_original::@4/(byte) render_screen_original::x#3 )
[483] (byte*) render_screen_original::cols#6 ← phi( render_screen_original::@3/(byte*) render_screen_original::cols#2 render_screen_original::@4/(byte*) render_screen_original::cols#3 )
[483] (byte*) render_screen_original::screen#7 ← phi( render_screen_original::@3/(byte*) render_screen_original::screen#3 render_screen_original::@4/(byte*) render_screen_original::screen#10 )
[484] *((byte*) render_screen_original::screen#7) ← (const byte) render_screen_original::SPACE#0
[485] (byte*) render_screen_original::screen#10 ← ++ (byte*) render_screen_original::screen#7
[486] *((byte*) render_screen_original::cols#6) ← (const byte) BLACK#0
[487] (byte*) render_screen_original::cols#3 ← ++ (byte*) render_screen_original::cols#6
[488] (byte) render_screen_original::x#3 ← ++ (byte) render_screen_original::x#6
[489] if((byte) render_screen_original::x#3!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto render_screen_original::@4
[495] (byte) render_screen_original::x#6 ← phi( render_screen_original::@3/(byte) render_screen_original::x#2 render_screen_original::@4/(byte) render_screen_original::x#3 )
[495] (byte*) render_screen_original::cols#6 ← phi( render_screen_original::@3/(byte*) render_screen_original::cols#2 render_screen_original::@4/(byte*) render_screen_original::cols#3 )
[495] (byte*) render_screen_original::screen#7 ← phi( render_screen_original::@3/(byte*) render_screen_original::screen#3 render_screen_original::@4/(byte*) render_screen_original::screen#10 )
[496] *((byte*) render_screen_original::screen#7) ← (const byte) render_screen_original::SPACE#0
[497] (byte*) render_screen_original::screen#10 ← ++ (byte*) render_screen_original::screen#7
[498] *((byte*) render_screen_original::cols#6) ← (const byte) BLACK#0
[499] (byte*) render_screen_original::cols#3 ← ++ (byte*) render_screen_original::cols#6
[500] (byte) render_screen_original::x#3 ← ++ (byte) render_screen_original::x#6
[501] if((byte) render_screen_original::x#3!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto render_screen_original::@4
to:render_screen_original::@7
render_screen_original::@7: scope:[render_screen_original] from render_screen_original::@4
[490] (byte) render_screen_original::y#1 ← ++ (byte) render_screen_original::y#6
[491] if((byte) render_screen_original::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto render_screen_original::@1
[502] (byte) render_screen_original::y#1 ← ++ (byte) render_screen_original::y#6
[503] if((byte) render_screen_original::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto render_screen_original::@1
to:render_screen_original::@return
render_screen_original::@return: scope:[render_screen_original] from render_screen_original::@7
[492] return
[504] return
to:@return
sid_rnd_init: scope:[sid_rnd_init] from main
[493] *((const word*) SID_VOICE3_FREQ#0) ← (word/dword/signed dword) 65535
[494] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0
[505] *((const word*) SID_VOICE3_FREQ#0) ← (word/dword/signed dword) 65535
[506] *((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
[495] return
[507] return
to:@return
sprites_irq: scope:[sprites_irq] from
asm { cld }
[497] (byte) sprites_irq::ypos#0 ← (byte) irq_sprite_ypos#0
[498] *((const byte*) SPRITES_YPOS#0) ← (byte) sprites_irq::ypos#0
[499] *((const byte*) SPRITES_YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte) sprites_irq::ypos#0
[500] *((const byte*) SPRITES_YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 4) ← (byte) sprites_irq::ypos#0
[501] *((const byte*) SPRITES_YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 6) ← (byte) sprites_irq::ypos#0
[509] (byte) sprites_irq::ypos#0 ← (byte) irq_sprite_ypos#0
[510] *((const byte*) SPRITES_YPOS#0) ← (byte) sprites_irq::ypos#0
[511] *((const byte*) SPRITES_YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte) sprites_irq::ypos#0
[512] *((const byte*) SPRITES_YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 4) ← (byte) sprites_irq::ypos#0
[513] *((const byte*) SPRITES_YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 6) ← (byte) sprites_irq::ypos#0
to:sprites_irq::@1
sprites_irq::@1: scope:[sprites_irq] from sprites_irq sprites_irq::@1
[502] if(*((const byte*) RASTER#0)<(byte) irq_sprite_ypos#0) goto sprites_irq::@1
[514] if(*((const byte*) RASTER#0)<(byte) irq_sprite_ypos#0) goto sprites_irq::@1
to:sprites_irq::@7
sprites_irq::@7: scope:[sprites_irq] from sprites_irq::@1
[503] (byte) sprites_irq::ptr#0 ← (byte) irq_sprite_ptr#0
[504] if((byte) render_screen_showing#0==(byte/signed byte/word/signed word/dword/signed dword) 0) goto sprites_irq::@2
[515] (byte) sprites_irq::ptr#0 ← (byte) irq_sprite_ptr#0
[516] if((byte) render_screen_showing#0==(byte/signed byte/word/signed word/dword/signed dword) 0) goto sprites_irq::@2
to:sprites_irq::@8
sprites_irq::@8: scope:[sprites_irq] from sprites_irq::@7
[505] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0) ← (byte) sprites_irq::ptr#0
[506] (byte) sprites_irq::ptr#3 ← ++ (byte) sprites_irq::ptr#0
[507] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte) sprites_irq::ptr#3
[508] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte) sprites_irq::ptr#3
[509] (byte) sprites_irq::ptr#4 ← ++ (byte) sprites_irq::ptr#3
[510] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte) sprites_irq::ptr#4
[517] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0) ← (byte) sprites_irq::ptr#0
[518] (byte) sprites_irq::ptr#3 ← ++ (byte) sprites_irq::ptr#0
[519] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte) sprites_irq::ptr#3
[520] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte) sprites_irq::ptr#3
[521] (byte) sprites_irq::ptr#4 ← ++ (byte) sprites_irq::ptr#3
[522] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte) sprites_irq::ptr#4
to:sprites_irq::@3
sprites_irq::@3: scope:[sprites_irq] from sprites_irq::@2 sprites_irq::@8
[511] (byte) irq_cnt#1 ← ++ (byte) irq_cnt#0
[512] if((byte) irq_cnt#1==(byte/signed byte/word/signed word/dword/signed dword) 10) goto sprites_irq::@4
[523] (byte) irq_cnt#1 ← ++ (byte) irq_cnt#0
[524] if((byte) irq_cnt#1==(byte/signed byte/word/signed word/dword/signed dword) 10) goto sprites_irq::@4
to:sprites_irq::@10
sprites_irq::@10: scope:[sprites_irq] from sprites_irq::@3
[513] (byte) irq_raster_next#2 ← (byte) irq_raster_next#0 + (byte/signed byte/word/signed word/dword/signed dword) 21
[514] (byte) irq_sprite_ypos#2 ← (byte) irq_sprite_ypos#0 + (byte/signed byte/word/signed word/dword/signed dword) 21
[515] (byte) irq_sprite_ptr#2 ← (byte) irq_sprite_ptr#0 + (byte/signed byte/word/signed word/dword/signed dword) 3
[525] (byte) irq_raster_next#2 ← (byte) irq_raster_next#0 + (byte/signed byte/word/signed word/dword/signed dword) 21
[526] (byte) irq_sprite_ypos#2 ← (byte) irq_sprite_ypos#0 + (byte/signed byte/word/signed word/dword/signed dword) 21
[527] (byte) irq_sprite_ptr#2 ← (byte) irq_sprite_ptr#0 + (byte/signed byte/word/signed word/dword/signed dword) 3
to:sprites_irq::@5
sprites_irq::@5: scope:[sprites_irq] from sprites_irq::@10 sprites_irq::@13
[516] (byte) irq_raster_next#13 ← phi( sprites_irq::@10/(byte) irq_raster_next#2 sprites_irq::@13/(byte) irq_raster_next#1 )
[517] (byte) sprites_irq::raster_next#0 ← (byte) irq_raster_next#13
[518] (byte~) sprites_irq::$4 ← (byte) sprites_irq::raster_next#0 & (byte/signed byte/word/signed word/dword/signed dword) 7
[519] if((byte~) sprites_irq::$4!=(byte/signed byte/word/signed word/dword/signed dword) 3) goto sprites_irq::@6
[528] (byte) irq_raster_next#13 ← phi( sprites_irq::@10/(byte) irq_raster_next#2 sprites_irq::@13/(byte) irq_raster_next#1 )
[529] (byte) sprites_irq::raster_next#0 ← (byte) irq_raster_next#13
[530] (byte~) sprites_irq::$4 ← (byte) sprites_irq::raster_next#0 & (byte/signed byte/word/signed word/dword/signed dword) 7
[531] if((byte~) sprites_irq::$4!=(byte/signed byte/word/signed word/dword/signed dword) 3) goto sprites_irq::@6
to:sprites_irq::@12
sprites_irq::@12: scope:[sprites_irq] from sprites_irq::@5
[520] (byte) sprites_irq::raster_next#1 ← (byte) sprites_irq::raster_next#0 - (byte/signed byte/word/signed word/dword/signed dword) 1
[532] (byte) sprites_irq::raster_next#1 ← (byte) sprites_irq::raster_next#0 - (byte/signed byte/word/signed word/dword/signed dword) 1
to:sprites_irq::@6
sprites_irq::@6: scope:[sprites_irq] from sprites_irq::@12 sprites_irq::@5
[521] (byte) sprites_irq::raster_next#2 ← phi( sprites_irq::@12/(byte) sprites_irq::raster_next#1 sprites_irq::@5/(byte) sprites_irq::raster_next#0 )
[522] *((const byte*) RASTER#0) ← (byte) sprites_irq::raster_next#2
[523] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0
[533] (byte) sprites_irq::raster_next#2 ← phi( sprites_irq::@12/(byte) sprites_irq::raster_next#1 sprites_irq::@5/(byte) sprites_irq::raster_next#0 )
[534] *((const byte*) RASTER#0) ← (byte) sprites_irq::raster_next#2
[535] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0
to:sprites_irq::@return
sprites_irq::@return: scope:[sprites_irq] from sprites_irq::@6
[524] return
[536] return
to:@return
sprites_irq::@4: scope:[sprites_irq] from sprites_irq::@3
[525] (byte) irq_cnt#14 ← (byte/signed byte/word/signed word/dword/signed dword) 0
[526] (byte) irq_raster_next#1 ← (const byte) IRQ_RASTER_FIRST#0
[527] (byte) irq_sprite_ypos#1 ← (byte/signed byte/word/signed word/dword/signed dword) 50
[537] (byte) irq_cnt#14 ← (byte/signed byte/word/signed word/dword/signed dword) 0
[538] (byte) irq_raster_next#1 ← (const byte) IRQ_RASTER_FIRST#0
[539] (byte) irq_sprite_ypos#1 ← (byte/signed byte/word/signed word/dword/signed dword) 50
to:sprites_irq::toSpritePtr2
sprites_irq::toSpritePtr2: scope:[sprites_irq] from sprites_irq::@4
[528] phi()
[540] phi()
to:sprites_irq::@13
sprites_irq::@13: scope:[sprites_irq] from sprites_irq::toSpritePtr2
[529] (byte) irq_sprite_ptr#1 ← (const byte) sprites_irq::toSpritePtr2_return#0
[541] (byte) irq_sprite_ptr#1 ← (const byte) sprites_irq::toSpritePtr2_return#0
to:sprites_irq::@5
sprites_irq::@2: scope:[sprites_irq] from sprites_irq::@7
[530] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0) ← (byte) sprites_irq::ptr#0
[531] (byte) sprites_irq::ptr#1 ← ++ (byte) sprites_irq::ptr#0
[532] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte) sprites_irq::ptr#1
[533] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte) sprites_irq::ptr#1
[534] (byte) sprites_irq::ptr#2 ← ++ (byte) sprites_irq::ptr#1
[535] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte) sprites_irq::ptr#2
[542] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0) ← (byte) sprites_irq::ptr#0
[543] (byte) sprites_irq::ptr#1 ← ++ (byte) sprites_irq::ptr#0
[544] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte) sprites_irq::ptr#1
[545] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte) sprites_irq::ptr#1
[546] (byte) sprites_irq::ptr#2 ← ++ (byte) sprites_irq::ptr#1
[547] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte) sprites_irq::ptr#2
to:sprites_irq::@3

File diff suppressed because it is too large Load Diff

View File

@ -226,6 +226,8 @@
(byte*) RASTER
(const byte*) RASTER#0 RASTER = ((byte*))(word/dword/signed dword) 53266
(byte) RED
(dword[]) SCORE_BASE_BCD
(const dword[]) SCORE_BASE_BCD#0 SCORE_BASE_BCD = { (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 64, (word/signed word/dword/signed dword) 256, (word/signed word/dword/signed dword) 768, (word/signed word/dword/signed dword) 4608 }
(byte) SID_CONTROL_GATE
(byte) SID_CONTROL_NOISE
(const byte) SID_CONTROL_NOISE#0 SID_CONTROL_NOISE = (byte/word/signed word/dword/signed dword) 128
@ -286,12 +288,12 @@
(byte) current_movedown_fast
(const byte) current_movedown_fast#0 current_movedown_fast = (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) current_movedown_slow
(byte) current_movedown_slow#1 current_movedown_slow zp ZP_BYTE:24 0.3076923076923077
(byte) current_movedown_slow#1 current_movedown_slow zp ZP_BYTE:24 0.2222222222222222
(byte) current_movedown_slow#12 current_movedown_slow zp ZP_BYTE:24 2.296296296296297
(byte) current_movedown_slow#17 current_movedown_slow zp ZP_BYTE:24 4.0
(byte) current_movedown_slow#19 current_movedown_slow zp ZP_BYTE:24 1.3333333333333333
(byte) current_movedown_slow#20 current_movedown_slow zp ZP_BYTE:24 0.5
(byte) current_movedown_slow#30 current_movedown_slow zp ZP_BYTE:24 6.0
(byte) current_movedown_slow#31 current_movedown_slow zp ZP_BYTE:24 6.0
(byte) current_movedown_slow#60 current_movedown_slow zp ZP_BYTE:24 0.26666666666666666
(byte) current_movedown_slow#8 current_movedown_slow zp ZP_BYTE:24 4.0
(byte) current_orientation
(byte) current_orientation#10 current_orientation zp ZP_BYTE:28 3.371428571428571
@ -472,16 +474,16 @@
(byte) level
(byte) level#12 level zp ZP_BYTE:23 4.0
(byte) level#14 level zp ZP_BYTE:23 1.3333333333333333
(byte) level#16 level zp ZP_BYTE:23 0.7272727272727273
(byte) level#16 level zp ZP_BYTE:23 0.4444444444444444
(byte) level#19 level zp ZP_BYTE:23 2.2181818181818174
(byte) level#24 level zp ZP_BYTE:23 6.0
(byte) level_bcd
(byte) level_bcd#13 level_bcd zp ZP_BYTE:25 2.313725490196078
(byte) level_bcd#15 level_bcd zp ZP_BYTE:25 1.3333333333333333
(byte) level_bcd#17 level_bcd zp ZP_BYTE:25 2.6666666666666665
(byte) level_bcd#18 level_bcd zp ZP_BYTE:25 2.0
(byte) level_bcd#20 level_bcd zp ZP_BYTE:25 2.0677966101694913
(byte) level_bcd#25 level_bcd zp ZP_BYTE:25 6.0
(byte) level_bcd#55 level_bcd zp ZP_BYTE:25 0.6000000000000001
(byte) level_bcd#6 level_bcd zp ZP_BYTE:25 4.0
(word) lines_bcd
(word) lines_bcd#11 lines_bcd zp ZP_WORD:17 2.352941176470588
@ -583,14 +585,28 @@
(void()) play_increase_level()
(byte~) play_increase_level::$1 reg byte a 4.0
(label) play_increase_level::@2
(label) play_increase_level::@3
(label) play_increase_level::@4
(label) play_increase_level::@6
(label) play_increase_level::@5
(label) play_increase_level::@7
(label) play_increase_level::@8
(label) play_increase_level::@return
(byte) play_increase_level::b
(byte) play_increase_level::b#1 reg byte x 1501.5
(byte) play_increase_level::b#2 reg byte x 1001.0
(byte) play_increase_level::b4
(byte) play_increase_level::b4#0 reg byte a 4004.0
(void()) play_init()
(byte~) play_init::$1 reg byte a 22.0
(label) play_init::@1
(label) play_init::@2
(label) play_init::@3
(label) play_init::@return
(byte) play_init::b
(byte) play_init::b#1 reg byte x 16.5
(byte) play_init::b#2 reg byte x 11.0
(byte) play_init::b4
(byte) play_init::b4#0 reg byte a 33.0
(byte) play_init::idx
(byte) play_init::idx#1 idx zp ZP_BYTE:2 7.333333333333333
(byte) play_init::idx#2 idx zp ZP_BYTE:2 6.6000000000000005
@ -1003,8 +1019,8 @@
(byte) render_show::toD0182_return
(const byte) render_show::toD0182_return#0 toD0182_return = >((word))(const byte*) PLAYFIELD_SCREEN_2#0&(word/signed word/dword/signed dword) 16383<<(byte/signed byte/word/signed word/dword/signed dword) 2|>((word))(const byte*) PLAYFIELD_CHARSET#0>>(byte/signed byte/word/signed word/dword/signed dword) 2&(byte/signed byte/word/signed word/dword/signed dword) 15
(byte*) render_show::toD0182_screen
(dword[]) score_add_bcd
(const dword[]) score_add_bcd#0 score_add_bcd = { (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 64, (word/signed word/dword/signed dword) 256, (word/signed word/dword/signed dword) 768, (word/signed word/dword/signed dword) 4608 }
(dword[5]) score_add_bcd
(const dword[5]) score_add_bcd#0 score_add_bcd = { fill( 5, 0) }
(dword) score_bcd
(dword) score_bcd#10 score_bcd zp ZP_DWORD:19 4.0
(dword) score_bcd#12 score_bcd zp ZP_DWORD:19 1.3333333333333333
@ -1104,8 +1120,8 @@ zp ZP_BYTE:16 [ current_ypos#29 current_ypos#21 current_ypos#18 current_ypos#13
zp ZP_WORD:17 [ lines_bcd#20 lines_bcd#13 lines_bcd#15 lines_bcd#11 lines_bcd#23 render_screen_original::screen#7 render_screen_original::screen#6 render_screen_original::screen#5 render_screen_original::screen#8 render_screen_original::screen#9 render_screen_original::screen#10 render_screen_original::screen#2 render_screen_original::screen#3 ]
zp ZP_DWORD:19 [ score_bcd#20 score_bcd#12 score_bcd#14 score_bcd#10 score_bcd#23 ]
zp ZP_BYTE:23 [ level#24 level#14 level#19 level#12 level#16 ]
zp ZP_BYTE:24 [ current_movedown_slow#30 current_movedown_slow#19 current_movedown_slow#12 current_movedown_slow#1 current_movedown_slow#17 current_movedown_slow#20 current_movedown_slow#8 ]
zp ZP_BYTE:25 [ level_bcd#25 level_bcd#15 level_bcd#20 level_bcd#13 level_bcd#18 level_bcd#17 level_bcd#6 ]
zp ZP_BYTE:24 [ current_movedown_slow#31 current_movedown_slow#19 current_movedown_slow#12 current_movedown_slow#1 current_movedown_slow#17 current_movedown_slow#60 current_movedown_slow#8 ]
zp ZP_BYTE:25 [ level_bcd#25 level_bcd#15 level_bcd#20 level_bcd#13 level_bcd#55 level_bcd#17 level_bcd#6 ]
zp ZP_WORD:26 [ current_piece#20 current_piece#80 current_piece#16 current_piece#73 current_piece#10 render_screen_original::cols#6 render_screen_original::cols#5 render_screen_original::cols#4 render_screen_original::cols#7 render_screen_original::cols#3 render_screen_original::cols#1 render_screen_original::cols#2 ]
zp ZP_BYTE:28 [ current_orientation#29 current_orientation#10 current_orientation#19 current_orientation#4 current_orientation#14 ]
zp ZP_WORD:29 [ current_piece_gfx#26 current_piece_gfx#20 current_piece_gfx#16 current_piece_gfx#14 current_piece_gfx#3 current_piece_gfx#1 ]
@ -1113,6 +1129,7 @@ zp ZP_BYTE:31 [ current_xpos#33 current_xpos#10 current_xpos#23 current_xpos#19
zp ZP_BYTE:32 [ current_piece_char#20 current_piece_char#15 current_piece_char#12 current_piece_char#1 ]
reg byte x [ play_move_down::return#2 ]
reg byte x [ play_spawn_current::piece_idx#2 play_spawn_current::piece_idx#1 ]
reg byte x [ play_increase_level::b#2 play_increase_level::b#1 ]
reg byte y [ play_remove_lines::r#2 play_remove_lines::r#3 play_remove_lines::r#1 ]
reg byte x [ play_remove_lines::w#6 play_remove_lines::w#4 play_remove_lines::w#12 play_remove_lines::w#11 play_remove_lines::w#1 play_remove_lines::w#2 play_remove_lines::w#3 ]
reg byte x [ play_lock_current::c#2 play_lock_current::c#1 ]
@ -1122,6 +1139,7 @@ reg byte x [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ]
zp ZP_BYTE:33 [ keyboard_events_size#10 keyboard_events_size#29 keyboard_events_size#19 keyboard_events_size#16 keyboard_events_size#13 keyboard_events_size#4 keyboard_events_size#30 keyboard_events_size#2 keyboard_events_size#1 ]
reg byte a [ render_show::d018val#3 ]
reg byte x [ play_init::j#2 play_init::j#1 ]
reg byte x [ play_init::b#2 play_init::b#1 ]
reg byte x [ sprites_init::s#2 sprites_init::s#1 ]
reg byte x [ render_init::i#2 render_init::i#1 ]
reg byte x [ render_screen_original::x#6 render_screen_original::x#5 render_screen_original::x#4 render_screen_original::x#1 render_screen_original::x#2 render_screen_original::x#3 ]
@ -1177,6 +1195,7 @@ zp ZP_DWORD:41 [ play_update_score::add_bcd#0 ]
reg byte a [ play_update_score::$5 ]
reg byte a [ play_update_score::lines_after#0 ]
reg byte a [ play_increase_level::$1 ]
reg byte a [ play_increase_level::b4#0 ]
reg byte a [ keyboard_event_pressed::$0 ]
reg byte a [ keyboard_event_pressed::$1 ]
reg byte a [ keyboard_event_pressed::return#11 ]
@ -1197,6 +1216,7 @@ reg byte a [ keyboard_event_scan::event_type#0 ]
reg byte a [ keyboard_event_scan::$11 ]
reg byte a [ keyboard_matrix_read::return#0 ]
reg byte a [ play_init::$1 ]
reg byte a [ play_init::b4#0 ]
reg byte a [ sprites_init::s2#0 ]
reg byte a [ render_init::$13 ]
reg byte a [ render_init::$14 ]