diff --git a/src/main/java/dk/camelot64/kickc/model/values/ConstantBool.java b/src/main/java/dk/camelot64/kickc/model/values/ConstantBool.java index 9dc3e73b6..d1ec534b6 100644 --- a/src/main/java/dk/camelot64/kickc/model/values/ConstantBool.java +++ b/src/main/java/dk/camelot64/kickc/model/values/ConstantBool.java @@ -7,7 +7,7 @@ import dk.camelot64.kickc.model.types.SymbolType; /** * SSA form constant integer value */ -public class ConstantBool implements ConstantLiteral { +public class ConstantBool implements ConstantEnumerable { private Boolean value; @@ -20,6 +20,19 @@ public class ConstantBool implements ConstantLiteral { return SymbolType.BOOLEAN; } + @Override + public Long getInteger() { + if(value) + return 1l; + else + return 0l; + } + + @Override + public ConstantLiteral calculateLiteral(ProgramScope scope) { + return new ConstantBool(value); + } + @Override public Boolean getValue() { return value; diff --git a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java index 25a1e837f..87af2186e 100644 --- a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java +++ b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java @@ -44,6 +44,11 @@ public class TestPrograms { public TestPrograms() { } + @Test + public void testProblemBoolCompare() throws IOException, URISyntaxException { + compileAndCompare("problem-bool-compare.c"); + } + @Test public void testIndexSizeofReuse() throws IOException, URISyntaxException { compileAndCompare("index-sizeof-reuse.c"); diff --git a/src/test/kc/complex/nes-balls/kickballs-3.c b/src/test/kc/complex/nes-balls/kickballs-3.c index b9ea8f423..979f4f8f9 100644 --- a/src/test/kc/complex/nes-balls/kickballs-3.c +++ b/src/test/kc/complex/nes-balls/kickballs-3.c @@ -1,5 +1,5 @@ #pragma target(nes) -//#pragma emulator("java -jar /Applications/Nintaco_bin_2020-05-01/Nintaco.jar") +#pragma emulator("java -jar /Applications/Nintaco_bin_2020-05-01/Nintaco.jar") #include #include @@ -67,7 +67,7 @@ int main(void) PPU->PPUCTRL = 0b10001000; unsigned short i; - unsigned char active_balls = 0; + unsigned short active_balls = 0; unsigned char timer = 0; unsigned char timer_2 = 0; unsigned char h_bar = 0x80; diff --git a/src/test/ref/complex/nes-balls/kickballs-3.asm b/src/test/ref/complex/nes-balls/kickballs-3.asm index 3a1b73290..f27cb1e04 100644 --- a/src/test/ref/complex/nes-balls/kickballs-3.asm +++ b/src/test/ref/complex/nes-balls/kickballs-3.asm @@ -124,20 +124,15 @@ main: { .label __9 = $36 .label __10 = $36 .label __11 = $36 - .label __20 = $f + .label __20 = $21 .label __23 = $27 - .label __25 = $25 - .label __26 = $29 + .label __25 = $29 + .label __26 = $2b .label __31 = $30 .label __32 = $34 - .label __33 = $32 - .label __35 = $38 - .label __36 = $3a - .label __40 = $f - .label __44 = $25 - .label __45 = $21 - .label __50 = $32 - .label __53 = $2a + .label __33 = $f + .label __36 = $38 + .label __44 = $f .label __56 = $30 .label i = 2 .label timer_2 = 4 @@ -146,8 +141,8 @@ main: { .label sprite_idx = 9 .label i_1 = 7 .label timer = 6 - .label __59 = $38 - .label __60 = $3a + .label __59 = $3a + .label __60 = $38 .label __61 = $11 .label __62 = $13 .label __63 = $15 @@ -156,16 +151,16 @@ main: { .label __66 = $1b .label __67 = $1d .label __68 = $1f - .label __69 = $f + .label __69 = $21 .label __70 = $27 - .label __71 = $25 + .label __71 = $29 .label __72 = $23 - .label __73 = $21 + .label __73 = $25 .label __74 = $34 - .label __75 = $32 + .label __75 = $f .label __76 = $2c .label __77 = $2e - .label __78 = $2a + .label __78 = $32 // asm cld ldx #$ff @@ -366,33 +361,33 @@ main: { // balls[i].x_position += balls[i].x_velocity lda.z i_1 asl - sta.z __40 + sta.z __44 lda.z i_1+1 rol - sta.z __40+1 - asl.z __40 - rol.z __40+1 - asl.z __40 - rol.z __40+1 - lda.z __40 + sta.z __44+1 + asl.z __44 + rol.z __44+1 + asl.z __44 + rol.z __44+1 + lda.z __44 clc adc #balls sta.z __61+1 - lda.z __40 + lda.z __44 clc adc #balls+4 sta.z __62+1 - lda.z __40 + lda.z __44 clc adc #balls sta.z __63+1 ldy #0 @@ -405,18 +400,18 @@ main: { adc (__62),y sta (__63),y // balls[i].y_velocity += WEIGHT - lda.z __40 + lda.z __44 clc adc #balls+6 sta.z __64+1 - lda.z __40 + lda.z __44 clc adc #balls+6 sta.z __65+1 ldy #0 @@ -429,25 +424,25 @@ main: { adc #>$10 sta (__65),y // balls[i].y_position += (balls[i].y_velocity += WEIGHT) - lda.z __40 + lda.z __44 clc adc #balls+2 sta.z __66+1 - lda.z __40 + lda.z __44 clc adc #balls+6 sta.z __67+1 - lda.z __40 + lda.z __44 clc adc #balls+2 sta.z __68+1 ldy #0 @@ -460,11 +455,11 @@ main: { adc (__67),y sta (__68),y // balls[i].x_position >> 8 + lda.z __44 clc - lda.z __69 adc #balls sta.z __69+1 ldy #1 @@ -480,28 +475,18 @@ main: { bcs __b9 !: // balls[i].x_velocity ^= 0xFFFF - lda.z i_1 - asl - sta.z __45 - lda.z i_1+1 - rol - sta.z __45+1 - asl.z __45 - rol.z __45+1 - asl.z __45 - rol.z __45+1 - lda.z __45 + lda.z __44 clc adc #balls+4 sta.z __72+1 + lda.z __44 clc - lda.z __73 adc #balls+4 sta.z __73+1 ldy #0 @@ -514,16 +499,6 @@ main: { sta (__73),y __b9: // balls[i].y_position >> 8 - lda.z i_1 - asl - sta.z __44 - lda.z i_1+1 - rol - sta.z __44+1 - asl.z __44 - rol.z __44+1 - asl.z __44 - rol.z __44+1 lda.z __44 clc adc #balls+2 sta.z __71+1 ldy #1 @@ -566,28 +541,18 @@ main: { bcs __b10 !: // balls[i].y_velocity ^= 0xFFFF - lda.z i_1 - asl - sta.z __53 - lda.z i_1+1 - rol - sta.z __53+1 - asl.z __53 - rol.z __53+1 - asl.z __53 - rol.z __53+1 - lda.z __53 + lda.z __44 clc adc #balls+6 sta.z __76+1 - lda.z __53 + lda.z __44 clc adc #balls+6 sta.z __77+1 ldy #0 @@ -611,11 +576,11 @@ main: { lda #0 sta.z __31 // balls[i].y_position = ((unsigned short)(h_bar - 2) << 8) + lda.z __44 clc - lda.z __78 adc #balls+2 sta.z __78+1 ldy #0 @@ -626,21 +591,11 @@ main: { sta (__78),y __b10: // balls[i].y_position >> 8 - lda.z i_1 - asl - sta.z __50 - lda.z i_1+1 - rol - sta.z __50+1 - asl.z __50 - rol.z __50+1 - asl.z __50 - rol.z __50+1 - lda.z __50 + lda.z __44 clc adc #balls+2 sta.z __74+1 ldy #1 @@ -701,19 +656,19 @@ main: { // balls[i].x_velocity = rand() & 0x3FF lda.z i asl - sta.z __35 + sta.z __36 lda.z i+1 rol - sta.z __35+1 - asl.z __35 - rol.z __35+1 - asl.z __35 - rol.z __35+1 + sta.z __36+1 + asl.z __36 + rol.z __36+1 + asl.z __36 + rol.z __36+1 + lda.z __36 clc - lda.z __59 adc #balls+4 sta.z __59+1 ldy #0 @@ -730,16 +685,6 @@ main: { and.z __11 tax // balls[i].y_velocity = rand() & 0x0FF - lda.z i - asl - sta.z __36 - lda.z i+1 - rol - sta.z __36+1 - asl.z __36 - rol.z __36+1 - asl.z __36 - rol.z __36+1 clc lda.z __60 adc #> (byte) 8 [83] if((word~) main::$20>=(byte) 8) goto main::@9 to:main::@11 main::@11: scope:[main] from main::@7 - [84] (word~) main::$45 ← (word) main::i#10 << (byte) 3 - [85] (word*~) main::$72 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$45 - [86] (word*~) main::$73 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$45 - [87] *((word*~) main::$73) ← *((word*~) main::$72) ^ (word) $ffff + [84] (word*~) main::$72 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$44 + [85] (word*~) main::$73 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$44 + [86] *((word*~) main::$73) ← *((word*~) main::$72) ^ (word) $ffff to:main::@9 main::@9: scope:[main] from main::@11 main::@7 - [88] (word~) main::$44 ← (word) main::i#10 << (byte) 3 - [89] (word*~) main::$70 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 - [90] (word~) main::$23 ← *((word*~) main::$70) >> (byte) 8 - [91] (word*~) main::$71 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 - [92] (word~) main::$25 ← *((word*~) main::$71) >> (byte) 8 - [93] (byte~) main::$26 ← (byte) main::h_bar#1 + (byte) 8 - [94] if((word~) main::$23<(byte) main::h_bar#1) goto main::@10 + [87] (word*~) main::$70 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 + [88] (word~) main::$23 ← *((word*~) main::$70) >> (byte) 8 + [89] (word*~) main::$71 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 + [90] (word~) main::$25 ← *((word*~) main::$71) >> (byte) 8 + [91] (byte~) main::$26 ← (byte) main::h_bar#1 + (byte) 8 + [92] if((word~) main::$23<(byte) main::h_bar#1) goto main::@10 to:main::@24 main::@24: scope:[main] from main::@9 - [95] if((word~) main::$25>=(byte~) main::$26) goto main::@10 + [93] if((word~) main::$25>=(byte~) main::$26) goto main::@10 to:main::@12 main::@12: scope:[main] from main::@24 - [96] (word~) main::$53 ← (word) main::i#10 << (byte) 3 - [97] (word*~) main::$76 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$53 - [98] (word*~) main::$77 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$53 - [99] *((word*~) main::$77) ← *((word*~) main::$76) ^ (word) $ffff - [100] (byte~) main::$30 ← (byte) main::h_bar#1 - (byte) 2 - [101] (word~) main::$56 ← (word)(byte~) main::$30 - [102] (word~) main::$31 ← (word~) main::$56 << (byte) 8 - [103] (word*~) main::$78 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$53 - [104] *((word*~) main::$78) ← (word~) main::$31 + [94] (word*~) main::$76 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 + [95] (word*~) main::$77 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 + [96] *((word*~) main::$77) ← *((word*~) main::$76) ^ (word) $ffff + [97] (byte~) main::$30 ← (byte) main::h_bar#1 - (byte) 2 + [98] (word~) main::$56 ← (word)(byte~) main::$30 + [99] (word~) main::$31 ← (word~) main::$56 << (byte) 8 + [100] (word*~) main::$78 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 + [101] *((word*~) main::$78) ← (word~) main::$31 to:main::@10 main::@10: scope:[main] from main::@12 main::@24 main::@9 - [105] (word~) main::$50 ← (word) main::i#10 << (byte) 3 - [106] (word*~) main::$74 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$50 - [107] (word~) main::$32 ← *((word*~) main::$74) >> (byte) 8 - [108] (byte~) main::$48 ← (byte) main::sprite_idx#3 << (byte) 2 - [109] *((byte*)(const struct SpriteData*) SPRITE_BUFFER + (byte~) main::$48) ← (byte)(word~) main::$32 - [110] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_TILE + (byte~) main::$48) ← (byte) $a - [111] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_ATTRIBUTES + (byte~) main::$48) ← (byte) 3 - [112] (word*~) main::$75 ← (word*)(const struct $0*) balls + (word~) main::$50 - [113] (word~) main::$33 ← *((word*~) main::$75) >> (byte) 8 - [114] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X + (byte~) main::$48) ← (byte)(word~) main::$33 - [115] (byte) main::sprite_idx#2 ← ++ (byte) main::sprite_idx#3 - [116] (word) main::i#4 ← ++ (word) main::i#10 + [102] (word*~) main::$74 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 + [103] (word~) main::$32 ← *((word*~) main::$74) >> (byte) 8 + [104] (byte~) main::$48 ← (byte) main::sprite_idx#3 << (byte) 2 + [105] *((byte*)(const struct SpriteData*) SPRITE_BUFFER + (byte~) main::$48) ← (byte)(word~) main::$32 + [106] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_TILE + (byte~) main::$48) ← (byte) $a + [107] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_ATTRIBUTES + (byte~) main::$48) ← (byte) 3 + [108] (word*~) main::$75 ← (word*)(const struct $0*) balls + (word~) main::$44 + [109] (word~) main::$33 ← *((word*~) main::$75) >> (byte) 8 + [110] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X + (byte~) main::$48) ← (byte)(word~) main::$33 + [111] (byte) main::sprite_idx#2 ← ++ (byte) main::sprite_idx#3 + [112] (word) main::i#4 ← ++ (word) main::i#10 to:main::@6 main::@25: scope:[main] from main::@15 - [117] (byte) main::timer#21 ← (byte) main::timer#1 + [113] (byte) main::timer#21 ← (byte) main::timer#1 to:main::@5 main::@2: scope:[main] from main::@1 - [118] phi() - [119] call rand - [120] (word) rand::return#2 ← (word) rand::return#0 + [114] phi() + [115] call rand + [116] (word) rand::return#2 ← (word) rand::return#0 to:main::@22 main::@22: scope:[main] from main::@2 - [121] (word~) main::$9 ← (word) rand::return#2 - [122] (word~) main::$10 ← (word~) main::$9 & (word) $3ff - [123] (word~) main::$35 ← (word) main::i#14 << (byte) 3 - [124] (word*~) main::$59 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$35 - [125] *((word*~) main::$59) ← (word~) main::$10 - [126] call rand - [127] (word) rand::return#3 ← (word) rand::return#0 + [117] (word~) main::$9 ← (word) rand::return#2 + [118] (word~) main::$10 ← (word~) main::$9 & (word) $3ff + [119] (word~) main::$36 ← (word) main::i#14 << (byte) 3 + [120] (word*~) main::$59 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$36 + [121] *((word*~) main::$59) ← (word~) main::$10 + [122] call rand + [123] (word) rand::return#3 ← (word) rand::return#0 to:main::@23 main::@23: scope:[main] from main::@22 - [128] (word~) main::$11 ← (word) rand::return#3 - [129] (byte~) main::$12 ← (word~) main::$11 & (byte) $ff - [130] (word~) main::$36 ← (word) main::i#14 << (byte) 3 - [131] (word*~) main::$60 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$36 - [132] *((word*~) main::$60) ← (byte~) main::$12 - [133] (word) main::i#2 ← ++ (word) main::i#14 + [124] (word~) main::$11 ← (word) rand::return#3 + [125] (byte~) main::$12 ← (word~) main::$11 & (byte) $ff + [126] (word*~) main::$60 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$36 + [127] *((word*~) main::$60) ← (byte~) main::$12 + [128] (word) main::i#2 ← ++ (word) main::i#14 to:main::@1 (void()) ppuDataTransfer((nomodify void*) ppuDataTransfer::ppuData , (nomodify void*) ppuDataTransfer::cpuData , (word) ppuDataTransfer::size) ppuDataTransfer: scope:[ppuDataTransfer] from main::@17 main::@21 - [134] (nomodify void*) ppuDataTransfer::cpuData#2 ← phi( main::@17/(void*)(const to_nomodify byte*) palette main::@21/(void*)(const to_nomodify byte*) h_bar_tilemap ) - [134] (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 ← phi( main::@17/(void*)(const nomodify byte*) PPU_PALETTE main::@21/(void*) 8256 ) + [129] (nomodify void*) ppuDataTransfer::cpuData#2 ← phi( main::@17/(void*)(const to_nomodify byte*) palette main::@21/(void*)(const to_nomodify byte*) h_bar_tilemap ) + [129] (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 ← phi( main::@17/(void*)(const nomodify byte*) PPU_PALETTE main::@21/(void*) 8256 ) to:ppuDataTransfer::ppuDataPrepare1 ppuDataTransfer::ppuDataPrepare1: scope:[ppuDataTransfer] from ppuDataTransfer - [135] (byte~) ppuDataTransfer::ppuDataPrepare1_$0 ← > (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 - [136] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataTransfer::ppuDataPrepare1_$0 - [137] (byte~) ppuDataTransfer::ppuDataPrepare1_$1 ← < (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 - [138] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataTransfer::ppuDataPrepare1_$1 + [130] (byte~) ppuDataTransfer::ppuDataPrepare1_$0 ← > (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 + [131] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataTransfer::ppuDataPrepare1_$0 + [132] (byte~) ppuDataTransfer::ppuDataPrepare1_$1 ← < (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 + [133] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataTransfer::ppuDataPrepare1_$1 to:ppuDataTransfer::@3 ppuDataTransfer::@3: scope:[ppuDataTransfer] from ppuDataTransfer::ppuDataPrepare1 - [139] (byte*) ppuDataTransfer::cpuSrc#6 ← (byte*)(nomodify void*) ppuDataTransfer::cpuData#2 + [134] (byte*) ppuDataTransfer::cpuSrc#6 ← (byte*)(nomodify void*) ppuDataTransfer::cpuData#2 to:ppuDataTransfer::@1 ppuDataTransfer::@1: scope:[ppuDataTransfer] from ppuDataTransfer::@3 ppuDataTransfer::@4 - [140] (byte*) ppuDataTransfer::cpuSrc#2 ← phi( ppuDataTransfer::@3/(byte*) ppuDataTransfer::cpuSrc#6 ppuDataTransfer::@4/(byte*) ppuDataTransfer::cpuSrc#1 ) - [140] (word) ppuDataTransfer::i#2 ← phi( ppuDataTransfer::@3/(word) 0 ppuDataTransfer::@4/(word) ppuDataTransfer::i#1 ) - [141] if((word) ppuDataTransfer::i#2<(byte) $20*(const byte) SIZEOF_BYTE) goto ppuDataTransfer::@2 + [135] (byte*) ppuDataTransfer::cpuSrc#2 ← phi( ppuDataTransfer::@3/(byte*) ppuDataTransfer::cpuSrc#6 ppuDataTransfer::@4/(byte*) ppuDataTransfer::cpuSrc#1 ) + [135] (word) ppuDataTransfer::i#2 ← phi( ppuDataTransfer::@3/(word) 0 ppuDataTransfer::@4/(word) ppuDataTransfer::i#1 ) + [136] if((word) ppuDataTransfer::i#2<(byte) $20*(const byte) SIZEOF_BYTE) goto ppuDataTransfer::@2 to:ppuDataTransfer::@return ppuDataTransfer::@return: scope:[ppuDataTransfer] from ppuDataTransfer::@1 - [142] return + [137] return to:@return ppuDataTransfer::@2: scope:[ppuDataTransfer] from ppuDataTransfer::@1 - [143] (byte) ppuDataTransfer::ppuDataPut1_val#0 ← *((byte*) ppuDataTransfer::cpuSrc#2) + [138] (byte) ppuDataTransfer::ppuDataPut1_val#0 ← *((byte*) ppuDataTransfer::cpuSrc#2) to:ppuDataTransfer::ppuDataPut1 ppuDataTransfer::ppuDataPut1: scope:[ppuDataTransfer] from ppuDataTransfer::@2 - [144] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) ppuDataTransfer::ppuDataPut1_val#0 + [139] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) ppuDataTransfer::ppuDataPut1_val#0 to:ppuDataTransfer::@4 ppuDataTransfer::@4: scope:[ppuDataTransfer] from ppuDataTransfer::ppuDataPut1 - [145] (byte*) ppuDataTransfer::cpuSrc#1 ← ++ (byte*) ppuDataTransfer::cpuSrc#2 - [146] (word) ppuDataTransfer::i#1 ← ++ (word) ppuDataTransfer::i#2 + [140] (byte*) ppuDataTransfer::cpuSrc#1 ← ++ (byte*) ppuDataTransfer::cpuSrc#2 + [141] (word) ppuDataTransfer::i#1 ← ++ (word) ppuDataTransfer::i#2 to:ppuDataTransfer::@1 (void()) ppuDataFill((nomodify void*) ppuDataFill::ppuData , (byte) ppuDataFill::val , (word) ppuDataFill::size) ppuDataFill: scope:[ppuDataFill] from main::@19 main::@20 - [147] (word) ppuDataFill::size#3 ← phi( main::@19/(word)(number) $20*(number) $1e main::@20/(byte) $40 ) - [147] (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 ← phi( main::@19/(void*)(const nomodify byte*) PPU_NAME_TABLE_0 main::@20/(void*)(const nomodify byte*) PPU_ATTRIBUTE_TABLE_0 ) + [142] (word) ppuDataFill::size#3 ← phi( main::@19/(word)(number) $20*(number) $1e main::@20/(byte) $40 ) + [142] (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 ← phi( main::@19/(void*)(const nomodify byte*) PPU_NAME_TABLE_0 main::@20/(void*)(const nomodify byte*) PPU_ATTRIBUTE_TABLE_0 ) to:ppuDataFill::ppuDataPrepare1 ppuDataFill::ppuDataPrepare1: scope:[ppuDataFill] from ppuDataFill - [148] (byte~) ppuDataFill::ppuDataPrepare1_$0 ← > (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 - [149] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataFill::ppuDataPrepare1_$0 - [150] (byte~) ppuDataFill::ppuDataPrepare1_$1 ← < (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 - [151] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataFill::ppuDataPrepare1_$1 + [143] (byte~) ppuDataFill::ppuDataPrepare1_$0 ← > (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 + [144] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataFill::ppuDataPrepare1_$0 + [145] (byte~) ppuDataFill::ppuDataPrepare1_$1 ← < (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 + [146] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataFill::ppuDataPrepare1_$1 to:ppuDataFill::@1 ppuDataFill::@1: scope:[ppuDataFill] from ppuDataFill::@2 ppuDataFill::ppuDataPrepare1 - [152] (word) ppuDataFill::i#2 ← phi( ppuDataFill::ppuDataPrepare1/(word) 0 ppuDataFill::@2/(word) ppuDataFill::i#1 ) - [153] if((word) ppuDataFill::i#2<(word) ppuDataFill::size#3) goto ppuDataFill::ppuDataPut1 + [147] (word) ppuDataFill::i#2 ← phi( ppuDataFill::ppuDataPrepare1/(word) 0 ppuDataFill::@2/(word) ppuDataFill::i#1 ) + [148] if((word) ppuDataFill::i#2<(word) ppuDataFill::size#3) goto ppuDataFill::ppuDataPut1 to:ppuDataFill::@return ppuDataFill::@return: scope:[ppuDataFill] from ppuDataFill::@1 - [154] return + [149] return to:@return ppuDataFill::ppuDataPut1: scope:[ppuDataFill] from ppuDataFill::@1 - [155] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) 0 + [150] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) 0 to:ppuDataFill::@2 ppuDataFill::@2: scope:[ppuDataFill] from ppuDataFill::ppuDataPut1 - [156] (word) ppuDataFill::i#1 ← ++ (word) ppuDataFill::i#2 + [151] (word) ppuDataFill::i#1 ← ++ (word) ppuDataFill::i#2 to:ppuDataFill::@1 (word()) rand() rand: scope:[rand] from main::@2 main::@22 - [157] (word) rand_state#10 ← phi( main::@2/(word) rand_state#17 main::@22/(word) rand_state#11 ) - [158] (word~) rand::$0 ← (word) rand_state#10 << (byte) 7 - [159] (word) rand_state#0 ← (word) rand_state#10 ^ (word~) rand::$0 - [160] (word~) rand::$1 ← (word) rand_state#0 >> (byte) 9 - [161] (word) rand_state#1 ← (word) rand_state#0 ^ (word~) rand::$1 - [162] (word~) rand::$2 ← (word) rand_state#1 << (byte) 8 - [163] (word) rand_state#11 ← (word) rand_state#1 ^ (word~) rand::$2 - [164] (word) rand::return#0 ← (word) rand_state#11 + [152] (word) rand_state#10 ← phi( main::@2/(word) rand_state#17 main::@22/(word) rand_state#11 ) + [153] (word~) rand::$0 ← (word) rand_state#10 << (byte) 7 + [154] (word) rand_state#0 ← (word) rand_state#10 ^ (word~) rand::$0 + [155] (word~) rand::$1 ← (word) rand_state#0 >> (byte) 9 + [156] (word) rand_state#1 ← (word) rand_state#0 ^ (word~) rand::$1 + [157] (word~) rand::$2 ← (word) rand_state#1 << (byte) 8 + [158] (word) rand_state#11 ← (word) rand_state#1 ^ (word~) rand::$2 + [159] (word) rand::return#0 ← (word) rand_state#11 to:rand::@return rand::@return: scope:[rand] from rand - [165] return + [160] return to:@return diff --git a/src/test/ref/complex/nes-balls/kickballs-3.log b/src/test/ref/complex/nes-balls/kickballs-3.log index b3cda8771..09e3ecf64 100644 --- a/src/test/ref/complex/nes-balls/kickballs-3.log +++ b/src/test/ref/complex/nes-balls/kickballs-3.log @@ -1800,9 +1800,20 @@ Alias candidate removed (volatile)scroll_y = main::$14 Identical Phi Values (byte) ppuDataFill::val#4 (byte) 0 Identical Phi Values (word) ppuDataTransfer::size#3 (byte) $20*(const byte) SIZEOF_BYTE Successful SSA optimization Pass2IdenticalPhiElimination +Identified duplicate assignment right side [73] (word~) main::$36 ← (word) main::i#14 << (byte) 3 +Identified duplicate assignment right side [108] (word~) main::$44 ← (word) main::i#10 << (byte) 3 +Identified duplicate assignment right side [115] (word~) main::$45 ← (word) main::i#10 << (byte) 3 +Identified duplicate assignment right side [119] (word~) main::$50 ← (word) main::i#10 << (byte) 3 +Identified duplicate assignment right side [131] (word~) main::$53 ← (word) main::i#10 << (byte) 3 +Successful SSA optimization Pass2DuplicateRValueIdentification Eliminating unused constant (const byte) SIZEOF_STRUCT_SPRITEDATA Successful SSA optimization PassNEliminateUnusedVars Alias candidate removed (volatile)scroll_y = main::$14 +Alias main::$36 = main::$35 +Alias main::$44 = main::$40 main::$45 main::$50 main::$53 +Successful SSA optimization Pass2AliasElimination +Alias candidate removed (volatile)scroll_y = main::$14 +Alias candidate removed (volatile)scroll_y = main::$14 Added new block during phi lifting main::@27(between main::initNES1_@1 and main::initNES1_@1) Added new block during phi lifting main::@28(between main::@16 and main::@6) Added new block during phi lifting main::@29(between main::@4 and main::@6) @@ -1822,27 +1833,27 @@ Adding NOP phi() at start of ppuDataFill::@3 Adding NOP phi() at start of ppuDataFill::@2 CALL GRAPH Calls in [__start] to main:4 -Calls in [main] to ppuDataTransfer:40 ppuDataFill:42 ppuDataFill:44 ppuDataTransfer:46 rand:131 rand:139 +Calls in [main] to ppuDataTransfer:40 ppuDataFill:42 ppuDataFill:44 ppuDataTransfer:46 rand:127 rand:135 Created 18 initial phi equivalence classes Coalesced [65] main::active_balls#22 ← main::active_balls#1 Coalesced [73] main::timer_2#20 ← main::timer_2#1 Coalesced [74] main::active_balls#20 ← main::active_balls#8 Coalesced [75] main::timer#20 ← main::timer#15 -Coalesced [124] main::i#16 ← main::i#4 -Coalesced [125] main::sprite_idx#9 ← main::sprite_idx#2 -Coalesced (already) [126] main::active_balls#21 ← main::active_balls#2 -Not coalescing [127] main::timer#21 ← main::timer#1 -Coalesced (already) [128] main::active_balls#23 ← main::active_balls#2 -Coalesced (already) [129] main::timer#22 ← main::timer#3 -Coalesced [130] rand_state#54 ← rand_state#17 -Coalesced [138] rand_state#55 ← rand_state#11 -Coalesced [147] main::i#15 ← main::i#2 -Coalesced (already) [148] rand_state#56 ← rand_state#11 -Coalesced [149] main::initNES1_i#3 ← main::initNES1_i#1 -Coalesced [163] ppuDataTransfer::i#6 ← ppuDataTransfer::i#1 -Coalesced [164] ppuDataTransfer::cpuSrc#7 ← ppuDataTransfer::cpuSrc#1 -Coalesced [177] ppuDataFill::i#6 ← ppuDataFill::i#1 +Coalesced [120] main::i#16 ← main::i#4 +Coalesced [121] main::sprite_idx#9 ← main::sprite_idx#2 +Coalesced (already) [122] main::active_balls#21 ← main::active_balls#2 +Not coalescing [123] main::timer#21 ← main::timer#1 +Coalesced (already) [124] main::active_balls#23 ← main::active_balls#2 +Coalesced (already) [125] main::timer#22 ← main::timer#3 +Coalesced [126] rand_state#54 ← rand_state#17 +Coalesced [134] rand_state#55 ← rand_state#11 +Coalesced [142] main::i#15 ← main::i#2 +Coalesced (already) [143] rand_state#56 ← rand_state#11 +Coalesced [144] main::initNES1_i#3 ← main::initNES1_i#1 +Coalesced [158] ppuDataTransfer::i#6 ← ppuDataTransfer::i#1 +Coalesced [159] ppuDataTransfer::cpuSrc#7 ← ppuDataTransfer::cpuSrc#1 +Coalesced [172] ppuDataFill::i#6 ← ppuDataFill::i#1 Coalesced down to 16 phi equivalence classes Culled Empty Block (label) __start::@2 Culled Empty Block (label) main::initNES1_@6 @@ -2036,162 +2047,157 @@ main::@14: scope:[main] from main::@13 [68] *((byte*) 8193) ← (byte) $18 to:main::@3 main::@7: scope:[main] from main::@6 - [69] (word~) main::$40 ← (word) main::i#10 << (byte) 3 - [70] (word*~) main::$61 ← (word*)(const struct $0*) balls + (word~) main::$40 - [71] (word*~) main::$62 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$40 - [72] (word*~) main::$63 ← (word*)(const struct $0*) balls + (word~) main::$40 + [69] (word~) main::$44 ← (word) main::i#10 << (byte) 3 + [70] (word*~) main::$61 ← (word*)(const struct $0*) balls + (word~) main::$44 + [71] (word*~) main::$62 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$44 + [72] (word*~) main::$63 ← (word*)(const struct $0*) balls + (word~) main::$44 [73] *((word*~) main::$63) ← *((word*~) main::$61) + *((word*~) main::$62) - [74] (word*~) main::$64 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$40 - [75] (word*~) main::$65 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$40 + [74] (word*~) main::$64 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 + [75] (word*~) main::$65 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 [76] *((word*~) main::$65) ← *((word*~) main::$64) + (byte) $10 - [77] (word*~) main::$66 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$40 - [78] (word*~) main::$67 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$40 - [79] (word*~) main::$68 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$40 + [77] (word*~) main::$66 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 + [78] (word*~) main::$67 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 + [79] (word*~) main::$68 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 [80] *((word*~) main::$68) ← *((word*~) main::$66) + *((word*~) main::$67) - [81] (word*~) main::$69 ← (word*)(const struct $0*) balls + (word~) main::$40 + [81] (word*~) main::$69 ← (word*)(const struct $0*) balls + (word~) main::$44 [82] (word~) main::$20 ← *((word*~) main::$69) >> (byte) 8 [83] if((word~) main::$20>=(byte) 8) goto main::@9 to:main::@11 main::@11: scope:[main] from main::@7 - [84] (word~) main::$45 ← (word) main::i#10 << (byte) 3 - [85] (word*~) main::$72 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$45 - [86] (word*~) main::$73 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$45 - [87] *((word*~) main::$73) ← *((word*~) main::$72) ^ (word) $ffff + [84] (word*~) main::$72 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$44 + [85] (word*~) main::$73 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$44 + [86] *((word*~) main::$73) ← *((word*~) main::$72) ^ (word) $ffff to:main::@9 main::@9: scope:[main] from main::@11 main::@7 - [88] (word~) main::$44 ← (word) main::i#10 << (byte) 3 - [89] (word*~) main::$70 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 - [90] (word~) main::$23 ← *((word*~) main::$70) >> (byte) 8 - [91] (word*~) main::$71 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 - [92] (word~) main::$25 ← *((word*~) main::$71) >> (byte) 8 - [93] (byte~) main::$26 ← (byte) main::h_bar#1 + (byte) 8 - [94] if((word~) main::$23<(byte) main::h_bar#1) goto main::@10 + [87] (word*~) main::$70 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 + [88] (word~) main::$23 ← *((word*~) main::$70) >> (byte) 8 + [89] (word*~) main::$71 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 + [90] (word~) main::$25 ← *((word*~) main::$71) >> (byte) 8 + [91] (byte~) main::$26 ← (byte) main::h_bar#1 + (byte) 8 + [92] if((word~) main::$23<(byte) main::h_bar#1) goto main::@10 to:main::@24 main::@24: scope:[main] from main::@9 - [95] if((word~) main::$25>=(byte~) main::$26) goto main::@10 + [93] if((word~) main::$25>=(byte~) main::$26) goto main::@10 to:main::@12 main::@12: scope:[main] from main::@24 - [96] (word~) main::$53 ← (word) main::i#10 << (byte) 3 - [97] (word*~) main::$76 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$53 - [98] (word*~) main::$77 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$53 - [99] *((word*~) main::$77) ← *((word*~) main::$76) ^ (word) $ffff - [100] (byte~) main::$30 ← (byte) main::h_bar#1 - (byte) 2 - [101] (word~) main::$56 ← (word)(byte~) main::$30 - [102] (word~) main::$31 ← (word~) main::$56 << (byte) 8 - [103] (word*~) main::$78 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$53 - [104] *((word*~) main::$78) ← (word~) main::$31 + [94] (word*~) main::$76 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 + [95] (word*~) main::$77 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 + [96] *((word*~) main::$77) ← *((word*~) main::$76) ^ (word) $ffff + [97] (byte~) main::$30 ← (byte) main::h_bar#1 - (byte) 2 + [98] (word~) main::$56 ← (word)(byte~) main::$30 + [99] (word~) main::$31 ← (word~) main::$56 << (byte) 8 + [100] (word*~) main::$78 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 + [101] *((word*~) main::$78) ← (word~) main::$31 to:main::@10 main::@10: scope:[main] from main::@12 main::@24 main::@9 - [105] (word~) main::$50 ← (word) main::i#10 << (byte) 3 - [106] (word*~) main::$74 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$50 - [107] (word~) main::$32 ← *((word*~) main::$74) >> (byte) 8 - [108] (byte~) main::$48 ← (byte) main::sprite_idx#3 << (byte) 2 - [109] *((byte*)(const struct SpriteData*) SPRITE_BUFFER + (byte~) main::$48) ← (byte)(word~) main::$32 - [110] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_TILE + (byte~) main::$48) ← (byte) $a - [111] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_ATTRIBUTES + (byte~) main::$48) ← (byte) 3 - [112] (word*~) main::$75 ← (word*)(const struct $0*) balls + (word~) main::$50 - [113] (word~) main::$33 ← *((word*~) main::$75) >> (byte) 8 - [114] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X + (byte~) main::$48) ← (byte)(word~) main::$33 - [115] (byte) main::sprite_idx#2 ← ++ (byte) main::sprite_idx#3 - [116] (word) main::i#4 ← ++ (word) main::i#10 + [102] (word*~) main::$74 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 + [103] (word~) main::$32 ← *((word*~) main::$74) >> (byte) 8 + [104] (byte~) main::$48 ← (byte) main::sprite_idx#3 << (byte) 2 + [105] *((byte*)(const struct SpriteData*) SPRITE_BUFFER + (byte~) main::$48) ← (byte)(word~) main::$32 + [106] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_TILE + (byte~) main::$48) ← (byte) $a + [107] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_ATTRIBUTES + (byte~) main::$48) ← (byte) 3 + [108] (word*~) main::$75 ← (word*)(const struct $0*) balls + (word~) main::$44 + [109] (word~) main::$33 ← *((word*~) main::$75) >> (byte) 8 + [110] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X + (byte~) main::$48) ← (byte)(word~) main::$33 + [111] (byte) main::sprite_idx#2 ← ++ (byte) main::sprite_idx#3 + [112] (word) main::i#4 ← ++ (word) main::i#10 to:main::@6 main::@25: scope:[main] from main::@15 - [117] (byte) main::timer#21 ← (byte) main::timer#1 + [113] (byte) main::timer#21 ← (byte) main::timer#1 to:main::@5 main::@2: scope:[main] from main::@1 - [118] phi() - [119] call rand - [120] (word) rand::return#2 ← (word) rand::return#0 + [114] phi() + [115] call rand + [116] (word) rand::return#2 ← (word) rand::return#0 to:main::@22 main::@22: scope:[main] from main::@2 - [121] (word~) main::$9 ← (word) rand::return#2 - [122] (word~) main::$10 ← (word~) main::$9 & (word) $3ff - [123] (word~) main::$35 ← (word) main::i#14 << (byte) 3 - [124] (word*~) main::$59 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$35 - [125] *((word*~) main::$59) ← (word~) main::$10 - [126] call rand - [127] (word) rand::return#3 ← (word) rand::return#0 + [117] (word~) main::$9 ← (word) rand::return#2 + [118] (word~) main::$10 ← (word~) main::$9 & (word) $3ff + [119] (word~) main::$36 ← (word) main::i#14 << (byte) 3 + [120] (word*~) main::$59 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$36 + [121] *((word*~) main::$59) ← (word~) main::$10 + [122] call rand + [123] (word) rand::return#3 ← (word) rand::return#0 to:main::@23 main::@23: scope:[main] from main::@22 - [128] (word~) main::$11 ← (word) rand::return#3 - [129] (byte~) main::$12 ← (word~) main::$11 & (byte) $ff - [130] (word~) main::$36 ← (word) main::i#14 << (byte) 3 - [131] (word*~) main::$60 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$36 - [132] *((word*~) main::$60) ← (byte~) main::$12 - [133] (word) main::i#2 ← ++ (word) main::i#14 + [124] (word~) main::$11 ← (word) rand::return#3 + [125] (byte~) main::$12 ← (word~) main::$11 & (byte) $ff + [126] (word*~) main::$60 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$36 + [127] *((word*~) main::$60) ← (byte~) main::$12 + [128] (word) main::i#2 ← ++ (word) main::i#14 to:main::@1 (void()) ppuDataTransfer((nomodify void*) ppuDataTransfer::ppuData , (nomodify void*) ppuDataTransfer::cpuData , (word) ppuDataTransfer::size) ppuDataTransfer: scope:[ppuDataTransfer] from main::@17 main::@21 - [134] (nomodify void*) ppuDataTransfer::cpuData#2 ← phi( main::@17/(void*)(const to_nomodify byte*) palette main::@21/(void*)(const to_nomodify byte*) h_bar_tilemap ) - [134] (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 ← phi( main::@17/(void*)(const nomodify byte*) PPU_PALETTE main::@21/(void*) 8256 ) + [129] (nomodify void*) ppuDataTransfer::cpuData#2 ← phi( main::@17/(void*)(const to_nomodify byte*) palette main::@21/(void*)(const to_nomodify byte*) h_bar_tilemap ) + [129] (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 ← phi( main::@17/(void*)(const nomodify byte*) PPU_PALETTE main::@21/(void*) 8256 ) to:ppuDataTransfer::ppuDataPrepare1 ppuDataTransfer::ppuDataPrepare1: scope:[ppuDataTransfer] from ppuDataTransfer - [135] (byte~) ppuDataTransfer::ppuDataPrepare1_$0 ← > (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 - [136] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataTransfer::ppuDataPrepare1_$0 - [137] (byte~) ppuDataTransfer::ppuDataPrepare1_$1 ← < (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 - [138] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataTransfer::ppuDataPrepare1_$1 + [130] (byte~) ppuDataTransfer::ppuDataPrepare1_$0 ← > (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 + [131] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataTransfer::ppuDataPrepare1_$0 + [132] (byte~) ppuDataTransfer::ppuDataPrepare1_$1 ← < (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 + [133] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataTransfer::ppuDataPrepare1_$1 to:ppuDataTransfer::@3 ppuDataTransfer::@3: scope:[ppuDataTransfer] from ppuDataTransfer::ppuDataPrepare1 - [139] (byte*) ppuDataTransfer::cpuSrc#6 ← (byte*)(nomodify void*) ppuDataTransfer::cpuData#2 + [134] (byte*) ppuDataTransfer::cpuSrc#6 ← (byte*)(nomodify void*) ppuDataTransfer::cpuData#2 to:ppuDataTransfer::@1 ppuDataTransfer::@1: scope:[ppuDataTransfer] from ppuDataTransfer::@3 ppuDataTransfer::@4 - [140] (byte*) ppuDataTransfer::cpuSrc#2 ← phi( ppuDataTransfer::@3/(byte*) ppuDataTransfer::cpuSrc#6 ppuDataTransfer::@4/(byte*) ppuDataTransfer::cpuSrc#1 ) - [140] (word) ppuDataTransfer::i#2 ← phi( ppuDataTransfer::@3/(word) 0 ppuDataTransfer::@4/(word) ppuDataTransfer::i#1 ) - [141] if((word) ppuDataTransfer::i#2<(byte) $20*(const byte) SIZEOF_BYTE) goto ppuDataTransfer::@2 + [135] (byte*) ppuDataTransfer::cpuSrc#2 ← phi( ppuDataTransfer::@3/(byte*) ppuDataTransfer::cpuSrc#6 ppuDataTransfer::@4/(byte*) ppuDataTransfer::cpuSrc#1 ) + [135] (word) ppuDataTransfer::i#2 ← phi( ppuDataTransfer::@3/(word) 0 ppuDataTransfer::@4/(word) ppuDataTransfer::i#1 ) + [136] if((word) ppuDataTransfer::i#2<(byte) $20*(const byte) SIZEOF_BYTE) goto ppuDataTransfer::@2 to:ppuDataTransfer::@return ppuDataTransfer::@return: scope:[ppuDataTransfer] from ppuDataTransfer::@1 - [142] return + [137] return to:@return ppuDataTransfer::@2: scope:[ppuDataTransfer] from ppuDataTransfer::@1 - [143] (byte) ppuDataTransfer::ppuDataPut1_val#0 ← *((byte*) ppuDataTransfer::cpuSrc#2) + [138] (byte) ppuDataTransfer::ppuDataPut1_val#0 ← *((byte*) ppuDataTransfer::cpuSrc#2) to:ppuDataTransfer::ppuDataPut1 ppuDataTransfer::ppuDataPut1: scope:[ppuDataTransfer] from ppuDataTransfer::@2 - [144] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) ppuDataTransfer::ppuDataPut1_val#0 + [139] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) ppuDataTransfer::ppuDataPut1_val#0 to:ppuDataTransfer::@4 ppuDataTransfer::@4: scope:[ppuDataTransfer] from ppuDataTransfer::ppuDataPut1 - [145] (byte*) ppuDataTransfer::cpuSrc#1 ← ++ (byte*) ppuDataTransfer::cpuSrc#2 - [146] (word) ppuDataTransfer::i#1 ← ++ (word) ppuDataTransfer::i#2 + [140] (byte*) ppuDataTransfer::cpuSrc#1 ← ++ (byte*) ppuDataTransfer::cpuSrc#2 + [141] (word) ppuDataTransfer::i#1 ← ++ (word) ppuDataTransfer::i#2 to:ppuDataTransfer::@1 (void()) ppuDataFill((nomodify void*) ppuDataFill::ppuData , (byte) ppuDataFill::val , (word) ppuDataFill::size) ppuDataFill: scope:[ppuDataFill] from main::@19 main::@20 - [147] (word) ppuDataFill::size#3 ← phi( main::@19/(word)(number) $20*(number) $1e main::@20/(byte) $40 ) - [147] (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 ← phi( main::@19/(void*)(const nomodify byte*) PPU_NAME_TABLE_0 main::@20/(void*)(const nomodify byte*) PPU_ATTRIBUTE_TABLE_0 ) + [142] (word) ppuDataFill::size#3 ← phi( main::@19/(word)(number) $20*(number) $1e main::@20/(byte) $40 ) + [142] (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 ← phi( main::@19/(void*)(const nomodify byte*) PPU_NAME_TABLE_0 main::@20/(void*)(const nomodify byte*) PPU_ATTRIBUTE_TABLE_0 ) to:ppuDataFill::ppuDataPrepare1 ppuDataFill::ppuDataPrepare1: scope:[ppuDataFill] from ppuDataFill - [148] (byte~) ppuDataFill::ppuDataPrepare1_$0 ← > (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 - [149] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataFill::ppuDataPrepare1_$0 - [150] (byte~) ppuDataFill::ppuDataPrepare1_$1 ← < (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 - [151] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataFill::ppuDataPrepare1_$1 + [143] (byte~) ppuDataFill::ppuDataPrepare1_$0 ← > (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 + [144] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataFill::ppuDataPrepare1_$0 + [145] (byte~) ppuDataFill::ppuDataPrepare1_$1 ← < (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 + [146] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataFill::ppuDataPrepare1_$1 to:ppuDataFill::@1 ppuDataFill::@1: scope:[ppuDataFill] from ppuDataFill::@2 ppuDataFill::ppuDataPrepare1 - [152] (word) ppuDataFill::i#2 ← phi( ppuDataFill::ppuDataPrepare1/(word) 0 ppuDataFill::@2/(word) ppuDataFill::i#1 ) - [153] if((word) ppuDataFill::i#2<(word) ppuDataFill::size#3) goto ppuDataFill::ppuDataPut1 + [147] (word) ppuDataFill::i#2 ← phi( ppuDataFill::ppuDataPrepare1/(word) 0 ppuDataFill::@2/(word) ppuDataFill::i#1 ) + [148] if((word) ppuDataFill::i#2<(word) ppuDataFill::size#3) goto ppuDataFill::ppuDataPut1 to:ppuDataFill::@return ppuDataFill::@return: scope:[ppuDataFill] from ppuDataFill::@1 - [154] return + [149] return to:@return ppuDataFill::ppuDataPut1: scope:[ppuDataFill] from ppuDataFill::@1 - [155] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) 0 + [150] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) 0 to:ppuDataFill::@2 ppuDataFill::@2: scope:[ppuDataFill] from ppuDataFill::ppuDataPut1 - [156] (word) ppuDataFill::i#1 ← ++ (word) ppuDataFill::i#2 + [151] (word) ppuDataFill::i#1 ← ++ (word) ppuDataFill::i#2 to:ppuDataFill::@1 (word()) rand() rand: scope:[rand] from main::@2 main::@22 - [157] (word) rand_state#10 ← phi( main::@2/(word) rand_state#17 main::@22/(word) rand_state#11 ) - [158] (word~) rand::$0 ← (word) rand_state#10 << (byte) 7 - [159] (word) rand_state#0 ← (word) rand_state#10 ^ (word~) rand::$0 - [160] (word~) rand::$1 ← (word) rand_state#0 >> (byte) 9 - [161] (word) rand_state#1 ← (word) rand_state#0 ^ (word~) rand::$1 - [162] (word~) rand::$2 ← (word) rand_state#1 << (byte) 8 - [163] (word) rand_state#11 ← (word) rand_state#1 ^ (word~) rand::$2 - [164] (word) rand::return#0 ← (word) rand_state#11 + [152] (word) rand_state#10 ← phi( main::@2/(word) rand_state#17 main::@22/(word) rand_state#11 ) + [153] (word~) rand::$0 ← (word) rand_state#10 << (byte) 7 + [154] (word) rand_state#0 ← (word) rand_state#10 ^ (word~) rand::$0 + [155] (word~) rand::$1 ← (word) rand_state#0 >> (byte) 9 + [156] (word) rand_state#1 ← (word) rand_state#0 ^ (word~) rand::$1 + [157] (word~) rand::$2 ← (word) rand_state#1 << (byte) 8 + [158] (word) rand_state#11 ← (word) rand_state#1 ^ (word~) rand::$2 + [159] (word) rand::return#0 ← (word) rand_state#11 to:rand::@return rand::@return: scope:[rand] from rand - [165] return + [160] return to:@return @@ -2240,7 +2246,7 @@ VARIABLE REGISTER WEIGHTS (signed word()) main() (word~) main::$10 67.33333333333333 (word~) main::$11 202.0 -(byte~) main::$12 67.33333333333333 +(byte~) main::$12 101.0 (byte~) main::$14 202.0 (word~) main::$20 2002.0 (word~) main::$23 500.5 @@ -2250,15 +2256,10 @@ VARIABLE REGISTER WEIGHTS (word~) main::$31 1001.0 (word~) main::$32 500.5 (word~) main::$33 1001.0 -(word~) main::$35 202.0 -(word~) main::$36 202.0 +(word~) main::$36 43.285714285714285 (byte~) main::$38 151.5 -(word~) main::$40 834.1666666666666 -(word~) main::$44 1001.0 -(word~) main::$45 1501.5 +(word~) main::$44 487.6666666666668 (byte~) main::$48 834.1666666666667 -(word~) main::$50 429.0 -(word~) main::$53 572.0 (word~) main::$56 2002.0 (word*~) main::$59 202.0 (word*~) main::$60 202.0 @@ -2284,12 +2285,12 @@ VARIABLE REGISTER WEIGHTS (byte) main::active_balls (byte) main::active_balls#1 75.75 (byte) main::active_balls#2 56.11111111111111 -(byte) main::active_balls#8 25.545454545454547 +(byte) main::active_balls#8 27.54901960784314 (byte) main::h_bar -(byte) main::h_bar#1 51.69354838709677 +(byte) main::h_bar#1 55.258620689655174 (word) main::i -(word) main::i#10 163.42857142857142 -(word) main::i#14 29.705882352941178 +(word) main::i#10 88.97777777777777 +(word) main::i#14 25.25 (word) main::i#2 202.0 (word) main::i#4 2002.0 (byte) main::initNES1_i @@ -2300,14 +2301,14 @@ VARIABLE REGISTER WEIGHTS (signed word) main::return (byte) main::sprite_idx (byte) main::sprite_idx#2 1001.0 -(byte) main::sprite_idx#3 62.5625 +(byte) main::sprite_idx#3 68.25 (byte) main::timer (byte) main::timer#1 101.0 -(byte) main::timer#15 5.50909090909091 +(byte) main::timer#15 5.9411764705882355 (byte) main::timer#21 202.0 (byte) main::timer#3 57.714285714285715 (byte) main::timer_2 -(byte) main::timer_2#1 4.522388059701492 +(byte) main::timer_2#1 4.80952380952381 (byte) main::timer_2#2 202.0 (void()) ppuDataFill((nomodify void*) ppuDataFill::ppuData , (byte) ppuDataFill::val , (word) ppuDataFill::size) (word) ppuDataFill::i @@ -2361,12 +2362,12 @@ VARIABLE REGISTER WEIGHTS (word) rand_state#0 1501.5 (word) rand_state#1 1501.5 (word) rand_state#10 1102.0 -(word) rand_state#11 122.44444444444446 +(word) rand_state#11 129.64705882352942 (word) rand_state#17 67.33333333333333 (volatile byte) scroll_y loadstore 105.0 interrupt(HARDWARE_STACK)(void()) vblank() (struct SpriteData*) vblank::ppuSpriteBufferDmaTransfer1_spriteBuffer -(volatile byte) vblank_hit loadstore 8.65625 +(volatile byte) vblank_hit loadstore 9.008130081300813 Initial phi equivalence classes [ main::initNES1_i#2 main::initNES1_i#1 ] @@ -2392,7 +2393,7 @@ Added variable main::h_bar#1 to live range equivalence class [ main::h_bar#1 ] Added variable main::$14 to live range equivalence class [ main::$14 ] Added variable main::timer#1 to live range equivalence class [ main::timer#1 ] Added variable main::$38 to live range equivalence class [ main::$38 ] -Added variable main::$40 to live range equivalence class [ main::$40 ] +Added variable main::$44 to live range equivalence class [ main::$44 ] Added variable main::$61 to live range equivalence class [ main::$61 ] Added variable main::$62 to live range equivalence class [ main::$62 ] Added variable main::$63 to live range equivalence class [ main::$63 ] @@ -2403,23 +2404,19 @@ Added variable main::$67 to live range equivalence class [ main::$67 ] Added variable main::$68 to live range equivalence class [ main::$68 ] Added variable main::$69 to live range equivalence class [ main::$69 ] Added variable main::$20 to live range equivalence class [ main::$20 ] -Added variable main::$45 to live range equivalence class [ main::$45 ] Added variable main::$72 to live range equivalence class [ main::$72 ] Added variable main::$73 to live range equivalence class [ main::$73 ] -Added variable main::$44 to live range equivalence class [ main::$44 ] Added variable main::$70 to live range equivalence class [ main::$70 ] Added variable main::$23 to live range equivalence class [ main::$23 ] Added variable main::$71 to live range equivalence class [ main::$71 ] Added variable main::$25 to live range equivalence class [ main::$25 ] Added variable main::$26 to live range equivalence class [ main::$26 ] -Added variable main::$53 to live range equivalence class [ main::$53 ] Added variable main::$76 to live range equivalence class [ main::$76 ] Added variable main::$77 to live range equivalence class [ main::$77 ] Added variable main::$30 to live range equivalence class [ main::$30 ] Added variable main::$56 to live range equivalence class [ main::$56 ] Added variable main::$31 to live range equivalence class [ main::$31 ] Added variable main::$78 to live range equivalence class [ main::$78 ] -Added variable main::$50 to live range equivalence class [ main::$50 ] Added variable main::$74 to live range equivalence class [ main::$74 ] Added variable main::$32 to live range equivalence class [ main::$32 ] Added variable main::$48 to live range equivalence class [ main::$48 ] @@ -2428,12 +2425,11 @@ Added variable main::$33 to live range equivalence class [ main::$33 ] Added variable rand::return#2 to live range equivalence class [ rand::return#2 ] Added variable main::$9 to live range equivalence class [ main::$9 ] Added variable main::$10 to live range equivalence class [ main::$10 ] -Added variable main::$35 to live range equivalence class [ main::$35 ] +Added variable main::$36 to live range equivalence class [ main::$36 ] Added variable main::$59 to live range equivalence class [ main::$59 ] Added variable rand::return#3 to live range equivalence class [ rand::return#3 ] Added variable main::$11 to live range equivalence class [ main::$11 ] Added variable main::$12 to live range equivalence class [ main::$12 ] -Added variable main::$36 to live range equivalence class [ main::$36 ] Added variable main::$60 to live range equivalence class [ main::$60 ] Added variable ppuDataTransfer::ppuDataPrepare1_$0 to live range equivalence class [ ppuDataTransfer::ppuDataPrepare1_$0 ] Added variable ppuDataTransfer::ppuDataPrepare1_$1 to live range equivalence class [ ppuDataTransfer::ppuDataPrepare1_$1 ] @@ -2470,7 +2466,7 @@ Complete equivalence classes [ main::$14 ] [ main::timer#1 ] [ main::$38 ] -[ main::$40 ] +[ main::$44 ] [ main::$61 ] [ main::$62 ] [ main::$63 ] @@ -2481,23 +2477,19 @@ Complete equivalence classes [ main::$68 ] [ main::$69 ] [ main::$20 ] -[ main::$45 ] [ main::$72 ] [ main::$73 ] -[ main::$44 ] [ main::$70 ] [ main::$23 ] [ main::$71 ] [ main::$25 ] [ main::$26 ] -[ main::$53 ] [ main::$76 ] [ main::$77 ] [ main::$30 ] [ main::$56 ] [ main::$31 ] [ main::$78 ] -[ main::$50 ] [ main::$74 ] [ main::$32 ] [ main::$48 ] @@ -2506,12 +2498,11 @@ Complete equivalence classes [ rand::return#2 ] [ main::$9 ] [ main::$10 ] -[ main::$35 ] +[ main::$36 ] [ main::$59 ] [ rand::return#3 ] [ main::$11 ] [ main::$12 ] -[ main::$36 ] [ main::$60 ] [ ppuDataTransfer::ppuDataPrepare1_$0 ] [ ppuDataTransfer::ppuDataPrepare1_$1 ] @@ -2547,7 +2538,7 @@ Allocated zp[1]:31 [ main::h_bar#1 ] Allocated zp[1]:32 [ main::$14 ] Allocated zp[1]:33 [ main::timer#1 ] Allocated zp[1]:34 [ main::$38 ] -Allocated zp[2]:35 [ main::$40 ] +Allocated zp[2]:35 [ main::$44 ] Allocated zp[2]:37 [ main::$61 ] Allocated zp[2]:39 [ main::$62 ] Allocated zp[2]:41 [ main::$63 ] @@ -2558,49 +2549,44 @@ Allocated zp[2]:49 [ main::$67 ] Allocated zp[2]:51 [ main::$68 ] Allocated zp[2]:53 [ main::$69 ] Allocated zp[2]:55 [ main::$20 ] -Allocated zp[2]:57 [ main::$45 ] -Allocated zp[2]:59 [ main::$72 ] -Allocated zp[2]:61 [ main::$73 ] -Allocated zp[2]:63 [ main::$44 ] -Allocated zp[2]:65 [ main::$70 ] -Allocated zp[2]:67 [ main::$23 ] -Allocated zp[2]:69 [ main::$71 ] -Allocated zp[2]:71 [ main::$25 ] -Allocated zp[1]:73 [ main::$26 ] -Allocated zp[2]:74 [ main::$53 ] -Allocated zp[2]:76 [ main::$76 ] -Allocated zp[2]:78 [ main::$77 ] -Allocated zp[1]:80 [ main::$30 ] -Allocated zp[2]:81 [ main::$56 ] -Allocated zp[2]:83 [ main::$31 ] -Allocated zp[2]:85 [ main::$78 ] -Allocated zp[2]:87 [ main::$50 ] -Allocated zp[2]:89 [ main::$74 ] -Allocated zp[2]:91 [ main::$32 ] -Allocated zp[1]:93 [ main::$48 ] -Allocated zp[2]:94 [ main::$75 ] -Allocated zp[2]:96 [ main::$33 ] -Allocated zp[2]:98 [ rand::return#2 ] -Allocated zp[2]:100 [ main::$9 ] -Allocated zp[2]:102 [ main::$10 ] -Allocated zp[2]:104 [ main::$35 ] -Allocated zp[2]:106 [ main::$59 ] -Allocated zp[2]:108 [ rand::return#3 ] -Allocated zp[2]:110 [ main::$11 ] -Allocated zp[1]:112 [ main::$12 ] -Allocated zp[2]:113 [ main::$36 ] -Allocated zp[2]:115 [ main::$60 ] -Allocated zp[1]:117 [ ppuDataTransfer::ppuDataPrepare1_$0 ] -Allocated zp[1]:118 [ ppuDataTransfer::ppuDataPrepare1_$1 ] -Allocated zp[1]:119 [ ppuDataTransfer::ppuDataPut1_val#0 ] -Allocated zp[1]:120 [ ppuDataFill::ppuDataPrepare1_$0 ] -Allocated zp[1]:121 [ ppuDataFill::ppuDataPrepare1_$1 ] -Allocated zp[2]:122 [ rand::$0 ] -Allocated zp[2]:124 [ rand_state#0 ] -Allocated zp[2]:126 [ rand::$1 ] -Allocated zp[2]:128 [ rand_state#1 ] -Allocated zp[2]:130 [ rand::$2 ] -Allocated zp[2]:132 [ rand::return#0 ] +Allocated zp[2]:57 [ main::$72 ] +Allocated zp[2]:59 [ main::$73 ] +Allocated zp[2]:61 [ main::$70 ] +Allocated zp[2]:63 [ main::$23 ] +Allocated zp[2]:65 [ main::$71 ] +Allocated zp[2]:67 [ main::$25 ] +Allocated zp[1]:69 [ main::$26 ] +Allocated zp[2]:70 [ main::$76 ] +Allocated zp[2]:72 [ main::$77 ] +Allocated zp[1]:74 [ main::$30 ] +Allocated zp[2]:75 [ main::$56 ] +Allocated zp[2]:77 [ main::$31 ] +Allocated zp[2]:79 [ main::$78 ] +Allocated zp[2]:81 [ main::$74 ] +Allocated zp[2]:83 [ main::$32 ] +Allocated zp[1]:85 [ main::$48 ] +Allocated zp[2]:86 [ main::$75 ] +Allocated zp[2]:88 [ main::$33 ] +Allocated zp[2]:90 [ rand::return#2 ] +Allocated zp[2]:92 [ main::$9 ] +Allocated zp[2]:94 [ main::$10 ] +Allocated zp[2]:96 [ main::$36 ] +Allocated zp[2]:98 [ main::$59 ] +Allocated zp[2]:100 [ rand::return#3 ] +Allocated zp[2]:102 [ main::$11 ] +Allocated zp[1]:104 [ main::$12 ] +Allocated zp[2]:105 [ main::$60 ] +Allocated zp[1]:107 [ ppuDataTransfer::ppuDataPrepare1_$0 ] +Allocated zp[1]:108 [ ppuDataTransfer::ppuDataPrepare1_$1 ] +Allocated zp[1]:109 [ ppuDataTransfer::ppuDataPut1_val#0 ] +Allocated zp[1]:110 [ ppuDataFill::ppuDataPrepare1_$0 ] +Allocated zp[1]:111 [ ppuDataFill::ppuDataPrepare1_$1 ] +Allocated zp[2]:112 [ rand::$0 ] +Allocated zp[2]:114 [ rand_state#0 ] +Allocated zp[2]:116 [ rand::$1 ] +Allocated zp[2]:118 [ rand_state#1 ] +Allocated zp[2]:120 [ rand::$2 ] +Allocated zp[2]:122 [ rand::return#0 ] INITIAL ASM Target platform is nes / MOS6502X @@ -2688,9 +2674,9 @@ Target platform is nes / MOS6502X .label scroll_y = $1b .label vblank_hit = $1c // The random state variable - .label rand_state = $7c + .label rand_state = $72 // The random state variable - .label rand_state_1 = $80 + .label rand_state_1 = $76 // The random state variable .label rand_state_2 = $19 .segment Code @@ -2763,29 +2749,24 @@ vblank: { } // main main: { - .label __9 = $64 - .label __10 = $66 - .label __11 = $6e - .label __12 = $70 + .label __9 = $5c + .label __10 = $5e + .label __11 = $66 + .label __12 = $68 .label __14 = $20 .label __20 = $37 - .label __23 = $43 - .label __25 = $47 - .label __26 = $49 - .label __30 = $50 - .label __31 = $53 - .label __32 = $5b - .label __33 = $60 - .label __35 = $68 - .label __36 = $71 + .label __23 = $3f + .label __25 = $43 + .label __26 = $45 + .label __30 = $4a + .label __31 = $4d + .label __32 = $53 + .label __33 = $58 + .label __36 = $60 .label __38 = $22 - .label __40 = $23 - .label __44 = $3f - .label __45 = $39 - .label __48 = $5d - .label __50 = $57 - .label __53 = $4a - .label __56 = $51 + .label __44 = $23 + .label __48 = $55 + .label __56 = $4b .label initNES1_waitForVBlank1___0 = $1d .label initNES1_waitForVBlank2___0 = $1e .label initNES1_i = 2 @@ -2797,8 +2778,8 @@ main: { .label sprite_idx = $a .label i_1 = 8 .label timer_1 = 7 - .label __59 = $6a - .label __60 = $73 + .label __59 = $62 + .label __60 = $69 .label __61 = $25 .label __62 = $27 .label __63 = $29 @@ -2808,15 +2789,15 @@ main: { .label __67 = $31 .label __68 = $33 .label __69 = $35 - .label __70 = $41 - .label __71 = $45 - .label __72 = $3b - .label __73 = $3d - .label __74 = $59 - .label __75 = $5e - .label __76 = $4c - .label __77 = $4e - .label __78 = $55 + .label __70 = $3d + .label __71 = $41 + .label __72 = $39 + .label __73 = $3b + .label __74 = $51 + .label __75 = $56 + .label __76 = $46 + .label __77 = $48 + .label __78 = $4f jmp initNES1 // main::initNES1 initNES1: @@ -2941,14 +2922,14 @@ main: { __b17: // [38] call ppuDataTransfer // Transfer the palette - // [134] phi from main::@17 to ppuDataTransfer [phi:main::@17->ppuDataTransfer] + // [129] phi from main::@17 to ppuDataTransfer [phi:main::@17->ppuDataTransfer] ppuDataTransfer_from___b17: - // [134] phi (nomodify void*) ppuDataTransfer::cpuData#2 = (void*)(const to_nomodify byte*) palette [phi:main::@17->ppuDataTransfer#0] -- pvoz1=pvoc1 + // [129] phi (nomodify void*) ppuDataTransfer::cpuData#2 = (void*)(const to_nomodify byte*) palette [phi:main::@17->ppuDataTransfer#0] -- pvoz1=pvoc1 lda #palette sta.z ppuDataTransfer.cpuData+1 - // [134] phi (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 = (void*)(const nomodify byte*) PPU_PALETTE [phi:main::@17->ppuDataTransfer#1] -- pvoz1=pvoc1 + // [129] phi (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 = (void*)(const nomodify byte*) PPU_PALETTE [phi:main::@17->ppuDataTransfer#1] -- pvoz1=pvoc1 lda #PPU_PALETTE @@ -2961,14 +2942,14 @@ main: { __b19: // [40] call ppuDataFill // Fill the PPU attribute table - // [147] phi from main::@19 to ppuDataFill [phi:main::@19->ppuDataFill] + // [142] phi from main::@19 to ppuDataFill [phi:main::@19->ppuDataFill] ppuDataFill_from___b19: - // [147] phi (word) ppuDataFill::size#3 = (word)(number) $20*(number) $1e [phi:main::@19->ppuDataFill#0] -- vwuz1=vwuc1 + // [142] phi (word) ppuDataFill::size#3 = (word)(number) $20*(number) $1e [phi:main::@19->ppuDataFill#0] -- vwuz1=vwuc1 lda #<$20*$1e sta.z ppuDataFill.size lda #>$20*$1e sta.z ppuDataFill.size+1 - // [147] phi (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 = (void*)(const nomodify byte*) PPU_NAME_TABLE_0 [phi:main::@19->ppuDataFill#1] -- pvoz1=pvoc1 + // [142] phi (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 = (void*)(const nomodify byte*) PPU_NAME_TABLE_0 [phi:main::@19->ppuDataFill#1] -- pvoz1=pvoc1 lda #PPU_NAME_TABLE_0 @@ -2980,14 +2961,14 @@ main: { // main::@20 __b20: // [42] call ppuDataFill - // [147] phi from main::@20 to ppuDataFill [phi:main::@20->ppuDataFill] + // [142] phi from main::@20 to ppuDataFill [phi:main::@20->ppuDataFill] ppuDataFill_from___b20: - // [147] phi (word) ppuDataFill::size#3 = (byte) $40 [phi:main::@20->ppuDataFill#0] -- vwuz1=vbuc1 + // [142] phi (word) ppuDataFill::size#3 = (byte) $40 [phi:main::@20->ppuDataFill#0] -- vwuz1=vbuc1 lda #<$40 sta.z ppuDataFill.size lda #>$40 sta.z ppuDataFill.size+1 - // [147] phi (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 = (void*)(const nomodify byte*) PPU_ATTRIBUTE_TABLE_0 [phi:main::@20->ppuDataFill#1] -- pvoz1=pvoc1 + // [142] phi (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 = (void*)(const nomodify byte*) PPU_ATTRIBUTE_TABLE_0 [phi:main::@20->ppuDataFill#1] -- pvoz1=pvoc1 lda #PPU_ATTRIBUTE_TABLE_0 @@ -2999,14 +2980,14 @@ main: { // main::@21 __b21: // [44] call ppuDataTransfer - // [134] phi from main::@21 to ppuDataTransfer [phi:main::@21->ppuDataTransfer] + // [129] phi from main::@21 to ppuDataTransfer [phi:main::@21->ppuDataTransfer] ppuDataTransfer_from___b21: - // [134] phi (nomodify void*) ppuDataTransfer::cpuData#2 = (void*)(const to_nomodify byte*) h_bar_tilemap [phi:main::@21->ppuDataTransfer#0] -- pvoz1=pvoc1 + // [129] phi (nomodify void*) ppuDataTransfer::cpuData#2 = (void*)(const to_nomodify byte*) h_bar_tilemap [phi:main::@21->ppuDataTransfer#0] -- pvoz1=pvoc1 lda #h_bar_tilemap sta.z ppuDataTransfer.cpuData+1 - // [134] phi (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 = (void*) 8256 [phi:main::@21->ppuDataTransfer#1] -- pvoz1=pvoc1 + // [129] phi (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 = (void*) 8256 [phi:main::@21->ppuDataTransfer#1] -- pvoz1=pvoc1 lda #<$2040 sta.z ppuDataTransfer.ppuDataPrepare1_ppuData lda #>$2040 @@ -3186,39 +3167,39 @@ main: { jmp __b3 // main::@7 __b7: - // [69] (word~) main::$40 ← (word) main::i#10 << (byte) 3 -- vwuz1=vwuz2_rol_3 + // [69] (word~) main::$44 ← (word) main::i#10 << (byte) 3 -- vwuz1=vwuz2_rol_3 lda.z i_1 asl - sta.z __40 + sta.z __44 lda.z i_1+1 rol - sta.z __40+1 - asl.z __40 - rol.z __40+1 - asl.z __40 - rol.z __40+1 - // [70] (word*~) main::$61 ← (word*)(const struct $0*) balls + (word~) main::$40 -- pwuz1=pwuc1_plus_vwuz2 - lda.z __40 + sta.z __44+1 + asl.z __44 + rol.z __44+1 + asl.z __44 + rol.z __44+1 + // [70] (word*~) main::$61 ← (word*)(const struct $0*) balls + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __44 clc adc #balls sta.z __61+1 - // [71] (word*~) main::$62 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$40 -- pwuz1=pwuc1_plus_vwuz2 - lda.z __40 + // [71] (word*~) main::$62 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __44 clc adc #balls+4 sta.z __62+1 - // [72] (word*~) main::$63 ← (word*)(const struct $0*) balls + (word~) main::$40 -- pwuz1=pwuc1_plus_vwuz2 - lda.z __40 + // [72] (word*~) main::$63 ← (word*)(const struct $0*) balls + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __44 clc adc #balls sta.z __63+1 // [73] *((word*~) main::$63) ← *((word*~) main::$61) + *((word*~) main::$62) -- _deref_pwuz1=_deref_pwuz2_plus__deref_pwuz3 @@ -3231,20 +3212,20 @@ main: { lda (__61),y adc (__62),y sta (__63),y - // [74] (word*~) main::$64 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$40 -- pwuz1=pwuc1_plus_vwuz2 - lda.z __40 + // [74] (word*~) main::$64 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __44 clc adc #balls+6 sta.z __64+1 - // [75] (word*~) main::$65 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$40 -- pwuz1=pwuc1_plus_vwuz2 - lda.z __40 + // [75] (word*~) main::$65 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __44 clc adc #balls+6 sta.z __65+1 // [76] *((word*~) main::$65) ← *((word*~) main::$64) + (byte) $10 -- _deref_pwuz1=_deref_pwuz2_plus_vwuc1 @@ -3257,28 +3238,28 @@ main: { lda (__64),y adc #>$10 sta (__65),y - // [77] (word*~) main::$66 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$40 -- pwuz1=pwuc1_plus_vwuz2 - lda.z __40 + // [77] (word*~) main::$66 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __44 clc adc #balls+2 sta.z __66+1 - // [78] (word*~) main::$67 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$40 -- pwuz1=pwuc1_plus_vwuz2 - lda.z __40 + // [78] (word*~) main::$67 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __44 clc adc #balls+6 sta.z __67+1 - // [79] (word*~) main::$68 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$40 -- pwuz1=pwuc1_plus_vwuz2 - lda.z __40 + // [79] (word*~) main::$68 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __44 clc adc #balls+2 sta.z __68+1 // [80] *((word*~) main::$68) ← *((word*~) main::$66) + *((word*~) main::$67) -- _deref_pwuz1=_deref_pwuz2_plus__deref_pwuz3 @@ -3291,12 +3272,12 @@ main: { lda (__66),y adc (__67),y sta (__68),y - // [81] (word*~) main::$69 ← (word*)(const struct $0*) balls + (word~) main::$40 -- pwuz1=pwuc1_plus_vwuz2 - lda.z __40 + // [81] (word*~) main::$69 ← (word*)(const struct $0*) balls + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __44 clc adc #balls sta.z __69+1 // [82] (word~) main::$20 ← *((word*~) main::$69) >> (byte) 8 -- vwuz1=_deref_pwuz2_ror_8 @@ -3315,34 +3296,23 @@ main: { jmp __b11 // main::@11 __b11: - // [84] (word~) main::$45 ← (word) main::i#10 << (byte) 3 -- vwuz1=vwuz2_rol_3 - lda.z i_1 - asl - sta.z __45 - lda.z i_1+1 - rol - sta.z __45+1 - asl.z __45 - rol.z __45+1 - asl.z __45 - rol.z __45+1 - // [85] (word*~) main::$72 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$45 -- pwuz1=pwuc1_plus_vwuz2 - lda.z __45 + // [84] (word*~) main::$72 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __44 clc adc #balls+4 sta.z __72+1 - // [86] (word*~) main::$73 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$45 -- pwuz1=pwuc1_plus_vwuz2 - lda.z __45 + // [85] (word*~) main::$73 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __44 clc adc #balls+4 sta.z __73+1 - // [87] *((word*~) main::$73) ← *((word*~) main::$72) ^ (word) $ffff -- _deref_pwuz1=_deref_pwuz2_bxor_vwuc1 + // [86] *((word*~) main::$73) ← *((word*~) main::$72) ^ (word) $ffff -- _deref_pwuz1=_deref_pwuz2_bxor_vwuc1 ldy #0 lda #<$ffff eor (__72),y @@ -3354,18 +3324,7 @@ main: { jmp __b9 // main::@9 __b9: - // [88] (word~) main::$44 ← (word) main::i#10 << (byte) 3 -- vwuz1=vwuz2_rol_3 - lda.z i_1 - asl - sta.z __44 - lda.z i_1+1 - rol - sta.z __44+1 - asl.z __44 - rol.z __44+1 - asl.z __44 - rol.z __44+1 - // [89] (word*~) main::$70 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + // [87] (word*~) main::$70 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 lda.z __44 clc adc #balls+2 sta.z __70+1 - // [90] (word~) main::$23 ← *((word*~) main::$70) >> (byte) 8 -- vwuz1=_deref_pwuz2_ror_8 + // [88] (word~) main::$23 ← *((word*~) main::$70) >> (byte) 8 -- vwuz1=_deref_pwuz2_ror_8 ldy #1 lda (__70),y sta.z __23 lda #0 sta.z __23+1 - // [91] (word*~) main::$71 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + // [89] (word*~) main::$71 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 lda.z __44 clc adc #balls+2 sta.z __71+1 - // [92] (word~) main::$25 ← *((word*~) main::$71) >> (byte) 8 -- vwuz1=_deref_pwuz2_ror_8 + // [90] (word~) main::$25 ← *((word*~) main::$71) >> (byte) 8 -- vwuz1=_deref_pwuz2_ror_8 ldy #1 lda (__71),y sta.z __25 lda #0 sta.z __25+1 - // [93] (byte~) main::$26 ← (byte) main::h_bar#1 + (byte) 8 -- vbuz1=vbuz2_plus_vbuc1 + // [91] (byte~) main::$26 ← (byte) main::h_bar#1 + (byte) 8 -- vbuz1=vbuz2_plus_vbuc1 lax.z h_bar axs #-[8] stx.z __26 - // [94] if((word~) main::$23<(byte) main::h_bar#1) goto main::@10 -- vwuz1_lt_vbuz2_then_la1 + // [92] if((word~) main::$23<(byte) main::h_bar#1) goto main::@10 -- vwuz1_lt_vbuz2_then_la1 lda.z __23+1 bne !+ lda.z __23 @@ -3407,7 +3366,7 @@ main: { jmp __b24 // main::@24 __b24: - // [95] if((word~) main::$25>=(byte~) main::$26) goto main::@10 -- vwuz1_ge_vbuz2_then_la1 + // [93] if((word~) main::$25>=(byte~) main::$26) goto main::@10 -- vwuz1_ge_vbuz2_then_la1 lda.z __25+1 bne __b10 lda.z __25 @@ -3417,34 +3376,23 @@ main: { jmp __b12 // main::@12 __b12: - // [96] (word~) main::$53 ← (word) main::i#10 << (byte) 3 -- vwuz1=vwuz2_rol_3 - lda.z i_1 - asl - sta.z __53 - lda.z i_1+1 - rol - sta.z __53+1 - asl.z __53 - rol.z __53+1 - asl.z __53 - rol.z __53+1 - // [97] (word*~) main::$76 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$53 -- pwuz1=pwuc1_plus_vwuz2 - lda.z __53 + // [94] (word*~) main::$76 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __44 clc adc #balls+6 sta.z __76+1 - // [98] (word*~) main::$77 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$53 -- pwuz1=pwuc1_plus_vwuz2 - lda.z __53 + // [95] (word*~) main::$77 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __44 clc adc #balls+6 sta.z __77+1 - // [99] *((word*~) main::$77) ← *((word*~) main::$76) ^ (word) $ffff -- _deref_pwuz1=_deref_pwuz2_bxor_vwuc1 + // [96] *((word*~) main::$77) ← *((word*~) main::$76) ^ (word) $ffff -- _deref_pwuz1=_deref_pwuz2_bxor_vwuc1 ldy #0 lda #<$ffff eor (__76),y @@ -3453,30 +3401,30 @@ main: { lda #>$ffff eor (__76),y sta (__77),y - // [100] (byte~) main::$30 ← (byte) main::h_bar#1 - (byte) 2 -- vbuz1=vbuz2_minus_2 + // [97] (byte~) main::$30 ← (byte) main::h_bar#1 - (byte) 2 -- vbuz1=vbuz2_minus_2 lda.z h_bar sec sbc #2 sta.z __30 - // [101] (word~) main::$56 ← (word)(byte~) main::$30 -- vwuz1=_word_vbuz2 + // [98] (word~) main::$56 ← (word)(byte~) main::$30 -- vwuz1=_word_vbuz2 lda.z __30 sta.z __56 lda #0 sta.z __56+1 - // [102] (word~) main::$31 ← (word~) main::$56 << (byte) 8 -- vwuz1=vwuz2_rol_8 + // [99] (word~) main::$31 ← (word~) main::$56 << (byte) 8 -- vwuz1=vwuz2_rol_8 lda.z __56 sta.z __31+1 lda #0 sta.z __31 - // [103] (word*~) main::$78 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$53 -- pwuz1=pwuc1_plus_vwuz2 - lda.z __53 + // [100] (word*~) main::$78 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __44 clc adc #balls+2 sta.z __78+1 - // [104] *((word*~) main::$78) ← (word~) main::$31 -- _deref_pwuz1=vwuz2 + // [101] *((word*~) main::$78) ← (word~) main::$31 -- _deref_pwuz1=vwuz2 ldy #0 lda.z __31 sta (__78),y @@ -3486,69 +3434,58 @@ main: { jmp __b10 // main::@10 __b10: - // [105] (word~) main::$50 ← (word) main::i#10 << (byte) 3 -- vwuz1=vwuz2_rol_3 - lda.z i_1 - asl - sta.z __50 - lda.z i_1+1 - rol - sta.z __50+1 - asl.z __50 - rol.z __50+1 - asl.z __50 - rol.z __50+1 - // [106] (word*~) main::$74 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$50 -- pwuz1=pwuc1_plus_vwuz2 - lda.z __50 + // [102] (word*~) main::$74 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __44 clc adc #balls+2 sta.z __74+1 - // [107] (word~) main::$32 ← *((word*~) main::$74) >> (byte) 8 -- vwuz1=_deref_pwuz2_ror_8 + // [103] (word~) main::$32 ← *((word*~) main::$74) >> (byte) 8 -- vwuz1=_deref_pwuz2_ror_8 ldy #1 lda (__74),y sta.z __32 lda #0 sta.z __32+1 - // [108] (byte~) main::$48 ← (byte) main::sprite_idx#3 << (byte) 2 -- vbuz1=vbuz2_rol_2 + // [104] (byte~) main::$48 ← (byte) main::sprite_idx#3 << (byte) 2 -- vbuz1=vbuz2_rol_2 lda.z sprite_idx asl asl sta.z __48 - // [109] *((byte*)(const struct SpriteData*) SPRITE_BUFFER + (byte~) main::$48) ← (byte)(word~) main::$32 -- pbuc1_derefidx_vbuz1=_byte_vwuz2 + // [105] *((byte*)(const struct SpriteData*) SPRITE_BUFFER + (byte~) main::$48) ← (byte)(word~) main::$32 -- pbuc1_derefidx_vbuz1=_byte_vwuz2 ldy.z __48 lda.z __32 sta SPRITE_BUFFER,y - // [110] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_TILE + (byte~) main::$48) ← (byte) $a -- pbuc1_derefidx_vbuz1=vbuc2 + // [106] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_TILE + (byte~) main::$48) ← (byte) $a -- pbuc1_derefidx_vbuz1=vbuc2 lda #$a ldy.z __48 sta SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_TILE,y - // [111] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_ATTRIBUTES + (byte~) main::$48) ← (byte) 3 -- pbuc1_derefidx_vbuz1=vbuc2 + // [107] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_ATTRIBUTES + (byte~) main::$48) ← (byte) 3 -- pbuc1_derefidx_vbuz1=vbuc2 lda #3 ldy.z __48 sta SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_ATTRIBUTES,y - // [112] (word*~) main::$75 ← (word*)(const struct $0*) balls + (word~) main::$50 -- pwuz1=pwuc1_plus_vwuz2 - lda.z __50 + // [108] (word*~) main::$75 ← (word*)(const struct $0*) balls + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __44 clc adc #balls sta.z __75+1 - // [113] (word~) main::$33 ← *((word*~) main::$75) >> (byte) 8 -- vwuz1=_deref_pwuz2_ror_8 + // [109] (word~) main::$33 ← *((word*~) main::$75) >> (byte) 8 -- vwuz1=_deref_pwuz2_ror_8 ldy #1 lda (__75),y sta.z __33 lda #0 sta.z __33+1 - // [114] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X + (byte~) main::$48) ← (byte)(word~) main::$33 -- pbuc1_derefidx_vbuz1=_byte_vwuz2 + // [110] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X + (byte~) main::$48) ← (byte)(word~) main::$33 -- pbuc1_derefidx_vbuz1=_byte_vwuz2 ldy.z __48 lda.z __33 sta SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_X,y - // [115] (byte) main::sprite_idx#2 ← ++ (byte) main::sprite_idx#3 -- vbuz1=_inc_vbuz1 + // [111] (byte) main::sprite_idx#2 ← ++ (byte) main::sprite_idx#3 -- vbuz1=_inc_vbuz1 inc.z sprite_idx - // [116] (word) main::i#4 ← ++ (word) main::i#10 -- vwuz1=_inc_vwuz1 + // [112] (word) main::i#4 ← ++ (word) main::i#10 -- vwuz1=_inc_vwuz1 inc.z i_1 bne !+ inc.z i_1+1 @@ -3560,21 +3497,21 @@ main: { jmp __b6 // main::@25 __b25: - // [117] (byte) main::timer#21 ← (byte) main::timer#1 -- vbuz1=vbuz2 + // [113] (byte) main::timer#21 ← (byte) main::timer#1 -- vbuz1=vbuz2 lda.z timer sta.z timer_1 jmp __b5_from___b25 - // [118] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // [114] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: jmp __b2 // main::@2 __b2: - // [119] call rand - // [157] phi from main::@2 to rand [phi:main::@2->rand] + // [115] call rand + // [152] phi from main::@2 to rand [phi:main::@2->rand] rand_from___b2: - // [157] phi (word) rand_state#10 = (word) rand_state#17 [phi:main::@2->rand#0] -- register_copy + // [152] phi (word) rand_state#10 = (word) rand_state#17 [phi:main::@2->rand#0] -- register_copy jsr rand - // [120] (word) rand::return#2 ← (word) rand::return#0 -- vwuz1=vwuz2 + // [116] (word) rand::return#2 ← (word) rand::return#0 -- vwuz1=vwuz2 lda.z rand.return sta.z rand.return_1 lda.z rand.return+1 @@ -3582,67 +3519,19 @@ main: { jmp __b22 // main::@22 __b22: - // [121] (word~) main::$9 ← (word) rand::return#2 -- vwuz1=vwuz2 + // [117] (word~) main::$9 ← (word) rand::return#2 -- vwuz1=vwuz2 lda.z rand.return_1 sta.z __9 lda.z rand.return_1+1 sta.z __9+1 - // [122] (word~) main::$10 ← (word~) main::$9 & (word) $3ff -- vwuz1=vwuz2_band_vwuc1 + // [118] (word~) main::$10 ← (word~) main::$9 & (word) $3ff -- vwuz1=vwuz2_band_vwuc1 lda.z __9 and #<$3ff sta.z __10 lda.z __9+1 and #>$3ff sta.z __10+1 - // [123] (word~) main::$35 ← (word) main::i#14 << (byte) 3 -- vwuz1=vwuz2_rol_3 - lda.z i - asl - sta.z __35 - lda.z i+1 - rol - sta.z __35+1 - asl.z __35 - rol.z __35+1 - asl.z __35 - rol.z __35+1 - // [124] (word*~) main::$59 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$35 -- pwuz1=pwuc1_plus_vwuz2 - lda.z __35 - clc - adc #balls+4 - sta.z __59+1 - // [125] *((word*~) main::$59) ← (word~) main::$10 -- _deref_pwuz1=vwuz2 - ldy #0 - lda.z __10 - sta (__59),y - iny - lda.z __10+1 - sta (__59),y - // [126] call rand - // [157] phi from main::@22 to rand [phi:main::@22->rand] - rand_from___b22: - // [157] phi (word) rand_state#10 = (word) rand_state#11 [phi:main::@22->rand#0] -- register_copy - jsr rand - // [127] (word) rand::return#3 ← (word) rand::return#0 -- vwuz1=vwuz2 - lda.z rand.return - sta.z rand.return_2 - lda.z rand.return+1 - sta.z rand.return_2+1 - jmp __b23 - // main::@23 - __b23: - // [128] (word~) main::$11 ← (word) rand::return#3 -- vwuz1=vwuz2 - lda.z rand.return_2 - sta.z __11 - lda.z rand.return_2+1 - sta.z __11+1 - // [129] (byte~) main::$12 ← (word~) main::$11 & (byte) $ff -- vbuz1=vwuz2_band_vbuc1 - lda #$ff - and.z __11 - sta.z __12 - // [130] (word~) main::$36 ← (word) main::i#14 << (byte) 3 -- vwuz1=vwuz2_rol_3 + // [119] (word~) main::$36 ← (word) main::i#14 << (byte) 3 -- vwuz1=vwuz2_rol_3 lda.z i asl sta.z __36 @@ -3653,7 +3542,44 @@ main: { rol.z __36+1 asl.z __36 rol.z __36+1 - // [131] (word*~) main::$60 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$36 -- pwuz1=pwuc1_plus_vwuz2 + // [120] (word*~) main::$59 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$36 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __36 + clc + adc #balls+4 + sta.z __59+1 + // [121] *((word*~) main::$59) ← (word~) main::$10 -- _deref_pwuz1=vwuz2 + ldy #0 + lda.z __10 + sta (__59),y + iny + lda.z __10+1 + sta (__59),y + // [122] call rand + // [152] phi from main::@22 to rand [phi:main::@22->rand] + rand_from___b22: + // [152] phi (word) rand_state#10 = (word) rand_state#11 [phi:main::@22->rand#0] -- register_copy + jsr rand + // [123] (word) rand::return#3 ← (word) rand::return#0 -- vwuz1=vwuz2 + lda.z rand.return + sta.z rand.return_2 + lda.z rand.return+1 + sta.z rand.return_2+1 + jmp __b23 + // main::@23 + __b23: + // [124] (word~) main::$11 ← (word) rand::return#3 -- vwuz1=vwuz2 + lda.z rand.return_2 + sta.z __11 + lda.z rand.return_2+1 + sta.z __11+1 + // [125] (byte~) main::$12 ← (word~) main::$11 & (byte) $ff -- vbuz1=vwuz2_band_vbuc1 + lda #$ff + and.z __11 + sta.z __12 + // [126] (word*~) main::$60 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$36 -- pwuz1=pwuc1_plus_vwuz2 lda.z __36 clc adc #balls+6 sta.z __60+1 - // [132] *((word*~) main::$60) ← (byte~) main::$12 -- _deref_pwuz1=vbuz2 + // [127] *((word*~) main::$60) ← (byte~) main::$12 -- _deref_pwuz1=vbuz2 lda.z __12 ldy #0 sta (__60),y tya iny sta (__60),y - // [133] (word) main::i#2 ← ++ (word) main::i#14 -- vwuz1=_inc_vwuz1 + // [128] (word) main::i#2 ← ++ (word) main::i#14 -- vwuz1=_inc_vwuz1 inc.z i bne !+ inc.z i+1 @@ -3686,40 +3612,40 @@ main: { // - size : The number of bytes to transfer // ppuDataTransfer(void* zp($d) cpuData) ppuDataTransfer: { - .label ppuDataPrepare1___0 = $75 - .label ppuDataPrepare1___1 = $76 + .label ppuDataPrepare1___0 = $6b + .label ppuDataPrepare1___1 = $6c .label ppuDataPrepare1_ppuData = $b - .label ppuDataPut1_val = $77 + .label ppuDataPut1_val = $6d .label cpuSrc = $11 .label i = $f .label cpuData = $d jmp ppuDataPrepare1 // ppuDataTransfer::ppuDataPrepare1 ppuDataPrepare1: - // [135] (byte~) ppuDataTransfer::ppuDataPrepare1_$0 ← > (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 -- vbuz1=_hi_pvoz2 + // [130] (byte~) ppuDataTransfer::ppuDataPrepare1_$0 ← > (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 -- vbuz1=_hi_pvoz2 lda.z ppuDataPrepare1_ppuData+1 sta.z ppuDataPrepare1___0 - // [136] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataTransfer::ppuDataPrepare1_$0 -- _deref_pbuc1=vbuz1 + // [131] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataTransfer::ppuDataPrepare1_$0 -- _deref_pbuc1=vbuz1 lda.z ppuDataPrepare1___0 sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUADDR - // [137] (byte~) ppuDataTransfer::ppuDataPrepare1_$1 ← < (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 -- vbuz1=_lo_pvoz2 + // [132] (byte~) ppuDataTransfer::ppuDataPrepare1_$1 ← < (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 -- vbuz1=_lo_pvoz2 lda.z ppuDataPrepare1_ppuData sta.z ppuDataPrepare1___1 - // [138] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataTransfer::ppuDataPrepare1_$1 -- _deref_pbuc1=vbuz1 + // [133] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataTransfer::ppuDataPrepare1_$1 -- _deref_pbuc1=vbuz1 lda.z ppuDataPrepare1___1 sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUADDR jmp __b3 // ppuDataTransfer::@3 __b3: - // [139] (byte*) ppuDataTransfer::cpuSrc#6 ← (byte*)(nomodify void*) ppuDataTransfer::cpuData#2 -- pbuz1=pbuz2 + // [134] (byte*) ppuDataTransfer::cpuSrc#6 ← (byte*)(nomodify void*) ppuDataTransfer::cpuData#2 -- pbuz1=pbuz2 lda.z cpuData sta.z cpuSrc lda.z cpuData+1 sta.z cpuSrc+1 - // [140] phi from ppuDataTransfer::@3 to ppuDataTransfer::@1 [phi:ppuDataTransfer::@3->ppuDataTransfer::@1] + // [135] phi from ppuDataTransfer::@3 to ppuDataTransfer::@1 [phi:ppuDataTransfer::@3->ppuDataTransfer::@1] __b1_from___b3: - // [140] phi (byte*) ppuDataTransfer::cpuSrc#2 = (byte*) ppuDataTransfer::cpuSrc#6 [phi:ppuDataTransfer::@3->ppuDataTransfer::@1#0] -- register_copy - // [140] phi (word) ppuDataTransfer::i#2 = (word) 0 [phi:ppuDataTransfer::@3->ppuDataTransfer::@1#1] -- vwuz1=vwuc1 + // [135] phi (byte*) ppuDataTransfer::cpuSrc#2 = (byte*) ppuDataTransfer::cpuSrc#6 [phi:ppuDataTransfer::@3->ppuDataTransfer::@1#0] -- register_copy + // [135] phi (word) ppuDataTransfer::i#2 = (word) 0 [phi:ppuDataTransfer::@3->ppuDataTransfer::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z i lda #>0 @@ -3727,7 +3653,7 @@ ppuDataTransfer: { jmp __b1 // ppuDataTransfer::@1 __b1: - // [141] if((word) ppuDataTransfer::i#2<(byte) $20*(const byte) SIZEOF_BYTE) goto ppuDataTransfer::@2 -- vwuz1_lt_vbuc1_then_la1 + // [136] if((word) ppuDataTransfer::i#2<(byte) $20*(const byte) SIZEOF_BYTE) goto ppuDataTransfer::@2 -- vwuz1_lt_vbuc1_then_la1 lda.z i+1 bne !+ lda.z i @@ -3737,37 +3663,37 @@ ppuDataTransfer: { jmp __breturn // ppuDataTransfer::@return __breturn: - // [142] return + // [137] return rts // ppuDataTransfer::@2 __b2: - // [143] (byte) ppuDataTransfer::ppuDataPut1_val#0 ← *((byte*) ppuDataTransfer::cpuSrc#2) -- vbuz1=_deref_pbuz2 + // [138] (byte) ppuDataTransfer::ppuDataPut1_val#0 ← *((byte*) ppuDataTransfer::cpuSrc#2) -- vbuz1=_deref_pbuz2 ldy #0 lda (cpuSrc),y sta.z ppuDataPut1_val jmp ppuDataPut1 // ppuDataTransfer::ppuDataPut1 ppuDataPut1: - // [144] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) ppuDataTransfer::ppuDataPut1_val#0 -- _deref_pbuc1=vbuz1 + // [139] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) ppuDataTransfer::ppuDataPut1_val#0 -- _deref_pbuc1=vbuz1 lda.z ppuDataPut1_val sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUDATA jmp __b4 // ppuDataTransfer::@4 __b4: - // [145] (byte*) ppuDataTransfer::cpuSrc#1 ← ++ (byte*) ppuDataTransfer::cpuSrc#2 -- pbuz1=_inc_pbuz1 + // [140] (byte*) ppuDataTransfer::cpuSrc#1 ← ++ (byte*) ppuDataTransfer::cpuSrc#2 -- pbuz1=_inc_pbuz1 inc.z cpuSrc bne !+ inc.z cpuSrc+1 !: - // [146] (word) ppuDataTransfer::i#1 ← ++ (word) ppuDataTransfer::i#2 -- vwuz1=_inc_vwuz1 + // [141] (word) ppuDataTransfer::i#1 ← ++ (word) ppuDataTransfer::i#2 -- vwuz1=_inc_vwuz1 inc.z i bne !+ inc.z i+1 !: - // [140] phi from ppuDataTransfer::@4 to ppuDataTransfer::@1 [phi:ppuDataTransfer::@4->ppuDataTransfer::@1] + // [135] phi from ppuDataTransfer::@4 to ppuDataTransfer::@1 [phi:ppuDataTransfer::@4->ppuDataTransfer::@1] __b1_from___b4: - // [140] phi (byte*) ppuDataTransfer::cpuSrc#2 = (byte*) ppuDataTransfer::cpuSrc#1 [phi:ppuDataTransfer::@4->ppuDataTransfer::@1#0] -- register_copy - // [140] phi (word) ppuDataTransfer::i#2 = (word) ppuDataTransfer::i#1 [phi:ppuDataTransfer::@4->ppuDataTransfer::@1#1] -- register_copy + // [135] phi (byte*) ppuDataTransfer::cpuSrc#2 = (byte*) ppuDataTransfer::cpuSrc#1 [phi:ppuDataTransfer::@4->ppuDataTransfer::@1#0] -- register_copy + // [135] phi (word) ppuDataTransfer::i#2 = (word) ppuDataTransfer::i#1 [phi:ppuDataTransfer::@4->ppuDataTransfer::@1#1] -- register_copy jmp __b1 } // ppuDataFill @@ -3776,29 +3702,29 @@ ppuDataTransfer: { // - size : The number of bytes to transfer // ppuDataFill(word zp($15) size) ppuDataFill: { - .label ppuDataPrepare1___0 = $78 - .label ppuDataPrepare1___1 = $79 + .label ppuDataPrepare1___0 = $6e + .label ppuDataPrepare1___1 = $6f .label ppuDataPrepare1_ppuData = $13 .label i = $17 .label size = $15 jmp ppuDataPrepare1 // ppuDataFill::ppuDataPrepare1 ppuDataPrepare1: - // [148] (byte~) ppuDataFill::ppuDataPrepare1_$0 ← > (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 -- vbuz1=_hi_pvoz2 + // [143] (byte~) ppuDataFill::ppuDataPrepare1_$0 ← > (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 -- vbuz1=_hi_pvoz2 lda.z ppuDataPrepare1_ppuData+1 sta.z ppuDataPrepare1___0 - // [149] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataFill::ppuDataPrepare1_$0 -- _deref_pbuc1=vbuz1 + // [144] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataFill::ppuDataPrepare1_$0 -- _deref_pbuc1=vbuz1 lda.z ppuDataPrepare1___0 sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUADDR - // [150] (byte~) ppuDataFill::ppuDataPrepare1_$1 ← < (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 -- vbuz1=_lo_pvoz2 + // [145] (byte~) ppuDataFill::ppuDataPrepare1_$1 ← < (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 -- vbuz1=_lo_pvoz2 lda.z ppuDataPrepare1_ppuData sta.z ppuDataPrepare1___1 - // [151] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataFill::ppuDataPrepare1_$1 -- _deref_pbuc1=vbuz1 + // [146] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataFill::ppuDataPrepare1_$1 -- _deref_pbuc1=vbuz1 lda.z ppuDataPrepare1___1 sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUADDR - // [152] phi from ppuDataFill::ppuDataPrepare1 to ppuDataFill::@1 [phi:ppuDataFill::ppuDataPrepare1->ppuDataFill::@1] + // [147] phi from ppuDataFill::ppuDataPrepare1 to ppuDataFill::@1 [phi:ppuDataFill::ppuDataPrepare1->ppuDataFill::@1] __b1_from_ppuDataPrepare1: - // [152] phi (word) ppuDataFill::i#2 = (word) 0 [phi:ppuDataFill::ppuDataPrepare1->ppuDataFill::@1#0] -- vwuz1=vwuc1 + // [147] phi (word) ppuDataFill::i#2 = (word) 0 [phi:ppuDataFill::ppuDataPrepare1->ppuDataFill::@1#0] -- vwuz1=vwuc1 lda #<0 sta.z i lda #>0 @@ -3807,7 +3733,7 @@ ppuDataFill: { // Transfer to PPU // ppuDataFill::@1 __b1: - // [153] if((word) ppuDataFill::i#2<(word) ppuDataFill::size#3) goto ppuDataFill::ppuDataPut1 -- vwuz1_lt_vwuz2_then_la1 + // [148] if((word) ppuDataFill::i#2<(word) ppuDataFill::size#3) goto ppuDataFill::ppuDataPut1 -- vwuz1_lt_vwuz2_then_la1 lda.z i+1 cmp.z size+1 bcc ppuDataPut1 @@ -3819,24 +3745,24 @@ ppuDataFill: { jmp __breturn // ppuDataFill::@return __breturn: - // [154] return + // [149] return rts // ppuDataFill::ppuDataPut1 ppuDataPut1: - // [155] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [150] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUDATA jmp __b2 // ppuDataFill::@2 __b2: - // [156] (word) ppuDataFill::i#1 ← ++ (word) ppuDataFill::i#2 -- vwuz1=_inc_vwuz1 + // [151] (word) ppuDataFill::i#1 ← ++ (word) ppuDataFill::i#2 -- vwuz1=_inc_vwuz1 inc.z i bne !+ inc.z i+1 !: - // [152] phi from ppuDataFill::@2 to ppuDataFill::@1 [phi:ppuDataFill::@2->ppuDataFill::@1] + // [147] phi from ppuDataFill::@2 to ppuDataFill::@1 [phi:ppuDataFill::@2->ppuDataFill::@1] __b1_from___b2: - // [152] phi (word) ppuDataFill::i#2 = (word) ppuDataFill::i#1 [phi:ppuDataFill::@2->ppuDataFill::@1#0] -- register_copy + // [147] phi (word) ppuDataFill::i#2 = (word) ppuDataFill::i#1 [phi:ppuDataFill::@2->ppuDataFill::@1#0] -- register_copy jmp __b1 } // rand @@ -3845,13 +3771,13 @@ ppuDataFill: { // Information https://en.wikipedia.org/wiki/Xorshift // Source http://www.retroprogramming.com/2017/07/xorshift-pseudorandom-numbers-in-z80.html rand: { - .label __0 = $7a - .label __1 = $7e - .label __2 = $82 - .label return = $84 - .label return_1 = $62 - .label return_2 = $6c - // [158] (word~) rand::$0 ← (word) rand_state#10 << (byte) 7 -- vwuz1=vwuz2_rol_7 + .label __0 = $70 + .label __1 = $74 + .label __2 = $78 + .label return = $7a + .label return_1 = $5a + .label return_2 = $64 + // [153] (word~) rand::$0 ← (word) rand_state#10 << (byte) 7 -- vwuz1=vwuz2_rol_7 lda.z rand_state_2+1 lsr lda.z rand_state_2 @@ -3860,39 +3786,39 @@ rand: { lda #0 ror sta.z __0 - // [159] (word) rand_state#0 ← (word) rand_state#10 ^ (word~) rand::$0 -- vwuz1=vwuz2_bxor_vwuz3 + // [154] (word) rand_state#0 ← (word) rand_state#10 ^ (word~) rand::$0 -- vwuz1=vwuz2_bxor_vwuz3 lda.z rand_state_2 eor.z __0 sta.z rand_state lda.z rand_state_2+1 eor.z __0+1 sta.z rand_state+1 - // [160] (word~) rand::$1 ← (word) rand_state#0 >> (byte) 9 -- vwuz1=vwuz2_ror_9 + // [155] (word~) rand::$1 ← (word) rand_state#0 >> (byte) 9 -- vwuz1=vwuz2_ror_9 lda.z rand_state+1 lsr sta.z __1 lda #0 sta.z __1+1 - // [161] (word) rand_state#1 ← (word) rand_state#0 ^ (word~) rand::$1 -- vwuz1=vwuz2_bxor_vwuz3 + // [156] (word) rand_state#1 ← (word) rand_state#0 ^ (word~) rand::$1 -- vwuz1=vwuz2_bxor_vwuz3 lda.z rand_state eor.z __1 sta.z rand_state_1 lda.z rand_state+1 eor.z __1+1 sta.z rand_state_1+1 - // [162] (word~) rand::$2 ← (word) rand_state#1 << (byte) 8 -- vwuz1=vwuz2_rol_8 + // [157] (word~) rand::$2 ← (word) rand_state#1 << (byte) 8 -- vwuz1=vwuz2_rol_8 lda.z rand_state_1 sta.z __2+1 lda #0 sta.z __2 - // [163] (word) rand_state#11 ← (word) rand_state#1 ^ (word~) rand::$2 -- vwuz1=vwuz2_bxor_vwuz3 + // [158] (word) rand_state#11 ← (word) rand_state#1 ^ (word~) rand::$2 -- vwuz1=vwuz2_bxor_vwuz3 lda.z rand_state_1 eor.z __2 sta.z rand_state_2 lda.z rand_state_1+1 eor.z __2+1 sta.z rand_state_2+1 - // [164] (word) rand::return#0 ← (word) rand_state#11 -- vwuz1=vwuz2 + // [159] (word) rand::return#0 ← (word) rand_state#11 -- vwuz1=vwuz2 lda.z rand_state_2 sta.z return lda.z rand_state_2+1 @@ -3900,7 +3826,7 @@ rand: { jmp __breturn // rand::@return __breturn: - // [165] return + // [160] return rts } // File Data @@ -3967,84 +3893,79 @@ Statement [65] *((byte*) 8193) ← (byte) $98 [ vblank_hit main::timer_2#1 main: Statement [66] if((byte) 0==(volatile byte) vblank_hit) goto main::@13 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 ] { } ) always clobbers reg byte a Statement [67] (volatile byte) vblank_hit ← (byte) 0 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 ] { } ) always clobbers reg byte a Statement [68] *((byte*) 8193) ← (byte) $18 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 ] { } ) always clobbers reg byte a -Statement [69] (word~) main::$40 ← (word) main::i#10 << (byte) 3 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 ] { } ) always clobbers reg byte a -Statement [70] (word*~) main::$61 ← (word*)(const struct $0*) balls + (word~) main::$40 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 main::$61 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 main::$61 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 main::$61 ] { } ) always clobbers reg byte a -Statement [71] (word*~) main::$62 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$40 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 main::$61 main::$62 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 main::$61 main::$62 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 main::$61 main::$62 ] { } ) always clobbers reg byte a -Statement [72] (word*~) main::$63 ← (word*)(const struct $0*) balls + (word~) main::$40 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 main::$61 main::$62 main::$63 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 main::$61 main::$62 main::$63 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 main::$61 main::$62 main::$63 ] { } ) always clobbers reg byte a -Statement [73] *((word*~) main::$63) ← *((word*~) main::$61) + *((word*~) main::$62) [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 ] { } ) always clobbers reg byte a reg byte y +Statement [69] (word~) main::$44 ← (word) main::i#10 << (byte) 3 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] { } ) always clobbers reg byte a +Statement [70] (word*~) main::$61 ← (word*)(const struct $0*) balls + (word~) main::$44 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$61 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$61 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$61 ] { } ) always clobbers reg byte a +Statement [71] (word*~) main::$62 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$44 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$61 main::$62 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$61 main::$62 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$61 main::$62 ] { } ) always clobbers reg byte a +Statement [72] (word*~) main::$63 ← (word*)(const struct $0*) balls + (word~) main::$44 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$61 main::$62 main::$63 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$61 main::$62 main::$63 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$61 main::$62 main::$63 ] { } ) always clobbers reg byte a +Statement [73] *((word*~) main::$63) ← *((word*~) main::$61) + *((word*~) main::$62) [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] { } ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp[1]:5 [ main::timer_2#2 main::timer_2#1 ] Removing always clobbered register reg byte y as potential for zp[1]:6 [ main::active_balls#2 main::active_balls#8 main::active_balls#1 ] Removing always clobbered register reg byte y as potential for zp[1]:7 [ main::timer#3 main::timer#15 main::timer#21 ] Removing always clobbered register reg byte y as potential for zp[1]:31 [ main::h_bar#1 ] Removing always clobbered register reg byte y as potential for zp[1]:10 [ main::sprite_idx#3 main::sprite_idx#2 ] -Statement [74] (word*~) main::$64 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$40 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 main::$64 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 main::$64 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 main::$64 ] { } ) always clobbers reg byte a -Statement [75] (word*~) main::$65 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$40 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 main::$64 main::$65 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 main::$64 main::$65 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 main::$64 main::$65 ] { } ) always clobbers reg byte a -Statement [76] *((word*~) main::$65) ← *((word*~) main::$64) + (byte) $10 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 ] { } ) always clobbers reg byte a reg byte y -Statement [77] (word*~) main::$66 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$40 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 main::$66 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 main::$66 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 main::$66 ] { } ) always clobbers reg byte a -Statement [78] (word*~) main::$67 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$40 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 main::$66 main::$67 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 main::$66 main::$67 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 main::$66 main::$67 ] { } ) always clobbers reg byte a -Statement [79] (word*~) main::$68 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$40 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 main::$66 main::$67 main::$68 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 main::$66 main::$67 main::$68 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 main::$66 main::$67 main::$68 ] { } ) always clobbers reg byte a -Statement [80] *((word*~) main::$68) ← *((word*~) main::$66) + *((word*~) main::$67) [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 ] { } ) always clobbers reg byte a reg byte y -Statement [81] (word*~) main::$69 ← (word*)(const struct $0*) balls + (word~) main::$40 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$69 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$69 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$69 ] { } ) always clobbers reg byte a -Statement [82] (word~) main::$20 ← *((word*~) main::$69) >> (byte) 8 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$20 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$20 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$20 ] { } ) always clobbers reg byte a reg byte y -Statement [83] if((word~) main::$20>=(byte) 8) goto main::@9 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 ] { } ) always clobbers reg byte a -Statement [84] (word~) main::$45 ← (word) main::i#10 << (byte) 3 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$45 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$45 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$45 ] { } ) always clobbers reg byte a -Statement [85] (word*~) main::$72 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$45 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$45 main::$72 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$45 main::$72 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$45 main::$72 ] { } ) always clobbers reg byte a -Statement [86] (word*~) main::$73 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$45 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$72 main::$73 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$72 main::$73 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$72 main::$73 ] { } ) always clobbers reg byte a -Statement [87] *((word*~) main::$73) ← *((word*~) main::$72) ^ (word) $ffff [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 ] { } ) always clobbers reg byte a reg byte y -Statement [88] (word~) main::$44 ← (word) main::i#10 << (byte) 3 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] { } ) always clobbers reg byte a -Statement [89] (word*~) main::$70 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$70 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$70 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$70 ] { } ) always clobbers reg byte a -Statement [90] (word~) main::$23 ← *((word*~) main::$70) >> (byte) 8 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$23 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$23 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$23 ] { } ) always clobbers reg byte a reg byte y -Statement [91] (word*~) main::$71 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$23 main::$71 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$23 main::$71 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$23 main::$71 ] { } ) always clobbers reg byte a -Statement [92] (word~) main::$25 ← *((word*~) main::$71) >> (byte) 8 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$23 main::$25 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$23 main::$25 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$23 main::$25 ] { } ) always clobbers reg byte a reg byte y -Statement [93] (byte~) main::$26 ← (byte) main::h_bar#1 + (byte) 8 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$23 main::$25 main::$26 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$23 main::$25 main::$26 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$23 main::$25 main::$26 ] { } ) always clobbers reg byte a -Statement [94] if((word~) main::$23<(byte) main::h_bar#1) goto main::@10 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$25 main::$26 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$25 main::$26 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$25 main::$26 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:73 [ main::$26 ] -Statement [95] if((word~) main::$25>=(byte~) main::$26) goto main::@10 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 ] { } ) always clobbers reg byte a -Statement [96] (word~) main::$53 ← (word) main::i#10 << (byte) 3 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$53 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$53 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$53 ] { } ) always clobbers reg byte a -Statement [97] (word*~) main::$76 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$53 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$53 main::$76 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$53 main::$76 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$53 main::$76 ] { } ) always clobbers reg byte a -Statement [98] (word*~) main::$77 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$53 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$53 main::$76 main::$77 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$53 main::$76 main::$77 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$53 main::$76 main::$77 ] { } ) always clobbers reg byte a -Statement [99] *((word*~) main::$77) ← *((word*~) main::$76) ^ (word) $ffff [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$53 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$53 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$53 ] { } ) always clobbers reg byte a reg byte y -Statement [101] (word~) main::$56 ← (word)(byte~) main::$30 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$53 main::$56 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$53 main::$56 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$53 main::$56 ] { } ) always clobbers reg byte a -Statement [102] (word~) main::$31 ← (word~) main::$56 << (byte) 8 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$53 main::$31 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$53 main::$31 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$53 main::$31 ] { } ) always clobbers reg byte a -Statement [103] (word*~) main::$78 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$53 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$31 main::$78 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$31 main::$78 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$31 main::$78 ] { } ) always clobbers reg byte a -Statement [104] *((word*~) main::$78) ← (word~) main::$31 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 ] { } ) always clobbers reg byte a reg byte y -Statement [105] (word~) main::$50 ← (word) main::i#10 << (byte) 3 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$50 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$50 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$50 ] { } ) always clobbers reg byte a -Statement [106] (word*~) main::$74 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$50 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$50 main::$74 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$50 main::$74 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$50 main::$74 ] { } ) always clobbers reg byte a -Statement [107] (word~) main::$32 ← *((word*~) main::$74) >> (byte) 8 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$50 main::$32 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$50 main::$32 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$50 main::$32 ] { } ) always clobbers reg byte a reg byte y -Statement [108] (byte~) main::$48 ← (byte) main::sprite_idx#3 << (byte) 2 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$50 main::$32 main::$48 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$50 main::$32 main::$48 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$50 main::$32 main::$48 ] { } ) always clobbers reg byte a -Statement [109] *((byte*)(const struct SpriteData*) SPRITE_BUFFER + (byte~) main::$48) ← (byte)(word~) main::$32 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$50 main::$48 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$50 main::$48 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$50 main::$48 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:93 [ main::$48 ] -Statement [110] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_TILE + (byte~) main::$48) ← (byte) $a [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$50 main::$48 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$50 main::$48 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$50 main::$48 ] { } ) always clobbers reg byte a -Statement [111] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_ATTRIBUTES + (byte~) main::$48) ← (byte) 3 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$50 main::$48 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$50 main::$48 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$50 main::$48 ] { } ) always clobbers reg byte a -Statement [112] (word*~) main::$75 ← (word*)(const struct $0*) balls + (word~) main::$50 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$48 main::$75 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$48 main::$75 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$48 main::$75 ] { } ) always clobbers reg byte a -Statement [113] (word~) main::$33 ← *((word*~) main::$75) >> (byte) 8 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$48 main::$33 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$48 main::$33 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$48 main::$33 ] { } ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for zp[1]:93 [ main::$48 ] -Statement [114] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X + (byte~) main::$48) ← (byte)(word~) main::$33 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 ] { } ) always clobbers reg byte a -Statement [120] (word) rand::return#2 ← (word) rand::return#0 [ vblank_hit main::i#14 rand_state#11 rand::return#2 ] ( [ vblank_hit main::i#14 rand_state#11 rand::return#2 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } main:4 [ vblank_hit main::i#14 rand_state#11 rand::return#2 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a -Statement [121] (word~) main::$9 ← (word) rand::return#2 [ vblank_hit main::i#14 rand_state#11 main::$9 ] ( [ vblank_hit main::i#14 rand_state#11 main::$9 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } main:4 [ vblank_hit main::i#14 rand_state#11 main::$9 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } ) always clobbers reg byte a -Statement [122] (word~) main::$10 ← (word~) main::$9 & (word) $3ff [ vblank_hit main::i#14 rand_state#11 main::$10 ] ( [ vblank_hit main::i#14 rand_state#11 main::$10 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } main:4 [ vblank_hit main::i#14 rand_state#11 main::$10 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } ) always clobbers reg byte a -Statement [123] (word~) main::$35 ← (word) main::i#14 << (byte) 3 [ vblank_hit main::i#14 rand_state#11 main::$10 main::$35 ] ( [ vblank_hit main::i#14 rand_state#11 main::$10 main::$35 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } main:4 [ vblank_hit main::i#14 rand_state#11 main::$10 main::$35 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } ) always clobbers reg byte a -Statement [124] (word*~) main::$59 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$35 [ vblank_hit main::i#14 rand_state#11 main::$10 main::$59 ] ( [ vblank_hit main::i#14 rand_state#11 main::$10 main::$59 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } main:4 [ vblank_hit main::i#14 rand_state#11 main::$10 main::$59 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } ) always clobbers reg byte a -Statement [125] *((word*~) main::$59) ← (word~) main::$10 [ vblank_hit main::i#14 rand_state#11 ] ( [ vblank_hit main::i#14 rand_state#11 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } main:4 [ vblank_hit main::i#14 rand_state#11 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } ) always clobbers reg byte a reg byte y -Statement [127] (word) rand::return#3 ← (word) rand::return#0 [ vblank_hit main::i#14 rand_state#11 rand::return#3 ] ( [ vblank_hit main::i#14 rand_state#11 rand::return#3 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } main:4 [ vblank_hit main::i#14 rand_state#11 rand::return#3 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } ) always clobbers reg byte a -Statement [128] (word~) main::$11 ← (word) rand::return#3 [ vblank_hit main::i#14 rand_state#11 main::$11 ] ( [ vblank_hit main::i#14 rand_state#11 main::$11 ] { } main:4 [ vblank_hit main::i#14 rand_state#11 main::$11 ] { } ) always clobbers reg byte a -Statement [129] (byte~) main::$12 ← (word~) main::$11 & (byte) $ff [ vblank_hit main::i#14 rand_state#11 main::$12 ] ( [ vblank_hit main::i#14 rand_state#11 main::$12 ] { } main:4 [ vblank_hit main::i#14 rand_state#11 main::$12 ] { } ) always clobbers reg byte a -Statement [130] (word~) main::$36 ← (word) main::i#14 << (byte) 3 [ vblank_hit main::i#14 rand_state#11 main::$12 main::$36 ] ( [ vblank_hit main::i#14 rand_state#11 main::$12 main::$36 ] { } main:4 [ vblank_hit main::i#14 rand_state#11 main::$12 main::$36 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:112 [ main::$12 ] -Statement [131] (word*~) main::$60 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$36 [ vblank_hit main::i#14 rand_state#11 main::$12 main::$60 ] ( [ vblank_hit main::i#14 rand_state#11 main::$12 main::$60 ] { } main:4 [ vblank_hit main::i#14 rand_state#11 main::$12 main::$60 ] { } ) always clobbers reg byte a -Statement [132] *((word*~) main::$60) ← (byte~) main::$12 [ vblank_hit main::i#14 rand_state#11 ] ( [ vblank_hit main::i#14 rand_state#11 ] { } main:4 [ vblank_hit main::i#14 rand_state#11 ] { } ) always clobbers reg byte a reg byte y -Statement [139] (byte*) ppuDataTransfer::cpuSrc#6 ← (byte*)(nomodify void*) ppuDataTransfer::cpuData#2 [ ppuDataTransfer::cpuSrc#6 ] ( ppuDataTransfer:38 [ vblank_hit ppuDataTransfer::cpuSrc#6 ] { } main:4::ppuDataTransfer:38 [ vblank_hit ppuDataTransfer::cpuSrc#6 ] { } ppuDataTransfer:44 [ vblank_hit ppuDataTransfer::cpuSrc#6 ] { } main:4::ppuDataTransfer:44 [ vblank_hit ppuDataTransfer::cpuSrc#6 ] { } ) always clobbers reg byte a -Statement [141] if((word) ppuDataTransfer::i#2<(byte) $20*(const byte) SIZEOF_BYTE) goto ppuDataTransfer::@2 [ ppuDataTransfer::i#2 ppuDataTransfer::cpuSrc#2 ] ( ppuDataTransfer:38 [ vblank_hit ppuDataTransfer::i#2 ppuDataTransfer::cpuSrc#2 ] { } main:4::ppuDataTransfer:38 [ vblank_hit ppuDataTransfer::i#2 ppuDataTransfer::cpuSrc#2 ] { } ppuDataTransfer:44 [ vblank_hit ppuDataTransfer::i#2 ppuDataTransfer::cpuSrc#2 ] { } main:4::ppuDataTransfer:44 [ vblank_hit ppuDataTransfer::i#2 ppuDataTransfer::cpuSrc#2 ] { } ) always clobbers reg byte a -Statement [143] (byte) ppuDataTransfer::ppuDataPut1_val#0 ← *((byte*) ppuDataTransfer::cpuSrc#2) [ ppuDataTransfer::i#2 ppuDataTransfer::cpuSrc#2 ppuDataTransfer::ppuDataPut1_val#0 ] ( ppuDataTransfer:38 [ vblank_hit ppuDataTransfer::i#2 ppuDataTransfer::cpuSrc#2 ppuDataTransfer::ppuDataPut1_val#0 ] { } main:4::ppuDataTransfer:38 [ vblank_hit ppuDataTransfer::i#2 ppuDataTransfer::cpuSrc#2 ppuDataTransfer::ppuDataPut1_val#0 ] { } ppuDataTransfer:44 [ vblank_hit ppuDataTransfer::i#2 ppuDataTransfer::cpuSrc#2 ppuDataTransfer::ppuDataPut1_val#0 ] { } main:4::ppuDataTransfer:44 [ vblank_hit ppuDataTransfer::i#2 ppuDataTransfer::cpuSrc#2 ppuDataTransfer::ppuDataPut1_val#0 ] { } ) always clobbers reg byte a reg byte y -Statement [153] if((word) ppuDataFill::i#2<(word) ppuDataFill::size#3) goto ppuDataFill::ppuDataPut1 [ ppuDataFill::size#3 ppuDataFill::i#2 ] ( ppuDataFill:40 [ vblank_hit ppuDataFill::size#3 ppuDataFill::i#2 ] { } main:4::ppuDataFill:40 [ vblank_hit ppuDataFill::size#3 ppuDataFill::i#2 ] { } ppuDataFill:42 [ vblank_hit ppuDataFill::size#3 ppuDataFill::i#2 ] { } main:4::ppuDataFill:42 [ vblank_hit ppuDataFill::size#3 ppuDataFill::i#2 ] { } ) always clobbers reg byte a -Statement [155] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) 0 [ ppuDataFill::size#3 ppuDataFill::i#2 ] ( ppuDataFill:40 [ vblank_hit ppuDataFill::size#3 ppuDataFill::i#2 ] { } main:4::ppuDataFill:40 [ vblank_hit ppuDataFill::size#3 ppuDataFill::i#2 ] { } ppuDataFill:42 [ vblank_hit ppuDataFill::size#3 ppuDataFill::i#2 ] { } main:4::ppuDataFill:42 [ vblank_hit ppuDataFill::size#3 ppuDataFill::i#2 ] { } ) always clobbers reg byte a -Statement [158] (word~) rand::$0 ← (word) rand_state#10 << (byte) 7 [ rand_state#10 rand::$0 ] ( rand:119 [ vblank_hit main::i#14 rand_state#10 rand::$0 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } main:4::rand:119 [ vblank_hit main::i#14 rand_state#10 rand::$0 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } rand:126 [ vblank_hit main::i#14 rand_state#10 rand::$0 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } main:4::rand:126 [ vblank_hit main::i#14 rand_state#10 rand::$0 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } ) always clobbers reg byte a -Statement [159] (word) rand_state#0 ← (word) rand_state#10 ^ (word~) rand::$0 [ rand_state#0 ] ( rand:119 [ vblank_hit main::i#14 rand_state#0 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } main:4::rand:119 [ vblank_hit main::i#14 rand_state#0 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } rand:126 [ vblank_hit main::i#14 rand_state#0 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } main:4::rand:126 [ vblank_hit main::i#14 rand_state#0 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } ) always clobbers reg byte a -Statement [160] (word~) rand::$1 ← (word) rand_state#0 >> (byte) 9 [ rand_state#0 rand::$1 ] ( rand:119 [ vblank_hit main::i#14 rand_state#0 rand::$1 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } main:4::rand:119 [ vblank_hit main::i#14 rand_state#0 rand::$1 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } rand:126 [ vblank_hit main::i#14 rand_state#0 rand::$1 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } main:4::rand:126 [ vblank_hit main::i#14 rand_state#0 rand::$1 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } ) always clobbers reg byte a -Statement [161] (word) rand_state#1 ← (word) rand_state#0 ^ (word~) rand::$1 [ rand_state#1 ] ( rand:119 [ vblank_hit main::i#14 rand_state#1 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } main:4::rand:119 [ vblank_hit main::i#14 rand_state#1 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } rand:126 [ vblank_hit main::i#14 rand_state#1 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } main:4::rand:126 [ vblank_hit main::i#14 rand_state#1 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } ) always clobbers reg byte a -Statement [162] (word~) rand::$2 ← (word) rand_state#1 << (byte) 8 [ rand_state#1 rand::$2 ] ( rand:119 [ vblank_hit main::i#14 rand_state#1 rand::$2 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } main:4::rand:119 [ vblank_hit main::i#14 rand_state#1 rand::$2 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } rand:126 [ vblank_hit main::i#14 rand_state#1 rand::$2 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } main:4::rand:126 [ vblank_hit main::i#14 rand_state#1 rand::$2 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } ) always clobbers reg byte a -Statement [163] (word) rand_state#11 ← (word) rand_state#1 ^ (word~) rand::$2 [ rand_state#11 ] ( rand:119 [ vblank_hit main::i#14 rand_state#11 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } main:4::rand:119 [ vblank_hit main::i#14 rand_state#11 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } rand:126 [ vblank_hit main::i#14 rand_state#11 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } main:4::rand:126 [ vblank_hit main::i#14 rand_state#11 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } ) always clobbers reg byte a -Statement [164] (word) rand::return#0 ← (word) rand_state#11 [ rand_state#11 rand::return#0 ] ( rand:119 [ vblank_hit main::i#14 rand_state#11 rand::return#0 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } main:4::rand:119 [ vblank_hit main::i#14 rand_state#11 rand::return#0 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } rand:126 [ vblank_hit main::i#14 rand_state#11 rand::return#0 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } main:4::rand:126 [ vblank_hit main::i#14 rand_state#11 rand::return#0 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } ) always clobbers reg byte a +Statement [74] (word*~) main::$64 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$64 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$64 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$64 ] { } ) always clobbers reg byte a +Statement [75] (word*~) main::$65 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$64 main::$65 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$64 main::$65 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$64 main::$65 ] { } ) always clobbers reg byte a +Statement [76] *((word*~) main::$65) ← *((word*~) main::$64) + (byte) $10 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] { } ) always clobbers reg byte a reg byte y +Statement [77] (word*~) main::$66 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$66 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$66 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$66 ] { } ) always clobbers reg byte a +Statement [78] (word*~) main::$67 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$66 main::$67 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$66 main::$67 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$66 main::$67 ] { } ) always clobbers reg byte a +Statement [79] (word*~) main::$68 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$66 main::$67 main::$68 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$66 main::$67 main::$68 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$66 main::$67 main::$68 ] { } ) always clobbers reg byte a +Statement [80] *((word*~) main::$68) ← *((word*~) main::$66) + *((word*~) main::$67) [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] { } ) always clobbers reg byte a reg byte y +Statement [81] (word*~) main::$69 ← (word*)(const struct $0*) balls + (word~) main::$44 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$69 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$69 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$69 ] { } ) always clobbers reg byte a +Statement [82] (word~) main::$20 ← *((word*~) main::$69) >> (byte) 8 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$20 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$20 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$20 ] { } ) always clobbers reg byte a reg byte y +Statement [83] if((word~) main::$20>=(byte) 8) goto main::@9 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] { } ) always clobbers reg byte a +Statement [84] (word*~) main::$72 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$44 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$72 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$72 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$72 ] { } ) always clobbers reg byte a +Statement [85] (word*~) main::$73 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$44 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$72 main::$73 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$72 main::$73 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$72 main::$73 ] { } ) always clobbers reg byte a +Statement [86] *((word*~) main::$73) ← *((word*~) main::$72) ^ (word) $ffff [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] { } ) always clobbers reg byte a reg byte y +Statement [87] (word*~) main::$70 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$70 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$70 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$70 ] { } ) always clobbers reg byte a +Statement [88] (word~) main::$23 ← *((word*~) main::$70) >> (byte) 8 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$23 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$23 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$23 ] { } ) always clobbers reg byte a reg byte y +Statement [89] (word*~) main::$71 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$23 main::$71 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$23 main::$71 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$23 main::$71 ] { } ) always clobbers reg byte a +Statement [90] (word~) main::$25 ← *((word*~) main::$71) >> (byte) 8 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$23 main::$25 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$23 main::$25 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$23 main::$25 ] { } ) always clobbers reg byte a reg byte y +Statement [91] (byte~) main::$26 ← (byte) main::h_bar#1 + (byte) 8 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$23 main::$25 main::$26 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$23 main::$25 main::$26 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$23 main::$25 main::$26 ] { } ) always clobbers reg byte a +Statement [92] if((word~) main::$23<(byte) main::h_bar#1) goto main::@10 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$25 main::$26 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$25 main::$26 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$25 main::$26 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:69 [ main::$26 ] +Statement [93] if((word~) main::$25>=(byte~) main::$26) goto main::@10 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] { } ) always clobbers reg byte a +Statement [94] (word*~) main::$76 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$76 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$76 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$76 ] { } ) always clobbers reg byte a +Statement [95] (word*~) main::$77 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$76 main::$77 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$76 main::$77 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$76 main::$77 ] { } ) always clobbers reg byte a +Statement [96] *((word*~) main::$77) ← *((word*~) main::$76) ^ (word) $ffff [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] { } ) always clobbers reg byte a reg byte y +Statement [98] (word~) main::$56 ← (word)(byte~) main::$30 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$56 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$56 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$56 ] { } ) always clobbers reg byte a +Statement [99] (word~) main::$31 ← (word~) main::$56 << (byte) 8 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$31 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$31 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$31 ] { } ) always clobbers reg byte a +Statement [100] (word*~) main::$78 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$31 main::$78 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$31 main::$78 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$31 main::$78 ] { } ) always clobbers reg byte a +Statement [101] *((word*~) main::$78) ← (word~) main::$31 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] { } ) always clobbers reg byte a reg byte y +Statement [102] (word*~) main::$74 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$74 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$74 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$74 ] { } ) always clobbers reg byte a +Statement [103] (word~) main::$32 ← *((word*~) main::$74) >> (byte) 8 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$32 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$32 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$32 ] { } ) always clobbers reg byte a reg byte y +Statement [104] (byte~) main::$48 ← (byte) main::sprite_idx#3 << (byte) 2 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$32 main::$48 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$32 main::$48 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$32 main::$48 ] { } ) always clobbers reg byte a +Statement [105] *((byte*)(const struct SpriteData*) SPRITE_BUFFER + (byte~) main::$48) ← (byte)(word~) main::$32 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$48 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$48 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$48 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:85 [ main::$48 ] +Statement [106] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_TILE + (byte~) main::$48) ← (byte) $a [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$48 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$48 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$48 ] { } ) always clobbers reg byte a +Statement [107] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_ATTRIBUTES + (byte~) main::$48) ← (byte) 3 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$48 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$48 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$48 ] { } ) always clobbers reg byte a +Statement [108] (word*~) main::$75 ← (word*)(const struct $0*) balls + (word~) main::$44 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$48 main::$75 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$48 main::$75 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$48 main::$75 ] { } ) always clobbers reg byte a +Statement [109] (word~) main::$33 ← *((word*~) main::$75) >> (byte) 8 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$48 main::$33 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$48 main::$33 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$48 main::$33 ] { } ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp[1]:85 [ main::$48 ] +Statement [110] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X + (byte~) main::$48) ← (byte)(word~) main::$33 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 ] { } ) always clobbers reg byte a +Statement [116] (word) rand::return#2 ← (word) rand::return#0 [ vblank_hit main::i#14 rand_state#11 rand::return#2 ] ( [ vblank_hit main::i#14 rand_state#11 rand::return#2 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } main:4 [ vblank_hit main::i#14 rand_state#11 rand::return#2 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a +Statement [117] (word~) main::$9 ← (word) rand::return#2 [ vblank_hit main::i#14 rand_state#11 main::$9 ] ( [ vblank_hit main::i#14 rand_state#11 main::$9 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } main:4 [ vblank_hit main::i#14 rand_state#11 main::$9 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } ) always clobbers reg byte a +Statement [118] (word~) main::$10 ← (word~) main::$9 & (word) $3ff [ vblank_hit main::i#14 rand_state#11 main::$10 ] ( [ vblank_hit main::i#14 rand_state#11 main::$10 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } main:4 [ vblank_hit main::i#14 rand_state#11 main::$10 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } ) always clobbers reg byte a +Statement [119] (word~) main::$36 ← (word) main::i#14 << (byte) 3 [ vblank_hit main::i#14 rand_state#11 main::$10 main::$36 ] ( [ vblank_hit main::i#14 rand_state#11 main::$10 main::$36 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } main:4 [ vblank_hit main::i#14 rand_state#11 main::$10 main::$36 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } ) always clobbers reg byte a +Statement [120] (word*~) main::$59 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$36 [ vblank_hit main::i#14 rand_state#11 main::$10 main::$36 main::$59 ] ( [ vblank_hit main::i#14 rand_state#11 main::$10 main::$36 main::$59 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } main:4 [ vblank_hit main::i#14 rand_state#11 main::$10 main::$36 main::$59 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } ) always clobbers reg byte a +Statement [121] *((word*~) main::$59) ← (word~) main::$10 [ vblank_hit main::i#14 rand_state#11 main::$36 ] ( [ vblank_hit main::i#14 rand_state#11 main::$36 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } main:4 [ vblank_hit main::i#14 rand_state#11 main::$36 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } ) always clobbers reg byte a reg byte y +Statement [123] (word) rand::return#3 ← (word) rand::return#0 [ vblank_hit main::i#14 rand_state#11 main::$36 rand::return#3 ] ( [ vblank_hit main::i#14 rand_state#11 main::$36 rand::return#3 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } main:4 [ vblank_hit main::i#14 rand_state#11 main::$36 rand::return#3 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } ) always clobbers reg byte a +Statement [124] (word~) main::$11 ← (word) rand::return#3 [ vblank_hit main::i#14 rand_state#11 main::$36 main::$11 ] ( [ vblank_hit main::i#14 rand_state#11 main::$36 main::$11 ] { } main:4 [ vblank_hit main::i#14 rand_state#11 main::$36 main::$11 ] { } ) always clobbers reg byte a +Statement [125] (byte~) main::$12 ← (word~) main::$11 & (byte) $ff [ vblank_hit main::i#14 rand_state#11 main::$36 main::$12 ] ( [ vblank_hit main::i#14 rand_state#11 main::$36 main::$12 ] { } main:4 [ vblank_hit main::i#14 rand_state#11 main::$36 main::$12 ] { } ) always clobbers reg byte a +Statement [126] (word*~) main::$60 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$36 [ vblank_hit main::i#14 rand_state#11 main::$12 main::$60 ] ( [ vblank_hit main::i#14 rand_state#11 main::$12 main::$60 ] { } main:4 [ vblank_hit main::i#14 rand_state#11 main::$12 main::$60 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:104 [ main::$12 ] +Statement [127] *((word*~) main::$60) ← (byte~) main::$12 [ vblank_hit main::i#14 rand_state#11 ] ( [ vblank_hit main::i#14 rand_state#11 ] { } main:4 [ vblank_hit main::i#14 rand_state#11 ] { } ) always clobbers reg byte a reg byte y +Statement [134] (byte*) ppuDataTransfer::cpuSrc#6 ← (byte*)(nomodify void*) ppuDataTransfer::cpuData#2 [ ppuDataTransfer::cpuSrc#6 ] ( ppuDataTransfer:38 [ vblank_hit ppuDataTransfer::cpuSrc#6 ] { } main:4::ppuDataTransfer:38 [ vblank_hit ppuDataTransfer::cpuSrc#6 ] { } ppuDataTransfer:44 [ vblank_hit ppuDataTransfer::cpuSrc#6 ] { } main:4::ppuDataTransfer:44 [ vblank_hit ppuDataTransfer::cpuSrc#6 ] { } ) always clobbers reg byte a +Statement [136] if((word) ppuDataTransfer::i#2<(byte) $20*(const byte) SIZEOF_BYTE) goto ppuDataTransfer::@2 [ ppuDataTransfer::i#2 ppuDataTransfer::cpuSrc#2 ] ( ppuDataTransfer:38 [ vblank_hit ppuDataTransfer::i#2 ppuDataTransfer::cpuSrc#2 ] { } main:4::ppuDataTransfer:38 [ vblank_hit ppuDataTransfer::i#2 ppuDataTransfer::cpuSrc#2 ] { } ppuDataTransfer:44 [ vblank_hit ppuDataTransfer::i#2 ppuDataTransfer::cpuSrc#2 ] { } main:4::ppuDataTransfer:44 [ vblank_hit ppuDataTransfer::i#2 ppuDataTransfer::cpuSrc#2 ] { } ) always clobbers reg byte a +Statement [138] (byte) ppuDataTransfer::ppuDataPut1_val#0 ← *((byte*) ppuDataTransfer::cpuSrc#2) [ ppuDataTransfer::i#2 ppuDataTransfer::cpuSrc#2 ppuDataTransfer::ppuDataPut1_val#0 ] ( ppuDataTransfer:38 [ vblank_hit ppuDataTransfer::i#2 ppuDataTransfer::cpuSrc#2 ppuDataTransfer::ppuDataPut1_val#0 ] { } main:4::ppuDataTransfer:38 [ vblank_hit ppuDataTransfer::i#2 ppuDataTransfer::cpuSrc#2 ppuDataTransfer::ppuDataPut1_val#0 ] { } ppuDataTransfer:44 [ vblank_hit ppuDataTransfer::i#2 ppuDataTransfer::cpuSrc#2 ppuDataTransfer::ppuDataPut1_val#0 ] { } main:4::ppuDataTransfer:44 [ vblank_hit ppuDataTransfer::i#2 ppuDataTransfer::cpuSrc#2 ppuDataTransfer::ppuDataPut1_val#0 ] { } ) always clobbers reg byte a reg byte y +Statement [148] if((word) ppuDataFill::i#2<(word) ppuDataFill::size#3) goto ppuDataFill::ppuDataPut1 [ ppuDataFill::size#3 ppuDataFill::i#2 ] ( ppuDataFill:40 [ vblank_hit ppuDataFill::size#3 ppuDataFill::i#2 ] { } main:4::ppuDataFill:40 [ vblank_hit ppuDataFill::size#3 ppuDataFill::i#2 ] { } ppuDataFill:42 [ vblank_hit ppuDataFill::size#3 ppuDataFill::i#2 ] { } main:4::ppuDataFill:42 [ vblank_hit ppuDataFill::size#3 ppuDataFill::i#2 ] { } ) always clobbers reg byte a +Statement [150] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) 0 [ ppuDataFill::size#3 ppuDataFill::i#2 ] ( ppuDataFill:40 [ vblank_hit ppuDataFill::size#3 ppuDataFill::i#2 ] { } main:4::ppuDataFill:40 [ vblank_hit ppuDataFill::size#3 ppuDataFill::i#2 ] { } ppuDataFill:42 [ vblank_hit ppuDataFill::size#3 ppuDataFill::i#2 ] { } main:4::ppuDataFill:42 [ vblank_hit ppuDataFill::size#3 ppuDataFill::i#2 ] { } ) always clobbers reg byte a +Statement [153] (word~) rand::$0 ← (word) rand_state#10 << (byte) 7 [ rand_state#10 rand::$0 ] ( rand:115 [ vblank_hit main::i#14 rand_state#10 rand::$0 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } main:4::rand:115 [ vblank_hit main::i#14 rand_state#10 rand::$0 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } rand:122 [ vblank_hit main::i#14 main::$36 rand_state#10 rand::$0 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } main:4::rand:122 [ vblank_hit main::i#14 main::$36 rand_state#10 rand::$0 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } ) always clobbers reg byte a +Statement [154] (word) rand_state#0 ← (word) rand_state#10 ^ (word~) rand::$0 [ rand_state#0 ] ( rand:115 [ vblank_hit main::i#14 rand_state#0 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } main:4::rand:115 [ vblank_hit main::i#14 rand_state#0 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } rand:122 [ vblank_hit main::i#14 main::$36 rand_state#0 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } main:4::rand:122 [ vblank_hit main::i#14 main::$36 rand_state#0 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } ) always clobbers reg byte a +Statement [155] (word~) rand::$1 ← (word) rand_state#0 >> (byte) 9 [ rand_state#0 rand::$1 ] ( rand:115 [ vblank_hit main::i#14 rand_state#0 rand::$1 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } main:4::rand:115 [ vblank_hit main::i#14 rand_state#0 rand::$1 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } rand:122 [ vblank_hit main::i#14 main::$36 rand_state#0 rand::$1 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } main:4::rand:122 [ vblank_hit main::i#14 main::$36 rand_state#0 rand::$1 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } ) always clobbers reg byte a +Statement [156] (word) rand_state#1 ← (word) rand_state#0 ^ (word~) rand::$1 [ rand_state#1 ] ( rand:115 [ vblank_hit main::i#14 rand_state#1 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } main:4::rand:115 [ vblank_hit main::i#14 rand_state#1 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } rand:122 [ vblank_hit main::i#14 main::$36 rand_state#1 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } main:4::rand:122 [ vblank_hit main::i#14 main::$36 rand_state#1 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } ) always clobbers reg byte a +Statement [157] (word~) rand::$2 ← (word) rand_state#1 << (byte) 8 [ rand_state#1 rand::$2 ] ( rand:115 [ vblank_hit main::i#14 rand_state#1 rand::$2 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } main:4::rand:115 [ vblank_hit main::i#14 rand_state#1 rand::$2 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } rand:122 [ vblank_hit main::i#14 main::$36 rand_state#1 rand::$2 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } main:4::rand:122 [ vblank_hit main::i#14 main::$36 rand_state#1 rand::$2 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } ) always clobbers reg byte a +Statement [158] (word) rand_state#11 ← (word) rand_state#1 ^ (word~) rand::$2 [ rand_state#11 ] ( rand:115 [ vblank_hit main::i#14 rand_state#11 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } main:4::rand:115 [ vblank_hit main::i#14 rand_state#11 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } rand:122 [ vblank_hit main::i#14 main::$36 rand_state#11 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } main:4::rand:122 [ vblank_hit main::i#14 main::$36 rand_state#11 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } ) always clobbers reg byte a +Statement [159] (word) rand::return#0 ← (word) rand_state#11 [ rand_state#11 rand::return#0 ] ( rand:115 [ vblank_hit main::i#14 rand_state#11 rand::return#0 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } main:4::rand:115 [ vblank_hit main::i#14 rand_state#11 rand::return#0 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } rand:122 [ vblank_hit main::i#14 main::$36 rand_state#11 rand::return#0 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } main:4::rand:122 [ vblank_hit main::i#14 main::$36 rand_state#11 rand::return#0 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } ) always clobbers reg byte a Statement [1] (volatile byte) scroll_y ← (byte) 0 [ ] ( [ ] { } ) always clobbers reg byte a Statement [2] (volatile byte) vblank_hit ← (byte) 0 [ vblank_hit ] ( [ vblank_hit ] { } ) always clobbers reg byte a Statement [6] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUSCROLL) ← (byte) 0 [ scroll_y vblank_hit ] ( [ scroll_y vblank_hit ] { } ) always clobbers reg byte a @@ -4083,75 +4004,70 @@ Statement [65] *((byte*) 8193) ← (byte) $98 [ vblank_hit main::timer_2#1 main: Statement [66] if((byte) 0==(volatile byte) vblank_hit) goto main::@13 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 ] { } ) always clobbers reg byte a Statement [67] (volatile byte) vblank_hit ← (byte) 0 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 ] { } ) always clobbers reg byte a Statement [68] *((byte*) 8193) ← (byte) $18 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 ] { } ) always clobbers reg byte a -Statement [69] (word~) main::$40 ← (word) main::i#10 << (byte) 3 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 ] { } ) always clobbers reg byte a -Statement [70] (word*~) main::$61 ← (word*)(const struct $0*) balls + (word~) main::$40 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 main::$61 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 main::$61 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 main::$61 ] { } ) always clobbers reg byte a -Statement [71] (word*~) main::$62 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$40 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 main::$61 main::$62 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 main::$61 main::$62 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 main::$61 main::$62 ] { } ) always clobbers reg byte a -Statement [72] (word*~) main::$63 ← (word*)(const struct $0*) balls + (word~) main::$40 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 main::$61 main::$62 main::$63 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 main::$61 main::$62 main::$63 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 main::$61 main::$62 main::$63 ] { } ) always clobbers reg byte a -Statement [73] *((word*~) main::$63) ← *((word*~) main::$61) + *((word*~) main::$62) [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 ] { } ) always clobbers reg byte a reg byte y -Statement [74] (word*~) main::$64 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$40 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 main::$64 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 main::$64 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 main::$64 ] { } ) always clobbers reg byte a -Statement [75] (word*~) main::$65 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$40 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 main::$64 main::$65 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 main::$64 main::$65 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 main::$64 main::$65 ] { } ) always clobbers reg byte a -Statement [76] *((word*~) main::$65) ← *((word*~) main::$64) + (byte) $10 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 ] { } ) always clobbers reg byte a reg byte y -Statement [77] (word*~) main::$66 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$40 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 main::$66 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 main::$66 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 main::$66 ] { } ) always clobbers reg byte a -Statement [78] (word*~) main::$67 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$40 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 main::$66 main::$67 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 main::$66 main::$67 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 main::$66 main::$67 ] { } ) always clobbers reg byte a -Statement [79] (word*~) main::$68 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$40 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 main::$66 main::$67 main::$68 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 main::$66 main::$67 main::$68 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 main::$66 main::$67 main::$68 ] { } ) always clobbers reg byte a -Statement [80] *((word*~) main::$68) ← *((word*~) main::$66) + *((word*~) main::$67) [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$40 ] { } ) always clobbers reg byte a reg byte y -Statement [81] (word*~) main::$69 ← (word*)(const struct $0*) balls + (word~) main::$40 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$69 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$69 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$69 ] { } ) always clobbers reg byte a -Statement [82] (word~) main::$20 ← *((word*~) main::$69) >> (byte) 8 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$20 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$20 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$20 ] { } ) always clobbers reg byte a reg byte y -Statement [83] if((word~) main::$20>=(byte) 8) goto main::@9 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 ] { } ) always clobbers reg byte a -Statement [84] (word~) main::$45 ← (word) main::i#10 << (byte) 3 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$45 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$45 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$45 ] { } ) always clobbers reg byte a -Statement [85] (word*~) main::$72 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$45 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$45 main::$72 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$45 main::$72 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$45 main::$72 ] { } ) always clobbers reg byte a -Statement [86] (word*~) main::$73 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$45 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$72 main::$73 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$72 main::$73 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$72 main::$73 ] { } ) always clobbers reg byte a -Statement [87] *((word*~) main::$73) ← *((word*~) main::$72) ^ (word) $ffff [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 ] { } ) always clobbers reg byte a reg byte y -Statement [88] (word~) main::$44 ← (word) main::i#10 << (byte) 3 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] { } ) always clobbers reg byte a -Statement [89] (word*~) main::$70 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$70 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$70 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$70 ] { } ) always clobbers reg byte a -Statement [90] (word~) main::$23 ← *((word*~) main::$70) >> (byte) 8 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$23 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$23 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$23 ] { } ) always clobbers reg byte a reg byte y -Statement [91] (word*~) main::$71 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$23 main::$71 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$23 main::$71 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$23 main::$71 ] { } ) always clobbers reg byte a -Statement [92] (word~) main::$25 ← *((word*~) main::$71) >> (byte) 8 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$23 main::$25 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$23 main::$25 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$23 main::$25 ] { } ) always clobbers reg byte a reg byte y -Statement [93] (byte~) main::$26 ← (byte) main::h_bar#1 + (byte) 8 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$23 main::$25 main::$26 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$23 main::$25 main::$26 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$23 main::$25 main::$26 ] { } ) always clobbers reg byte a -Statement [94] if((word~) main::$23<(byte) main::h_bar#1) goto main::@10 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$25 main::$26 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$25 main::$26 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$25 main::$26 ] { } ) always clobbers reg byte a -Statement [95] if((word~) main::$25>=(byte~) main::$26) goto main::@10 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 ] { } ) always clobbers reg byte a -Statement [96] (word~) main::$53 ← (word) main::i#10 << (byte) 3 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$53 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$53 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$53 ] { } ) always clobbers reg byte a -Statement [97] (word*~) main::$76 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$53 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$53 main::$76 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$53 main::$76 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$53 main::$76 ] { } ) always clobbers reg byte a -Statement [98] (word*~) main::$77 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$53 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$53 main::$76 main::$77 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$53 main::$76 main::$77 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$53 main::$76 main::$77 ] { } ) always clobbers reg byte a -Statement [99] *((word*~) main::$77) ← *((word*~) main::$76) ^ (word) $ffff [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$53 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$53 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$53 ] { } ) always clobbers reg byte a reg byte y -Statement [101] (word~) main::$56 ← (word)(byte~) main::$30 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$53 main::$56 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$53 main::$56 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$53 main::$56 ] { } ) always clobbers reg byte a -Statement [102] (word~) main::$31 ← (word~) main::$56 << (byte) 8 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$53 main::$31 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$53 main::$31 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$53 main::$31 ] { } ) always clobbers reg byte a -Statement [103] (word*~) main::$78 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$53 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$31 main::$78 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$31 main::$78 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$31 main::$78 ] { } ) always clobbers reg byte a -Statement [104] *((word*~) main::$78) ← (word~) main::$31 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 ] { } ) always clobbers reg byte a reg byte y -Statement [105] (word~) main::$50 ← (word) main::i#10 << (byte) 3 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$50 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$50 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$50 ] { } ) always clobbers reg byte a -Statement [106] (word*~) main::$74 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$50 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$50 main::$74 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$50 main::$74 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$50 main::$74 ] { } ) always clobbers reg byte a -Statement [107] (word~) main::$32 ← *((word*~) main::$74) >> (byte) 8 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$50 main::$32 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$50 main::$32 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$50 main::$32 ] { } ) always clobbers reg byte a reg byte y -Statement [108] (byte~) main::$48 ← (byte) main::sprite_idx#3 << (byte) 2 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$50 main::$32 main::$48 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$50 main::$32 main::$48 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$50 main::$32 main::$48 ] { } ) always clobbers reg byte a -Statement [109] *((byte*)(const struct SpriteData*) SPRITE_BUFFER + (byte~) main::$48) ← (byte)(word~) main::$32 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$50 main::$48 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$50 main::$48 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$50 main::$48 ] { } ) always clobbers reg byte a -Statement [110] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_TILE + (byte~) main::$48) ← (byte) $a [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$50 main::$48 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$50 main::$48 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$50 main::$48 ] { } ) always clobbers reg byte a -Statement [111] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_ATTRIBUTES + (byte~) main::$48) ← (byte) 3 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$50 main::$48 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$50 main::$48 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$50 main::$48 ] { } ) always clobbers reg byte a -Statement [112] (word*~) main::$75 ← (word*)(const struct $0*) balls + (word~) main::$50 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$48 main::$75 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$48 main::$75 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$48 main::$75 ] { } ) always clobbers reg byte a -Statement [113] (word~) main::$33 ← *((word*~) main::$75) >> (byte) 8 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$48 main::$33 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$48 main::$33 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$48 main::$33 ] { } ) always clobbers reg byte a reg byte y -Statement [114] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X + (byte~) main::$48) ← (byte)(word~) main::$33 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 ] { } ) always clobbers reg byte a -Statement [120] (word) rand::return#2 ← (word) rand::return#0 [ vblank_hit main::i#14 rand_state#11 rand::return#2 ] ( [ vblank_hit main::i#14 rand_state#11 rand::return#2 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } main:4 [ vblank_hit main::i#14 rand_state#11 rand::return#2 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a -Statement [121] (word~) main::$9 ← (word) rand::return#2 [ vblank_hit main::i#14 rand_state#11 main::$9 ] ( [ vblank_hit main::i#14 rand_state#11 main::$9 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } main:4 [ vblank_hit main::i#14 rand_state#11 main::$9 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } ) always clobbers reg byte a -Statement [122] (word~) main::$10 ← (word~) main::$9 & (word) $3ff [ vblank_hit main::i#14 rand_state#11 main::$10 ] ( [ vblank_hit main::i#14 rand_state#11 main::$10 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } main:4 [ vblank_hit main::i#14 rand_state#11 main::$10 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } ) always clobbers reg byte a -Statement [123] (word~) main::$35 ← (word) main::i#14 << (byte) 3 [ vblank_hit main::i#14 rand_state#11 main::$10 main::$35 ] ( [ vblank_hit main::i#14 rand_state#11 main::$10 main::$35 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } main:4 [ vblank_hit main::i#14 rand_state#11 main::$10 main::$35 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } ) always clobbers reg byte a -Statement [124] (word*~) main::$59 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$35 [ vblank_hit main::i#14 rand_state#11 main::$10 main::$59 ] ( [ vblank_hit main::i#14 rand_state#11 main::$10 main::$59 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } main:4 [ vblank_hit main::i#14 rand_state#11 main::$10 main::$59 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } ) always clobbers reg byte a -Statement [125] *((word*~) main::$59) ← (word~) main::$10 [ vblank_hit main::i#14 rand_state#11 ] ( [ vblank_hit main::i#14 rand_state#11 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } main:4 [ vblank_hit main::i#14 rand_state#11 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } ) always clobbers reg byte a reg byte y -Statement [127] (word) rand::return#3 ← (word) rand::return#0 [ vblank_hit main::i#14 rand_state#11 rand::return#3 ] ( [ vblank_hit main::i#14 rand_state#11 rand::return#3 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } main:4 [ vblank_hit main::i#14 rand_state#11 rand::return#3 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } ) always clobbers reg byte a -Statement [128] (word~) main::$11 ← (word) rand::return#3 [ vblank_hit main::i#14 rand_state#11 main::$11 ] ( [ vblank_hit main::i#14 rand_state#11 main::$11 ] { } main:4 [ vblank_hit main::i#14 rand_state#11 main::$11 ] { } ) always clobbers reg byte a -Statement [129] (byte~) main::$12 ← (word~) main::$11 & (byte) $ff [ vblank_hit main::i#14 rand_state#11 main::$12 ] ( [ vblank_hit main::i#14 rand_state#11 main::$12 ] { } main:4 [ vblank_hit main::i#14 rand_state#11 main::$12 ] { } ) always clobbers reg byte a -Statement [130] (word~) main::$36 ← (word) main::i#14 << (byte) 3 [ vblank_hit main::i#14 rand_state#11 main::$12 main::$36 ] ( [ vblank_hit main::i#14 rand_state#11 main::$12 main::$36 ] { } main:4 [ vblank_hit main::i#14 rand_state#11 main::$12 main::$36 ] { } ) always clobbers reg byte a -Statement [131] (word*~) main::$60 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$36 [ vblank_hit main::i#14 rand_state#11 main::$12 main::$60 ] ( [ vblank_hit main::i#14 rand_state#11 main::$12 main::$60 ] { } main:4 [ vblank_hit main::i#14 rand_state#11 main::$12 main::$60 ] { } ) always clobbers reg byte a -Statement [132] *((word*~) main::$60) ← (byte~) main::$12 [ vblank_hit main::i#14 rand_state#11 ] ( [ vblank_hit main::i#14 rand_state#11 ] { } main:4 [ vblank_hit main::i#14 rand_state#11 ] { } ) always clobbers reg byte a reg byte y -Statement [139] (byte*) ppuDataTransfer::cpuSrc#6 ← (byte*)(nomodify void*) ppuDataTransfer::cpuData#2 [ ppuDataTransfer::cpuSrc#6 ] ( ppuDataTransfer:38 [ vblank_hit ppuDataTransfer::cpuSrc#6 ] { } main:4::ppuDataTransfer:38 [ vblank_hit ppuDataTransfer::cpuSrc#6 ] { } ppuDataTransfer:44 [ vblank_hit ppuDataTransfer::cpuSrc#6 ] { } main:4::ppuDataTransfer:44 [ vblank_hit ppuDataTransfer::cpuSrc#6 ] { } ) always clobbers reg byte a -Statement [141] if((word) ppuDataTransfer::i#2<(byte) $20*(const byte) SIZEOF_BYTE) goto ppuDataTransfer::@2 [ ppuDataTransfer::i#2 ppuDataTransfer::cpuSrc#2 ] ( ppuDataTransfer:38 [ vblank_hit ppuDataTransfer::i#2 ppuDataTransfer::cpuSrc#2 ] { } main:4::ppuDataTransfer:38 [ vblank_hit ppuDataTransfer::i#2 ppuDataTransfer::cpuSrc#2 ] { } ppuDataTransfer:44 [ vblank_hit ppuDataTransfer::i#2 ppuDataTransfer::cpuSrc#2 ] { } main:4::ppuDataTransfer:44 [ vblank_hit ppuDataTransfer::i#2 ppuDataTransfer::cpuSrc#2 ] { } ) always clobbers reg byte a -Statement [143] (byte) ppuDataTransfer::ppuDataPut1_val#0 ← *((byte*) ppuDataTransfer::cpuSrc#2) [ ppuDataTransfer::i#2 ppuDataTransfer::cpuSrc#2 ppuDataTransfer::ppuDataPut1_val#0 ] ( ppuDataTransfer:38 [ vblank_hit ppuDataTransfer::i#2 ppuDataTransfer::cpuSrc#2 ppuDataTransfer::ppuDataPut1_val#0 ] { } main:4::ppuDataTransfer:38 [ vblank_hit ppuDataTransfer::i#2 ppuDataTransfer::cpuSrc#2 ppuDataTransfer::ppuDataPut1_val#0 ] { } ppuDataTransfer:44 [ vblank_hit ppuDataTransfer::i#2 ppuDataTransfer::cpuSrc#2 ppuDataTransfer::ppuDataPut1_val#0 ] { } main:4::ppuDataTransfer:44 [ vblank_hit ppuDataTransfer::i#2 ppuDataTransfer::cpuSrc#2 ppuDataTransfer::ppuDataPut1_val#0 ] { } ) always clobbers reg byte a reg byte y -Statement [153] if((word) ppuDataFill::i#2<(word) ppuDataFill::size#3) goto ppuDataFill::ppuDataPut1 [ ppuDataFill::size#3 ppuDataFill::i#2 ] ( ppuDataFill:40 [ vblank_hit ppuDataFill::size#3 ppuDataFill::i#2 ] { } main:4::ppuDataFill:40 [ vblank_hit ppuDataFill::size#3 ppuDataFill::i#2 ] { } ppuDataFill:42 [ vblank_hit ppuDataFill::size#3 ppuDataFill::i#2 ] { } main:4::ppuDataFill:42 [ vblank_hit ppuDataFill::size#3 ppuDataFill::i#2 ] { } ) always clobbers reg byte a -Statement [155] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) 0 [ ppuDataFill::size#3 ppuDataFill::i#2 ] ( ppuDataFill:40 [ vblank_hit ppuDataFill::size#3 ppuDataFill::i#2 ] { } main:4::ppuDataFill:40 [ vblank_hit ppuDataFill::size#3 ppuDataFill::i#2 ] { } ppuDataFill:42 [ vblank_hit ppuDataFill::size#3 ppuDataFill::i#2 ] { } main:4::ppuDataFill:42 [ vblank_hit ppuDataFill::size#3 ppuDataFill::i#2 ] { } ) always clobbers reg byte a -Statement [158] (word~) rand::$0 ← (word) rand_state#10 << (byte) 7 [ rand_state#10 rand::$0 ] ( rand:119 [ vblank_hit main::i#14 rand_state#10 rand::$0 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } main:4::rand:119 [ vblank_hit main::i#14 rand_state#10 rand::$0 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } rand:126 [ vblank_hit main::i#14 rand_state#10 rand::$0 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } main:4::rand:126 [ vblank_hit main::i#14 rand_state#10 rand::$0 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } ) always clobbers reg byte a -Statement [159] (word) rand_state#0 ← (word) rand_state#10 ^ (word~) rand::$0 [ rand_state#0 ] ( rand:119 [ vblank_hit main::i#14 rand_state#0 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } main:4::rand:119 [ vblank_hit main::i#14 rand_state#0 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } rand:126 [ vblank_hit main::i#14 rand_state#0 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } main:4::rand:126 [ vblank_hit main::i#14 rand_state#0 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } ) always clobbers reg byte a -Statement [160] (word~) rand::$1 ← (word) rand_state#0 >> (byte) 9 [ rand_state#0 rand::$1 ] ( rand:119 [ vblank_hit main::i#14 rand_state#0 rand::$1 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } main:4::rand:119 [ vblank_hit main::i#14 rand_state#0 rand::$1 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } rand:126 [ vblank_hit main::i#14 rand_state#0 rand::$1 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } main:4::rand:126 [ vblank_hit main::i#14 rand_state#0 rand::$1 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } ) always clobbers reg byte a -Statement [161] (word) rand_state#1 ← (word) rand_state#0 ^ (word~) rand::$1 [ rand_state#1 ] ( rand:119 [ vblank_hit main::i#14 rand_state#1 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } main:4::rand:119 [ vblank_hit main::i#14 rand_state#1 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } rand:126 [ vblank_hit main::i#14 rand_state#1 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } main:4::rand:126 [ vblank_hit main::i#14 rand_state#1 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } ) always clobbers reg byte a -Statement [162] (word~) rand::$2 ← (word) rand_state#1 << (byte) 8 [ rand_state#1 rand::$2 ] ( rand:119 [ vblank_hit main::i#14 rand_state#1 rand::$2 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } main:4::rand:119 [ vblank_hit main::i#14 rand_state#1 rand::$2 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } rand:126 [ vblank_hit main::i#14 rand_state#1 rand::$2 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } main:4::rand:126 [ vblank_hit main::i#14 rand_state#1 rand::$2 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } ) always clobbers reg byte a -Statement [163] (word) rand_state#11 ← (word) rand_state#1 ^ (word~) rand::$2 [ rand_state#11 ] ( rand:119 [ vblank_hit main::i#14 rand_state#11 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } main:4::rand:119 [ vblank_hit main::i#14 rand_state#11 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } rand:126 [ vblank_hit main::i#14 rand_state#11 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } main:4::rand:126 [ vblank_hit main::i#14 rand_state#11 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } ) always clobbers reg byte a -Statement [164] (word) rand::return#0 ← (word) rand_state#11 [ rand_state#11 rand::return#0 ] ( rand:119 [ vblank_hit main::i#14 rand_state#11 rand::return#0 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } main:4::rand:119 [ vblank_hit main::i#14 rand_state#11 rand::return#0 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } rand:126 [ vblank_hit main::i#14 rand_state#11 rand::return#0 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } main:4::rand:126 [ vblank_hit main::i#14 rand_state#11 rand::return#0 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } ) always clobbers reg byte a +Statement [69] (word~) main::$44 ← (word) main::i#10 << (byte) 3 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] { } ) always clobbers reg byte a +Statement [70] (word*~) main::$61 ← (word*)(const struct $0*) balls + (word~) main::$44 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$61 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$61 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$61 ] { } ) always clobbers reg byte a +Statement [71] (word*~) main::$62 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$44 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$61 main::$62 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$61 main::$62 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$61 main::$62 ] { } ) always clobbers reg byte a +Statement [72] (word*~) main::$63 ← (word*)(const struct $0*) balls + (word~) main::$44 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$61 main::$62 main::$63 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$61 main::$62 main::$63 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$61 main::$62 main::$63 ] { } ) always clobbers reg byte a +Statement [73] *((word*~) main::$63) ← *((word*~) main::$61) + *((word*~) main::$62) [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] { } ) always clobbers reg byte a reg byte y +Statement [74] (word*~) main::$64 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$64 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$64 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$64 ] { } ) always clobbers reg byte a +Statement [75] (word*~) main::$65 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$64 main::$65 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$64 main::$65 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$64 main::$65 ] { } ) always clobbers reg byte a +Statement [76] *((word*~) main::$65) ← *((word*~) main::$64) + (byte) $10 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] { } ) always clobbers reg byte a reg byte y +Statement [77] (word*~) main::$66 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$66 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$66 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$66 ] { } ) always clobbers reg byte a +Statement [78] (word*~) main::$67 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$66 main::$67 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$66 main::$67 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$66 main::$67 ] { } ) always clobbers reg byte a +Statement [79] (word*~) main::$68 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$66 main::$67 main::$68 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$66 main::$67 main::$68 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$66 main::$67 main::$68 ] { } ) always clobbers reg byte a +Statement [80] *((word*~) main::$68) ← *((word*~) main::$66) + *((word*~) main::$67) [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] { } ) always clobbers reg byte a reg byte y +Statement [81] (word*~) main::$69 ← (word*)(const struct $0*) balls + (word~) main::$44 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$69 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$69 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$69 ] { } ) always clobbers reg byte a +Statement [82] (word~) main::$20 ← *((word*~) main::$69) >> (byte) 8 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$20 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$20 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$20 ] { } ) always clobbers reg byte a reg byte y +Statement [83] if((word~) main::$20>=(byte) 8) goto main::@9 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] { } ) always clobbers reg byte a +Statement [84] (word*~) main::$72 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$44 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$72 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$72 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$72 ] { } ) always clobbers reg byte a +Statement [85] (word*~) main::$73 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$44 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$72 main::$73 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$72 main::$73 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$72 main::$73 ] { } ) always clobbers reg byte a +Statement [86] *((word*~) main::$73) ← *((word*~) main::$72) ^ (word) $ffff [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] { } ) always clobbers reg byte a reg byte y +Statement [87] (word*~) main::$70 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$70 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$70 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$70 ] { } ) always clobbers reg byte a +Statement [88] (word~) main::$23 ← *((word*~) main::$70) >> (byte) 8 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$23 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$23 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$23 ] { } ) always clobbers reg byte a reg byte y +Statement [89] (word*~) main::$71 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$23 main::$71 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$23 main::$71 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$23 main::$71 ] { } ) always clobbers reg byte a +Statement [90] (word~) main::$25 ← *((word*~) main::$71) >> (byte) 8 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$23 main::$25 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$23 main::$25 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$23 main::$25 ] { } ) always clobbers reg byte a reg byte y +Statement [91] (byte~) main::$26 ← (byte) main::h_bar#1 + (byte) 8 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$23 main::$25 main::$26 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$23 main::$25 main::$26 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$23 main::$25 main::$26 ] { } ) always clobbers reg byte a +Statement [92] if((word~) main::$23<(byte) main::h_bar#1) goto main::@10 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$25 main::$26 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$25 main::$26 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$25 main::$26 ] { } ) always clobbers reg byte a +Statement [93] if((word~) main::$25>=(byte~) main::$26) goto main::@10 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] { } ) always clobbers reg byte a +Statement [94] (word*~) main::$76 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$76 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$76 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$76 ] { } ) always clobbers reg byte a +Statement [95] (word*~) main::$77 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$76 main::$77 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$76 main::$77 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$76 main::$77 ] { } ) always clobbers reg byte a +Statement [96] *((word*~) main::$77) ← *((word*~) main::$76) ^ (word) $ffff [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] { } ) always clobbers reg byte a reg byte y +Statement [98] (word~) main::$56 ← (word)(byte~) main::$30 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$56 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$56 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$56 ] { } ) always clobbers reg byte a +Statement [99] (word~) main::$31 ← (word~) main::$56 << (byte) 8 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$31 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$31 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$31 ] { } ) always clobbers reg byte a +Statement [100] (word*~) main::$78 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$31 main::$78 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$31 main::$78 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$31 main::$78 ] { } ) always clobbers reg byte a +Statement [101] *((word*~) main::$78) ← (word~) main::$31 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 ] { } ) always clobbers reg byte a reg byte y +Statement [102] (word*~) main::$74 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$74 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$74 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$74 ] { } ) always clobbers reg byte a +Statement [103] (word~) main::$32 ← *((word*~) main::$74) >> (byte) 8 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$32 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$32 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$32 ] { } ) always clobbers reg byte a reg byte y +Statement [104] (byte~) main::$48 ← (byte) main::sprite_idx#3 << (byte) 2 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$32 main::$48 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$32 main::$48 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$32 main::$48 ] { } ) always clobbers reg byte a +Statement [105] *((byte*)(const struct SpriteData*) SPRITE_BUFFER + (byte~) main::$48) ← (byte)(word~) main::$32 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$48 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$48 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$48 ] { } ) always clobbers reg byte a +Statement [106] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_TILE + (byte~) main::$48) ← (byte) $a [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$48 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$48 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$48 ] { } ) always clobbers reg byte a +Statement [107] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_ATTRIBUTES + (byte~) main::$48) ← (byte) 3 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$48 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$48 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$44 main::$48 ] { } ) always clobbers reg byte a +Statement [108] (word*~) main::$75 ← (word*)(const struct $0*) balls + (word~) main::$44 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$48 main::$75 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$48 main::$75 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$48 main::$75 ] { } ) always clobbers reg byte a +Statement [109] (word~) main::$33 ← *((word*~) main::$75) >> (byte) 8 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$48 main::$33 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$48 main::$33 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 main::$48 main::$33 ] { } ) always clobbers reg byte a reg byte y +Statement [110] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X + (byte~) main::$48) ← (byte)(word~) main::$33 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 ] ( [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 ] { } main:4 [ vblank_hit main::timer_2#1 main::active_balls#8 main::timer#15 main::h_bar#1 main::i#10 main::sprite_idx#3 ] { } ) always clobbers reg byte a +Statement [116] (word) rand::return#2 ← (word) rand::return#0 [ vblank_hit main::i#14 rand_state#11 rand::return#2 ] ( [ vblank_hit main::i#14 rand_state#11 rand::return#2 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } main:4 [ vblank_hit main::i#14 rand_state#11 rand::return#2 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } ) always clobbers reg byte a +Statement [117] (word~) main::$9 ← (word) rand::return#2 [ vblank_hit main::i#14 rand_state#11 main::$9 ] ( [ vblank_hit main::i#14 rand_state#11 main::$9 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } main:4 [ vblank_hit main::i#14 rand_state#11 main::$9 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } ) always clobbers reg byte a +Statement [118] (word~) main::$10 ← (word~) main::$9 & (word) $3ff [ vblank_hit main::i#14 rand_state#11 main::$10 ] ( [ vblank_hit main::i#14 rand_state#11 main::$10 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } main:4 [ vblank_hit main::i#14 rand_state#11 main::$10 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } ) always clobbers reg byte a +Statement [119] (word~) main::$36 ← (word) main::i#14 << (byte) 3 [ vblank_hit main::i#14 rand_state#11 main::$10 main::$36 ] ( [ vblank_hit main::i#14 rand_state#11 main::$10 main::$36 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } main:4 [ vblank_hit main::i#14 rand_state#11 main::$10 main::$36 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } ) always clobbers reg byte a +Statement [120] (word*~) main::$59 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$36 [ vblank_hit main::i#14 rand_state#11 main::$10 main::$36 main::$59 ] ( [ vblank_hit main::i#14 rand_state#11 main::$10 main::$36 main::$59 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } main:4 [ vblank_hit main::i#14 rand_state#11 main::$10 main::$36 main::$59 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } ) always clobbers reg byte a +Statement [121] *((word*~) main::$59) ← (word~) main::$10 [ vblank_hit main::i#14 rand_state#11 main::$36 ] ( [ vblank_hit main::i#14 rand_state#11 main::$36 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } main:4 [ vblank_hit main::i#14 rand_state#11 main::$36 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } ) always clobbers reg byte a reg byte y +Statement [123] (word) rand::return#3 ← (word) rand::return#0 [ vblank_hit main::i#14 rand_state#11 main::$36 rand::return#3 ] ( [ vblank_hit main::i#14 rand_state#11 main::$36 rand::return#3 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } main:4 [ vblank_hit main::i#14 rand_state#11 main::$36 rand::return#3 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } ) always clobbers reg byte a +Statement [124] (word~) main::$11 ← (word) rand::return#3 [ vblank_hit main::i#14 rand_state#11 main::$36 main::$11 ] ( [ vblank_hit main::i#14 rand_state#11 main::$36 main::$11 ] { } main:4 [ vblank_hit main::i#14 rand_state#11 main::$36 main::$11 ] { } ) always clobbers reg byte a +Statement [125] (byte~) main::$12 ← (word~) main::$11 & (byte) $ff [ vblank_hit main::i#14 rand_state#11 main::$36 main::$12 ] ( [ vblank_hit main::i#14 rand_state#11 main::$36 main::$12 ] { } main:4 [ vblank_hit main::i#14 rand_state#11 main::$36 main::$12 ] { } ) always clobbers reg byte a +Statement [126] (word*~) main::$60 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$36 [ vblank_hit main::i#14 rand_state#11 main::$12 main::$60 ] ( [ vblank_hit main::i#14 rand_state#11 main::$12 main::$60 ] { } main:4 [ vblank_hit main::i#14 rand_state#11 main::$12 main::$60 ] { } ) always clobbers reg byte a +Statement [127] *((word*~) main::$60) ← (byte~) main::$12 [ vblank_hit main::i#14 rand_state#11 ] ( [ vblank_hit main::i#14 rand_state#11 ] { } main:4 [ vblank_hit main::i#14 rand_state#11 ] { } ) always clobbers reg byte a reg byte y +Statement [134] (byte*) ppuDataTransfer::cpuSrc#6 ← (byte*)(nomodify void*) ppuDataTransfer::cpuData#2 [ ppuDataTransfer::cpuSrc#6 ] ( ppuDataTransfer:38 [ vblank_hit ppuDataTransfer::cpuSrc#6 ] { } main:4::ppuDataTransfer:38 [ vblank_hit ppuDataTransfer::cpuSrc#6 ] { } ppuDataTransfer:44 [ vblank_hit ppuDataTransfer::cpuSrc#6 ] { } main:4::ppuDataTransfer:44 [ vblank_hit ppuDataTransfer::cpuSrc#6 ] { } ) always clobbers reg byte a +Statement [136] if((word) ppuDataTransfer::i#2<(byte) $20*(const byte) SIZEOF_BYTE) goto ppuDataTransfer::@2 [ ppuDataTransfer::i#2 ppuDataTransfer::cpuSrc#2 ] ( ppuDataTransfer:38 [ vblank_hit ppuDataTransfer::i#2 ppuDataTransfer::cpuSrc#2 ] { } main:4::ppuDataTransfer:38 [ vblank_hit ppuDataTransfer::i#2 ppuDataTransfer::cpuSrc#2 ] { } ppuDataTransfer:44 [ vblank_hit ppuDataTransfer::i#2 ppuDataTransfer::cpuSrc#2 ] { } main:4::ppuDataTransfer:44 [ vblank_hit ppuDataTransfer::i#2 ppuDataTransfer::cpuSrc#2 ] { } ) always clobbers reg byte a +Statement [138] (byte) ppuDataTransfer::ppuDataPut1_val#0 ← *((byte*) ppuDataTransfer::cpuSrc#2) [ ppuDataTransfer::i#2 ppuDataTransfer::cpuSrc#2 ppuDataTransfer::ppuDataPut1_val#0 ] ( ppuDataTransfer:38 [ vblank_hit ppuDataTransfer::i#2 ppuDataTransfer::cpuSrc#2 ppuDataTransfer::ppuDataPut1_val#0 ] { } main:4::ppuDataTransfer:38 [ vblank_hit ppuDataTransfer::i#2 ppuDataTransfer::cpuSrc#2 ppuDataTransfer::ppuDataPut1_val#0 ] { } ppuDataTransfer:44 [ vblank_hit ppuDataTransfer::i#2 ppuDataTransfer::cpuSrc#2 ppuDataTransfer::ppuDataPut1_val#0 ] { } main:4::ppuDataTransfer:44 [ vblank_hit ppuDataTransfer::i#2 ppuDataTransfer::cpuSrc#2 ppuDataTransfer::ppuDataPut1_val#0 ] { } ) always clobbers reg byte a reg byte y +Statement [148] if((word) ppuDataFill::i#2<(word) ppuDataFill::size#3) goto ppuDataFill::ppuDataPut1 [ ppuDataFill::size#3 ppuDataFill::i#2 ] ( ppuDataFill:40 [ vblank_hit ppuDataFill::size#3 ppuDataFill::i#2 ] { } main:4::ppuDataFill:40 [ vblank_hit ppuDataFill::size#3 ppuDataFill::i#2 ] { } ppuDataFill:42 [ vblank_hit ppuDataFill::size#3 ppuDataFill::i#2 ] { } main:4::ppuDataFill:42 [ vblank_hit ppuDataFill::size#3 ppuDataFill::i#2 ] { } ) always clobbers reg byte a +Statement [150] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) 0 [ ppuDataFill::size#3 ppuDataFill::i#2 ] ( ppuDataFill:40 [ vblank_hit ppuDataFill::size#3 ppuDataFill::i#2 ] { } main:4::ppuDataFill:40 [ vblank_hit ppuDataFill::size#3 ppuDataFill::i#2 ] { } ppuDataFill:42 [ vblank_hit ppuDataFill::size#3 ppuDataFill::i#2 ] { } main:4::ppuDataFill:42 [ vblank_hit ppuDataFill::size#3 ppuDataFill::i#2 ] { } ) always clobbers reg byte a +Statement [153] (word~) rand::$0 ← (word) rand_state#10 << (byte) 7 [ rand_state#10 rand::$0 ] ( rand:115 [ vblank_hit main::i#14 rand_state#10 rand::$0 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } main:4::rand:115 [ vblank_hit main::i#14 rand_state#10 rand::$0 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } rand:122 [ vblank_hit main::i#14 main::$36 rand_state#10 rand::$0 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } main:4::rand:122 [ vblank_hit main::i#14 main::$36 rand_state#10 rand::$0 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } ) always clobbers reg byte a +Statement [154] (word) rand_state#0 ← (word) rand_state#10 ^ (word~) rand::$0 [ rand_state#0 ] ( rand:115 [ vblank_hit main::i#14 rand_state#0 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } main:4::rand:115 [ vblank_hit main::i#14 rand_state#0 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } rand:122 [ vblank_hit main::i#14 main::$36 rand_state#0 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } main:4::rand:122 [ vblank_hit main::i#14 main::$36 rand_state#0 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } ) always clobbers reg byte a +Statement [155] (word~) rand::$1 ← (word) rand_state#0 >> (byte) 9 [ rand_state#0 rand::$1 ] ( rand:115 [ vblank_hit main::i#14 rand_state#0 rand::$1 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } main:4::rand:115 [ vblank_hit main::i#14 rand_state#0 rand::$1 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } rand:122 [ vblank_hit main::i#14 main::$36 rand_state#0 rand::$1 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } main:4::rand:122 [ vblank_hit main::i#14 main::$36 rand_state#0 rand::$1 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } ) always clobbers reg byte a +Statement [156] (word) rand_state#1 ← (word) rand_state#0 ^ (word~) rand::$1 [ rand_state#1 ] ( rand:115 [ vblank_hit main::i#14 rand_state#1 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } main:4::rand:115 [ vblank_hit main::i#14 rand_state#1 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } rand:122 [ vblank_hit main::i#14 main::$36 rand_state#1 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } main:4::rand:122 [ vblank_hit main::i#14 main::$36 rand_state#1 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } ) always clobbers reg byte a +Statement [157] (word~) rand::$2 ← (word) rand_state#1 << (byte) 8 [ rand_state#1 rand::$2 ] ( rand:115 [ vblank_hit main::i#14 rand_state#1 rand::$2 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } main:4::rand:115 [ vblank_hit main::i#14 rand_state#1 rand::$2 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } rand:122 [ vblank_hit main::i#14 main::$36 rand_state#1 rand::$2 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } main:4::rand:122 [ vblank_hit main::i#14 main::$36 rand_state#1 rand::$2 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } ) always clobbers reg byte a +Statement [158] (word) rand_state#11 ← (word) rand_state#1 ^ (word~) rand::$2 [ rand_state#11 ] ( rand:115 [ vblank_hit main::i#14 rand_state#11 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } main:4::rand:115 [ vblank_hit main::i#14 rand_state#11 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } rand:122 [ vblank_hit main::i#14 main::$36 rand_state#11 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } main:4::rand:122 [ vblank_hit main::i#14 main::$36 rand_state#11 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } ) always clobbers reg byte a +Statement [159] (word) rand::return#0 ← (word) rand_state#11 [ rand_state#11 rand::return#0 ] ( rand:115 [ vblank_hit main::i#14 rand_state#11 rand::return#0 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } main:4::rand:115 [ vblank_hit main::i#14 rand_state#11 rand::return#0 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } rand:122 [ vblank_hit main::i#14 main::$36 rand_state#11 rand::return#0 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } main:4::rand:122 [ vblank_hit main::i#14 main::$36 rand_state#11 rand::return#0 ] { { rand_state#10 = rand_state#11 } { rand::return#0 = rand::return#3 } } ) always clobbers reg byte a Potential registers zp[1]:2 [ main::initNES1_i#2 main::initNES1_i#1 ] : zp[1]:2 , reg byte x , reg byte y , Potential registers zp[2]:3 [ main::i#14 main::i#2 ] : zp[2]:3 , Potential registers zp[1]:5 [ main::timer_2#2 main::timer_2#1 ] : zp[1]:5 , reg byte x , @@ -4175,7 +4091,7 @@ Potential registers zp[1]:31 [ main::h_bar#1 ] : zp[1]:31 , reg byte x , Potential registers zp[1]:32 [ main::$14 ] : zp[1]:32 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:33 [ main::timer#1 ] : zp[1]:33 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:34 [ main::$38 ] : zp[1]:34 , reg byte x , reg byte y , -Potential registers zp[2]:35 [ main::$40 ] : zp[2]:35 , +Potential registers zp[2]:35 [ main::$44 ] : zp[2]:35 , Potential registers zp[2]:37 [ main::$61 ] : zp[2]:37 , Potential registers zp[2]:39 [ main::$62 ] : zp[2]:39 , Potential registers zp[2]:41 [ main::$63 ] : zp[2]:41 , @@ -4186,56 +4102,51 @@ Potential registers zp[2]:49 [ main::$67 ] : zp[2]:49 , Potential registers zp[2]:51 [ main::$68 ] : zp[2]:51 , Potential registers zp[2]:53 [ main::$69 ] : zp[2]:53 , Potential registers zp[2]:55 [ main::$20 ] : zp[2]:55 , -Potential registers zp[2]:57 [ main::$45 ] : zp[2]:57 , -Potential registers zp[2]:59 [ main::$72 ] : zp[2]:59 , -Potential registers zp[2]:61 [ main::$73 ] : zp[2]:61 , -Potential registers zp[2]:63 [ main::$44 ] : zp[2]:63 , -Potential registers zp[2]:65 [ main::$70 ] : zp[2]:65 , -Potential registers zp[2]:67 [ main::$23 ] : zp[2]:67 , -Potential registers zp[2]:69 [ main::$71 ] : zp[2]:69 , -Potential registers zp[2]:71 [ main::$25 ] : zp[2]:71 , -Potential registers zp[1]:73 [ main::$26 ] : zp[1]:73 , reg byte x , reg byte y , -Potential registers zp[2]:74 [ main::$53 ] : zp[2]:74 , -Potential registers zp[2]:76 [ main::$76 ] : zp[2]:76 , -Potential registers zp[2]:78 [ main::$77 ] : zp[2]:78 , -Potential registers zp[1]:80 [ main::$30 ] : zp[1]:80 , reg byte a , reg byte x , reg byte y , -Potential registers zp[2]:81 [ main::$56 ] : zp[2]:81 , -Potential registers zp[2]:83 [ main::$31 ] : zp[2]:83 , -Potential registers zp[2]:85 [ main::$78 ] : zp[2]:85 , -Potential registers zp[2]:87 [ main::$50 ] : zp[2]:87 , -Potential registers zp[2]:89 [ main::$74 ] : zp[2]:89 , -Potential registers zp[2]:91 [ main::$32 ] : zp[2]:91 , -Potential registers zp[1]:93 [ main::$48 ] : zp[1]:93 , reg byte x , -Potential registers zp[2]:94 [ main::$75 ] : zp[2]:94 , -Potential registers zp[2]:96 [ main::$33 ] : zp[2]:96 , -Potential registers zp[2]:98 [ rand::return#2 ] : zp[2]:98 , -Potential registers zp[2]:100 [ main::$9 ] : zp[2]:100 , -Potential registers zp[2]:102 [ main::$10 ] : zp[2]:102 , -Potential registers zp[2]:104 [ main::$35 ] : zp[2]:104 , -Potential registers zp[2]:106 [ main::$59 ] : zp[2]:106 , -Potential registers zp[2]:108 [ rand::return#3 ] : zp[2]:108 , -Potential registers zp[2]:110 [ main::$11 ] : zp[2]:110 , -Potential registers zp[1]:112 [ main::$12 ] : zp[1]:112 , reg byte x , reg byte y , -Potential registers zp[2]:113 [ main::$36 ] : zp[2]:113 , -Potential registers zp[2]:115 [ main::$60 ] : zp[2]:115 , -Potential registers zp[1]:117 [ ppuDataTransfer::ppuDataPrepare1_$0 ] : zp[1]:117 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:118 [ ppuDataTransfer::ppuDataPrepare1_$1 ] : zp[1]:118 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:119 [ ppuDataTransfer::ppuDataPut1_val#0 ] : zp[1]:119 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:120 [ ppuDataFill::ppuDataPrepare1_$0 ] : zp[1]:120 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:121 [ ppuDataFill::ppuDataPrepare1_$1 ] : zp[1]:121 , reg byte a , reg byte x , reg byte y , -Potential registers zp[2]:122 [ rand::$0 ] : zp[2]:122 , -Potential registers zp[2]:124 [ rand_state#0 ] : zp[2]:124 , -Potential registers zp[2]:126 [ rand::$1 ] : zp[2]:126 , -Potential registers zp[2]:128 [ rand_state#1 ] : zp[2]:128 , -Potential registers zp[2]:130 [ rand::$2 ] : zp[2]:130 , -Potential registers zp[2]:132 [ rand::return#0 ] : zp[2]:132 , +Potential registers zp[2]:57 [ main::$72 ] : zp[2]:57 , +Potential registers zp[2]:59 [ main::$73 ] : zp[2]:59 , +Potential registers zp[2]:61 [ main::$70 ] : zp[2]:61 , +Potential registers zp[2]:63 [ main::$23 ] : zp[2]:63 , +Potential registers zp[2]:65 [ main::$71 ] : zp[2]:65 , +Potential registers zp[2]:67 [ main::$25 ] : zp[2]:67 , +Potential registers zp[1]:69 [ main::$26 ] : zp[1]:69 , reg byte x , reg byte y , +Potential registers zp[2]:70 [ main::$76 ] : zp[2]:70 , +Potential registers zp[2]:72 [ main::$77 ] : zp[2]:72 , +Potential registers zp[1]:74 [ main::$30 ] : zp[1]:74 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:75 [ main::$56 ] : zp[2]:75 , +Potential registers zp[2]:77 [ main::$31 ] : zp[2]:77 , +Potential registers zp[2]:79 [ main::$78 ] : zp[2]:79 , +Potential registers zp[2]:81 [ main::$74 ] : zp[2]:81 , +Potential registers zp[2]:83 [ main::$32 ] : zp[2]:83 , +Potential registers zp[1]:85 [ main::$48 ] : zp[1]:85 , reg byte x , +Potential registers zp[2]:86 [ main::$75 ] : zp[2]:86 , +Potential registers zp[2]:88 [ main::$33 ] : zp[2]:88 , +Potential registers zp[2]:90 [ rand::return#2 ] : zp[2]:90 , +Potential registers zp[2]:92 [ main::$9 ] : zp[2]:92 , +Potential registers zp[2]:94 [ main::$10 ] : zp[2]:94 , +Potential registers zp[2]:96 [ main::$36 ] : zp[2]:96 , +Potential registers zp[2]:98 [ main::$59 ] : zp[2]:98 , +Potential registers zp[2]:100 [ rand::return#3 ] : zp[2]:100 , +Potential registers zp[2]:102 [ main::$11 ] : zp[2]:102 , +Potential registers zp[1]:104 [ main::$12 ] : zp[1]:104 , reg byte x , reg byte y , +Potential registers zp[2]:105 [ main::$60 ] : zp[2]:105 , +Potential registers zp[1]:107 [ ppuDataTransfer::ppuDataPrepare1_$0 ] : zp[1]:107 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:108 [ ppuDataTransfer::ppuDataPrepare1_$1 ] : zp[1]:108 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:109 [ ppuDataTransfer::ppuDataPut1_val#0 ] : zp[1]:109 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:110 [ ppuDataFill::ppuDataPrepare1_$0 ] : zp[1]:110 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:111 [ ppuDataFill::ppuDataPrepare1_$1 ] : zp[1]:111 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:112 [ rand::$0 ] : zp[2]:112 , +Potential registers zp[2]:114 [ rand_state#0 ] : zp[2]:114 , +Potential registers zp[2]:116 [ rand::$1 ] : zp[2]:116 , +Potential registers zp[2]:118 [ rand_state#1 ] : zp[2]:118 , +Potential registers zp[2]:120 [ rand::$2 ] : zp[2]:120 , +Potential registers zp[2]:122 [ rand::return#0 ] : zp[2]:122 , REGISTER UPLIFT SCOPES -Uplift Scope [main] 2,165.43: zp[2]:8 [ main::i#10 main::i#4 ] 2,002: zp[2]:41 [ main::$63 ] 2,002: zp[2]:45 [ main::$65 ] 2,002: zp[2]:51 [ main::$68 ] 2,002: zp[2]:53 [ main::$69 ] 2,002: zp[2]:55 [ main::$20 ] 2,002: zp[2]:61 [ main::$73 ] 2,002: zp[2]:65 [ main::$70 ] 2,002: zp[2]:69 [ main::$71 ] 2,002: zp[2]:78 [ main::$77 ] 2,002: zp[2]:81 [ main::$56 ] 2,002: zp[2]:85 [ main::$78 ] 2,002: zp[2]:89 [ main::$74 ] 2,002: zp[2]:94 [ main::$75 ] 1,501.5: zp[2]:57 [ main::$45 ] 1,063.56: zp[1]:10 [ main::sprite_idx#3 main::sprite_idx#2 ] 1,001: zp[2]:39 [ main::$62 ] 1,001: zp[2]:43 [ main::$64 ] 1,001: zp[2]:49 [ main::$67 ] 1,001: zp[2]:59 [ main::$72 ] 1,001: zp[2]:63 [ main::$44 ] 1,001: zp[1]:73 [ main::$26 ] 1,001: zp[2]:76 [ main::$76 ] 1,001: zp[1]:80 [ main::$30 ] 1,001: zp[2]:83 [ main::$31 ] 1,001: zp[2]:96 [ main::$33 ] 834.17: zp[1]:93 [ main::$48 ] 834.17: zp[2]:35 [ main::$40 ] 667.33: zp[2]:37 [ main::$61 ] 667.33: zp[2]:47 [ main::$66 ] 667.33: zp[2]:71 [ main::$25 ] 572: zp[2]:74 [ main::$53 ] 500.5: zp[2]:67 [ main::$23 ] 500.5: zp[2]:91 [ main::$32 ] 429: zp[2]:87 [ main::$50 ] 265.22: zp[1]:7 [ main::timer#3 main::timer#15 main::timer#21 ] 263.72: zp[1]:2 [ main::initNES1_i#2 main::initNES1_i#1 ] 231.71: zp[2]:3 [ main::i#14 main::i#2 ] 206.52: zp[1]:5 [ main::timer_2#2 main::timer_2#1 ] 202: zp[1]:29 [ main::initNES1_waitForVBlank1_$0 ] 202: zp[1]:30 [ main::initNES1_waitForVBlank2_$0 ] 202: zp[1]:32 [ main::$14 ] 202: zp[2]:100 [ main::$9 ] 202: zp[2]:104 [ main::$35 ] 202: zp[2]:106 [ main::$59 ] 202: zp[2]:110 [ main::$11 ] 202: zp[2]:113 [ main::$36 ] 202: zp[2]:115 [ main::$60 ] 157.41: zp[1]:6 [ main::active_balls#2 main::active_balls#8 main::active_balls#1 ] 151.5: zp[1]:34 [ main::$38 ] 101: zp[1]:33 [ main::timer#1 ] 67.33: zp[2]:102 [ main::$10 ] 67.33: zp[1]:112 [ main::$12 ] 51.69: zp[1]:31 [ main::h_bar#1 ] -Uplift Scope [ppuDataTransfer] 2,602.6: zp[2]:15 [ ppuDataTransfer::i#2 ppuDataTransfer::i#1 ] 2,002: zp[1]:119 [ ppuDataTransfer::ppuDataPut1_val#0 ] 1,979: zp[2]:17 [ ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#6 ppuDataTransfer::cpuSrc#1 ] 202: zp[1]:117 [ ppuDataTransfer::ppuDataPrepare1_$0 ] 202: zp[1]:118 [ ppuDataTransfer::ppuDataPrepare1_$1 ] 67.33: zp[2]:11 [ ppuDataTransfer::ppuDataPrepare1_ppuData#0 ] 0: zp[2]:13 [ ppuDataTransfer::cpuData#2 ] -Uplift Scope [rand] 2,002: zp[2]:122 [ rand::$0 ] 2,002: zp[2]:126 [ rand::$1 ] 2,002: zp[2]:130 [ rand::$2 ] 300.75: zp[2]:132 [ rand::return#0 ] 202: zp[2]:98 [ rand::return#2 ] 202: zp[2]:108 [ rand::return#3 ] -Uplift Scope [] 1,501.5: zp[2]:124 [ rand_state#0 ] 1,501.5: zp[2]:128 [ rand_state#1 ] 1,291.78: zp[2]:25 [ rand_state#10 rand_state#17 rand_state#11 ] 105: zp[1]:27 [ scroll_y ] 8.66: zp[1]:28 [ vblank_hit ] -Uplift Scope [ppuDataFill] 3,003: zp[2]:23 [ ppuDataFill::i#2 ppuDataFill::i#1 ] 202: zp[1]:120 [ ppuDataFill::ppuDataPrepare1_$0 ] 202: zp[1]:121 [ ppuDataFill::ppuDataPrepare1_$1 ] 111.22: zp[2]:21 [ ppuDataFill::size#3 ] 67.33: zp[2]:19 [ ppuDataFill::ppuDataPrepare1_ppuData#0 ] +Uplift Scope [main] 2,090.98: zp[2]:8 [ main::i#10 main::i#4 ] 2,002: zp[2]:41 [ main::$63 ] 2,002: zp[2]:45 [ main::$65 ] 2,002: zp[2]:51 [ main::$68 ] 2,002: zp[2]:53 [ main::$69 ] 2,002: zp[2]:55 [ main::$20 ] 2,002: zp[2]:59 [ main::$73 ] 2,002: zp[2]:61 [ main::$70 ] 2,002: zp[2]:65 [ main::$71 ] 2,002: zp[2]:72 [ main::$77 ] 2,002: zp[2]:75 [ main::$56 ] 2,002: zp[2]:79 [ main::$78 ] 2,002: zp[2]:81 [ main::$74 ] 2,002: zp[2]:86 [ main::$75 ] 1,069.25: zp[1]:10 [ main::sprite_idx#3 main::sprite_idx#2 ] 1,001: zp[2]:39 [ main::$62 ] 1,001: zp[2]:43 [ main::$64 ] 1,001: zp[2]:49 [ main::$67 ] 1,001: zp[2]:57 [ main::$72 ] 1,001: zp[1]:69 [ main::$26 ] 1,001: zp[2]:70 [ main::$76 ] 1,001: zp[1]:74 [ main::$30 ] 1,001: zp[2]:77 [ main::$31 ] 1,001: zp[2]:88 [ main::$33 ] 834.17: zp[1]:85 [ main::$48 ] 667.33: zp[2]:37 [ main::$61 ] 667.33: zp[2]:47 [ main::$66 ] 667.33: zp[2]:67 [ main::$25 ] 500.5: zp[2]:63 [ main::$23 ] 500.5: zp[2]:83 [ main::$32 ] 487.67: zp[2]:35 [ main::$44 ] 265.66: zp[1]:7 [ main::timer#3 main::timer#15 main::timer#21 ] 263.72: zp[1]:2 [ main::initNES1_i#2 main::initNES1_i#1 ] 227.25: zp[2]:3 [ main::i#14 main::i#2 ] 206.81: zp[1]:5 [ main::timer_2#2 main::timer_2#1 ] 202: zp[1]:29 [ main::initNES1_waitForVBlank1_$0 ] 202: zp[1]:30 [ main::initNES1_waitForVBlank2_$0 ] 202: zp[1]:32 [ main::$14 ] 202: zp[2]:92 [ main::$9 ] 202: zp[2]:98 [ main::$59 ] 202: zp[2]:102 [ main::$11 ] 202: zp[2]:105 [ main::$60 ] 159.41: zp[1]:6 [ main::active_balls#2 main::active_balls#8 main::active_balls#1 ] 151.5: zp[1]:34 [ main::$38 ] 101: zp[1]:33 [ main::timer#1 ] 101: zp[1]:104 [ main::$12 ] 67.33: zp[2]:94 [ main::$10 ] 55.26: zp[1]:31 [ main::h_bar#1 ] 43.29: zp[2]:96 [ main::$36 ] +Uplift Scope [ppuDataTransfer] 2,602.6: zp[2]:15 [ ppuDataTransfer::i#2 ppuDataTransfer::i#1 ] 2,002: zp[1]:109 [ ppuDataTransfer::ppuDataPut1_val#0 ] 1,979: zp[2]:17 [ ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#6 ppuDataTransfer::cpuSrc#1 ] 202: zp[1]:107 [ ppuDataTransfer::ppuDataPrepare1_$0 ] 202: zp[1]:108 [ ppuDataTransfer::ppuDataPrepare1_$1 ] 67.33: zp[2]:11 [ ppuDataTransfer::ppuDataPrepare1_ppuData#0 ] 0: zp[2]:13 [ ppuDataTransfer::cpuData#2 ] +Uplift Scope [rand] 2,002: zp[2]:112 [ rand::$0 ] 2,002: zp[2]:116 [ rand::$1 ] 2,002: zp[2]:120 [ rand::$2 ] 300.75: zp[2]:122 [ rand::return#0 ] 202: zp[2]:90 [ rand::return#2 ] 202: zp[2]:100 [ rand::return#3 ] +Uplift Scope [] 1,501.5: zp[2]:114 [ rand_state#0 ] 1,501.5: zp[2]:118 [ rand_state#1 ] 1,298.98: zp[2]:25 [ rand_state#10 rand_state#17 rand_state#11 ] 105: zp[1]:27 [ scroll_y ] 9.01: zp[1]:28 [ vblank_hit ] +Uplift Scope [ppuDataFill] 3,003: zp[2]:23 [ ppuDataFill::i#2 ppuDataFill::i#1 ] 202: zp[1]:110 [ ppuDataFill::ppuDataPrepare1_$0 ] 202: zp[1]:111 [ ppuDataFill::ppuDataPrepare1_$1 ] 111.22: zp[2]:21 [ ppuDataFill::size#3 ] 67.33: zp[2]:19 [ ppuDataFill::ppuDataPrepare1_ppuData#0 ] Uplift Scope [RICOH_2C02] Uplift Scope [RICOH_2A03] Uplift Scope [SpriteData] @@ -4247,77 +4158,72 @@ Uplift Scope [$0] Uplift Scope [vblank] Uplift Scope [__start] -Uplifting [main] best 105562 combination zp[2]:8 [ main::i#10 main::i#4 ] zp[2]:41 [ main::$63 ] zp[2]:45 [ main::$65 ] zp[2]:51 [ main::$68 ] zp[2]:53 [ main::$69 ] zp[2]:55 [ main::$20 ] zp[2]:61 [ main::$73 ] zp[2]:65 [ main::$70 ] zp[2]:69 [ main::$71 ] zp[2]:78 [ main::$77 ] zp[2]:81 [ main::$56 ] zp[2]:85 [ main::$78 ] zp[2]:89 [ main::$74 ] zp[2]:94 [ main::$75 ] zp[2]:57 [ main::$45 ] zp[1]:10 [ main::sprite_idx#3 main::sprite_idx#2 ] zp[2]:39 [ main::$62 ] zp[2]:43 [ main::$64 ] zp[2]:49 [ main::$67 ] zp[2]:59 [ main::$72 ] zp[2]:63 [ main::$44 ] zp[1]:73 [ main::$26 ] zp[2]:76 [ main::$76 ] reg byte a [ main::$30 ] zp[2]:83 [ main::$31 ] zp[2]:96 [ main::$33 ] reg byte x [ main::$48 ] zp[2]:35 [ main::$40 ] zp[2]:37 [ main::$61 ] zp[2]:47 [ main::$66 ] zp[2]:71 [ main::$25 ] zp[2]:74 [ main::$53 ] zp[2]:67 [ main::$23 ] zp[2]:91 [ main::$32 ] zp[2]:87 [ main::$50 ] zp[1]:7 [ main::timer#3 main::timer#15 main::timer#21 ] zp[1]:2 [ main::initNES1_i#2 main::initNES1_i#1 ] zp[2]:3 [ main::i#14 main::i#2 ] zp[1]:5 [ main::timer_2#2 main::timer_2#1 ] zp[1]:29 [ main::initNES1_waitForVBlank1_$0 ] zp[1]:30 [ main::initNES1_waitForVBlank2_$0 ] zp[1]:32 [ main::$14 ] zp[2]:100 [ main::$9 ] zp[2]:104 [ main::$35 ] zp[2]:106 [ main::$59 ] zp[2]:110 [ main::$11 ] zp[2]:113 [ main::$36 ] zp[2]:115 [ main::$60 ] zp[1]:6 [ main::active_balls#2 main::active_balls#8 main::active_balls#1 ] zp[1]:34 [ main::$38 ] zp[1]:33 [ main::timer#1 ] zp[2]:102 [ main::$10 ] zp[1]:112 [ main::$12 ] zp[1]:31 [ main::h_bar#1 ] +Uplifting [main] best 90802 combination zp[2]:8 [ main::i#10 main::i#4 ] zp[2]:41 [ main::$63 ] zp[2]:45 [ main::$65 ] zp[2]:51 [ main::$68 ] zp[2]:53 [ main::$69 ] zp[2]:55 [ main::$20 ] zp[2]:59 [ main::$73 ] zp[2]:61 [ main::$70 ] zp[2]:65 [ main::$71 ] zp[2]:72 [ main::$77 ] zp[2]:75 [ main::$56 ] zp[2]:79 [ main::$78 ] zp[2]:81 [ main::$74 ] zp[2]:86 [ main::$75 ] zp[1]:10 [ main::sprite_idx#3 main::sprite_idx#2 ] zp[2]:39 [ main::$62 ] zp[2]:43 [ main::$64 ] zp[2]:49 [ main::$67 ] zp[2]:57 [ main::$72 ] zp[1]:69 [ main::$26 ] zp[2]:70 [ main::$76 ] reg byte a [ main::$30 ] zp[2]:77 [ main::$31 ] zp[2]:88 [ main::$33 ] reg byte x [ main::$48 ] zp[2]:37 [ main::$61 ] zp[2]:47 [ main::$66 ] zp[2]:67 [ main::$25 ] zp[2]:63 [ main::$23 ] zp[2]:83 [ main::$32 ] zp[2]:35 [ main::$44 ] zp[1]:7 [ main::timer#3 main::timer#15 main::timer#21 ] zp[1]:2 [ main::initNES1_i#2 main::initNES1_i#1 ] zp[2]:3 [ main::i#14 main::i#2 ] zp[1]:5 [ main::timer_2#2 main::timer_2#1 ] zp[1]:29 [ main::initNES1_waitForVBlank1_$0 ] zp[1]:30 [ main::initNES1_waitForVBlank2_$0 ] zp[1]:32 [ main::$14 ] zp[2]:92 [ main::$9 ] zp[2]:98 [ main::$59 ] zp[2]:102 [ main::$11 ] zp[2]:105 [ main::$60 ] zp[1]:6 [ main::active_balls#2 main::active_balls#8 main::active_balls#1 ] zp[1]:34 [ main::$38 ] zp[1]:33 [ main::timer#1 ] zp[1]:104 [ main::$12 ] zp[2]:94 [ main::$10 ] zp[1]:31 [ main::h_bar#1 ] zp[2]:96 [ main::$36 ] Limited combination testing to 100 combinations of 5308416 possible. -Uplifting [ppuDataTransfer] best 105490 combination zp[2]:15 [ ppuDataTransfer::i#2 ppuDataTransfer::i#1 ] reg byte a [ ppuDataTransfer::ppuDataPut1_val#0 ] zp[2]:17 [ ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#6 ppuDataTransfer::cpuSrc#1 ] reg byte a [ ppuDataTransfer::ppuDataPrepare1_$0 ] reg byte a [ ppuDataTransfer::ppuDataPrepare1_$1 ] zp[2]:11 [ ppuDataTransfer::ppuDataPrepare1_ppuData#0 ] zp[2]:13 [ ppuDataTransfer::cpuData#2 ] -Uplifting [rand] best 105490 combination zp[2]:122 [ rand::$0 ] zp[2]:126 [ rand::$1 ] zp[2]:130 [ rand::$2 ] zp[2]:132 [ rand::return#0 ] zp[2]:98 [ rand::return#2 ] zp[2]:108 [ rand::return#3 ] -Uplifting [] best 105490 combination zp[2]:124 [ rand_state#0 ] zp[2]:128 [ rand_state#1 ] zp[2]:25 [ rand_state#10 rand_state#17 rand_state#11 ] zp[1]:27 [ scroll_y ] zp[1]:28 [ vblank_hit ] -Uplifting [ppuDataFill] best 105478 combination zp[2]:23 [ ppuDataFill::i#2 ppuDataFill::i#1 ] reg byte a [ ppuDataFill::ppuDataPrepare1_$0 ] reg byte a [ ppuDataFill::ppuDataPrepare1_$1 ] zp[2]:21 [ ppuDataFill::size#3 ] zp[2]:19 [ ppuDataFill::ppuDataPrepare1_ppuData#0 ] -Uplifting [RICOH_2C02] best 105478 combination -Uplifting [RICOH_2A03] best 105478 combination -Uplifting [SpriteData] best 105478 combination -Uplifting [RADIX] best 105478 combination -Uplifting [printf_format_number] best 105478 combination -Uplifting [printf_buffer_number] best 105478 combination -Uplifting [printf_format_string] best 105478 combination -Uplifting [$0] best 105478 combination -Uplifting [vblank] best 105478 combination -Uplifting [__start] best 105478 combination +Uplifting [ppuDataTransfer] best 90730 combination zp[2]:15 [ ppuDataTransfer::i#2 ppuDataTransfer::i#1 ] reg byte a [ ppuDataTransfer::ppuDataPut1_val#0 ] zp[2]:17 [ ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#6 ppuDataTransfer::cpuSrc#1 ] reg byte a [ ppuDataTransfer::ppuDataPrepare1_$0 ] reg byte a [ ppuDataTransfer::ppuDataPrepare1_$1 ] zp[2]:11 [ ppuDataTransfer::ppuDataPrepare1_ppuData#0 ] zp[2]:13 [ ppuDataTransfer::cpuData#2 ] +Uplifting [rand] best 90730 combination zp[2]:112 [ rand::$0 ] zp[2]:116 [ rand::$1 ] zp[2]:120 [ rand::$2 ] zp[2]:122 [ rand::return#0 ] zp[2]:90 [ rand::return#2 ] zp[2]:100 [ rand::return#3 ] +Uplifting [] best 90730 combination zp[2]:114 [ rand_state#0 ] zp[2]:118 [ rand_state#1 ] zp[2]:25 [ rand_state#10 rand_state#17 rand_state#11 ] zp[1]:27 [ scroll_y ] zp[1]:28 [ vblank_hit ] +Uplifting [ppuDataFill] best 90718 combination zp[2]:23 [ ppuDataFill::i#2 ppuDataFill::i#1 ] reg byte a [ ppuDataFill::ppuDataPrepare1_$0 ] reg byte a [ ppuDataFill::ppuDataPrepare1_$1 ] zp[2]:21 [ ppuDataFill::size#3 ] zp[2]:19 [ ppuDataFill::ppuDataPrepare1_ppuData#0 ] +Uplifting [RICOH_2C02] best 90718 combination +Uplifting [RICOH_2A03] best 90718 combination +Uplifting [SpriteData] best 90718 combination +Uplifting [RADIX] best 90718 combination +Uplifting [printf_format_number] best 90718 combination +Uplifting [printf_buffer_number] best 90718 combination +Uplifting [printf_format_string] best 90718 combination +Uplifting [$0] best 90718 combination +Uplifting [vblank] best 90718 combination +Uplifting [__start] best 90718 combination Attempting to uplift remaining variables inzp[1]:10 [ main::sprite_idx#3 main::sprite_idx#2 ] -Uplifting [main] best 105478 combination zp[1]:10 [ main::sprite_idx#3 main::sprite_idx#2 ] -Attempting to uplift remaining variables inzp[1]:73 [ main::$26 ] -Uplifting [main] best 105478 combination zp[1]:73 [ main::$26 ] +Uplifting [main] best 90718 combination zp[1]:10 [ main::sprite_idx#3 main::sprite_idx#2 ] +Attempting to uplift remaining variables inzp[1]:69 [ main::$26 ] +Uplifting [main] best 90718 combination zp[1]:69 [ main::$26 ] Attempting to uplift remaining variables inzp[1]:7 [ main::timer#3 main::timer#15 main::timer#21 ] -Uplifting [main] best 105478 combination zp[1]:7 [ main::timer#3 main::timer#15 main::timer#21 ] +Uplifting [main] best 90718 combination zp[1]:7 [ main::timer#3 main::timer#15 main::timer#21 ] Attempting to uplift remaining variables inzp[1]:2 [ main::initNES1_i#2 main::initNES1_i#1 ] -Uplifting [main] best 105148 combination reg byte x [ main::initNES1_i#2 main::initNES1_i#1 ] +Uplifting [main] best 90388 combination reg byte x [ main::initNES1_i#2 main::initNES1_i#1 ] Attempting to uplift remaining variables inzp[1]:5 [ main::timer_2#2 main::timer_2#1 ] -Uplifting [main] best 105148 combination zp[1]:5 [ main::timer_2#2 main::timer_2#1 ] +Uplifting [main] best 90388 combination zp[1]:5 [ main::timer_2#2 main::timer_2#1 ] Attempting to uplift remaining variables inzp[1]:29 [ main::initNES1_waitForVBlank1_$0 ] -Uplifting [main] best 105088 combination reg byte a [ main::initNES1_waitForVBlank1_$0 ] +Uplifting [main] best 90328 combination reg byte a [ main::initNES1_waitForVBlank1_$0 ] Attempting to uplift remaining variables inzp[1]:30 [ main::initNES1_waitForVBlank2_$0 ] -Uplifting [main] best 105028 combination reg byte a [ main::initNES1_waitForVBlank2_$0 ] +Uplifting [main] best 90268 combination reg byte a [ main::initNES1_waitForVBlank2_$0 ] Attempting to uplift remaining variables inzp[1]:32 [ main::$14 ] -Uplifting [main] best 104968 combination reg byte a [ main::$14 ] +Uplifting [main] best 90208 combination reg byte a [ main::$14 ] Attempting to uplift remaining variables inzp[1]:6 [ main::active_balls#2 main::active_balls#8 main::active_balls#1 ] -Uplifting [main] best 104968 combination zp[1]:6 [ main::active_balls#2 main::active_balls#8 main::active_balls#1 ] +Uplifting [main] best 90208 combination zp[1]:6 [ main::active_balls#2 main::active_balls#8 main::active_balls#1 ] Attempting to uplift remaining variables inzp[1]:34 [ main::$38 ] -Uplifting [main] best 104898 combination reg byte x [ main::$38 ] +Uplifting [main] best 90138 combination reg byte x [ main::$38 ] Attempting to uplift remaining variables inzp[1]:27 [ scroll_y ] -Uplifting [] best 104898 combination zp[1]:27 [ scroll_y ] +Uplifting [] best 90138 combination zp[1]:27 [ scroll_y ] Attempting to uplift remaining variables inzp[1]:33 [ main::timer#1 ] -Uplifting [main] best 104838 combination reg byte x [ main::timer#1 ] -Attempting to uplift remaining variables inzp[1]:112 [ main::$12 ] -Uplifting [main] best 104818 combination reg byte x [ main::$12 ] +Uplifting [main] best 90078 combination reg byte x [ main::timer#1 ] +Attempting to uplift remaining variables inzp[1]:104 [ main::$12 ] +Uplifting [main] best 90058 combination reg byte x [ main::$12 ] Attempting to uplift remaining variables inzp[1]:31 [ main::h_bar#1 ] -Uplifting [main] best 104818 combination zp[1]:31 [ main::h_bar#1 ] +Uplifting [main] best 90058 combination zp[1]:31 [ main::h_bar#1 ] Attempting to uplift remaining variables inzp[1]:28 [ vblank_hit ] -Uplifting [] best 104818 combination zp[1]:28 [ vblank_hit ] +Uplifting [] best 90058 combination zp[1]:28 [ vblank_hit ] Coalescing zero page register [ zp[2]:13 [ ppuDataTransfer::cpuData#2 ] ] with [ zp[2]:17 [ ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#6 ppuDataTransfer::cpuSrc#1 ] ] - score: 1 -Coalescing zero page register [ zp[2]:25 [ rand_state#10 rand_state#17 rand_state#11 ] ] with [ zp[2]:124 [ rand_state#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:25 [ rand_state#10 rand_state#17 rand_state#11 rand_state#0 ] ] with [ zp[2]:128 [ rand_state#1 ] ] - score: 1 -Coalescing zero page register [ zp[2]:35 [ main::$40 ] ] with [ zp[2]:53 [ main::$69 ] ] - score: 1 -Coalescing zero page register [ zp[2]:57 [ main::$45 ] ] with [ zp[2]:61 [ main::$73 ] ] - score: 1 -Coalescing zero page register [ zp[2]:63 [ main::$44 ] ] with [ zp[2]:69 [ main::$71 ] ] - score: 1 -Coalescing zero page register [ zp[2]:65 [ main::$70 ] ] with [ zp[2]:67 [ main::$23 ] ] - score: 1 -Coalescing zero page register [ zp[2]:74 [ main::$53 ] ] with [ zp[2]:85 [ main::$78 ] ] - score: 1 -Coalescing zero page register [ zp[2]:81 [ main::$56 ] ] with [ zp[2]:83 [ main::$31 ] ] - score: 1 -Coalescing zero page register [ zp[2]:87 [ main::$50 ] ] with [ zp[2]:94 [ main::$75 ] ] - score: 1 -Coalescing zero page register [ zp[2]:89 [ main::$74 ] ] with [ zp[2]:91 [ main::$32 ] ] - score: 1 -Coalescing zero page register [ zp[2]:98 [ rand::return#2 ] ] with [ zp[2]:100 [ main::$9 ] ] - score: 1 -Coalescing zero page register [ zp[2]:98 [ rand::return#2 main::$9 ] ] with [ zp[2]:132 [ rand::return#0 ] ] - score: 1 -Coalescing zero page register [ zp[2]:104 [ main::$35 ] ] with [ zp[2]:106 [ main::$59 ] ] - score: 1 -Coalescing zero page register [ zp[2]:108 [ rand::return#3 ] ] with [ zp[2]:110 [ main::$11 ] ] - score: 1 -Coalescing zero page register [ zp[2]:113 [ main::$36 ] ] with [ zp[2]:115 [ main::$60 ] ] - score: 1 -Coalescing zero page register [ zp[2]:35 [ main::$40 main::$69 ] ] with [ zp[2]:55 [ main::$20 ] ] - score: 1 -Coalescing zero page register [ zp[2]:63 [ main::$44 main::$71 ] ] with [ zp[2]:71 [ main::$25 ] ] - score: 1 -Coalescing zero page register [ zp[2]:87 [ main::$50 main::$75 ] ] with [ zp[2]:96 [ main::$33 ] ] - score: 1 -Coalescing zero page register [ zp[2]:98 [ rand::return#2 main::$9 rand::return#0 ] ] with [ zp[2]:102 [ main::$10 ] ] - score: 1 -Coalescing zero page register [ zp[2]:98 [ rand::return#2 main::$9 rand::return#0 main::$10 ] ] with [ zp[2]:108 [ rand::return#3 main::$11 ] ] - score: 1 +Coalescing zero page register [ zp[2]:25 [ rand_state#10 rand_state#17 rand_state#11 ] ] with [ zp[2]:114 [ rand_state#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:25 [ rand_state#10 rand_state#17 rand_state#11 rand_state#0 ] ] with [ zp[2]:118 [ rand_state#1 ] ] - score: 1 +Coalescing zero page register [ zp[2]:35 [ main::$44 ] ] with [ zp[2]:86 [ main::$75 ] ] - score: 1 +Coalescing zero page register [ zp[2]:53 [ main::$69 ] ] with [ zp[2]:55 [ main::$20 ] ] - score: 1 +Coalescing zero page register [ zp[2]:61 [ main::$70 ] ] with [ zp[2]:63 [ main::$23 ] ] - score: 1 +Coalescing zero page register [ zp[2]:65 [ main::$71 ] ] with [ zp[2]:67 [ main::$25 ] ] - score: 1 +Coalescing zero page register [ zp[2]:75 [ main::$56 ] ] with [ zp[2]:77 [ main::$31 ] ] - score: 1 +Coalescing zero page register [ zp[2]:81 [ main::$74 ] ] with [ zp[2]:83 [ main::$32 ] ] - score: 1 +Coalescing zero page register [ zp[2]:90 [ rand::return#2 ] ] with [ zp[2]:92 [ main::$9 ] ] - score: 1 +Coalescing zero page register [ zp[2]:90 [ rand::return#2 main::$9 ] ] with [ zp[2]:122 [ rand::return#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:96 [ main::$36 ] ] with [ zp[2]:105 [ main::$60 ] ] - score: 1 +Coalescing zero page register [ zp[2]:100 [ rand::return#3 ] ] with [ zp[2]:102 [ main::$11 ] ] - score: 1 +Coalescing zero page register [ zp[2]:35 [ main::$44 main::$75 ] ] with [ zp[2]:88 [ main::$33 ] ] - score: 1 +Coalescing zero page register [ zp[2]:90 [ rand::return#2 main::$9 rand::return#0 ] ] with [ zp[2]:94 [ main::$10 ] ] - score: 1 +Coalescing zero page register [ zp[2]:90 [ rand::return#2 main::$9 rand::return#0 main::$10 ] ] with [ zp[2]:100 [ rand::return#3 main::$11 ] ] - score: 1 Coalescing zero page register [ zp[2]:19 [ ppuDataFill::ppuDataPrepare1_ppuData#0 ] ] with [ zp[2]:11 [ ppuDataTransfer::ppuDataPrepare1_ppuData#0 ] ] Coalescing zero page register [ zp[2]:21 [ ppuDataFill::size#3 ] ] with [ zp[2]:13 [ ppuDataTransfer::cpuData#2 ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#6 ppuDataTransfer::cpuSrc#1 ] ] Coalescing zero page register [ zp[2]:23 [ ppuDataFill::i#2 ppuDataFill::i#1 ] ] with [ zp[2]:15 [ ppuDataTransfer::i#2 ppuDataTransfer::i#1 ] ] -Coalescing zero page register [ zp[2]:35 [ main::$40 main::$69 main::$20 ] ] with [ zp[2]:19 [ ppuDataFill::ppuDataPrepare1_ppuData#0 ppuDataTransfer::ppuDataPrepare1_ppuData#0 ] ] +Coalescing zero page register [ zp[2]:35 [ main::$44 main::$75 main::$33 ] ] with [ zp[2]:19 [ ppuDataFill::ppuDataPrepare1_ppuData#0 ppuDataTransfer::ppuDataPrepare1_ppuData#0 ] ] Coalescing zero page register [ zp[2]:37 [ main::$61 ] ] with [ zp[2]:21 [ ppuDataFill::size#3 ppuDataTransfer::cpuData#2 ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#6 ppuDataTransfer::cpuSrc#1 ] ] Coalescing zero page register [ zp[2]:39 [ main::$62 ] ] with [ zp[2]:23 [ ppuDataFill::i#2 ppuDataFill::i#1 ppuDataTransfer::i#2 ppuDataTransfer::i#1 ] ] Allocated (was zp[2]:3) zp[2]:2 [ main::i#14 main::i#2 ] @@ -4330,7 +4236,7 @@ Allocated (was zp[2]:25) zp[2]:10 [ rand_state#10 rand_state#17 rand_state#11 ra Allocated (was zp[1]:27) zp[1]:12 [ scroll_y ] Allocated (was zp[1]:28) zp[1]:13 [ vblank_hit ] Allocated (was zp[1]:31) zp[1]:14 [ main::h_bar#1 ] -Allocated (was zp[2]:35) zp[2]:15 [ main::$40 main::$69 main::$20 ppuDataFill::ppuDataPrepare1_ppuData#0 ppuDataTransfer::ppuDataPrepare1_ppuData#0 ] +Allocated (was zp[2]:35) zp[2]:15 [ main::$44 main::$75 main::$33 ppuDataFill::ppuDataPrepare1_ppuData#0 ppuDataTransfer::ppuDataPrepare1_ppuData#0 ] Allocated (was zp[2]:37) zp[2]:17 [ main::$61 ppuDataFill::size#3 ppuDataTransfer::cpuData#2 ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#6 ppuDataTransfer::cpuSrc#1 ] Allocated (was zp[2]:39) zp[2]:19 [ main::$62 ppuDataFill::i#2 ppuDataFill::i#1 ppuDataTransfer::i#2 ppuDataTransfer::i#1 ] Allocated (was zp[2]:41) zp[2]:21 [ main::$63 ] @@ -4339,23 +4245,23 @@ Allocated (was zp[2]:45) zp[2]:25 [ main::$65 ] Allocated (was zp[2]:47) zp[2]:27 [ main::$66 ] Allocated (was zp[2]:49) zp[2]:29 [ main::$67 ] Allocated (was zp[2]:51) zp[2]:31 [ main::$68 ] -Allocated (was zp[2]:57) zp[2]:33 [ main::$45 main::$73 ] -Allocated (was zp[2]:59) zp[2]:35 [ main::$72 ] -Allocated (was zp[2]:63) zp[2]:37 [ main::$44 main::$71 main::$25 ] -Allocated (was zp[2]:65) zp[2]:39 [ main::$70 main::$23 ] -Allocated (was zp[1]:73) zp[1]:41 [ main::$26 ] -Allocated (was zp[2]:74) zp[2]:42 [ main::$53 main::$78 ] -Allocated (was zp[2]:76) zp[2]:44 [ main::$76 ] -Allocated (was zp[2]:78) zp[2]:46 [ main::$77 ] -Allocated (was zp[2]:81) zp[2]:48 [ main::$56 main::$31 ] -Allocated (was zp[2]:87) zp[2]:50 [ main::$50 main::$75 main::$33 ] -Allocated (was zp[2]:89) zp[2]:52 [ main::$74 main::$32 ] -Allocated (was zp[2]:98) zp[2]:54 [ rand::return#2 main::$9 rand::return#0 main::$10 rand::return#3 main::$11 ] -Allocated (was zp[2]:104) zp[2]:56 [ main::$35 main::$59 ] -Allocated (was zp[2]:113) zp[2]:58 [ main::$36 main::$60 ] -Allocated (was zp[2]:122) zp[2]:60 [ rand::$0 ] -Allocated (was zp[2]:126) zp[2]:62 [ rand::$1 ] -Allocated (was zp[2]:130) zp[2]:64 [ rand::$2 ] +Allocated (was zp[2]:53) zp[2]:33 [ main::$69 main::$20 ] +Allocated (was zp[2]:57) zp[2]:35 [ main::$72 ] +Allocated (was zp[2]:59) zp[2]:37 [ main::$73 ] +Allocated (was zp[2]:61) zp[2]:39 [ main::$70 main::$23 ] +Allocated (was zp[2]:65) zp[2]:41 [ main::$71 main::$25 ] +Allocated (was zp[1]:69) zp[1]:43 [ main::$26 ] +Allocated (was zp[2]:70) zp[2]:44 [ main::$76 ] +Allocated (was zp[2]:72) zp[2]:46 [ main::$77 ] +Allocated (was zp[2]:75) zp[2]:48 [ main::$56 main::$31 ] +Allocated (was zp[2]:79) zp[2]:50 [ main::$78 ] +Allocated (was zp[2]:81) zp[2]:52 [ main::$74 main::$32 ] +Allocated (was zp[2]:90) zp[2]:54 [ rand::return#2 main::$9 rand::return#0 main::$10 rand::return#3 main::$11 ] +Allocated (was zp[2]:96) zp[2]:56 [ main::$36 main::$60 ] +Allocated (was zp[2]:98) zp[2]:58 [ main::$59 ] +Allocated (was zp[2]:112) zp[2]:60 [ rand::$0 ] +Allocated (was zp[2]:116) zp[2]:62 [ rand::$1 ] +Allocated (was zp[2]:120) zp[2]:64 [ rand::$2 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -4516,20 +4422,15 @@ main: { .label __9 = $36 .label __10 = $36 .label __11 = $36 - .label __20 = $f + .label __20 = $21 .label __23 = $27 - .label __25 = $25 - .label __26 = $29 + .label __25 = $29 + .label __26 = $2b .label __31 = $30 .label __32 = $34 - .label __33 = $32 - .label __35 = $38 - .label __36 = $3a - .label __40 = $f - .label __44 = $25 - .label __45 = $21 - .label __50 = $32 - .label __53 = $2a + .label __33 = $f + .label __36 = $38 + .label __44 = $f .label __56 = $30 .label i = 2 .label timer_2 = 4 @@ -4538,8 +4439,8 @@ main: { .label sprite_idx = 9 .label i_1 = 7 .label timer = 6 - .label __59 = $38 - .label __60 = $3a + .label __59 = $3a + .label __60 = $38 .label __61 = $11 .label __62 = $13 .label __63 = $15 @@ -4548,16 +4449,16 @@ main: { .label __66 = $1b .label __67 = $1d .label __68 = $1f - .label __69 = $f + .label __69 = $21 .label __70 = $27 - .label __71 = $25 + .label __71 = $29 .label __72 = $23 - .label __73 = $21 + .label __73 = $25 .label __74 = $34 - .label __75 = $32 + .label __75 = $f .label __76 = $2c .label __77 = $2e - .label __78 = $2a + .label __78 = $32 jmp initNES1 // main::initNES1 initNES1: @@ -4668,14 +4569,14 @@ main: { __b17: // [38] call ppuDataTransfer // Transfer the palette - // [134] phi from main::@17 to ppuDataTransfer [phi:main::@17->ppuDataTransfer] + // [129] phi from main::@17 to ppuDataTransfer [phi:main::@17->ppuDataTransfer] ppuDataTransfer_from___b17: - // [134] phi (nomodify void*) ppuDataTransfer::cpuData#2 = (void*)(const to_nomodify byte*) palette [phi:main::@17->ppuDataTransfer#0] -- pvoz1=pvoc1 + // [129] phi (nomodify void*) ppuDataTransfer::cpuData#2 = (void*)(const to_nomodify byte*) palette [phi:main::@17->ppuDataTransfer#0] -- pvoz1=pvoc1 lda #palette sta.z ppuDataTransfer.cpuData+1 - // [134] phi (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 = (void*)(const nomodify byte*) PPU_PALETTE [phi:main::@17->ppuDataTransfer#1] -- pvoz1=pvoc1 + // [129] phi (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 = (void*)(const nomodify byte*) PPU_PALETTE [phi:main::@17->ppuDataTransfer#1] -- pvoz1=pvoc1 lda #PPU_PALETTE @@ -4688,14 +4589,14 @@ main: { __b19: // [40] call ppuDataFill // Fill the PPU attribute table - // [147] phi from main::@19 to ppuDataFill [phi:main::@19->ppuDataFill] + // [142] phi from main::@19 to ppuDataFill [phi:main::@19->ppuDataFill] ppuDataFill_from___b19: - // [147] phi (word) ppuDataFill::size#3 = (word)(number) $20*(number) $1e [phi:main::@19->ppuDataFill#0] -- vwuz1=vwuc1 + // [142] phi (word) ppuDataFill::size#3 = (word)(number) $20*(number) $1e [phi:main::@19->ppuDataFill#0] -- vwuz1=vwuc1 lda #<$20*$1e sta.z ppuDataFill.size lda #>$20*$1e sta.z ppuDataFill.size+1 - // [147] phi (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 = (void*)(const nomodify byte*) PPU_NAME_TABLE_0 [phi:main::@19->ppuDataFill#1] -- pvoz1=pvoc1 + // [142] phi (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 = (void*)(const nomodify byte*) PPU_NAME_TABLE_0 [phi:main::@19->ppuDataFill#1] -- pvoz1=pvoc1 lda #PPU_NAME_TABLE_0 @@ -4707,14 +4608,14 @@ main: { // main::@20 __b20: // [42] call ppuDataFill - // [147] phi from main::@20 to ppuDataFill [phi:main::@20->ppuDataFill] + // [142] phi from main::@20 to ppuDataFill [phi:main::@20->ppuDataFill] ppuDataFill_from___b20: - // [147] phi (word) ppuDataFill::size#3 = (byte) $40 [phi:main::@20->ppuDataFill#0] -- vwuz1=vbuc1 + // [142] phi (word) ppuDataFill::size#3 = (byte) $40 [phi:main::@20->ppuDataFill#0] -- vwuz1=vbuc1 lda #<$40 sta.z ppuDataFill.size lda #>$40 sta.z ppuDataFill.size+1 - // [147] phi (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 = (void*)(const nomodify byte*) PPU_ATTRIBUTE_TABLE_0 [phi:main::@20->ppuDataFill#1] -- pvoz1=pvoc1 + // [142] phi (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 = (void*)(const nomodify byte*) PPU_ATTRIBUTE_TABLE_0 [phi:main::@20->ppuDataFill#1] -- pvoz1=pvoc1 lda #PPU_ATTRIBUTE_TABLE_0 @@ -4726,14 +4627,14 @@ main: { // main::@21 __b21: // [44] call ppuDataTransfer - // [134] phi from main::@21 to ppuDataTransfer [phi:main::@21->ppuDataTransfer] + // [129] phi from main::@21 to ppuDataTransfer [phi:main::@21->ppuDataTransfer] ppuDataTransfer_from___b21: - // [134] phi (nomodify void*) ppuDataTransfer::cpuData#2 = (void*)(const to_nomodify byte*) h_bar_tilemap [phi:main::@21->ppuDataTransfer#0] -- pvoz1=pvoc1 + // [129] phi (nomodify void*) ppuDataTransfer::cpuData#2 = (void*)(const to_nomodify byte*) h_bar_tilemap [phi:main::@21->ppuDataTransfer#0] -- pvoz1=pvoc1 lda #h_bar_tilemap sta.z ppuDataTransfer.cpuData+1 - // [134] phi (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 = (void*) 8256 [phi:main::@21->ppuDataTransfer#1] -- pvoz1=pvoc1 + // [129] phi (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 = (void*) 8256 [phi:main::@21->ppuDataTransfer#1] -- pvoz1=pvoc1 lda #<$2040 sta.z ppuDataTransfer.ppuDataPrepare1_ppuData lda #>$2040 @@ -4908,39 +4809,39 @@ main: { jmp __b3 // main::@7 __b7: - // [69] (word~) main::$40 ← (word) main::i#10 << (byte) 3 -- vwuz1=vwuz2_rol_3 + // [69] (word~) main::$44 ← (word) main::i#10 << (byte) 3 -- vwuz1=vwuz2_rol_3 lda.z i_1 asl - sta.z __40 + sta.z __44 lda.z i_1+1 rol - sta.z __40+1 - asl.z __40 - rol.z __40+1 - asl.z __40 - rol.z __40+1 - // [70] (word*~) main::$61 ← (word*)(const struct $0*) balls + (word~) main::$40 -- pwuz1=pwuc1_plus_vwuz2 - lda.z __40 + sta.z __44+1 + asl.z __44 + rol.z __44+1 + asl.z __44 + rol.z __44+1 + // [70] (word*~) main::$61 ← (word*)(const struct $0*) balls + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __44 clc adc #balls sta.z __61+1 - // [71] (word*~) main::$62 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$40 -- pwuz1=pwuc1_plus_vwuz2 - lda.z __40 + // [71] (word*~) main::$62 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __44 clc adc #balls+4 sta.z __62+1 - // [72] (word*~) main::$63 ← (word*)(const struct $0*) balls + (word~) main::$40 -- pwuz1=pwuc1_plus_vwuz2 - lda.z __40 + // [72] (word*~) main::$63 ← (word*)(const struct $0*) balls + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __44 clc adc #balls sta.z __63+1 // [73] *((word*~) main::$63) ← *((word*~) main::$61) + *((word*~) main::$62) -- _deref_pwuz1=_deref_pwuz2_plus__deref_pwuz3 @@ -4953,20 +4854,20 @@ main: { lda (__61),y adc (__62),y sta (__63),y - // [74] (word*~) main::$64 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$40 -- pwuz1=pwuc1_plus_vwuz2 - lda.z __40 + // [74] (word*~) main::$64 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __44 clc adc #balls+6 sta.z __64+1 - // [75] (word*~) main::$65 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$40 -- pwuz1=pwuc1_plus_vwuz2 - lda.z __40 + // [75] (word*~) main::$65 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __44 clc adc #balls+6 sta.z __65+1 // [76] *((word*~) main::$65) ← *((word*~) main::$64) + (byte) $10 -- _deref_pwuz1=_deref_pwuz2_plus_vwuc1 @@ -4979,28 +4880,28 @@ main: { lda (__64),y adc #>$10 sta (__65),y - // [77] (word*~) main::$66 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$40 -- pwuz1=pwuc1_plus_vwuz2 - lda.z __40 + // [77] (word*~) main::$66 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __44 clc adc #balls+2 sta.z __66+1 - // [78] (word*~) main::$67 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$40 -- pwuz1=pwuc1_plus_vwuz2 - lda.z __40 + // [78] (word*~) main::$67 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __44 clc adc #balls+6 sta.z __67+1 - // [79] (word*~) main::$68 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$40 -- pwuz1=pwuc1_plus_vwuz2 - lda.z __40 + // [79] (word*~) main::$68 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __44 clc adc #balls+2 sta.z __68+1 // [80] *((word*~) main::$68) ← *((word*~) main::$66) + *((word*~) main::$67) -- _deref_pwuz1=_deref_pwuz2_plus__deref_pwuz3 @@ -5013,12 +4914,12 @@ main: { lda (__66),y adc (__67),y sta (__68),y - // [81] (word*~) main::$69 ← (word*)(const struct $0*) balls + (word~) main::$40 -- pwuz1=pwuc1_plus_vwuz1 + // [81] (word*~) main::$69 ← (word*)(const struct $0*) balls + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __44 clc - lda.z __69 adc #balls sta.z __69+1 // [82] (word~) main::$20 ← *((word*~) main::$69) >> (byte) 8 -- vwuz1=_deref_pwuz1_ror_8 @@ -5037,34 +4938,23 @@ main: { jmp __b11 // main::@11 __b11: - // [84] (word~) main::$45 ← (word) main::i#10 << (byte) 3 -- vwuz1=vwuz2_rol_3 - lda.z i_1 - asl - sta.z __45 - lda.z i_1+1 - rol - sta.z __45+1 - asl.z __45 - rol.z __45+1 - asl.z __45 - rol.z __45+1 - // [85] (word*~) main::$72 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$45 -- pwuz1=pwuc1_plus_vwuz2 - lda.z __45 + // [84] (word*~) main::$72 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __44 clc adc #balls+4 sta.z __72+1 - // [86] (word*~) main::$73 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$45 -- pwuz1=pwuc1_plus_vwuz1 + // [85] (word*~) main::$73 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __44 clc - lda.z __73 adc #balls+4 sta.z __73+1 - // [87] *((word*~) main::$73) ← *((word*~) main::$72) ^ (word) $ffff -- _deref_pwuz1=_deref_pwuz2_bxor_vwuc1 + // [86] *((word*~) main::$73) ← *((word*~) main::$72) ^ (word) $ffff -- _deref_pwuz1=_deref_pwuz2_bxor_vwuc1 ldy #0 lda #<$ffff eor (__72),y @@ -5076,18 +4966,7 @@ main: { jmp __b9 // main::@9 __b9: - // [88] (word~) main::$44 ← (word) main::i#10 << (byte) 3 -- vwuz1=vwuz2_rol_3 - lda.z i_1 - asl - sta.z __44 - lda.z i_1+1 - rol - sta.z __44+1 - asl.z __44 - rol.z __44+1 - asl.z __44 - rol.z __44+1 - // [89] (word*~) main::$70 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + // [87] (word*~) main::$70 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 lda.z __44 clc adc #balls+2 sta.z __70+1 - // [90] (word~) main::$23 ← *((word*~) main::$70) >> (byte) 8 -- vwuz1=_deref_pwuz1_ror_8 + // [88] (word~) main::$23 ← *((word*~) main::$70) >> (byte) 8 -- vwuz1=_deref_pwuz1_ror_8 ldy #1 lda (__23),y sta.z __23 dey sty.z __23+1 - // [91] (word*~) main::$71 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz1 + // [89] (word*~) main::$71 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __44 clc - lda.z __71 adc #balls+2 sta.z __71+1 - // [92] (word~) main::$25 ← *((word*~) main::$71) >> (byte) 8 -- vwuz1=_deref_pwuz1_ror_8 + // [90] (word~) main::$25 ← *((word*~) main::$71) >> (byte) 8 -- vwuz1=_deref_pwuz1_ror_8 ldy #1 lda (__25),y sta.z __25 dey sty.z __25+1 - // [93] (byte~) main::$26 ← (byte) main::h_bar#1 + (byte) 8 -- vbuz1=vbuz2_plus_vbuc1 + // [91] (byte~) main::$26 ← (byte) main::h_bar#1 + (byte) 8 -- vbuz1=vbuz2_plus_vbuc1 lax.z h_bar axs #-[8] stx.z __26 - // [94] if((word~) main::$23<(byte) main::h_bar#1) goto main::@10 -- vwuz1_lt_vbuz2_then_la1 + // [92] if((word~) main::$23<(byte) main::h_bar#1) goto main::@10 -- vwuz1_lt_vbuz2_then_la1 lda.z __23+1 bne !+ lda.z __23 @@ -5129,7 +5008,7 @@ main: { jmp __b24 // main::@24 __b24: - // [95] if((word~) main::$25>=(byte~) main::$26) goto main::@10 -- vwuz1_ge_vbuz2_then_la1 + // [93] if((word~) main::$25>=(byte~) main::$26) goto main::@10 -- vwuz1_ge_vbuz2_then_la1 lda.z __25+1 bne __b10 lda.z __25 @@ -5139,34 +5018,23 @@ main: { jmp __b12 // main::@12 __b12: - // [96] (word~) main::$53 ← (word) main::i#10 << (byte) 3 -- vwuz1=vwuz2_rol_3 - lda.z i_1 - asl - sta.z __53 - lda.z i_1+1 - rol - sta.z __53+1 - asl.z __53 - rol.z __53+1 - asl.z __53 - rol.z __53+1 - // [97] (word*~) main::$76 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$53 -- pwuz1=pwuc1_plus_vwuz2 - lda.z __53 + // [94] (word*~) main::$76 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __44 clc adc #balls+6 sta.z __76+1 - // [98] (word*~) main::$77 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$53 -- pwuz1=pwuc1_plus_vwuz2 - lda.z __53 + // [95] (word*~) main::$77 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __44 clc adc #balls+6 sta.z __77+1 - // [99] *((word*~) main::$77) ← *((word*~) main::$76) ^ (word) $ffff -- _deref_pwuz1=_deref_pwuz2_bxor_vwuc1 + // [96] *((word*~) main::$77) ← *((word*~) main::$76) ^ (word) $ffff -- _deref_pwuz1=_deref_pwuz2_bxor_vwuc1 ldy #0 lda #<$ffff eor (__76),y @@ -5175,28 +5043,28 @@ main: { lda #>$ffff eor (__76),y sta (__77),y - // [100] (byte~) main::$30 ← (byte) main::h_bar#1 - (byte) 2 -- vbuaa=vbuz1_minus_2 + // [97] (byte~) main::$30 ← (byte) main::h_bar#1 - (byte) 2 -- vbuaa=vbuz1_minus_2 lda.z h_bar sec sbc #2 - // [101] (word~) main::$56 ← (word)(byte~) main::$30 -- vwuz1=_word_vbuaa + // [98] (word~) main::$56 ← (word)(byte~) main::$30 -- vwuz1=_word_vbuaa sta.z __56 lda #0 sta.z __56+1 - // [102] (word~) main::$31 ← (word~) main::$56 << (byte) 8 -- vwuz1=vwuz1_rol_8 + // [99] (word~) main::$31 ← (word~) main::$56 << (byte) 8 -- vwuz1=vwuz1_rol_8 lda.z __31 sta.z __31+1 lda #0 sta.z __31 - // [103] (word*~) main::$78 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$53 -- pwuz1=pwuc1_plus_vwuz1 + // [100] (word*~) main::$78 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __44 clc - lda.z __78 adc #balls+2 sta.z __78+1 - // [104] *((word*~) main::$78) ← (word~) main::$31 -- _deref_pwuz1=vwuz2 + // [101] *((word*~) main::$78) ← (word~) main::$31 -- _deref_pwuz1=vwuz2 ldy #0 lda.z __31 sta (__78),y @@ -5206,46 +5074,35 @@ main: { jmp __b10 // main::@10 __b10: - // [105] (word~) main::$50 ← (word) main::i#10 << (byte) 3 -- vwuz1=vwuz2_rol_3 - lda.z i_1 - asl - sta.z __50 - lda.z i_1+1 - rol - sta.z __50+1 - asl.z __50 - rol.z __50+1 - asl.z __50 - rol.z __50+1 - // [106] (word*~) main::$74 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$50 -- pwuz1=pwuc1_plus_vwuz2 - lda.z __50 + // [102] (word*~) main::$74 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __44 clc adc #balls+2 sta.z __74+1 - // [107] (word~) main::$32 ← *((word*~) main::$74) >> (byte) 8 -- vwuz1=_deref_pwuz1_ror_8 + // [103] (word~) main::$32 ← *((word*~) main::$74) >> (byte) 8 -- vwuz1=_deref_pwuz1_ror_8 ldy #1 lda (__32),y sta.z __32 dey sty.z __32+1 - // [108] (byte~) main::$48 ← (byte) main::sprite_idx#3 << (byte) 2 -- vbuxx=vbuz1_rol_2 + // [104] (byte~) main::$48 ← (byte) main::sprite_idx#3 << (byte) 2 -- vbuxx=vbuz1_rol_2 lda.z sprite_idx asl asl tax - // [109] *((byte*)(const struct SpriteData*) SPRITE_BUFFER + (byte~) main::$48) ← (byte)(word~) main::$32 -- pbuc1_derefidx_vbuxx=_byte_vwuz1 + // [105] *((byte*)(const struct SpriteData*) SPRITE_BUFFER + (byte~) main::$48) ← (byte)(word~) main::$32 -- pbuc1_derefidx_vbuxx=_byte_vwuz1 lda.z __32 sta SPRITE_BUFFER,x - // [110] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_TILE + (byte~) main::$48) ← (byte) $a -- pbuc1_derefidx_vbuxx=vbuc2 + // [106] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_TILE + (byte~) main::$48) ← (byte) $a -- pbuc1_derefidx_vbuxx=vbuc2 lda #$a sta SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_TILE,x - // [111] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_ATTRIBUTES + (byte~) main::$48) ← (byte) 3 -- pbuc1_derefidx_vbuxx=vbuc2 + // [107] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_ATTRIBUTES + (byte~) main::$48) ← (byte) 3 -- pbuc1_derefidx_vbuxx=vbuc2 lda #3 sta SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_ATTRIBUTES,x - // [112] (word*~) main::$75 ← (word*)(const struct $0*) balls + (word~) main::$50 -- pwuz1=pwuc1_plus_vwuz1 + // [108] (word*~) main::$75 ← (word*)(const struct $0*) balls + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz1 clc lda.z __75 adc #balls sta.z __75+1 - // [113] (word~) main::$33 ← *((word*~) main::$75) >> (byte) 8 -- vwuz1=_deref_pwuz1_ror_8 + // [109] (word~) main::$33 ← *((word*~) main::$75) >> (byte) 8 -- vwuz1=_deref_pwuz1_ror_8 ldy #1 lda (__33),y sta.z __33 dey sty.z __33+1 - // [114] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X + (byte~) main::$48) ← (byte)(word~) main::$33 -- pbuc1_derefidx_vbuxx=_byte_vwuz1 + // [110] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X + (byte~) main::$48) ← (byte)(word~) main::$33 -- pbuc1_derefidx_vbuxx=_byte_vwuz1 lda.z __33 sta SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_X,x - // [115] (byte) main::sprite_idx#2 ← ++ (byte) main::sprite_idx#3 -- vbuz1=_inc_vbuz1 + // [111] (byte) main::sprite_idx#2 ← ++ (byte) main::sprite_idx#3 -- vbuz1=_inc_vbuz1 inc.z sprite_idx - // [116] (word) main::i#4 ← ++ (word) main::i#10 -- vwuz1=_inc_vwuz1 + // [112] (word) main::i#4 ← ++ (word) main::i#10 -- vwuz1=_inc_vwuz1 inc.z i_1 bne !+ inc.z i_1+1 @@ -5276,72 +5133,32 @@ main: { jmp __b6 // main::@25 __b25: - // [117] (byte) main::timer#21 ← (byte) main::timer#1 -- vbuz1=vbuxx + // [113] (byte) main::timer#21 ← (byte) main::timer#1 -- vbuz1=vbuxx stx.z timer jmp __b5_from___b25 - // [118] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // [114] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: jmp __b2 // main::@2 __b2: - // [119] call rand - // [157] phi from main::@2 to rand [phi:main::@2->rand] + // [115] call rand + // [152] phi from main::@2 to rand [phi:main::@2->rand] rand_from___b2: - // [157] phi (word) rand_state#10 = (word) rand_state#17 [phi:main::@2->rand#0] -- register_copy + // [152] phi (word) rand_state#10 = (word) rand_state#17 [phi:main::@2->rand#0] -- register_copy jsr rand - // [120] (word) rand::return#2 ← (word) rand::return#0 + // [116] (word) rand::return#2 ← (word) rand::return#0 jmp __b22 // main::@22 __b22: - // [121] (word~) main::$9 ← (word) rand::return#2 - // [122] (word~) main::$10 ← (word~) main::$9 & (word) $3ff -- vwuz1=vwuz1_band_vwuc1 + // [117] (word~) main::$9 ← (word) rand::return#2 + // [118] (word~) main::$10 ← (word~) main::$9 & (word) $3ff -- vwuz1=vwuz1_band_vwuc1 lda.z __10 and #<$3ff sta.z __10 lda.z __10+1 and #>$3ff sta.z __10+1 - // [123] (word~) main::$35 ← (word) main::i#14 << (byte) 3 -- vwuz1=vwuz2_rol_3 - lda.z i - asl - sta.z __35 - lda.z i+1 - rol - sta.z __35+1 - asl.z __35 - rol.z __35+1 - asl.z __35 - rol.z __35+1 - // [124] (word*~) main::$59 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$35 -- pwuz1=pwuc1_plus_vwuz1 - clc - lda.z __59 - adc #balls+4 - sta.z __59+1 - // [125] *((word*~) main::$59) ← (word~) main::$10 -- _deref_pwuz1=vwuz2 - ldy #0 - lda.z __10 - sta (__59),y - iny - lda.z __10+1 - sta (__59),y - // [126] call rand - // [157] phi from main::@22 to rand [phi:main::@22->rand] - rand_from___b22: - // [157] phi (word) rand_state#10 = (word) rand_state#11 [phi:main::@22->rand#0] -- register_copy - jsr rand - // [127] (word) rand::return#3 ← (word) rand::return#0 - jmp __b23 - // main::@23 - __b23: - // [128] (word~) main::$11 ← (word) rand::return#3 - // [129] (byte~) main::$12 ← (word~) main::$11 & (byte) $ff -- vbuxx=vwuz1_band_vbuc1 - lda #$ff - and.z __11 - tax - // [130] (word~) main::$36 ← (word) main::i#14 << (byte) 3 -- vwuz1=vwuz2_rol_3 + // [119] (word~) main::$36 ← (word) main::i#14 << (byte) 3 -- vwuz1=vwuz2_rol_3 lda.z i asl sta.z __36 @@ -5352,7 +5169,36 @@ main: { rol.z __36+1 asl.z __36 rol.z __36+1 - // [131] (word*~) main::$60 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$36 -- pwuz1=pwuc1_plus_vwuz1 + // [120] (word*~) main::$59 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$36 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __36 + clc + adc #balls+4 + sta.z __59+1 + // [121] *((word*~) main::$59) ← (word~) main::$10 -- _deref_pwuz1=vwuz2 + ldy #0 + lda.z __10 + sta (__59),y + iny + lda.z __10+1 + sta (__59),y + // [122] call rand + // [152] phi from main::@22 to rand [phi:main::@22->rand] + rand_from___b22: + // [152] phi (word) rand_state#10 = (word) rand_state#11 [phi:main::@22->rand#0] -- register_copy + jsr rand + // [123] (word) rand::return#3 ← (word) rand::return#0 + jmp __b23 + // main::@23 + __b23: + // [124] (word~) main::$11 ← (word) rand::return#3 + // [125] (byte~) main::$12 ← (word~) main::$11 & (byte) $ff -- vbuxx=vwuz1_band_vbuc1 + lda #$ff + and.z __11 + tax + // [126] (word*~) main::$60 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$36 -- pwuz1=pwuc1_plus_vwuz1 clc lda.z __60 adc #balls+6 sta.z __60+1 - // [132] *((word*~) main::$60) ← (byte~) main::$12 -- _deref_pwuz1=vbuxx + // [127] *((word*~) main::$60) ← (byte~) main::$12 -- _deref_pwuz1=vbuxx txa ldy #0 sta (__60),y tya iny sta (__60),y - // [133] (word) main::i#2 ← ++ (word) main::i#14 -- vwuz1=_inc_vwuz1 + // [128] (word) main::i#2 ← ++ (word) main::i#14 -- vwuz1=_inc_vwuz1 inc.z i bne !+ inc.z i+1 @@ -5392,22 +5238,22 @@ ppuDataTransfer: { jmp ppuDataPrepare1 // ppuDataTransfer::ppuDataPrepare1 ppuDataPrepare1: - // [135] (byte~) ppuDataTransfer::ppuDataPrepare1_$0 ← > (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 -- vbuaa=_hi_pvoz1 + // [130] (byte~) ppuDataTransfer::ppuDataPrepare1_$0 ← > (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 -- vbuaa=_hi_pvoz1 lda.z ppuDataPrepare1_ppuData+1 - // [136] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataTransfer::ppuDataPrepare1_$0 -- _deref_pbuc1=vbuaa + // [131] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataTransfer::ppuDataPrepare1_$0 -- _deref_pbuc1=vbuaa sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUADDR - // [137] (byte~) ppuDataTransfer::ppuDataPrepare1_$1 ← < (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 -- vbuaa=_lo_pvoz1 + // [132] (byte~) ppuDataTransfer::ppuDataPrepare1_$1 ← < (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 -- vbuaa=_lo_pvoz1 lda.z ppuDataPrepare1_ppuData - // [138] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataTransfer::ppuDataPrepare1_$1 -- _deref_pbuc1=vbuaa + // [133] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataTransfer::ppuDataPrepare1_$1 -- _deref_pbuc1=vbuaa sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUADDR jmp __b3 // ppuDataTransfer::@3 __b3: - // [139] (byte*) ppuDataTransfer::cpuSrc#6 ← (byte*)(nomodify void*) ppuDataTransfer::cpuData#2 - // [140] phi from ppuDataTransfer::@3 to ppuDataTransfer::@1 [phi:ppuDataTransfer::@3->ppuDataTransfer::@1] + // [134] (byte*) ppuDataTransfer::cpuSrc#6 ← (byte*)(nomodify void*) ppuDataTransfer::cpuData#2 + // [135] phi from ppuDataTransfer::@3 to ppuDataTransfer::@1 [phi:ppuDataTransfer::@3->ppuDataTransfer::@1] __b1_from___b3: - // [140] phi (byte*) ppuDataTransfer::cpuSrc#2 = (byte*) ppuDataTransfer::cpuSrc#6 [phi:ppuDataTransfer::@3->ppuDataTransfer::@1#0] -- register_copy - // [140] phi (word) ppuDataTransfer::i#2 = (word) 0 [phi:ppuDataTransfer::@3->ppuDataTransfer::@1#1] -- vwuz1=vwuc1 + // [135] phi (byte*) ppuDataTransfer::cpuSrc#2 = (byte*) ppuDataTransfer::cpuSrc#6 [phi:ppuDataTransfer::@3->ppuDataTransfer::@1#0] -- register_copy + // [135] phi (word) ppuDataTransfer::i#2 = (word) 0 [phi:ppuDataTransfer::@3->ppuDataTransfer::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z i lda #>0 @@ -5415,7 +5261,7 @@ ppuDataTransfer: { jmp __b1 // ppuDataTransfer::@1 __b1: - // [141] if((word) ppuDataTransfer::i#2<(byte) $20*(const byte) SIZEOF_BYTE) goto ppuDataTransfer::@2 -- vwuz1_lt_vbuc1_then_la1 + // [136] if((word) ppuDataTransfer::i#2<(byte) $20*(const byte) SIZEOF_BYTE) goto ppuDataTransfer::@2 -- vwuz1_lt_vbuc1_then_la1 lda.z i+1 bne !+ lda.z i @@ -5425,35 +5271,35 @@ ppuDataTransfer: { jmp __breturn // ppuDataTransfer::@return __breturn: - // [142] return + // [137] return rts // ppuDataTransfer::@2 __b2: - // [143] (byte) ppuDataTransfer::ppuDataPut1_val#0 ← *((byte*) ppuDataTransfer::cpuSrc#2) -- vbuaa=_deref_pbuz1 + // [138] (byte) ppuDataTransfer::ppuDataPut1_val#0 ← *((byte*) ppuDataTransfer::cpuSrc#2) -- vbuaa=_deref_pbuz1 ldy #0 lda (cpuSrc),y jmp ppuDataPut1 // ppuDataTransfer::ppuDataPut1 ppuDataPut1: - // [144] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) ppuDataTransfer::ppuDataPut1_val#0 -- _deref_pbuc1=vbuaa + // [139] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) ppuDataTransfer::ppuDataPut1_val#0 -- _deref_pbuc1=vbuaa sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUDATA jmp __b4 // ppuDataTransfer::@4 __b4: - // [145] (byte*) ppuDataTransfer::cpuSrc#1 ← ++ (byte*) ppuDataTransfer::cpuSrc#2 -- pbuz1=_inc_pbuz1 + // [140] (byte*) ppuDataTransfer::cpuSrc#1 ← ++ (byte*) ppuDataTransfer::cpuSrc#2 -- pbuz1=_inc_pbuz1 inc.z cpuSrc bne !+ inc.z cpuSrc+1 !: - // [146] (word) ppuDataTransfer::i#1 ← ++ (word) ppuDataTransfer::i#2 -- vwuz1=_inc_vwuz1 + // [141] (word) ppuDataTransfer::i#1 ← ++ (word) ppuDataTransfer::i#2 -- vwuz1=_inc_vwuz1 inc.z i bne !+ inc.z i+1 !: - // [140] phi from ppuDataTransfer::@4 to ppuDataTransfer::@1 [phi:ppuDataTransfer::@4->ppuDataTransfer::@1] + // [135] phi from ppuDataTransfer::@4 to ppuDataTransfer::@1 [phi:ppuDataTransfer::@4->ppuDataTransfer::@1] __b1_from___b4: - // [140] phi (byte*) ppuDataTransfer::cpuSrc#2 = (byte*) ppuDataTransfer::cpuSrc#1 [phi:ppuDataTransfer::@4->ppuDataTransfer::@1#0] -- register_copy - // [140] phi (word) ppuDataTransfer::i#2 = (word) ppuDataTransfer::i#1 [phi:ppuDataTransfer::@4->ppuDataTransfer::@1#1] -- register_copy + // [135] phi (byte*) ppuDataTransfer::cpuSrc#2 = (byte*) ppuDataTransfer::cpuSrc#1 [phi:ppuDataTransfer::@4->ppuDataTransfer::@1#0] -- register_copy + // [135] phi (word) ppuDataTransfer::i#2 = (word) ppuDataTransfer::i#1 [phi:ppuDataTransfer::@4->ppuDataTransfer::@1#1] -- register_copy jmp __b1 } // ppuDataFill @@ -5468,17 +5314,17 @@ ppuDataFill: { jmp ppuDataPrepare1 // ppuDataFill::ppuDataPrepare1 ppuDataPrepare1: - // [148] (byte~) ppuDataFill::ppuDataPrepare1_$0 ← > (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 -- vbuaa=_hi_pvoz1 + // [143] (byte~) ppuDataFill::ppuDataPrepare1_$0 ← > (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 -- vbuaa=_hi_pvoz1 lda.z ppuDataPrepare1_ppuData+1 - // [149] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataFill::ppuDataPrepare1_$0 -- _deref_pbuc1=vbuaa + // [144] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataFill::ppuDataPrepare1_$0 -- _deref_pbuc1=vbuaa sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUADDR - // [150] (byte~) ppuDataFill::ppuDataPrepare1_$1 ← < (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 -- vbuaa=_lo_pvoz1 + // [145] (byte~) ppuDataFill::ppuDataPrepare1_$1 ← < (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 -- vbuaa=_lo_pvoz1 lda.z ppuDataPrepare1_ppuData - // [151] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataFill::ppuDataPrepare1_$1 -- _deref_pbuc1=vbuaa + // [146] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataFill::ppuDataPrepare1_$1 -- _deref_pbuc1=vbuaa sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUADDR - // [152] phi from ppuDataFill::ppuDataPrepare1 to ppuDataFill::@1 [phi:ppuDataFill::ppuDataPrepare1->ppuDataFill::@1] + // [147] phi from ppuDataFill::ppuDataPrepare1 to ppuDataFill::@1 [phi:ppuDataFill::ppuDataPrepare1->ppuDataFill::@1] __b1_from_ppuDataPrepare1: - // [152] phi (word) ppuDataFill::i#2 = (word) 0 [phi:ppuDataFill::ppuDataPrepare1->ppuDataFill::@1#0] -- vwuz1=vwuc1 + // [147] phi (word) ppuDataFill::i#2 = (word) 0 [phi:ppuDataFill::ppuDataPrepare1->ppuDataFill::@1#0] -- vwuz1=vwuc1 lda #<0 sta.z i lda #>0 @@ -5487,7 +5333,7 @@ ppuDataFill: { // Transfer to PPU // ppuDataFill::@1 __b1: - // [153] if((word) ppuDataFill::i#2<(word) ppuDataFill::size#3) goto ppuDataFill::ppuDataPut1 -- vwuz1_lt_vwuz2_then_la1 + // [148] if((word) ppuDataFill::i#2<(word) ppuDataFill::size#3) goto ppuDataFill::ppuDataPut1 -- vwuz1_lt_vwuz2_then_la1 lda.z i+1 cmp.z size+1 bcc ppuDataPut1 @@ -5499,24 +5345,24 @@ ppuDataFill: { jmp __breturn // ppuDataFill::@return __breturn: - // [154] return + // [149] return rts // ppuDataFill::ppuDataPut1 ppuDataPut1: - // [155] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [150] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUDATA jmp __b2 // ppuDataFill::@2 __b2: - // [156] (word) ppuDataFill::i#1 ← ++ (word) ppuDataFill::i#2 -- vwuz1=_inc_vwuz1 + // [151] (word) ppuDataFill::i#1 ← ++ (word) ppuDataFill::i#2 -- vwuz1=_inc_vwuz1 inc.z i bne !+ inc.z i+1 !: - // [152] phi from ppuDataFill::@2 to ppuDataFill::@1 [phi:ppuDataFill::@2->ppuDataFill::@1] + // [147] phi from ppuDataFill::@2 to ppuDataFill::@1 [phi:ppuDataFill::@2->ppuDataFill::@1] __b1_from___b2: - // [152] phi (word) ppuDataFill::i#2 = (word) ppuDataFill::i#1 [phi:ppuDataFill::@2->ppuDataFill::@1#0] -- register_copy + // [147] phi (word) ppuDataFill::i#2 = (word) ppuDataFill::i#1 [phi:ppuDataFill::@2->ppuDataFill::@1#0] -- register_copy jmp __b1 } // rand @@ -5529,7 +5375,7 @@ rand: { .label __1 = $3e .label __2 = $40 .label return = $36 - // [158] (word~) rand::$0 ← (word) rand_state#10 << (byte) 7 -- vwuz1=vwuz2_rol_7 + // [153] (word~) rand::$0 ← (word) rand_state#10 << (byte) 7 -- vwuz1=vwuz2_rol_7 lda.z rand_state+1 lsr lda.z rand_state @@ -5538,39 +5384,39 @@ rand: { lda #0 ror sta.z __0 - // [159] (word) rand_state#0 ← (word) rand_state#10 ^ (word~) rand::$0 -- vwuz1=vwuz1_bxor_vwuz2 + // [154] (word) rand_state#0 ← (word) rand_state#10 ^ (word~) rand::$0 -- vwuz1=vwuz1_bxor_vwuz2 lda.z rand_state eor.z __0 sta.z rand_state lda.z rand_state+1 eor.z __0+1 sta.z rand_state+1 - // [160] (word~) rand::$1 ← (word) rand_state#0 >> (byte) 9 -- vwuz1=vwuz2_ror_9 + // [155] (word~) rand::$1 ← (word) rand_state#0 >> (byte) 9 -- vwuz1=vwuz2_ror_9 lda.z rand_state+1 lsr sta.z __1 lda #0 sta.z __1+1 - // [161] (word) rand_state#1 ← (word) rand_state#0 ^ (word~) rand::$1 -- vwuz1=vwuz1_bxor_vwuz2 + // [156] (word) rand_state#1 ← (word) rand_state#0 ^ (word~) rand::$1 -- vwuz1=vwuz1_bxor_vwuz2 lda.z rand_state eor.z __1 sta.z rand_state lda.z rand_state+1 eor.z __1+1 sta.z rand_state+1 - // [162] (word~) rand::$2 ← (word) rand_state#1 << (byte) 8 -- vwuz1=vwuz2_rol_8 + // [157] (word~) rand::$2 ← (word) rand_state#1 << (byte) 8 -- vwuz1=vwuz2_rol_8 lda.z rand_state sta.z __2+1 lda #0 sta.z __2 - // [163] (word) rand_state#11 ← (word) rand_state#1 ^ (word~) rand::$2 -- vwuz1=vwuz1_bxor_vwuz2 + // [158] (word) rand_state#11 ← (word) rand_state#1 ^ (word~) rand::$2 -- vwuz1=vwuz1_bxor_vwuz2 lda.z rand_state eor.z __2 sta.z rand_state lda.z rand_state+1 eor.z __2+1 sta.z rand_state+1 - // [164] (word) rand::return#0 ← (word) rand_state#11 -- vwuz1=vwuz2 + // [159] (word) rand::return#0 ← (word) rand_state#11 -- vwuz1=vwuz2 lda.z rand_state sta.z return lda.z rand_state+1 @@ -5578,7 +5424,7 @@ rand: { jmp __breturn // rand::@return __breturn: - // [165] return + // [160] return rts } // File Data @@ -5760,8 +5606,8 @@ Succesful ASM optimization Pass5NextJumpElimination Removing instruction lda #0 Removing instruction lda #0 Succesful ASM optimization Pass5UnnecesaryLoadElimination -Fixing long branch [251] bcc __b2 to bcs -Fixing long branch [276] bne __b25 to beq +Fixing long branch [246] bcc __b2 to bcs +Fixing long branch [271] bne __b25 to beq FINAL SYMBOL TABLE (word) $0::x_position @@ -5841,28 +5687,23 @@ FINAL SYMBOL TABLE (signed word()) main() (word~) main::$10 zp[2]:54 67.33333333333333 (word~) main::$11 zp[2]:54 202.0 -(byte~) main::$12 reg byte x 67.33333333333333 +(byte~) main::$12 reg byte x 101.0 (byte~) main::$14 reg byte a 202.0 -(word~) main::$20 zp[2]:15 2002.0 +(word~) main::$20 zp[2]:33 2002.0 (word~) main::$23 zp[2]:39 500.5 -(word~) main::$25 zp[2]:37 667.3333333333334 -(byte~) main::$26 zp[1]:41 1001.0 +(word~) main::$25 zp[2]:41 667.3333333333334 +(byte~) main::$26 zp[1]:43 1001.0 (byte~) main::$30 reg byte a 1001.0 (word~) main::$31 zp[2]:48 1001.0 (word~) main::$32 zp[2]:52 500.5 -(word~) main::$33 zp[2]:50 1001.0 -(word~) main::$35 zp[2]:56 202.0 -(word~) main::$36 zp[2]:58 202.0 +(word~) main::$33 zp[2]:15 1001.0 +(word~) main::$36 zp[2]:56 43.285714285714285 (byte~) main::$38 reg byte x 151.5 -(word~) main::$40 zp[2]:15 834.1666666666666 -(word~) main::$44 zp[2]:37 1001.0 -(word~) main::$45 zp[2]:33 1501.5 +(word~) main::$44 zp[2]:15 487.6666666666668 (byte~) main::$48 reg byte x 834.1666666666667 -(word~) main::$50 zp[2]:50 429.0 -(word~) main::$53 zp[2]:42 572.0 (word~) main::$56 zp[2]:48 2002.0 -(word*~) main::$59 zp[2]:56 202.0 -(word*~) main::$60 zp[2]:58 202.0 +(word*~) main::$59 zp[2]:58 202.0 +(word*~) main::$60 zp[2]:56 202.0 (word*~) main::$61 zp[2]:17 667.3333333333334 (word*~) main::$62 zp[2]:19 1001.0 (word*~) main::$63 zp[2]:21 2002.0 @@ -5871,16 +5712,16 @@ FINAL SYMBOL TABLE (word*~) main::$66 zp[2]:27 667.3333333333334 (word*~) main::$67 zp[2]:29 1001.0 (word*~) main::$68 zp[2]:31 2002.0 -(word*~) main::$69 zp[2]:15 2002.0 +(word*~) main::$69 zp[2]:33 2002.0 (word*~) main::$70 zp[2]:39 2002.0 -(word*~) main::$71 zp[2]:37 2002.0 +(word*~) main::$71 zp[2]:41 2002.0 (word*~) main::$72 zp[2]:35 1001.0 -(word*~) main::$73 zp[2]:33 2002.0 +(word*~) main::$73 zp[2]:37 2002.0 (word*~) main::$74 zp[2]:52 2002.0 -(word*~) main::$75 zp[2]:50 2002.0 +(word*~) main::$75 zp[2]:15 2002.0 (word*~) main::$76 zp[2]:44 1001.0 (word*~) main::$77 zp[2]:46 2002.0 -(word*~) main::$78 zp[2]:42 2002.0 +(word*~) main::$78 zp[2]:50 2002.0 (word~) main::$9 zp[2]:54 202.0 (label) main::@1 (label) main::@10 @@ -5910,13 +5751,13 @@ FINAL SYMBOL TABLE (byte) main::active_balls (byte) main::active_balls#1 active_balls zp[1]:5 75.75 (byte) main::active_balls#2 active_balls zp[1]:5 56.11111111111111 -(byte) main::active_balls#8 active_balls zp[1]:5 25.545454545454547 +(byte) main::active_balls#8 active_balls zp[1]:5 27.54901960784314 (label) main::enableVideoOutput1 (byte) main::h_bar -(byte) main::h_bar#1 h_bar zp[1]:14 51.69354838709677 +(byte) main::h_bar#1 h_bar zp[1]:14 55.258620689655174 (word) main::i -(word) main::i#10 i_1 zp[2]:7 163.42857142857142 -(word) main::i#14 i zp[2]:2 29.705882352941178 +(word) main::i#10 i_1 zp[2]:7 88.97777777777777 +(word) main::i#14 i zp[2]:2 25.25 (word) main::i#2 i zp[2]:2 202.0 (word) main::i#4 i_1 zp[2]:7 2002.0 (label) main::initNES1 @@ -5937,14 +5778,14 @@ FINAL SYMBOL TABLE (signed word) main::return (byte) main::sprite_idx (byte) main::sprite_idx#2 sprite_idx zp[1]:9 1001.0 -(byte) main::sprite_idx#3 sprite_idx zp[1]:9 62.5625 +(byte) main::sprite_idx#3 sprite_idx zp[1]:9 68.25 (byte) main::timer (byte) main::timer#1 reg byte x 101.0 -(byte) main::timer#15 timer zp[1]:6 5.50909090909091 +(byte) main::timer#15 timer zp[1]:6 5.9411764705882355 (byte) main::timer#21 timer zp[1]:6 202.0 (byte) main::timer#3 timer zp[1]:6 57.714285714285715 (byte) main::timer_2 -(byte) main::timer_2#1 timer_2 zp[1]:4 4.522388059701492 +(byte) main::timer_2#1 timer_2 zp[1]:4 4.80952380952381 (byte) main::timer_2#2 timer_2 zp[1]:4 202.0 (const to_nomodify byte*) palette[] = { (byte) $34, (byte) $24, (byte) $14, (byte) 4, (byte) $34, (byte) $24, (byte) $14, (byte) 4, (byte) $34, (byte) $24, (byte) $14, (byte) 4, (byte) $34, (byte) $24, (byte) $14, (byte) 4, (byte) $34, (byte) $24, (byte) $14, (byte) 4, (byte) $34, (byte) $24, (byte) $14, (byte) 4, (byte) $34, (byte) $24, (byte) $14, (byte) 4, (byte) $34, (byte) $24, (byte) $14, (byte) 4 } (void()) ppuDataFill((nomodify void*) ppuDataFill::ppuData , (byte) ppuDataFill::val , (word) ppuDataFill::size) @@ -6013,7 +5854,7 @@ FINAL SYMBOL TABLE (word) rand_state#0 rand_state zp[2]:10 1501.5 (word) rand_state#1 rand_state zp[2]:10 1501.5 (word) rand_state#10 rand_state zp[2]:10 1102.0 -(word) rand_state#11 rand_state zp[2]:10 122.44444444444446 +(word) rand_state#11 rand_state zp[2]:10 129.64705882352942 (word) rand_state#17 rand_state zp[2]:10 67.33333333333333 (volatile byte) scroll_y loadstore zp[1]:12 105.0 (const to_nomodify byte*) sine_table[(number) $100] = { (byte) $40, (byte) $42, (byte) $43, (byte) $45, (byte) $46, (byte) $48, (byte) $49, (byte) $4b, (byte) $4c, (byte) $4e, (byte) $50, (byte) $51, (byte) $53, (byte) $54, (byte) $56, (byte) $57, (byte) $58, (byte) $5a, (byte) $5b, (byte) $5d, (byte) $5e, (byte) $60, (byte) $61, (byte) $62, (byte) $64, (byte) $65, (byte) $66, (byte) $67, (byte) $69, (byte) $6a, (byte) $6b, (byte) $6c, (byte) $6d, (byte) $6e, (byte) $6f, (byte) $70, (byte) $71, (byte) $72, (byte) $73, (byte) $74, (byte) $75, (byte) $76, (byte) $77, (byte) $78, (byte) $78, (byte) $79, (byte) $7a, (byte) $7b, (byte) $7b, (byte) $7c, (byte) $7c, (byte) $7d, (byte) $7d, (byte) $7e, (byte) $7e, (byte) $7e, (byte) $7f, (byte) $7f, (byte) $7f, (byte) $80, (byte) $80, (byte) $80, (byte) $80, (byte) $80, (byte) $80, (byte) $80, (byte) $80, (byte) $80, (byte) $80, (byte) $80, (byte) $7f, (byte) $7f, (byte) $7f, (byte) $7e, (byte) $7e, (byte) $7e, (byte) $7d, (byte) $7d, (byte) $7c, (byte) $7c, (byte) $7b, (byte) $7b, (byte) $7a, (byte) $79, (byte) $78, (byte) $78, (byte) $77, (byte) $76, (byte) $75, (byte) $74, (byte) $73, (byte) $72, (byte) $71, (byte) $70, (byte) $6f, (byte) $6e, (byte) $6d, (byte) $6c, (byte) $6b, (byte) $6a, (byte) $69, (byte) $67, (byte) $66, (byte) $65, (byte) $64, (byte) $62, (byte) $61, (byte) $60, (byte) $5e, (byte) $5d, (byte) $5b, (byte) $5a, (byte) $58, (byte) $57, (byte) $56, (byte) $54, (byte) $53, (byte) $51, (byte) $50, (byte) $4e, (byte) $4c, (byte) $4b, (byte) $49, (byte) $48, (byte) $46, (byte) $45, (byte) $43, (byte) $42, (byte) $40, (byte) $3e, (byte) $3d, (byte) $3b, (byte) $3a, (byte) $38, (byte) $37, (byte) $35, (byte) $34, (byte) $32, (byte) $30, (byte) $2f, (byte) $2d, (byte) $2c, (byte) $2a, (byte) $29, (byte) $28, (byte) $26, (byte) $25, (byte) $23, (byte) $22, (byte) $20, (byte) $1f, (byte) $1e, (byte) $1c, (byte) $1b, (byte) $1a, (byte) $19, (byte) $17, (byte) $16, (byte) $15, (byte) $14, (byte) $13, (byte) $12, (byte) $11, (byte) $10, (byte) $f, (byte) $e, (byte) $d, (byte) $c, (byte) $b, (byte) $a, (byte) 9, (byte) 8, (byte) 8, (byte) 7, (byte) 6, (byte) 5, (byte) 5, (byte) 4, (byte) 4, (byte) 3, (byte) 3, (byte) 2, (byte) 2, (byte) 2, (byte) 1, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 1, (byte) 2, (byte) 2, (byte) 2, (byte) 3, (byte) 3, (byte) 4, (byte) 4, (byte) 5, (byte) 5, (byte) 6, (byte) 7, (byte) 8, (byte) 8, (byte) 9, (byte) $a, (byte) $b, (byte) $c, (byte) $d, (byte) $e, (byte) $f, (byte) $10, (byte) $11, (byte) $12, (byte) $13, (byte) $14, (byte) $15, (byte) $16, (byte) $17, (byte) $19, (byte) $1a, (byte) $1b, (byte) $1c, (byte) $1e, (byte) $1f, (byte) $20, (byte) $22, (byte) $23, (byte) $25, (byte) $26, (byte) $28, (byte) $29, (byte) $2a, (byte) $2c, (byte) $2d, (byte) $2f, (byte) $30, (byte) $32, (byte) $34, (byte) $35, (byte) $37, (byte) $38, (byte) $3a, (byte) $3b, (byte) $3d, (byte) $3e } @@ -6022,7 +5863,7 @@ interrupt(HARDWARE_STACK)(void()) vblank() (label) vblank::@return (label) vblank::ppuSpriteBufferDmaTransfer1 (struct SpriteData*) vblank::ppuSpriteBufferDmaTransfer1_spriteBuffer -(volatile byte) vblank_hit loadstore zp[1]:13 8.65625 +(volatile byte) vblank_hit loadstore zp[1]:13 9.008130081300813 reg byte x [ main::initNES1_i#2 main::initNES1_i#1 ] zp[2]:2 [ main::i#14 main::i#2 ] @@ -6040,7 +5881,7 @@ zp[1]:14 [ main::h_bar#1 ] reg byte a [ main::$14 ] reg byte x [ main::timer#1 ] reg byte x [ main::$38 ] -zp[2]:15 [ main::$40 main::$69 main::$20 ppuDataFill::ppuDataPrepare1_ppuData#0 ppuDataTransfer::ppuDataPrepare1_ppuData#0 ] +zp[2]:15 [ main::$44 main::$75 main::$33 ppuDataFill::ppuDataPrepare1_ppuData#0 ppuDataTransfer::ppuDataPrepare1_ppuData#0 ] zp[2]:17 [ main::$61 ppuDataFill::size#3 ppuDataTransfer::cpuData#2 ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#6 ppuDataTransfer::cpuSrc#1 ] zp[2]:19 [ main::$62 ppuDataFill::i#2 ppuDataFill::i#1 ppuDataTransfer::i#2 ppuDataTransfer::i#1 ] zp[2]:21 [ main::$63 ] @@ -6049,23 +5890,23 @@ zp[2]:25 [ main::$65 ] zp[2]:27 [ main::$66 ] zp[2]:29 [ main::$67 ] zp[2]:31 [ main::$68 ] -zp[2]:33 [ main::$45 main::$73 ] +zp[2]:33 [ main::$69 main::$20 ] zp[2]:35 [ main::$72 ] -zp[2]:37 [ main::$44 main::$71 main::$25 ] +zp[2]:37 [ main::$73 ] zp[2]:39 [ main::$70 main::$23 ] -zp[1]:41 [ main::$26 ] -zp[2]:42 [ main::$53 main::$78 ] +zp[2]:41 [ main::$71 main::$25 ] +zp[1]:43 [ main::$26 ] zp[2]:44 [ main::$76 ] zp[2]:46 [ main::$77 ] reg byte a [ main::$30 ] zp[2]:48 [ main::$56 main::$31 ] -zp[2]:50 [ main::$50 main::$75 main::$33 ] +zp[2]:50 [ main::$78 ] zp[2]:52 [ main::$74 main::$32 ] reg byte x [ main::$48 ] zp[2]:54 [ rand::return#2 main::$9 rand::return#0 main::$10 rand::return#3 main::$11 ] -zp[2]:56 [ main::$35 main::$59 ] +zp[2]:56 [ main::$36 main::$60 ] +zp[2]:58 [ main::$59 ] reg byte x [ main::$12 ] -zp[2]:58 [ main::$36 main::$60 ] reg byte a [ ppuDataTransfer::ppuDataPrepare1_$0 ] reg byte a [ ppuDataTransfer::ppuDataPrepare1_$1 ] reg byte a [ ppuDataTransfer::ppuDataPut1_val#0 ] @@ -6077,7 +5918,7 @@ zp[2]:64 [ rand::$2 ] FINAL ASSEMBLER -Score: 99953 +Score: 85193 // File Comments //#pragma emulator("java -jar /Applications/Nintaco_bin_2020-05-01/Nintaco.jar") @@ -6230,20 +6071,15 @@ main: { .label __9 = $36 .label __10 = $36 .label __11 = $36 - .label __20 = $f + .label __20 = $21 .label __23 = $27 - .label __25 = $25 - .label __26 = $29 + .label __25 = $29 + .label __26 = $2b .label __31 = $30 .label __32 = $34 - .label __33 = $32 - .label __35 = $38 - .label __36 = $3a - .label __40 = $f - .label __44 = $25 - .label __45 = $21 - .label __50 = $32 - .label __53 = $2a + .label __33 = $f + .label __36 = $38 + .label __44 = $f .label __56 = $30 .label i = 2 .label timer_2 = 4 @@ -6252,8 +6088,8 @@ main: { .label sprite_idx = 9 .label i_1 = 7 .label timer = 6 - .label __59 = $38 - .label __60 = $3a + .label __59 = $3a + .label __60 = $38 .label __61 = $11 .label __62 = $13 .label __63 = $15 @@ -6262,16 +6098,16 @@ main: { .label __66 = $1b .label __67 = $1d .label __68 = $1f - .label __69 = $f + .label __69 = $21 .label __70 = $27 - .label __71 = $25 + .label __71 = $29 .label __72 = $23 - .label __73 = $21 + .label __73 = $25 .label __74 = $34 - .label __75 = $32 + .label __75 = $f .label __76 = $2c .label __77 = $2e - .label __78 = $2a + .label __78 = $32 // main::initNES1 // asm // asm { cld ldx#$ff txs } @@ -6369,13 +6205,13 @@ main: { // ppuDataTransfer(PPU_PALETTE, palette, sizeof(palette)) // [38] call ppuDataTransfer // Transfer the palette - // [134] phi from main::@17 to ppuDataTransfer [phi:main::@17->ppuDataTransfer] - // [134] phi (nomodify void*) ppuDataTransfer::cpuData#2 = (void*)(const to_nomodify byte*) palette [phi:main::@17->ppuDataTransfer#0] -- pvoz1=pvoc1 + // [129] phi from main::@17 to ppuDataTransfer [phi:main::@17->ppuDataTransfer] + // [129] phi (nomodify void*) ppuDataTransfer::cpuData#2 = (void*)(const to_nomodify byte*) palette [phi:main::@17->ppuDataTransfer#0] -- pvoz1=pvoc1 lda #palette sta.z ppuDataTransfer.cpuData+1 - // [134] phi (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 = (void*)(const nomodify byte*) PPU_PALETTE [phi:main::@17->ppuDataTransfer#1] -- pvoz1=pvoc1 + // [129] phi (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 = (void*)(const nomodify byte*) PPU_PALETTE [phi:main::@17->ppuDataTransfer#1] -- pvoz1=pvoc1 lda #PPU_PALETTE @@ -6386,13 +6222,13 @@ main: { // ppuDataFill(PPU_NAME_TABLE_0, 0, 32*30) // [40] call ppuDataFill // Fill the PPU attribute table - // [147] phi from main::@19 to ppuDataFill [phi:main::@19->ppuDataFill] - // [147] phi (word) ppuDataFill::size#3 = (word)(number) $20*(number) $1e [phi:main::@19->ppuDataFill#0] -- vwuz1=vwuc1 + // [142] phi from main::@19 to ppuDataFill [phi:main::@19->ppuDataFill] + // [142] phi (word) ppuDataFill::size#3 = (word)(number) $20*(number) $1e [phi:main::@19->ppuDataFill#0] -- vwuz1=vwuc1 lda #<$20*$1e sta.z ppuDataFill.size lda #>$20*$1e sta.z ppuDataFill.size+1 - // [147] phi (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 = (void*)(const nomodify byte*) PPU_NAME_TABLE_0 [phi:main::@19->ppuDataFill#1] -- pvoz1=pvoc1 + // [142] phi (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 = (void*)(const nomodify byte*) PPU_NAME_TABLE_0 [phi:main::@19->ppuDataFill#1] -- pvoz1=pvoc1 lda #PPU_NAME_TABLE_0 @@ -6402,13 +6238,13 @@ main: { // main::@20 // ppuDataFill(PPU_ATTRIBUTE_TABLE_0, 0, 0x40) // [42] call ppuDataFill - // [147] phi from main::@20 to ppuDataFill [phi:main::@20->ppuDataFill] - // [147] phi (word) ppuDataFill::size#3 = (byte) $40 [phi:main::@20->ppuDataFill#0] -- vwuz1=vbuc1 + // [142] phi from main::@20 to ppuDataFill [phi:main::@20->ppuDataFill] + // [142] phi (word) ppuDataFill::size#3 = (byte) $40 [phi:main::@20->ppuDataFill#0] -- vwuz1=vbuc1 lda #<$40 sta.z ppuDataFill.size lda #>$40 sta.z ppuDataFill.size+1 - // [147] phi (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 = (void*)(const nomodify byte*) PPU_ATTRIBUTE_TABLE_0 [phi:main::@20->ppuDataFill#1] -- pvoz1=pvoc1 + // [142] phi (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 = (void*)(const nomodify byte*) PPU_ATTRIBUTE_TABLE_0 [phi:main::@20->ppuDataFill#1] -- pvoz1=pvoc1 lda #PPU_ATTRIBUTE_TABLE_0 @@ -6418,13 +6254,13 @@ main: { // main::@21 // ppuDataTransfer(0x2040, h_bar_tilemap, sizeof(h_bar_tilemap)) // [44] call ppuDataTransfer - // [134] phi from main::@21 to ppuDataTransfer [phi:main::@21->ppuDataTransfer] - // [134] phi (nomodify void*) ppuDataTransfer::cpuData#2 = (void*)(const to_nomodify byte*) h_bar_tilemap [phi:main::@21->ppuDataTransfer#0] -- pvoz1=pvoc1 + // [129] phi from main::@21 to ppuDataTransfer [phi:main::@21->ppuDataTransfer] + // [129] phi (nomodify void*) ppuDataTransfer::cpuData#2 = (void*)(const to_nomodify byte*) h_bar_tilemap [phi:main::@21->ppuDataTransfer#0] -- pvoz1=pvoc1 lda #h_bar_tilemap sta.z ppuDataTransfer.cpuData+1 - // [134] phi (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 = (void*) 8256 [phi:main::@21->ppuDataTransfer#1] -- pvoz1=pvoc1 + // [129] phi (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 = (void*) 8256 [phi:main::@21->ppuDataTransfer#1] -- pvoz1=pvoc1 lda #<$2040 sta.z ppuDataTransfer.ppuDataPrepare1_ppuData lda #>$2040 @@ -6584,39 +6420,39 @@ main: { // main::@7 __b7: // balls[i].x_position += balls[i].x_velocity - // [69] (word~) main::$40 ← (word) main::i#10 << (byte) 3 -- vwuz1=vwuz2_rol_3 + // [69] (word~) main::$44 ← (word) main::i#10 << (byte) 3 -- vwuz1=vwuz2_rol_3 lda.z i_1 asl - sta.z __40 + sta.z __44 lda.z i_1+1 rol - sta.z __40+1 - asl.z __40 - rol.z __40+1 - asl.z __40 - rol.z __40+1 - // [70] (word*~) main::$61 ← (word*)(const struct $0*) balls + (word~) main::$40 -- pwuz1=pwuc1_plus_vwuz2 - lda.z __40 + sta.z __44+1 + asl.z __44 + rol.z __44+1 + asl.z __44 + rol.z __44+1 + // [70] (word*~) main::$61 ← (word*)(const struct $0*) balls + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __44 clc adc #balls sta.z __61+1 - // [71] (word*~) main::$62 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$40 -- pwuz1=pwuc1_plus_vwuz2 - lda.z __40 + // [71] (word*~) main::$62 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __44 clc adc #balls+4 sta.z __62+1 - // [72] (word*~) main::$63 ← (word*)(const struct $0*) balls + (word~) main::$40 -- pwuz1=pwuc1_plus_vwuz2 - lda.z __40 + // [72] (word*~) main::$63 ← (word*)(const struct $0*) balls + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __44 clc adc #balls sta.z __63+1 // [73] *((word*~) main::$63) ← *((word*~) main::$61) + *((word*~) main::$62) -- _deref_pwuz1=_deref_pwuz2_plus__deref_pwuz3 @@ -6630,20 +6466,20 @@ main: { adc (__62),y sta (__63),y // balls[i].y_velocity += WEIGHT - // [74] (word*~) main::$64 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$40 -- pwuz1=pwuc1_plus_vwuz2 - lda.z __40 + // [74] (word*~) main::$64 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __44 clc adc #balls+6 sta.z __64+1 - // [75] (word*~) main::$65 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$40 -- pwuz1=pwuc1_plus_vwuz2 - lda.z __40 + // [75] (word*~) main::$65 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __44 clc adc #balls+6 sta.z __65+1 // [76] *((word*~) main::$65) ← *((word*~) main::$64) + (byte) $10 -- _deref_pwuz1=_deref_pwuz2_plus_vwuc1 @@ -6657,28 +6493,28 @@ main: { adc #>$10 sta (__65),y // balls[i].y_position += (balls[i].y_velocity += WEIGHT) - // [77] (word*~) main::$66 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$40 -- pwuz1=pwuc1_plus_vwuz2 - lda.z __40 + // [77] (word*~) main::$66 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __44 clc adc #balls+2 sta.z __66+1 - // [78] (word*~) main::$67 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$40 -- pwuz1=pwuc1_plus_vwuz2 - lda.z __40 + // [78] (word*~) main::$67 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __44 clc adc #balls+6 sta.z __67+1 - // [79] (word*~) main::$68 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$40 -- pwuz1=pwuc1_plus_vwuz2 - lda.z __40 + // [79] (word*~) main::$68 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __44 clc adc #balls+2 sta.z __68+1 // [80] *((word*~) main::$68) ← *((word*~) main::$66) + *((word*~) main::$67) -- _deref_pwuz1=_deref_pwuz2_plus__deref_pwuz3 @@ -6692,12 +6528,12 @@ main: { adc (__67),y sta (__68),y // balls[i].x_position >> 8 - // [81] (word*~) main::$69 ← (word*)(const struct $0*) balls + (word~) main::$40 -- pwuz1=pwuc1_plus_vwuz1 + // [81] (word*~) main::$69 ← (word*)(const struct $0*) balls + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __44 clc - lda.z __69 adc #balls sta.z __69+1 // [82] (word~) main::$20 ← *((word*~) main::$69) >> (byte) 8 -- vwuz1=_deref_pwuz1_ror_8 @@ -6716,34 +6552,23 @@ main: { !: // main::@11 // balls[i].x_velocity ^= 0xFFFF - // [84] (word~) main::$45 ← (word) main::i#10 << (byte) 3 -- vwuz1=vwuz2_rol_3 - lda.z i_1 - asl - sta.z __45 - lda.z i_1+1 - rol - sta.z __45+1 - asl.z __45 - rol.z __45+1 - asl.z __45 - rol.z __45+1 - // [85] (word*~) main::$72 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$45 -- pwuz1=pwuc1_plus_vwuz2 - lda.z __45 + // [84] (word*~) main::$72 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __44 clc adc #balls+4 sta.z __72+1 - // [86] (word*~) main::$73 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$45 -- pwuz1=pwuc1_plus_vwuz1 + // [85] (word*~) main::$73 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __44 clc - lda.z __73 adc #balls+4 sta.z __73+1 - // [87] *((word*~) main::$73) ← *((word*~) main::$72) ^ (word) $ffff -- _deref_pwuz1=_deref_pwuz2_bxor_vwuc1 + // [86] *((word*~) main::$73) ← *((word*~) main::$72) ^ (word) $ffff -- _deref_pwuz1=_deref_pwuz2_bxor_vwuc1 ldy #0 lda #<$ffff eor (__72),y @@ -6755,18 +6580,7 @@ main: { // main::@9 __b9: // balls[i].y_position >> 8 - // [88] (word~) main::$44 ← (word) main::i#10 << (byte) 3 -- vwuz1=vwuz2_rol_3 - lda.z i_1 - asl - sta.z __44 - lda.z i_1+1 - rol - sta.z __44+1 - asl.z __44 - rol.z __44+1 - asl.z __44 - rol.z __44+1 - // [89] (word*~) main::$70 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + // [87] (word*~) main::$70 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 lda.z __44 clc adc #balls+2 sta.z __70+1 - // [90] (word~) main::$23 ← *((word*~) main::$70) >> (byte) 8 -- vwuz1=_deref_pwuz1_ror_8 + // [88] (word~) main::$23 ← *((word*~) main::$70) >> (byte) 8 -- vwuz1=_deref_pwuz1_ror_8 ldy #1 lda (__23),y sta.z __23 dey sty.z __23+1 - // [91] (word*~) main::$71 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz1 + // [89] (word*~) main::$71 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __44 clc - lda.z __71 adc #balls+2 sta.z __71+1 - // [92] (word~) main::$25 ← *((word*~) main::$71) >> (byte) 8 -- vwuz1=_deref_pwuz1_ror_8 + // [90] (word~) main::$25 ← *((word*~) main::$71) >> (byte) 8 -- vwuz1=_deref_pwuz1_ror_8 ldy #1 lda (__25),y sta.z __25 dey sty.z __25+1 // h_bar + 8 - // [93] (byte~) main::$26 ← (byte) main::h_bar#1 + (byte) 8 -- vbuz1=vbuz2_plus_vbuc1 + // [91] (byte~) main::$26 ← (byte) main::h_bar#1 + (byte) 8 -- vbuz1=vbuz2_plus_vbuc1 lax.z h_bar axs #-[8] stx.z __26 // if (((balls[i].y_position >> 8) >= h_bar) && (balls[i].y_position >> 8) < h_bar + 8) - // [94] if((word~) main::$23<(byte) main::h_bar#1) goto main::@10 -- vwuz1_lt_vbuz2_then_la1 + // [92] if((word~) main::$23<(byte) main::h_bar#1) goto main::@10 -- vwuz1_lt_vbuz2_then_la1 lda.z __23+1 bne !+ lda.z __23 @@ -6808,7 +6622,7 @@ main: { bcc __b10 !: // main::@24 - // [95] if((word~) main::$25>=(byte~) main::$26) goto main::@10 -- vwuz1_ge_vbuz2_then_la1 + // [93] if((word~) main::$25>=(byte~) main::$26) goto main::@10 -- vwuz1_ge_vbuz2_then_la1 lda.z __25+1 bne __b10 lda.z __25 @@ -6817,34 +6631,23 @@ main: { !: // main::@12 // balls[i].y_velocity ^= 0xFFFF - // [96] (word~) main::$53 ← (word) main::i#10 << (byte) 3 -- vwuz1=vwuz2_rol_3 - lda.z i_1 - asl - sta.z __53 - lda.z i_1+1 - rol - sta.z __53+1 - asl.z __53 - rol.z __53+1 - asl.z __53 - rol.z __53+1 - // [97] (word*~) main::$76 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$53 -- pwuz1=pwuc1_plus_vwuz2 - lda.z __53 + // [94] (word*~) main::$76 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __44 clc adc #balls+6 sta.z __76+1 - // [98] (word*~) main::$77 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$53 -- pwuz1=pwuc1_plus_vwuz2 - lda.z __53 + // [95] (word*~) main::$77 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __44 clc adc #balls+6 sta.z __77+1 - // [99] *((word*~) main::$77) ← *((word*~) main::$76) ^ (word) $ffff -- _deref_pwuz1=_deref_pwuz2_bxor_vwuc1 + // [96] *((word*~) main::$77) ← *((word*~) main::$76) ^ (word) $ffff -- _deref_pwuz1=_deref_pwuz2_bxor_vwuc1 ldy #0 lda #<$ffff eor (__76),y @@ -6854,30 +6657,30 @@ main: { eor (__76),y sta (__77),y // h_bar - 2 - // [100] (byte~) main::$30 ← (byte) main::h_bar#1 - (byte) 2 -- vbuaa=vbuz1_minus_2 + // [97] (byte~) main::$30 ← (byte) main::h_bar#1 - (byte) 2 -- vbuaa=vbuz1_minus_2 lda.z h_bar sec sbc #2 // (unsigned short)(h_bar - 2) << 8 - // [101] (word~) main::$56 ← (word)(byte~) main::$30 -- vwuz1=_word_vbuaa + // [98] (word~) main::$56 ← (word)(byte~) main::$30 -- vwuz1=_word_vbuaa sta.z __56 lda #0 sta.z __56+1 - // [102] (word~) main::$31 ← (word~) main::$56 << (byte) 8 -- vwuz1=vwuz1_rol_8 + // [99] (word~) main::$31 ← (word~) main::$56 << (byte) 8 -- vwuz1=vwuz1_rol_8 lda.z __31 sta.z __31+1 lda #0 sta.z __31 // balls[i].y_position = ((unsigned short)(h_bar - 2) << 8) - // [103] (word*~) main::$78 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$53 -- pwuz1=pwuc1_plus_vwuz1 + // [100] (word*~) main::$78 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __44 clc - lda.z __78 adc #balls+2 sta.z __78+1 - // [104] *((word*~) main::$78) ← (word~) main::$31 -- _deref_pwuz1=vwuz2 + // [101] *((word*~) main::$78) ← (word~) main::$31 -- _deref_pwuz1=vwuz2 ldy #0 lda.z __31 sta (__78),y @@ -6887,50 +6690,39 @@ main: { // main::@10 __b10: // balls[i].y_position >> 8 - // [105] (word~) main::$50 ← (word) main::i#10 << (byte) 3 -- vwuz1=vwuz2_rol_3 - lda.z i_1 - asl - sta.z __50 - lda.z i_1+1 - rol - sta.z __50+1 - asl.z __50 - rol.z __50+1 - asl.z __50 - rol.z __50+1 - // [106] (word*~) main::$74 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$50 -- pwuz1=pwuc1_plus_vwuz2 - lda.z __50 + // [102] (word*~) main::$74 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __44 clc adc #balls+2 sta.z __74+1 - // [107] (word~) main::$32 ← *((word*~) main::$74) >> (byte) 8 -- vwuz1=_deref_pwuz1_ror_8 + // [103] (word~) main::$32 ← *((word*~) main::$74) >> (byte) 8 -- vwuz1=_deref_pwuz1_ror_8 ldy #1 lda (__32),y sta.z __32 dey sty.z __32+1 // SPRITE_BUFFER[sprite_idx].y = (unsigned char) (balls[i].y_position >> 8) - // [108] (byte~) main::$48 ← (byte) main::sprite_idx#3 << (byte) 2 -- vbuxx=vbuz1_rol_2 + // [104] (byte~) main::$48 ← (byte) main::sprite_idx#3 << (byte) 2 -- vbuxx=vbuz1_rol_2 lda.z sprite_idx asl asl tax - // [109] *((byte*)(const struct SpriteData*) SPRITE_BUFFER + (byte~) main::$48) ← (byte)(word~) main::$32 -- pbuc1_derefidx_vbuxx=_byte_vwuz1 + // [105] *((byte*)(const struct SpriteData*) SPRITE_BUFFER + (byte~) main::$48) ← (byte)(word~) main::$32 -- pbuc1_derefidx_vbuxx=_byte_vwuz1 lda.z __32 sta SPRITE_BUFFER,x // SPRITE_BUFFER[sprite_idx].tile = 0x0a - // [110] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_TILE + (byte~) main::$48) ← (byte) $a -- pbuc1_derefidx_vbuxx=vbuc2 + // [106] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_TILE + (byte~) main::$48) ← (byte) $a -- pbuc1_derefidx_vbuxx=vbuc2 lda #$a sta SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_TILE,x // SPRITE_BUFFER[sprite_idx].attributes = 3 - // [111] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_ATTRIBUTES + (byte~) main::$48) ← (byte) 3 -- pbuc1_derefidx_vbuxx=vbuc2 + // [107] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_ATTRIBUTES + (byte~) main::$48) ← (byte) 3 -- pbuc1_derefidx_vbuxx=vbuc2 lda #3 sta SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_ATTRIBUTES,x // balls[i].x_position >> 8 - // [112] (word*~) main::$75 ← (word*)(const struct $0*) balls + (word~) main::$50 -- pwuz1=pwuc1_plus_vwuz1 + // [108] (word*~) main::$75 ← (word*)(const struct $0*) balls + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz1 clc lda.z __75 adc #balls sta.z __75+1 - // [113] (word~) main::$33 ← *((word*~) main::$75) >> (byte) 8 -- vwuz1=_deref_pwuz1_ror_8 + // [109] (word~) main::$33 ← *((word*~) main::$75) >> (byte) 8 -- vwuz1=_deref_pwuz1_ror_8 ldy #1 lda (__33),y sta.z __33 dey sty.z __33+1 // SPRITE_BUFFER[sprite_idx].x = (unsigned char) (balls[i].x_position >> 8) - // [114] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X + (byte~) main::$48) ← (byte)(word~) main::$33 -- pbuc1_derefidx_vbuxx=_byte_vwuz1 + // [110] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X + (byte~) main::$48) ← (byte)(word~) main::$33 -- pbuc1_derefidx_vbuxx=_byte_vwuz1 sta SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_X,x // sprite_idx++; - // [115] (byte) main::sprite_idx#2 ← ++ (byte) main::sprite_idx#3 -- vbuz1=_inc_vbuz1 + // [111] (byte) main::sprite_idx#2 ← ++ (byte) main::sprite_idx#3 -- vbuz1=_inc_vbuz1 inc.z sprite_idx // for (i = 0; i < active_balls; i++) - // [116] (word) main::i#4 ← ++ (word) main::i#10 -- vwuz1=_inc_vwuz1 + // [112] (word) main::i#4 ← ++ (word) main::i#10 -- vwuz1=_inc_vwuz1 inc.z i_1 bne !+ inc.z i_1+1 @@ -6962,23 +6754,23 @@ main: { jmp __b6 // main::@25 __b25: - // [117] (byte) main::timer#21 ← (byte) main::timer#1 -- vbuz1=vbuxx + // [113] (byte) main::timer#21 ← (byte) main::timer#1 -- vbuz1=vbuxx stx.z timer jmp __b5 - // [118] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // [114] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 __b2: // rand() - // [119] call rand - // [157] phi from main::@2 to rand [phi:main::@2->rand] - // [157] phi (word) rand_state#10 = (word) rand_state#17 [phi:main::@2->rand#0] -- register_copy + // [115] call rand + // [152] phi from main::@2 to rand [phi:main::@2->rand] + // [152] phi (word) rand_state#10 = (word) rand_state#17 [phi:main::@2->rand#0] -- register_copy jsr rand // rand() - // [120] (word) rand::return#2 ← (word) rand::return#0 + // [116] (word) rand::return#2 ← (word) rand::return#0 // main::@22 - // [121] (word~) main::$9 ← (word) rand::return#2 + // [117] (word~) main::$9 ← (word) rand::return#2 // rand() & 0x3FF - // [122] (word~) main::$10 ← (word~) main::$9 & (word) $3ff -- vwuz1=vwuz1_band_vwuc1 + // [118] (word~) main::$10 ← (word~) main::$9 & (word) $3ff -- vwuz1=vwuz1_band_vwuc1 lda.z __10 and #<$3ff sta.z __10 @@ -6986,48 +6778,7 @@ main: { and #>$3ff sta.z __10+1 // balls[i].x_velocity = rand() & 0x3FF - // [123] (word~) main::$35 ← (word) main::i#14 << (byte) 3 -- vwuz1=vwuz2_rol_3 - lda.z i - asl - sta.z __35 - lda.z i+1 - rol - sta.z __35+1 - asl.z __35 - rol.z __35+1 - asl.z __35 - rol.z __35+1 - // [124] (word*~) main::$59 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$35 -- pwuz1=pwuc1_plus_vwuz1 - clc - lda.z __59 - adc #balls+4 - sta.z __59+1 - // [125] *((word*~) main::$59) ← (word~) main::$10 -- _deref_pwuz1=vwuz2 - ldy #0 - lda.z __10 - sta (__59),y - iny - lda.z __10+1 - sta (__59),y - // rand() - // [126] call rand - // [157] phi from main::@22 to rand [phi:main::@22->rand] - // [157] phi (word) rand_state#10 = (word) rand_state#11 [phi:main::@22->rand#0] -- register_copy - jsr rand - // rand() - // [127] (word) rand::return#3 ← (word) rand::return#0 - // main::@23 - // [128] (word~) main::$11 ← (word) rand::return#3 - // rand() & 0x0FF - // [129] (byte~) main::$12 ← (word~) main::$11 & (byte) $ff -- vbuxx=vwuz1_band_vbuc1 - lda #$ff - and.z __11 - tax - // balls[i].y_velocity = rand() & 0x0FF - // [130] (word~) main::$36 ← (word) main::i#14 << (byte) 3 -- vwuz1=vwuz2_rol_3 + // [119] (word~) main::$36 ← (word) main::i#14 << (byte) 3 -- vwuz1=vwuz2_rol_3 lda.z i asl sta.z __36 @@ -7038,7 +6789,37 @@ main: { rol.z __36+1 asl.z __36 rol.z __36+1 - // [131] (word*~) main::$60 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$36 -- pwuz1=pwuc1_plus_vwuz1 + // [120] (word*~) main::$59 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$36 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __36 + clc + adc #balls+4 + sta.z __59+1 + // [121] *((word*~) main::$59) ← (word~) main::$10 -- _deref_pwuz1=vwuz2 + ldy #0 + lda.z __10 + sta (__59),y + iny + lda.z __10+1 + sta (__59),y + // rand() + // [122] call rand + // [152] phi from main::@22 to rand [phi:main::@22->rand] + // [152] phi (word) rand_state#10 = (word) rand_state#11 [phi:main::@22->rand#0] -- register_copy + jsr rand + // rand() + // [123] (word) rand::return#3 ← (word) rand::return#0 + // main::@23 + // [124] (word~) main::$11 ← (word) rand::return#3 + // rand() & 0x0FF + // [125] (byte~) main::$12 ← (word~) main::$11 & (byte) $ff -- vbuxx=vwuz1_band_vbuc1 + lda #$ff + and.z __11 + tax + // balls[i].y_velocity = rand() & 0x0FF + // [126] (word*~) main::$60 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$36 -- pwuz1=pwuc1_plus_vwuz1 clc lda.z __60 adc #balls+6 sta.z __60+1 - // [132] *((word*~) main::$60) ← (byte~) main::$12 -- _deref_pwuz1=vbuxx + // [127] *((word*~) main::$60) ← (byte~) main::$12 -- _deref_pwuz1=vbuxx txa ldy #0 sta (__60),y @@ -7054,7 +6835,7 @@ main: { iny sta (__60),y // for (i = 0; i < MAX_BALLS; i++) - // [133] (word) main::i#2 ← ++ (word) main::i#14 -- vwuz1=_inc_vwuz1 + // [128] (word) main::i#2 ← ++ (word) main::i#14 -- vwuz1=_inc_vwuz1 inc.z i bne !+ inc.z i+1 @@ -7077,29 +6858,29 @@ ppuDataTransfer: { .label cpuData = $11 // ppuDataTransfer::ppuDataPrepare1 // >ppuData - // [135] (byte~) ppuDataTransfer::ppuDataPrepare1_$0 ← > (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 -- vbuaa=_hi_pvoz1 + // [130] (byte~) ppuDataTransfer::ppuDataPrepare1_$0 ← > (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 -- vbuaa=_hi_pvoz1 lda.z ppuDataPrepare1_ppuData+1 // PPU->PPUADDR = >ppuData - // [136] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataTransfer::ppuDataPrepare1_$0 -- _deref_pbuc1=vbuaa + // [131] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataTransfer::ppuDataPrepare1_$0 -- _deref_pbuc1=vbuaa sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUADDR // PPUADDR = ppuDataTransfer::@1] - // [140] phi (byte*) ppuDataTransfer::cpuSrc#2 = (byte*) ppuDataTransfer::cpuSrc#6 [phi:ppuDataTransfer::@3->ppuDataTransfer::@1#0] -- register_copy - // [140] phi (word) ppuDataTransfer::i#2 = (word) 0 [phi:ppuDataTransfer::@3->ppuDataTransfer::@1#1] -- vwuz1=vwuc1 + // [134] (byte*) ppuDataTransfer::cpuSrc#6 ← (byte*)(nomodify void*) ppuDataTransfer::cpuData#2 + // [135] phi from ppuDataTransfer::@3 to ppuDataTransfer::@1 [phi:ppuDataTransfer::@3->ppuDataTransfer::@1] + // [135] phi (byte*) ppuDataTransfer::cpuSrc#2 = (byte*) ppuDataTransfer::cpuSrc#6 [phi:ppuDataTransfer::@3->ppuDataTransfer::@1#0] -- register_copy + // [135] phi (word) ppuDataTransfer::i#2 = (word) 0 [phi:ppuDataTransfer::@3->ppuDataTransfer::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z i sta.z i+1 // ppuDataTransfer::@1 __b1: // for(unsigned int i=0;iPPUDATA = val - // [144] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) ppuDataTransfer::ppuDataPut1_val#0 -- _deref_pbuc1=vbuaa + // [139] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) ppuDataTransfer::ppuDataPut1_val#0 -- _deref_pbuc1=vbuaa sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUDATA // ppuDataTransfer::@4 // ppuDataPut(*cpuSrc++); - // [145] (byte*) ppuDataTransfer::cpuSrc#1 ← ++ (byte*) ppuDataTransfer::cpuSrc#2 -- pbuz1=_inc_pbuz1 + // [140] (byte*) ppuDataTransfer::cpuSrc#1 ← ++ (byte*) ppuDataTransfer::cpuSrc#2 -- pbuz1=_inc_pbuz1 inc.z cpuSrc bne !+ inc.z cpuSrc+1 !: // for(unsigned int i=0;ippuDataTransfer::@1] - // [140] phi (byte*) ppuDataTransfer::cpuSrc#2 = (byte*) ppuDataTransfer::cpuSrc#1 [phi:ppuDataTransfer::@4->ppuDataTransfer::@1#0] -- register_copy - // [140] phi (word) ppuDataTransfer::i#2 = (word) ppuDataTransfer::i#1 [phi:ppuDataTransfer::@4->ppuDataTransfer::@1#1] -- register_copy + // [135] phi from ppuDataTransfer::@4 to ppuDataTransfer::@1 [phi:ppuDataTransfer::@4->ppuDataTransfer::@1] + // [135] phi (byte*) ppuDataTransfer::cpuSrc#2 = (byte*) ppuDataTransfer::cpuSrc#1 [phi:ppuDataTransfer::@4->ppuDataTransfer::@1#0] -- register_copy + // [135] phi (word) ppuDataTransfer::i#2 = (word) ppuDataTransfer::i#1 [phi:ppuDataTransfer::@4->ppuDataTransfer::@1#1] -- register_copy jmp __b1 } // ppuDataFill @@ -7149,19 +6930,19 @@ ppuDataFill: { .label size = $11 // ppuDataFill::ppuDataPrepare1 // >ppuData - // [148] (byte~) ppuDataFill::ppuDataPrepare1_$0 ← > (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 -- vbuaa=_hi_pvoz1 + // [143] (byte~) ppuDataFill::ppuDataPrepare1_$0 ← > (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 -- vbuaa=_hi_pvoz1 lda.z ppuDataPrepare1_ppuData+1 // PPU->PPUADDR = >ppuData - // [149] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataFill::ppuDataPrepare1_$0 -- _deref_pbuc1=vbuaa + // [144] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataFill::ppuDataPrepare1_$0 -- _deref_pbuc1=vbuaa sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUADDR // PPUADDR = ppuDataFill::@1] - // [152] phi (word) ppuDataFill::i#2 = (word) 0 [phi:ppuDataFill::ppuDataPrepare1->ppuDataFill::@1#0] -- vwuz1=vwuc1 + // [147] phi from ppuDataFill::ppuDataPrepare1 to ppuDataFill::@1 [phi:ppuDataFill::ppuDataPrepare1->ppuDataFill::@1] + // [147] phi (word) ppuDataFill::i#2 = (word) 0 [phi:ppuDataFill::ppuDataPrepare1->ppuDataFill::@1#0] -- vwuz1=vwuc1 lda #<0 sta.z i sta.z i+1 @@ -7169,7 +6950,7 @@ ppuDataFill: { // ppuDataFill::@1 __b1: // for(unsigned int i=0;iPPUDATA = val - // [155] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [150] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) 0 -- _deref_pbuc1=vbuc2 lda #0 sta PPU+OFFSET_STRUCT_RICOH_2C02_PPUDATA // ppuDataFill::@2 // for(unsigned int i=0;ippuDataFill::@1] - // [152] phi (word) ppuDataFill::i#2 = (word) ppuDataFill::i#1 [phi:ppuDataFill::@2->ppuDataFill::@1#0] -- register_copy + // [147] phi from ppuDataFill::@2 to ppuDataFill::@1 [phi:ppuDataFill::@2->ppuDataFill::@1] + // [147] phi (word) ppuDataFill::i#2 = (word) ppuDataFill::i#1 [phi:ppuDataFill::@2->ppuDataFill::@1#0] -- register_copy jmp __b1 } // rand @@ -7210,7 +6991,7 @@ rand: { .label __2 = $40 .label return = $36 // rand_state << 7 - // [158] (word~) rand::$0 ← (word) rand_state#10 << (byte) 7 -- vwuz1=vwuz2_rol_7 + // [153] (word~) rand::$0 ← (word) rand_state#10 << (byte) 7 -- vwuz1=vwuz2_rol_7 lda.z rand_state+1 lsr lda.z rand_state @@ -7220,7 +7001,7 @@ rand: { ror sta.z __0 // rand_state ^= rand_state << 7 - // [159] (word) rand_state#0 ← (word) rand_state#10 ^ (word~) rand::$0 -- vwuz1=vwuz1_bxor_vwuz2 + // [154] (word) rand_state#0 ← (word) rand_state#10 ^ (word~) rand::$0 -- vwuz1=vwuz1_bxor_vwuz2 lda.z rand_state eor.z __0 sta.z rand_state @@ -7228,13 +7009,13 @@ rand: { eor.z __0+1 sta.z rand_state+1 // rand_state >> 9 - // [160] (word~) rand::$1 ← (word) rand_state#0 >> (byte) 9 -- vwuz1=vwuz2_ror_9 + // [155] (word~) rand::$1 ← (word) rand_state#0 >> (byte) 9 -- vwuz1=vwuz2_ror_9 lsr sta.z __1 lda #0 sta.z __1+1 // rand_state ^= rand_state >> 9 - // [161] (word) rand_state#1 ← (word) rand_state#0 ^ (word~) rand::$1 -- vwuz1=vwuz1_bxor_vwuz2 + // [156] (word) rand_state#1 ← (word) rand_state#0 ^ (word~) rand::$1 -- vwuz1=vwuz1_bxor_vwuz2 lda.z rand_state eor.z __1 sta.z rand_state @@ -7242,13 +7023,13 @@ rand: { eor.z __1+1 sta.z rand_state+1 // rand_state << 8 - // [162] (word~) rand::$2 ← (word) rand_state#1 << (byte) 8 -- vwuz1=vwuz2_rol_8 + // [157] (word~) rand::$2 ← (word) rand_state#1 << (byte) 8 -- vwuz1=vwuz2_rol_8 lda.z rand_state sta.z __2+1 lda #0 sta.z __2 // rand_state ^= rand_state << 8 - // [163] (word) rand_state#11 ← (word) rand_state#1 ^ (word~) rand::$2 -- vwuz1=vwuz1_bxor_vwuz2 + // [158] (word) rand_state#11 ← (word) rand_state#1 ^ (word~) rand::$2 -- vwuz1=vwuz1_bxor_vwuz2 lda.z rand_state eor.z __2 sta.z rand_state @@ -7256,14 +7037,14 @@ rand: { eor.z __2+1 sta.z rand_state+1 // return rand_state; - // [164] (word) rand::return#0 ← (word) rand_state#11 -- vwuz1=vwuz2 + // [159] (word) rand::return#0 ← (word) rand_state#11 -- vwuz1=vwuz2 lda.z rand_state sta.z return lda.z rand_state+1 sta.z return+1 // rand::@return // } - // [165] return + // [160] return rts } // File Data diff --git a/src/test/ref/complex/nes-balls/kickballs-3.sym b/src/test/ref/complex/nes-balls/kickballs-3.sym index b295d8373..ebecaff25 100644 --- a/src/test/ref/complex/nes-balls/kickballs-3.sym +++ b/src/test/ref/complex/nes-balls/kickballs-3.sym @@ -75,28 +75,23 @@ (signed word()) main() (word~) main::$10 zp[2]:54 67.33333333333333 (word~) main::$11 zp[2]:54 202.0 -(byte~) main::$12 reg byte x 67.33333333333333 +(byte~) main::$12 reg byte x 101.0 (byte~) main::$14 reg byte a 202.0 -(word~) main::$20 zp[2]:15 2002.0 +(word~) main::$20 zp[2]:33 2002.0 (word~) main::$23 zp[2]:39 500.5 -(word~) main::$25 zp[2]:37 667.3333333333334 -(byte~) main::$26 zp[1]:41 1001.0 +(word~) main::$25 zp[2]:41 667.3333333333334 +(byte~) main::$26 zp[1]:43 1001.0 (byte~) main::$30 reg byte a 1001.0 (word~) main::$31 zp[2]:48 1001.0 (word~) main::$32 zp[2]:52 500.5 -(word~) main::$33 zp[2]:50 1001.0 -(word~) main::$35 zp[2]:56 202.0 -(word~) main::$36 zp[2]:58 202.0 +(word~) main::$33 zp[2]:15 1001.0 +(word~) main::$36 zp[2]:56 43.285714285714285 (byte~) main::$38 reg byte x 151.5 -(word~) main::$40 zp[2]:15 834.1666666666666 -(word~) main::$44 zp[2]:37 1001.0 -(word~) main::$45 zp[2]:33 1501.5 +(word~) main::$44 zp[2]:15 487.6666666666668 (byte~) main::$48 reg byte x 834.1666666666667 -(word~) main::$50 zp[2]:50 429.0 -(word~) main::$53 zp[2]:42 572.0 (word~) main::$56 zp[2]:48 2002.0 -(word*~) main::$59 zp[2]:56 202.0 -(word*~) main::$60 zp[2]:58 202.0 +(word*~) main::$59 zp[2]:58 202.0 +(word*~) main::$60 zp[2]:56 202.0 (word*~) main::$61 zp[2]:17 667.3333333333334 (word*~) main::$62 zp[2]:19 1001.0 (word*~) main::$63 zp[2]:21 2002.0 @@ -105,16 +100,16 @@ (word*~) main::$66 zp[2]:27 667.3333333333334 (word*~) main::$67 zp[2]:29 1001.0 (word*~) main::$68 zp[2]:31 2002.0 -(word*~) main::$69 zp[2]:15 2002.0 +(word*~) main::$69 zp[2]:33 2002.0 (word*~) main::$70 zp[2]:39 2002.0 -(word*~) main::$71 zp[2]:37 2002.0 +(word*~) main::$71 zp[2]:41 2002.0 (word*~) main::$72 zp[2]:35 1001.0 -(word*~) main::$73 zp[2]:33 2002.0 +(word*~) main::$73 zp[2]:37 2002.0 (word*~) main::$74 zp[2]:52 2002.0 -(word*~) main::$75 zp[2]:50 2002.0 +(word*~) main::$75 zp[2]:15 2002.0 (word*~) main::$76 zp[2]:44 1001.0 (word*~) main::$77 zp[2]:46 2002.0 -(word*~) main::$78 zp[2]:42 2002.0 +(word*~) main::$78 zp[2]:50 2002.0 (word~) main::$9 zp[2]:54 202.0 (label) main::@1 (label) main::@10 @@ -144,13 +139,13 @@ (byte) main::active_balls (byte) main::active_balls#1 active_balls zp[1]:5 75.75 (byte) main::active_balls#2 active_balls zp[1]:5 56.11111111111111 -(byte) main::active_balls#8 active_balls zp[1]:5 25.545454545454547 +(byte) main::active_balls#8 active_balls zp[1]:5 27.54901960784314 (label) main::enableVideoOutput1 (byte) main::h_bar -(byte) main::h_bar#1 h_bar zp[1]:14 51.69354838709677 +(byte) main::h_bar#1 h_bar zp[1]:14 55.258620689655174 (word) main::i -(word) main::i#10 i_1 zp[2]:7 163.42857142857142 -(word) main::i#14 i zp[2]:2 29.705882352941178 +(word) main::i#10 i_1 zp[2]:7 88.97777777777777 +(word) main::i#14 i zp[2]:2 25.25 (word) main::i#2 i zp[2]:2 202.0 (word) main::i#4 i_1 zp[2]:7 2002.0 (label) main::initNES1 @@ -171,14 +166,14 @@ (signed word) main::return (byte) main::sprite_idx (byte) main::sprite_idx#2 sprite_idx zp[1]:9 1001.0 -(byte) main::sprite_idx#3 sprite_idx zp[1]:9 62.5625 +(byte) main::sprite_idx#3 sprite_idx zp[1]:9 68.25 (byte) main::timer (byte) main::timer#1 reg byte x 101.0 -(byte) main::timer#15 timer zp[1]:6 5.50909090909091 +(byte) main::timer#15 timer zp[1]:6 5.9411764705882355 (byte) main::timer#21 timer zp[1]:6 202.0 (byte) main::timer#3 timer zp[1]:6 57.714285714285715 (byte) main::timer_2 -(byte) main::timer_2#1 timer_2 zp[1]:4 4.522388059701492 +(byte) main::timer_2#1 timer_2 zp[1]:4 4.80952380952381 (byte) main::timer_2#2 timer_2 zp[1]:4 202.0 (const to_nomodify byte*) palette[] = { (byte) $34, (byte) $24, (byte) $14, (byte) 4, (byte) $34, (byte) $24, (byte) $14, (byte) 4, (byte) $34, (byte) $24, (byte) $14, (byte) 4, (byte) $34, (byte) $24, (byte) $14, (byte) 4, (byte) $34, (byte) $24, (byte) $14, (byte) 4, (byte) $34, (byte) $24, (byte) $14, (byte) 4, (byte) $34, (byte) $24, (byte) $14, (byte) 4, (byte) $34, (byte) $24, (byte) $14, (byte) 4 } (void()) ppuDataFill((nomodify void*) ppuDataFill::ppuData , (byte) ppuDataFill::val , (word) ppuDataFill::size) @@ -247,7 +242,7 @@ (word) rand_state#0 rand_state zp[2]:10 1501.5 (word) rand_state#1 rand_state zp[2]:10 1501.5 (word) rand_state#10 rand_state zp[2]:10 1102.0 -(word) rand_state#11 rand_state zp[2]:10 122.44444444444446 +(word) rand_state#11 rand_state zp[2]:10 129.64705882352942 (word) rand_state#17 rand_state zp[2]:10 67.33333333333333 (volatile byte) scroll_y loadstore zp[1]:12 105.0 (const to_nomodify byte*) sine_table[(number) $100] = { (byte) $40, (byte) $42, (byte) $43, (byte) $45, (byte) $46, (byte) $48, (byte) $49, (byte) $4b, (byte) $4c, (byte) $4e, (byte) $50, (byte) $51, (byte) $53, (byte) $54, (byte) $56, (byte) $57, (byte) $58, (byte) $5a, (byte) $5b, (byte) $5d, (byte) $5e, (byte) $60, (byte) $61, (byte) $62, (byte) $64, (byte) $65, (byte) $66, (byte) $67, (byte) $69, (byte) $6a, (byte) $6b, (byte) $6c, (byte) $6d, (byte) $6e, (byte) $6f, (byte) $70, (byte) $71, (byte) $72, (byte) $73, (byte) $74, (byte) $75, (byte) $76, (byte) $77, (byte) $78, (byte) $78, (byte) $79, (byte) $7a, (byte) $7b, (byte) $7b, (byte) $7c, (byte) $7c, (byte) $7d, (byte) $7d, (byte) $7e, (byte) $7e, (byte) $7e, (byte) $7f, (byte) $7f, (byte) $7f, (byte) $80, (byte) $80, (byte) $80, (byte) $80, (byte) $80, (byte) $80, (byte) $80, (byte) $80, (byte) $80, (byte) $80, (byte) $80, (byte) $7f, (byte) $7f, (byte) $7f, (byte) $7e, (byte) $7e, (byte) $7e, (byte) $7d, (byte) $7d, (byte) $7c, (byte) $7c, (byte) $7b, (byte) $7b, (byte) $7a, (byte) $79, (byte) $78, (byte) $78, (byte) $77, (byte) $76, (byte) $75, (byte) $74, (byte) $73, (byte) $72, (byte) $71, (byte) $70, (byte) $6f, (byte) $6e, (byte) $6d, (byte) $6c, (byte) $6b, (byte) $6a, (byte) $69, (byte) $67, (byte) $66, (byte) $65, (byte) $64, (byte) $62, (byte) $61, (byte) $60, (byte) $5e, (byte) $5d, (byte) $5b, (byte) $5a, (byte) $58, (byte) $57, (byte) $56, (byte) $54, (byte) $53, (byte) $51, (byte) $50, (byte) $4e, (byte) $4c, (byte) $4b, (byte) $49, (byte) $48, (byte) $46, (byte) $45, (byte) $43, (byte) $42, (byte) $40, (byte) $3e, (byte) $3d, (byte) $3b, (byte) $3a, (byte) $38, (byte) $37, (byte) $35, (byte) $34, (byte) $32, (byte) $30, (byte) $2f, (byte) $2d, (byte) $2c, (byte) $2a, (byte) $29, (byte) $28, (byte) $26, (byte) $25, (byte) $23, (byte) $22, (byte) $20, (byte) $1f, (byte) $1e, (byte) $1c, (byte) $1b, (byte) $1a, (byte) $19, (byte) $17, (byte) $16, (byte) $15, (byte) $14, (byte) $13, (byte) $12, (byte) $11, (byte) $10, (byte) $f, (byte) $e, (byte) $d, (byte) $c, (byte) $b, (byte) $a, (byte) 9, (byte) 8, (byte) 8, (byte) 7, (byte) 6, (byte) 5, (byte) 5, (byte) 4, (byte) 4, (byte) 3, (byte) 3, (byte) 2, (byte) 2, (byte) 2, (byte) 1, (byte) 1, (byte) 1, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (byte) 1, (byte) 1, (byte) 2, (byte) 2, (byte) 2, (byte) 3, (byte) 3, (byte) 4, (byte) 4, (byte) 5, (byte) 5, (byte) 6, (byte) 7, (byte) 8, (byte) 8, (byte) 9, (byte) $a, (byte) $b, (byte) $c, (byte) $d, (byte) $e, (byte) $f, (byte) $10, (byte) $11, (byte) $12, (byte) $13, (byte) $14, (byte) $15, (byte) $16, (byte) $17, (byte) $19, (byte) $1a, (byte) $1b, (byte) $1c, (byte) $1e, (byte) $1f, (byte) $20, (byte) $22, (byte) $23, (byte) $25, (byte) $26, (byte) $28, (byte) $29, (byte) $2a, (byte) $2c, (byte) $2d, (byte) $2f, (byte) $30, (byte) $32, (byte) $34, (byte) $35, (byte) $37, (byte) $38, (byte) $3a, (byte) $3b, (byte) $3d, (byte) $3e } @@ -256,7 +251,7 @@ interrupt(HARDWARE_STACK)(void()) vblank() (label) vblank::@return (label) vblank::ppuSpriteBufferDmaTransfer1 (struct SpriteData*) vblank::ppuSpriteBufferDmaTransfer1_spriteBuffer -(volatile byte) vblank_hit loadstore zp[1]:13 8.65625 +(volatile byte) vblank_hit loadstore zp[1]:13 9.008130081300813 reg byte x [ main::initNES1_i#2 main::initNES1_i#1 ] zp[2]:2 [ main::i#14 main::i#2 ] @@ -274,7 +269,7 @@ zp[1]:14 [ main::h_bar#1 ] reg byte a [ main::$14 ] reg byte x [ main::timer#1 ] reg byte x [ main::$38 ] -zp[2]:15 [ main::$40 main::$69 main::$20 ppuDataFill::ppuDataPrepare1_ppuData#0 ppuDataTransfer::ppuDataPrepare1_ppuData#0 ] +zp[2]:15 [ main::$44 main::$75 main::$33 ppuDataFill::ppuDataPrepare1_ppuData#0 ppuDataTransfer::ppuDataPrepare1_ppuData#0 ] zp[2]:17 [ main::$61 ppuDataFill::size#3 ppuDataTransfer::cpuData#2 ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#6 ppuDataTransfer::cpuSrc#1 ] zp[2]:19 [ main::$62 ppuDataFill::i#2 ppuDataFill::i#1 ppuDataTransfer::i#2 ppuDataTransfer::i#1 ] zp[2]:21 [ main::$63 ] @@ -283,23 +278,23 @@ zp[2]:25 [ main::$65 ] zp[2]:27 [ main::$66 ] zp[2]:29 [ main::$67 ] zp[2]:31 [ main::$68 ] -zp[2]:33 [ main::$45 main::$73 ] +zp[2]:33 [ main::$69 main::$20 ] zp[2]:35 [ main::$72 ] -zp[2]:37 [ main::$44 main::$71 main::$25 ] +zp[2]:37 [ main::$73 ] zp[2]:39 [ main::$70 main::$23 ] -zp[1]:41 [ main::$26 ] -zp[2]:42 [ main::$53 main::$78 ] +zp[2]:41 [ main::$71 main::$25 ] +zp[1]:43 [ main::$26 ] zp[2]:44 [ main::$76 ] zp[2]:46 [ main::$77 ] reg byte a [ main::$30 ] zp[2]:48 [ main::$56 main::$31 ] -zp[2]:50 [ main::$50 main::$75 main::$33 ] +zp[2]:50 [ main::$78 ] zp[2]:52 [ main::$74 main::$32 ] reg byte x [ main::$48 ] zp[2]:54 [ rand::return#2 main::$9 rand::return#0 main::$10 rand::return#3 main::$11 ] -zp[2]:56 [ main::$35 main::$59 ] +zp[2]:56 [ main::$36 main::$60 ] +zp[2]:58 [ main::$59 ] reg byte x [ main::$12 ] -zp[2]:58 [ main::$36 main::$60 ] reg byte a [ ppuDataTransfer::ppuDataPrepare1_$0 ] reg byte a [ ppuDataTransfer::ppuDataPrepare1_$1 ] reg byte a [ ppuDataTransfer::ppuDataPut1_val#0 ] diff --git a/src/test/ref/problem-bool-compare.asm b/src/test/ref/problem-bool-compare.asm new file mode 100644 index 000000000..9a8a0b39a --- /dev/null +++ b/src/test/ref/problem-bool-compare.asm @@ -0,0 +1,13 @@ +// Test boolean comparison false!=false +// https://atariage.com/forums/topic/311788-kickc-optimizing-c-compiler-now-supports-atari-8bit-xlxe/?tab=comments#comment-4644101 +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" +main: { + .label SCREEN = $400 + // SCREEN[1] = '*' + lda #'*' + sta SCREEN+1 + // } + rts +} diff --git a/src/test/ref/problem-bool-compare.cfg b/src/test/ref/problem-bool-compare.cfg new file mode 100644 index 000000000..ccf3b30b2 --- /dev/null +++ b/src/test/ref/problem-bool-compare.cfg @@ -0,0 +1,11 @@ + +(void()) main() +main: scope:[main] from + [0] phi() + to:main::@1 +main::@1: scope:[main] from main + [1] *((const byte*) main::SCREEN+(byte) 1) ← (byte) '*' + to:main::@return +main::@return: scope:[main] from main::@1 + [2] return + to:@return diff --git a/src/test/ref/problem-bool-compare.log b/src/test/ref/problem-bool-compare.log new file mode 100644 index 000000000..d19e8a984 --- /dev/null +++ b/src/test/ref/problem-bool-compare.log @@ -0,0 +1,207 @@ + +CONTROL FLOW GRAPH SSA + +(void()) main() +main: scope:[main] from __start + (bool~) main::$0 ← ! false!=false + if((bool~) main::$0) goto main::@1 + to:main::@2 +main::@1: scope:[main] from main main::@2 + (bool~) main::$1 ← ! true!=false + if((bool~) main::$1) goto main::@return + to:main::@3 +main::@2: scope:[main] from main + *((const byte*) main::SCREEN + (number) 0) ← (byte) '*' + to:main::@1 +main::@3: scope:[main] from main::@1 + *((const byte*) main::SCREEN + (number) 1) ← (byte) '*' + to:main::@return +main::@return: scope:[main] from main::@1 main::@3 + return + to:@return + +(void()) __start() +__start: scope:[__start] from + call main + to:__start::@1 +__start::@1: scope:[__start] from __start + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + return + to:@return + +SYMBOL TABLE SSA +(void()) __start() +(label) __start::@1 +(label) __start::@return +(void()) main() +(bool~) main::$0 +(bool~) main::$1 +(label) main::@1 +(label) main::@2 +(label) main::@3 +(label) main::@return +(const byte*) main::SCREEN = (byte*)(number) $400 + +Adding number conversion cast (unumber) 0 in *((const byte*) main::SCREEN + (number) 0) ← (byte) '*' +Adding number conversion cast (unumber) 1 in *((const byte*) main::SCREEN + (number) 1) ← (byte) '*' +Successful SSA optimization PassNAddNumberTypeConversions +Simplifying constant pointer cast (byte*) 1024 +Simplifying constant integer cast 0 +Simplifying constant integer cast 1 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 1 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Rewriting ! if()-condition to reversed if() [0] (bool~) main::$0 ← ! false!=false +Rewriting ! if()-condition to reversed if() [2] (bool~) main::$1 ← ! true!=false +Successful SSA optimization Pass2ConditionalAndOrRewriting +if() condition always false - eliminating [1] if(false!=false) goto main::@2 +if() condition always true - replacing block destination [3] if(true!=false) goto main::@3 +Successful SSA optimization Pass2ConstantIfs +Simplifying expression containing zero main::SCREEN in [4] *((const byte*) main::SCREEN + (byte) 0) ← (byte) '*' +Successful SSA optimization PassNSimplifyExpressionWithZero +Removing unused block main::@2 +Successful SSA optimization Pass2EliminateUnusedBlocks +Removing unused procedure __start +Removing unused procedure block __start +Removing unused procedure block __start::@1 +Removing unused procedure block __start::@return +Successful SSA optimization PassNEliminateEmptyStart +Consolidated array index constant in *(main::SCREEN+1) +Successful SSA optimization Pass2ConstantAdditionElimination +Adding NOP phi() at start of main +Adding NOP phi() at start of main::@1 +CALL GRAPH + +Created 0 initial phi equivalence classes +Coalesced down to 0 phi equivalence classes +Culled Empty Block (label) main::@1 +Renumbering block main::@3 to main::@1 +Adding NOP phi() at start of main + +FINAL CONTROL FLOW GRAPH + +(void()) main() +main: scope:[main] from + [0] phi() + to:main::@1 +main::@1: scope:[main] from main + [1] *((const byte*) main::SCREEN+(byte) 1) ← (byte) '*' + to:main::@return +main::@return: scope:[main] from main::@1 + [2] return + to:@return + + +VARIABLE REGISTER WEIGHTS +(void()) main() + +Initial phi equivalence classes +Complete equivalence classes + +INITIAL ASM +Target platform is c64basic / MOS6502X + // File Comments +// Test boolean comparison false!=false +// https://atariage.com/forums/topic/311788-kickc-optimizing-c-compiler-now-supports-atari-8bit-xlxe/?tab=comments#comment-4644101 + // Upstart +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" + // Global Constants & labels + // main +main: { + .label SCREEN = $400 + jmp __b1 + // main::@1 + __b1: + // [1] *((const byte*) main::SCREEN+(byte) 1) ← (byte) '*' -- _deref_pbuc1=vbuc2 + lda #'*' + sta SCREEN+1 + jmp __breturn + // main::@return + __breturn: + // [2] return + rts +} + // File Data + +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [1] *((const byte*) main::SCREEN+(byte) 1) ← (byte) '*' [ ] ( [ ] { } ) always clobbers reg byte a + +REGISTER UPLIFT SCOPES +Uplift Scope [main] +Uplift Scope [] + +Uplifting [main] best 45 combination +Uplifting [] best 45 combination + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Test boolean comparison false!=false +// https://atariage.com/forums/topic/311788-kickc-optimizing-c-compiler-now-supports-atari-8bit-xlxe/?tab=comments#comment-4644101 + // Upstart +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" + // Global Constants & labels + // main +main: { + .label SCREEN = $400 + jmp __b1 + // main::@1 + __b1: + // [1] *((const byte*) main::SCREEN+(byte) 1) ← (byte) '*' -- _deref_pbuc1=vbuc2 + lda #'*' + sta SCREEN+1 + jmp __breturn + // main::@return + __breturn: + // [2] return + rts +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction __b1: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +(void()) main() +(label) main::@1 +(label) main::@return +(const byte*) main::SCREEN = (byte*) 1024 + + + +FINAL ASSEMBLER +Score: 12 + + // File Comments +// Test boolean comparison false!=false +// https://atariage.com/forums/topic/311788-kickc-optimizing-c-compiler-now-supports-atari-8bit-xlxe/?tab=comments#comment-4644101 + // Upstart +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" + // Global Constants & labels + // main +main: { + .label SCREEN = $400 + // main::@1 + // SCREEN[1] = '*' + // [1] *((const byte*) main::SCREEN+(byte) 1) ← (byte) '*' -- _deref_pbuc1=vbuc2 + lda #'*' + sta SCREEN+1 + // main::@return + // } + // [2] return + rts +} + // File Data + diff --git a/src/test/ref/problem-bool-compare.sym b/src/test/ref/problem-bool-compare.sym new file mode 100644 index 000000000..04e6b120e --- /dev/null +++ b/src/test/ref/problem-bool-compare.sym @@ -0,0 +1,5 @@ +(void()) main() +(label) main::@1 +(label) main::@return +(const byte*) main::SCREEN = (byte*) 1024 +