diff --git a/src/test/ref/complex/nes-balls/kickballs-3.asm b/src/test/ref/complex/nes-balls/kickballs-3.asm index f27cb1e04..574a22177 100644 --- a/src/test/ref/complex/nes-balls/kickballs-3.asm +++ b/src/test/ref/complex/nes-balls/kickballs-3.asm @@ -1,13 +1,3 @@ -//#pragma emulator("java -jar /Applications/Nintaco_bin_2020-05-01/Nintaco.jar") -// Nintendo Entertainment System (NES -// https://en.wikipedia.org/wiki/Nintendo_Entertainment_System_(Model_NES-101) -// https://github.com/gregkrsak/first_nes -// Ricoh 2C02 - NES Picture Processing Unit (PPU) -// Ricoh RP2C02 (NTSC version) / RP2C07 (PAL version), -// https://en.wikipedia.org/wiki/Picture_Processing_Unit -// https://wiki.nesdev.com/w/index.php/PPU_registers -// http://nesdev.com/2C02%20technical%20reference.TXT -// Based on: https://github.com/gregkrsak/first_nes written by Greg M. Krsak, 2018. // Nintendo Entertainment System (NES) ROM (Mapper 0 NROM, Vertical Mirroring) // https://sadistech.com/nesromtool/romdoc.html // https://forums.nesdev.com/viewtopic.php?f=2&t=9896 @@ -76,10 +66,10 @@ .label PPU = $2000 // NES CPU and audion processing unit (APU) .label APU = $4000 - .label scroll_y = $c - .label vblank_hit = $d + .label scroll_y = $d + .label vblank_hit = $e // The random state variable - .label rand_state = $a + .label rand_state = $b .segment Code __start: { // scroll_y = 0 @@ -121,46 +111,49 @@ vblank: { rti } main: { - .label __9 = $36 - .label __10 = $36 - .label __11 = $36 - .label __20 = $21 - .label __23 = $27 - .label __25 = $29 - .label __26 = $2b - .label __31 = $30 - .label __32 = $34 - .label __33 = $f - .label __36 = $38 - .label __44 = $f - .label __56 = $30 + .label __9 = $3b + .label __10 = $3b + .label __11 = $3b + .label __20 = $26 + .label __23 = $2c + .label __25 = $2e + .label __26 = $30 + .label __31 = $35 + .label __32 = $39 + .label __33 = $14 + .label __36 = $3d + .label __38 = $10 + .label __44 = $14 + .label __56 = $35 .label i = 2 .label timer_2 = 4 - .label h_bar = $e + .label h_bar = $f .label active_balls = 5 - .label sprite_idx = 9 - .label i_1 = 7 - .label timer = 6 - .label __59 = $3a - .label __60 = $38 - .label __61 = $11 - .label __62 = $13 - .label __63 = $15 - .label __64 = $17 - .label __65 = $19 - .label __66 = $1b - .label __67 = $1d - .label __68 = $1f - .label __69 = $21 - .label __70 = $27 - .label __71 = $29 - .label __72 = $23 - .label __73 = $25 - .label __74 = $34 - .label __75 = $f - .label __76 = $2c - .label __77 = $2e - .label __78 = $32 + .label sprite_idx = $a + .label i_1 = 8 + .label timer = 7 + .label __59 = $3f + .label __60 = $3d + .label __61 = $12 + .label __62 = $10 + .label __63 = $16 + .label __64 = $18 + .label __65 = $1a + .label __66 = $1c + .label __67 = $1e + .label __68 = $20 + .label __69 = $22 + .label __70 = $24 + .label __71 = $26 + .label __72 = $2c + .label __73 = $2e + .label __74 = $28 + .label __75 = $2a + .label __76 = $39 + .label __77 = $14 + .label __78 = $31 + .label __79 = $33 + .label __80 = $37 // asm cld ldx #$ff @@ -287,6 +280,7 @@ main: { lda #0 sta.z timer sta.z active_balls + sta.z active_balls+1 sta.z timer_2 __b4: // timer_2++; @@ -303,9 +297,12 @@ main: { // scroll_y = h_bar ^ 0xFF sta.z scroll_y // if (active_balls < MAX_BALLS) + lda.z active_balls+1 + bne __b5 lda.z active_balls cmp #$32 bcs __b5 + !: // if (timer++ == RELEASE_TIMER) ldx.z timer inx @@ -316,18 +313,47 @@ main: { !__b25: // active_balls++; inc.z active_balls + bne !+ + inc.z active_balls+1 + !: // balls[active_balls].x_position = 0 lda.z active_balls asl - asl - asl - tax + sta.z __38 + lda.z active_balls+1 + rol + sta.z __38+1 + asl.z __38 + rol.z __38+1 + asl.z __38 + rol.z __38+1 + lda.z __38 + clc + adc #balls + sta.z __61+1 lda #0 - sta balls,x - sta balls+1,x + tay + sta (__61),y + tya + iny + sta (__61),y // balls[active_balls].y_position = 0 - sta balls+2,x - sta balls+2+1,x + clc + lda.z __62 + adc #balls+2 + sta.z __62+1 + lda #0 + tay + sta (__62),y + tya + iny + sta (__62),y sta.z timer __b5: lda #0 @@ -337,6 +363,8 @@ main: { __b6: // for (i = 0; i < active_balls; i++) lda.z i_1+1 + cmp.z active_balls+1 + bcc __b7 bne !+ lda.z i_1 cmp.z active_balls @@ -372,64 +400,40 @@ main: { lda.z __44 clc adc #balls - sta.z __61+1 - lda.z __44 - clc - adc #balls+4 - sta.z __62+1 - lda.z __44 - clc - adc #balls sta.z __63+1 - ldy #0 - lda (__61),y + lda.z __44 clc - adc (__62),y - sta (__63),y + adc #balls+4 + sta.z __64+1 + lda.z __44 + clc + adc #balls + sta.z __65+1 + ldy #0 + lda (__63),y + clc + adc (__64),y + sta (__65),y iny - lda (__61),y - adc (__62),y - sta (__63),y + lda (__63),y + adc (__64),y + sta (__65),y // balls[i].y_velocity += WEIGHT lda.z __44 clc adc #balls+6 - sta.z __64+1 - lda.z __44 - clc - adc #balls+6 - sta.z __65+1 - ldy #0 - lda (__64),y - clc - adc #<$10 - sta (__65),y - iny - lda (__64),y - adc #>$10 - sta (__65),y - // balls[i].y_position += (balls[i].y_velocity += WEIGHT) - lda.z __44 - clc - adc #balls+2 + adc #>balls+6 sta.z __66+1 lda.z __44 clc @@ -438,6 +442,16 @@ main: { lda.z __44+1 adc #>balls+6 sta.z __67+1 + ldy #0 + lda (__66),y + clc + adc #<$10 + sta (__67),y + iny + lda (__66),y + adc #>$10 + sta (__67),y + // balls[i].y_position += (balls[i].y_velocity += WEIGHT) lda.z __44 clc adc #balls+2 sta.z __68+1 - ldy #0 - lda (__66),y + lda.z __44 clc - adc (__67),y - sta (__68),y + adc #balls+6 + sta.z __69+1 + lda.z __44 + clc + adc #balls+2 + sta.z __70+1 + ldy #0 + lda (__68),y + clc + adc (__69),y + sta (__70),y iny - lda (__66),y - adc (__67),y - sta (__68),y + lda (__68),y + adc (__69),y + sta (__70),y // balls[i].x_position >> 8 lda.z __44 clc adc #balls - sta.z __69+1 + sta.z __71+1 ldy #1 lda (__20),y sta.z __20 @@ -478,34 +506,34 @@ main: { lda.z __44 clc adc #balls+4 - sta.z __72+1 + sta.z __74+1 lda.z __44 clc adc #balls+4 - sta.z __73+1 + sta.z __75+1 ldy #0 lda #<$ffff - eor (__72),y - sta (__73),y + eor (__74),y + sta (__75),y iny lda #>$ffff - eor (__72),y - sta (__73),y + eor (__74),y + sta (__75),y __b9: // balls[i].y_position >> 8 lda.z __44 clc adc #balls+2 - sta.z __70+1 + sta.z __72+1 ldy #1 lda (__23),y sta.z __23 @@ -514,10 +542,10 @@ main: { lda.z __44 clc adc #balls+2 - sta.z __71+1 + sta.z __73+1 ldy #1 lda (__25),y sta.z __25 @@ -544,25 +572,25 @@ main: { lda.z __44 clc adc #balls+6 - sta.z __76+1 + sta.z __78+1 lda.z __44 clc adc #balls+6 - sta.z __77+1 + sta.z __79+1 ldy #0 lda #<$ffff - eor (__76),y - sta (__77),y + eor (__78),y + sta (__79),y iny lda #>$ffff - eor (__76),y - sta (__77),y + eor (__78),y + sta (__79),y // h_bar - 2 lda.z h_bar sec @@ -579,25 +607,25 @@ main: { lda.z __44 clc adc #balls+2 - sta.z __78+1 + sta.z __80+1 ldy #0 lda.z __31 - sta (__78),y + sta (__80),y iny lda.z __31+1 - sta (__78),y + sta (__80),y __b10: // balls[i].y_position >> 8 lda.z __44 clc adc #balls+2 - sta.z __74+1 + sta.z __76+1 ldy #1 lda (__32),y sta.z __32 @@ -618,12 +646,12 @@ main: { sta SPRITE_BUFFER+OFFSET_STRUCT_SPRITEDATA_ATTRIBUTES,x // balls[i].x_position >> 8 clc - lda.z __75 + lda.z __77 adc #balls - sta.z __75+1 + sta.z __77+1 ldy #1 lda (__33),y sta.z __33 @@ -709,12 +737,12 @@ main: { // - ppuData : Pointer in the PPU memory // - cpuData : Pointer to the CPU memory (RAM of ROM) // - size : The number of bytes to transfer -// ppuDataTransfer(void* zp($11) cpuData) +// ppuDataTransfer(void* zp($12) cpuData) ppuDataTransfer: { - .label ppuDataPrepare1_ppuData = $f - .label cpuSrc = $11 - .label i = $13 - .label cpuData = $11 + .label ppuDataPrepare1_ppuData = $10 + .label cpuSrc = $12 + .label i = $14 + .label cpuData = $12 // >ppuData lda.z ppuDataPrepare1_ppuData+1 // PPU->PPUADDR = >ppuData @@ -757,11 +785,11 @@ ppuDataTransfer: { // Fill a number of bytes in the PPU memory // - ppuData : Pointer in the PPU memory // - size : The number of bytes to transfer -// ppuDataFill(word zp($11) size) +// ppuDataFill(word zp($12) size) ppuDataFill: { - .label ppuDataPrepare1_ppuData = $f - .label i = $13 - .label size = $11 + .label ppuDataPrepare1_ppuData = $10 + .label i = $14 + .label size = $12 // >ppuData lda.z ppuDataPrepare1_ppuData+1 // PPU->PPUADDR = >ppuData @@ -802,10 +830,10 @@ ppuDataFill: { // Information https://en.wikipedia.org/wiki/Xorshift // Source http://www.retroprogramming.com/2017/07/xorshift-pseudorandom-numbers-in-z80.html rand: { - .label __0 = $3c - .label __1 = $3e - .label __2 = $40 - .label return = $36 + .label __0 = $41 + .label __1 = $43 + .label __2 = $45 + .label return = $3b // rand_state << 7 lda.z rand_state+1 lsr diff --git a/src/test/ref/complex/nes-balls/kickballs-3.cfg b/src/test/ref/complex/nes-balls/kickballs-3.cfg index 009c822fc..562439954 100644 --- a/src/test/ref/complex/nes-balls/kickballs-3.cfg +++ b/src/test/ref/complex/nes-balls/kickballs-3.cfg @@ -109,7 +109,7 @@ main::@1: scope:[main] from main::@18 main::@23 to:main::@3 main::@3: scope:[main] from main::@1 main::@14 [50] (byte) main::timer#3 ← phi( main::@1/(byte) 0 main::@14/(byte) main::timer#15 ) - [50] (byte) main::active_balls#2 ← phi( main::@1/(byte) 0 main::@14/(byte) main::active_balls#8 ) + [50] (word) main::active_balls#2 ← phi( main::@1/(word) 0 main::@14/(word) main::active_balls#8 ) [50] (byte) main::timer_2#2 ← phi( main::@1/(byte) 0 main::@14/(byte) main::timer_2#1 ) to:main::@4 main::@4: scope:[main] from main::@3 @@ -117,187 +117,189 @@ main::@4: scope:[main] from main::@3 [52] (byte) main::h_bar#1 ← *((const to_nomodify byte*) sine_table + (byte) main::timer_2#1) + (byte) $60 [53] (byte~) main::$14 ← (byte) main::h_bar#1 ^ (byte) $ff [54] (volatile byte) scroll_y ← (byte~) main::$14 - [55] if((byte) main::active_balls#2>=(byte) $32) goto main::@5 + [55] if((word) main::active_balls#2>=(byte) $32) goto main::@5 to:main::@15 main::@15: scope:[main] from main::@4 [56] (byte) main::timer#1 ← ++ (byte) main::timer#3 [57] if((byte) main::timer#3!=(byte) 9) goto main::@25 to:main::@16 main::@16: scope:[main] from main::@15 - [58] (byte) main::active_balls#1 ← ++ (byte) main::active_balls#2 - [59] (byte~) main::$38 ← (byte) main::active_balls#1 << (byte) 3 - [60] *((word*)(const struct $0*) balls + (byte~) main::$38) ← (byte) 0 - [61] *((word*)(const struct $0*) balls+(byte) 2 + (byte~) main::$38) ← (byte) 0 + [58] (word) main::active_balls#1 ← ++ (word) main::active_balls#2 + [59] (word~) main::$38 ← (word) main::active_balls#1 << (byte) 3 + [60] (word*~) main::$61 ← (word*)(const struct $0*) balls + (word~) main::$38 + [61] *((word*~) main::$61) ← (byte) 0 + [62] (word*~) main::$62 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$38 + [63] *((word*~) main::$62) ← (byte) 0 to:main::@5 main::@5: scope:[main] from main::@16 main::@25 main::@4 - [62] (byte) main::timer#15 ← phi( main::@25/(byte) main::timer#21 main::@16/(byte) 0 main::@4/(byte) main::timer#3 ) - [62] (byte) main::active_balls#8 ← phi( main::@25/(byte) main::active_balls#2 main::@16/(byte) main::active_balls#1 main::@4/(byte) main::active_balls#2 ) + [64] (byte) main::timer#15 ← phi( main::@25/(byte) main::timer#21 main::@16/(byte) 0 main::@4/(byte) main::timer#3 ) + [64] (word) main::active_balls#8 ← phi( main::@25/(word) main::active_balls#2 main::@16/(word) main::active_balls#1 main::@4/(word) main::active_balls#2 ) to:main::@6 main::@6: scope:[main] from main::@10 main::@5 - [63] (byte) main::sprite_idx#3 ← phi( main::@10/(byte) main::sprite_idx#2 main::@5/(byte) 0 ) - [63] (word) main::i#10 ← phi( main::@10/(word) main::i#4 main::@5/(byte) 0 ) - [64] if((word) main::i#10<(byte) main::active_balls#8) goto main::@7 + [65] (byte) main::sprite_idx#3 ← phi( main::@10/(byte) main::sprite_idx#2 main::@5/(byte) 0 ) + [65] (word) main::i#10 ← phi( main::@10/(word) main::i#4 main::@5/(byte) 0 ) + [66] if((word) main::i#10<(word) main::active_balls#8) goto main::@7 to:main::@8 main::@8: scope:[main] from main::@6 - [65] *((byte*) 8193) ← (byte) $98 + [67] *((byte*) 8193) ← (byte) $98 to:main::@13 main::@13: scope:[main] from main::@13 main::@8 - [66] if((byte) 0==(volatile byte) vblank_hit) goto main::@13 + [68] if((byte) 0==(volatile byte) vblank_hit) goto main::@13 to:main::@14 main::@14: scope:[main] from main::@13 - [67] (volatile byte) vblank_hit ← (byte) 0 - [68] *((byte*) 8193) ← (byte) $18 + [69] (volatile byte) vblank_hit ← (byte) 0 + [70] *((byte*) 8193) ← (byte) $18 to:main::@3 main::@7: scope:[main] from main::@6 - [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 + [71] (word~) main::$44 ← (word) main::i#10 << (byte) 3 [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::$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::$44 - [78] (word*~) main::$67 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 + [73] (word*~) main::$64 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$44 + [74] (word*~) main::$65 ← (word*)(const struct $0*) balls + (word~) main::$44 + [75] *((word*~) main::$65) ← *((word*~) main::$63) + *((word*~) main::$64) + [76] (word*~) main::$66 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 + [77] (word*~) main::$67 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 + [78] *((word*~) main::$67) ← *((word*~) main::$66) + (byte) $10 [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::$44 - [82] (word~) main::$20 ← *((word*~) main::$69) >> (byte) 8 - [83] if((word~) main::$20>=(byte) 8) goto main::@9 + [80] (word*~) main::$69 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 + [81] (word*~) main::$70 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 + [82] *((word*~) main::$70) ← *((word*~) main::$68) + *((word*~) main::$69) + [83] (word*~) main::$71 ← (word*)(const struct $0*) balls + (word~) main::$44 + [84] (word~) main::$20 ← *((word*~) main::$71) >> (byte) 8 + [85] if((word~) main::$20>=(byte) 8) goto main::@9 to:main::@11 main::@11: scope:[main] from main::@7 - [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 + [86] (word*~) main::$74 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$44 + [87] (word*~) main::$75 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$44 + [88] *((word*~) main::$75) ← *((word*~) main::$74) ^ (word) $ffff to:main::@9 main::@9: scope:[main] from main::@11 main::@7 - [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 + [89] (word*~) main::$72 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 + [90] (word~) main::$23 ← *((word*~) main::$72) >> (byte) 8 + [91] (word*~) main::$73 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 + [92] (word~) main::$25 ← *((word*~) main::$73) >> (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 to:main::@24 main::@24: scope:[main] from main::@9 - [93] if((word~) main::$25>=(byte~) main::$26) goto main::@10 + [95] if((word~) main::$25>=(byte~) main::$26) goto main::@10 to:main::@12 main::@12: scope:[main] from main::@24 - [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 + [96] (word*~) main::$78 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 + [97] (word*~) main::$79 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 + [98] *((word*~) main::$79) ← *((word*~) main::$78) ^ (word) $ffff + [99] (byte~) main::$30 ← (byte) main::h_bar#1 - (byte) 2 + [100] (word~) main::$56 ← (word)(byte~) main::$30 + [101] (word~) main::$31 ← (word~) main::$56 << (byte) 8 + [102] (word*~) main::$80 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 + [103] *((word*~) main::$80) ← (word~) main::$31 to:main::@10 main::@10: scope:[main] from main::@12 main::@24 main::@9 - [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 + [104] (word*~) main::$76 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 + [105] (word~) main::$32 ← *((word*~) main::$76) >> (byte) 8 + [106] (byte~) main::$48 ← (byte) main::sprite_idx#3 << (byte) 2 + [107] *((byte*)(const struct SpriteData*) SPRITE_BUFFER + (byte~) main::$48) ← (byte)(word~) main::$32 + [108] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_TILE + (byte~) main::$48) ← (byte) $a + [109] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_ATTRIBUTES + (byte~) main::$48) ← (byte) 3 + [110] (word*~) main::$77 ← (word*)(const struct $0*) balls + (word~) main::$44 + [111] (word~) main::$33 ← *((word*~) main::$77) >> (byte) 8 + [112] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X + (byte~) main::$48) ← (byte)(word~) main::$33 + [113] (byte) main::sprite_idx#2 ← ++ (byte) main::sprite_idx#3 + [114] (word) main::i#4 ← ++ (word) main::i#10 to:main::@6 main::@25: scope:[main] from main::@15 - [113] (byte) main::timer#21 ← (byte) main::timer#1 + [115] (byte) main::timer#21 ← (byte) main::timer#1 to:main::@5 main::@2: scope:[main] from main::@1 - [114] phi() - [115] call rand - [116] (word) rand::return#2 ← (word) rand::return#0 + [116] phi() + [117] call rand + [118] (word) rand::return#2 ← (word) rand::return#0 to:main::@22 main::@22: scope:[main] from main::@2 - [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 + [119] (word~) main::$9 ← (word) rand::return#2 + [120] (word~) main::$10 ← (word~) main::$9 & (word) $3ff + [121] (word~) main::$36 ← (word) main::i#14 << (byte) 3 + [122] (word*~) main::$59 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$36 + [123] *((word*~) main::$59) ← (word~) main::$10 + [124] call rand + [125] (word) rand::return#3 ← (word) rand::return#0 to:main::@23 main::@23: scope:[main] from main::@22 - [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 + [126] (word~) main::$11 ← (word) rand::return#3 + [127] (byte~) main::$12 ← (word~) main::$11 & (byte) $ff + [128] (word*~) main::$60 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$36 + [129] *((word*~) main::$60) ← (byte~) main::$12 + [130] (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 - [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 ) + [131] (nomodify void*) ppuDataTransfer::cpuData#2 ← phi( main::@17/(void*)(const to_nomodify byte*) palette main::@21/(void*)(const to_nomodify byte*) h_bar_tilemap ) + [131] (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 - [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 + [132] (byte~) ppuDataTransfer::ppuDataPrepare1_$0 ← > (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 + [133] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataTransfer::ppuDataPrepare1_$0 + [134] (byte~) ppuDataTransfer::ppuDataPrepare1_$1 ← < (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 + [135] *((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 - [134] (byte*) ppuDataTransfer::cpuSrc#6 ← (byte*)(nomodify void*) ppuDataTransfer::cpuData#2 + [136] (byte*) ppuDataTransfer::cpuSrc#6 ← (byte*)(nomodify void*) ppuDataTransfer::cpuData#2 to:ppuDataTransfer::@1 ppuDataTransfer::@1: scope:[ppuDataTransfer] from ppuDataTransfer::@3 ppuDataTransfer::@4 - [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 + [137] (byte*) ppuDataTransfer::cpuSrc#2 ← phi( ppuDataTransfer::@3/(byte*) ppuDataTransfer::cpuSrc#6 ppuDataTransfer::@4/(byte*) ppuDataTransfer::cpuSrc#1 ) + [137] (word) ppuDataTransfer::i#2 ← phi( ppuDataTransfer::@3/(word) 0 ppuDataTransfer::@4/(word) ppuDataTransfer::i#1 ) + [138] if((word) ppuDataTransfer::i#2<(byte) $20*(const byte) SIZEOF_BYTE) goto ppuDataTransfer::@2 to:ppuDataTransfer::@return ppuDataTransfer::@return: scope:[ppuDataTransfer] from ppuDataTransfer::@1 - [137] return + [139] return to:@return ppuDataTransfer::@2: scope:[ppuDataTransfer] from ppuDataTransfer::@1 - [138] (byte) ppuDataTransfer::ppuDataPut1_val#0 ← *((byte*) ppuDataTransfer::cpuSrc#2) + [140] (byte) ppuDataTransfer::ppuDataPut1_val#0 ← *((byte*) ppuDataTransfer::cpuSrc#2) to:ppuDataTransfer::ppuDataPut1 ppuDataTransfer::ppuDataPut1: scope:[ppuDataTransfer] from ppuDataTransfer::@2 - [139] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) ppuDataTransfer::ppuDataPut1_val#0 + [141] *((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 - [140] (byte*) ppuDataTransfer::cpuSrc#1 ← ++ (byte*) ppuDataTransfer::cpuSrc#2 - [141] (word) ppuDataTransfer::i#1 ← ++ (word) ppuDataTransfer::i#2 + [142] (byte*) ppuDataTransfer::cpuSrc#1 ← ++ (byte*) ppuDataTransfer::cpuSrc#2 + [143] (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 - [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 ) + [144] (word) ppuDataFill::size#3 ← phi( main::@19/(word)(number) $20*(number) $1e main::@20/(byte) $40 ) + [144] (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 - [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 + [145] (byte~) ppuDataFill::ppuDataPrepare1_$0 ← > (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 + [146] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataFill::ppuDataPrepare1_$0 + [147] (byte~) ppuDataFill::ppuDataPrepare1_$1 ← < (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 + [148] *((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 - [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 + [149] (word) ppuDataFill::i#2 ← phi( ppuDataFill::ppuDataPrepare1/(word) 0 ppuDataFill::@2/(word) ppuDataFill::i#1 ) + [150] if((word) ppuDataFill::i#2<(word) ppuDataFill::size#3) goto ppuDataFill::ppuDataPut1 to:ppuDataFill::@return ppuDataFill::@return: scope:[ppuDataFill] from ppuDataFill::@1 - [149] return + [151] return to:@return ppuDataFill::ppuDataPut1: scope:[ppuDataFill] from ppuDataFill::@1 - [150] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) 0 + [152] *((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 - [151] (word) ppuDataFill::i#1 ← ++ (word) ppuDataFill::i#2 + [153] (word) ppuDataFill::i#1 ← ++ (word) ppuDataFill::i#2 to:ppuDataFill::@1 (word()) rand() rand: scope:[rand] from main::@2 main::@22 - [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 + [154] (word) rand_state#10 ← phi( main::@2/(word) rand_state#17 main::@22/(word) rand_state#11 ) + [155] (word~) rand::$0 ← (word) rand_state#10 << (byte) 7 + [156] (word) rand_state#0 ← (word) rand_state#10 ^ (word~) rand::$0 + [157] (word~) rand::$1 ← (word) rand_state#0 >> (byte) 9 + [158] (word) rand_state#1 ← (word) rand_state#0 ^ (word~) rand::$1 + [159] (word~) rand::$2 ← (word) rand_state#1 << (byte) 8 + [160] (word) rand_state#11 ← (word) rand_state#1 ^ (word~) rand::$2 + [161] (word) rand::return#0 ← (word) rand_state#11 to:rand::@return rand::@return: scope:[rand] from rand - [160] return + [162] 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 09e3ecf64..39184079e 100644 --- a/src/test/ref/complex/nes-balls/kickballs-3.log +++ b/src/test/ref/complex/nes-balls/kickballs-3.log @@ -294,7 +294,7 @@ main::@19: scope:[main] from main::enableVideoOutput1 (byte*~) main::$54 ← (byte*~) main::$55 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUCTRL *((byte*~) main::$54) ← (number) $88 (word) main::i#0 ← (word) 0 - (byte) main::active_balls#0 ← (byte) 0 + (word) main::active_balls#0 ← (word) 0 (byte) main::timer#0 ← (byte) 0 (byte) main::timer_2#0 ← (byte) 0 (byte) main::h_bar#0 ← (byte) $80 @@ -303,7 +303,7 @@ main::@19: scope:[main] from main::enableVideoOutput1 to:main::@1 main::@1: scope:[main] from main::@19 main::@25 (byte) main::timer#6 ← phi( main::@19/(byte) main::timer#0 main::@25/(byte) main::timer#8 ) - (byte) main::active_balls#9 ← phi( main::@19/(byte) main::active_balls#0 main::@25/(byte) main::active_balls#13 ) + (word) main::active_balls#9 ← phi( main::@19/(word) main::active_balls#0 main::@25/(word) main::active_balls#13 ) (byte) main::timer_2#4 ← phi( main::@19/(byte) main::timer_2#0 main::@25/(byte) main::timer_2#6 ) (word) rand_state#20 ← phi( main::@19/(word) rand_state#22 main::@25/(word) rand_state#5 ) (word) main::i#5 ← phi( main::@19/(word) main::i#1 main::@25/(word) main::i#2 ) @@ -312,7 +312,7 @@ main::@1: scope:[main] from main::@19 main::@25 to:main::@3 main::@2: scope:[main] from main::@1 (byte) main::timer#12 ← phi( main::@1/(byte) main::timer#6 ) - (byte) main::active_balls#19 ← phi( main::@1/(byte) main::active_balls#9 ) + (word) main::active_balls#19 ← phi( main::@1/(word) main::active_balls#9 ) (byte) main::timer_2#10 ← phi( main::@1/(byte) main::timer_2#4 ) (word) main::i#14 ← phi( main::@1/(word) main::i#5 ) (word) rand_state#17 ← phi( main::@1/(word) rand_state#20 ) @@ -321,7 +321,7 @@ main::@2: scope:[main] from main::@1 to:main::@24 main::@24: scope:[main] from main::@2 (byte) main::timer#10 ← phi( main::@2/(byte) main::timer#12 ) - (byte) main::active_balls#17 ← phi( main::@2/(byte) main::active_balls#19 ) + (word) main::active_balls#17 ← phi( main::@2/(word) main::active_balls#19 ) (byte) main::timer_2#8 ← phi( main::@2/(byte) main::timer_2#10 ) (word) main::i#6 ← phi( main::@2/(word) main::i#14 ) (word) rand_state#12 ← phi( main::@2/(word) rand_state#3 ) @@ -336,7 +336,7 @@ main::@24: scope:[main] from main::@2 to:main::@25 main::@25: scope:[main] from main::@24 (byte) main::timer#8 ← phi( main::@24/(byte) main::timer#10 ) - (byte) main::active_balls#13 ← phi( main::@24/(byte) main::active_balls#17 ) + (word) main::active_balls#13 ← phi( main::@24/(word) main::active_balls#17 ) (byte) main::timer_2#6 ← phi( main::@24/(byte) main::timer_2#8 ) (word) main::i#7 ← phi( main::@24/(word) main::i#6 ) (word) rand_state#13 ← phi( main::@24/(word) rand_state#3 ) @@ -351,7 +351,7 @@ main::@25: scope:[main] from main::@24 main::@3: scope:[main] from main::@1 main::@15 (word) rand_state#21 ← phi( main::@1/(word) rand_state#20 main::@15/(word) rand_state#23 ) (byte) main::timer#5 ← phi( main::@1/(byte) main::timer#6 main::@15/(byte) main::timer#7 ) - (byte) main::active_balls#5 ← phi( main::@1/(byte) main::active_balls#9 main::@15/(byte) main::active_balls#10 ) + (word) main::active_balls#5 ← phi( main::@1/(word) main::active_balls#9 main::@15/(word) main::active_balls#10 ) (byte) main::timer_2#3 ← phi( main::@1/(byte) main::timer_2#4 main::@15/(byte) main::timer_2#5 ) (bool~) main::$57 ← (number) 0 != (number) 1 if((bool~) main::$57) goto main::@4 @@ -359,14 +359,14 @@ main::@3: scope:[main] from main::@1 main::@15 main::@4: scope:[main] from main::@3 (word) rand_state#36 ← phi( main::@3/(word) rand_state#21 ) (byte) main::timer#4 ← phi( main::@3/(byte) main::timer#5 ) - (byte) main::active_balls#2 ← phi( main::@3/(byte) main::active_balls#5 ) + (word) main::active_balls#2 ← phi( main::@3/(word) main::active_balls#5 ) (byte) main::timer_2#2 ← phi( main::@3/(byte) main::timer_2#3 ) (byte) main::timer_2#1 ← ++ (byte) main::timer_2#2 (number~) main::$13 ← *((const to_nomodify byte*) sine_table + (byte) main::timer_2#1) + (number) $60 (byte) main::h_bar#1 ← (number~) main::$13 (number~) main::$14 ← (byte) main::h_bar#1 ^ (number) $ff (volatile byte) scroll_y ← (number~) main::$14 - (bool~) main::$15 ← (byte) main::active_balls#2 < (number) $32 + (bool~) main::$15 ← (word) main::active_balls#2 < (number) $32 (bool~) main::$16 ← ! (bool~) main::$15 if((bool~) main::$16) goto main::@6 to:main::@16 @@ -379,7 +379,7 @@ main::@6: scope:[main] from main::@16 main::@17 main::@4 (byte) main::timer#15 ← phi( main::@16/(byte) main::timer#1 main::@17/(byte) main::timer#2 main::@4/(byte) main::timer#4 ) (byte) main::timer_2#13 ← phi( main::@16/(byte) main::timer_2#14 main::@17/(byte) main::timer_2#15 main::@4/(byte) main::timer_2#1 ) (byte) main::h_bar#8 ← phi( main::@16/(byte) main::h_bar#9 main::@17/(byte) main::h_bar#10 main::@4/(byte) main::h_bar#1 ) - (byte) main::active_balls#8 ← phi( main::@16/(byte) main::active_balls#6 main::@17/(byte) main::active_balls#1 main::@4/(byte) main::active_balls#2 ) + (word) main::active_balls#8 ← phi( main::@16/(word) main::active_balls#6 main::@17/(word) main::active_balls#1 main::@4/(word) main::active_balls#2 ) (byte) main::sprite_idx#1 ← (number) 0 (word) main::i#3 ← (number) 0 to:main::@7 @@ -387,7 +387,7 @@ main::@16: scope:[main] from main::@4 (word) rand_state#34 ← phi( main::@4/(word) rand_state#36 ) (byte) main::timer_2#14 ← phi( main::@4/(byte) main::timer_2#1 ) (byte) main::h_bar#9 ← phi( main::@4/(byte) main::h_bar#1 ) - (byte) main::active_balls#6 ← phi( main::@4/(byte) main::active_balls#2 ) + (word) main::active_balls#6 ← phi( main::@4/(word) main::active_balls#2 ) (byte) main::timer#3 ← phi( main::@4/(byte) main::timer#4 ) (bool~) main::$17 ← (byte) main::timer#3 == (number) 9 (byte) main::timer#1 ← ++ (byte) main::timer#3 @@ -398,13 +398,13 @@ main::@17: scope:[main] from main::@16 (word) rand_state#35 ← phi( main::@16/(word) rand_state#34 ) (byte) main::timer_2#15 ← phi( main::@16/(byte) main::timer_2#14 ) (byte) main::h_bar#10 ← phi( main::@16/(byte) main::h_bar#9 ) - (byte) main::active_balls#3 ← phi( main::@16/(byte) main::active_balls#6 ) + (word) main::active_balls#3 ← phi( main::@16/(word) main::active_balls#6 ) (byte) main::timer#2 ← (number) 0 - (byte) main::active_balls#1 ← ++ (byte) main::active_balls#3 - (byte~) main::$37 ← (byte) main::active_balls#1 * (const byte) SIZEOF_STRUCT_$0 - *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_X_POSITION + (byte~) main::$37) ← (number) 0 - (byte~) main::$38 ← (byte) main::active_balls#1 * (const byte) SIZEOF_STRUCT_$0 - *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_Y_POSITION + (byte~) main::$38) ← (number) 0 + (word) main::active_balls#1 ← ++ (word) main::active_balls#3 + (word~) main::$37 ← (word) main::active_balls#1 * (const byte) SIZEOF_STRUCT_$0 + *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_X_POSITION + (word~) main::$37) ← (number) 0 + (word~) main::$38 ← (word) main::active_balls#1 * (const byte) SIZEOF_STRUCT_$0 + *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_Y_POSITION + (word~) main::$38) ← (number) 0 to:main::@6 main::@7: scope:[main] from main::@11 main::@6 (word) rand_state#29 ← phi( main::@11/(word) rand_state#31 main::@6/(word) rand_state#32 ) @@ -412,16 +412,16 @@ main::@7: scope:[main] from main::@11 main::@6 (byte) main::timer_2#11 ← phi( main::@11/(byte) main::timer_2#12 main::@6/(byte) main::timer_2#13 ) (byte) main::sprite_idx#8 ← phi( main::@11/(byte) main::sprite_idx#2 main::@6/(byte) main::sprite_idx#1 ) (byte) main::h_bar#6 ← phi( main::@11/(byte) main::h_bar#7 main::@6/(byte) main::h_bar#8 ) - (byte) main::active_balls#4 ← phi( main::@11/(byte) main::active_balls#7 main::@6/(byte) main::active_balls#8 ) + (word) main::active_balls#4 ← phi( main::@11/(word) main::active_balls#7 main::@6/(word) main::active_balls#8 ) (word) main::i#8 ← phi( main::@11/(word) main::i#4 main::@6/(word) main::i#3 ) - (bool~) main::$19 ← (word) main::i#8 < (byte) main::active_balls#4 + (bool~) main::$19 ← (word) main::i#8 < (word) main::active_balls#4 if((bool~) main::$19) goto main::@8 to:main::@9 main::@8: scope:[main] from main::@7 (word) rand_state#41 ← phi( main::@7/(word) rand_state#29 ) (byte) main::timer#19 ← phi( main::@7/(byte) main::timer#13 ) (byte) main::timer_2#19 ← phi( main::@7/(byte) main::timer_2#11 ) - (byte) main::active_balls#15 ← phi( main::@7/(byte) main::active_balls#4 ) + (word) main::active_balls#15 ← phi( main::@7/(word) main::active_balls#4 ) (byte) main::sprite_idx#7 ← phi( main::@7/(byte) main::sprite_idx#8 ) (byte) main::h_bar#5 ← phi( main::@7/(byte) main::h_bar#6 ) (word) main::i#9 ← phi( main::@7/(word) main::i#8 ) @@ -440,7 +440,7 @@ main::@8: scope:[main] from main::@7 main::@9: scope:[main] from main::@7 (word) rand_state#27 ← phi( main::@7/(word) rand_state#29 ) (byte) main::timer#11 ← phi( main::@7/(byte) main::timer#13 ) - (byte) main::active_balls#18 ← phi( main::@7/(byte) main::active_balls#4 ) + (word) main::active_balls#18 ← phi( main::@7/(word) main::active_balls#4 ) (byte) main::timer_2#9 ← phi( main::@7/(byte) main::timer_2#11 ) *((byte*)(number) $2001) ← (number) $98 to:main::@14 @@ -448,7 +448,7 @@ main::@10: scope:[main] from main::@12 main::@8 (word) rand_state#37 ← phi( main::@12/(word) rand_state#40 main::@8/(word) rand_state#41 ) (byte) main::timer#16 ← phi( main::@12/(byte) main::timer#18 main::@8/(byte) main::timer#19 ) (byte) main::timer_2#16 ← phi( main::@12/(byte) main::timer_2#18 main::@8/(byte) main::timer_2#19 ) - (byte) main::active_balls#11 ← phi( main::@12/(byte) main::active_balls#14 main::@8/(byte) main::active_balls#15 ) + (word) main::active_balls#11 ← phi( main::@12/(word) main::active_balls#14 main::@8/(word) main::active_balls#15 ) (byte) main::sprite_idx#4 ← phi( main::@12/(byte) main::sprite_idx#6 main::@8/(byte) main::sprite_idx#7 ) (byte) main::h_bar#2 ← phi( main::@12/(byte) main::h_bar#4 main::@8/(byte) main::h_bar#5 ) (word) main::i#10 ← phi( main::@12/(word) main::i#11 main::@8/(word) main::i#9 ) @@ -467,7 +467,7 @@ main::@12: scope:[main] from main::@8 (word) rand_state#40 ← phi( main::@8/(word) rand_state#41 ) (byte) main::timer#18 ← phi( main::@8/(byte) main::timer#19 ) (byte) main::timer_2#18 ← phi( main::@8/(byte) main::timer_2#19 ) - (byte) main::active_balls#14 ← phi( main::@8/(byte) main::active_balls#15 ) + (word) main::active_balls#14 ← phi( main::@8/(word) main::active_balls#15 ) (byte) main::sprite_idx#6 ← phi( main::@8/(byte) main::sprite_idx#7 ) (byte) main::h_bar#4 ← phi( main::@8/(byte) main::h_bar#5 ) (word) main::i#11 ← phi( main::@8/(word) main::i#9 ) @@ -479,7 +479,7 @@ main::@11: scope:[main] from main::@10 main::@13 (byte) main::timer#14 ← phi( main::@10/(byte) main::timer#16 main::@13/(byte) main::timer#17 ) (byte) main::timer_2#12 ← phi( main::@10/(byte) main::timer_2#16 main::@13/(byte) main::timer_2#17 ) (byte) main::h_bar#7 ← phi( main::@10/(byte) main::h_bar#2 main::@13/(byte) main::h_bar#3 ) - (byte) main::active_balls#7 ← phi( main::@10/(byte) main::active_balls#11 main::@13/(byte) main::active_balls#12 ) + (word) main::active_balls#7 ← phi( main::@10/(word) main::active_balls#11 main::@13/(word) main::active_balls#12 ) (byte) main::sprite_idx#3 ← phi( main::@10/(byte) main::sprite_idx#4 main::@13/(byte) main::sprite_idx#5 ) (word) main::i#12 ← phi( main::@10/(word) main::i#10 main::@13/(word) main::i#13 ) (word~) main::$46 ← (word) main::i#12 * (const byte) SIZEOF_STRUCT_$0 @@ -501,7 +501,7 @@ main::@13: scope:[main] from main::@10 (word) rand_state#38 ← phi( main::@10/(word) rand_state#37 ) (byte) main::timer#17 ← phi( main::@10/(byte) main::timer#16 ) (byte) main::timer_2#17 ← phi( main::@10/(byte) main::timer_2#16 ) - (byte) main::active_balls#12 ← phi( main::@10/(byte) main::active_balls#11 ) + (word) main::active_balls#12 ← phi( main::@10/(word) main::active_balls#11 ) (byte) main::sprite_idx#5 ← phi( main::@10/(byte) main::sprite_idx#4 ) (byte) main::h_bar#3 ← phi( main::@10/(byte) main::h_bar#2 ) (word) main::i#13 ← phi( main::@10/(word) main::i#10 ) @@ -516,7 +516,7 @@ main::@13: scope:[main] from main::@10 main::@14: scope:[main] from main::@14 main::@9 (word) rand_state#25 ← phi( main::@14/(word) rand_state#25 main::@9/(word) rand_state#27 ) (byte) main::timer#9 ← phi( main::@14/(byte) main::timer#9 main::@9/(byte) main::timer#11 ) - (byte) main::active_balls#16 ← phi( main::@14/(byte) main::active_balls#16 main::@9/(byte) main::active_balls#18 ) + (word) main::active_balls#16 ← phi( main::@14/(word) main::active_balls#16 main::@9/(word) main::active_balls#18 ) (byte) main::timer_2#7 ← phi( main::@14/(byte) main::timer_2#7 main::@9/(byte) main::timer_2#9 ) (bool~) main::$58 ← (number) 0 != (volatile byte) vblank_hit (bool~) main::$34 ← ! (bool~) main::$58 @@ -525,7 +525,7 @@ main::@14: scope:[main] from main::@14 main::@9 main::@15: scope:[main] from main::@14 (word) rand_state#23 ← phi( main::@14/(word) rand_state#25 ) (byte) main::timer#7 ← phi( main::@14/(byte) main::timer#9 ) - (byte) main::active_balls#10 ← phi( main::@14/(byte) main::active_balls#16 ) + (word) main::active_balls#10 ← phi( main::@14/(word) main::active_balls#16 ) (byte) main::timer_2#5 ← phi( main::@14/(byte) main::timer_2#7 ) (volatile byte) vblank_hit ← (number) 0 *((byte*)(number) $2001) ← (number) $18 @@ -700,8 +700,8 @@ SYMBOL TABLE SSA (bool~) main::$34 (word~) main::$35 (word~) main::$36 -(byte~) main::$37 -(byte~) main::$38 +(word~) main::$37 +(word~) main::$38 (word~) main::$39 (word~) main::$40 (word~) main::$41 @@ -751,27 +751,27 @@ SYMBOL TABLE SSA (label) main::@8 (label) main::@9 (label) main::@return -(byte) main::active_balls -(byte) main::active_balls#0 -(byte) main::active_balls#1 -(byte) main::active_balls#10 -(byte) main::active_balls#11 -(byte) main::active_balls#12 -(byte) main::active_balls#13 -(byte) main::active_balls#14 -(byte) main::active_balls#15 -(byte) main::active_balls#16 -(byte) main::active_balls#17 -(byte) main::active_balls#18 -(byte) main::active_balls#19 -(byte) main::active_balls#2 -(byte) main::active_balls#3 -(byte) main::active_balls#4 -(byte) main::active_balls#5 -(byte) main::active_balls#6 -(byte) main::active_balls#7 -(byte) main::active_balls#8 -(byte) main::active_balls#9 +(word) main::active_balls +(word) main::active_balls#0 +(word) main::active_balls#1 +(word) main::active_balls#10 +(word) main::active_balls#11 +(word) main::active_balls#12 +(word) main::active_balls#13 +(word) main::active_balls#14 +(word) main::active_balls#15 +(word) main::active_balls#16 +(word) main::active_balls#17 +(word) main::active_balls#18 +(word) main::active_balls#19 +(word) main::active_balls#2 +(word) main::active_balls#3 +(word) main::active_balls#4 +(word) main::active_balls#5 +(word) main::active_balls#6 +(word) main::active_balls#7 +(word) main::active_balls#8 +(word) main::active_balls#9 (label) main::enableVideoOutput1 (byte*~) main::enableVideoOutput1_$0 (byte*~) main::enableVideoOutput1_$1 @@ -1151,14 +1151,14 @@ Adding number conversion cast (unumber) $60 in (number~) main::$13 ← *((const Adding number conversion cast (unumber) main::$13 in (number~) main::$13 ← *((const to_nomodify byte*) sine_table + (byte) main::timer_2#1) + (unumber)(number) $60 Adding number conversion cast (unumber) $ff in (number~) main::$14 ← (byte) main::h_bar#1 ^ (number) $ff Adding number conversion cast (unumber) main::$14 in (number~) main::$14 ← (byte) main::h_bar#1 ^ (unumber)(number) $ff -Adding number conversion cast (unumber) $32 in (bool~) main::$15 ← (byte) main::active_balls#2 < (number) $32 +Adding number conversion cast (unumber) $32 in (bool~) main::$15 ← (word) main::active_balls#2 < (number) $32 Adding number conversion cast (snumber) 0 in (signed word) main::return#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) main::sprite_idx#1 ← (number) 0 Adding number conversion cast (unumber) 0 in (word) main::i#3 ← (number) 0 Adding number conversion cast (unumber) 9 in (bool~) main::$17 ← (byte) main::timer#3 == (number) 9 Adding number conversion cast (unumber) 0 in (byte) main::timer#2 ← (number) 0 -Adding number conversion cast (unumber) 0 in *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_X_POSITION + (byte~) main::$37) ← (number) 0 -Adding number conversion cast (unumber) 0 in *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_Y_POSITION + (byte~) main::$38) ← (number) 0 +Adding number conversion cast (unumber) 0 in *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_X_POSITION + (word~) main::$37) ← (number) 0 +Adding number conversion cast (unumber) 0 in *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_Y_POSITION + (word~) main::$38) ← (number) 0 Adding number conversion cast (unumber) $10 in *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_Y_VELOCITY + (word~) main::$40) ← *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_Y_VELOCITY + (word~) main::$40) + (number) $10 Adding number conversion cast (unumber) 8 in (word~) main::$20 ← *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_X_POSITION + (word~) main::$42) >> (number) 8 Adding number conversion cast (unumber) 8 in (bool~) main::$21 ← (word~) main::$20 < (number) 8 @@ -1206,8 +1206,8 @@ Inlining cast (signed word) main::return#0 ← (snumber)(number) 0 Inlining cast (byte) main::sprite_idx#1 ← (unumber)(number) 0 Inlining cast (word) main::i#3 ← (unumber)(number) 0 Inlining cast (byte) main::timer#2 ← (unumber)(number) 0 -Inlining cast *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_X_POSITION + (byte~) main::$37) ← (unumber)(number) 0 -Inlining cast *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_Y_POSITION + (byte~) main::$38) ← (unumber)(number) 0 +Inlining cast *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_X_POSITION + (word~) main::$37) ← (unumber)(number) 0 +Inlining cast *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_Y_POSITION + (word~) main::$38) ← (unumber)(number) 0 Inlining cast *((byte*)(number) $2001) ← (unumber)(number) $98 Inlining cast *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_TILE + (byte~) main::$48) ← (unumber)(number) $a Inlining cast *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_ATTRIBUTES + (byte~) main::$49) ← (unumber)(number) 3 @@ -1376,7 +1376,7 @@ Inferred type updated to byte in (unumber~) main::$26 ← (byte) main::h_bar#2 + Inferred type updated to byte in (unumber~) main::$30 ← (byte) main::h_bar#3 - (byte) 2 Inversing boolean not [87] (bool~) main::initNES1_waitForVBlank1_$1 ← (byte) 0 == (byte~) main::initNES1_waitForVBlank1_$0 from [86] (bool~) main::initNES1_waitForVBlank1_$4 ← (byte) 0 != (byte~) main::initNES1_waitForVBlank1_$0 Inversing boolean not [109] (bool~) main::initNES1_waitForVBlank2_$1 ← (byte) 0 == (byte~) main::initNES1_waitForVBlank2_$0 from [108] (bool~) main::initNES1_waitForVBlank2_$4 ← (byte) 0 != (byte~) main::initNES1_waitForVBlank2_$0 -Inversing boolean not [185] (bool~) main::$16 ← (byte) main::active_balls#2 >= (byte) $32 from [184] (bool~) main::$15 ← (byte) main::active_balls#2 < (byte) $32 +Inversing boolean not [185] (bool~) main::$16 ← (word) main::active_balls#2 >= (byte) $32 from [184] (bool~) main::$15 ← (word) main::active_balls#2 < (byte) $32 Inversing boolean not [195] (bool~) main::$18 ← (byte) main::timer#3 != (byte) 9 from [193] (bool~) main::$17 ← (byte) main::timer#3 == (byte) 9 Inversing boolean not [217] (bool~) main::$22 ← (word~) main::$20 >= (byte) 8 from [216] (bool~) main::$21 ← (word~) main::$20 < (byte) 8 Inversing boolean not [260] (bool~) main::$34 ← (byte) 0 == (volatile byte) vblank_hit from [259] (bool~) main::$58 ← (byte) 0 != (volatile byte) vblank_hit @@ -1462,24 +1462,24 @@ Identical Phi Values (word) rand_state#46 (word) rand_state#48 Identical Phi Values (word) rand_state#44 (word) rand_state#46 Identical Phi Values (word) rand_state#22 (word) rand_state#44 Identical Phi Values (byte) main::timer_2#10 (byte) main::timer_2#0 -Identical Phi Values (byte) main::active_balls#13 (byte) main::active_balls#0 +Identical Phi Values (word) main::active_balls#13 (word) main::active_balls#0 Identical Phi Values (byte) main::timer#10 (byte) main::timer#0 Identical Phi Values (word) rand_state#12 (word) rand_state#11 Identical Phi Values (word) rand_state#13 (word) rand_state#11 -Identical Phi Values (byte) main::active_balls#11 (byte) main::active_balls#8 +Identical Phi Values (word) main::active_balls#11 (word) main::active_balls#8 Identical Phi Values (byte) main::h_bar#2 (byte) main::h_bar#1 Identical Phi Values (byte) main::timer_2#11 (byte) main::timer_2#1 Identical Phi Values (byte) main::timer#11 (byte) main::timer#15 Identical Phi Values (word) rand_state#27 (word) rand_state#14 Identical Phi Values (byte) main::timer_2#5 (byte) main::timer_2#11 -Identical Phi Values (byte) main::active_balls#10 (byte) main::active_balls#11 +Identical Phi Values (word) main::active_balls#10 (word) main::active_balls#11 Identical Phi Values (byte) main::timer#7 (byte) main::timer#11 Identical Phi Values (word) rand_state#23 (word) rand_state#27 Identical Phi Values (word) rand_state#15 (word) rand_state#14 Successful SSA optimization Pass2IdenticalPhiElimination Identical Phi Values (word) rand_state#14 (word) rand_state#17 Successful SSA optimization Pass2IdenticalPhiElimination -Identified duplicate assignment right side [202] (byte~) main::$38 ← (byte) main::active_balls#1 * (const byte) SIZEOF_STRUCT_$0 +Identified duplicate assignment right side [202] (word~) main::$38 ← (word) main::active_balls#1 * (const byte) SIZEOF_STRUCT_$0 Identified duplicate assignment right side [210] (word~) main::$40 ← (word) main::i#10 * (const byte) SIZEOF_STRUCT_$0 Identified duplicate assignment right side [212] (word~) main::$41 ← (word) main::i#10 * (const byte) SIZEOF_STRUCT_$0 Identified duplicate assignment right side [214] (word~) main::$42 ← (word) main::i#10 * (const byte) SIZEOF_STRUCT_$0 @@ -1497,9 +1497,9 @@ Simple Condition (bool~) main::initNES1_$5 [79] if((byte) 0!=(byte) main::initNE Simple Condition (bool~) main::initNES1_waitForVBlank2_$1 [85] if((byte) 0==(byte~) main::initNES1_waitForVBlank2_$0) goto main::initNES1_waitForVBlank2_@1 Simple Condition (bool~) main::$8 [121] if((word) main::i#14<(byte) $32) goto main::@2 Simple Condition (bool~) main::$57 [139] if((number) 0!=(number) 1) goto main::@4 -Simple Condition (bool~) main::$16 [145] if((byte) main::active_balls#2>=(byte) $32) goto main::@6 +Simple Condition (bool~) main::$16 [145] if((word) main::active_balls#2>=(byte) $32) goto main::@6 Simple Condition (bool~) main::$18 [152] if((byte) main::timer#3!=(byte) 9) goto main::@6 -Simple Condition (bool~) main::$19 [161] if((word) main::i#10<(byte) main::active_balls#8) goto main::@8 +Simple Condition (bool~) main::$19 [161] if((word) main::i#10<(word) main::active_balls#8) goto main::@8 Simple Condition (bool~) main::$22 [171] if((word~) main::$20>=(byte) 8) goto main::@10 Simple Condition (bool~) main::$34 [208] if((byte) 0==(volatile byte) vblank_hit) goto main::@14 Successful SSA optimization Pass2ConditionalJumpSimplification @@ -1558,7 +1558,7 @@ Constant (const byte*) main::enableVideoOutput1_$2 = (byte*)PPU Constant (const byte*) main::enableVideoOutput1_$3 = (byte*)PPU Constant (const byte*) main::$55 = (byte*)PPU Constant (const word) main::i#0 = 0 -Constant (const byte) main::active_balls#0 = 0 +Constant (const word) main::active_balls#0 = 0 Constant (const byte) main::timer#0 = 0 Constant (const byte) main::timer_2#0 = 0 Constant (const byte) main::h_bar#0 = $80 @@ -1600,23 +1600,25 @@ Converting *(pointer+n) to pointer[n] [225] *((byte*~) vblank::ppuSpriteBufferDm Successful SSA optimization Pass2InlineDerefIdx De-inlining pointer[w] to *(pointer+w) [128] *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_X_VELOCITY + (word~) main::$35) ← (word~) main::$10 De-inlining pointer[w] to *(pointer+w) [135] *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_Y_VELOCITY + (word~) main::$36) ← (byte~) main::$12 +De-inlining pointer[w] to *(pointer+w) [156] *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_X_POSITION + (word~) main::$37) ← (byte) 0 +De-inlining pointer[w] to *(pointer+w) [158] *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_Y_POSITION + (word~) main::$38) ← (byte) 0 De-inlining pointer[w] to *(pointer+w) [163] *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_X_POSITION + (word~) main::$39) ← *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_X_POSITION + (word~) main::$39) + *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_X_VELOCITY + (word~) main::$39) -De-inlining pointer[w] to *(pointer+w) [163] *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_X_POSITION + (word~) main::$39) ← *((word*~) main::$61) + *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_X_VELOCITY + (word~) main::$39) -De-inlining pointer[w] to *(pointer+w) [163] *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_X_POSITION + (word~) main::$39) ← *((word*~) main::$61) + *((word*~) main::$62) +De-inlining pointer[w] to *(pointer+w) [163] *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_X_POSITION + (word~) main::$39) ← *((word*~) main::$63) + *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_X_VELOCITY + (word~) main::$39) +De-inlining pointer[w] to *(pointer+w) [163] *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_X_POSITION + (word~) main::$39) ← *((word*~) main::$63) + *((word*~) main::$64) De-inlining pointer[w] to *(pointer+w) [165] *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_Y_VELOCITY + (word~) main::$40) ← *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_Y_VELOCITY + (word~) main::$40) + (byte) $10 -De-inlining pointer[w] to *(pointer+w) [165] *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_Y_VELOCITY + (word~) main::$40) ← *((word*~) main::$64) + (byte) $10 +De-inlining pointer[w] to *(pointer+w) [165] *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_Y_VELOCITY + (word~) main::$40) ← *((word*~) main::$66) + (byte) $10 De-inlining pointer[w] to *(pointer+w) [167] *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_Y_POSITION + (word~) main::$41) ← *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_Y_POSITION + (word~) main::$41) + *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_Y_VELOCITY + (word~) main::$41) -De-inlining pointer[w] to *(pointer+w) [167] *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_Y_POSITION + (word~) main::$41) ← *((word*~) main::$66) + *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_Y_VELOCITY + (word~) main::$41) -De-inlining pointer[w] to *(pointer+w) [167] *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_Y_POSITION + (word~) main::$41) ← *((word*~) main::$66) + *((word*~) main::$67) +De-inlining pointer[w] to *(pointer+w) [167] *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_Y_POSITION + (word~) main::$41) ← *((word*~) main::$68) + *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_Y_VELOCITY + (word~) main::$41) +De-inlining pointer[w] to *(pointer+w) [167] *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_Y_POSITION + (word~) main::$41) ← *((word*~) main::$68) + *((word*~) main::$69) De-inlining pointer[w] to *(pointer+w) [169] (word~) main::$20 ← *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_X_POSITION + (word~) main::$42) >> (byte) 8 De-inlining pointer[w] to *(pointer+w) [174] (word~) main::$23 ← *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_Y_POSITION + (word~) main::$43) >> (byte) 8 De-inlining pointer[w] to *(pointer+w) [177] (word~) main::$25 ← *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_Y_POSITION + (word~) main::$44) >> (byte) 8 De-inlining pointer[w] to *(pointer+w) [184] *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_X_VELOCITY + (word~) main::$45) ← *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_X_VELOCITY + (word~) main::$45) ^ (word) $ffff -De-inlining pointer[w] to *(pointer+w) [184] *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_X_VELOCITY + (word~) main::$45) ← *((word*~) main::$72) ^ (word) $ffff +De-inlining pointer[w] to *(pointer+w) [184] *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_X_VELOCITY + (word~) main::$45) ← *((word*~) main::$74) ^ (word) $ffff De-inlining pointer[w] to *(pointer+w) [186] (word~) main::$32 ← *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_Y_POSITION + (word~) main::$46) >> (byte) 8 De-inlining pointer[w] to *(pointer+w) [194] (word~) main::$33 ← *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_X_POSITION + (word~) main::$50) >> (byte) 8 De-inlining pointer[w] to *(pointer+w) [200] *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_Y_VELOCITY + (word~) main::$52) ← *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_Y_VELOCITY + (word~) main::$52) ^ (word) $ffff -De-inlining pointer[w] to *(pointer+w) [200] *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_Y_VELOCITY + (word~) main::$52) ← *((word*~) main::$76) ^ (word) $ffff +De-inlining pointer[w] to *(pointer+w) [200] *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_Y_VELOCITY + (word~) main::$52) ← *((word*~) main::$78) ^ (word) $ffff De-inlining pointer[w] to *(pointer+w) [205] *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_Y_POSITION + (word~) main::$53) ← (word~) main::$31 Successful SSA optimization Pass2DeInlineWordDerefIdx Simplifying expression containing zero main::initNES1_disableVideoOutput1_$2 in [51] (byte*~) main::initNES1_disableVideoOutput1_$0 ← (const byte*) main::initNES1_disableVideoOutput1_$2 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUCTRL @@ -1626,12 +1628,12 @@ Simplifying expression containing zero main::enableVideoOutput1_$2 in [104] (byt Simplifying expression containing zero main::enableVideoOutput1_$2 in [105] *((const byte*) main::enableVideoOutput1_$2 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUCTRL) ← (byte) $80 Simplifying expression containing zero main::$55 in [110] (byte*~) main::$54 ← (const byte*) main::$55 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUCTRL Simplifying expression containing zero main::$55 in [111] *((const byte*) main::$55 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUCTRL) ← (byte) $88 -Simplifying expression containing zero (word*)balls in [156] *((word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_X_POSITION + (byte~) main::$37) ← (byte) 0 -Simplifying expression containing zero (word*)balls in (word*~) main::$61 ← (word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_X_POSITION + (word~) main::$39 +Simplifying expression containing zero (word*)balls in (word*~) main::$61 ← (word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_X_POSITION + (word~) main::$37 Simplifying expression containing zero (word*)balls in (word*~) main::$63 ← (word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_X_POSITION + (word~) main::$39 -Simplifying expression containing zero (word*)balls in (word*~) main::$69 ← (word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_X_POSITION + (word~) main::$42 +Simplifying expression containing zero (word*)balls in (word*~) main::$65 ← (word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_X_POSITION + (word~) main::$39 +Simplifying expression containing zero (word*)balls in (word*~) main::$71 ← (word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_X_POSITION + (word~) main::$42 Simplifying expression containing zero (byte*)SPRITE_BUFFER in [188] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_Y + (byte~) main::$47) ← (byte)(word~) main::$32 -Simplifying expression containing zero (word*)balls in (word*~) main::$75 ← (word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_X_POSITION + (word~) main::$50 +Simplifying expression containing zero (word*)balls in (word*~) main::$77 ← (word*)(const struct $0*) balls+(const byte) OFFSET_STRUCT_$0_X_POSITION + (word~) main::$50 Successful SSA optimization PassNSimplifyExpressionWithZero Eliminating unused variable (byte*~) ppuDataFill::ppuDataPrepare1_$2 and assignment [2] (byte*~) ppuDataFill::ppuDataPrepare1_$2 ← (const byte*) ppuDataFill::ppuDataPrepare1_$4 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR Eliminating unused variable (byte*~) ppuDataFill::ppuDataPrepare1_$3 and assignment [5] (byte*~) ppuDataFill::ppuDataPrepare1_$3 ← (const byte*) ppuDataFill::ppuDataPrepare1_$5 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR @@ -1647,10 +1649,10 @@ Eliminating unused variable (byte*~) main::initNES1_waitForVBlank2_$2 and assign Eliminating unused variable (byte*~) main::enableVideoOutput1_$0 and assignment [69] (byte*~) main::enableVideoOutput1_$0 ← (const byte*) main::enableVideoOutput1_$2 Eliminating unused variable (byte*~) main::enableVideoOutput1_$1 and assignment [71] (byte*~) main::enableVideoOutput1_$1 ← (const byte*) main::enableVideoOutput1_$3 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUMASK Eliminating unused variable (byte*~) main::$54 and assignment [73] (byte*~) main::$54 ← (const byte*) main::$55 -Eliminating unused variable (byte*~) vblank::$1 and assignment [171] (byte*~) vblank::$1 ← (const byte*) vblank::$3 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUSCROLL -Eliminating unused variable (byte*~) vblank::$2 and assignment [173] (byte*~) vblank::$2 ← (const byte*) vblank::$4 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUSCROLL -Eliminating unused variable (byte*~) vblank::ppuSpriteBufferDmaTransfer1_$1 and assignment [175] (byte*~) vblank::ppuSpriteBufferDmaTransfer1_$1 ← (const byte*) vblank::ppuSpriteBufferDmaTransfer1_$3 + (const byte) OFFSET_STRUCT_RICOH_2C02_OAMADDR -Eliminating unused variable (byte*~) vblank::ppuSpriteBufferDmaTransfer1_$2 and assignment [178] (byte*~) vblank::ppuSpriteBufferDmaTransfer1_$2 ← (const byte*) vblank::ppuSpriteBufferDmaTransfer1_$4 + (const byte) OFFSET_STRUCT_RICOH_2A03_OAMDMA +Eliminating unused variable (byte*~) vblank::$1 and assignment [173] (byte*~) vblank::$1 ← (const byte*) vblank::$3 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUSCROLL +Eliminating unused variable (byte*~) vblank::$2 and assignment [175] (byte*~) vblank::$2 ← (const byte*) vblank::$4 + (const byte) OFFSET_STRUCT_RICOH_2C02_PPUSCROLL +Eliminating unused variable (byte*~) vblank::ppuSpriteBufferDmaTransfer1_$1 and assignment [177] (byte*~) vblank::ppuSpriteBufferDmaTransfer1_$1 ← (const byte*) vblank::ppuSpriteBufferDmaTransfer1_$3 + (const byte) OFFSET_STRUCT_RICOH_2C02_OAMADDR +Eliminating unused variable (byte*~) vblank::ppuSpriteBufferDmaTransfer1_$2 and assignment [180] (byte*~) vblank::ppuSpriteBufferDmaTransfer1_$2 ← (const byte*) vblank::ppuSpriteBufferDmaTransfer1_$4 + (const byte) OFFSET_STRUCT_RICOH_2A03_OAMDMA Eliminating unused constant (const word) main::i#0 Eliminating unused constant (const byte) main::h_bar#0 Eliminating unused constant (const byte) main::sprite_idx#0 @@ -1676,13 +1678,13 @@ Alias main::$50 = main::$46 Alias main::$53 = main::$52 Successful SSA optimization Pass2AliasElimination Alias candidate removed (volatile)scroll_y = main::$14 -Simple Condition (bool~) main::$24 [117] if((word~) main::$23>=(byte) main::h_bar#1) goto main::@26 -Simple Condition (bool~) main::$27 [157] if((word~) main::$25<(byte~) main::$26) goto main::@13 +Simple Condition (bool~) main::$24 [119] if((word~) main::$23>=(byte) main::h_bar#1) goto main::@26 +Simple Condition (bool~) main::$27 [159] if((word~) main::$25<(byte~) main::$26) goto main::@13 Successful SSA optimization Pass2ConditionalJumpSimplification -Negating conditional jump and destination [117] if((word~) main::$23<(byte) main::h_bar#1) goto main::@11 -Negating conditional jump and destination [157] if((word~) main::$25>=(byte~) main::$26) goto main::@11 +Negating conditional jump and destination [119] if((word~) main::$23<(byte) main::h_bar#1) goto main::@11 +Negating conditional jump and destination [159] if((word~) main::$25>=(byte~) main::$26) goto main::@11 Successful SSA optimization Pass2ConditionalJumpSequenceImprovement -Constant right-side identified [149] (byte~) vblank::ppuSpriteBufferDmaTransfer1_$0 ← > (const struct SpriteData*) vblank::ppuSpriteBufferDmaTransfer1_spriteBuffer#0 +Constant right-side identified [151] (byte~) vblank::ppuSpriteBufferDmaTransfer1_$0 ← > (const struct SpriteData*) vblank::ppuSpriteBufferDmaTransfer1_spriteBuffer#0 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) vblank::ppuSpriteBufferDmaTransfer1_$0 = >vblank::ppuSpriteBufferDmaTransfer1_spriteBuffer#0 Successful SSA optimization Pass2ConstantIdentification @@ -1701,13 +1703,13 @@ Inlining Noop Cast [15] (byte*) ppuDataTransfer::cpuSrc#0 ← (byte*)(nomodify v Successful SSA optimization Pass2NopCastInlining Rewriting multiplication to use shift [67] (word~) main::$35 ← (word) main::i#14 * (const byte) SIZEOF_STRUCT_$0 Rewriting multiplication to use shift [74] (word~) main::$36 ← (word) main::i#14 * (const byte) SIZEOF_STRUCT_$0 -Rewriting multiplication to use shift [88] (byte~) main::$38 ← (byte) main::active_balls#1 * (const byte) SIZEOF_STRUCT_$0 -Rewriting multiplication to use shift [93] (word~) main::$40 ← (word) main::i#10 * (const byte) SIZEOF_STRUCT_$0 -Rewriting multiplication to use shift [109] (word~) main::$44 ← (word) main::i#10 * (const byte) SIZEOF_STRUCT_$0 -Rewriting multiplication to use shift [116] (word~) main::$45 ← (word) main::i#10 * (const byte) SIZEOF_STRUCT_$0 -Rewriting multiplication to use shift [120] (word~) main::$50 ← (word) main::i#10 * (const byte) SIZEOF_STRUCT_$0 -Rewriting multiplication to use shift [123] (byte~) main::$48 ← (byte) main::sprite_idx#3 * (const byte) SIZEOF_STRUCT_SPRITEDATA -Rewriting multiplication to use shift [132] (word~) main::$53 ← (word) main::i#10 * (const byte) SIZEOF_STRUCT_$0 +Rewriting multiplication to use shift [88] (word~) main::$38 ← (word) main::active_balls#1 * (const byte) SIZEOF_STRUCT_$0 +Rewriting multiplication to use shift [95] (word~) main::$40 ← (word) main::i#10 * (const byte) SIZEOF_STRUCT_$0 +Rewriting multiplication to use shift [111] (word~) main::$44 ← (word) main::i#10 * (const byte) SIZEOF_STRUCT_$0 +Rewriting multiplication to use shift [118] (word~) main::$45 ← (word) main::i#10 * (const byte) SIZEOF_STRUCT_$0 +Rewriting multiplication to use shift [122] (word~) main::$50 ← (word) main::i#10 * (const byte) SIZEOF_STRUCT_$0 +Rewriting multiplication to use shift [125] (byte~) main::$48 ← (byte) main::sprite_idx#3 * (const byte) SIZEOF_STRUCT_SPRITEDATA +Rewriting multiplication to use shift [134] (word~) main::$53 ← (word) main::i#10 * (const byte) SIZEOF_STRUCT_$0 Successful SSA optimization Pass2MultiplyToShiftRewriting Inlining constant with var siblings (const word) ppuDataFill::i#0 Inlining constant with different constant siblings (const nomodify void*) ppuDataFill::ppuData#0 @@ -1724,7 +1726,7 @@ Inlining constant with var siblings (const word) ppuDataTransfer::size#1 Inlining constant with different constant siblings (const nomodify void*) ppuDataTransfer::ppuData#1 Inlining constant with var siblings (const nomodify void*) ppuDataTransfer::cpuData#1 Inlining constant with var siblings (const byte) main::initNES1_i#0 -Inlining constant with var siblings (const byte) main::active_balls#0 +Inlining constant with var siblings (const word) main::active_balls#0 Inlining constant with var siblings (const byte) main::timer#0 Inlining constant with var siblings (const byte) main::timer_2#0 Inlining constant with var siblings (const word) main::i#1 @@ -1734,7 +1736,7 @@ Inlining constant with var siblings (const byte) main::timer#2 Inlining constant with var siblings (const word) rand_state#19 Constant inlined OFFSET_STRUCT_$0_Y_POSITION = (byte) 2 Constant inlined ppuDataTransfer::i#0 = (word) 0 -Constant inlined main::active_balls#0 = (byte) 0 +Constant inlined main::active_balls#0 = (word) 0 Constant inlined OFFSET_STRUCT_$0_X_VELOCITY = (byte) 4 Constant inlined main::enableVideoOutput1_$3 = (byte*)(const struct RICOH_2C02*) PPU Constant inlined main::enableVideoOutput1_$2 = (byte*)(const struct RICOH_2C02*) PPU @@ -1801,10 +1803,10 @@ 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 +Identified duplicate assignment right side [110] (word~) main::$44 ← (word) main::i#10 << (byte) 3 +Identified duplicate assignment right side [117] (word~) main::$45 ← (word) main::i#10 << (byte) 3 +Identified duplicate assignment right side [121] (word~) main::$50 ← (word) main::i#10 << (byte) 3 +Identified duplicate assignment right side [133] (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 @@ -1833,27 +1835,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:127 rand:135 +Calls in [main] to ppuDataTransfer:40 ppuDataFill:42 ppuDataFill:44 ppuDataTransfer:46 rand:129 rand:137 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 [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 [67] main::active_balls#22 ← main::active_balls#1 +Coalesced [75] main::timer_2#20 ← main::timer_2#1 +Coalesced [76] main::active_balls#20 ← main::active_balls#8 +Coalesced [77] main::timer#20 ← main::timer#15 +Coalesced [122] main::i#16 ← main::i#4 +Coalesced [123] main::sprite_idx#9 ← main::sprite_idx#2 +Coalesced (already) [124] main::active_balls#21 ← main::active_balls#2 +Not coalescing [125] main::timer#21 ← main::timer#1 +Coalesced (already) [126] main::active_balls#23 ← main::active_balls#2 +Coalesced (already) [127] main::timer#22 ← main::timer#3 +Coalesced [128] rand_state#54 ← rand_state#17 +Coalesced [136] rand_state#55 ← rand_state#11 +Coalesced [144] main::i#15 ← main::i#2 +Coalesced (already) [145] rand_state#56 ← rand_state#11 +Coalesced [146] main::initNES1_i#3 ← main::initNES1_i#1 +Coalesced [160] ppuDataTransfer::i#6 ← ppuDataTransfer::i#1 +Coalesced [161] ppuDataTransfer::cpuSrc#7 ← ppuDataTransfer::cpuSrc#1 +Coalesced [174] 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 @@ -2007,7 +2009,7 @@ main::@1: scope:[main] from main::@18 main::@23 to:main::@3 main::@3: scope:[main] from main::@1 main::@14 [50] (byte) main::timer#3 ← phi( main::@1/(byte) 0 main::@14/(byte) main::timer#15 ) - [50] (byte) main::active_balls#2 ← phi( main::@1/(byte) 0 main::@14/(byte) main::active_balls#8 ) + [50] (word) main::active_balls#2 ← phi( main::@1/(word) 0 main::@14/(word) main::active_balls#8 ) [50] (byte) main::timer_2#2 ← phi( main::@1/(byte) 0 main::@14/(byte) main::timer_2#1 ) to:main::@4 main::@4: scope:[main] from main::@3 @@ -2015,189 +2017,191 @@ main::@4: scope:[main] from main::@3 [52] (byte) main::h_bar#1 ← *((const to_nomodify byte*) sine_table + (byte) main::timer_2#1) + (byte) $60 [53] (byte~) main::$14 ← (byte) main::h_bar#1 ^ (byte) $ff [54] (volatile byte) scroll_y ← (byte~) main::$14 - [55] if((byte) main::active_balls#2>=(byte) $32) goto main::@5 + [55] if((word) main::active_balls#2>=(byte) $32) goto main::@5 to:main::@15 main::@15: scope:[main] from main::@4 [56] (byte) main::timer#1 ← ++ (byte) main::timer#3 [57] if((byte) main::timer#3!=(byte) 9) goto main::@25 to:main::@16 main::@16: scope:[main] from main::@15 - [58] (byte) main::active_balls#1 ← ++ (byte) main::active_balls#2 - [59] (byte~) main::$38 ← (byte) main::active_balls#1 << (byte) 3 - [60] *((word*)(const struct $0*) balls + (byte~) main::$38) ← (byte) 0 - [61] *((word*)(const struct $0*) balls+(byte) 2 + (byte~) main::$38) ← (byte) 0 + [58] (word) main::active_balls#1 ← ++ (word) main::active_balls#2 + [59] (word~) main::$38 ← (word) main::active_balls#1 << (byte) 3 + [60] (word*~) main::$61 ← (word*)(const struct $0*) balls + (word~) main::$38 + [61] *((word*~) main::$61) ← (byte) 0 + [62] (word*~) main::$62 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$38 + [63] *((word*~) main::$62) ← (byte) 0 to:main::@5 main::@5: scope:[main] from main::@16 main::@25 main::@4 - [62] (byte) main::timer#15 ← phi( main::@25/(byte) main::timer#21 main::@16/(byte) 0 main::@4/(byte) main::timer#3 ) - [62] (byte) main::active_balls#8 ← phi( main::@25/(byte) main::active_balls#2 main::@16/(byte) main::active_balls#1 main::@4/(byte) main::active_balls#2 ) + [64] (byte) main::timer#15 ← phi( main::@25/(byte) main::timer#21 main::@16/(byte) 0 main::@4/(byte) main::timer#3 ) + [64] (word) main::active_balls#8 ← phi( main::@25/(word) main::active_balls#2 main::@16/(word) main::active_balls#1 main::@4/(word) main::active_balls#2 ) to:main::@6 main::@6: scope:[main] from main::@10 main::@5 - [63] (byte) main::sprite_idx#3 ← phi( main::@10/(byte) main::sprite_idx#2 main::@5/(byte) 0 ) - [63] (word) main::i#10 ← phi( main::@10/(word) main::i#4 main::@5/(byte) 0 ) - [64] if((word) main::i#10<(byte) main::active_balls#8) goto main::@7 + [65] (byte) main::sprite_idx#3 ← phi( main::@10/(byte) main::sprite_idx#2 main::@5/(byte) 0 ) + [65] (word) main::i#10 ← phi( main::@10/(word) main::i#4 main::@5/(byte) 0 ) + [66] if((word) main::i#10<(word) main::active_balls#8) goto main::@7 to:main::@8 main::@8: scope:[main] from main::@6 - [65] *((byte*) 8193) ← (byte) $98 + [67] *((byte*) 8193) ← (byte) $98 to:main::@13 main::@13: scope:[main] from main::@13 main::@8 - [66] if((byte) 0==(volatile byte) vblank_hit) goto main::@13 + [68] if((byte) 0==(volatile byte) vblank_hit) goto main::@13 to:main::@14 main::@14: scope:[main] from main::@13 - [67] (volatile byte) vblank_hit ← (byte) 0 - [68] *((byte*) 8193) ← (byte) $18 + [69] (volatile byte) vblank_hit ← (byte) 0 + [70] *((byte*) 8193) ← (byte) $18 to:main::@3 main::@7: scope:[main] from main::@6 - [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 + [71] (word~) main::$44 ← (word) main::i#10 << (byte) 3 [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::$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::$44 - [78] (word*~) main::$67 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 + [73] (word*~) main::$64 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$44 + [74] (word*~) main::$65 ← (word*)(const struct $0*) balls + (word~) main::$44 + [75] *((word*~) main::$65) ← *((word*~) main::$63) + *((word*~) main::$64) + [76] (word*~) main::$66 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 + [77] (word*~) main::$67 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 + [78] *((word*~) main::$67) ← *((word*~) main::$66) + (byte) $10 [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::$44 - [82] (word~) main::$20 ← *((word*~) main::$69) >> (byte) 8 - [83] if((word~) main::$20>=(byte) 8) goto main::@9 + [80] (word*~) main::$69 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 + [81] (word*~) main::$70 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 + [82] *((word*~) main::$70) ← *((word*~) main::$68) + *((word*~) main::$69) + [83] (word*~) main::$71 ← (word*)(const struct $0*) balls + (word~) main::$44 + [84] (word~) main::$20 ← *((word*~) main::$71) >> (byte) 8 + [85] if((word~) main::$20>=(byte) 8) goto main::@9 to:main::@11 main::@11: scope:[main] from main::@7 - [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 + [86] (word*~) main::$74 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$44 + [87] (word*~) main::$75 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$44 + [88] *((word*~) main::$75) ← *((word*~) main::$74) ^ (word) $ffff to:main::@9 main::@9: scope:[main] from main::@11 main::@7 - [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 + [89] (word*~) main::$72 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 + [90] (word~) main::$23 ← *((word*~) main::$72) >> (byte) 8 + [91] (word*~) main::$73 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 + [92] (word~) main::$25 ← *((word*~) main::$73) >> (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 to:main::@24 main::@24: scope:[main] from main::@9 - [93] if((word~) main::$25>=(byte~) main::$26) goto main::@10 + [95] if((word~) main::$25>=(byte~) main::$26) goto main::@10 to:main::@12 main::@12: scope:[main] from main::@24 - [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 + [96] (word*~) main::$78 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 + [97] (word*~) main::$79 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 + [98] *((word*~) main::$79) ← *((word*~) main::$78) ^ (word) $ffff + [99] (byte~) main::$30 ← (byte) main::h_bar#1 - (byte) 2 + [100] (word~) main::$56 ← (word)(byte~) main::$30 + [101] (word~) main::$31 ← (word~) main::$56 << (byte) 8 + [102] (word*~) main::$80 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 + [103] *((word*~) main::$80) ← (word~) main::$31 to:main::@10 main::@10: scope:[main] from main::@12 main::@24 main::@9 - [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 + [104] (word*~) main::$76 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 + [105] (word~) main::$32 ← *((word*~) main::$76) >> (byte) 8 + [106] (byte~) main::$48 ← (byte) main::sprite_idx#3 << (byte) 2 + [107] *((byte*)(const struct SpriteData*) SPRITE_BUFFER + (byte~) main::$48) ← (byte)(word~) main::$32 + [108] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_TILE + (byte~) main::$48) ← (byte) $a + [109] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_ATTRIBUTES + (byte~) main::$48) ← (byte) 3 + [110] (word*~) main::$77 ← (word*)(const struct $0*) balls + (word~) main::$44 + [111] (word~) main::$33 ← *((word*~) main::$77) >> (byte) 8 + [112] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_X + (byte~) main::$48) ← (byte)(word~) main::$33 + [113] (byte) main::sprite_idx#2 ← ++ (byte) main::sprite_idx#3 + [114] (word) main::i#4 ← ++ (word) main::i#10 to:main::@6 main::@25: scope:[main] from main::@15 - [113] (byte) main::timer#21 ← (byte) main::timer#1 + [115] (byte) main::timer#21 ← (byte) main::timer#1 to:main::@5 main::@2: scope:[main] from main::@1 - [114] phi() - [115] call rand - [116] (word) rand::return#2 ← (word) rand::return#0 + [116] phi() + [117] call rand + [118] (word) rand::return#2 ← (word) rand::return#0 to:main::@22 main::@22: scope:[main] from main::@2 - [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 + [119] (word~) main::$9 ← (word) rand::return#2 + [120] (word~) main::$10 ← (word~) main::$9 & (word) $3ff + [121] (word~) main::$36 ← (word) main::i#14 << (byte) 3 + [122] (word*~) main::$59 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$36 + [123] *((word*~) main::$59) ← (word~) main::$10 + [124] call rand + [125] (word) rand::return#3 ← (word) rand::return#0 to:main::@23 main::@23: scope:[main] from main::@22 - [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 + [126] (word~) main::$11 ← (word) rand::return#3 + [127] (byte~) main::$12 ← (word~) main::$11 & (byte) $ff + [128] (word*~) main::$60 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$36 + [129] *((word*~) main::$60) ← (byte~) main::$12 + [130] (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 - [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 ) + [131] (nomodify void*) ppuDataTransfer::cpuData#2 ← phi( main::@17/(void*)(const to_nomodify byte*) palette main::@21/(void*)(const to_nomodify byte*) h_bar_tilemap ) + [131] (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 - [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 + [132] (byte~) ppuDataTransfer::ppuDataPrepare1_$0 ← > (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 + [133] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataTransfer::ppuDataPrepare1_$0 + [134] (byte~) ppuDataTransfer::ppuDataPrepare1_$1 ← < (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 + [135] *((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 - [134] (byte*) ppuDataTransfer::cpuSrc#6 ← (byte*)(nomodify void*) ppuDataTransfer::cpuData#2 + [136] (byte*) ppuDataTransfer::cpuSrc#6 ← (byte*)(nomodify void*) ppuDataTransfer::cpuData#2 to:ppuDataTransfer::@1 ppuDataTransfer::@1: scope:[ppuDataTransfer] from ppuDataTransfer::@3 ppuDataTransfer::@4 - [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 + [137] (byte*) ppuDataTransfer::cpuSrc#2 ← phi( ppuDataTransfer::@3/(byte*) ppuDataTransfer::cpuSrc#6 ppuDataTransfer::@4/(byte*) ppuDataTransfer::cpuSrc#1 ) + [137] (word) ppuDataTransfer::i#2 ← phi( ppuDataTransfer::@3/(word) 0 ppuDataTransfer::@4/(word) ppuDataTransfer::i#1 ) + [138] if((word) ppuDataTransfer::i#2<(byte) $20*(const byte) SIZEOF_BYTE) goto ppuDataTransfer::@2 to:ppuDataTransfer::@return ppuDataTransfer::@return: scope:[ppuDataTransfer] from ppuDataTransfer::@1 - [137] return + [139] return to:@return ppuDataTransfer::@2: scope:[ppuDataTransfer] from ppuDataTransfer::@1 - [138] (byte) ppuDataTransfer::ppuDataPut1_val#0 ← *((byte*) ppuDataTransfer::cpuSrc#2) + [140] (byte) ppuDataTransfer::ppuDataPut1_val#0 ← *((byte*) ppuDataTransfer::cpuSrc#2) to:ppuDataTransfer::ppuDataPut1 ppuDataTransfer::ppuDataPut1: scope:[ppuDataTransfer] from ppuDataTransfer::@2 - [139] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) ppuDataTransfer::ppuDataPut1_val#0 + [141] *((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 - [140] (byte*) ppuDataTransfer::cpuSrc#1 ← ++ (byte*) ppuDataTransfer::cpuSrc#2 - [141] (word) ppuDataTransfer::i#1 ← ++ (word) ppuDataTransfer::i#2 + [142] (byte*) ppuDataTransfer::cpuSrc#1 ← ++ (byte*) ppuDataTransfer::cpuSrc#2 + [143] (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 - [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 ) + [144] (word) ppuDataFill::size#3 ← phi( main::@19/(word)(number) $20*(number) $1e main::@20/(byte) $40 ) + [144] (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 - [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 + [145] (byte~) ppuDataFill::ppuDataPrepare1_$0 ← > (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 + [146] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataFill::ppuDataPrepare1_$0 + [147] (byte~) ppuDataFill::ppuDataPrepare1_$1 ← < (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 + [148] *((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 - [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 + [149] (word) ppuDataFill::i#2 ← phi( ppuDataFill::ppuDataPrepare1/(word) 0 ppuDataFill::@2/(word) ppuDataFill::i#1 ) + [150] if((word) ppuDataFill::i#2<(word) ppuDataFill::size#3) goto ppuDataFill::ppuDataPut1 to:ppuDataFill::@return ppuDataFill::@return: scope:[ppuDataFill] from ppuDataFill::@1 - [149] return + [151] return to:@return ppuDataFill::ppuDataPut1: scope:[ppuDataFill] from ppuDataFill::@1 - [150] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) 0 + [152] *((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 - [151] (word) ppuDataFill::i#1 ← ++ (word) ppuDataFill::i#2 + [153] (word) ppuDataFill::i#1 ← ++ (word) ppuDataFill::i#2 to:ppuDataFill::@1 (word()) rand() rand: scope:[rand] from main::@2 main::@22 - [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 + [154] (word) rand_state#10 ← phi( main::@2/(word) rand_state#17 main::@22/(word) rand_state#11 ) + [155] (word~) rand::$0 ← (word) rand_state#10 << (byte) 7 + [156] (word) rand_state#0 ← (word) rand_state#10 ^ (word~) rand::$0 + [157] (word~) rand::$1 ← (word) rand_state#0 >> (byte) 9 + [158] (word) rand_state#1 ← (word) rand_state#0 ^ (word~) rand::$1 + [159] (word~) rand::$2 ← (word) rand_state#1 << (byte) 8 + [160] (word) rand_state#11 ← (word) rand_state#1 ^ (word~) rand::$2 + [161] (word) rand::return#0 ← (word) rand_state#11 to:rand::@return rand::@return: scope:[rand] from rand - [160] return + [162] return to:@return @@ -2257,37 +2261,39 @@ VARIABLE REGISTER WEIGHTS (word~) main::$32 500.5 (word~) main::$33 1001.0 (word~) main::$36 43.285714285714285 -(byte~) main::$38 151.5 +(word~) main::$38 101.0 (word~) main::$44 487.6666666666668 (byte~) main::$48 834.1666666666667 (word~) main::$56 2002.0 (word*~) main::$59 202.0 (word*~) main::$60 202.0 -(word*~) main::$61 667.3333333333334 -(word*~) main::$62 1001.0 -(word*~) main::$63 2002.0 +(word*~) main::$61 202.0 +(word*~) main::$62 202.0 +(word*~) main::$63 667.3333333333334 (word*~) main::$64 1001.0 (word*~) main::$65 2002.0 -(word*~) main::$66 667.3333333333334 -(word*~) main::$67 1001.0 -(word*~) main::$68 2002.0 -(word*~) main::$69 2002.0 +(word*~) main::$66 1001.0 +(word*~) main::$67 2002.0 +(word*~) main::$68 667.3333333333334 +(word*~) main::$69 1001.0 (word*~) main::$70 2002.0 (word*~) main::$71 2002.0 -(word*~) main::$72 1001.0 +(word*~) main::$72 2002.0 (word*~) main::$73 2002.0 -(word*~) main::$74 2002.0 +(word*~) main::$74 1001.0 (word*~) main::$75 2002.0 -(word*~) main::$76 1001.0 +(word*~) main::$76 2002.0 (word*~) main::$77 2002.0 -(word*~) main::$78 2002.0 +(word*~) main::$78 1001.0 +(word*~) main::$79 2002.0 +(word*~) main::$80 2002.0 (word~) main::$9 202.0 -(byte) main::active_balls -(byte) main::active_balls#1 75.75 -(byte) main::active_balls#2 56.11111111111111 -(byte) main::active_balls#8 27.54901960784314 +(word) main::active_balls +(word) main::active_balls#1 50.5 +(word) main::active_balls#2 56.11111111111111 +(word) main::active_balls#8 27.54901960784314 (byte) main::h_bar -(byte) main::h_bar#1 55.258620689655174 +(byte) main::h_bar#1 53.41666666666667 (word) main::i (word) main::i#10 88.97777777777777 (word) main::i#14 25.25 @@ -2308,7 +2314,7 @@ VARIABLE REGISTER WEIGHTS (byte) main::timer#21 202.0 (byte) main::timer#3 57.714285714285715 (byte) main::timer_2 -(byte) main::timer_2#1 4.80952380952381 +(byte) main::timer_2#1 4.661538461538462 (byte) main::timer_2#2 202.0 (void()) ppuDataFill((nomodify void*) ppuDataFill::ppuData , (byte) ppuDataFill::val , (word) ppuDataFill::size) (word) ppuDataFill::i @@ -2367,7 +2373,7 @@ VARIABLE REGISTER WEIGHTS (volatile byte) scroll_y loadstore 105.0 interrupt(HARDWARE_STACK)(void()) vblank() (struct SpriteData*) vblank::ppuSpriteBufferDmaTransfer1_spriteBuffer -(volatile byte) vblank_hit loadstore 9.008130081300813 +(volatile byte) vblank_hit loadstore 8.863999999999999 Initial phi equivalence classes [ main::initNES1_i#2 main::initNES1_i#1 ] @@ -2393,9 +2399,9 @@ 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::$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::$44 to live range equivalence class [ main::$44 ] Added variable main::$63 to live range equivalence class [ main::$63 ] Added variable main::$64 to live range equivalence class [ main::$64 ] Added variable main::$65 to live range equivalence class [ main::$65 ] @@ -2403,24 +2409,26 @@ Added variable main::$66 to live range equivalence class [ main::$66 ] 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::$72 to live range equivalence class [ main::$72 ] -Added variable main::$73 to live range equivalence class [ main::$73 ] 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::$20 to live range equivalence class [ main::$20 ] +Added variable main::$74 to live range equivalence class [ main::$74 ] +Added variable main::$75 to live range equivalence class [ main::$75 ] +Added variable main::$72 to live range equivalence class [ main::$72 ] +Added variable main::$23 to live range equivalence class [ main::$23 ] +Added variable main::$73 to live range equivalence class [ main::$73 ] 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::$76 to live range equivalence class [ main::$76 ] -Added variable main::$77 to live range equivalence class [ main::$77 ] +Added variable main::$78 to live range equivalence class [ main::$78 ] +Added variable main::$79 to live range equivalence class [ main::$79 ] 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::$74 to live range equivalence class [ main::$74 ] +Added variable main::$80 to live range equivalence class [ main::$80 ] +Added variable main::$76 to live range equivalence class [ main::$76 ] Added variable main::$32 to live range equivalence class [ main::$32 ] Added variable main::$48 to live range equivalence class [ main::$48 ] -Added variable main::$75 to live range equivalence class [ main::$75 ] +Added variable main::$77 to live range equivalence class [ main::$77 ] 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 ] @@ -2466,9 +2474,9 @@ Complete equivalence classes [ main::$14 ] [ main::timer#1 ] [ main::$38 ] -[ main::$44 ] [ main::$61 ] [ main::$62 ] +[ main::$44 ] [ main::$63 ] [ main::$64 ] [ main::$65 ] @@ -2476,24 +2484,26 @@ Complete equivalence classes [ main::$67 ] [ main::$68 ] [ main::$69 ] -[ main::$20 ] -[ main::$72 ] -[ main::$73 ] [ main::$70 ] -[ main::$23 ] [ main::$71 ] +[ main::$20 ] +[ main::$74 ] +[ main::$75 ] +[ main::$72 ] +[ main::$23 ] +[ main::$73 ] [ main::$25 ] [ main::$26 ] -[ main::$76 ] -[ main::$77 ] +[ main::$78 ] +[ main::$79 ] [ main::$30 ] [ main::$56 ] [ main::$31 ] -[ main::$78 ] -[ main::$74 ] +[ main::$80 ] +[ main::$76 ] [ main::$32 ] [ main::$48 ] -[ main::$75 ] +[ main::$77 ] [ main::$33 ] [ rand::return#2 ] [ main::$9 ] @@ -2518,89 +2528,81 @@ Complete equivalence classes Allocated zp[1]:2 [ main::initNES1_i#2 main::initNES1_i#1 ] Allocated zp[2]:3 [ main::i#14 main::i#2 ] Allocated zp[1]:5 [ main::timer_2#2 main::timer_2#1 ] -Allocated zp[1]:6 [ main::active_balls#2 main::active_balls#8 main::active_balls#1 ] -Allocated zp[1]:7 [ main::timer#3 main::timer#15 main::timer#21 ] -Allocated zp[2]:8 [ main::i#10 main::i#4 ] -Allocated zp[1]:10 [ main::sprite_idx#3 main::sprite_idx#2 ] -Allocated zp[2]:11 [ ppuDataTransfer::ppuDataPrepare1_ppuData#0 ] -Allocated zp[2]:13 [ ppuDataTransfer::cpuData#2 ] -Allocated zp[2]:15 [ ppuDataTransfer::i#2 ppuDataTransfer::i#1 ] -Allocated zp[2]:17 [ ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#6 ppuDataTransfer::cpuSrc#1 ] -Allocated zp[2]:19 [ ppuDataFill::ppuDataPrepare1_ppuData#0 ] -Allocated zp[2]:21 [ ppuDataFill::size#3 ] -Allocated zp[2]:23 [ ppuDataFill::i#2 ppuDataFill::i#1 ] -Allocated zp[2]:25 [ rand_state#10 rand_state#17 rand_state#11 ] -Allocated zp[1]:27 [ scroll_y ] -Allocated zp[1]:28 [ vblank_hit ] -Allocated zp[1]:29 [ main::initNES1_waitForVBlank1_$0 ] -Allocated zp[1]:30 [ main::initNES1_waitForVBlank2_$0 ] -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::$44 ] +Allocated zp[2]:6 [ main::active_balls#2 main::active_balls#8 main::active_balls#1 ] +Allocated zp[1]:8 [ main::timer#3 main::timer#15 main::timer#21 ] +Allocated zp[2]:9 [ main::i#10 main::i#4 ] +Allocated zp[1]:11 [ main::sprite_idx#3 main::sprite_idx#2 ] +Allocated zp[2]:12 [ ppuDataTransfer::ppuDataPrepare1_ppuData#0 ] +Allocated zp[2]:14 [ ppuDataTransfer::cpuData#2 ] +Allocated zp[2]:16 [ ppuDataTransfer::i#2 ppuDataTransfer::i#1 ] +Allocated zp[2]:18 [ ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#6 ppuDataTransfer::cpuSrc#1 ] +Allocated zp[2]:20 [ ppuDataFill::ppuDataPrepare1_ppuData#0 ] +Allocated zp[2]:22 [ ppuDataFill::size#3 ] +Allocated zp[2]:24 [ ppuDataFill::i#2 ppuDataFill::i#1 ] +Allocated zp[2]:26 [ rand_state#10 rand_state#17 rand_state#11 ] +Allocated zp[1]:28 [ scroll_y ] +Allocated zp[1]:29 [ vblank_hit ] +Allocated zp[1]:30 [ main::initNES1_waitForVBlank1_$0 ] +Allocated zp[1]:31 [ main::initNES1_waitForVBlank2_$0 ] +Allocated zp[1]:32 [ main::h_bar#1 ] +Allocated zp[1]:33 [ main::$14 ] +Allocated zp[1]:34 [ main::timer#1 ] +Allocated zp[2]:35 [ main::$38 ] Allocated zp[2]:37 [ main::$61 ] Allocated zp[2]:39 [ main::$62 ] -Allocated zp[2]:41 [ main::$63 ] -Allocated zp[2]:43 [ main::$64 ] -Allocated zp[2]:45 [ main::$65 ] -Allocated zp[2]:47 [ main::$66 ] -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::$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 ] +Allocated zp[2]:41 [ main::$44 ] +Allocated zp[2]:43 [ main::$63 ] +Allocated zp[2]:45 [ main::$64 ] +Allocated zp[2]:47 [ main::$65 ] +Allocated zp[2]:49 [ main::$66 ] +Allocated zp[2]:51 [ main::$67 ] +Allocated zp[2]:53 [ main::$68 ] +Allocated zp[2]:55 [ main::$69 ] +Allocated zp[2]:57 [ main::$70 ] +Allocated zp[2]:59 [ main::$71 ] +Allocated zp[2]:61 [ main::$20 ] +Allocated zp[2]:63 [ main::$74 ] +Allocated zp[2]:65 [ main::$75 ] +Allocated zp[2]:67 [ main::$72 ] +Allocated zp[2]:69 [ main::$23 ] +Allocated zp[2]:71 [ main::$73 ] +Allocated zp[2]:73 [ main::$25 ] +Allocated zp[1]:75 [ main::$26 ] +Allocated zp[2]:76 [ main::$78 ] +Allocated zp[2]:78 [ main::$79 ] +Allocated zp[1]:80 [ main::$30 ] +Allocated zp[2]:81 [ main::$56 ] +Allocated zp[2]:83 [ main::$31 ] +Allocated zp[2]:85 [ main::$80 ] +Allocated zp[2]:87 [ main::$76 ] +Allocated zp[2]:89 [ main::$32 ] +Allocated zp[1]:91 [ main::$48 ] +Allocated zp[2]:92 [ main::$77 ] +Allocated zp[2]:94 [ main::$33 ] +Allocated zp[2]:96 [ rand::return#2 ] +Allocated zp[2]:98 [ main::$9 ] +Allocated zp[2]:100 [ main::$10 ] +Allocated zp[2]:102 [ main::$36 ] +Allocated zp[2]:104 [ main::$59 ] +Allocated zp[2]:106 [ rand::return#3 ] +Allocated zp[2]:108 [ main::$11 ] +Allocated zp[1]:110 [ main::$12 ] +Allocated zp[2]:111 [ main::$60 ] +Allocated zp[1]:113 [ ppuDataTransfer::ppuDataPrepare1_$0 ] +Allocated zp[1]:114 [ ppuDataTransfer::ppuDataPrepare1_$1 ] +Allocated zp[1]:115 [ ppuDataTransfer::ppuDataPut1_val#0 ] +Allocated zp[1]:116 [ ppuDataFill::ppuDataPrepare1_$0 ] +Allocated zp[1]:117 [ ppuDataFill::ppuDataPrepare1_$1 ] +Allocated zp[2]:118 [ rand::$0 ] +Allocated zp[2]:120 [ rand_state#0 ] +Allocated zp[2]:122 [ rand::$1 ] +Allocated zp[2]:124 [ rand_state#1 ] +Allocated zp[2]:126 [ rand::$2 ] +Allocated zp[2]:128 [ rand::return#0 ] INITIAL ASM Target platform is nes / MOS6502X // File Comments -//#pragma emulator("java -jar /Applications/Nintaco_bin_2020-05-01/Nintaco.jar") -// Nintendo Entertainment System (NES -// https://en.wikipedia.org/wiki/Nintendo_Entertainment_System_(Model_NES-101) -// https://github.com/gregkrsak/first_nes -// Ricoh 2C02 - NES Picture Processing Unit (PPU) -// Ricoh RP2C02 (NTSC version) / RP2C07 (PAL version), -// https://en.wikipedia.org/wiki/Picture_Processing_Unit -// https://wiki.nesdev.com/w/index.php/PPU_registers -// http://nesdev.com/2C02%20technical%20reference.TXT -// Based on: https://github.com/gregkrsak/first_nes written by Greg M. Krsak, 2018. // Upstart // Nintendo Entertainment System (NES) ROM (Mapper 0 NROM, Vertical Mirroring) // https://sadistech.com/nesromtool/romdoc.html @@ -2671,14 +2673,14 @@ Target platform is nes / MOS6502X .label PPU = $2000 // NES CPU and audion processing unit (APU) .label APU = $4000 - .label scroll_y = $1b - .label vblank_hit = $1c + .label scroll_y = $1c + .label vblank_hit = $1d // The random state variable - .label rand_state = $72 + .label rand_state = $78 // The random state variable - .label rand_state_1 = $76 + .label rand_state_1 = $7c // The random state variable - .label rand_state_2 = $19 + .label rand_state_2 = $1a .segment Code // __start __start: { @@ -2749,55 +2751,57 @@ vblank: { } // main main: { - .label __9 = $5c - .label __10 = $5e - .label __11 = $66 - .label __12 = $68 - .label __14 = $20 - .label __20 = $37 - .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 __44 = $23 - .label __48 = $55 - .label __56 = $4b - .label initNES1_waitForVBlank1___0 = $1d - .label initNES1_waitForVBlank2___0 = $1e + .label __9 = $62 + .label __10 = $64 + .label __11 = $6c + .label __12 = $6e + .label __14 = $21 + .label __20 = $3d + .label __23 = $45 + .label __25 = $49 + .label __26 = $4b + .label __30 = $50 + .label __31 = $53 + .label __32 = $59 + .label __33 = $5e + .label __36 = $66 + .label __38 = $23 + .label __44 = $29 + .label __48 = $5b + .label __56 = $51 + .label initNES1_waitForVBlank1___0 = $1e + .label initNES1_waitForVBlank2___0 = $1f .label initNES1_i = 2 .label i = 3 .label timer_2 = 5 - .label h_bar = $1f - .label timer = $21 + .label h_bar = $20 + .label timer = $22 .label active_balls = 6 - .label sprite_idx = $a - .label i_1 = 8 - .label timer_1 = 7 - .label __59 = $62 - .label __60 = $69 + .label sprite_idx = $b + .label i_1 = 9 + .label timer_1 = 8 + .label __59 = $68 + .label __60 = $6f .label __61 = $25 .label __62 = $27 - .label __63 = $29 - .label __64 = $2b - .label __65 = $2d - .label __66 = $2f - .label __67 = $31 - .label __68 = $33 - .label __69 = $35 - .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 + .label __63 = $2b + .label __64 = $2d + .label __65 = $2f + .label __66 = $31 + .label __67 = $33 + .label __68 = $35 + .label __69 = $37 + .label __70 = $39 + .label __71 = $3b + .label __72 = $43 + .label __73 = $47 + .label __74 = $3f + .label __75 = $41 + .label __76 = $57 + .label __77 = $5c + .label __78 = $4c + .label __79 = $4e + .label __80 = $55 jmp initNES1 // main::initNES1 initNES1: @@ -2922,14 +2926,14 @@ main: { __b17: // [38] call ppuDataTransfer // Transfer the palette - // [129] phi from main::@17 to ppuDataTransfer [phi:main::@17->ppuDataTransfer] + // [131] phi from main::@17 to ppuDataTransfer [phi:main::@17->ppuDataTransfer] ppuDataTransfer_from___b17: - // [129] phi (nomodify void*) ppuDataTransfer::cpuData#2 = (void*)(const to_nomodify byte*) palette [phi:main::@17->ppuDataTransfer#0] -- pvoz1=pvoc1 + // [131] 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 - // [129] phi (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 = (void*)(const nomodify byte*) PPU_PALETTE [phi:main::@17->ppuDataTransfer#1] -- pvoz1=pvoc1 + // [131] phi (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 = (void*)(const nomodify byte*) PPU_PALETTE [phi:main::@17->ppuDataTransfer#1] -- pvoz1=pvoc1 lda #PPU_PALETTE @@ -2942,14 +2946,14 @@ main: { __b19: // [40] call ppuDataFill // Fill the PPU attribute table - // [142] phi from main::@19 to ppuDataFill [phi:main::@19->ppuDataFill] + // [144] phi from main::@19 to ppuDataFill [phi:main::@19->ppuDataFill] ppuDataFill_from___b19: - // [142] phi (word) ppuDataFill::size#3 = (word)(number) $20*(number) $1e [phi:main::@19->ppuDataFill#0] -- vwuz1=vwuc1 + // [144] 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 - // [142] phi (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 = (void*)(const nomodify byte*) PPU_NAME_TABLE_0 [phi:main::@19->ppuDataFill#1] -- pvoz1=pvoc1 + // [144] 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 @@ -2961,14 +2965,14 @@ main: { // main::@20 __b20: // [42] call ppuDataFill - // [142] phi from main::@20 to ppuDataFill [phi:main::@20->ppuDataFill] + // [144] phi from main::@20 to ppuDataFill [phi:main::@20->ppuDataFill] ppuDataFill_from___b20: - // [142] phi (word) ppuDataFill::size#3 = (byte) $40 [phi:main::@20->ppuDataFill#0] -- vwuz1=vbuc1 + // [144] 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 - // [142] phi (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 = (void*)(const nomodify byte*) PPU_ATTRIBUTE_TABLE_0 [phi:main::@20->ppuDataFill#1] -- pvoz1=pvoc1 + // [144] 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 @@ -2980,14 +2984,14 @@ main: { // main::@21 __b21: // [44] call ppuDataTransfer - // [129] phi from main::@21 to ppuDataTransfer [phi:main::@21->ppuDataTransfer] + // [131] phi from main::@21 to ppuDataTransfer [phi:main::@21->ppuDataTransfer] ppuDataTransfer_from___b21: - // [129] phi (nomodify void*) ppuDataTransfer::cpuData#2 = (void*)(const to_nomodify byte*) h_bar_tilemap [phi:main::@21->ppuDataTransfer#0] -- pvoz1=pvoc1 + // [131] 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 - // [129] phi (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 = (void*) 8256 [phi:main::@21->ppuDataTransfer#1] -- pvoz1=pvoc1 + // [131] 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 @@ -3036,9 +3040,11 @@ main: { // [50] phi (byte) main::timer#3 = (byte) 0 [phi:main::@1->main::@3#0] -- vbuz1=vbuc1 lda #0 sta.z timer_1 - // [50] phi (byte) main::active_balls#2 = (byte) 0 [phi:main::@1->main::@3#1] -- vbuz1=vbuc1 - lda #0 + // [50] phi (word) main::active_balls#2 = (word) 0 [phi:main::@1->main::@3#1] -- vwuz1=vwuc1 + lda #<0 sta.z active_balls + lda #>0 + sta.z active_balls+1 // [50] phi (byte) main::timer_2#2 = (byte) 0 [phi:main::@1->main::@3#2] -- vbuz1=vbuc1 lda #0 sta.z timer_2 @@ -3063,10 +3069,13 @@ main: { // [54] (volatile byte) scroll_y ← (byte~) main::$14 -- vbuz1=vbuz2 lda.z __14 sta.z scroll_y - // [55] if((byte) main::active_balls#2>=(byte) $32) goto main::@5 -- vbuz1_ge_vbuc1_then_la1 + // [55] if((word) main::active_balls#2>=(byte) $32) goto main::@5 -- vwuz1_ge_vbuc1_then_la1 + lda.z active_balls+1 + bne __b5_from___b4 lda.z active_balls cmp #$32 bcs __b5_from___b4 + !: jmp __b15 // main::@15 __b15: @@ -3081,47 +3090,73 @@ main: { jmp __b16 // main::@16 __b16: - // [58] (byte) main::active_balls#1 ← ++ (byte) main::active_balls#2 -- vbuz1=_inc_vbuz1 + // [58] (word) main::active_balls#1 ← ++ (word) main::active_balls#2 -- vwuz1=_inc_vwuz1 inc.z active_balls - // [59] (byte~) main::$38 ← (byte) main::active_balls#1 << (byte) 3 -- vbuz1=vbuz2_rol_3 + bne !+ + inc.z active_balls+1 + !: + // [59] (word~) main::$38 ← (word) main::active_balls#1 << (byte) 3 -- vwuz1=vwuz2_rol_3 lda.z active_balls asl - asl - asl sta.z __38 - // [60] *((word*)(const struct $0*) balls + (byte~) main::$38) ← (byte) 0 -- pwuc1_derefidx_vbuz1=vbuc2 + lda.z active_balls+1 + rol + sta.z __38+1 + asl.z __38 + rol.z __38+1 + asl.z __38 + rol.z __38+1 + // [60] (word*~) main::$61 ← (word*)(const struct $0*) balls + (word~) main::$38 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __38 + clc + adc #balls + sta.z __61+1 + // [61] *((word*~) main::$61) ← (byte) 0 -- _deref_pwuz1=vbuc1 lda #0 - ldy.z __38 - sta balls,y + ldy #0 + sta (__61),y + tya + iny + sta (__61),y + // [62] (word*~) main::$62 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$38 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __38 + clc + adc #balls+2 + sta.z __62+1 + // [63] *((word*~) main::$62) ← (byte) 0 -- _deref_pwuz1=vbuc1 lda #0 - sta balls+1,y - // [61] *((word*)(const struct $0*) balls+(byte) 2 + (byte~) main::$38) ← (byte) 0 -- pwuc1_derefidx_vbuz1=vbuc2 - lda #0 - ldy.z __38 - sta balls+2,y - lda #0 - sta balls+2+1,y - // [62] phi from main::@16 to main::@5 [phi:main::@16->main::@5] + ldy #0 + sta (__62),y + tya + iny + sta (__62),y + // [64] phi from main::@16 to main::@5 [phi:main::@16->main::@5] __b5_from___b16: - // [62] phi (byte) main::timer#15 = (byte) 0 [phi:main::@16->main::@5#0] -- vbuz1=vbuc1 + // [64] phi (byte) main::timer#15 = (byte) 0 [phi:main::@16->main::@5#0] -- vbuz1=vbuc1 lda #0 sta.z timer_1 - // [62] phi (byte) main::active_balls#8 = (byte) main::active_balls#1 [phi:main::@16->main::@5#1] -- register_copy + // [64] phi (word) main::active_balls#8 = (word) main::active_balls#1 [phi:main::@16->main::@5#1] -- register_copy jmp __b5 - // [62] phi from main::@25 main::@4 to main::@5 [phi:main::@25/main::@4->main::@5] + // [64] phi from main::@25 main::@4 to main::@5 [phi:main::@25/main::@4->main::@5] __b5_from___b25: __b5_from___b4: - // [62] phi (byte) main::timer#15 = (byte) main::timer#21 [phi:main::@25/main::@4->main::@5#0] -- register_copy - // [62] phi (byte) main::active_balls#8 = (byte) main::active_balls#2 [phi:main::@25/main::@4->main::@5#1] -- register_copy + // [64] phi (byte) main::timer#15 = (byte) main::timer#21 [phi:main::@25/main::@4->main::@5#0] -- register_copy + // [64] phi (word) main::active_balls#8 = (word) main::active_balls#2 [phi:main::@25/main::@4->main::@5#1] -- register_copy jmp __b5 // main::@5 __b5: - // [63] phi from main::@5 to main::@6 [phi:main::@5->main::@6] + // [65] phi from main::@5 to main::@6 [phi:main::@5->main::@6] __b6_from___b5: - // [63] phi (byte) main::sprite_idx#3 = (byte) 0 [phi:main::@5->main::@6#0] -- vbuz1=vbuc1 + // [65] phi (byte) main::sprite_idx#3 = (byte) 0 [phi:main::@5->main::@6#0] -- vbuz1=vbuc1 lda #0 sta.z sprite_idx - // [63] phi (word) main::i#10 = (byte) 0 [phi:main::@5->main::@6#1] -- vwuz1=vbuc1 + // [65] phi (word) main::i#10 = (byte) 0 [phi:main::@5->main::@6#1] -- vwuz1=vbuc1 lda #<0 sta.z i_1 lda #>0 @@ -3129,8 +3164,10 @@ main: { jmp __b6 // main::@6 __b6: - // [64] if((word) main::i#10<(byte) main::active_balls#8) goto main::@7 -- vwuz1_lt_vbuz2_then_la1 + // [66] if((word) main::i#10<(word) main::active_balls#8) goto main::@7 -- vwuz1_lt_vwuz2_then_la1 lda.z i_1+1 + cmp.z active_balls+1 + bcc __b7 bne !+ lda.z i_1 cmp.z active_balls @@ -3139,35 +3176,35 @@ main: { jmp __b8 // main::@8 __b8: - // [65] *((byte*) 8193) ← (byte) $98 -- _deref_pbuc1=vbuc2 + // [67] *((byte*) 8193) ← (byte) $98 -- _deref_pbuc1=vbuc2 lda #$98 sta $2001 jmp __b13 // main::@13 __b13: - // [66] if((byte) 0==(volatile byte) vblank_hit) goto main::@13 -- vbuc1_eq_vbuz1_then_la1 + // [68] if((byte) 0==(volatile byte) vblank_hit) goto main::@13 -- vbuc1_eq_vbuz1_then_la1 lda #0 cmp.z vblank_hit beq __b13 jmp __b14 // main::@14 __b14: - // [67] (volatile byte) vblank_hit ← (byte) 0 -- vbuz1=vbuc1 + // [69] (volatile byte) vblank_hit ← (byte) 0 -- vbuz1=vbuc1 // wait for vblank lda #0 sta.z vblank_hit - // [68] *((byte*) 8193) ← (byte) $18 -- _deref_pbuc1=vbuc2 + // [70] *((byte*) 8193) ← (byte) $18 -- _deref_pbuc1=vbuc2 lda #$18 sta $2001 // [50] phi from main::@14 to main::@3 [phi:main::@14->main::@3] __b3_from___b14: // [50] phi (byte) main::timer#3 = (byte) main::timer#15 [phi:main::@14->main::@3#0] -- register_copy - // [50] phi (byte) main::active_balls#2 = (byte) main::active_balls#8 [phi:main::@14->main::@3#1] -- register_copy + // [50] phi (word) main::active_balls#2 = (word) main::active_balls#8 [phi:main::@14->main::@3#1] -- register_copy // [50] phi (byte) main::timer_2#2 = (byte) main::timer_2#1 [phi:main::@14->main::@3#2] -- register_copy jmp __b3 // main::@7 __b7: - // [69] (word~) main::$44 ← (word) main::i#10 << (byte) 3 -- vwuz1=vwuz2_rol_3 + // [71] (word~) main::$44 ← (word) main::i#10 << (byte) 3 -- vwuz1=vwuz2_rol_3 lda.z i_1 asl sta.z __44 @@ -3178,22 +3215,6 @@ main: { 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::$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::$44 -- pwuz1=pwuc1_plus_vwuz2 lda.z __44 clc @@ -3202,51 +3223,41 @@ main: { lda.z __44+1 adc #>balls sta.z __63+1 - // [73] *((word*~) main::$63) ← *((word*~) main::$61) + *((word*~) main::$62) -- _deref_pwuz1=_deref_pwuz2_plus__deref_pwuz3 - ldy #0 - lda (__61),y - clc - adc (__62),y - sta (__63),y - iny - lda (__61),y - adc (__62),y - sta (__63),y - // [74] (word*~) main::$64 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + // [73] (word*~) main::$64 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 lda.z __44 clc - adc #balls+6 + adc #>balls+4 sta.z __64+1 - // [75] (word*~) main::$65 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + // [74] (word*~) main::$65 ← (word*)(const struct $0*) balls + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __44 + clc + adc #balls + sta.z __65+1 + // [75] *((word*~) main::$65) ← *((word*~) main::$63) + *((word*~) main::$64) -- _deref_pwuz1=_deref_pwuz2_plus__deref_pwuz3 + ldy #0 + lda (__63),y + clc + adc (__64),y + sta (__65),y + iny + lda (__63),y + adc (__64),y + sta (__65),y + // [76] (word*~) main::$66 ← (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 - ldy #0 - lda (__64),y - clc - adc #<$10 - sta (__65),y - iny - lda (__64),y - adc #>$10 - sta (__65),y - // [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 + adc #>balls+6 sta.z __66+1 - // [78] (word*~) main::$67 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + // [77] (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 + // [78] *((word*~) main::$67) ← *((word*~) main::$66) + (byte) $10 -- _deref_pwuz1=_deref_pwuz2_plus_vwuc1 + ldy #0 + lda (__66),y + clc + adc #<$10 + sta (__67),y + iny + lda (__66),y + adc #>$10 + sta (__67),y // [79] (word*~) main::$68 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 lda.z __44 clc @@ -3262,31 +3283,47 @@ main: { lda.z __44+1 adc #>balls+2 sta.z __68+1 - // [80] *((word*~) main::$68) ← *((word*~) main::$66) + *((word*~) main::$67) -- _deref_pwuz1=_deref_pwuz2_plus__deref_pwuz3 - ldy #0 - lda (__66),y + // [80] (word*~) main::$69 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __44 clc - adc (__67),y - sta (__68),y + adc #balls+6 + sta.z __69+1 + // [81] (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 + // [82] *((word*~) main::$70) ← *((word*~) main::$68) + *((word*~) main::$69) -- _deref_pwuz1=_deref_pwuz2_plus__deref_pwuz3 + ldy #0 + lda (__68),y + clc + adc (__69),y + sta (__70),y iny - lda (__66),y - adc (__67),y - sta (__68),y - // [81] (word*~) main::$69 ← (word*)(const struct $0*) balls + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda (__68),y + adc (__69),y + sta (__70),y + // [83] (word*~) main::$71 ← (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 + sta.z __71+1 + // [84] (word~) main::$20 ← *((word*~) main::$71) >> (byte) 8 -- vwuz1=_deref_pwuz2_ror_8 ldy #1 - lda (__69),y + lda (__71),y sta.z __20 lda #0 sta.z __20+1 - // [83] if((word~) main::$20>=(byte) 8) goto main::@9 -- vwuz1_ge_vbuc1_then_la1 + // [85] if((word~) main::$20>=(byte) 8) goto main::@9 -- vwuz1_ge_vbuc1_then_la1 lda.z __20+1 bne __b9 lda.z __20 @@ -3296,67 +3333,67 @@ main: { jmp __b11 // main::@11 __b11: - // [84] (word*~) main::$72 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + // [86] (word*~) main::$74 ← (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 - // [85] (word*~) main::$73 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + sta.z __74+1 + // [87] (word*~) main::$75 ← (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 - // [86] *((word*~) main::$73) ← *((word*~) main::$72) ^ (word) $ffff -- _deref_pwuz1=_deref_pwuz2_bxor_vwuc1 + sta.z __75+1 + // [88] *((word*~) main::$75) ← *((word*~) main::$74) ^ (word) $ffff -- _deref_pwuz1=_deref_pwuz2_bxor_vwuc1 ldy #0 lda #<$ffff - eor (__72),y - sta (__73),y + eor (__74),y + sta (__75),y iny lda #>$ffff - eor (__72),y - sta (__73),y + eor (__74),y + sta (__75),y jmp __b9 // main::@9 __b9: - // [87] (word*~) main::$70 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + // [89] (word*~) main::$72 ← (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 - // [88] (word~) main::$23 ← *((word*~) main::$70) >> (byte) 8 -- vwuz1=_deref_pwuz2_ror_8 + sta.z __72+1 + // [90] (word~) main::$23 ← *((word*~) main::$72) >> (byte) 8 -- vwuz1=_deref_pwuz2_ror_8 ldy #1 - lda (__70),y + lda (__72),y sta.z __23 lda #0 sta.z __23+1 - // [89] (word*~) main::$71 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + // [91] (word*~) main::$73 ← (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 - // [90] (word~) main::$25 ← *((word*~) main::$71) >> (byte) 8 -- vwuz1=_deref_pwuz2_ror_8 + sta.z __73+1 + // [92] (word~) main::$25 ← *((word*~) main::$73) >> (byte) 8 -- vwuz1=_deref_pwuz2_ror_8 ldy #1 - lda (__71),y + lda (__73),y sta.z __25 lda #0 sta.z __25+1 - // [91] (byte~) main::$26 ← (byte) main::h_bar#1 + (byte) 8 -- vbuz1=vbuz2_plus_vbuc1 + // [93] (byte~) main::$26 ← (byte) main::h_bar#1 + (byte) 8 -- vbuz1=vbuz2_plus_vbuc1 lax.z h_bar axs #-[8] stx.z __26 - // [92] if((word~) main::$23<(byte) main::h_bar#1) goto main::@10 -- vwuz1_lt_vbuz2_then_la1 + // [94] 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 @@ -3366,7 +3403,7 @@ main: { jmp __b24 // main::@24 __b24: - // [93] if((word~) main::$25>=(byte~) main::$26) goto main::@10 -- vwuz1_ge_vbuz2_then_la1 + // [95] if((word~) main::$25>=(byte~) main::$26) goto main::@10 -- vwuz1_ge_vbuz2_then_la1 lda.z __25+1 bne __b10 lda.z __25 @@ -3376,142 +3413,142 @@ main: { jmp __b12 // main::@12 __b12: - // [94] (word*~) main::$76 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + // [96] (word*~) main::$78 ← (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 - // [95] (word*~) main::$77 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + sta.z __78+1 + // [97] (word*~) main::$79 ← (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 - // [96] *((word*~) main::$77) ← *((word*~) main::$76) ^ (word) $ffff -- _deref_pwuz1=_deref_pwuz2_bxor_vwuc1 + sta.z __79+1 + // [98] *((word*~) main::$79) ← *((word*~) main::$78) ^ (word) $ffff -- _deref_pwuz1=_deref_pwuz2_bxor_vwuc1 ldy #0 lda #<$ffff - eor (__76),y - sta (__77),y + eor (__78),y + sta (__79),y iny lda #>$ffff - eor (__76),y - sta (__77),y - // [97] (byte~) main::$30 ← (byte) main::h_bar#1 - (byte) 2 -- vbuz1=vbuz2_minus_2 + eor (__78),y + sta (__79),y + // [99] (byte~) main::$30 ← (byte) main::h_bar#1 - (byte) 2 -- vbuz1=vbuz2_minus_2 lda.z h_bar sec sbc #2 sta.z __30 - // [98] (word~) main::$56 ← (word)(byte~) main::$30 -- vwuz1=_word_vbuz2 + // [100] (word~) main::$56 ← (word)(byte~) main::$30 -- vwuz1=_word_vbuz2 lda.z __30 sta.z __56 lda #0 sta.z __56+1 - // [99] (word~) main::$31 ← (word~) main::$56 << (byte) 8 -- vwuz1=vwuz2_rol_8 + // [101] (word~) main::$31 ← (word~) main::$56 << (byte) 8 -- vwuz1=vwuz2_rol_8 lda.z __56 sta.z __31+1 lda #0 sta.z __31 - // [100] (word*~) main::$78 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + // [102] (word*~) main::$80 ← (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 - // [101] *((word*~) main::$78) ← (word~) main::$31 -- _deref_pwuz1=vwuz2 + sta.z __80+1 + // [103] *((word*~) main::$80) ← (word~) main::$31 -- _deref_pwuz1=vwuz2 ldy #0 lda.z __31 - sta (__78),y + sta (__80),y iny lda.z __31+1 - sta (__78),y + sta (__80),y jmp __b10 // main::@10 __b10: - // [102] (word*~) main::$74 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + // [104] (word*~) main::$76 ← (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 - // [103] (word~) main::$32 ← *((word*~) main::$74) >> (byte) 8 -- vwuz1=_deref_pwuz2_ror_8 + sta.z __76+1 + // [105] (word~) main::$32 ← *((word*~) main::$76) >> (byte) 8 -- vwuz1=_deref_pwuz2_ror_8 ldy #1 - lda (__74),y + lda (__76),y sta.z __32 lda #0 sta.z __32+1 - // [104] (byte~) main::$48 ← (byte) main::sprite_idx#3 << (byte) 2 -- vbuz1=vbuz2_rol_2 + // [106] (byte~) main::$48 ← (byte) main::sprite_idx#3 << (byte) 2 -- vbuz1=vbuz2_rol_2 lda.z sprite_idx asl asl sta.z __48 - // [105] *((byte*)(const struct SpriteData*) SPRITE_BUFFER + (byte~) main::$48) ← (byte)(word~) main::$32 -- pbuc1_derefidx_vbuz1=_byte_vwuz2 + // [107] *((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 - // [106] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_TILE + (byte~) main::$48) ← (byte) $a -- pbuc1_derefidx_vbuz1=vbuc2 + // [108] *((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 - // [107] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_ATTRIBUTES + (byte~) main::$48) ← (byte) 3 -- pbuc1_derefidx_vbuz1=vbuc2 + // [109] *((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 - // [108] (word*~) main::$75 ← (word*)(const struct $0*) balls + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + // [110] (word*~) main::$77 ← (word*)(const struct $0*) balls + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 lda.z __44 clc adc #balls - sta.z __75+1 - // [109] (word~) main::$33 ← *((word*~) main::$75) >> (byte) 8 -- vwuz1=_deref_pwuz2_ror_8 + sta.z __77+1 + // [111] (word~) main::$33 ← *((word*~) main::$77) >> (byte) 8 -- vwuz1=_deref_pwuz2_ror_8 ldy #1 - lda (__75),y + lda (__77),y sta.z __33 lda #0 sta.z __33+1 - // [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 + // [112] *((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 - // [111] (byte) main::sprite_idx#2 ← ++ (byte) main::sprite_idx#3 -- vbuz1=_inc_vbuz1 + // [113] (byte) main::sprite_idx#2 ← ++ (byte) main::sprite_idx#3 -- vbuz1=_inc_vbuz1 inc.z sprite_idx - // [112] (word) main::i#4 ← ++ (word) main::i#10 -- vwuz1=_inc_vwuz1 + // [114] (word) main::i#4 ← ++ (word) main::i#10 -- vwuz1=_inc_vwuz1 inc.z i_1 bne !+ inc.z i_1+1 !: - // [63] phi from main::@10 to main::@6 [phi:main::@10->main::@6] + // [65] phi from main::@10 to main::@6 [phi:main::@10->main::@6] __b6_from___b10: - // [63] phi (byte) main::sprite_idx#3 = (byte) main::sprite_idx#2 [phi:main::@10->main::@6#0] -- register_copy - // [63] phi (word) main::i#10 = (word) main::i#4 [phi:main::@10->main::@6#1] -- register_copy + // [65] phi (byte) main::sprite_idx#3 = (byte) main::sprite_idx#2 [phi:main::@10->main::@6#0] -- register_copy + // [65] phi (word) main::i#10 = (word) main::i#4 [phi:main::@10->main::@6#1] -- register_copy jmp __b6 // main::@25 __b25: - // [113] (byte) main::timer#21 ← (byte) main::timer#1 -- vbuz1=vbuz2 + // [115] (byte) main::timer#21 ← (byte) main::timer#1 -- vbuz1=vbuz2 lda.z timer sta.z timer_1 jmp __b5_from___b25 - // [114] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // [116] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: jmp __b2 // main::@2 __b2: - // [115] call rand - // [152] phi from main::@2 to rand [phi:main::@2->rand] + // [117] call rand + // [154] phi from main::@2 to rand [phi:main::@2->rand] rand_from___b2: - // [152] phi (word) rand_state#10 = (word) rand_state#17 [phi:main::@2->rand#0] -- register_copy + // [154] phi (word) rand_state#10 = (word) rand_state#17 [phi:main::@2->rand#0] -- register_copy jsr rand - // [116] (word) rand::return#2 ← (word) rand::return#0 -- vwuz1=vwuz2 + // [118] (word) rand::return#2 ← (word) rand::return#0 -- vwuz1=vwuz2 lda.z rand.return sta.z rand.return_1 lda.z rand.return+1 @@ -3519,19 +3556,19 @@ main: { jmp __b22 // main::@22 __b22: - // [117] (word~) main::$9 ← (word) rand::return#2 -- vwuz1=vwuz2 + // [119] (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 - // [118] (word~) main::$10 ← (word~) main::$9 & (word) $3ff -- vwuz1=vwuz2_band_vwuc1 + // [120] (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 - // [119] (word~) main::$36 ← (word) main::i#14 << (byte) 3 -- vwuz1=vwuz2_rol_3 + // [121] (word~) main::$36 ← (word) main::i#14 << (byte) 3 -- vwuz1=vwuz2_rol_3 lda.z i asl sta.z __36 @@ -3542,7 +3579,7 @@ main: { rol.z __36+1 asl.z __36 rol.z __36+1 - // [120] (word*~) main::$59 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$36 -- pwuz1=pwuc1_plus_vwuz2 + // [122] (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 + // [123] *((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] + // [124] call rand + // [154] 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 + // [154] 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 + // [125] (word) rand::return#3 ← (word) rand::return#0 -- vwuz1=vwuz2 lda.z rand.return sta.z rand.return_2 lda.z rand.return+1 @@ -3570,16 +3607,16 @@ main: { jmp __b23 // main::@23 __b23: - // [124] (word~) main::$11 ← (word) rand::return#3 -- vwuz1=vwuz2 + // [126] (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 + // [127] (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 + // [128] (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 - // [127] *((word*~) main::$60) ← (byte~) main::$12 -- _deref_pwuz1=vbuz2 + // [129] *((word*~) main::$60) ← (byte~) main::$12 -- _deref_pwuz1=vbuz2 lda.z __12 ldy #0 sta (__60),y tya iny sta (__60),y - // [128] (word) main::i#2 ← ++ (word) main::i#14 -- vwuz1=_inc_vwuz1 + // [130] (word) main::i#2 ← ++ (word) main::i#14 -- vwuz1=_inc_vwuz1 inc.z i bne !+ inc.z i+1 @@ -3610,42 +3647,42 @@ main: { // - ppuData : Pointer in the PPU memory // - cpuData : Pointer to the CPU memory (RAM of ROM) // - size : The number of bytes to transfer -// ppuDataTransfer(void* zp($d) cpuData) +// ppuDataTransfer(void* zp($e) cpuData) ppuDataTransfer: { - .label ppuDataPrepare1___0 = $6b - .label ppuDataPrepare1___1 = $6c - .label ppuDataPrepare1_ppuData = $b - .label ppuDataPut1_val = $6d - .label cpuSrc = $11 - .label i = $f - .label cpuData = $d + .label ppuDataPrepare1___0 = $71 + .label ppuDataPrepare1___1 = $72 + .label ppuDataPrepare1_ppuData = $c + .label ppuDataPut1_val = $73 + .label cpuSrc = $12 + .label i = $10 + .label cpuData = $e jmp ppuDataPrepare1 // ppuDataTransfer::ppuDataPrepare1 ppuDataPrepare1: - // [130] (byte~) ppuDataTransfer::ppuDataPrepare1_$0 ← > (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 -- vbuz1=_hi_pvoz2 + // [132] (byte~) ppuDataTransfer::ppuDataPrepare1_$0 ← > (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 -- vbuz1=_hi_pvoz2 lda.z ppuDataPrepare1_ppuData+1 sta.z ppuDataPrepare1___0 - // [131] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataTransfer::ppuDataPrepare1_$0 -- _deref_pbuc1=vbuz1 + // [133] *((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 - // [132] (byte~) ppuDataTransfer::ppuDataPrepare1_$1 ← < (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 -- vbuz1=_lo_pvoz2 + // [134] (byte~) ppuDataTransfer::ppuDataPrepare1_$1 ← < (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 -- vbuz1=_lo_pvoz2 lda.z ppuDataPrepare1_ppuData sta.z ppuDataPrepare1___1 - // [133] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataTransfer::ppuDataPrepare1_$1 -- _deref_pbuc1=vbuz1 + // [135] *((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: - // [134] (byte*) ppuDataTransfer::cpuSrc#6 ← (byte*)(nomodify void*) ppuDataTransfer::cpuData#2 -- pbuz1=pbuz2 + // [136] (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 - // [135] phi from ppuDataTransfer::@3 to ppuDataTransfer::@1 [phi:ppuDataTransfer::@3->ppuDataTransfer::@1] + // [137] phi from ppuDataTransfer::@3 to ppuDataTransfer::@1 [phi:ppuDataTransfer::@3->ppuDataTransfer::@1] __b1_from___b3: - // [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 + // [137] phi (byte*) ppuDataTransfer::cpuSrc#2 = (byte*) ppuDataTransfer::cpuSrc#6 [phi:ppuDataTransfer::@3->ppuDataTransfer::@1#0] -- register_copy + // [137] phi (word) ppuDataTransfer::i#2 = (word) 0 [phi:ppuDataTransfer::@3->ppuDataTransfer::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z i lda #>0 @@ -3653,7 +3690,7 @@ ppuDataTransfer: { jmp __b1 // ppuDataTransfer::@1 __b1: - // [136] if((word) ppuDataTransfer::i#2<(byte) $20*(const byte) SIZEOF_BYTE) goto ppuDataTransfer::@2 -- vwuz1_lt_vbuc1_then_la1 + // [138] 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 @@ -3663,68 +3700,68 @@ ppuDataTransfer: { jmp __breturn // ppuDataTransfer::@return __breturn: - // [137] return + // [139] return rts // ppuDataTransfer::@2 __b2: - // [138] (byte) ppuDataTransfer::ppuDataPut1_val#0 ← *((byte*) ppuDataTransfer::cpuSrc#2) -- vbuz1=_deref_pbuz2 + // [140] (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: - // [139] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) ppuDataTransfer::ppuDataPut1_val#0 -- _deref_pbuc1=vbuz1 + // [141] *((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: - // [140] (byte*) ppuDataTransfer::cpuSrc#1 ← ++ (byte*) ppuDataTransfer::cpuSrc#2 -- pbuz1=_inc_pbuz1 + // [142] (byte*) ppuDataTransfer::cpuSrc#1 ← ++ (byte*) ppuDataTransfer::cpuSrc#2 -- pbuz1=_inc_pbuz1 inc.z cpuSrc bne !+ inc.z cpuSrc+1 !: - // [141] (word) ppuDataTransfer::i#1 ← ++ (word) ppuDataTransfer::i#2 -- vwuz1=_inc_vwuz1 + // [143] (word) ppuDataTransfer::i#1 ← ++ (word) ppuDataTransfer::i#2 -- vwuz1=_inc_vwuz1 inc.z i bne !+ inc.z i+1 !: - // [135] phi from ppuDataTransfer::@4 to ppuDataTransfer::@1 [phi:ppuDataTransfer::@4->ppuDataTransfer::@1] + // [137] phi from ppuDataTransfer::@4 to ppuDataTransfer::@1 [phi:ppuDataTransfer::@4->ppuDataTransfer::@1] __b1_from___b4: - // [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 + // [137] phi (byte*) ppuDataTransfer::cpuSrc#2 = (byte*) ppuDataTransfer::cpuSrc#1 [phi:ppuDataTransfer::@4->ppuDataTransfer::@1#0] -- register_copy + // [137] phi (word) ppuDataTransfer::i#2 = (word) ppuDataTransfer::i#1 [phi:ppuDataTransfer::@4->ppuDataTransfer::@1#1] -- register_copy jmp __b1 } // ppuDataFill // Fill a number of bytes in the PPU memory // - ppuData : Pointer in the PPU memory // - size : The number of bytes to transfer -// ppuDataFill(word zp($15) size) +// ppuDataFill(word zp($16) size) ppuDataFill: { - .label ppuDataPrepare1___0 = $6e - .label ppuDataPrepare1___1 = $6f - .label ppuDataPrepare1_ppuData = $13 - .label i = $17 - .label size = $15 + .label ppuDataPrepare1___0 = $74 + .label ppuDataPrepare1___1 = $75 + .label ppuDataPrepare1_ppuData = $14 + .label i = $18 + .label size = $16 jmp ppuDataPrepare1 // ppuDataFill::ppuDataPrepare1 ppuDataPrepare1: - // [143] (byte~) ppuDataFill::ppuDataPrepare1_$0 ← > (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 -- vbuz1=_hi_pvoz2 + // [145] (byte~) ppuDataFill::ppuDataPrepare1_$0 ← > (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 -- vbuz1=_hi_pvoz2 lda.z ppuDataPrepare1_ppuData+1 sta.z ppuDataPrepare1___0 - // [144] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataFill::ppuDataPrepare1_$0 -- _deref_pbuc1=vbuz1 + // [146] *((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 - // [145] (byte~) ppuDataFill::ppuDataPrepare1_$1 ← < (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 -- vbuz1=_lo_pvoz2 + // [147] (byte~) ppuDataFill::ppuDataPrepare1_$1 ← < (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 -- vbuz1=_lo_pvoz2 lda.z ppuDataPrepare1_ppuData sta.z ppuDataPrepare1___1 - // [146] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataFill::ppuDataPrepare1_$1 -- _deref_pbuc1=vbuz1 + // [148] *((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 - // [147] phi from ppuDataFill::ppuDataPrepare1 to ppuDataFill::@1 [phi:ppuDataFill::ppuDataPrepare1->ppuDataFill::@1] + // [149] phi from ppuDataFill::ppuDataPrepare1 to ppuDataFill::@1 [phi:ppuDataFill::ppuDataPrepare1->ppuDataFill::@1] __b1_from_ppuDataPrepare1: - // [147] phi (word) ppuDataFill::i#2 = (word) 0 [phi:ppuDataFill::ppuDataPrepare1->ppuDataFill::@1#0] -- vwuz1=vwuc1 + // [149] phi (word) ppuDataFill::i#2 = (word) 0 [phi:ppuDataFill::ppuDataPrepare1->ppuDataFill::@1#0] -- vwuz1=vwuc1 lda #<0 sta.z i lda #>0 @@ -3733,7 +3770,7 @@ ppuDataFill: { // Transfer to PPU // ppuDataFill::@1 __b1: - // [148] if((word) ppuDataFill::i#2<(word) ppuDataFill::size#3) goto ppuDataFill::ppuDataPut1 -- vwuz1_lt_vwuz2_then_la1 + // [150] 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 @@ -3745,24 +3782,24 @@ ppuDataFill: { jmp __breturn // ppuDataFill::@return __breturn: - // [149] return + // [151] return rts // ppuDataFill::ppuDataPut1 ppuDataPut1: - // [150] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [152] *((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: - // [151] (word) ppuDataFill::i#1 ← ++ (word) ppuDataFill::i#2 -- vwuz1=_inc_vwuz1 + // [153] (word) ppuDataFill::i#1 ← ++ (word) ppuDataFill::i#2 -- vwuz1=_inc_vwuz1 inc.z i bne !+ inc.z i+1 !: - // [147] phi from ppuDataFill::@2 to ppuDataFill::@1 [phi:ppuDataFill::@2->ppuDataFill::@1] + // [149] phi from ppuDataFill::@2 to ppuDataFill::@1 [phi:ppuDataFill::@2->ppuDataFill::@1] __b1_from___b2: - // [147] phi (word) ppuDataFill::i#2 = (word) ppuDataFill::i#1 [phi:ppuDataFill::@2->ppuDataFill::@1#0] -- register_copy + // [149] phi (word) ppuDataFill::i#2 = (word) ppuDataFill::i#1 [phi:ppuDataFill::@2->ppuDataFill::@1#0] -- register_copy jmp __b1 } // rand @@ -3771,13 +3808,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 = $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 + .label __0 = $76 + .label __1 = $7a + .label __2 = $7e + .label return = $80 + .label return_1 = $60 + .label return_2 = $6a + // [155] (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 @@ -3786,39 +3823,39 @@ rand: { lda #0 ror sta.z __0 - // [154] (word) rand_state#0 ← (word) rand_state#10 ^ (word~) rand::$0 -- vwuz1=vwuz2_bxor_vwuz3 + // [156] (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 - // [155] (word~) rand::$1 ← (word) rand_state#0 >> (byte) 9 -- vwuz1=vwuz2_ror_9 + // [157] (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 - // [156] (word) rand_state#1 ← (word) rand_state#0 ^ (word~) rand::$1 -- vwuz1=vwuz2_bxor_vwuz3 + // [158] (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 - // [157] (word~) rand::$2 ← (word) rand_state#1 << (byte) 8 -- vwuz1=vwuz2_rol_8 + // [159] (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 - // [158] (word) rand_state#11 ← (word) rand_state#1 ^ (word~) rand::$2 -- vwuz1=vwuz2_bxor_vwuz3 + // [160] (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 - // [159] (word) rand::return#0 ← (word) rand_state#11 -- vwuz1=vwuz2 + // [161] (word) rand::return#0 ← (word) rand_state#11 -- vwuz1=vwuz2 lda.z rand_state_2 sta.z return lda.z rand_state_2+1 @@ -3826,7 +3863,7 @@ rand: { jmp __breturn // rand::@return __breturn: - // [160] return + // [162] return rts } // File Data @@ -3878,94 +3915,94 @@ Statement [46] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUC Statement [47] *((byte*)(const struct RICOH_2C02*) PPU) ← (byte) $88 [ vblank_hit ] ( [ vblank_hit ] { } main:4 [ vblank_hit ] { } ) always clobbers reg byte a Statement [49] if((word) main::i#14<(byte) $32) goto main::@2 [ vblank_hit main::i#14 rand_state#17 ] ( [ vblank_hit main::i#14 rand_state#17 ] { } main:4 [ vblank_hit main::i#14 rand_state#17 ] { } ) always clobbers reg byte a Statement [52] (byte) main::h_bar#1 ← *((const to_nomodify byte*) sine_table + (byte) main::timer_2#1) + (byte) $60 [ vblank_hit main::active_balls#2 main::timer#3 main::timer_2#1 main::h_bar#1 ] ( [ vblank_hit main::active_balls#2 main::timer#3 main::timer_2#1 main::h_bar#1 ] { } main:4 [ vblank_hit main::active_balls#2 main::timer#3 main::timer_2#1 main::h_bar#1 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:6 [ main::active_balls#2 main::active_balls#8 main::active_balls#1 ] -Removing always clobbered register reg byte a as potential for zp[1]:7 [ main::timer#3 main::timer#15 main::timer#21 ] +Removing always clobbered register reg byte a as potential for zp[1]:8 [ main::timer#3 main::timer#15 main::timer#21 ] Removing always clobbered register reg byte a as potential for zp[1]:5 [ main::timer_2#2 main::timer_2#1 ] Statement [53] (byte~) main::$14 ← (byte) main::h_bar#1 ^ (byte) $ff [ vblank_hit main::active_balls#2 main::timer#3 main::timer_2#1 main::h_bar#1 main::$14 ] ( [ vblank_hit main::active_balls#2 main::timer#3 main::timer_2#1 main::h_bar#1 main::$14 ] { } main:4 [ vblank_hit main::active_balls#2 main::timer#3 main::timer_2#1 main::h_bar#1 main::$14 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:31 [ main::h_bar#1 ] -Statement [59] (byte~) main::$38 ← (byte) main::active_balls#1 << (byte) 3 [ vblank_hit main::timer_2#1 main::h_bar#1 main::active_balls#1 main::$38 ] ( [ vblank_hit main::timer_2#1 main::h_bar#1 main::active_balls#1 main::$38 ] { } main:4 [ vblank_hit main::timer_2#1 main::h_bar#1 main::active_balls#1 main::$38 ] { } ) always clobbers reg byte a -Statement [60] *((word*)(const struct $0*) balls + (byte~) main::$38) ← (byte) 0 [ vblank_hit main::timer_2#1 main::h_bar#1 main::active_balls#1 main::$38 ] ( [ vblank_hit main::timer_2#1 main::h_bar#1 main::active_balls#1 main::$38 ] { } main:4 [ vblank_hit main::timer_2#1 main::h_bar#1 main::active_balls#1 main::$38 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:34 [ main::$38 ] -Statement [61] *((word*)(const struct $0*) balls+(byte) 2 + (byte~) main::$38) ← (byte) 0 [ vblank_hit main::timer_2#1 main::h_bar#1 main::active_balls#1 ] ( [ vblank_hit main::timer_2#1 main::h_bar#1 main::active_balls#1 ] { } main:4 [ vblank_hit main::timer_2#1 main::h_bar#1 main::active_balls#1 ] { } ) always clobbers reg byte a -Statement [64] if((word) main::i#10<(byte) main::active_balls#8) goto main::@7 [ 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 -Removing always clobbered register reg byte a as potential for zp[1]:10 [ main::sprite_idx#3 main::sprite_idx#2 ] -Statement [65] *((byte*) 8193) ← (byte) $98 [ 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 [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::$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 a as potential for zp[1]:32 [ main::h_bar#1 ] +Statement [55] if((word) main::active_balls#2>=(byte) $32) goto main::@5 [ vblank_hit main::active_balls#2 main::timer#3 main::timer_2#1 main::h_bar#1 ] ( [ vblank_hit main::active_balls#2 main::timer#3 main::timer_2#1 main::h_bar#1 ] { } main:4 [ vblank_hit main::active_balls#2 main::timer#3 main::timer_2#1 main::h_bar#1 ] { } ) always clobbers reg byte a +Statement [59] (word~) main::$38 ← (word) main::active_balls#1 << (byte) 3 [ vblank_hit main::timer_2#1 main::h_bar#1 main::active_balls#1 main::$38 ] ( [ vblank_hit main::timer_2#1 main::h_bar#1 main::active_balls#1 main::$38 ] { } main:4 [ vblank_hit main::timer_2#1 main::h_bar#1 main::active_balls#1 main::$38 ] { } ) always clobbers reg byte a +Statement [60] (word*~) main::$61 ← (word*)(const struct $0*) balls + (word~) main::$38 [ vblank_hit main::timer_2#1 main::h_bar#1 main::active_balls#1 main::$38 main::$61 ] ( [ vblank_hit main::timer_2#1 main::h_bar#1 main::active_balls#1 main::$38 main::$61 ] { } main:4 [ vblank_hit main::timer_2#1 main::h_bar#1 main::active_balls#1 main::$38 main::$61 ] { } ) always clobbers reg byte a +Statement [61] *((word*~) main::$61) ← (byte) 0 [ vblank_hit main::timer_2#1 main::h_bar#1 main::active_balls#1 main::$38 ] ( [ vblank_hit main::timer_2#1 main::h_bar#1 main::active_balls#1 main::$38 ] { } main:4 [ vblank_hit main::timer_2#1 main::h_bar#1 main::active_balls#1 main::$38 ] { } ) 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::$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 +Removing always clobbered register reg byte y as potential for zp[1]:32 [ main::h_bar#1 ] +Statement [62] (word*~) main::$62 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$38 [ vblank_hit main::timer_2#1 main::h_bar#1 main::active_balls#1 main::$62 ] ( [ vblank_hit main::timer_2#1 main::h_bar#1 main::active_balls#1 main::$62 ] { } main:4 [ vblank_hit main::timer_2#1 main::h_bar#1 main::active_balls#1 main::$62 ] { } ) always clobbers reg byte a +Statement [63] *((word*~) main::$62) ← (byte) 0 [ vblank_hit main::timer_2#1 main::h_bar#1 main::active_balls#1 ] ( [ vblank_hit main::timer_2#1 main::h_bar#1 main::active_balls#1 ] { } main:4 [ vblank_hit main::timer_2#1 main::h_bar#1 main::active_balls#1 ] { } ) always clobbers reg byte a reg byte y +Statement [66] if((word) main::i#10<(word) main::active_balls#8) goto main::@7 [ 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 +Removing always clobbered register reg byte a as potential for zp[1]:11 [ main::sprite_idx#3 main::sprite_idx#2 ] +Statement [67] *((byte*) 8193) ← (byte) $98 [ 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] 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 [69] (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 [70] *((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 [71] (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 [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::$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::$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::$63 ] { } ) always clobbers reg byte a +Statement [73] (word*~) main::$64 ← (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::$63 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::$63 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::$63 main::$64 ] { } ) always clobbers reg byte a +Statement [74] (word*~) main::$65 ← (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::$63 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::$63 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::$63 main::$64 main::$65 ] { } ) always clobbers reg byte a +Statement [75] *((word*~) main::$65) ← *((word*~) main::$63) + *((word*~) 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 ] ( [ vblank_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]:8 [ main::timer#3 main::timer#15 main::timer#21 ] +Removing always clobbered register reg byte y as potential for zp[1]:11 [ main::sprite_idx#3 main::sprite_idx#2 ] +Statement [76] (word*~) main::$66 ← (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 ] ( [ vblank_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 [77] (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 [78] *((word*~) main::$67) ← *((word*~) main::$66) + (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 [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::$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::$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::$68 ] { } ) always clobbers reg byte a +Statement [80] (word*~) main::$69 ← (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::$68 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::$68 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::$68 main::$69 ] { } ) always clobbers reg byte a +Statement [81] (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::$68 main::$69 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::$68 main::$69 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::$68 main::$69 main::$70 ] { } ) always clobbers reg byte a +Statement [82] *((word*~) main::$70) ← *((word*~) main::$68) + *((word*~) 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 ] ( [ vblank_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 [83] (word*~) main::$71 ← (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::$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::$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::$71 ] { } ) always clobbers reg byte a +Statement [84] (word~) main::$20 ← *((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::$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 [85] 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 [86] (word*~) main::$74 ← (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::$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 [87] (word*~) main::$75 ← (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::$74 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::$44 main::$74 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::$44 main::$74 main::$75 ] { } ) always clobbers reg byte a +Statement [88] *((word*~) main::$75) ← *((word*~) main::$74) ^ (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 [89] (word*~) main::$72 ← (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::$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 [90] (word~) main::$23 ← *((word*~) main::$72) >> (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::$73 ← (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::$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::$23 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::$23 main::$73 ] { } ) always clobbers reg byte a +Statement [92] (word~) main::$25 ← *((word*~) main::$73) >> (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 [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::$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 [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::$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]:75 [ 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 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 [96] (word*~) main::$78 ← (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::$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::$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::$78 ] { } ) always clobbers reg byte a +Statement [97] (word*~) main::$79 ← (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::$78 main::$79 ] ( [ vblank_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::$78 main::$79 ] { } 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::$78 main::$79 ] { } ) always clobbers reg byte a +Statement [98] *((word*~) main::$79) ← *((word*~) main::$78) ^ (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 [100] (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 [101] (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 [102] (word*~) main::$80 ← (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::$80 ] ( [ vblank_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::$80 ] { } 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::$80 ] { } ) always clobbers reg byte a +Statement [103] *((word*~) main::$80) ← (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 [104] (word*~) main::$76 ← (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::$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 [105] (word~) main::$32 ← *((word*~) main::$76) >> (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 [106] (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 [107] *((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]:91 [ main::$48 ] +Statement [108] *((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 [109] *((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 [110] (word*~) main::$77 ← (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::$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::$48 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::$48 main::$77 ] { } ) always clobbers reg byte a +Statement [111] (word~) main::$33 ← *((word*~) main::$77) >> (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]:91 [ main::$48 ] +Statement [112] *((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 [118] (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 [119] (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 [120] (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 [121] (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 [122] (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 [123] *((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 [125] (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 [126] (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 [127] (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 [128] (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]:110 [ main::$12 ] +Statement [129] *((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 [136] (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 [138] 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 [140] (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 [150] 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 [152] *((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 [155] (word~) rand::$0 ← (word) rand_state#10 << (byte) 7 [ rand_state#10 rand::$0 ] ( rand:117 [ 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:117 [ vblank_hit main::i#14 rand_state#10 rand::$0 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } rand:124 [ 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:124 [ 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 [156] (word) rand_state#0 ← (word) rand_state#10 ^ (word~) rand::$0 [ rand_state#0 ] ( rand:117 [ vblank_hit main::i#14 rand_state#0 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } main:4::rand:117 [ vblank_hit main::i#14 rand_state#0 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } rand:124 [ 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:124 [ 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 [157] (word~) rand::$1 ← (word) rand_state#0 >> (byte) 9 [ rand_state#0 rand::$1 ] ( rand:117 [ 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:117 [ vblank_hit main::i#14 rand_state#0 rand::$1 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } rand:124 [ 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:124 [ 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 [158] (word) rand_state#1 ← (word) rand_state#0 ^ (word~) rand::$1 [ rand_state#1 ] ( rand:117 [ vblank_hit main::i#14 rand_state#1 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } main:4::rand:117 [ vblank_hit main::i#14 rand_state#1 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } rand:124 [ 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:124 [ 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 [159] (word~) rand::$2 ← (word) rand_state#1 << (byte) 8 [ rand_state#1 rand::$2 ] ( rand:117 [ 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:117 [ vblank_hit main::i#14 rand_state#1 rand::$2 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } rand:124 [ 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:124 [ 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 [160] (word) rand_state#11 ← (word) rand_state#1 ^ (word~) rand::$2 [ rand_state#11 ] ( rand:117 [ vblank_hit main::i#14 rand_state#11 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } main:4::rand:117 [ vblank_hit main::i#14 rand_state#11 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } rand:124 [ 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:124 [ 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 [161] (word) rand::return#0 ← (word) rand_state#11 [ rand_state#11 rand::return#0 ] ( rand:117 [ 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:117 [ vblank_hit main::i#14 rand_state#11 rand::return#0 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } rand:124 [ 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:124 [ 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 @@ -3996,157 +4033,162 @@ Statement [47] *((byte*)(const struct RICOH_2C02*) PPU) ← (byte) $88 [ vblank_ Statement [49] if((word) main::i#14<(byte) $32) goto main::@2 [ vblank_hit main::i#14 rand_state#17 ] ( [ vblank_hit main::i#14 rand_state#17 ] { } main:4 [ vblank_hit main::i#14 rand_state#17 ] { } ) always clobbers reg byte a Statement [52] (byte) main::h_bar#1 ← *((const to_nomodify byte*) sine_table + (byte) main::timer_2#1) + (byte) $60 [ vblank_hit main::active_balls#2 main::timer#3 main::timer_2#1 main::h_bar#1 ] ( [ vblank_hit main::active_balls#2 main::timer#3 main::timer_2#1 main::h_bar#1 ] { } main:4 [ vblank_hit main::active_balls#2 main::timer#3 main::timer_2#1 main::h_bar#1 ] { } ) always clobbers reg byte a Statement [53] (byte~) main::$14 ← (byte) main::h_bar#1 ^ (byte) $ff [ vblank_hit main::active_balls#2 main::timer#3 main::timer_2#1 main::h_bar#1 main::$14 ] ( [ vblank_hit main::active_balls#2 main::timer#3 main::timer_2#1 main::h_bar#1 main::$14 ] { } main:4 [ vblank_hit main::active_balls#2 main::timer#3 main::timer_2#1 main::h_bar#1 main::$14 ] { } ) always clobbers reg byte a -Statement [59] (byte~) main::$38 ← (byte) main::active_balls#1 << (byte) 3 [ vblank_hit main::timer_2#1 main::h_bar#1 main::active_balls#1 main::$38 ] ( [ vblank_hit main::timer_2#1 main::h_bar#1 main::active_balls#1 main::$38 ] { } main:4 [ vblank_hit main::timer_2#1 main::h_bar#1 main::active_balls#1 main::$38 ] { } ) always clobbers reg byte a -Statement [60] *((word*)(const struct $0*) balls + (byte~) main::$38) ← (byte) 0 [ vblank_hit main::timer_2#1 main::h_bar#1 main::active_balls#1 main::$38 ] ( [ vblank_hit main::timer_2#1 main::h_bar#1 main::active_balls#1 main::$38 ] { } main:4 [ vblank_hit main::timer_2#1 main::h_bar#1 main::active_balls#1 main::$38 ] { } ) always clobbers reg byte a -Statement [61] *((word*)(const struct $0*) balls+(byte) 2 + (byte~) main::$38) ← (byte) 0 [ vblank_hit main::timer_2#1 main::h_bar#1 main::active_balls#1 ] ( [ vblank_hit main::timer_2#1 main::h_bar#1 main::active_balls#1 ] { } main:4 [ vblank_hit main::timer_2#1 main::h_bar#1 main::active_balls#1 ] { } ) always clobbers reg byte a -Statement [64] if((word) main::i#10<(byte) main::active_balls#8) goto main::@7 [ 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 [65] *((byte*) 8193) ← (byte) $98 [ 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 [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::$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 +Statement [55] if((word) main::active_balls#2>=(byte) $32) goto main::@5 [ vblank_hit main::active_balls#2 main::timer#3 main::timer_2#1 main::h_bar#1 ] ( [ vblank_hit main::active_balls#2 main::timer#3 main::timer_2#1 main::h_bar#1 ] { } main:4 [ vblank_hit main::active_balls#2 main::timer#3 main::timer_2#1 main::h_bar#1 ] { } ) always clobbers reg byte a +Statement [59] (word~) main::$38 ← (word) main::active_balls#1 << (byte) 3 [ vblank_hit main::timer_2#1 main::h_bar#1 main::active_balls#1 main::$38 ] ( [ vblank_hit main::timer_2#1 main::h_bar#1 main::active_balls#1 main::$38 ] { } main:4 [ vblank_hit main::timer_2#1 main::h_bar#1 main::active_balls#1 main::$38 ] { } ) always clobbers reg byte a +Statement [60] (word*~) main::$61 ← (word*)(const struct $0*) balls + (word~) main::$38 [ vblank_hit main::timer_2#1 main::h_bar#1 main::active_balls#1 main::$38 main::$61 ] ( [ vblank_hit main::timer_2#1 main::h_bar#1 main::active_balls#1 main::$38 main::$61 ] { } main:4 [ vblank_hit main::timer_2#1 main::h_bar#1 main::active_balls#1 main::$38 main::$61 ] { } ) always clobbers reg byte a +Statement [61] *((word*~) main::$61) ← (byte) 0 [ vblank_hit main::timer_2#1 main::h_bar#1 main::active_balls#1 main::$38 ] ( [ vblank_hit main::timer_2#1 main::h_bar#1 main::active_balls#1 main::$38 ] { } main:4 [ vblank_hit main::timer_2#1 main::h_bar#1 main::active_balls#1 main::$38 ] { } ) always clobbers reg byte a reg byte y +Statement [62] (word*~) main::$62 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$38 [ vblank_hit main::timer_2#1 main::h_bar#1 main::active_balls#1 main::$62 ] ( [ vblank_hit main::timer_2#1 main::h_bar#1 main::active_balls#1 main::$62 ] { } main:4 [ vblank_hit main::timer_2#1 main::h_bar#1 main::active_balls#1 main::$62 ] { } ) always clobbers reg byte a +Statement [63] *((word*~) main::$62) ← (byte) 0 [ vblank_hit main::timer_2#1 main::h_bar#1 main::active_balls#1 ] ( [ vblank_hit main::timer_2#1 main::h_bar#1 main::active_balls#1 ] { } main:4 [ vblank_hit main::timer_2#1 main::h_bar#1 main::active_balls#1 ] { } ) always clobbers reg byte a reg byte y +Statement [66] if((word) main::i#10<(word) main::active_balls#8) goto main::@7 [ 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 [67] *((byte*) 8193) ← (byte) $98 [ 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] 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 [69] (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 [70] *((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 [71] (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 [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::$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::$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::$63 ] { } ) always clobbers reg byte a +Statement [73] (word*~) main::$64 ← (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::$63 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::$63 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::$63 main::$64 ] { } ) always clobbers reg byte a +Statement [74] (word*~) main::$65 ← (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::$63 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::$63 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::$63 main::$64 main::$65 ] { } ) always clobbers reg byte a +Statement [75] *((word*~) main::$65) ← *((word*~) main::$63) + *((word*~) 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 ] ( [ vblank_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 [76] (word*~) main::$66 ← (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 ] ( [ vblank_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 [77] (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 [78] *((word*~) main::$67) ← *((word*~) main::$66) + (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 [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::$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::$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::$68 ] { } ) always clobbers reg byte a +Statement [80] (word*~) main::$69 ← (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::$68 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::$68 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::$68 main::$69 ] { } ) always clobbers reg byte a +Statement [81] (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::$68 main::$69 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::$68 main::$69 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::$68 main::$69 main::$70 ] { } ) always clobbers reg byte a +Statement [82] *((word*~) main::$70) ← *((word*~) main::$68) + *((word*~) 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 ] ( [ vblank_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 [83] (word*~) main::$71 ← (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::$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::$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::$71 ] { } ) always clobbers reg byte a +Statement [84] (word~) main::$20 ← *((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::$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 [85] 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 [86] (word*~) main::$74 ← (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::$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 [87] (word*~) main::$75 ← (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::$74 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::$44 main::$74 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::$44 main::$74 main::$75 ] { } ) always clobbers reg byte a +Statement [88] *((word*~) main::$75) ← *((word*~) main::$74) ^ (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 [89] (word*~) main::$72 ← (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::$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 [90] (word~) main::$23 ← *((word*~) main::$72) >> (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::$73 ← (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::$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::$23 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::$23 main::$73 ] { } ) always clobbers reg byte a +Statement [92] (word~) main::$25 ← *((word*~) main::$73) >> (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 [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::$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 [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::$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 [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 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 [96] (word*~) main::$78 ← (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::$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::$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::$78 ] { } ) always clobbers reg byte a +Statement [97] (word*~) main::$79 ← (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::$78 main::$79 ] ( [ vblank_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::$78 main::$79 ] { } 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::$78 main::$79 ] { } ) always clobbers reg byte a +Statement [98] *((word*~) main::$79) ← *((word*~) main::$78) ^ (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 [100] (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 [101] (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 [102] (word*~) main::$80 ← (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::$80 ] ( [ vblank_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::$80 ] { } 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::$80 ] { } ) always clobbers reg byte a +Statement [103] *((word*~) main::$80) ← (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 [104] (word*~) main::$76 ← (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::$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 [105] (word~) main::$32 ← *((word*~) main::$76) >> (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 [106] (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 [107] *((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 [108] *((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 [109] *((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 [110] (word*~) main::$77 ← (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::$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::$48 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::$48 main::$77 ] { } ) always clobbers reg byte a +Statement [111] (word~) main::$33 ← *((word*~) main::$77) >> (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 [112] *((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 [118] (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 [119] (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 [120] (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 [121] (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 [122] (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 [123] *((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 [125] (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 [126] (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 [127] (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 [128] (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 [129] *((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 [136] (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 [138] 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 [140] (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 [150] 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 [152] *((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 [155] (word~) rand::$0 ← (word) rand_state#10 << (byte) 7 [ rand_state#10 rand::$0 ] ( rand:117 [ 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:117 [ vblank_hit main::i#14 rand_state#10 rand::$0 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } rand:124 [ 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:124 [ 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 [156] (word) rand_state#0 ← (word) rand_state#10 ^ (word~) rand::$0 [ rand_state#0 ] ( rand:117 [ vblank_hit main::i#14 rand_state#0 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } main:4::rand:117 [ vblank_hit main::i#14 rand_state#0 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } rand:124 [ 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:124 [ 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 [157] (word~) rand::$1 ← (word) rand_state#0 >> (byte) 9 [ rand_state#0 rand::$1 ] ( rand:117 [ 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:117 [ vblank_hit main::i#14 rand_state#0 rand::$1 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } rand:124 [ 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:124 [ 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 [158] (word) rand_state#1 ← (word) rand_state#0 ^ (word~) rand::$1 [ rand_state#1 ] ( rand:117 [ vblank_hit main::i#14 rand_state#1 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } main:4::rand:117 [ vblank_hit main::i#14 rand_state#1 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } rand:124 [ 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:124 [ 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 [159] (word~) rand::$2 ← (word) rand_state#1 << (byte) 8 [ rand_state#1 rand::$2 ] ( rand:117 [ 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:117 [ vblank_hit main::i#14 rand_state#1 rand::$2 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } rand:124 [ 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:124 [ 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 [160] (word) rand_state#11 ← (word) rand_state#1 ^ (word~) rand::$2 [ rand_state#11 ] ( rand:117 [ vblank_hit main::i#14 rand_state#11 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } main:4::rand:117 [ vblank_hit main::i#14 rand_state#11 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } rand:124 [ 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:124 [ 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 [161] (word) rand::return#0 ← (word) rand_state#11 [ rand_state#11 rand::return#0 ] ( rand:117 [ 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:117 [ vblank_hit main::i#14 rand_state#11 rand::return#0 ] { { rand_state#10 = rand_state#17 } { rand::return#0 = rand::return#2 } } rand:124 [ 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:124 [ 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 , -Potential registers zp[1]:6 [ main::active_balls#2 main::active_balls#8 main::active_balls#1 ] : zp[1]:6 , reg byte x , -Potential registers zp[1]:7 [ main::timer#3 main::timer#15 main::timer#21 ] : zp[1]:7 , reg byte x , -Potential registers zp[2]:8 [ main::i#10 main::i#4 ] : zp[2]:8 , -Potential registers zp[1]:10 [ main::sprite_idx#3 main::sprite_idx#2 ] : zp[1]:10 , reg byte x , -Potential registers zp[2]:11 [ ppuDataTransfer::ppuDataPrepare1_ppuData#0 ] : zp[2]:11 , -Potential registers zp[2]:13 [ ppuDataTransfer::cpuData#2 ] : zp[2]:13 , -Potential registers zp[2]:15 [ ppuDataTransfer::i#2 ppuDataTransfer::i#1 ] : zp[2]:15 , -Potential registers zp[2]:17 [ ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#6 ppuDataTransfer::cpuSrc#1 ] : zp[2]:17 , -Potential registers zp[2]:19 [ ppuDataFill::ppuDataPrepare1_ppuData#0 ] : zp[2]:19 , -Potential registers zp[2]:21 [ ppuDataFill::size#3 ] : zp[2]:21 , -Potential registers zp[2]:23 [ ppuDataFill::i#2 ppuDataFill::i#1 ] : zp[2]:23 , -Potential registers zp[2]:25 [ rand_state#10 rand_state#17 rand_state#11 ] : zp[2]:25 , -Potential registers zp[1]:27 [ scroll_y ] : zp[1]:27 , -Potential registers zp[1]:28 [ vblank_hit ] : zp[1]:28 , -Potential registers zp[1]:29 [ main::initNES1_waitForVBlank1_$0 ] : zp[1]:29 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:30 [ main::initNES1_waitForVBlank2_$0 ] : zp[1]:30 , reg byte a , reg byte x , reg byte y , -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::$44 ] : zp[2]:35 , +Potential registers zp[2]:6 [ main::active_balls#2 main::active_balls#8 main::active_balls#1 ] : zp[2]:6 , +Potential registers zp[1]:8 [ main::timer#3 main::timer#15 main::timer#21 ] : zp[1]:8 , reg byte x , +Potential registers zp[2]:9 [ main::i#10 main::i#4 ] : zp[2]:9 , +Potential registers zp[1]:11 [ main::sprite_idx#3 main::sprite_idx#2 ] : zp[1]:11 , reg byte x , +Potential registers zp[2]:12 [ ppuDataTransfer::ppuDataPrepare1_ppuData#0 ] : zp[2]:12 , +Potential registers zp[2]:14 [ ppuDataTransfer::cpuData#2 ] : zp[2]:14 , +Potential registers zp[2]:16 [ ppuDataTransfer::i#2 ppuDataTransfer::i#1 ] : zp[2]:16 , +Potential registers zp[2]:18 [ ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#6 ppuDataTransfer::cpuSrc#1 ] : zp[2]:18 , +Potential registers zp[2]:20 [ ppuDataFill::ppuDataPrepare1_ppuData#0 ] : zp[2]:20 , +Potential registers zp[2]:22 [ ppuDataFill::size#3 ] : zp[2]:22 , +Potential registers zp[2]:24 [ ppuDataFill::i#2 ppuDataFill::i#1 ] : zp[2]:24 , +Potential registers zp[2]:26 [ rand_state#10 rand_state#17 rand_state#11 ] : zp[2]:26 , +Potential registers zp[1]:28 [ scroll_y ] : zp[1]:28 , +Potential registers zp[1]:29 [ vblank_hit ] : zp[1]:29 , +Potential registers zp[1]:30 [ main::initNES1_waitForVBlank1_$0 ] : zp[1]:30 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:31 [ main::initNES1_waitForVBlank2_$0 ] : zp[1]:31 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:32 [ main::h_bar#1 ] : zp[1]:32 , reg byte x , +Potential registers zp[1]:33 [ main::$14 ] : zp[1]:33 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:34 [ main::timer#1 ] : zp[1]:34 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:35 [ main::$38 ] : 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 , -Potential registers zp[2]:43 [ main::$64 ] : zp[2]:43 , -Potential registers zp[2]:45 [ main::$65 ] : zp[2]:45 , -Potential registers zp[2]:47 [ main::$66 ] : zp[2]:47 , -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::$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 , +Potential registers zp[2]:41 [ main::$44 ] : zp[2]:41 , +Potential registers zp[2]:43 [ main::$63 ] : zp[2]:43 , +Potential registers zp[2]:45 [ main::$64 ] : zp[2]:45 , +Potential registers zp[2]:47 [ main::$65 ] : zp[2]:47 , +Potential registers zp[2]:49 [ main::$66 ] : zp[2]:49 , +Potential registers zp[2]:51 [ main::$67 ] : zp[2]:51 , +Potential registers zp[2]:53 [ main::$68 ] : zp[2]:53 , +Potential registers zp[2]:55 [ main::$69 ] : zp[2]:55 , +Potential registers zp[2]:57 [ main::$70 ] : zp[2]:57 , +Potential registers zp[2]:59 [ main::$71 ] : zp[2]:59 , +Potential registers zp[2]:61 [ main::$20 ] : zp[2]:61 , +Potential registers zp[2]:63 [ main::$74 ] : zp[2]:63 , +Potential registers zp[2]:65 [ main::$75 ] : zp[2]:65 , +Potential registers zp[2]:67 [ main::$72 ] : zp[2]:67 , +Potential registers zp[2]:69 [ main::$23 ] : zp[2]:69 , +Potential registers zp[2]:71 [ main::$73 ] : zp[2]:71 , +Potential registers zp[2]:73 [ main::$25 ] : zp[2]:73 , +Potential registers zp[1]:75 [ main::$26 ] : zp[1]:75 , reg byte x , reg byte y , +Potential registers zp[2]:76 [ main::$78 ] : zp[2]:76 , +Potential registers zp[2]:78 [ main::$79 ] : 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::$80 ] : zp[2]:85 , +Potential registers zp[2]:87 [ main::$76 ] : zp[2]:87 , +Potential registers zp[2]:89 [ main::$32 ] : zp[2]:89 , +Potential registers zp[1]:91 [ main::$48 ] : zp[1]:91 , reg byte x , +Potential registers zp[2]:92 [ main::$77 ] : zp[2]:92 , +Potential registers zp[2]:94 [ main::$33 ] : zp[2]:94 , +Potential registers zp[2]:96 [ rand::return#2 ] : zp[2]:96 , +Potential registers zp[2]:98 [ main::$9 ] : zp[2]:98 , +Potential registers zp[2]:100 [ main::$10 ] : zp[2]:100 , +Potential registers zp[2]:102 [ main::$36 ] : zp[2]:102 , +Potential registers zp[2]:104 [ main::$59 ] : zp[2]:104 , +Potential registers zp[2]:106 [ rand::return#3 ] : zp[2]:106 , +Potential registers zp[2]:108 [ main::$11 ] : zp[2]:108 , +Potential registers zp[1]:110 [ main::$12 ] : zp[1]:110 , reg byte x , reg byte y , +Potential registers zp[2]:111 [ main::$60 ] : zp[2]:111 , +Potential registers zp[1]:113 [ ppuDataTransfer::ppuDataPrepare1_$0 ] : zp[1]:113 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:114 [ ppuDataTransfer::ppuDataPrepare1_$1 ] : zp[1]:114 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:115 [ ppuDataTransfer::ppuDataPut1_val#0 ] : zp[1]:115 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:116 [ ppuDataFill::ppuDataPrepare1_$0 ] : zp[1]:116 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:117 [ ppuDataFill::ppuDataPrepare1_$1 ] : zp[1]:117 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:118 [ rand::$0 ] : zp[2]:118 , +Potential registers zp[2]:120 [ rand_state#0 ] : zp[2]:120 , +Potential registers zp[2]:122 [ rand::$1 ] : zp[2]:122 , +Potential registers zp[2]:124 [ rand_state#1 ] : zp[2]:124 , +Potential registers zp[2]:126 [ rand::$2 ] : zp[2]:126 , +Potential registers zp[2]:128 [ rand::return#0 ] : zp[2]:128 , REGISTER UPLIFT SCOPES -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 [main] 2,090.98: zp[2]:9 [ main::i#10 main::i#4 ] 2,002: zp[2]:47 [ main::$65 ] 2,002: zp[2]:51 [ main::$67 ] 2,002: zp[2]:57 [ main::$70 ] 2,002: zp[2]:59 [ main::$71 ] 2,002: zp[2]:61 [ main::$20 ] 2,002: zp[2]:65 [ main::$75 ] 2,002: zp[2]:67 [ main::$72 ] 2,002: zp[2]:71 [ main::$73 ] 2,002: zp[2]:78 [ main::$79 ] 2,002: zp[2]:81 [ main::$56 ] 2,002: zp[2]:85 [ main::$80 ] 2,002: zp[2]:87 [ main::$76 ] 2,002: zp[2]:92 [ main::$77 ] 1,069.25: zp[1]:11 [ main::sprite_idx#3 main::sprite_idx#2 ] 1,001: zp[2]:45 [ main::$64 ] 1,001: zp[2]:49 [ main::$66 ] 1,001: zp[2]:55 [ main::$69 ] 1,001: zp[2]:63 [ main::$74 ] 1,001: zp[1]:75 [ main::$26 ] 1,001: zp[2]:76 [ main::$78 ] 1,001: zp[1]:80 [ main::$30 ] 1,001: zp[2]:83 [ main::$31 ] 1,001: zp[2]:94 [ main::$33 ] 834.17: zp[1]:91 [ main::$48 ] 667.33: zp[2]:43 [ main::$63 ] 667.33: zp[2]:53 [ main::$68 ] 667.33: zp[2]:73 [ main::$25 ] 500.5: zp[2]:69 [ main::$23 ] 500.5: zp[2]:89 [ main::$32 ] 487.67: zp[2]:41 [ main::$44 ] 265.66: zp[1]:8 [ 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.66: zp[1]:5 [ main::timer_2#2 main::timer_2#1 ] 202: zp[1]:30 [ main::initNES1_waitForVBlank1_$0 ] 202: zp[1]:31 [ main::initNES1_waitForVBlank2_$0 ] 202: zp[1]:33 [ main::$14 ] 202: zp[2]:37 [ main::$61 ] 202: zp[2]:39 [ main::$62 ] 202: zp[2]:98 [ main::$9 ] 202: zp[2]:104 [ main::$59 ] 202: zp[2]:108 [ main::$11 ] 202: zp[2]:111 [ main::$60 ] 134.16: zp[2]:6 [ main::active_balls#2 main::active_balls#8 main::active_balls#1 ] 101: zp[1]:34 [ main::timer#1 ] 101: zp[2]:35 [ main::$38 ] 101: zp[1]:110 [ main::$12 ] 67.33: zp[2]:100 [ main::$10 ] 53.42: zp[1]:32 [ main::h_bar#1 ] 43.29: zp[2]:102 [ main::$36 ] +Uplift Scope [ppuDataTransfer] 2,602.6: zp[2]:16 [ ppuDataTransfer::i#2 ppuDataTransfer::i#1 ] 2,002: zp[1]:115 [ ppuDataTransfer::ppuDataPut1_val#0 ] 1,979: zp[2]:18 [ ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#6 ppuDataTransfer::cpuSrc#1 ] 202: zp[1]:113 [ ppuDataTransfer::ppuDataPrepare1_$0 ] 202: zp[1]:114 [ ppuDataTransfer::ppuDataPrepare1_$1 ] 67.33: zp[2]:12 [ ppuDataTransfer::ppuDataPrepare1_ppuData#0 ] 0: zp[2]:14 [ ppuDataTransfer::cpuData#2 ] +Uplift Scope [rand] 2,002: zp[2]:118 [ rand::$0 ] 2,002: zp[2]:122 [ rand::$1 ] 2,002: zp[2]:126 [ rand::$2 ] 300.75: zp[2]:128 [ rand::return#0 ] 202: zp[2]:96 [ rand::return#2 ] 202: zp[2]:106 [ rand::return#3 ] +Uplift Scope [] 1,501.5: zp[2]:120 [ rand_state#0 ] 1,501.5: zp[2]:124 [ rand_state#1 ] 1,298.98: zp[2]:26 [ rand_state#10 rand_state#17 rand_state#11 ] 105: zp[1]:28 [ scroll_y ] 8.86: zp[1]:29 [ vblank_hit ] +Uplift Scope [ppuDataFill] 3,003: zp[2]:24 [ ppuDataFill::i#2 ppuDataFill::i#1 ] 202: zp[1]:116 [ ppuDataFill::ppuDataPrepare1_$0 ] 202: zp[1]:117 [ ppuDataFill::ppuDataPrepare1_$1 ] 111.22: zp[2]:22 [ ppuDataFill::size#3 ] 67.33: zp[2]:20 [ ppuDataFill::ppuDataPrepare1_ppuData#0 ] Uplift Scope [RICOH_2C02] Uplift Scope [RICOH_2A03] Uplift Scope [SpriteData] @@ -4158,123 +4200,112 @@ Uplift Scope [$0] Uplift Scope [vblank] Uplift Scope [__start] -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 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 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 90718 combination zp[1]:7 [ main::timer#3 main::timer#15 main::timer#21 ] +Uplifting [main] best 92192 combination zp[2]:9 [ main::i#10 main::i#4 ] zp[2]:47 [ main::$65 ] zp[2]:51 [ main::$67 ] zp[2]:57 [ main::$70 ] zp[2]:59 [ main::$71 ] zp[2]:61 [ main::$20 ] zp[2]:65 [ main::$75 ] zp[2]:67 [ main::$72 ] zp[2]:71 [ main::$73 ] zp[2]:78 [ main::$79 ] zp[2]:81 [ main::$56 ] zp[2]:85 [ main::$80 ] zp[2]:87 [ main::$76 ] zp[2]:92 [ main::$77 ] zp[1]:11 [ main::sprite_idx#3 main::sprite_idx#2 ] zp[2]:45 [ main::$64 ] zp[2]:49 [ main::$66 ] zp[2]:55 [ main::$69 ] zp[2]:63 [ main::$74 ] zp[1]:75 [ main::$26 ] zp[2]:76 [ main::$78 ] reg byte a [ main::$30 ] zp[2]:83 [ main::$31 ] zp[2]:94 [ main::$33 ] reg byte x [ main::$48 ] zp[2]:43 [ main::$63 ] zp[2]:53 [ main::$68 ] zp[2]:73 [ main::$25 ] zp[2]:69 [ main::$23 ] zp[2]:89 [ main::$32 ] zp[2]:41 [ main::$44 ] zp[1]:8 [ 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]:30 [ main::initNES1_waitForVBlank1_$0 ] zp[1]:31 [ main::initNES1_waitForVBlank2_$0 ] zp[1]:33 [ main::$14 ] zp[2]:37 [ main::$61 ] zp[2]:39 [ main::$62 ] zp[2]:98 [ main::$9 ] zp[2]:104 [ main::$59 ] zp[2]:108 [ main::$11 ] zp[2]:111 [ main::$60 ] zp[2]:6 [ main::active_balls#2 main::active_balls#8 main::active_balls#1 ] zp[1]:34 [ main::timer#1 ] zp[2]:35 [ main::$38 ] zp[1]:110 [ main::$12 ] zp[2]:100 [ main::$10 ] zp[1]:32 [ main::h_bar#1 ] zp[2]:102 [ main::$36 ] +Limited combination testing to 100 combinations of 884736 possible. +Uplifting [ppuDataTransfer] best 92120 combination zp[2]:16 [ ppuDataTransfer::i#2 ppuDataTransfer::i#1 ] reg byte a [ ppuDataTransfer::ppuDataPut1_val#0 ] zp[2]:18 [ ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#6 ppuDataTransfer::cpuSrc#1 ] reg byte a [ ppuDataTransfer::ppuDataPrepare1_$0 ] reg byte a [ ppuDataTransfer::ppuDataPrepare1_$1 ] zp[2]:12 [ ppuDataTransfer::ppuDataPrepare1_ppuData#0 ] zp[2]:14 [ ppuDataTransfer::cpuData#2 ] +Uplifting [rand] best 92120 combination zp[2]:118 [ rand::$0 ] zp[2]:122 [ rand::$1 ] zp[2]:126 [ rand::$2 ] zp[2]:128 [ rand::return#0 ] zp[2]:96 [ rand::return#2 ] zp[2]:106 [ rand::return#3 ] +Uplifting [] best 92120 combination zp[2]:120 [ rand_state#0 ] zp[2]:124 [ rand_state#1 ] zp[2]:26 [ rand_state#10 rand_state#17 rand_state#11 ] zp[1]:28 [ scroll_y ] zp[1]:29 [ vblank_hit ] +Uplifting [ppuDataFill] best 92108 combination zp[2]:24 [ ppuDataFill::i#2 ppuDataFill::i#1 ] reg byte a [ ppuDataFill::ppuDataPrepare1_$0 ] reg byte a [ ppuDataFill::ppuDataPrepare1_$1 ] zp[2]:22 [ ppuDataFill::size#3 ] zp[2]:20 [ ppuDataFill::ppuDataPrepare1_ppuData#0 ] +Uplifting [RICOH_2C02] best 92108 combination +Uplifting [RICOH_2A03] best 92108 combination +Uplifting [SpriteData] best 92108 combination +Uplifting [RADIX] best 92108 combination +Uplifting [printf_format_number] best 92108 combination +Uplifting [printf_buffer_number] best 92108 combination +Uplifting [printf_format_string] best 92108 combination +Uplifting [$0] best 92108 combination +Uplifting [vblank] best 92108 combination +Uplifting [__start] best 92108 combination +Attempting to uplift remaining variables inzp[1]:11 [ main::sprite_idx#3 main::sprite_idx#2 ] +Uplifting [main] best 92108 combination zp[1]:11 [ main::sprite_idx#3 main::sprite_idx#2 ] +Attempting to uplift remaining variables inzp[1]:75 [ main::$26 ] +Uplifting [main] best 92108 combination zp[1]:75 [ main::$26 ] +Attempting to uplift remaining variables inzp[1]:8 [ main::timer#3 main::timer#15 main::timer#21 ] +Uplifting [main] best 92108 combination zp[1]:8 [ 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 90388 combination reg byte x [ main::initNES1_i#2 main::initNES1_i#1 ] +Uplifting [main] best 91778 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 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 90328 combination reg byte a [ main::initNES1_waitForVBlank1_$0 ] -Attempting to uplift remaining variables inzp[1]:30 [ 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 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 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 90138 combination reg byte x [ main::$38 ] -Attempting to uplift remaining variables inzp[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 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 90058 combination zp[1]:31 [ main::h_bar#1 ] -Attempting to uplift remaining variables inzp[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]: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::$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 ] ] +Uplifting [main] best 91778 combination zp[1]:5 [ main::timer_2#2 main::timer_2#1 ] +Attempting to uplift remaining variables inzp[1]:30 [ main::initNES1_waitForVBlank1_$0 ] +Uplifting [main] best 91718 combination reg byte a [ main::initNES1_waitForVBlank1_$0 ] +Attempting to uplift remaining variables inzp[1]:31 [ main::initNES1_waitForVBlank2_$0 ] +Uplifting [main] best 91658 combination reg byte a [ main::initNES1_waitForVBlank2_$0 ] +Attempting to uplift remaining variables inzp[1]:33 [ main::$14 ] +Uplifting [main] best 91598 combination reg byte a [ main::$14 ] +Attempting to uplift remaining variables inzp[1]:28 [ scroll_y ] +Uplifting [] best 91598 combination zp[1]:28 [ scroll_y ] +Attempting to uplift remaining variables inzp[1]:34 [ main::timer#1 ] +Uplifting [main] best 91538 combination reg byte x [ main::timer#1 ] +Attempting to uplift remaining variables inzp[1]:110 [ main::$12 ] +Uplifting [main] best 91518 combination reg byte x [ main::$12 ] +Attempting to uplift remaining variables inzp[1]:32 [ main::h_bar#1 ] +Uplifting [main] best 91518 combination zp[1]:32 [ main::h_bar#1 ] +Attempting to uplift remaining variables inzp[1]:29 [ vblank_hit ] +Uplifting [] best 91518 combination zp[1]:29 [ vblank_hit ] +Coalescing zero page register [ zp[2]:14 [ ppuDataTransfer::cpuData#2 ] ] with [ zp[2]:18 [ ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#6 ppuDataTransfer::cpuSrc#1 ] ] - score: 1 +Coalescing zero page register [ zp[2]:26 [ rand_state#10 rand_state#17 rand_state#11 ] ] with [ zp[2]:120 [ rand_state#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:26 [ rand_state#10 rand_state#17 rand_state#11 rand_state#0 ] ] with [ zp[2]:124 [ rand_state#1 ] ] - score: 1 +Coalescing zero page register [ zp[2]:35 [ main::$38 ] ] with [ zp[2]:39 [ main::$62 ] ] - score: 1 +Coalescing zero page register [ zp[2]:41 [ main::$44 ] ] with [ zp[2]:92 [ main::$77 ] ] - score: 1 +Coalescing zero page register [ zp[2]:59 [ main::$71 ] ] with [ zp[2]:61 [ main::$20 ] ] - score: 1 +Coalescing zero page register [ zp[2]:67 [ main::$72 ] ] with [ zp[2]:69 [ main::$23 ] ] - score: 1 +Coalescing zero page register [ zp[2]:71 [ main::$73 ] ] with [ zp[2]:73 [ main::$25 ] ] - 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::$76 ] ] with [ zp[2]:89 [ main::$32 ] ] - score: 1 +Coalescing zero page register [ zp[2]:96 [ rand::return#2 ] ] with [ zp[2]:98 [ main::$9 ] ] - score: 1 +Coalescing zero page register [ zp[2]:96 [ rand::return#2 main::$9 ] ] with [ zp[2]:128 [ rand::return#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:102 [ main::$36 ] ] with [ zp[2]:111 [ main::$60 ] ] - score: 1 +Coalescing zero page register [ zp[2]:106 [ rand::return#3 ] ] with [ zp[2]:108 [ main::$11 ] ] - score: 1 +Coalescing zero page register [ zp[2]:41 [ main::$44 main::$77 ] ] with [ zp[2]:94 [ main::$33 ] ] - score: 1 +Coalescing zero page register [ zp[2]:96 [ rand::return#2 main::$9 rand::return#0 ] ] with [ zp[2]:100 [ main::$10 ] ] - score: 1 +Coalescing zero page register [ zp[2]:96 [ rand::return#2 main::$9 rand::return#0 main::$10 ] ] with [ zp[2]:106 [ rand::return#3 main::$11 ] ] - score: 1 +Coalescing zero page register [ zp[2]:20 [ ppuDataFill::ppuDataPrepare1_ppuData#0 ] ] with [ zp[2]:12 [ ppuDataTransfer::ppuDataPrepare1_ppuData#0 ] ] +Coalescing zero page register [ zp[2]:22 [ ppuDataFill::size#3 ] ] with [ zp[2]:14 [ ppuDataTransfer::cpuData#2 ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#6 ppuDataTransfer::cpuSrc#1 ] ] +Coalescing zero page register [ zp[2]:24 [ ppuDataFill::i#2 ppuDataFill::i#1 ] ] with [ zp[2]:16 [ ppuDataTransfer::i#2 ppuDataTransfer::i#1 ] ] +Coalescing zero page register [ zp[2]:35 [ main::$38 main::$62 ] ] with [ zp[2]:20 [ ppuDataFill::ppuDataPrepare1_ppuData#0 ppuDataTransfer::ppuDataPrepare1_ppuData#0 ] ] +Coalescing zero page register [ zp[2]:37 [ main::$61 ] ] with [ zp[2]:22 [ ppuDataFill::size#3 ppuDataTransfer::cpuData#2 ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#6 ppuDataTransfer::cpuSrc#1 ] ] +Coalescing zero page register [ zp[2]:41 [ main::$44 main::$77 main::$33 ] ] with [ zp[2]:24 [ 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 ] Allocated (was zp[1]:5) zp[1]:4 [ main::timer_2#2 main::timer_2#1 ] -Allocated (was zp[1]:6) zp[1]:5 [ main::active_balls#2 main::active_balls#8 main::active_balls#1 ] -Allocated (was zp[1]:7) zp[1]:6 [ main::timer#3 main::timer#15 main::timer#21 ] -Allocated (was zp[2]:8) zp[2]:7 [ main::i#10 main::i#4 ] -Allocated (was zp[1]:10) zp[1]:9 [ main::sprite_idx#3 main::sprite_idx#2 ] -Allocated (was zp[2]:25) zp[2]:10 [ rand_state#10 rand_state#17 rand_state#11 rand_state#0 rand_state#1 ] -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::$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 ] -Allocated (was zp[2]:43) zp[2]:23 [ main::$64 ] -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]: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 ] +Allocated (was zp[2]:6) zp[2]:5 [ main::active_balls#2 main::active_balls#8 main::active_balls#1 ] +Allocated (was zp[1]:8) zp[1]:7 [ main::timer#3 main::timer#15 main::timer#21 ] +Allocated (was zp[2]:9) zp[2]:8 [ main::i#10 main::i#4 ] +Allocated (was zp[1]:11) zp[1]:10 [ main::sprite_idx#3 main::sprite_idx#2 ] +Allocated (was zp[2]:26) zp[2]:11 [ rand_state#10 rand_state#17 rand_state#11 rand_state#0 rand_state#1 ] +Allocated (was zp[1]:28) zp[1]:13 [ scroll_y ] +Allocated (was zp[1]:29) zp[1]:14 [ vblank_hit ] +Allocated (was zp[1]:32) zp[1]:15 [ main::h_bar#1 ] +Allocated (was zp[2]:35) zp[2]:16 [ main::$38 main::$62 ppuDataFill::ppuDataPrepare1_ppuData#0 ppuDataTransfer::ppuDataPrepare1_ppuData#0 ] +Allocated (was zp[2]:37) zp[2]:18 [ main::$61 ppuDataFill::size#3 ppuDataTransfer::cpuData#2 ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#6 ppuDataTransfer::cpuSrc#1 ] +Allocated (was zp[2]:41) zp[2]:20 [ main::$44 main::$77 main::$33 ppuDataFill::i#2 ppuDataFill::i#1 ppuDataTransfer::i#2 ppuDataTransfer::i#1 ] +Allocated (was zp[2]:43) zp[2]:22 [ main::$63 ] +Allocated (was zp[2]:45) zp[2]:24 [ main::$64 ] +Allocated (was zp[2]:47) zp[2]:26 [ main::$65 ] +Allocated (was zp[2]:49) zp[2]:28 [ main::$66 ] +Allocated (was zp[2]:51) zp[2]:30 [ main::$67 ] +Allocated (was zp[2]:53) zp[2]:32 [ main::$68 ] +Allocated (was zp[2]:55) zp[2]:34 [ main::$69 ] +Allocated (was zp[2]:57) zp[2]:36 [ main::$70 ] +Allocated (was zp[2]:59) zp[2]:38 [ main::$71 main::$20 ] +Allocated (was zp[2]:63) zp[2]:40 [ main::$74 ] +Allocated (was zp[2]:65) zp[2]:42 [ main::$75 ] +Allocated (was zp[2]:67) zp[2]:44 [ main::$72 main::$23 ] +Allocated (was zp[2]:71) zp[2]:46 [ main::$73 main::$25 ] +Allocated (was zp[1]:75) zp[1]:48 [ main::$26 ] +Allocated (was zp[2]:76) zp[2]:49 [ main::$78 ] +Allocated (was zp[2]:78) zp[2]:51 [ main::$79 ] +Allocated (was zp[2]:81) zp[2]:53 [ main::$56 main::$31 ] +Allocated (was zp[2]:85) zp[2]:55 [ main::$80 ] +Allocated (was zp[2]:87) zp[2]:57 [ main::$76 main::$32 ] +Allocated (was zp[2]:96) zp[2]:59 [ rand::return#2 main::$9 rand::return#0 main::$10 rand::return#3 main::$11 ] +Allocated (was zp[2]:102) zp[2]:61 [ main::$36 main::$60 ] +Allocated (was zp[2]:104) zp[2]:63 [ main::$59 ] +Allocated (was zp[2]:118) zp[2]:65 [ rand::$0 ] +Allocated (was zp[2]:122) zp[2]:67 [ rand::$1 ] +Allocated (was zp[2]:126) zp[2]:69 [ rand::$2 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments -//#pragma emulator("java -jar /Applications/Nintaco_bin_2020-05-01/Nintaco.jar") -// Nintendo Entertainment System (NES -// https://en.wikipedia.org/wiki/Nintendo_Entertainment_System_(Model_NES-101) -// https://github.com/gregkrsak/first_nes -// Ricoh 2C02 - NES Picture Processing Unit (PPU) -// Ricoh RP2C02 (NTSC version) / RP2C07 (PAL version), -// https://en.wikipedia.org/wiki/Picture_Processing_Unit -// https://wiki.nesdev.com/w/index.php/PPU_registers -// http://nesdev.com/2C02%20technical%20reference.TXT -// Based on: https://github.com/gregkrsak/first_nes written by Greg M. Krsak, 2018. // Upstart // Nintendo Entertainment System (NES) ROM (Mapper 0 NROM, Vertical Mirroring) // https://sadistech.com/nesromtool/romdoc.html @@ -4345,10 +4376,10 @@ ASSEMBLER BEFORE OPTIMIZATION .label PPU = $2000 // NES CPU and audion processing unit (APU) .label APU = $4000 - .label scroll_y = $c - .label vblank_hit = $d + .label scroll_y = $d + .label vblank_hit = $e // The random state variable - .label rand_state = $a + .label rand_state = $b .segment Code // __start __start: { @@ -4419,46 +4450,49 @@ vblank: { } // main main: { - .label __9 = $36 - .label __10 = $36 - .label __11 = $36 - .label __20 = $21 - .label __23 = $27 - .label __25 = $29 - .label __26 = $2b - .label __31 = $30 - .label __32 = $34 - .label __33 = $f - .label __36 = $38 - .label __44 = $f - .label __56 = $30 + .label __9 = $3b + .label __10 = $3b + .label __11 = $3b + .label __20 = $26 + .label __23 = $2c + .label __25 = $2e + .label __26 = $30 + .label __31 = $35 + .label __32 = $39 + .label __33 = $14 + .label __36 = $3d + .label __38 = $10 + .label __44 = $14 + .label __56 = $35 .label i = 2 .label timer_2 = 4 - .label h_bar = $e + .label h_bar = $f .label active_balls = 5 - .label sprite_idx = 9 - .label i_1 = 7 - .label timer = 6 - .label __59 = $3a - .label __60 = $38 - .label __61 = $11 - .label __62 = $13 - .label __63 = $15 - .label __64 = $17 - .label __65 = $19 - .label __66 = $1b - .label __67 = $1d - .label __68 = $1f - .label __69 = $21 - .label __70 = $27 - .label __71 = $29 - .label __72 = $23 - .label __73 = $25 - .label __74 = $34 - .label __75 = $f - .label __76 = $2c - .label __77 = $2e - .label __78 = $32 + .label sprite_idx = $a + .label i_1 = 8 + .label timer = 7 + .label __59 = $3f + .label __60 = $3d + .label __61 = $12 + .label __62 = $10 + .label __63 = $16 + .label __64 = $18 + .label __65 = $1a + .label __66 = $1c + .label __67 = $1e + .label __68 = $20 + .label __69 = $22 + .label __70 = $24 + .label __71 = $26 + .label __72 = $2c + .label __73 = $2e + .label __74 = $28 + .label __75 = $2a + .label __76 = $39 + .label __77 = $14 + .label __78 = $31 + .label __79 = $33 + .label __80 = $37 jmp initNES1 // main::initNES1 initNES1: @@ -4569,14 +4603,14 @@ main: { __b17: // [38] call ppuDataTransfer // Transfer the palette - // [129] phi from main::@17 to ppuDataTransfer [phi:main::@17->ppuDataTransfer] + // [131] phi from main::@17 to ppuDataTransfer [phi:main::@17->ppuDataTransfer] ppuDataTransfer_from___b17: - // [129] phi (nomodify void*) ppuDataTransfer::cpuData#2 = (void*)(const to_nomodify byte*) palette [phi:main::@17->ppuDataTransfer#0] -- pvoz1=pvoc1 + // [131] 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 - // [129] phi (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 = (void*)(const nomodify byte*) PPU_PALETTE [phi:main::@17->ppuDataTransfer#1] -- pvoz1=pvoc1 + // [131] phi (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 = (void*)(const nomodify byte*) PPU_PALETTE [phi:main::@17->ppuDataTransfer#1] -- pvoz1=pvoc1 lda #PPU_PALETTE @@ -4589,14 +4623,14 @@ main: { __b19: // [40] call ppuDataFill // Fill the PPU attribute table - // [142] phi from main::@19 to ppuDataFill [phi:main::@19->ppuDataFill] + // [144] phi from main::@19 to ppuDataFill [phi:main::@19->ppuDataFill] ppuDataFill_from___b19: - // [142] phi (word) ppuDataFill::size#3 = (word)(number) $20*(number) $1e [phi:main::@19->ppuDataFill#0] -- vwuz1=vwuc1 + // [144] 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 - // [142] phi (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 = (void*)(const nomodify byte*) PPU_NAME_TABLE_0 [phi:main::@19->ppuDataFill#1] -- pvoz1=pvoc1 + // [144] 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 @@ -4608,14 +4642,14 @@ main: { // main::@20 __b20: // [42] call ppuDataFill - // [142] phi from main::@20 to ppuDataFill [phi:main::@20->ppuDataFill] + // [144] phi from main::@20 to ppuDataFill [phi:main::@20->ppuDataFill] ppuDataFill_from___b20: - // [142] phi (word) ppuDataFill::size#3 = (byte) $40 [phi:main::@20->ppuDataFill#0] -- vwuz1=vbuc1 + // [144] 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 - // [142] phi (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 = (void*)(const nomodify byte*) PPU_ATTRIBUTE_TABLE_0 [phi:main::@20->ppuDataFill#1] -- pvoz1=pvoc1 + // [144] 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 @@ -4627,14 +4661,14 @@ main: { // main::@21 __b21: // [44] call ppuDataTransfer - // [129] phi from main::@21 to ppuDataTransfer [phi:main::@21->ppuDataTransfer] + // [131] phi from main::@21 to ppuDataTransfer [phi:main::@21->ppuDataTransfer] ppuDataTransfer_from___b21: - // [129] phi (nomodify void*) ppuDataTransfer::cpuData#2 = (void*)(const to_nomodify byte*) h_bar_tilemap [phi:main::@21->ppuDataTransfer#0] -- pvoz1=pvoc1 + // [131] 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 - // [129] phi (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 = (void*) 8256 [phi:main::@21->ppuDataTransfer#1] -- pvoz1=pvoc1 + // [131] 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 @@ -4683,9 +4717,11 @@ main: { // [50] phi (byte) main::timer#3 = (byte) 0 [phi:main::@1->main::@3#0] -- vbuz1=vbuc1 lda #0 sta.z timer - // [50] phi (byte) main::active_balls#2 = (byte) 0 [phi:main::@1->main::@3#1] -- vbuz1=vbuc1 - lda #0 + // [50] phi (word) main::active_balls#2 = (word) 0 [phi:main::@1->main::@3#1] -- vwuz1=vwuc1 + lda #<0 sta.z active_balls + lda #>0 + sta.z active_balls+1 // [50] phi (byte) main::timer_2#2 = (byte) 0 [phi:main::@1->main::@3#2] -- vbuz1=vbuc1 lda #0 sta.z timer_2 @@ -4708,10 +4744,13 @@ main: { eor.z h_bar // [54] (volatile byte) scroll_y ← (byte~) main::$14 -- vbuz1=vbuaa sta.z scroll_y - // [55] if((byte) main::active_balls#2>=(byte) $32) goto main::@5 -- vbuz1_ge_vbuc1_then_la1 + // [55] if((word) main::active_balls#2>=(byte) $32) goto main::@5 -- vwuz1_ge_vbuc1_then_la1 + lda.z active_balls+1 + bne __b5_from___b4 lda.z active_balls cmp #$32 bcs __b5_from___b4 + !: jmp __b15 // main::@15 __b15: @@ -4725,45 +4764,73 @@ main: { jmp __b16 // main::@16 __b16: - // [58] (byte) main::active_balls#1 ← ++ (byte) main::active_balls#2 -- vbuz1=_inc_vbuz1 + // [58] (word) main::active_balls#1 ← ++ (word) main::active_balls#2 -- vwuz1=_inc_vwuz1 inc.z active_balls - // [59] (byte~) main::$38 ← (byte) main::active_balls#1 << (byte) 3 -- vbuxx=vbuz1_rol_3 + bne !+ + inc.z active_balls+1 + !: + // [59] (word~) main::$38 ← (word) main::active_balls#1 << (byte) 3 -- vwuz1=vwuz2_rol_3 lda.z active_balls asl - asl - asl - tax - // [60] *((word*)(const struct $0*) balls + (byte~) main::$38) ← (byte) 0 -- pwuc1_derefidx_vbuxx=vbuc2 + sta.z __38 + lda.z active_balls+1 + rol + sta.z __38+1 + asl.z __38 + rol.z __38+1 + asl.z __38 + rol.z __38+1 + // [60] (word*~) main::$61 ← (word*)(const struct $0*) balls + (word~) main::$38 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __38 + clc + adc #balls + sta.z __61+1 + // [61] *((word*~) main::$61) ← (byte) 0 -- _deref_pwuz1=vbuc1 lda #0 - sta balls,x + ldy #0 + sta (__61),y + tya + iny + sta (__61),y + // [62] (word*~) main::$62 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$38 -- pwuz1=pwuc1_plus_vwuz1 + clc + lda.z __62 + adc #balls+2 + sta.z __62+1 + // [63] *((word*~) main::$62) ← (byte) 0 -- _deref_pwuz1=vbuc1 lda #0 - sta balls+1,x - // [61] *((word*)(const struct $0*) balls+(byte) 2 + (byte~) main::$38) ← (byte) 0 -- pwuc1_derefidx_vbuxx=vbuc2 - lda #0 - sta balls+2,x - lda #0 - sta balls+2+1,x - // [62] phi from main::@16 to main::@5 [phi:main::@16->main::@5] + ldy #0 + sta (__62),y + tya + iny + sta (__62),y + // [64] phi from main::@16 to main::@5 [phi:main::@16->main::@5] __b5_from___b16: - // [62] phi (byte) main::timer#15 = (byte) 0 [phi:main::@16->main::@5#0] -- vbuz1=vbuc1 + // [64] phi (byte) main::timer#15 = (byte) 0 [phi:main::@16->main::@5#0] -- vbuz1=vbuc1 lda #0 sta.z timer - // [62] phi (byte) main::active_balls#8 = (byte) main::active_balls#1 [phi:main::@16->main::@5#1] -- register_copy + // [64] phi (word) main::active_balls#8 = (word) main::active_balls#1 [phi:main::@16->main::@5#1] -- register_copy jmp __b5 - // [62] phi from main::@25 main::@4 to main::@5 [phi:main::@25/main::@4->main::@5] + // [64] phi from main::@25 main::@4 to main::@5 [phi:main::@25/main::@4->main::@5] __b5_from___b25: __b5_from___b4: - // [62] phi (byte) main::timer#15 = (byte) main::timer#21 [phi:main::@25/main::@4->main::@5#0] -- register_copy - // [62] phi (byte) main::active_balls#8 = (byte) main::active_balls#2 [phi:main::@25/main::@4->main::@5#1] -- register_copy + // [64] phi (byte) main::timer#15 = (byte) main::timer#21 [phi:main::@25/main::@4->main::@5#0] -- register_copy + // [64] phi (word) main::active_balls#8 = (word) main::active_balls#2 [phi:main::@25/main::@4->main::@5#1] -- register_copy jmp __b5 // main::@5 __b5: - // [63] phi from main::@5 to main::@6 [phi:main::@5->main::@6] + // [65] phi from main::@5 to main::@6 [phi:main::@5->main::@6] __b6_from___b5: - // [63] phi (byte) main::sprite_idx#3 = (byte) 0 [phi:main::@5->main::@6#0] -- vbuz1=vbuc1 + // [65] phi (byte) main::sprite_idx#3 = (byte) 0 [phi:main::@5->main::@6#0] -- vbuz1=vbuc1 lda #0 sta.z sprite_idx - // [63] phi (word) main::i#10 = (byte) 0 [phi:main::@5->main::@6#1] -- vwuz1=vbuc1 + // [65] phi (word) main::i#10 = (byte) 0 [phi:main::@5->main::@6#1] -- vwuz1=vbuc1 lda #<0 sta.z i_1 lda #>0 @@ -4771,8 +4838,10 @@ main: { jmp __b6 // main::@6 __b6: - // [64] if((word) main::i#10<(byte) main::active_balls#8) goto main::@7 -- vwuz1_lt_vbuz2_then_la1 + // [66] if((word) main::i#10<(word) main::active_balls#8) goto main::@7 -- vwuz1_lt_vwuz2_then_la1 lda.z i_1+1 + cmp.z active_balls+1 + bcc __b7 bne !+ lda.z i_1 cmp.z active_balls @@ -4781,35 +4850,35 @@ main: { jmp __b8 // main::@8 __b8: - // [65] *((byte*) 8193) ← (byte) $98 -- _deref_pbuc1=vbuc2 + // [67] *((byte*) 8193) ← (byte) $98 -- _deref_pbuc1=vbuc2 lda #$98 sta $2001 jmp __b13 // main::@13 __b13: - // [66] if((byte) 0==(volatile byte) vblank_hit) goto main::@13 -- vbuc1_eq_vbuz1_then_la1 + // [68] if((byte) 0==(volatile byte) vblank_hit) goto main::@13 -- vbuc1_eq_vbuz1_then_la1 lda #0 cmp.z vblank_hit beq __b13 jmp __b14 // main::@14 __b14: - // [67] (volatile byte) vblank_hit ← (byte) 0 -- vbuz1=vbuc1 + // [69] (volatile byte) vblank_hit ← (byte) 0 -- vbuz1=vbuc1 // wait for vblank lda #0 sta.z vblank_hit - // [68] *((byte*) 8193) ← (byte) $18 -- _deref_pbuc1=vbuc2 + // [70] *((byte*) 8193) ← (byte) $18 -- _deref_pbuc1=vbuc2 lda #$18 sta $2001 // [50] phi from main::@14 to main::@3 [phi:main::@14->main::@3] __b3_from___b14: // [50] phi (byte) main::timer#3 = (byte) main::timer#15 [phi:main::@14->main::@3#0] -- register_copy - // [50] phi (byte) main::active_balls#2 = (byte) main::active_balls#8 [phi:main::@14->main::@3#1] -- register_copy + // [50] phi (word) main::active_balls#2 = (word) main::active_balls#8 [phi:main::@14->main::@3#1] -- register_copy // [50] phi (byte) main::timer_2#2 = (byte) main::timer_2#1 [phi:main::@14->main::@3#2] -- register_copy jmp __b3 // main::@7 __b7: - // [69] (word~) main::$44 ← (word) main::i#10 << (byte) 3 -- vwuz1=vwuz2_rol_3 + // [71] (word~) main::$44 ← (word) main::i#10 << (byte) 3 -- vwuz1=vwuz2_rol_3 lda.z i_1 asl sta.z __44 @@ -4820,22 +4889,6 @@ main: { 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::$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::$44 -- pwuz1=pwuc1_plus_vwuz2 lda.z __44 clc @@ -4844,51 +4897,41 @@ main: { lda.z __44+1 adc #>balls sta.z __63+1 - // [73] *((word*~) main::$63) ← *((word*~) main::$61) + *((word*~) main::$62) -- _deref_pwuz1=_deref_pwuz2_plus__deref_pwuz3 - ldy #0 - lda (__61),y - clc - adc (__62),y - sta (__63),y - iny - lda (__61),y - adc (__62),y - sta (__63),y - // [74] (word*~) main::$64 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + // [73] (word*~) main::$64 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 lda.z __44 clc - adc #balls+6 + adc #>balls+4 sta.z __64+1 - // [75] (word*~) main::$65 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + // [74] (word*~) main::$65 ← (word*)(const struct $0*) balls + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __44 + clc + adc #balls + sta.z __65+1 + // [75] *((word*~) main::$65) ← *((word*~) main::$63) + *((word*~) main::$64) -- _deref_pwuz1=_deref_pwuz2_plus__deref_pwuz3 + ldy #0 + lda (__63),y + clc + adc (__64),y + sta (__65),y + iny + lda (__63),y + adc (__64),y + sta (__65),y + // [76] (word*~) main::$66 ← (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 - ldy #0 - lda (__64),y - clc - adc #<$10 - sta (__65),y - iny - lda (__64),y - adc #>$10 - sta (__65),y - // [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 + adc #>balls+6 sta.z __66+1 - // [78] (word*~) main::$67 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + // [77] (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 + // [78] *((word*~) main::$67) ← *((word*~) main::$66) + (byte) $10 -- _deref_pwuz1=_deref_pwuz2_plus_vwuc1 + ldy #0 + lda (__66),y + clc + adc #<$10 + sta (__67),y + iny + lda (__66),y + adc #>$10 + sta (__67),y // [79] (word*~) main::$68 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 lda.z __44 clc @@ -4904,31 +4957,47 @@ main: { lda.z __44+1 adc #>balls+2 sta.z __68+1 - // [80] *((word*~) main::$68) ← *((word*~) main::$66) + *((word*~) main::$67) -- _deref_pwuz1=_deref_pwuz2_plus__deref_pwuz3 - ldy #0 - lda (__66),y + // [80] (word*~) main::$69 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __44 clc - adc (__67),y - sta (__68),y + adc #balls+6 + sta.z __69+1 + // [81] (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 + // [82] *((word*~) main::$70) ← *((word*~) main::$68) + *((word*~) main::$69) -- _deref_pwuz1=_deref_pwuz2_plus__deref_pwuz3 + ldy #0 + lda (__68),y + clc + adc (__69),y + sta (__70),y iny - lda (__66),y - adc (__67),y - sta (__68),y - // [81] (word*~) main::$69 ← (word*)(const struct $0*) balls + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda (__68),y + adc (__69),y + sta (__70),y + // [83] (word*~) main::$71 ← (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_pwuz1_ror_8 + sta.z __71+1 + // [84] (word~) main::$20 ← *((word*~) main::$71) >> (byte) 8 -- vwuz1=_deref_pwuz1_ror_8 ldy #1 lda (__20),y sta.z __20 dey sty.z __20+1 - // [83] if((word~) main::$20>=(byte) 8) goto main::@9 -- vwuz1_ge_vbuc1_then_la1 + // [85] if((word~) main::$20>=(byte) 8) goto main::@9 -- vwuz1_ge_vbuc1_then_la1 lda.z __20+1 bne __b9 lda.z __20 @@ -4938,67 +5007,67 @@ main: { jmp __b11 // main::@11 __b11: - // [84] (word*~) main::$72 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + // [86] (word*~) main::$74 ← (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 - // [85] (word*~) main::$73 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + sta.z __74+1 + // [87] (word*~) main::$75 ← (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 - // [86] *((word*~) main::$73) ← *((word*~) main::$72) ^ (word) $ffff -- _deref_pwuz1=_deref_pwuz2_bxor_vwuc1 + sta.z __75+1 + // [88] *((word*~) main::$75) ← *((word*~) main::$74) ^ (word) $ffff -- _deref_pwuz1=_deref_pwuz2_bxor_vwuc1 ldy #0 lda #<$ffff - eor (__72),y - sta (__73),y + eor (__74),y + sta (__75),y iny lda #>$ffff - eor (__72),y - sta (__73),y + eor (__74),y + sta (__75),y jmp __b9 // main::@9 __b9: - // [87] (word*~) main::$70 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + // [89] (word*~) main::$72 ← (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 - // [88] (word~) main::$23 ← *((word*~) main::$70) >> (byte) 8 -- vwuz1=_deref_pwuz1_ror_8 + sta.z __72+1 + // [90] (word~) main::$23 ← *((word*~) main::$72) >> (byte) 8 -- vwuz1=_deref_pwuz1_ror_8 ldy #1 lda (__23),y sta.z __23 dey sty.z __23+1 - // [89] (word*~) main::$71 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + // [91] (word*~) main::$73 ← (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 - // [90] (word~) main::$25 ← *((word*~) main::$71) >> (byte) 8 -- vwuz1=_deref_pwuz1_ror_8 + sta.z __73+1 + // [92] (word~) main::$25 ← *((word*~) main::$73) >> (byte) 8 -- vwuz1=_deref_pwuz1_ror_8 ldy #1 lda (__25),y sta.z __25 dey sty.z __25+1 - // [91] (byte~) main::$26 ← (byte) main::h_bar#1 + (byte) 8 -- vbuz1=vbuz2_plus_vbuc1 + // [93] (byte~) main::$26 ← (byte) main::h_bar#1 + (byte) 8 -- vbuz1=vbuz2_plus_vbuc1 lax.z h_bar axs #-[8] stx.z __26 - // [92] if((word~) main::$23<(byte) main::h_bar#1) goto main::@10 -- vwuz1_lt_vbuz2_then_la1 + // [94] 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 @@ -5008,7 +5077,7 @@ main: { jmp __b24 // main::@24 __b24: - // [93] if((word~) main::$25>=(byte~) main::$26) goto main::@10 -- vwuz1_ge_vbuz2_then_la1 + // [95] if((word~) main::$25>=(byte~) main::$26) goto main::@10 -- vwuz1_ge_vbuz2_then_la1 lda.z __25+1 bne __b10 lda.z __25 @@ -5018,147 +5087,147 @@ main: { jmp __b12 // main::@12 __b12: - // [94] (word*~) main::$76 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + // [96] (word*~) main::$78 ← (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 - // [95] (word*~) main::$77 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + sta.z __78+1 + // [97] (word*~) main::$79 ← (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 - // [96] *((word*~) main::$77) ← *((word*~) main::$76) ^ (word) $ffff -- _deref_pwuz1=_deref_pwuz2_bxor_vwuc1 + sta.z __79+1 + // [98] *((word*~) main::$79) ← *((word*~) main::$78) ^ (word) $ffff -- _deref_pwuz1=_deref_pwuz2_bxor_vwuc1 ldy #0 lda #<$ffff - eor (__76),y - sta (__77),y + eor (__78),y + sta (__79),y iny lda #>$ffff - eor (__76),y - sta (__77),y - // [97] (byte~) main::$30 ← (byte) main::h_bar#1 - (byte) 2 -- vbuaa=vbuz1_minus_2 + eor (__78),y + sta (__79),y + // [99] (byte~) main::$30 ← (byte) main::h_bar#1 - (byte) 2 -- vbuaa=vbuz1_minus_2 lda.z h_bar sec sbc #2 - // [98] (word~) main::$56 ← (word)(byte~) main::$30 -- vwuz1=_word_vbuaa + // [100] (word~) main::$56 ← (word)(byte~) main::$30 -- vwuz1=_word_vbuaa sta.z __56 lda #0 sta.z __56+1 - // [99] (word~) main::$31 ← (word~) main::$56 << (byte) 8 -- vwuz1=vwuz1_rol_8 + // [101] (word~) main::$31 ← (word~) main::$56 << (byte) 8 -- vwuz1=vwuz1_rol_8 lda.z __31 sta.z __31+1 lda #0 sta.z __31 - // [100] (word*~) main::$78 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + // [102] (word*~) main::$80 ← (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 - // [101] *((word*~) main::$78) ← (word~) main::$31 -- _deref_pwuz1=vwuz2 + sta.z __80+1 + // [103] *((word*~) main::$80) ← (word~) main::$31 -- _deref_pwuz1=vwuz2 ldy #0 lda.z __31 - sta (__78),y + sta (__80),y iny lda.z __31+1 - sta (__78),y + sta (__80),y jmp __b10 // main::@10 __b10: - // [102] (word*~) main::$74 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + // [104] (word*~) main::$76 ← (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 - // [103] (word~) main::$32 ← *((word*~) main::$74) >> (byte) 8 -- vwuz1=_deref_pwuz1_ror_8 + sta.z __76+1 + // [105] (word~) main::$32 ← *((word*~) main::$76) >> (byte) 8 -- vwuz1=_deref_pwuz1_ror_8 ldy #1 lda (__32),y sta.z __32 dey sty.z __32+1 - // [104] (byte~) main::$48 ← (byte) main::sprite_idx#3 << (byte) 2 -- vbuxx=vbuz1_rol_2 + // [106] (byte~) main::$48 ← (byte) main::sprite_idx#3 << (byte) 2 -- vbuxx=vbuz1_rol_2 lda.z sprite_idx asl asl tax - // [105] *((byte*)(const struct SpriteData*) SPRITE_BUFFER + (byte~) main::$48) ← (byte)(word~) main::$32 -- pbuc1_derefidx_vbuxx=_byte_vwuz1 + // [107] *((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 - // [106] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_TILE + (byte~) main::$48) ← (byte) $a -- pbuc1_derefidx_vbuxx=vbuc2 + // [108] *((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 - // [107] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_ATTRIBUTES + (byte~) main::$48) ← (byte) 3 -- pbuc1_derefidx_vbuxx=vbuc2 + // [109] *((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 - // [108] (word*~) main::$75 ← (word*)(const struct $0*) balls + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz1 + // [110] (word*~) main::$77 ← (word*)(const struct $0*) balls + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz1 clc - lda.z __75 + lda.z __77 adc #balls - sta.z __75+1 - // [109] (word~) main::$33 ← *((word*~) main::$75) >> (byte) 8 -- vwuz1=_deref_pwuz1_ror_8 + sta.z __77+1 + // [111] (word~) main::$33 ← *((word*~) main::$77) >> (byte) 8 -- vwuz1=_deref_pwuz1_ror_8 ldy #1 lda (__33),y sta.z __33 dey sty.z __33+1 - // [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 + // [112] *((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 - // [111] (byte) main::sprite_idx#2 ← ++ (byte) main::sprite_idx#3 -- vbuz1=_inc_vbuz1 + // [113] (byte) main::sprite_idx#2 ← ++ (byte) main::sprite_idx#3 -- vbuz1=_inc_vbuz1 inc.z sprite_idx - // [112] (word) main::i#4 ← ++ (word) main::i#10 -- vwuz1=_inc_vwuz1 + // [114] (word) main::i#4 ← ++ (word) main::i#10 -- vwuz1=_inc_vwuz1 inc.z i_1 bne !+ inc.z i_1+1 !: - // [63] phi from main::@10 to main::@6 [phi:main::@10->main::@6] + // [65] phi from main::@10 to main::@6 [phi:main::@10->main::@6] __b6_from___b10: - // [63] phi (byte) main::sprite_idx#3 = (byte) main::sprite_idx#2 [phi:main::@10->main::@6#0] -- register_copy - // [63] phi (word) main::i#10 = (word) main::i#4 [phi:main::@10->main::@6#1] -- register_copy + // [65] phi (byte) main::sprite_idx#3 = (byte) main::sprite_idx#2 [phi:main::@10->main::@6#0] -- register_copy + // [65] phi (word) main::i#10 = (word) main::i#4 [phi:main::@10->main::@6#1] -- register_copy jmp __b6 // main::@25 __b25: - // [113] (byte) main::timer#21 ← (byte) main::timer#1 -- vbuz1=vbuxx + // [115] (byte) main::timer#21 ← (byte) main::timer#1 -- vbuz1=vbuxx stx.z timer jmp __b5_from___b25 - // [114] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // [116] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: jmp __b2 // main::@2 __b2: - // [115] call rand - // [152] phi from main::@2 to rand [phi:main::@2->rand] + // [117] call rand + // [154] phi from main::@2 to rand [phi:main::@2->rand] rand_from___b2: - // [152] phi (word) rand_state#10 = (word) rand_state#17 [phi:main::@2->rand#0] -- register_copy + // [154] phi (word) rand_state#10 = (word) rand_state#17 [phi:main::@2->rand#0] -- register_copy jsr rand - // [116] (word) rand::return#2 ← (word) rand::return#0 + // [118] (word) rand::return#2 ← (word) rand::return#0 jmp __b22 // main::@22 __b22: - // [117] (word~) main::$9 ← (word) rand::return#2 - // [118] (word~) main::$10 ← (word~) main::$9 & (word) $3ff -- vwuz1=vwuz1_band_vwuc1 + // [119] (word~) main::$9 ← (word) rand::return#2 + // [120] (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 - // [119] (word~) main::$36 ← (word) main::i#14 << (byte) 3 -- vwuz1=vwuz2_rol_3 + // [121] (word~) main::$36 ← (word) main::i#14 << (byte) 3 -- vwuz1=vwuz2_rol_3 lda.z i asl sta.z __36 @@ -5169,7 +5238,7 @@ main: { rol.z __36+1 asl.z __36 rol.z __36+1 - // [120] (word*~) main::$59 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$36 -- pwuz1=pwuc1_plus_vwuz2 + // [122] (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 + // [123] *((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] + // [124] call rand + // [154] 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 + // [154] 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 + // [125] (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 + // [126] (word~) main::$11 ← (word) rand::return#3 + // [127] (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 + // [128] (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 - // [127] *((word*~) main::$60) ← (byte~) main::$12 -- _deref_pwuz1=vbuxx + // [129] *((word*~) main::$60) ← (byte~) main::$12 -- _deref_pwuz1=vbuxx txa ldy #0 sta (__60),y tya iny sta (__60),y - // [128] (word) main::i#2 ← ++ (word) main::i#14 -- vwuz1=_inc_vwuz1 + // [130] (word) main::i#2 ← ++ (word) main::i#14 -- vwuz1=_inc_vwuz1 inc.z i bne !+ inc.z i+1 @@ -5229,31 +5298,31 @@ main: { // - ppuData : Pointer in the PPU memory // - cpuData : Pointer to the CPU memory (RAM of ROM) // - size : The number of bytes to transfer -// ppuDataTransfer(void* zp($11) cpuData) +// ppuDataTransfer(void* zp($12) cpuData) ppuDataTransfer: { - .label ppuDataPrepare1_ppuData = $f - .label cpuSrc = $11 - .label i = $13 - .label cpuData = $11 + .label ppuDataPrepare1_ppuData = $10 + .label cpuSrc = $12 + .label i = $14 + .label cpuData = $12 jmp ppuDataPrepare1 // ppuDataTransfer::ppuDataPrepare1 ppuDataPrepare1: - // [130] (byte~) ppuDataTransfer::ppuDataPrepare1_$0 ← > (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 -- vbuaa=_hi_pvoz1 + // [132] (byte~) ppuDataTransfer::ppuDataPrepare1_$0 ← > (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 -- vbuaa=_hi_pvoz1 lda.z ppuDataPrepare1_ppuData+1 - // [131] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataTransfer::ppuDataPrepare1_$0 -- _deref_pbuc1=vbuaa + // [133] *((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 - // [132] (byte~) ppuDataTransfer::ppuDataPrepare1_$1 ← < (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 -- vbuaa=_lo_pvoz1 + // [134] (byte~) ppuDataTransfer::ppuDataPrepare1_$1 ← < (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 -- vbuaa=_lo_pvoz1 lda.z ppuDataPrepare1_ppuData - // [133] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataTransfer::ppuDataPrepare1_$1 -- _deref_pbuc1=vbuaa + // [135] *((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: - // [134] (byte*) ppuDataTransfer::cpuSrc#6 ← (byte*)(nomodify void*) ppuDataTransfer::cpuData#2 - // [135] phi from ppuDataTransfer::@3 to ppuDataTransfer::@1 [phi:ppuDataTransfer::@3->ppuDataTransfer::@1] + // [136] (byte*) ppuDataTransfer::cpuSrc#6 ← (byte*)(nomodify void*) ppuDataTransfer::cpuData#2 + // [137] phi from ppuDataTransfer::@3 to ppuDataTransfer::@1 [phi:ppuDataTransfer::@3->ppuDataTransfer::@1] __b1_from___b3: - // [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 + // [137] phi (byte*) ppuDataTransfer::cpuSrc#2 = (byte*) ppuDataTransfer::cpuSrc#6 [phi:ppuDataTransfer::@3->ppuDataTransfer::@1#0] -- register_copy + // [137] phi (word) ppuDataTransfer::i#2 = (word) 0 [phi:ppuDataTransfer::@3->ppuDataTransfer::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z i lda #>0 @@ -5261,7 +5330,7 @@ ppuDataTransfer: { jmp __b1 // ppuDataTransfer::@1 __b1: - // [136] if((word) ppuDataTransfer::i#2<(byte) $20*(const byte) SIZEOF_BYTE) goto ppuDataTransfer::@2 -- vwuz1_lt_vbuc1_then_la1 + // [138] 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 @@ -5271,60 +5340,60 @@ ppuDataTransfer: { jmp __breturn // ppuDataTransfer::@return __breturn: - // [137] return + // [139] return rts // ppuDataTransfer::@2 __b2: - // [138] (byte) ppuDataTransfer::ppuDataPut1_val#0 ← *((byte*) ppuDataTransfer::cpuSrc#2) -- vbuaa=_deref_pbuz1 + // [140] (byte) ppuDataTransfer::ppuDataPut1_val#0 ← *((byte*) ppuDataTransfer::cpuSrc#2) -- vbuaa=_deref_pbuz1 ldy #0 lda (cpuSrc),y jmp ppuDataPut1 // ppuDataTransfer::ppuDataPut1 ppuDataPut1: - // [139] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) ppuDataTransfer::ppuDataPut1_val#0 -- _deref_pbuc1=vbuaa + // [141] *((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: - // [140] (byte*) ppuDataTransfer::cpuSrc#1 ← ++ (byte*) ppuDataTransfer::cpuSrc#2 -- pbuz1=_inc_pbuz1 + // [142] (byte*) ppuDataTransfer::cpuSrc#1 ← ++ (byte*) ppuDataTransfer::cpuSrc#2 -- pbuz1=_inc_pbuz1 inc.z cpuSrc bne !+ inc.z cpuSrc+1 !: - // [141] (word) ppuDataTransfer::i#1 ← ++ (word) ppuDataTransfer::i#2 -- vwuz1=_inc_vwuz1 + // [143] (word) ppuDataTransfer::i#1 ← ++ (word) ppuDataTransfer::i#2 -- vwuz1=_inc_vwuz1 inc.z i bne !+ inc.z i+1 !: - // [135] phi from ppuDataTransfer::@4 to ppuDataTransfer::@1 [phi:ppuDataTransfer::@4->ppuDataTransfer::@1] + // [137] phi from ppuDataTransfer::@4 to ppuDataTransfer::@1 [phi:ppuDataTransfer::@4->ppuDataTransfer::@1] __b1_from___b4: - // [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 + // [137] phi (byte*) ppuDataTransfer::cpuSrc#2 = (byte*) ppuDataTransfer::cpuSrc#1 [phi:ppuDataTransfer::@4->ppuDataTransfer::@1#0] -- register_copy + // [137] phi (word) ppuDataTransfer::i#2 = (word) ppuDataTransfer::i#1 [phi:ppuDataTransfer::@4->ppuDataTransfer::@1#1] -- register_copy jmp __b1 } // ppuDataFill // Fill a number of bytes in the PPU memory // - ppuData : Pointer in the PPU memory // - size : The number of bytes to transfer -// ppuDataFill(word zp($11) size) +// ppuDataFill(word zp($12) size) ppuDataFill: { - .label ppuDataPrepare1_ppuData = $f - .label i = $13 - .label size = $11 + .label ppuDataPrepare1_ppuData = $10 + .label i = $14 + .label size = $12 jmp ppuDataPrepare1 // ppuDataFill::ppuDataPrepare1 ppuDataPrepare1: - // [143] (byte~) ppuDataFill::ppuDataPrepare1_$0 ← > (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 -- vbuaa=_hi_pvoz1 + // [145] (byte~) ppuDataFill::ppuDataPrepare1_$0 ← > (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 -- vbuaa=_hi_pvoz1 lda.z ppuDataPrepare1_ppuData+1 - // [144] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataFill::ppuDataPrepare1_$0 -- _deref_pbuc1=vbuaa + // [146] *((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 - // [145] (byte~) ppuDataFill::ppuDataPrepare1_$1 ← < (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 -- vbuaa=_lo_pvoz1 + // [147] (byte~) ppuDataFill::ppuDataPrepare1_$1 ← < (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 -- vbuaa=_lo_pvoz1 lda.z ppuDataPrepare1_ppuData - // [146] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataFill::ppuDataPrepare1_$1 -- _deref_pbuc1=vbuaa + // [148] *((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 - // [147] phi from ppuDataFill::ppuDataPrepare1 to ppuDataFill::@1 [phi:ppuDataFill::ppuDataPrepare1->ppuDataFill::@1] + // [149] phi from ppuDataFill::ppuDataPrepare1 to ppuDataFill::@1 [phi:ppuDataFill::ppuDataPrepare1->ppuDataFill::@1] __b1_from_ppuDataPrepare1: - // [147] phi (word) ppuDataFill::i#2 = (word) 0 [phi:ppuDataFill::ppuDataPrepare1->ppuDataFill::@1#0] -- vwuz1=vwuc1 + // [149] phi (word) ppuDataFill::i#2 = (word) 0 [phi:ppuDataFill::ppuDataPrepare1->ppuDataFill::@1#0] -- vwuz1=vwuc1 lda #<0 sta.z i lda #>0 @@ -5333,7 +5402,7 @@ ppuDataFill: { // Transfer to PPU // ppuDataFill::@1 __b1: - // [148] if((word) ppuDataFill::i#2<(word) ppuDataFill::size#3) goto ppuDataFill::ppuDataPut1 -- vwuz1_lt_vwuz2_then_la1 + // [150] 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 @@ -5345,24 +5414,24 @@ ppuDataFill: { jmp __breturn // ppuDataFill::@return __breturn: - // [149] return + // [151] return rts // ppuDataFill::ppuDataPut1 ppuDataPut1: - // [150] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [152] *((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: - // [151] (word) ppuDataFill::i#1 ← ++ (word) ppuDataFill::i#2 -- vwuz1=_inc_vwuz1 + // [153] (word) ppuDataFill::i#1 ← ++ (word) ppuDataFill::i#2 -- vwuz1=_inc_vwuz1 inc.z i bne !+ inc.z i+1 !: - // [147] phi from ppuDataFill::@2 to ppuDataFill::@1 [phi:ppuDataFill::@2->ppuDataFill::@1] + // [149] phi from ppuDataFill::@2 to ppuDataFill::@1 [phi:ppuDataFill::@2->ppuDataFill::@1] __b1_from___b2: - // [147] phi (word) ppuDataFill::i#2 = (word) ppuDataFill::i#1 [phi:ppuDataFill::@2->ppuDataFill::@1#0] -- register_copy + // [149] phi (word) ppuDataFill::i#2 = (word) ppuDataFill::i#1 [phi:ppuDataFill::@2->ppuDataFill::@1#0] -- register_copy jmp __b1 } // rand @@ -5371,11 +5440,11 @@ ppuDataFill: { // Information https://en.wikipedia.org/wiki/Xorshift // Source http://www.retroprogramming.com/2017/07/xorshift-pseudorandom-numbers-in-z80.html rand: { - .label __0 = $3c - .label __1 = $3e - .label __2 = $40 - .label return = $36 - // [153] (word~) rand::$0 ← (word) rand_state#10 << (byte) 7 -- vwuz1=vwuz2_rol_7 + .label __0 = $41 + .label __1 = $43 + .label __2 = $45 + .label return = $3b + // [155] (word~) rand::$0 ← (word) rand_state#10 << (byte) 7 -- vwuz1=vwuz2_rol_7 lda.z rand_state+1 lsr lda.z rand_state @@ -5384,39 +5453,39 @@ rand: { lda #0 ror sta.z __0 - // [154] (word) rand_state#0 ← (word) rand_state#10 ^ (word~) rand::$0 -- vwuz1=vwuz1_bxor_vwuz2 + // [156] (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 - // [155] (word~) rand::$1 ← (word) rand_state#0 >> (byte) 9 -- vwuz1=vwuz2_ror_9 + // [157] (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 - // [156] (word) rand_state#1 ← (word) rand_state#0 ^ (word~) rand::$1 -- vwuz1=vwuz1_bxor_vwuz2 + // [158] (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 - // [157] (word~) rand::$2 ← (word) rand_state#1 << (byte) 8 -- vwuz1=vwuz2_rol_8 + // [159] (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 - // [158] (word) rand_state#11 ← (word) rand_state#1 ^ (word~) rand::$2 -- vwuz1=vwuz1_bxor_vwuz2 + // [160] (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 - // [159] (word) rand::return#0 ← (word) rand_state#11 -- vwuz1=vwuz2 + // [161] (word) rand::return#0 ← (word) rand_state#11 -- vwuz1=vwuz2 lda.z rand_state sta.z return lda.z rand_state+1 @@ -5424,7 +5493,7 @@ rand: { jmp __breturn // rand::@return __breturn: - // [160] return + // [162] return rts } // File Data @@ -5510,11 +5579,11 @@ Removing instruction lda #0 Removing instruction lda #0 Removing instruction lda #<0 Removing instruction lda #>0 +Removing instruction lda #<0 +Removing instruction lda #>0 Removing instruction lda #0 -Removing instruction lda #0 -Removing instruction lda #0 -Removing instruction lda #0 -Removing instruction lda #0 +Replacing instruction ldy #0 with TAY +Replacing instruction ldy #0 with TAY Removing instruction lda #<0 Removing instruction lda #>0 Replacing instruction lda.z __20+1 with TYA @@ -5528,6 +5597,7 @@ Replacing label initNES1___b1_from_initNES1___b1 with initNES1___b1 Replacing label initNES1_waitForVBlank2___b1 with initNES1_waitForVBlank2 Replacing label __b2_from___b1 with __b2 Replacing label __b5_from___b4 with __b5 +Replacing label __b5_from___b4 with __b5 Replacing label __b3 with __b4 Replacing label __b5_from___b25 with __b5 Removing instruction __b1_from___init1: @@ -5606,8 +5676,8 @@ Succesful ASM optimization Pass5NextJumpElimination Removing instruction lda #0 Removing instruction lda #0 Succesful ASM optimization Pass5UnnecesaryLoadElimination -Fixing long branch [246] bcc __b2 to bcs -Fixing long branch [271] bne __b25 to beq +Fixing long branch [239] bcc __b2 to bcs +Fixing long branch [268] bne __b25 to beq FINAL SYMBOL TABLE (word) $0::x_position @@ -5685,44 +5755,46 @@ FINAL SYMBOL TABLE (const struct $0*) balls[(number) $40] = { fill( $40, 0) } (const to_nomodify byte*) h_bar_tilemap[] = { (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1 } (signed word()) main() -(word~) main::$10 zp[2]:54 67.33333333333333 -(word~) main::$11 zp[2]:54 202.0 +(word~) main::$10 zp[2]:59 67.33333333333333 +(word~) main::$11 zp[2]:59 202.0 (byte~) main::$12 reg byte x 101.0 (byte~) main::$14 reg byte a 202.0 -(word~) main::$20 zp[2]:33 2002.0 -(word~) main::$23 zp[2]:39 500.5 -(word~) main::$25 zp[2]:41 667.3333333333334 -(byte~) main::$26 zp[1]:43 1001.0 +(word~) main::$20 zp[2]:38 2002.0 +(word~) main::$23 zp[2]:44 500.5 +(word~) main::$25 zp[2]:46 667.3333333333334 +(byte~) main::$26 zp[1]:48 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]:15 1001.0 -(word~) main::$36 zp[2]:56 43.285714285714285 -(byte~) main::$38 reg byte x 151.5 -(word~) main::$44 zp[2]:15 487.6666666666668 +(word~) main::$31 zp[2]:53 1001.0 +(word~) main::$32 zp[2]:57 500.5 +(word~) main::$33 zp[2]:20 1001.0 +(word~) main::$36 zp[2]:61 43.285714285714285 +(word~) main::$38 zp[2]:16 101.0 +(word~) main::$44 zp[2]:20 487.6666666666668 (byte~) main::$48 reg byte x 834.1666666666667 -(word~) main::$56 zp[2]:48 2002.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 -(word*~) main::$64 zp[2]:23 1001.0 -(word*~) main::$65 zp[2]:25 2002.0 -(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]:33 2002.0 -(word*~) main::$70 zp[2]:39 2002.0 -(word*~) main::$71 zp[2]:41 2002.0 -(word*~) main::$72 zp[2]:35 1001.0 -(word*~) main::$73 zp[2]:37 2002.0 -(word*~) main::$74 zp[2]:52 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]:50 2002.0 -(word~) main::$9 zp[2]:54 202.0 +(word~) main::$56 zp[2]:53 2002.0 +(word*~) main::$59 zp[2]:63 202.0 +(word*~) main::$60 zp[2]:61 202.0 +(word*~) main::$61 zp[2]:18 202.0 +(word*~) main::$62 zp[2]:16 202.0 +(word*~) main::$63 zp[2]:22 667.3333333333334 +(word*~) main::$64 zp[2]:24 1001.0 +(word*~) main::$65 zp[2]:26 2002.0 +(word*~) main::$66 zp[2]:28 1001.0 +(word*~) main::$67 zp[2]:30 2002.0 +(word*~) main::$68 zp[2]:32 667.3333333333334 +(word*~) main::$69 zp[2]:34 1001.0 +(word*~) main::$70 zp[2]:36 2002.0 +(word*~) main::$71 zp[2]:38 2002.0 +(word*~) main::$72 zp[2]:44 2002.0 +(word*~) main::$73 zp[2]:46 2002.0 +(word*~) main::$74 zp[2]:40 1001.0 +(word*~) main::$75 zp[2]:42 2002.0 +(word*~) main::$76 zp[2]:57 2002.0 +(word*~) main::$77 zp[2]:20 2002.0 +(word*~) main::$78 zp[2]:49 1001.0 +(word*~) main::$79 zp[2]:51 2002.0 +(word*~) main::$80 zp[2]:55 2002.0 +(word~) main::$9 zp[2]:59 202.0 (label) main::@1 (label) main::@10 (label) main::@11 @@ -5748,18 +5820,18 @@ FINAL SYMBOL TABLE (label) main::@7 (label) main::@8 (label) main::@9 -(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 27.54901960784314 +(word) main::active_balls +(word) main::active_balls#1 active_balls zp[2]:5 50.5 +(word) main::active_balls#2 active_balls zp[2]:5 56.11111111111111 +(word) main::active_balls#8 active_balls zp[2]:5 27.54901960784314 (label) main::enableVideoOutput1 (byte) main::h_bar -(byte) main::h_bar#1 h_bar zp[1]:14 55.258620689655174 +(byte) main::h_bar#1 h_bar zp[1]:15 53.41666666666667 (word) main::i -(word) main::i#10 i_1 zp[2]:7 88.97777777777777 +(word) main::i#10 i_1 zp[2]:8 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 +(word) main::i#4 i_1 zp[2]:8 2002.0 (label) main::initNES1 (label) main::initNES1_@1 (label) main::initNES1_@7 @@ -5777,15 +5849,15 @@ FINAL SYMBOL TABLE (label) main::initNES1_waitForVBlank2_@1 (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 68.25 +(byte) main::sprite_idx#2 sprite_idx zp[1]:10 1001.0 +(byte) main::sprite_idx#3 sprite_idx zp[1]:10 68.25 (byte) main::timer (byte) main::timer#1 reg byte x 101.0 -(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#15 timer zp[1]:7 5.9411764705882355 +(byte) main::timer#21 timer zp[1]:7 202.0 +(byte) main::timer#3 timer zp[1]:7 57.714285714285715 (byte) main::timer_2 -(byte) main::timer_2#1 timer_2 zp[1]:4 4.80952380952381 +(byte) main::timer_2#1 timer_2 zp[1]:4 4.661538461538462 (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) @@ -5793,18 +5865,18 @@ FINAL SYMBOL TABLE (label) ppuDataFill::@2 (label) ppuDataFill::@return (word) ppuDataFill::i -(word) ppuDataFill::i#1 i zp[2]:19 2002.0 -(word) ppuDataFill::i#2 i zp[2]:19 1001.0 +(word) ppuDataFill::i#1 i zp[2]:20 2002.0 +(word) ppuDataFill::i#2 i zp[2]:20 1001.0 (nomodify void*) ppuDataFill::ppuData (label) ppuDataFill::ppuDataPrepare1 (byte~) ppuDataFill::ppuDataPrepare1_$0 reg byte a 202.0 (byte~) ppuDataFill::ppuDataPrepare1_$1 reg byte a 202.0 (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData -(nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 ppuDataPrepare1_ppuData zp[2]:15 67.33333333333333 +(nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 ppuDataPrepare1_ppuData zp[2]:16 67.33333333333333 (label) ppuDataFill::ppuDataPut1 (byte) ppuDataFill::ppuDataPut1_val (word) ppuDataFill::size -(word) ppuDataFill::size#3 size zp[2]:17 111.22222222222223 +(word) ppuDataFill::size#3 size zp[2]:18 111.22222222222223 (byte) ppuDataFill::val (void()) ppuDataTransfer((nomodify void*) ppuDataTransfer::ppuData , (nomodify void*) ppuDataTransfer::cpuData , (word) ppuDataTransfer::size) (label) ppuDataTransfer::@1 @@ -5813,20 +5885,20 @@ FINAL SYMBOL TABLE (label) ppuDataTransfer::@4 (label) ppuDataTransfer::@return (nomodify void*) ppuDataTransfer::cpuData -(nomodify void*) ppuDataTransfer::cpuData#2 cpuData zp[2]:17 +(nomodify void*) ppuDataTransfer::cpuData#2 cpuData zp[2]:18 (byte*) ppuDataTransfer::cpuSrc -(byte*) ppuDataTransfer::cpuSrc#1 cpuSrc zp[2]:17 1001.0 -(byte*) ppuDataTransfer::cpuSrc#2 cpuSrc zp[2]:17 776.0 -(byte*) ppuDataTransfer::cpuSrc#6 cpuSrc zp[2]:17 202.0 +(byte*) ppuDataTransfer::cpuSrc#1 cpuSrc zp[2]:18 1001.0 +(byte*) ppuDataTransfer::cpuSrc#2 cpuSrc zp[2]:18 776.0 +(byte*) ppuDataTransfer::cpuSrc#6 cpuSrc zp[2]:18 202.0 (word) ppuDataTransfer::i -(word) ppuDataTransfer::i#1 i zp[2]:19 2002.0 -(word) ppuDataTransfer::i#2 i zp[2]:19 600.5999999999999 +(word) ppuDataTransfer::i#1 i zp[2]:20 2002.0 +(word) ppuDataTransfer::i#2 i zp[2]:20 600.5999999999999 (nomodify void*) ppuDataTransfer::ppuData (label) ppuDataTransfer::ppuDataPrepare1 (byte~) ppuDataTransfer::ppuDataPrepare1_$0 reg byte a 202.0 (byte~) ppuDataTransfer::ppuDataPrepare1_$1 reg byte a 202.0 (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData -(nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 ppuDataPrepare1_ppuData zp[2]:15 67.33333333333333 +(nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 ppuDataPrepare1_ppuData zp[2]:16 67.33333333333333 (label) ppuDataTransfer::ppuDataPut1 (byte) ppuDataTransfer::ppuDataPut1_val (byte) ppuDataTransfer::ppuDataPut1_val#0 reg byte a 2002.0 @@ -5842,95 +5914,86 @@ FINAL SYMBOL TABLE (byte) printf_format_string::justify_left (byte) printf_format_string::min_length (word()) rand() -(word~) rand::$0 zp[2]:60 2002.0 -(word~) rand::$1 zp[2]:62 2002.0 -(word~) rand::$2 zp[2]:64 2002.0 +(word~) rand::$0 zp[2]:65 2002.0 +(word~) rand::$1 zp[2]:67 2002.0 +(word~) rand::$2 zp[2]:69 2002.0 (label) rand::@return (word) rand::return -(word) rand::return#0 return zp[2]:54 300.75 -(word) rand::return#2 return zp[2]:54 202.0 -(word) rand::return#3 return zp[2]:54 202.0 +(word) rand::return#0 return zp[2]:59 300.75 +(word) rand::return#2 return zp[2]:59 202.0 +(word) rand::return#3 return zp[2]:59 202.0 (word) rand_state -(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 129.64705882352942 -(word) rand_state#17 rand_state zp[2]:10 67.33333333333333 -(volatile byte) scroll_y loadstore zp[1]:12 105.0 +(word) rand_state#0 rand_state zp[2]:11 1501.5 +(word) rand_state#1 rand_state zp[2]:11 1501.5 +(word) rand_state#10 rand_state zp[2]:11 1102.0 +(word) rand_state#11 rand_state zp[2]:11 129.64705882352942 +(word) rand_state#17 rand_state zp[2]:11 67.33333333333333 +(volatile byte) scroll_y loadstore zp[1]:13 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 } interrupt(HARDWARE_STACK)(void()) vblank() (label) vblank::@1 (label) vblank::@return (label) vblank::ppuSpriteBufferDmaTransfer1 (struct SpriteData*) vblank::ppuSpriteBufferDmaTransfer1_spriteBuffer -(volatile byte) vblank_hit loadstore zp[1]:13 9.008130081300813 +(volatile byte) vblank_hit loadstore zp[1]:14 8.863999999999999 reg byte x [ main::initNES1_i#2 main::initNES1_i#1 ] zp[2]:2 [ main::i#14 main::i#2 ] zp[1]:4 [ main::timer_2#2 main::timer_2#1 ] -zp[1]:5 [ main::active_balls#2 main::active_balls#8 main::active_balls#1 ] -zp[1]:6 [ main::timer#3 main::timer#15 main::timer#21 ] -zp[2]:7 [ main::i#10 main::i#4 ] -zp[1]:9 [ main::sprite_idx#3 main::sprite_idx#2 ] -zp[2]:10 [ rand_state#10 rand_state#17 rand_state#11 rand_state#0 rand_state#1 ] -zp[1]:12 [ scroll_y ] -zp[1]:13 [ vblank_hit ] +zp[2]:5 [ main::active_balls#2 main::active_balls#8 main::active_balls#1 ] +zp[1]:7 [ main::timer#3 main::timer#15 main::timer#21 ] +zp[2]:8 [ main::i#10 main::i#4 ] +zp[1]:10 [ main::sprite_idx#3 main::sprite_idx#2 ] +zp[2]:11 [ rand_state#10 rand_state#17 rand_state#11 rand_state#0 rand_state#1 ] +zp[1]:13 [ scroll_y ] +zp[1]:14 [ vblank_hit ] reg byte a [ main::initNES1_waitForVBlank1_$0 ] reg byte a [ main::initNES1_waitForVBlank2_$0 ] -zp[1]:14 [ main::h_bar#1 ] +zp[1]:15 [ main::h_bar#1 ] reg byte a [ main::$14 ] reg byte x [ main::timer#1 ] -reg byte x [ main::$38 ] -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 ] -zp[2]:23 [ main::$64 ] -zp[2]:25 [ main::$65 ] -zp[2]:27 [ main::$66 ] -zp[2]:29 [ main::$67 ] -zp[2]:31 [ main::$68 ] -zp[2]:33 [ main::$69 main::$20 ] -zp[2]:35 [ main::$72 ] -zp[2]:37 [ main::$73 ] -zp[2]:39 [ main::$70 main::$23 ] -zp[2]:41 [ main::$71 main::$25 ] -zp[1]:43 [ main::$26 ] -zp[2]:44 [ main::$76 ] -zp[2]:46 [ main::$77 ] +zp[2]:16 [ main::$38 main::$62 ppuDataFill::ppuDataPrepare1_ppuData#0 ppuDataTransfer::ppuDataPrepare1_ppuData#0 ] +zp[2]:18 [ main::$61 ppuDataFill::size#3 ppuDataTransfer::cpuData#2 ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#6 ppuDataTransfer::cpuSrc#1 ] +zp[2]:20 [ main::$44 main::$77 main::$33 ppuDataFill::i#2 ppuDataFill::i#1 ppuDataTransfer::i#2 ppuDataTransfer::i#1 ] +zp[2]:22 [ main::$63 ] +zp[2]:24 [ main::$64 ] +zp[2]:26 [ main::$65 ] +zp[2]:28 [ main::$66 ] +zp[2]:30 [ main::$67 ] +zp[2]:32 [ main::$68 ] +zp[2]:34 [ main::$69 ] +zp[2]:36 [ main::$70 ] +zp[2]:38 [ main::$71 main::$20 ] +zp[2]:40 [ main::$74 ] +zp[2]:42 [ main::$75 ] +zp[2]:44 [ main::$72 main::$23 ] +zp[2]:46 [ main::$73 main::$25 ] +zp[1]:48 [ main::$26 ] +zp[2]:49 [ main::$78 ] +zp[2]:51 [ main::$79 ] reg byte a [ main::$30 ] -zp[2]:48 [ main::$56 main::$31 ] -zp[2]:50 [ main::$78 ] -zp[2]:52 [ main::$74 main::$32 ] +zp[2]:53 [ main::$56 main::$31 ] +zp[2]:55 [ main::$80 ] +zp[2]:57 [ main::$76 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::$36 main::$60 ] -zp[2]:58 [ main::$59 ] +zp[2]:59 [ rand::return#2 main::$9 rand::return#0 main::$10 rand::return#3 main::$11 ] +zp[2]:61 [ main::$36 main::$60 ] +zp[2]:63 [ main::$59 ] reg byte x [ main::$12 ] reg byte a [ ppuDataTransfer::ppuDataPrepare1_$0 ] reg byte a [ ppuDataTransfer::ppuDataPrepare1_$1 ] reg byte a [ ppuDataTransfer::ppuDataPut1_val#0 ] reg byte a [ ppuDataFill::ppuDataPrepare1_$0 ] reg byte a [ ppuDataFill::ppuDataPrepare1_$1 ] -zp[2]:60 [ rand::$0 ] -zp[2]:62 [ rand::$1 ] -zp[2]:64 [ rand::$2 ] +zp[2]:65 [ rand::$0 ] +zp[2]:67 [ rand::$1 ] +zp[2]:69 [ rand::$2 ] FINAL ASSEMBLER -Score: 85193 +Score: 86693 // File Comments -//#pragma emulator("java -jar /Applications/Nintaco_bin_2020-05-01/Nintaco.jar") -// Nintendo Entertainment System (NES -// https://en.wikipedia.org/wiki/Nintendo_Entertainment_System_(Model_NES-101) -// https://github.com/gregkrsak/first_nes -// Ricoh 2C02 - NES Picture Processing Unit (PPU) -// Ricoh RP2C02 (NTSC version) / RP2C07 (PAL version), -// https://en.wikipedia.org/wiki/Picture_Processing_Unit -// https://wiki.nesdev.com/w/index.php/PPU_registers -// http://nesdev.com/2C02%20technical%20reference.TXT -// Based on: https://github.com/gregkrsak/first_nes written by Greg M. Krsak, 2018. // Upstart // Nintendo Entertainment System (NES) ROM (Mapper 0 NROM, Vertical Mirroring) // https://sadistech.com/nesromtool/romdoc.html @@ -6001,10 +6064,10 @@ Score: 85193 .label PPU = $2000 // NES CPU and audion processing unit (APU) .label APU = $4000 - .label scroll_y = $c - .label vblank_hit = $d + .label scroll_y = $d + .label vblank_hit = $e // The random state variable - .label rand_state = $a + .label rand_state = $b .segment Code // __start __start: { @@ -6068,46 +6131,49 @@ vblank: { } // main main: { - .label __9 = $36 - .label __10 = $36 - .label __11 = $36 - .label __20 = $21 - .label __23 = $27 - .label __25 = $29 - .label __26 = $2b - .label __31 = $30 - .label __32 = $34 - .label __33 = $f - .label __36 = $38 - .label __44 = $f - .label __56 = $30 + .label __9 = $3b + .label __10 = $3b + .label __11 = $3b + .label __20 = $26 + .label __23 = $2c + .label __25 = $2e + .label __26 = $30 + .label __31 = $35 + .label __32 = $39 + .label __33 = $14 + .label __36 = $3d + .label __38 = $10 + .label __44 = $14 + .label __56 = $35 .label i = 2 .label timer_2 = 4 - .label h_bar = $e + .label h_bar = $f .label active_balls = 5 - .label sprite_idx = 9 - .label i_1 = 7 - .label timer = 6 - .label __59 = $3a - .label __60 = $38 - .label __61 = $11 - .label __62 = $13 - .label __63 = $15 - .label __64 = $17 - .label __65 = $19 - .label __66 = $1b - .label __67 = $1d - .label __68 = $1f - .label __69 = $21 - .label __70 = $27 - .label __71 = $29 - .label __72 = $23 - .label __73 = $25 - .label __74 = $34 - .label __75 = $f - .label __76 = $2c - .label __77 = $2e - .label __78 = $32 + .label sprite_idx = $a + .label i_1 = 8 + .label timer = 7 + .label __59 = $3f + .label __60 = $3d + .label __61 = $12 + .label __62 = $10 + .label __63 = $16 + .label __64 = $18 + .label __65 = $1a + .label __66 = $1c + .label __67 = $1e + .label __68 = $20 + .label __69 = $22 + .label __70 = $24 + .label __71 = $26 + .label __72 = $2c + .label __73 = $2e + .label __74 = $28 + .label __75 = $2a + .label __76 = $39 + .label __77 = $14 + .label __78 = $31 + .label __79 = $33 + .label __80 = $37 // main::initNES1 // asm // asm { cld ldx#$ff txs } @@ -6205,13 +6271,13 @@ main: { // ppuDataTransfer(PPU_PALETTE, palette, sizeof(palette)) // [38] call ppuDataTransfer // Transfer the palette - // [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 + // [131] phi from main::@17 to ppuDataTransfer [phi:main::@17->ppuDataTransfer] + // [131] 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 - // [129] phi (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 = (void*)(const nomodify byte*) PPU_PALETTE [phi:main::@17->ppuDataTransfer#1] -- pvoz1=pvoc1 + // [131] phi (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 = (void*)(const nomodify byte*) PPU_PALETTE [phi:main::@17->ppuDataTransfer#1] -- pvoz1=pvoc1 lda #PPU_PALETTE @@ -6222,13 +6288,13 @@ main: { // ppuDataFill(PPU_NAME_TABLE_0, 0, 32*30) // [40] call ppuDataFill // Fill the PPU attribute table - // [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 + // [144] phi from main::@19 to ppuDataFill [phi:main::@19->ppuDataFill] + // [144] 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 - // [142] phi (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 = (void*)(const nomodify byte*) PPU_NAME_TABLE_0 [phi:main::@19->ppuDataFill#1] -- pvoz1=pvoc1 + // [144] 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 @@ -6238,13 +6304,13 @@ main: { // main::@20 // ppuDataFill(PPU_ATTRIBUTE_TABLE_0, 0, 0x40) // [42] call ppuDataFill - // [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 + // [144] phi from main::@20 to ppuDataFill [phi:main::@20->ppuDataFill] + // [144] 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 - // [142] phi (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 = (void*)(const nomodify byte*) PPU_ATTRIBUTE_TABLE_0 [phi:main::@20->ppuDataFill#1] -- pvoz1=pvoc1 + // [144] 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 @@ -6254,13 +6320,13 @@ main: { // main::@21 // ppuDataTransfer(0x2040, h_bar_tilemap, sizeof(h_bar_tilemap)) // [44] call ppuDataTransfer - // [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 + // [131] phi from main::@21 to ppuDataTransfer [phi:main::@21->ppuDataTransfer] + // [131] 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 - // [129] phi (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 = (void*) 8256 [phi:main::@21->ppuDataTransfer#1] -- pvoz1=pvoc1 + // [131] 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 @@ -6306,8 +6372,9 @@ main: { // [50] phi (byte) main::timer#3 = (byte) 0 [phi:main::@1->main::@3#0] -- vbuz1=vbuc1 lda #0 sta.z timer - // [50] phi (byte) main::active_balls#2 = (byte) 0 [phi:main::@1->main::@3#1] -- vbuz1=vbuc1 + // [50] phi (word) main::active_balls#2 = (word) 0 [phi:main::@1->main::@3#1] -- vwuz1=vwuc1 sta.z active_balls + sta.z active_balls+1 // [50] phi (byte) main::timer_2#2 = (byte) 0 [phi:main::@1->main::@3#2] -- vbuz1=vbuc1 sta.z timer_2 // main::@3 @@ -6331,10 +6398,13 @@ main: { // [54] (volatile byte) scroll_y ← (byte~) main::$14 -- vbuz1=vbuaa sta.z scroll_y // if (active_balls < MAX_BALLS) - // [55] if((byte) main::active_balls#2>=(byte) $32) goto main::@5 -- vbuz1_ge_vbuc1_then_la1 + // [55] if((word) main::active_balls#2>=(byte) $32) goto main::@5 -- vwuz1_ge_vbuc1_then_la1 + lda.z active_balls+1 + bne __b5 lda.z active_balls cmp #$32 bcs __b5 + !: // main::@15 // if (timer++ == RELEASE_TIMER) // [56] (byte) main::timer#1 ← ++ (byte) main::timer#3 -- vbuxx=_inc_vbuz1 @@ -6348,44 +6418,77 @@ main: { !__b25: // main::@16 // active_balls++; - // [58] (byte) main::active_balls#1 ← ++ (byte) main::active_balls#2 -- vbuz1=_inc_vbuz1 + // [58] (word) main::active_balls#1 ← ++ (word) main::active_balls#2 -- vwuz1=_inc_vwuz1 inc.z active_balls + bne !+ + inc.z active_balls+1 + !: // balls[active_balls].x_position = 0 - // [59] (byte~) main::$38 ← (byte) main::active_balls#1 << (byte) 3 -- vbuxx=vbuz1_rol_3 + // [59] (word~) main::$38 ← (word) main::active_balls#1 << (byte) 3 -- vwuz1=vwuz2_rol_3 lda.z active_balls asl - asl - asl - tax - // [60] *((word*)(const struct $0*) balls + (byte~) main::$38) ← (byte) 0 -- pwuc1_derefidx_vbuxx=vbuc2 + sta.z __38 + lda.z active_balls+1 + rol + sta.z __38+1 + asl.z __38 + rol.z __38+1 + asl.z __38 + rol.z __38+1 + // [60] (word*~) main::$61 ← (word*)(const struct $0*) balls + (word~) main::$38 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __38 + clc + adc #balls + sta.z __61+1 + // [61] *((word*~) main::$61) ← (byte) 0 -- _deref_pwuz1=vbuc1 lda #0 - sta balls,x - sta balls+1,x + tay + sta (__61),y + tya + iny + sta (__61),y // balls[active_balls].y_position = 0 - // [61] *((word*)(const struct $0*) balls+(byte) 2 + (byte~) main::$38) ← (byte) 0 -- pwuc1_derefidx_vbuxx=vbuc2 - sta balls+2,x - sta balls+2+1,x - // [62] phi from main::@16 to main::@5 [phi:main::@16->main::@5] - // [62] phi (byte) main::timer#15 = (byte) 0 [phi:main::@16->main::@5#0] -- vbuz1=vbuc1 + // [62] (word*~) main::$62 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$38 -- pwuz1=pwuc1_plus_vwuz1 + clc + lda.z __62 + adc #balls+2 + sta.z __62+1 + // [63] *((word*~) main::$62) ← (byte) 0 -- _deref_pwuz1=vbuc1 + lda #0 + tay + sta (__62),y + tya + iny + sta (__62),y + // [64] phi from main::@16 to main::@5 [phi:main::@16->main::@5] + // [64] phi (byte) main::timer#15 = (byte) 0 [phi:main::@16->main::@5#0] -- vbuz1=vbuc1 sta.z timer - // [62] phi (byte) main::active_balls#8 = (byte) main::active_balls#1 [phi:main::@16->main::@5#1] -- register_copy - // [62] phi from main::@25 main::@4 to main::@5 [phi:main::@25/main::@4->main::@5] - // [62] phi (byte) main::timer#15 = (byte) main::timer#21 [phi:main::@25/main::@4->main::@5#0] -- register_copy - // [62] phi (byte) main::active_balls#8 = (byte) main::active_balls#2 [phi:main::@25/main::@4->main::@5#1] -- register_copy + // [64] phi (word) main::active_balls#8 = (word) main::active_balls#1 [phi:main::@16->main::@5#1] -- register_copy + // [64] phi from main::@25 main::@4 to main::@5 [phi:main::@25/main::@4->main::@5] + // [64] phi (byte) main::timer#15 = (byte) main::timer#21 [phi:main::@25/main::@4->main::@5#0] -- register_copy + // [64] phi (word) main::active_balls#8 = (word) main::active_balls#2 [phi:main::@25/main::@4->main::@5#1] -- register_copy // main::@5 __b5: - // [63] phi from main::@5 to main::@6 [phi:main::@5->main::@6] - // [63] phi (byte) main::sprite_idx#3 = (byte) 0 [phi:main::@5->main::@6#0] -- vbuz1=vbuc1 + // [65] phi from main::@5 to main::@6 [phi:main::@5->main::@6] + // [65] phi (byte) main::sprite_idx#3 = (byte) 0 [phi:main::@5->main::@6#0] -- vbuz1=vbuc1 lda #0 sta.z sprite_idx - // [63] phi (word) main::i#10 = (byte) 0 [phi:main::@5->main::@6#1] -- vwuz1=vbuc1 + // [65] phi (word) main::i#10 = (byte) 0 [phi:main::@5->main::@6#1] -- vwuz1=vbuc1 sta.z i_1 sta.z i_1+1 // main::@6 __b6: // for (i = 0; i < active_balls; i++) - // [64] if((word) main::i#10<(byte) main::active_balls#8) goto main::@7 -- vwuz1_lt_vbuz2_then_la1 + // [66] if((word) main::i#10<(word) main::active_balls#8) goto main::@7 -- vwuz1_lt_vwuz2_then_la1 lda.z i_1+1 + cmp.z active_balls+1 + bcc __b7 bne !+ lda.z i_1 cmp.z active_balls @@ -6393,34 +6496,34 @@ main: { !: // main::@8 // poke(0x2001) = 0x98 - // [65] *((byte*) 8193) ← (byte) $98 -- _deref_pbuc1=vbuc2 + // [67] *((byte*) 8193) ← (byte) $98 -- _deref_pbuc1=vbuc2 lda #$98 sta $2001 // main::@13 __b13: // while (!vblank_hit) - // [66] if((byte) 0==(volatile byte) vblank_hit) goto main::@13 -- vbuc1_eq_vbuz1_then_la1 + // [68] if((byte) 0==(volatile byte) vblank_hit) goto main::@13 -- vbuc1_eq_vbuz1_then_la1 lda #0 cmp.z vblank_hit beq __b13 // main::@14 // vblank_hit = 0 - // [67] (volatile byte) vblank_hit ← (byte) 0 -- vbuz1=vbuc1 + // [69] (volatile byte) vblank_hit ← (byte) 0 -- vbuz1=vbuc1 // wait for vblank sta.z vblank_hit // poke(0x2001) = 0x18 - // [68] *((byte*) 8193) ← (byte) $18 -- _deref_pbuc1=vbuc2 + // [70] *((byte*) 8193) ← (byte) $18 -- _deref_pbuc1=vbuc2 lda #$18 sta $2001 // [50] phi from main::@14 to main::@3 [phi:main::@14->main::@3] // [50] phi (byte) main::timer#3 = (byte) main::timer#15 [phi:main::@14->main::@3#0] -- register_copy - // [50] phi (byte) main::active_balls#2 = (byte) main::active_balls#8 [phi:main::@14->main::@3#1] -- register_copy + // [50] phi (word) main::active_balls#2 = (word) main::active_balls#8 [phi:main::@14->main::@3#1] -- register_copy // [50] phi (byte) main::timer_2#2 = (byte) main::timer_2#1 [phi:main::@14->main::@3#2] -- register_copy jmp __b4 // main::@7 __b7: // balls[i].x_position += balls[i].x_velocity - // [69] (word~) main::$44 ← (word) main::i#10 << (byte) 3 -- vwuz1=vwuz2_rol_3 + // [71] (word~) main::$44 ← (word) main::i#10 << (byte) 3 -- vwuz1=vwuz2_rol_3 lda.z i_1 asl sta.z __44 @@ -6431,22 +6534,6 @@ main: { 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::$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::$44 -- pwuz1=pwuc1_plus_vwuz2 lda.z __44 clc @@ -6455,53 +6542,42 @@ main: { lda.z __44+1 adc #>balls sta.z __63+1 - // [73] *((word*~) main::$63) ← *((word*~) main::$61) + *((word*~) main::$62) -- _deref_pwuz1=_deref_pwuz2_plus__deref_pwuz3 - ldy #0 - lda (__61),y - clc - adc (__62),y - sta (__63),y - iny - lda (__61),y - adc (__62),y - sta (__63),y - // balls[i].y_velocity += WEIGHT - // [74] (word*~) main::$64 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + // [73] (word*~) main::$64 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 lda.z __44 clc - adc #balls+6 + adc #>balls+4 sta.z __64+1 - // [75] (word*~) main::$65 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + // [74] (word*~) main::$65 ← (word*)(const struct $0*) balls + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __44 + clc + adc #balls + sta.z __65+1 + // [75] *((word*~) main::$65) ← *((word*~) main::$63) + *((word*~) main::$64) -- _deref_pwuz1=_deref_pwuz2_plus__deref_pwuz3 + ldy #0 + lda (__63),y + clc + adc (__64),y + sta (__65),y + iny + lda (__63),y + adc (__64),y + sta (__65),y + // balls[i].y_velocity += WEIGHT + // [76] (word*~) main::$66 ← (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 - ldy #0 - lda (__64),y - clc - adc #<$10 - sta (__65),y - iny - lda (__64),y - 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::$44 -- pwuz1=pwuc1_plus_vwuz2 - lda.z __44 - clc - adc #balls+2 + adc #>balls+6 sta.z __66+1 - // [78] (word*~) main::$67 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + // [77] (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 + // [78] *((word*~) main::$67) ← *((word*~) main::$66) + (byte) $10 -- _deref_pwuz1=_deref_pwuz2_plus_vwuc1 + ldy #0 + lda (__66),y + clc + adc #<$10 + sta (__67),y + iny + lda (__66),y + adc #>$10 + sta (__67),y + // balls[i].y_position += (balls[i].y_velocity += WEIGHT) // [79] (word*~) main::$68 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 lda.z __44 clc @@ -6517,33 +6604,49 @@ main: { lda.z __44+1 adc #>balls+2 sta.z __68+1 - // [80] *((word*~) main::$68) ← *((word*~) main::$66) + *((word*~) main::$67) -- _deref_pwuz1=_deref_pwuz2_plus__deref_pwuz3 - ldy #0 - lda (__66),y + // [80] (word*~) main::$69 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + lda.z __44 clc - adc (__67),y - sta (__68),y + adc #balls+6 + sta.z __69+1 + // [81] (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 + // [82] *((word*~) main::$70) ← *((word*~) main::$68) + *((word*~) main::$69) -- _deref_pwuz1=_deref_pwuz2_plus__deref_pwuz3 + ldy #0 + lda (__68),y + clc + adc (__69),y + sta (__70),y iny - lda (__66),y - adc (__67),y - sta (__68),y + lda (__68),y + adc (__69),y + sta (__70),y // balls[i].x_position >> 8 - // [81] (word*~) main::$69 ← (word*)(const struct $0*) balls + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + // [83] (word*~) main::$71 ← (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_pwuz1_ror_8 + sta.z __71+1 + // [84] (word~) main::$20 ← *((word*~) main::$71) >> (byte) 8 -- vwuz1=_deref_pwuz1_ror_8 ldy #1 lda (__20),y sta.z __20 dey sty.z __20+1 // if ((balls[i].x_position >> 8) < 8) - // [83] if((word~) main::$20>=(byte) 8) goto main::@9 -- vwuz1_ge_vbuc1_then_la1 + // [85] if((word~) main::$20>=(byte) 8) goto main::@9 -- vwuz1_ge_vbuc1_then_la1 tya bne __b9 lda.z __20 @@ -6552,69 +6655,69 @@ main: { !: // main::@11 // balls[i].x_velocity ^= 0xFFFF - // [84] (word*~) main::$72 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + // [86] (word*~) main::$74 ← (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 - // [85] (word*~) main::$73 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + sta.z __74+1 + // [87] (word*~) main::$75 ← (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 - // [86] *((word*~) main::$73) ← *((word*~) main::$72) ^ (word) $ffff -- _deref_pwuz1=_deref_pwuz2_bxor_vwuc1 + sta.z __75+1 + // [88] *((word*~) main::$75) ← *((word*~) main::$74) ^ (word) $ffff -- _deref_pwuz1=_deref_pwuz2_bxor_vwuc1 ldy #0 lda #<$ffff - eor (__72),y - sta (__73),y + eor (__74),y + sta (__75),y iny lda #>$ffff - eor (__72),y - sta (__73),y + eor (__74),y + sta (__75),y // main::@9 __b9: // balls[i].y_position >> 8 - // [87] (word*~) main::$70 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + // [89] (word*~) main::$72 ← (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 - // [88] (word~) main::$23 ← *((word*~) main::$70) >> (byte) 8 -- vwuz1=_deref_pwuz1_ror_8 + sta.z __72+1 + // [90] (word~) main::$23 ← *((word*~) main::$72) >> (byte) 8 -- vwuz1=_deref_pwuz1_ror_8 ldy #1 lda (__23),y sta.z __23 dey sty.z __23+1 - // [89] (word*~) main::$71 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + // [91] (word*~) main::$73 ← (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 - // [90] (word~) main::$25 ← *((word*~) main::$71) >> (byte) 8 -- vwuz1=_deref_pwuz1_ror_8 + sta.z __73+1 + // [92] (word~) main::$25 ← *((word*~) main::$73) >> (byte) 8 -- vwuz1=_deref_pwuz1_ror_8 ldy #1 lda (__25),y sta.z __25 dey sty.z __25+1 // h_bar + 8 - // [91] (byte~) main::$26 ← (byte) main::h_bar#1 + (byte) 8 -- vbuz1=vbuz2_plus_vbuc1 + // [93] (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) - // [92] if((word~) main::$23<(byte) main::h_bar#1) goto main::@10 -- vwuz1_lt_vbuz2_then_la1 + // [94] 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 @@ -6622,7 +6725,7 @@ main: { bcc __b10 !: // main::@24 - // [93] if((word~) main::$25>=(byte~) main::$26) goto main::@10 -- vwuz1_ge_vbuz2_then_la1 + // [95] if((word~) main::$25>=(byte~) main::$26) goto main::@10 -- vwuz1_ge_vbuz2_then_la1 lda.z __25+1 bne __b10 lda.z __25 @@ -6631,146 +6734,146 @@ main: { !: // main::@12 // balls[i].y_velocity ^= 0xFFFF - // [94] (word*~) main::$76 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + // [96] (word*~) main::$78 ← (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 - // [95] (word*~) main::$77 ← (word*)(const struct $0*) balls+(byte) 6 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + sta.z __78+1 + // [97] (word*~) main::$79 ← (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 - // [96] *((word*~) main::$77) ← *((word*~) main::$76) ^ (word) $ffff -- _deref_pwuz1=_deref_pwuz2_bxor_vwuc1 + sta.z __79+1 + // [98] *((word*~) main::$79) ← *((word*~) main::$78) ^ (word) $ffff -- _deref_pwuz1=_deref_pwuz2_bxor_vwuc1 ldy #0 lda #<$ffff - eor (__76),y - sta (__77),y + eor (__78),y + sta (__79),y iny lda #>$ffff - eor (__76),y - sta (__77),y + eor (__78),y + sta (__79),y // h_bar - 2 - // [97] (byte~) main::$30 ← (byte) main::h_bar#1 - (byte) 2 -- vbuaa=vbuz1_minus_2 + // [99] (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 - // [98] (word~) main::$56 ← (word)(byte~) main::$30 -- vwuz1=_word_vbuaa + // [100] (word~) main::$56 ← (word)(byte~) main::$30 -- vwuz1=_word_vbuaa sta.z __56 lda #0 sta.z __56+1 - // [99] (word~) main::$31 ← (word~) main::$56 << (byte) 8 -- vwuz1=vwuz1_rol_8 + // [101] (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) - // [100] (word*~) main::$78 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + // [102] (word*~) main::$80 ← (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 - // [101] *((word*~) main::$78) ← (word~) main::$31 -- _deref_pwuz1=vwuz2 + sta.z __80+1 + // [103] *((word*~) main::$80) ← (word~) main::$31 -- _deref_pwuz1=vwuz2 ldy #0 lda.z __31 - sta (__78),y + sta (__80),y iny lda.z __31+1 - sta (__78),y + sta (__80),y // main::@10 __b10: // balls[i].y_position >> 8 - // [102] (word*~) main::$74 ← (word*)(const struct $0*) balls+(byte) 2 + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz2 + // [104] (word*~) main::$76 ← (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 - // [103] (word~) main::$32 ← *((word*~) main::$74) >> (byte) 8 -- vwuz1=_deref_pwuz1_ror_8 + sta.z __76+1 + // [105] (word~) main::$32 ← *((word*~) main::$76) >> (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) - // [104] (byte~) main::$48 ← (byte) main::sprite_idx#3 << (byte) 2 -- vbuxx=vbuz1_rol_2 + // [106] (byte~) main::$48 ← (byte) main::sprite_idx#3 << (byte) 2 -- vbuxx=vbuz1_rol_2 lda.z sprite_idx asl asl tax - // [105] *((byte*)(const struct SpriteData*) SPRITE_BUFFER + (byte~) main::$48) ← (byte)(word~) main::$32 -- pbuc1_derefidx_vbuxx=_byte_vwuz1 + // [107] *((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 - // [106] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_TILE + (byte~) main::$48) ← (byte) $a -- pbuc1_derefidx_vbuxx=vbuc2 + // [108] *((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 - // [107] *((byte*)(const struct SpriteData*) SPRITE_BUFFER+(const byte) OFFSET_STRUCT_SPRITEDATA_ATTRIBUTES + (byte~) main::$48) ← (byte) 3 -- pbuc1_derefidx_vbuxx=vbuc2 + // [109] *((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 - // [108] (word*~) main::$75 ← (word*)(const struct $0*) balls + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz1 + // [110] (word*~) main::$77 ← (word*)(const struct $0*) balls + (word~) main::$44 -- pwuz1=pwuc1_plus_vwuz1 clc - lda.z __75 + lda.z __77 adc #balls - sta.z __75+1 - // [109] (word~) main::$33 ← *((word*~) main::$75) >> (byte) 8 -- vwuz1=_deref_pwuz1_ror_8 + sta.z __77+1 + // [111] (word~) main::$33 ← *((word*~) main::$77) >> (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) - // [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 + // [112] *((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++; - // [111] (byte) main::sprite_idx#2 ← ++ (byte) main::sprite_idx#3 -- vbuz1=_inc_vbuz1 + // [113] (byte) main::sprite_idx#2 ← ++ (byte) main::sprite_idx#3 -- vbuz1=_inc_vbuz1 inc.z sprite_idx // for (i = 0; i < active_balls; i++) - // [112] (word) main::i#4 ← ++ (word) main::i#10 -- vwuz1=_inc_vwuz1 + // [114] (word) main::i#4 ← ++ (word) main::i#10 -- vwuz1=_inc_vwuz1 inc.z i_1 bne !+ inc.z i_1+1 !: - // [63] phi from main::@10 to main::@6 [phi:main::@10->main::@6] - // [63] phi (byte) main::sprite_idx#3 = (byte) main::sprite_idx#2 [phi:main::@10->main::@6#0] -- register_copy - // [63] phi (word) main::i#10 = (word) main::i#4 [phi:main::@10->main::@6#1] -- register_copy + // [65] phi from main::@10 to main::@6 [phi:main::@10->main::@6] + // [65] phi (byte) main::sprite_idx#3 = (byte) main::sprite_idx#2 [phi:main::@10->main::@6#0] -- register_copy + // [65] phi (word) main::i#10 = (word) main::i#4 [phi:main::@10->main::@6#1] -- register_copy jmp __b6 // main::@25 __b25: - // [113] (byte) main::timer#21 ← (byte) main::timer#1 -- vbuz1=vbuxx + // [115] (byte) main::timer#21 ← (byte) main::timer#1 -- vbuz1=vbuxx stx.z timer jmp __b5 - // [114] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + // [116] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // main::@2 __b2: // rand() - // [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 + // [117] call rand + // [154] phi from main::@2 to rand [phi:main::@2->rand] + // [154] phi (word) rand_state#10 = (word) rand_state#17 [phi:main::@2->rand#0] -- register_copy jsr rand // rand() - // [116] (word) rand::return#2 ← (word) rand::return#0 + // [118] (word) rand::return#2 ← (word) rand::return#0 // main::@22 - // [117] (word~) main::$9 ← (word) rand::return#2 + // [119] (word~) main::$9 ← (word) rand::return#2 // rand() & 0x3FF - // [118] (word~) main::$10 ← (word~) main::$9 & (word) $3ff -- vwuz1=vwuz1_band_vwuc1 + // [120] (word~) main::$10 ← (word~) main::$9 & (word) $3ff -- vwuz1=vwuz1_band_vwuc1 lda.z __10 and #<$3ff sta.z __10 @@ -6778,7 +6881,7 @@ main: { and #>$3ff sta.z __10+1 // balls[i].x_velocity = rand() & 0x3FF - // [119] (word~) main::$36 ← (word) main::i#14 << (byte) 3 -- vwuz1=vwuz2_rol_3 + // [121] (word~) main::$36 ← (word) main::i#14 << (byte) 3 -- vwuz1=vwuz2_rol_3 lda.z i asl sta.z __36 @@ -6789,7 +6892,7 @@ main: { rol.z __36+1 asl.z __36 rol.z __36+1 - // [120] (word*~) main::$59 ← (word*)(const struct $0*) balls+(byte) 4 + (word~) main::$36 -- pwuz1=pwuc1_plus_vwuz2 + // [122] (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 + // [123] *((word*~) main::$59) ← (word~) main::$10 -- _deref_pwuz1=vwuz2 ldy #0 lda.z __10 sta (__59),y @@ -6805,21 +6908,21 @@ main: { 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 + // [124] call rand + // [154] phi from main::@22 to rand [phi:main::@22->rand] + // [154] 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 + // [125] (word) rand::return#3 ← (word) rand::return#0 // main::@23 - // [124] (word~) main::$11 ← (word) rand::return#3 + // [126] (word~) main::$11 ← (word) rand::return#3 // rand() & 0x0FF - // [125] (byte~) main::$12 ← (word~) main::$11 & (byte) $ff -- vbuxx=vwuz1_band_vbuc1 + // [127] (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 + // [128] (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 - // [127] *((word*~) main::$60) ← (byte~) main::$12 -- _deref_pwuz1=vbuxx + // [129] *((word*~) main::$60) ← (byte~) main::$12 -- _deref_pwuz1=vbuxx txa ldy #0 sta (__60),y @@ -6835,7 +6938,7 @@ main: { iny sta (__60),y // for (i = 0; i < MAX_BALLS; i++) - // [128] (word) main::i#2 ← ++ (word) main::i#14 -- vwuz1=_inc_vwuz1 + // [130] (word) main::i#2 ← ++ (word) main::i#14 -- vwuz1=_inc_vwuz1 inc.z i bne !+ inc.z i+1 @@ -6850,37 +6953,37 @@ main: { // - ppuData : Pointer in the PPU memory // - cpuData : Pointer to the CPU memory (RAM of ROM) // - size : The number of bytes to transfer -// ppuDataTransfer(void* zp($11) cpuData) +// ppuDataTransfer(void* zp($12) cpuData) ppuDataTransfer: { - .label ppuDataPrepare1_ppuData = $f - .label cpuSrc = $11 - .label i = $13 - .label cpuData = $11 + .label ppuDataPrepare1_ppuData = $10 + .label cpuSrc = $12 + .label i = $14 + .label cpuData = $12 // ppuDataTransfer::ppuDataPrepare1 // >ppuData - // [130] (byte~) ppuDataTransfer::ppuDataPrepare1_$0 ← > (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 -- vbuaa=_hi_pvoz1 + // [132] (byte~) ppuDataTransfer::ppuDataPrepare1_$0 ← > (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 -- vbuaa=_hi_pvoz1 lda.z ppuDataPrepare1_ppuData+1 // PPU->PPUADDR = >ppuData - // [131] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataTransfer::ppuDataPrepare1_$0 -- _deref_pbuc1=vbuaa + // [133] *((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] - // [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 + // [136] (byte*) ppuDataTransfer::cpuSrc#6 ← (byte*)(nomodify void*) ppuDataTransfer::cpuData#2 + // [137] phi from ppuDataTransfer::@3 to ppuDataTransfer::@1 [phi:ppuDataTransfer::@3->ppuDataTransfer::@1] + // [137] phi (byte*) ppuDataTransfer::cpuSrc#2 = (byte*) ppuDataTransfer::cpuSrc#6 [phi:ppuDataTransfer::@3->ppuDataTransfer::@1#0] -- register_copy + // [137] 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 - // [139] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) ppuDataTransfer::ppuDataPut1_val#0 -- _deref_pbuc1=vbuaa + // [141] *((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++); - // [140] (byte*) ppuDataTransfer::cpuSrc#1 ← ++ (byte*) ppuDataTransfer::cpuSrc#2 -- pbuz1=_inc_pbuz1 + // [142] (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] - // [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 + // [137] phi from ppuDataTransfer::@4 to ppuDataTransfer::@1 [phi:ppuDataTransfer::@4->ppuDataTransfer::@1] + // [137] phi (byte*) ppuDataTransfer::cpuSrc#2 = (byte*) ppuDataTransfer::cpuSrc#1 [phi:ppuDataTransfer::@4->ppuDataTransfer::@1#0] -- register_copy + // [137] phi (word) ppuDataTransfer::i#2 = (word) ppuDataTransfer::i#1 [phi:ppuDataTransfer::@4->ppuDataTransfer::@1#1] -- register_copy jmp __b1 } // ppuDataFill // Fill a number of bytes in the PPU memory // - ppuData : Pointer in the PPU memory // - size : The number of bytes to transfer -// ppuDataFill(word zp($11) size) +// ppuDataFill(word zp($12) size) ppuDataFill: { - .label ppuDataPrepare1_ppuData = $f - .label i = $13 - .label size = $11 + .label ppuDataPrepare1_ppuData = $10 + .label i = $14 + .label size = $12 // ppuDataFill::ppuDataPrepare1 // >ppuData - // [143] (byte~) ppuDataFill::ppuDataPrepare1_$0 ← > (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 -- vbuaa=_hi_pvoz1 + // [145] (byte~) ppuDataFill::ppuDataPrepare1_$0 ← > (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 -- vbuaa=_hi_pvoz1 lda.z ppuDataPrepare1_ppuData+1 // PPU->PPUADDR = >ppuData - // [144] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUADDR) ← (byte~) ppuDataFill::ppuDataPrepare1_$0 -- _deref_pbuc1=vbuaa + // [146] *((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] - // [147] phi (word) ppuDataFill::i#2 = (word) 0 [phi:ppuDataFill::ppuDataPrepare1->ppuDataFill::@1#0] -- vwuz1=vwuc1 + // [149] phi from ppuDataFill::ppuDataPrepare1 to ppuDataFill::@1 [phi:ppuDataFill::ppuDataPrepare1->ppuDataFill::@1] + // [149] phi (word) ppuDataFill::i#2 = (word) 0 [phi:ppuDataFill::ppuDataPrepare1->ppuDataFill::@1#0] -- vwuz1=vwuc1 lda #<0 sta.z i sta.z i+1 @@ -6950,7 +7053,7 @@ ppuDataFill: { // ppuDataFill::@1 __b1: // for(unsigned int i=0;iPPUDATA = val - // [150] *((byte*)(const struct RICOH_2C02*) PPU+(const byte) OFFSET_STRUCT_RICOH_2C02_PPUDATA) ← (byte) 0 -- _deref_pbuc1=vbuc2 + // [152] *((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] - // [147] phi (word) ppuDataFill::i#2 = (word) ppuDataFill::i#1 [phi:ppuDataFill::@2->ppuDataFill::@1#0] -- register_copy + // [149] phi from ppuDataFill::@2 to ppuDataFill::@1 [phi:ppuDataFill::@2->ppuDataFill::@1] + // [149] phi (word) ppuDataFill::i#2 = (word) ppuDataFill::i#1 [phi:ppuDataFill::@2->ppuDataFill::@1#0] -- register_copy jmp __b1 } // rand @@ -6986,12 +7089,12 @@ ppuDataFill: { // Information https://en.wikipedia.org/wiki/Xorshift // Source http://www.retroprogramming.com/2017/07/xorshift-pseudorandom-numbers-in-z80.html rand: { - .label __0 = $3c - .label __1 = $3e - .label __2 = $40 - .label return = $36 + .label __0 = $41 + .label __1 = $43 + .label __2 = $45 + .label return = $3b // rand_state << 7 - // [153] (word~) rand::$0 ← (word) rand_state#10 << (byte) 7 -- vwuz1=vwuz2_rol_7 + // [155] (word~) rand::$0 ← (word) rand_state#10 << (byte) 7 -- vwuz1=vwuz2_rol_7 lda.z rand_state+1 lsr lda.z rand_state @@ -7001,7 +7104,7 @@ rand: { ror sta.z __0 // rand_state ^= rand_state << 7 - // [154] (word) rand_state#0 ← (word) rand_state#10 ^ (word~) rand::$0 -- vwuz1=vwuz1_bxor_vwuz2 + // [156] (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 @@ -7009,13 +7112,13 @@ rand: { eor.z __0+1 sta.z rand_state+1 // rand_state >> 9 - // [155] (word~) rand::$1 ← (word) rand_state#0 >> (byte) 9 -- vwuz1=vwuz2_ror_9 + // [157] (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 - // [156] (word) rand_state#1 ← (word) rand_state#0 ^ (word~) rand::$1 -- vwuz1=vwuz1_bxor_vwuz2 + // [158] (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 @@ -7023,13 +7126,13 @@ rand: { eor.z __1+1 sta.z rand_state+1 // rand_state << 8 - // [157] (word~) rand::$2 ← (word) rand_state#1 << (byte) 8 -- vwuz1=vwuz2_rol_8 + // [159] (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 - // [158] (word) rand_state#11 ← (word) rand_state#1 ^ (word~) rand::$2 -- vwuz1=vwuz1_bxor_vwuz2 + // [160] (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 @@ -7037,14 +7140,14 @@ rand: { eor.z __2+1 sta.z rand_state+1 // return rand_state; - // [159] (word) rand::return#0 ← (word) rand_state#11 -- vwuz1=vwuz2 + // [161] (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 // } - // [160] return + // [162] 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 ebecaff25..0a8208fbd 100644 --- a/src/test/ref/complex/nes-balls/kickballs-3.sym +++ b/src/test/ref/complex/nes-balls/kickballs-3.sym @@ -73,44 +73,46 @@ (const struct $0*) balls[(number) $40] = { fill( $40, 0) } (const to_nomodify byte*) h_bar_tilemap[] = { (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1 } (signed word()) main() -(word~) main::$10 zp[2]:54 67.33333333333333 -(word~) main::$11 zp[2]:54 202.0 +(word~) main::$10 zp[2]:59 67.33333333333333 +(word~) main::$11 zp[2]:59 202.0 (byte~) main::$12 reg byte x 101.0 (byte~) main::$14 reg byte a 202.0 -(word~) main::$20 zp[2]:33 2002.0 -(word~) main::$23 zp[2]:39 500.5 -(word~) main::$25 zp[2]:41 667.3333333333334 -(byte~) main::$26 zp[1]:43 1001.0 +(word~) main::$20 zp[2]:38 2002.0 +(word~) main::$23 zp[2]:44 500.5 +(word~) main::$25 zp[2]:46 667.3333333333334 +(byte~) main::$26 zp[1]:48 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]:15 1001.0 -(word~) main::$36 zp[2]:56 43.285714285714285 -(byte~) main::$38 reg byte x 151.5 -(word~) main::$44 zp[2]:15 487.6666666666668 +(word~) main::$31 zp[2]:53 1001.0 +(word~) main::$32 zp[2]:57 500.5 +(word~) main::$33 zp[2]:20 1001.0 +(word~) main::$36 zp[2]:61 43.285714285714285 +(word~) main::$38 zp[2]:16 101.0 +(word~) main::$44 zp[2]:20 487.6666666666668 (byte~) main::$48 reg byte x 834.1666666666667 -(word~) main::$56 zp[2]:48 2002.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 -(word*~) main::$64 zp[2]:23 1001.0 -(word*~) main::$65 zp[2]:25 2002.0 -(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]:33 2002.0 -(word*~) main::$70 zp[2]:39 2002.0 -(word*~) main::$71 zp[2]:41 2002.0 -(word*~) main::$72 zp[2]:35 1001.0 -(word*~) main::$73 zp[2]:37 2002.0 -(word*~) main::$74 zp[2]:52 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]:50 2002.0 -(word~) main::$9 zp[2]:54 202.0 +(word~) main::$56 zp[2]:53 2002.0 +(word*~) main::$59 zp[2]:63 202.0 +(word*~) main::$60 zp[2]:61 202.0 +(word*~) main::$61 zp[2]:18 202.0 +(word*~) main::$62 zp[2]:16 202.0 +(word*~) main::$63 zp[2]:22 667.3333333333334 +(word*~) main::$64 zp[2]:24 1001.0 +(word*~) main::$65 zp[2]:26 2002.0 +(word*~) main::$66 zp[2]:28 1001.0 +(word*~) main::$67 zp[2]:30 2002.0 +(word*~) main::$68 zp[2]:32 667.3333333333334 +(word*~) main::$69 zp[2]:34 1001.0 +(word*~) main::$70 zp[2]:36 2002.0 +(word*~) main::$71 zp[2]:38 2002.0 +(word*~) main::$72 zp[2]:44 2002.0 +(word*~) main::$73 zp[2]:46 2002.0 +(word*~) main::$74 zp[2]:40 1001.0 +(word*~) main::$75 zp[2]:42 2002.0 +(word*~) main::$76 zp[2]:57 2002.0 +(word*~) main::$77 zp[2]:20 2002.0 +(word*~) main::$78 zp[2]:49 1001.0 +(word*~) main::$79 zp[2]:51 2002.0 +(word*~) main::$80 zp[2]:55 2002.0 +(word~) main::$9 zp[2]:59 202.0 (label) main::@1 (label) main::@10 (label) main::@11 @@ -136,18 +138,18 @@ (label) main::@7 (label) main::@8 (label) main::@9 -(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 27.54901960784314 +(word) main::active_balls +(word) main::active_balls#1 active_balls zp[2]:5 50.5 +(word) main::active_balls#2 active_balls zp[2]:5 56.11111111111111 +(word) main::active_balls#8 active_balls zp[2]:5 27.54901960784314 (label) main::enableVideoOutput1 (byte) main::h_bar -(byte) main::h_bar#1 h_bar zp[1]:14 55.258620689655174 +(byte) main::h_bar#1 h_bar zp[1]:15 53.41666666666667 (word) main::i -(word) main::i#10 i_1 zp[2]:7 88.97777777777777 +(word) main::i#10 i_1 zp[2]:8 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 +(word) main::i#4 i_1 zp[2]:8 2002.0 (label) main::initNES1 (label) main::initNES1_@1 (label) main::initNES1_@7 @@ -165,15 +167,15 @@ (label) main::initNES1_waitForVBlank2_@1 (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 68.25 +(byte) main::sprite_idx#2 sprite_idx zp[1]:10 1001.0 +(byte) main::sprite_idx#3 sprite_idx zp[1]:10 68.25 (byte) main::timer (byte) main::timer#1 reg byte x 101.0 -(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#15 timer zp[1]:7 5.9411764705882355 +(byte) main::timer#21 timer zp[1]:7 202.0 +(byte) main::timer#3 timer zp[1]:7 57.714285714285715 (byte) main::timer_2 -(byte) main::timer_2#1 timer_2 zp[1]:4 4.80952380952381 +(byte) main::timer_2#1 timer_2 zp[1]:4 4.661538461538462 (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) @@ -181,18 +183,18 @@ (label) ppuDataFill::@2 (label) ppuDataFill::@return (word) ppuDataFill::i -(word) ppuDataFill::i#1 i zp[2]:19 2002.0 -(word) ppuDataFill::i#2 i zp[2]:19 1001.0 +(word) ppuDataFill::i#1 i zp[2]:20 2002.0 +(word) ppuDataFill::i#2 i zp[2]:20 1001.0 (nomodify void*) ppuDataFill::ppuData (label) ppuDataFill::ppuDataPrepare1 (byte~) ppuDataFill::ppuDataPrepare1_$0 reg byte a 202.0 (byte~) ppuDataFill::ppuDataPrepare1_$1 reg byte a 202.0 (nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData -(nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 ppuDataPrepare1_ppuData zp[2]:15 67.33333333333333 +(nomodify void*) ppuDataFill::ppuDataPrepare1_ppuData#0 ppuDataPrepare1_ppuData zp[2]:16 67.33333333333333 (label) ppuDataFill::ppuDataPut1 (byte) ppuDataFill::ppuDataPut1_val (word) ppuDataFill::size -(word) ppuDataFill::size#3 size zp[2]:17 111.22222222222223 +(word) ppuDataFill::size#3 size zp[2]:18 111.22222222222223 (byte) ppuDataFill::val (void()) ppuDataTransfer((nomodify void*) ppuDataTransfer::ppuData , (nomodify void*) ppuDataTransfer::cpuData , (word) ppuDataTransfer::size) (label) ppuDataTransfer::@1 @@ -201,20 +203,20 @@ (label) ppuDataTransfer::@4 (label) ppuDataTransfer::@return (nomodify void*) ppuDataTransfer::cpuData -(nomodify void*) ppuDataTransfer::cpuData#2 cpuData zp[2]:17 +(nomodify void*) ppuDataTransfer::cpuData#2 cpuData zp[2]:18 (byte*) ppuDataTransfer::cpuSrc -(byte*) ppuDataTransfer::cpuSrc#1 cpuSrc zp[2]:17 1001.0 -(byte*) ppuDataTransfer::cpuSrc#2 cpuSrc zp[2]:17 776.0 -(byte*) ppuDataTransfer::cpuSrc#6 cpuSrc zp[2]:17 202.0 +(byte*) ppuDataTransfer::cpuSrc#1 cpuSrc zp[2]:18 1001.0 +(byte*) ppuDataTransfer::cpuSrc#2 cpuSrc zp[2]:18 776.0 +(byte*) ppuDataTransfer::cpuSrc#6 cpuSrc zp[2]:18 202.0 (word) ppuDataTransfer::i -(word) ppuDataTransfer::i#1 i zp[2]:19 2002.0 -(word) ppuDataTransfer::i#2 i zp[2]:19 600.5999999999999 +(word) ppuDataTransfer::i#1 i zp[2]:20 2002.0 +(word) ppuDataTransfer::i#2 i zp[2]:20 600.5999999999999 (nomodify void*) ppuDataTransfer::ppuData (label) ppuDataTransfer::ppuDataPrepare1 (byte~) ppuDataTransfer::ppuDataPrepare1_$0 reg byte a 202.0 (byte~) ppuDataTransfer::ppuDataPrepare1_$1 reg byte a 202.0 (nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData -(nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 ppuDataPrepare1_ppuData zp[2]:15 67.33333333333333 +(nomodify void*) ppuDataTransfer::ppuDataPrepare1_ppuData#0 ppuDataPrepare1_ppuData zp[2]:16 67.33333333333333 (label) ppuDataTransfer::ppuDataPut1 (byte) ppuDataTransfer::ppuDataPut1_val (byte) ppuDataTransfer::ppuDataPut1_val#0 reg byte a 2002.0 @@ -230,76 +232,77 @@ (byte) printf_format_string::justify_left (byte) printf_format_string::min_length (word()) rand() -(word~) rand::$0 zp[2]:60 2002.0 -(word~) rand::$1 zp[2]:62 2002.0 -(word~) rand::$2 zp[2]:64 2002.0 +(word~) rand::$0 zp[2]:65 2002.0 +(word~) rand::$1 zp[2]:67 2002.0 +(word~) rand::$2 zp[2]:69 2002.0 (label) rand::@return (word) rand::return -(word) rand::return#0 return zp[2]:54 300.75 -(word) rand::return#2 return zp[2]:54 202.0 -(word) rand::return#3 return zp[2]:54 202.0 +(word) rand::return#0 return zp[2]:59 300.75 +(word) rand::return#2 return zp[2]:59 202.0 +(word) rand::return#3 return zp[2]:59 202.0 (word) rand_state -(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 129.64705882352942 -(word) rand_state#17 rand_state zp[2]:10 67.33333333333333 -(volatile byte) scroll_y loadstore zp[1]:12 105.0 +(word) rand_state#0 rand_state zp[2]:11 1501.5 +(word) rand_state#1 rand_state zp[2]:11 1501.5 +(word) rand_state#10 rand_state zp[2]:11 1102.0 +(word) rand_state#11 rand_state zp[2]:11 129.64705882352942 +(word) rand_state#17 rand_state zp[2]:11 67.33333333333333 +(volatile byte) scroll_y loadstore zp[1]:13 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 } interrupt(HARDWARE_STACK)(void()) vblank() (label) vblank::@1 (label) vblank::@return (label) vblank::ppuSpriteBufferDmaTransfer1 (struct SpriteData*) vblank::ppuSpriteBufferDmaTransfer1_spriteBuffer -(volatile byte) vblank_hit loadstore zp[1]:13 9.008130081300813 +(volatile byte) vblank_hit loadstore zp[1]:14 8.863999999999999 reg byte x [ main::initNES1_i#2 main::initNES1_i#1 ] zp[2]:2 [ main::i#14 main::i#2 ] zp[1]:4 [ main::timer_2#2 main::timer_2#1 ] -zp[1]:5 [ main::active_balls#2 main::active_balls#8 main::active_balls#1 ] -zp[1]:6 [ main::timer#3 main::timer#15 main::timer#21 ] -zp[2]:7 [ main::i#10 main::i#4 ] -zp[1]:9 [ main::sprite_idx#3 main::sprite_idx#2 ] -zp[2]:10 [ rand_state#10 rand_state#17 rand_state#11 rand_state#0 rand_state#1 ] -zp[1]:12 [ scroll_y ] -zp[1]:13 [ vblank_hit ] +zp[2]:5 [ main::active_balls#2 main::active_balls#8 main::active_balls#1 ] +zp[1]:7 [ main::timer#3 main::timer#15 main::timer#21 ] +zp[2]:8 [ main::i#10 main::i#4 ] +zp[1]:10 [ main::sprite_idx#3 main::sprite_idx#2 ] +zp[2]:11 [ rand_state#10 rand_state#17 rand_state#11 rand_state#0 rand_state#1 ] +zp[1]:13 [ scroll_y ] +zp[1]:14 [ vblank_hit ] reg byte a [ main::initNES1_waitForVBlank1_$0 ] reg byte a [ main::initNES1_waitForVBlank2_$0 ] -zp[1]:14 [ main::h_bar#1 ] +zp[1]:15 [ main::h_bar#1 ] reg byte a [ main::$14 ] reg byte x [ main::timer#1 ] -reg byte x [ main::$38 ] -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 ] -zp[2]:23 [ main::$64 ] -zp[2]:25 [ main::$65 ] -zp[2]:27 [ main::$66 ] -zp[2]:29 [ main::$67 ] -zp[2]:31 [ main::$68 ] -zp[2]:33 [ main::$69 main::$20 ] -zp[2]:35 [ main::$72 ] -zp[2]:37 [ main::$73 ] -zp[2]:39 [ main::$70 main::$23 ] -zp[2]:41 [ main::$71 main::$25 ] -zp[1]:43 [ main::$26 ] -zp[2]:44 [ main::$76 ] -zp[2]:46 [ main::$77 ] +zp[2]:16 [ main::$38 main::$62 ppuDataFill::ppuDataPrepare1_ppuData#0 ppuDataTransfer::ppuDataPrepare1_ppuData#0 ] +zp[2]:18 [ main::$61 ppuDataFill::size#3 ppuDataTransfer::cpuData#2 ppuDataTransfer::cpuSrc#2 ppuDataTransfer::cpuSrc#6 ppuDataTransfer::cpuSrc#1 ] +zp[2]:20 [ main::$44 main::$77 main::$33 ppuDataFill::i#2 ppuDataFill::i#1 ppuDataTransfer::i#2 ppuDataTransfer::i#1 ] +zp[2]:22 [ main::$63 ] +zp[2]:24 [ main::$64 ] +zp[2]:26 [ main::$65 ] +zp[2]:28 [ main::$66 ] +zp[2]:30 [ main::$67 ] +zp[2]:32 [ main::$68 ] +zp[2]:34 [ main::$69 ] +zp[2]:36 [ main::$70 ] +zp[2]:38 [ main::$71 main::$20 ] +zp[2]:40 [ main::$74 ] +zp[2]:42 [ main::$75 ] +zp[2]:44 [ main::$72 main::$23 ] +zp[2]:46 [ main::$73 main::$25 ] +zp[1]:48 [ main::$26 ] +zp[2]:49 [ main::$78 ] +zp[2]:51 [ main::$79 ] reg byte a [ main::$30 ] -zp[2]:48 [ main::$56 main::$31 ] -zp[2]:50 [ main::$78 ] -zp[2]:52 [ main::$74 main::$32 ] +zp[2]:53 [ main::$56 main::$31 ] +zp[2]:55 [ main::$80 ] +zp[2]:57 [ main::$76 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::$36 main::$60 ] -zp[2]:58 [ main::$59 ] +zp[2]:59 [ rand::return#2 main::$9 rand::return#0 main::$10 rand::return#3 main::$11 ] +zp[2]:61 [ main::$36 main::$60 ] +zp[2]:63 [ main::$59 ] reg byte x [ main::$12 ] reg byte a [ ppuDataTransfer::ppuDataPrepare1_$0 ] reg byte a [ ppuDataTransfer::ppuDataPrepare1_$1 ] reg byte a [ ppuDataTransfer::ppuDataPut1_val#0 ] reg byte a [ ppuDataFill::ppuDataPrepare1_$0 ] reg byte a [ ppuDataFill::ppuDataPrepare1_$1 ] -zp[2]:60 [ rand::$0 ] -zp[2]:62 [ rand::$1 ] -zp[2]:64 [ rand::$2 ] +zp[2]:65 [ rand::$0 ] +zp[2]:67 [ rand::$1 ] +zp[2]:69 [ rand::$2 ]