From ce28c50d346f1f069e23515a2a0ac2884388f6c4 Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Fri, 19 May 2023 11:06:44 +0200 Subject: [PATCH] updated tests --- .../kickc/test/TestProgramsFast.java | 5 + src/test/kc/bitmap-circle-standalone.c | 72 + src/test/ref/bitmap-circle-standalone.asm | 435 +++ src/test/ref/bitmap-circle-standalone.cfg | 134 + src/test/ref/bitmap-circle-standalone.log | 2458 +++++++++++++++++ src/test/ref/bitmap-circle-standalone.sym | 94 + .../ref/complex/borderline_pacman/pacman.asm | 94 +- .../ref/complex/borderline_pacman/pacman.log | 2153 +++++++-------- .../ref/complex/borderline_pacman/pacman.sym | 169 +- .../new_30_years_low_resolution.log | 188 +- 10 files changed, 4418 insertions(+), 1384 deletions(-) create mode 100644 src/test/kc/bitmap-circle-standalone.c create mode 100644 src/test/ref/bitmap-circle-standalone.asm create mode 100644 src/test/ref/bitmap-circle-standalone.cfg create mode 100644 src/test/ref/bitmap-circle-standalone.log create mode 100644 src/test/ref/bitmap-circle-standalone.sym diff --git a/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java b/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java index 90670856d..1b98eede6 100644 --- a/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java +++ b/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java @@ -1657,6 +1657,11 @@ public class TestProgramsFast extends TestPrograms { */ + @Test + public void testBitmapCircleStandalone() throws IOException { + compileAndCompare("bitmap-circle-standalone.c"); + } + @Test public void testBitmapCircle2() throws IOException { compileAndCompare("bitmap-circle-2.c"); diff --git a/src/test/kc/bitmap-circle-standalone.c b/src/test/kc/bitmap-circle-standalone.c new file mode 100644 index 000000000..0f2e09179 --- /dev/null +++ b/src/test/kc/bitmap-circle-standalone.c @@ -0,0 +1,72 @@ +// Plots a circle on a bitmap using Bresenham's Circle algorithm +// Coded by Richard-William Loerakker +// Original Source https://bcaorganizer.blogspot.com/p/c-program-for_21.html?fbclid=IwAR0iL8pYcCqhCPa6LmtQ9qej-YonYVepY2cBegYRIWO0l8RPeOnTVniMAac + + +byte* const SCREEN = (byte*)$400; +byte* const BITMAP = (byte*)$2000; +byte* const COLORS = (byte*)$d800; + +byte bitmask[] = { 128, 64, 32, 16, 8, 4, 2, 1 }; + +char* const D011 = (char*)0xd011; +char* const VICII_MEMORY = (char*)0xd018; +char* const BORDER_COLOR = (char*)0xd020; +const char VICII_BMM = %00100000; +const char VICII_DEN = %00010000; +const char VICII_RSEL = %00001000; +const char BLUE = 0x6; + +void main() { + fill(BITMAP,40*25*8,0); + fill(SCREEN,40*25,$16); + + *BORDER_COLOR = BLUE; + *D011 = VICII_BMM|VICII_DEN|VICII_RSEL|3; + *VICII_MEMORY = (byte)((((word)SCREEN&$3fff)/$40)|(((word)BITMAP&$3fff)/$400)); + + circle(100,100,50); + + do {} while (true); +} + +void circle(int xc, int yc, int r) { + int x = 0; + int y = r; + int p = 3-(r << 1); + + for(int x = 0; x <= y; x ++) { + if(p < 0) { + p = p + (x << 2) + 6; + } else { + y=y-1; + p = p + ((x-y) << 2) + 10; + } + + plot(xc+x,yc-y); + plot(xc-x,yc-y); + plot(xc+x,yc+y); + plot(xc-x,yc+y); + plot(xc+y,yc-x); + plot(xc-y,yc-x); + plot(xc+y,yc+x); + plot(xc-y,yc+x); + } +} + +void plot(int x, int y) { + byte* location = BITMAP; + location += x & $fff8; + location += (char)y & 7; + location += ((y >> 3) * 320); + (*location) = (*location) | bitmask[x & 7]; +} + +// Fill some memory with a value +void fill(byte* start, int size, byte val) { + byte* end = start + size; + for(byte* addr = start; addr!=end; addr++) { + *addr = val; + } +} + diff --git a/src/test/ref/bitmap-circle-standalone.asm b/src/test/ref/bitmap-circle-standalone.asm new file mode 100644 index 000000000..49f1f4991 --- /dev/null +++ b/src/test/ref/bitmap-circle-standalone.asm @@ -0,0 +1,435 @@ +// Plots a circle on a bitmap using Bresenham's Circle algorithm +// Coded by Richard-William Loerakker +// Original Source https://bcaorganizer.blogspot.com/p/c-program-for_21.html?fbclid=IwAR0iL8pYcCqhCPa6LmtQ9qej-YonYVepY2cBegYRIWO0l8RPeOnTVniMAac + // Commodore 64 PRG executable file +.file [name="bitmap-circle-standalone.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + .const VICII_BMM = $20 + .const VICII_DEN = $10 + .const VICII_RSEL = 8 + .const BLUE = 6 + .label SCREEN = $400 + .label BITMAP = $2000 + .label D011 = $d011 + .label VICII_MEMORY = $d018 + .label BORDER_COLOR = $d020 +.segment Code +main: { + // fill(BITMAP,40*25*8,0) + ldx #0 + lda #<$28*$19*8 + sta.z fill.size + lda #>$28*$19*8 + sta.z fill.size+1 + lda #BITMAP + sta.z fill.addr+1 + jsr fill + // fill(SCREEN,40*25,$16) + ldx #$16 + lda #<$28*$19 + sta.z fill.size + lda #>$28*$19 + sta.z fill.size+1 + lda #SCREEN + sta.z fill.addr+1 + jsr fill + // *BORDER_COLOR = BLUE + lda #BLUE + sta BORDER_COLOR + // *D011 = VICII_BMM|VICII_DEN|VICII_RSEL|3 + lda #VICII_BMM|VICII_DEN|VICII_RSEL|3 + sta D011 + // *VICII_MEMORY = (byte)((((word)SCREEN&$3fff)/$40)|(((word)BITMAP&$3fff)/$400)) + lda #(SCREEN&$3fff)/$40|(BITMAP&$3fff)/$400 + sta VICII_MEMORY + // circle(100,100,50) + jsr circle + __b1: + jmp __b1 +} +// Fill some memory with a value +// void fill(char *start, __zp($e) int size, __register(X) char val) +fill: { + .label end = $e + .label addr = $c + .label size = $e + // byte* end = start + size + clc + lda.z end + adc.z addr + sta.z end + lda.z end+1 + adc.z addr+1 + sta.z end+1 + __b1: + // for(byte* addr = start; addr!=end; addr++) + lda.z addr+1 + cmp.z end+1 + bne __b2 + lda.z addr + cmp.z end + bne __b2 + // } + rts + __b2: + // *addr = val + txa + ldy #0 + sta (addr),y + // for(byte* addr = start; addr!=end; addr++) + inc.z addr + bne !+ + inc.z addr+1 + !: + jmp __b1 +} +// void circle(int xc, int yc, int r) +circle: { + .const xc = $64 + .const yc = $64 + .const r = $32 + .label __5 = 8 + .label __6 = 8 + .label __7 = $a + .label __9 = 6 + .label __10 = $a + .label p = $a + .label y = $c + .label x1 = $e + lda #<3-(r<<1) + sta.z p + lda #>3-(r<<1) + sta.z p+1 + lda #r + sta.z y+1 + lda #<0 + sta.z x1 + sta.z x1+1 + __b1: + // for(int x = 0; x <= y; x ++) + lda.z y + cmp.z x1 + lda.z y+1 + sbc.z x1+1 + bvc !+ + eor #$80 + !: + bpl __b2 + // } + rts + __b2: + // if(p < 0) + lda.z p+1 + bpl !__b3+ + jmp __b3 + !__b3: + // y=y-1 + sec + lda.z y + sbc #1 + sta.z y + bcs !+ + dec.z y+1 + !: + // x-y + lda.z x1 + sec + sbc.z y + sta.z __5 + lda.z x1+1 + sbc.z y+1 + sta.z __5+1 + // (x-y) << 2 + asl.z __6 + rol.z __6+1 + asl.z __6 + rol.z __6+1 + // p + ((x-y) << 2) + clc + lda.z __7 + adc.z __6 + sta.z __7 + lda.z __7+1 + adc.z __6+1 + sta.z __7+1 + // p = p + ((x-y) << 2) + 10 + lda.z p + clc + adc #<$a + sta.z p + lda.z p+1 + adc #>$a + sta.z p+1 + __b4: + // plot(xc+x,yc-y) + clc + lda.z x1 + adc #xc + sta.z plot.x+1 + lda #yc + sbc.z y+1 + sta.z plot.y+1 + jsr plot + // plot(xc-x,yc-y) + lda #xc + sbc.z x1+1 + sta.z plot.x+1 + lda #yc + sbc.z y+1 + sta.z plot.y+1 + jsr plot + // plot(xc+x,yc+y) + clc + lda.z x1 + adc #xc + sta.z plot.x+1 + clc + lda.z y + adc #yc + sta.z plot.y+1 + jsr plot + // plot(xc-x,yc+y) + lda #xc + sbc.z x1+1 + sta.z plot.x+1 + clc + lda.z y + adc #yc + sta.z plot.y+1 + jsr plot + // plot(xc+y,yc-x) + clc + lda.z y + adc #xc + sta.z plot.x+1 + lda #yc + sbc.z x1+1 + sta.z plot.y+1 + jsr plot + // plot(xc-y,yc-x) + lda #xc + sbc.z y+1 + sta.z plot.x+1 + lda #yc + sbc.z x1+1 + sta.z plot.y+1 + jsr plot + // plot(xc+y,yc+x) + clc + lda.z y + adc #xc + sta.z plot.x+1 + clc + lda.z x1 + adc #yc + sta.z plot.y+1 + jsr plot + // plot(xc-y,yc+x) + lda #xc + sbc.z y+1 + sta.z plot.x+1 + clc + lda.z x1 + adc #yc + sta.z plot.y+1 + jsr plot + // for(int x = 0; x <= y; x ++) + inc.z x1 + bne !+ + inc.z x1+1 + !: + jmp __b1 + __b3: + // x << 2 + lda.z x1 + asl + sta.z __9 + lda.z x1+1 + rol + sta.z __9+1 + asl.z __9 + rol.z __9+1 + // p + (x << 2) + clc + lda.z __10 + adc.z __9 + sta.z __10 + lda.z __10+1 + adc.z __9+1 + sta.z __10+1 + // p = p + (x << 2) + 6 + lda.z p + clc + adc #<6 + sta.z p + lda.z p+1 + adc #>6 + sta.z p+1 + jmp __b4 +} +// void plot(__zp(8) int x, __zp(6) int y) +plot: { + .label __0 = 4 + .label __2 = 6 + .label __3 = 2 + .label x = 8 + .label y = 6 + .label location = 4 + .label __7 = 2 + .label __8 = 2 + // x & $fff8 + lda.z x + and #<$fff8 + sta.z __0 + lda.z x+1 + and #>$fff8 + sta.z __0+1 + // location += x & $fff8 + lda #BITMAP + adc.z location+1 + sta.z location+1 + // (char)y & 7 + lda.z y + and #7 + // location += (char)y & 7 + clc + adc.z location + sta.z location + bcc !+ + inc.z location+1 + !: + // y >> 3 + lda.z __2+1 + cmp #$80 + ror.z __2+1 + ror.z __2 + lda.z __2+1 + cmp #$80 + ror.z __2+1 + ror.z __2 + lda.z __2+1 + cmp #$80 + ror.z __2+1 + ror.z __2 + // (y >> 3) * 320 + lda.z __2 + asl + sta.z __7 + lda.z __2+1 + rol + sta.z __7+1 + asl.z __7 + rol.z __7+1 + clc + lda.z __8 + adc.z __2 + sta.z __8 + lda.z __8+1 + adc.z __2+1 + sta.z __8+1 + lda.z __3+1 + sta.z $ff + lda.z __3 + sta.z __3+1 + lda #0 + sta.z __3 + lsr.z $ff + ror.z __3+1 + ror.z __3 + lsr.z $ff + ror.z __3+1 + ror.z __3 + // location += ((y >> 3) * 320) + clc + lda.z location + adc.z __3 + sta.z location + lda.z location+1 + adc.z __3+1 + sta.z location+1 + // x & 7 + lda #7 + and.z x + // (*location) | bitmask[x & 7] + tay + lda bitmask,y + ldy #0 + ora (location),y + // (*location) = (*location) | bitmask[x & 7] + sta (location),y + // } + rts +} +.segment Data + bitmask: .byte $80, $40, $20, $10, 8, 4, 2, 1 diff --git a/src/test/ref/bitmap-circle-standalone.cfg b/src/test/ref/bitmap-circle-standalone.cfg new file mode 100644 index 000000000..cf405a0db --- /dev/null +++ b/src/test/ref/bitmap-circle-standalone.cfg @@ -0,0 +1,134 @@ + +void main() +main: scope:[main] from + [0] phi() + [1] call fill + to:main::@2 +main::@2: scope:[main] from main + [2] phi() + [3] call fill + to:main::@3 +main::@3: scope:[main] from main::@2 + [4] *BORDER_COLOR = BLUE + [5] *D011 = VICII_BMM|VICII_DEN|VICII_RSEL|3 + [6] *VICII_MEMORY = (char)(unsigned int)SCREEN&$3fff/$40|(unsigned int)BITMAP&$3fff/$400 + [7] call circle + to:main::@1 +main::@1: scope:[main] from main::@1 main::@3 + [8] phi() + to:main::@1 + +void fill(char *start , int size , char val) +fill: scope:[fill] from main main::@2 + [9] fill::val#4 = phi( main/0, main::@2/$16 ) + [9] fill::size#2 = phi( main/(int)$28*$19*8, main::@2/(int)$28*$19 ) + [9] fill::addr#0 = phi( main/BITMAP, main::@2/SCREEN ) + [10] fill::end#0 = fill::addr#0 + fill::size#2 + to:fill::@1 +fill::@1: scope:[fill] from fill fill::@2 + [11] fill::addr#2 = phi( fill/fill::addr#0, fill::@2/fill::addr#1 ) + [12] if(fill::addr#2!=fill::end#0) goto fill::@2 + to:fill::@return +fill::@return: scope:[fill] from fill::@1 + [13] return + to:@return +fill::@2: scope:[fill] from fill::@1 + [14] *fill::addr#2 = fill::val#4 + [15] fill::addr#1 = ++ fill::addr#2 + to:fill::@1 + +void circle(int xc , int yc , int r) +circle: scope:[circle] from main::@3 + [16] phi() + to:circle::@1 +circle::@1: scope:[circle] from circle circle::@13 + [17] circle::p#3 = phi( circle/3-circle::r#0<<1, circle::@13/circle::p#10 ) + [17] circle::y#13 = phi( circle/circle::r#0, circle::@13/circle::y#10 ) + [17] circle::x1#10 = phi( circle/0, circle::@13/circle::x1#1 ) + [18] if(circle::x1#10<=circle::y#13) goto circle::@2 + to:circle::@return +circle::@return: scope:[circle] from circle::@1 + [19] return + to:@return +circle::@2: scope:[circle] from circle::@1 + [20] if(circle::p#3<0) goto circle::@3 + to:circle::@5 +circle::@5: scope:[circle] from circle::@2 + [21] circle::y#1 = circle::y#13 - 1 + [22] circle::$5 = circle::x1#10 - circle::y#1 + [23] circle::$6 = circle::$5 << 2 + [24] circle::$7 = circle::p#3 + circle::$6 + [25] circle::p#2 = circle::$7 + $a + to:circle::@4 +circle::@4: scope:[circle] from circle::@3 circle::@5 + [26] circle::p#10 = phi( circle::@3/circle::p#1, circle::@5/circle::p#2 ) + [26] circle::y#10 = phi( circle::@3/circle::y#13, circle::@5/circle::y#1 ) + [27] plot::x#0 = circle::xc#0 + circle::x1#10 + [28] plot::y#0 = circle::yc#0 - circle::y#10 + [29] call plot + to:circle::@6 +circle::@6: scope:[circle] from circle::@4 + [30] plot::x#1 = circle::xc#0 - circle::x1#10 + [31] plot::y#1 = circle::yc#0 - circle::y#10 + [32] call plot + to:circle::@7 +circle::@7: scope:[circle] from circle::@6 + [33] plot::x#2 = circle::xc#0 + circle::x1#10 + [34] plot::y#2 = circle::yc#0 + circle::y#10 + [35] call plot + to:circle::@8 +circle::@8: scope:[circle] from circle::@7 + [36] plot::x#3 = circle::xc#0 - circle::x1#10 + [37] plot::y#3 = circle::yc#0 + circle::y#10 + [38] call plot + to:circle::@9 +circle::@9: scope:[circle] from circle::@8 + [39] plot::x#4 = circle::xc#0 + circle::y#10 + [40] plot::y#4 = circle::yc#0 - circle::x1#10 + [41] call plot + to:circle::@10 +circle::@10: scope:[circle] from circle::@9 + [42] plot::x#5 = circle::xc#0 - circle::y#10 + [43] plot::y#5 = circle::yc#0 - circle::x1#10 + [44] call plot + to:circle::@11 +circle::@11: scope:[circle] from circle::@10 + [45] plot::x#6 = circle::xc#0 + circle::y#10 + [46] plot::y#6 = circle::yc#0 + circle::x1#10 + [47] call plot + to:circle::@12 +circle::@12: scope:[circle] from circle::@11 + [48] plot::x#7 = circle::xc#0 - circle::y#10 + [49] plot::y#7 = circle::yc#0 + circle::x1#10 + [50] call plot + to:circle::@13 +circle::@13: scope:[circle] from circle::@12 + [51] circle::x1#1 = ++ circle::x1#10 + to:circle::@1 +circle::@3: scope:[circle] from circle::@2 + [52] circle::$9 = circle::x1#10 << 2 + [53] circle::$10 = circle::p#3 + circle::$9 + [54] circle::p#1 = circle::$10 + 6 + to:circle::@4 + +void plot(int x , int y) +plot: scope:[plot] from circle::@10 circle::@11 circle::@12 circle::@4 circle::@6 circle::@7 circle::@8 circle::@9 + [55] plot::y#8 = phi( circle::@10/plot::y#5, circle::@11/plot::y#6, circle::@12/plot::y#7, circle::@4/plot::y#0, circle::@6/plot::y#1, circle::@7/plot::y#2, circle::@8/plot::y#3, circle::@9/plot::y#4 ) + [55] plot::x#8 = phi( circle::@10/plot::x#5, circle::@11/plot::x#6, circle::@12/plot::x#7, circle::@4/plot::x#0, circle::@6/plot::x#1, circle::@7/plot::x#2, circle::@8/plot::x#3, circle::@9/plot::x#4 ) + [56] plot::$0 = plot::x#8 & $fff8 + [57] plot::location#1 = BITMAP + plot::$0 + [58] plot::$6 = (char)plot::y#8 + [59] plot::$1 = plot::$6 & 7 + [60] plot::location#2 = plot::location#1 + plot::$1 + [61] plot::$2 = plot::y#8 >> 3 + [62] plot::$7 = plot::$2 << 2 + [63] plot::$8 = plot::$7 + plot::$2 + [64] plot::$3 = plot::$8 << 6 + [65] plot::location#3 = plot::location#2 + plot::$3 + [66] plot::$4 = plot::x#8 & 7 + [67] plot::$5 = *plot::location#3 | bitmask[plot::$4] + [68] *plot::location#3 = plot::$5 + to:plot::@return +plot::@return: scope:[plot] from plot + [69] return + to:@return diff --git a/src/test/ref/bitmap-circle-standalone.log b/src/test/ref/bitmap-circle-standalone.log new file mode 100644 index 000000000..57f0d3f4e --- /dev/null +++ b/src/test/ref/bitmap-circle-standalone.log @@ -0,0 +1,2458 @@ +Eliminating unused variable with no statement circle::$1 +Eliminating unused variable with no statement fill::$0 + +CONTROL FLOW GRAPH SSA + +void main() +main: scope:[main] from __start + fill::start#0 = BITMAP + fill::size#0 = $28*$19*8 + fill::val#0 = 0 + call fill + to:main::@2 +main::@2: scope:[main] from main + fill::start#1 = SCREEN + fill::size#1 = $28*$19 + fill::val#1 = $16 + call fill + to:main::@3 +main::@3: scope:[main] from main::@2 + *BORDER_COLOR = BLUE + *D011 = VICII_BMM|VICII_DEN|VICII_RSEL|3 + *VICII_MEMORY = (char)(unsigned int)SCREEN&$3fff/$40|(unsigned int)BITMAP&$3fff/$400 + circle::xc#0 = $64 + circle::yc#0 = $64 + circle::r#0 = $32 + call circle + to:main::@4 +main::@4: scope:[main] from main::@3 + to:main::@1 +main::@1: scope:[main] from main::@1 main::@4 + if(true) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return + +void circle(int xc , int yc , int r) +circle: scope:[circle] from main::@3 + circle::yc#13 = phi( main::@3/circle::yc#0 ) + circle::xc#13 = phi( main::@3/circle::xc#0 ) + circle::r#1 = phi( main::@3/circle::r#0 ) + circle::y#0 = circle::r#1 + circle::$0 = circle::r#1 << 1 + circle::p#0 = 3 - circle::$0 + circle::x1#0 = 0 + to:circle::@1 +circle::@1: scope:[circle] from circle circle::@13 + circle::yc#12 = phi( circle/circle::yc#13, circle::@13/circle::yc#14 ) + circle::xc#12 = phi( circle/circle::xc#13, circle::@13/circle::xc#14 ) + circle::p#6 = phi( circle/circle::p#0, circle::@13/circle::p#7 ) + circle::y#2 = phi( circle/circle::y#0, circle::@13/circle::y#12 ) + circle::x1#2 = phi( circle/circle::x1#0, circle::@13/circle::x1#1 ) + circle::$2 = circle::x1#2 <= circle::y#2 + if(circle::$2) goto circle::@2 + to:circle::@return +circle::@2: scope:[circle] from circle::@1 + circle::yc#11 = phi( circle::@1/circle::yc#12 ) + circle::xc#11 = phi( circle::@1/circle::xc#12 ) + circle::y#13 = phi( circle::@1/circle::y#2 ) + circle::x1#14 = phi( circle::@1/circle::x1#2 ) + circle::p#3 = phi( circle::@1/circle::p#6 ) + circle::$3 = circle::p#3 < 0 + if(circle::$3) goto circle::@3 + to:circle::@5 +circle::@3: scope:[circle] from circle::@2 + circle::y#14 = phi( circle::@2/circle::y#13 ) + circle::yc#9 = phi( circle::@2/circle::yc#11 ) + circle::xc#9 = phi( circle::@2/circle::xc#11 ) + circle::p#4 = phi( circle::@2/circle::p#3 ) + circle::x1#3 = phi( circle::@2/circle::x1#14 ) + circle::$9 = circle::x1#3 << 2 + circle::$10 = circle::p#4 + circle::$9 + circle::$11 = circle::$10 + 6 + circle::p#1 = circle::$11 + to:circle::@4 +circle::@5: scope:[circle] from circle::@2 + circle::yc#10 = phi( circle::@2/circle::yc#11 ) + circle::xc#10 = phi( circle::@2/circle::xc#11 ) + circle::p#5 = phi( circle::@2/circle::p#3 ) + circle::x1#4 = phi( circle::@2/circle::x1#14 ) + circle::y#3 = phi( circle::@2/circle::y#13 ) + circle::$4 = circle::y#3 - 1 + circle::y#1 = circle::$4 + circle::$5 = circle::x1#4 - circle::y#1 + circle::$6 = circle::$5 << 2 + circle::$7 = circle::p#5 + circle::$6 + circle::$8 = circle::$7 + $a + circle::p#2 = circle::$8 + to:circle::@4 +circle::@4: scope:[circle] from circle::@3 circle::@5 + circle::p#15 = phi( circle::@3/circle::p#1, circle::@5/circle::p#2 ) + circle::y#4 = phi( circle::@3/circle::y#14, circle::@5/circle::y#1 ) + circle::yc#1 = phi( circle::@3/circle::yc#9, circle::@5/circle::yc#10 ) + circle::x1#5 = phi( circle::@3/circle::x1#3, circle::@5/circle::x1#4 ) + circle::xc#1 = phi( circle::@3/circle::xc#9, circle::@5/circle::xc#10 ) + circle::$12 = circle::xc#1 + circle::x1#5 + circle::$13 = circle::yc#1 - circle::y#4 + plot::x#0 = circle::$12 + plot::y#0 = circle::$13 + call plot + to:circle::@6 +circle::@6: scope:[circle] from circle::@4 + circle::p#14 = phi( circle::@4/circle::p#15 ) + circle::y#5 = phi( circle::@4/circle::y#4 ) + circle::yc#2 = phi( circle::@4/circle::yc#1 ) + circle::x1#6 = phi( circle::@4/circle::x1#5 ) + circle::xc#2 = phi( circle::@4/circle::xc#1 ) + circle::$15 = circle::xc#2 - circle::x1#6 + circle::$16 = circle::yc#2 - circle::y#5 + plot::x#1 = circle::$15 + plot::y#1 = circle::$16 + call plot + to:circle::@7 +circle::@7: scope:[circle] from circle::@6 + circle::p#13 = phi( circle::@6/circle::p#14 ) + circle::y#6 = phi( circle::@6/circle::y#5 ) + circle::yc#3 = phi( circle::@6/circle::yc#2 ) + circle::x1#7 = phi( circle::@6/circle::x1#6 ) + circle::xc#3 = phi( circle::@6/circle::xc#2 ) + circle::$18 = circle::xc#3 + circle::x1#7 + circle::$19 = circle::yc#3 + circle::y#6 + plot::x#2 = circle::$18 + plot::y#2 = circle::$19 + call plot + to:circle::@8 +circle::@8: scope:[circle] from circle::@7 + circle::p#12 = phi( circle::@7/circle::p#13 ) + circle::y#7 = phi( circle::@7/circle::y#6 ) + circle::yc#4 = phi( circle::@7/circle::yc#3 ) + circle::x1#8 = phi( circle::@7/circle::x1#7 ) + circle::xc#4 = phi( circle::@7/circle::xc#3 ) + circle::$21 = circle::xc#4 - circle::x1#8 + circle::$22 = circle::yc#4 + circle::y#7 + plot::x#3 = circle::$21 + plot::y#3 = circle::$22 + call plot + to:circle::@9 +circle::@9: scope:[circle] from circle::@8 + circle::p#11 = phi( circle::@8/circle::p#12 ) + circle::x1#9 = phi( circle::@8/circle::x1#8 ) + circle::yc#5 = phi( circle::@8/circle::yc#4 ) + circle::y#8 = phi( circle::@8/circle::y#7 ) + circle::xc#5 = phi( circle::@8/circle::xc#4 ) + circle::$24 = circle::xc#5 + circle::y#8 + circle::$25 = circle::yc#5 - circle::x1#9 + plot::x#4 = circle::$24 + plot::y#4 = circle::$25 + call plot + to:circle::@10 +circle::@10: scope:[circle] from circle::@9 + circle::p#10 = phi( circle::@9/circle::p#11 ) + circle::x1#10 = phi( circle::@9/circle::x1#9 ) + circle::yc#6 = phi( circle::@9/circle::yc#5 ) + circle::y#9 = phi( circle::@9/circle::y#8 ) + circle::xc#6 = phi( circle::@9/circle::xc#5 ) + circle::$27 = circle::xc#6 - circle::y#9 + circle::$28 = circle::yc#6 - circle::x1#10 + plot::x#5 = circle::$27 + plot::y#5 = circle::$28 + call plot + to:circle::@11 +circle::@11: scope:[circle] from circle::@10 + circle::p#9 = phi( circle::@10/circle::p#10 ) + circle::x1#11 = phi( circle::@10/circle::x1#10 ) + circle::yc#7 = phi( circle::@10/circle::yc#6 ) + circle::y#10 = phi( circle::@10/circle::y#9 ) + circle::xc#7 = phi( circle::@10/circle::xc#6 ) + circle::$30 = circle::xc#7 + circle::y#10 + circle::$31 = circle::yc#7 + circle::x1#11 + plot::x#6 = circle::$30 + plot::y#6 = circle::$31 + call plot + to:circle::@12 +circle::@12: scope:[circle] from circle::@11 + circle::p#8 = phi( circle::@11/circle::p#9 ) + circle::x1#12 = phi( circle::@11/circle::x1#11 ) + circle::yc#8 = phi( circle::@11/circle::yc#7 ) + circle::y#11 = phi( circle::@11/circle::y#10 ) + circle::xc#8 = phi( circle::@11/circle::xc#7 ) + circle::$33 = circle::xc#8 - circle::y#11 + circle::$34 = circle::yc#8 + circle::x1#12 + plot::x#7 = circle::$33 + plot::y#7 = circle::$34 + call plot + to:circle::@13 +circle::@13: scope:[circle] from circle::@12 + circle::yc#14 = phi( circle::@12/circle::yc#8 ) + circle::xc#14 = phi( circle::@12/circle::xc#8 ) + circle::p#7 = phi( circle::@12/circle::p#8 ) + circle::y#12 = phi( circle::@12/circle::y#11 ) + circle::x1#13 = phi( circle::@12/circle::x1#12 ) + circle::x1#1 = ++ circle::x1#13 + to:circle::@1 +circle::@return: scope:[circle] from circle::@1 + return + to:@return + +void plot(int x , int y) +plot: scope:[plot] from circle::@10 circle::@11 circle::@12 circle::@4 circle::@6 circle::@7 circle::@8 circle::@9 + plot::y#8 = phi( circle::@10/plot::y#5, circle::@11/plot::y#6, circle::@12/plot::y#7, circle::@4/plot::y#0, circle::@6/plot::y#1, circle::@7/plot::y#2, circle::@8/plot::y#3, circle::@9/plot::y#4 ) + plot::x#8 = phi( circle::@10/plot::x#5, circle::@11/plot::x#6, circle::@12/plot::x#7, circle::@4/plot::x#0, circle::@6/plot::x#1, circle::@7/plot::x#2, circle::@8/plot::x#3, circle::@9/plot::x#4 ) + plot::location#0 = BITMAP + plot::$0 = plot::x#8 & $fff8 + plot::location#1 = plot::location#0 + plot::$0 + plot::$6 = (char)plot::y#8 + plot::$1 = plot::$6 & 7 + plot::location#2 = plot::location#1 + plot::$1 + plot::$2 = plot::y#8 >> 3 + plot::$3 = plot::$2 * $140 + plot::location#3 = plot::location#2 + plot::$3 + plot::$4 = plot::x#8 & 7 + plot::$5 = *plot::location#3 | bitmask[plot::$4] + *plot::location#3 = plot::$5 + to:plot::@return +plot::@return: scope:[plot] from plot + return + to:@return + +void fill(char *start , int size , char val) +fill: scope:[fill] from main main::@2 + fill::val#4 = phi( main/fill::val#0, main::@2/fill::val#1 ) + fill::size#2 = phi( main/fill::size#0, main::@2/fill::size#1 ) + fill::start#2 = phi( main/fill::start#0, main::@2/fill::start#1 ) + fill::end#0 = fill::start#2 + fill::size#2 + fill::addr#0 = fill::start#2 + to:fill::@1 +fill::@1: scope:[fill] from fill fill::@2 + fill::val#3 = phi( fill/fill::val#4, fill::@2/fill::val#2 ) + fill::end#1 = phi( fill/fill::end#0, fill::@2/fill::end#2 ) + fill::addr#2 = phi( fill/fill::addr#0, fill::@2/fill::addr#1 ) + fill::$1 = fill::addr#2 != fill::end#1 + if(fill::$1) goto fill::@2 + to:fill::@return +fill::@2: scope:[fill] from fill::@1 + fill::end#2 = phi( fill::@1/fill::end#1 ) + fill::addr#3 = phi( fill::@1/fill::addr#2 ) + fill::val#2 = phi( fill::@1/fill::val#3 ) + *fill::addr#3 = fill::val#2 + fill::addr#1 = ++ fill::addr#3 + to:fill::@1 +fill::@return: scope:[fill] from fill::@1 + return + to:@return + +void __start() +__start: scope:[__start] from + call main + to:__start::@1 +__start::@1: scope:[__start] from __start + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + return + to:@return + +SYMBOL TABLE SSA +__constant char * const BITMAP = (char *)$2000 +__constant const char BLUE = 6 +__constant char * const BORDER_COLOR = (char *)$d020 +__constant char * const D011 = (char *)$d011 +__constant char * const SCREEN = (char *)$400 +__constant const char VICII_BMM = $20 +__constant const char VICII_DEN = $10 +__constant char * const VICII_MEMORY = (char *)$d018 +__constant const char VICII_RSEL = 8 +void __start() +__constant char bitmask[] = { $80, $40, $20, $10, 8, 4, 2, 1 } +void circle(int xc , int yc , int r) +int circle::$0 +int circle::$10 +number circle::$11 +int circle::$12 +int circle::$13 +int circle::$15 +int circle::$16 +int circle::$18 +int circle::$19 +bool circle::$2 +int circle::$21 +int circle::$22 +int circle::$24 +int circle::$25 +int circle::$27 +int circle::$28 +bool circle::$3 +int circle::$30 +int circle::$31 +int circle::$33 +int circle::$34 +number circle::$4 +int circle::$5 +int circle::$6 +int circle::$7 +number circle::$8 +int circle::$9 +int circle::p +int circle::p#0 +int circle::p#1 +int circle::p#10 +int circle::p#11 +int circle::p#12 +int circle::p#13 +int circle::p#14 +int circle::p#15 +int circle::p#2 +int circle::p#3 +int circle::p#4 +int circle::p#5 +int circle::p#6 +int circle::p#7 +int circle::p#8 +int circle::p#9 +int circle::r +int circle::r#0 +int circle::r#1 +int circle::x1 +int circle::x1#0 +int circle::x1#1 +int circle::x1#10 +int circle::x1#11 +int circle::x1#12 +int circle::x1#13 +int circle::x1#14 +int circle::x1#2 +int circle::x1#3 +int circle::x1#4 +int circle::x1#5 +int circle::x1#6 +int circle::x1#7 +int circle::x1#8 +int circle::x1#9 +int circle::xc +int circle::xc#0 +int circle::xc#1 +int circle::xc#10 +int circle::xc#11 +int circle::xc#12 +int circle::xc#13 +int circle::xc#14 +int circle::xc#2 +int circle::xc#3 +int circle::xc#4 +int circle::xc#5 +int circle::xc#6 +int circle::xc#7 +int circle::xc#8 +int circle::xc#9 +int circle::y +int circle::y#0 +int circle::y#1 +int circle::y#10 +int circle::y#11 +int circle::y#12 +int circle::y#13 +int circle::y#14 +int circle::y#2 +int circle::y#3 +int circle::y#4 +int circle::y#5 +int circle::y#6 +int circle::y#7 +int circle::y#8 +int circle::y#9 +int circle::yc +int circle::yc#0 +int circle::yc#1 +int circle::yc#10 +int circle::yc#11 +int circle::yc#12 +int circle::yc#13 +int circle::yc#14 +int circle::yc#2 +int circle::yc#3 +int circle::yc#4 +int circle::yc#5 +int circle::yc#6 +int circle::yc#7 +int circle::yc#8 +int circle::yc#9 +void fill(char *start , int size , char val) +bool fill::$1 +char *fill::addr +char *fill::addr#0 +char *fill::addr#1 +char *fill::addr#2 +char *fill::addr#3 +char *fill::end +char *fill::end#0 +char *fill::end#1 +char *fill::end#2 +int fill::size +int fill::size#0 +int fill::size#1 +int fill::size#2 +char *fill::start +char *fill::start#0 +char *fill::start#1 +char *fill::start#2 +char fill::val +char fill::val#0 +char fill::val#1 +char fill::val#2 +char fill::val#3 +char fill::val#4 +void main() +void plot(int x , int y) +number plot::$0 +number plot::$1 +int plot::$2 +number plot::$3 +number plot::$4 +char plot::$5 +char plot::$6 +char *plot::location +char *plot::location#0 +char *plot::location#1 +char *plot::location#2 +char *plot::location#3 +int plot::x +int plot::x#0 +int plot::x#1 +int plot::x#2 +int plot::x#3 +int plot::x#4 +int plot::x#5 +int plot::x#6 +int plot::x#7 +int plot::x#8 +int plot::y +int plot::y#0 +int plot::y#1 +int plot::y#2 +int plot::y#3 +int plot::y#4 +int plot::y#5 +int plot::y#6 +int plot::y#7 +int plot::y#8 + +Adding number conversion cast (snumber) $28*$19*8 in fill::size#0 = $28*$19*8 +Adding number conversion cast (unumber) 0 in fill::val#0 = 0 +Adding number conversion cast (snumber) $28*$19 in fill::size#1 = $28*$19 +Adding number conversion cast (unumber) $16 in fill::val#1 = $16 +Adding number conversion cast (unumber) VICII_BMM|VICII_DEN|VICII_RSEL|3 in *D011 = VICII_BMM|VICII_DEN|VICII_RSEL|3 +Adding number conversion cast (unumber) 3 in *D011 = ((unumber)) VICII_BMM|VICII_DEN|VICII_RSEL|3 +Adding number conversion cast (unumber) $3fff in *VICII_MEMORY = (char)(unsigned int)SCREEN&$3fff/$40|(unsigned int)BITMAP&$3fff/$400 +Adding number conversion cast (unumber) $3fff in *VICII_MEMORY = (char)(unsigned int)SCREEN&(unumber)$3fff/$40|(unsigned int)BITMAP&$3fff/$400 +Adding number conversion cast (snumber) $64 in circle::xc#0 = $64 +Adding number conversion cast (snumber) $64 in circle::yc#0 = $64 +Adding number conversion cast (snumber) $32 in circle::r#0 = $32 +Adding number conversion cast (snumber) 1 in circle::$0 = circle::r#1 << 1 +Adding number conversion cast (snumber) 3 in circle::p#0 = 3 - circle::$0 +Adding number conversion cast (snumber) 0 in circle::$3 = circle::p#3 < 0 +Adding number conversion cast (snumber) 2 in circle::$9 = circle::x1#3 << 2 +Adding number conversion cast (snumber) 6 in circle::$11 = circle::$10 + 6 +Adding number conversion cast (snumber) circle::$11 in circle::$11 = circle::$10 + (snumber)6 +Adding number conversion cast (snumber) 1 in circle::$4 = circle::y#3 - 1 +Adding number conversion cast (snumber) circle::$4 in circle::$4 = circle::y#3 - (snumber)1 +Adding number conversion cast (snumber) 2 in circle::$6 = circle::$5 << 2 +Adding number conversion cast (snumber) $a in circle::$8 = circle::$7 + $a +Adding number conversion cast (snumber) circle::$8 in circle::$8 = circle::$7 + (snumber)$a +Adding number conversion cast (snumber) $fff8 in plot::$0 = plot::x#8 & $fff8 +Adding number conversion cast (snumber) plot::$0 in plot::$0 = plot::x#8 & (snumber)$fff8 +Adding number conversion cast (unumber) 7 in plot::$1 = plot::$6 & 7 +Adding number conversion cast (unumber) plot::$1 in plot::$1 = plot::$6 & (unumber)7 +Adding number conversion cast (snumber) 3 in plot::$2 = plot::y#8 >> 3 +Adding number conversion cast (snumber) $140 in plot::$3 = plot::$2 * $140 +Adding number conversion cast (snumber) plot::$3 in plot::$3 = plot::$2 * (snumber)$140 +Adding number conversion cast (snumber) 7 in plot::$4 = plot::x#8 & 7 +Adding number conversion cast (snumber) plot::$4 in plot::$4 = plot::x#8 & (snumber)7 +Successful SSA optimization PassNAddNumberTypeConversions +Adding number conversion cast (unumber) $40 in *VICII_MEMORY = (char)(unsigned int)SCREEN&(unumber)$3fff/$40|(unsigned int)BITMAP&(unumber)$3fff/$400 +Adding number conversion cast (unumber) $400 in *VICII_MEMORY = (char)(unsigned int)SCREEN&(unumber)$3fff/(unumber)$40|(unsigned int)BITMAP&(unumber)$3fff/$400 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast fill::size#0 = (snumber)$28*$19*8 +Inlining cast fill::val#0 = (unumber)0 +Inlining cast fill::size#1 = (snumber)$28*$19 +Inlining cast fill::val#1 = (unumber)$16 +Inlining cast *D011 = (unumber)VICII_BMM|VICII_DEN|VICII_RSEL|(unumber)3 +Inlining cast circle::xc#0 = (snumber)$64 +Inlining cast circle::yc#0 = (snumber)$64 +Inlining cast circle::r#0 = (snumber)$32 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (char *) 1024 +Simplifying constant pointer cast (char *) 8192 +Simplifying constant pointer cast (char *) 53265 +Simplifying constant pointer cast (char *) 53272 +Simplifying constant pointer cast (char *) 53280 +Simplifying constant integer cast 0 +Simplifying constant integer cast $16 +Simplifying constant integer cast VICII_BMM|VICII_DEN|VICII_RSEL|(unumber)3 +Simplifying constant integer cast 3 +Simplifying constant integer cast $3fff +Simplifying constant integer cast $40 +Simplifying constant integer cast $3fff +Simplifying constant integer cast $400 +Simplifying constant integer cast $64 +Simplifying constant integer cast $64 +Simplifying constant integer cast $32 +Simplifying constant integer cast 1 +Simplifying constant integer cast 3 +Simplifying constant integer cast 0 +Simplifying constant integer cast 2 +Simplifying constant integer cast 6 +Simplifying constant integer cast 1 +Simplifying constant integer cast 2 +Simplifying constant integer cast $a +Simplifying constant integer cast $fff8 +Simplifying constant integer cast 7 +Simplifying constant integer cast 3 +Simplifying constant integer cast $140 +Simplifying constant integer cast 7 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) $16 +Finalized unsigned number type (char) 3 +Finalized unsigned number type (unsigned int) $3fff +Finalized unsigned number type (char) $40 +Finalized unsigned number type (unsigned int) $3fff +Finalized unsigned number type (unsigned int) $400 +Finalized signed number type (signed char) $64 +Finalized signed number type (signed char) $64 +Finalized signed number type (signed char) $32 +Finalized signed number type (signed char) 1 +Finalized signed number type (signed char) 3 +Finalized signed number type (signed char) 0 +Finalized signed number type (signed char) 2 +Finalized signed number type (signed char) 6 +Finalized signed number type (signed char) 1 +Finalized signed number type (signed char) 2 +Finalized signed number type (signed char) $a +Finalized signed number type (long) $fff8 +Finalized unsigned number type (char) 7 +Finalized signed number type (signed char) 3 +Finalized signed number type (int) $140 +Finalized signed number type (signed char) 7 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Inferred type updated to int in circle::$11 = circle::$10 + 6 +Inferred type updated to int in circle::$4 = circle::y#3 - 1 +Inferred type updated to int in circle::$8 = circle::$7 + $a +Inferred type updated to int in plot::$0 = plot::x#8 & $fff8 +Inferred type updated to char in plot::$1 = plot::$6 & 7 +Inferred type updated to int in plot::$3 = plot::$2 * $140 +Inferred type updated to signed char in plot::$4 = plot::x#8 & 7 +Alias circle::y#0 = circle::r#1 +Alias circle::p#3 = circle::p#6 circle::p#4 circle::p#5 +Alias circle::x1#14 = circle::x1#2 circle::x1#3 circle::x1#4 +Alias circle::y#13 = circle::y#2 circle::y#14 circle::y#3 +Alias circle::xc#10 = circle::xc#11 circle::xc#12 circle::xc#9 +Alias circle::yc#10 = circle::yc#11 circle::yc#12 circle::yc#9 +Alias circle::p#1 = circle::$11 +Alias circle::y#1 = circle::$4 +Alias circle::p#2 = circle::$8 +Alias plot::x#0 = circle::$12 +Alias plot::y#0 = circle::$13 +Alias circle::xc#1 = circle::xc#2 circle::xc#3 circle::xc#4 circle::xc#5 circle::xc#6 circle::xc#7 circle::xc#8 circle::xc#14 +Alias circle::x1#10 = circle::x1#6 circle::x1#5 circle::x1#7 circle::x1#8 circle::x1#9 circle::x1#11 circle::x1#12 circle::x1#13 +Alias circle::yc#1 = circle::yc#2 circle::yc#3 circle::yc#4 circle::yc#5 circle::yc#6 circle::yc#7 circle::yc#8 circle::yc#14 +Alias circle::y#10 = circle::y#5 circle::y#4 circle::y#6 circle::y#7 circle::y#8 circle::y#9 circle::y#11 circle::y#12 +Alias circle::p#10 = circle::p#14 circle::p#15 circle::p#13 circle::p#12 circle::p#11 circle::p#9 circle::p#8 circle::p#7 +Alias plot::x#1 = circle::$15 +Alias plot::y#1 = circle::$16 +Alias plot::x#2 = circle::$18 +Alias plot::y#2 = circle::$19 +Alias plot::x#3 = circle::$21 +Alias plot::y#3 = circle::$22 +Alias plot::x#4 = circle::$24 +Alias plot::y#4 = circle::$25 +Alias plot::x#5 = circle::$27 +Alias plot::y#5 = circle::$28 +Alias plot::x#6 = circle::$30 +Alias plot::y#6 = circle::$31 +Alias plot::x#7 = circle::$33 +Alias plot::y#7 = circle::$34 +Alias fill::addr#0 = fill::start#2 +Alias fill::val#2 = fill::val#3 +Alias fill::addr#2 = fill::addr#3 +Alias fill::end#1 = fill::end#2 +Successful SSA optimization Pass2AliasElimination +Alias circle::xc#1 = circle::xc#10 +Alias circle::x1#10 = circle::x1#14 +Alias circle::yc#1 = circle::yc#10 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values circle::y#0 circle::r#0 +Identical Phi Values circle::xc#13 circle::xc#0 +Identical Phi Values circle::yc#13 circle::yc#0 +Identical Phi Values circle::xc#1 circle::xc#13 +Identical Phi Values circle::yc#1 circle::yc#13 +Identical Phi Values fill::end#1 fill::end#0 +Identical Phi Values fill::val#2 fill::val#4 +Successful SSA optimization Pass2IdenticalPhiElimination +Simple Condition circle::$2 [23] if(circle::x1#10<=circle::y#13) goto circle::@2 +Simple Condition circle::$3 [25] if(circle::p#3<0) goto circle::@3 +Simple Condition fill::$1 [79] if(fill::addr#2!=fill::end#0) goto fill::@2 +Successful SSA optimization Pass2ConditionalJumpSimplification +Constant right-side identified [1] fill::size#0 = (snumber)$28*$19*8 +Constant right-side identified [5] fill::size#1 = (snumber)$28*$19 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant fill::start#0 = BITMAP +Constant fill::size#0 = (snumber)$28*$19*8 +Constant fill::val#0 = 0 +Constant fill::start#1 = SCREEN +Constant fill::size#1 = (snumber)$28*$19 +Constant fill::val#1 = $16 +Constant circle::xc#0 = $64 +Constant circle::yc#0 = $64 +Constant circle::r#0 = $32 +Constant circle::x1#0 = 0 +Constant plot::location#0 = BITMAP +Successful SSA optimization Pass2ConstantIdentification +if() condition always true - replacing block destination [15] if(true) goto main::@1 +Successful SSA optimization Pass2ConstantIfs +Removing unused block main::@return +Successful SSA optimization Pass2EliminateUnusedBlocks +Removing unused procedure __start +Removing unused procedure block __start +Removing unused procedure block __start::@1 +Removing unused procedure block __start::@return +Successful SSA optimization PassNEliminateEmptyStart +Constant right-side identified [6] circle::$0 = circle::r#0 << 1 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant circle::$0 = circle::r#0<<1 +Successful SSA optimization Pass2ConstantIdentification +Constant right-side identified [6] circle::p#0 = 3 - circle::$0 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant circle::p#0 = 3-circle::$0 +Successful SSA optimization Pass2ConstantIdentification +Rewriting multiplication to use shift and addition[51] plot::$3 = plot::$2 * $140 +Inlining constant with var siblings circle::x1#0 +Inlining constant with var siblings circle::p#0 +Inlining constant with var siblings plot::location#0 +Inlining constant with var siblings fill::size#0 +Inlining constant with var siblings fill::val#0 +Inlining constant with var siblings fill::size#1 +Inlining constant with var siblings fill::val#1 +Constant inlined fill::val#0 = 0 +Constant inlined circle::$0 = circle::r#0<<1 +Constant inlined plot::location#0 = BITMAP +Constant inlined fill::start#1 = SCREEN +Constant inlined fill::start#0 = BITMAP +Constant inlined circle::x1#0 = 0 +Constant inlined fill::val#1 = $16 +Constant inlined fill::size#1 = (int)$28*$19 +Constant inlined fill::size#0 = (int)$28*$19*8 +Constant inlined circle::p#0 = 3-circle::r#0<<1 +Successful SSA optimization Pass2ConstantInlining +Alias plot::$3 = plot::$9 +Successful SSA optimization Pass2AliasElimination +Finalized unsigned number type (char) $28 +Finalized unsigned number type (char) $19 +Finalized unsigned number type (char) 8 +Finalized unsigned number type (char) $28 +Finalized unsigned number type (char) $19 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Adding NOP phi() at start of main +Adding NOP phi() at start of main::@2 +Adding NOP phi() at start of main::@4 +Adding NOP phi() at start of main::@1 +Adding NOP phi() at start of circle +CALL GRAPH +Calls in [main] to fill:1 fill:3 circle:7 +Calls in [circle] to plot:36 plot:41 plot:46 plot:51 plot:56 plot:61 plot:66 plot:71 + +Created 11 initial phi equivalence classes +Coalesced [12] fill::addr#4 = fill::addr#0 +Coalesced [18] fill::addr#5 = fill::addr#1 +Coalesced [29] circle::y#17 = circle::y#1 +Coalesced [30] circle::p#18 = circle::p#2 +Coalesced [34] plot::x#12 = plot::x#0 +Coalesced [35] plot::y#12 = plot::y#0 +Coalesced [39] plot::x#13 = plot::x#1 +Coalesced [40] plot::y#13 = plot::y#1 +Coalesced [44] plot::x#14 = plot::x#2 +Coalesced [45] plot::y#14 = plot::y#2 +Coalesced [49] plot::x#15 = plot::x#3 +Coalesced [50] plot::y#15 = plot::y#3 +Coalesced [54] plot::x#16 = plot::x#4 +Coalesced [55] plot::y#16 = plot::y#4 +Coalesced [59] plot::x#9 = plot::x#5 +Coalesced [60] plot::y#9 = plot::y#5 +Coalesced [64] plot::x#10 = plot::x#6 +Coalesced [65] plot::y#10 = plot::y#6 +Coalesced [69] plot::x#11 = plot::x#7 +Coalesced [70] plot::y#11 = plot::y#7 +Coalesced [73] circle::x1#15 = circle::x1#1 +Coalesced [74] circle::y#15 = circle::y#10 +Coalesced [75] circle::p#16 = circle::p#10 +Coalesced (already) [79] circle::y#16 = circle::y#13 +Coalesced [80] circle::p#17 = circle::p#1 +Coalesced down to 8 phi equivalence classes +Culled Empty Block label main::@4 +Adding NOP phi() at start of main +Adding NOP phi() at start of main::@2 +Adding NOP phi() at start of main::@1 +Adding NOP phi() at start of circle + +FINAL CONTROL FLOW GRAPH + +void main() +main: scope:[main] from + [0] phi() + [1] call fill + to:main::@2 +main::@2: scope:[main] from main + [2] phi() + [3] call fill + to:main::@3 +main::@3: scope:[main] from main::@2 + [4] *BORDER_COLOR = BLUE + [5] *D011 = VICII_BMM|VICII_DEN|VICII_RSEL|3 + [6] *VICII_MEMORY = (char)(unsigned int)SCREEN&$3fff/$40|(unsigned int)BITMAP&$3fff/$400 + [7] call circle + to:main::@1 +main::@1: scope:[main] from main::@1 main::@3 + [8] phi() + to:main::@1 + +void fill(char *start , int size , char val) +fill: scope:[fill] from main main::@2 + [9] fill::val#4 = phi( main/0, main::@2/$16 ) + [9] fill::size#2 = phi( main/(int)$28*$19*8, main::@2/(int)$28*$19 ) + [9] fill::addr#0 = phi( main/BITMAP, main::@2/SCREEN ) + [10] fill::end#0 = fill::addr#0 + fill::size#2 + to:fill::@1 +fill::@1: scope:[fill] from fill fill::@2 + [11] fill::addr#2 = phi( fill/fill::addr#0, fill::@2/fill::addr#1 ) + [12] if(fill::addr#2!=fill::end#0) goto fill::@2 + to:fill::@return +fill::@return: scope:[fill] from fill::@1 + [13] return + to:@return +fill::@2: scope:[fill] from fill::@1 + [14] *fill::addr#2 = fill::val#4 + [15] fill::addr#1 = ++ fill::addr#2 + to:fill::@1 + +void circle(int xc , int yc , int r) +circle: scope:[circle] from main::@3 + [16] phi() + to:circle::@1 +circle::@1: scope:[circle] from circle circle::@13 + [17] circle::p#3 = phi( circle/3-circle::r#0<<1, circle::@13/circle::p#10 ) + [17] circle::y#13 = phi( circle/circle::r#0, circle::@13/circle::y#10 ) + [17] circle::x1#10 = phi( circle/0, circle::@13/circle::x1#1 ) + [18] if(circle::x1#10<=circle::y#13) goto circle::@2 + to:circle::@return +circle::@return: scope:[circle] from circle::@1 + [19] return + to:@return +circle::@2: scope:[circle] from circle::@1 + [20] if(circle::p#3<0) goto circle::@3 + to:circle::@5 +circle::@5: scope:[circle] from circle::@2 + [21] circle::y#1 = circle::y#13 - 1 + [22] circle::$5 = circle::x1#10 - circle::y#1 + [23] circle::$6 = circle::$5 << 2 + [24] circle::$7 = circle::p#3 + circle::$6 + [25] circle::p#2 = circle::$7 + $a + to:circle::@4 +circle::@4: scope:[circle] from circle::@3 circle::@5 + [26] circle::p#10 = phi( circle::@3/circle::p#1, circle::@5/circle::p#2 ) + [26] circle::y#10 = phi( circle::@3/circle::y#13, circle::@5/circle::y#1 ) + [27] plot::x#0 = circle::xc#0 + circle::x1#10 + [28] plot::y#0 = circle::yc#0 - circle::y#10 + [29] call plot + to:circle::@6 +circle::@6: scope:[circle] from circle::@4 + [30] plot::x#1 = circle::xc#0 - circle::x1#10 + [31] plot::y#1 = circle::yc#0 - circle::y#10 + [32] call plot + to:circle::@7 +circle::@7: scope:[circle] from circle::@6 + [33] plot::x#2 = circle::xc#0 + circle::x1#10 + [34] plot::y#2 = circle::yc#0 + circle::y#10 + [35] call plot + to:circle::@8 +circle::@8: scope:[circle] from circle::@7 + [36] plot::x#3 = circle::xc#0 - circle::x1#10 + [37] plot::y#3 = circle::yc#0 + circle::y#10 + [38] call plot + to:circle::@9 +circle::@9: scope:[circle] from circle::@8 + [39] plot::x#4 = circle::xc#0 + circle::y#10 + [40] plot::y#4 = circle::yc#0 - circle::x1#10 + [41] call plot + to:circle::@10 +circle::@10: scope:[circle] from circle::@9 + [42] plot::x#5 = circle::xc#0 - circle::y#10 + [43] plot::y#5 = circle::yc#0 - circle::x1#10 + [44] call plot + to:circle::@11 +circle::@11: scope:[circle] from circle::@10 + [45] plot::x#6 = circle::xc#0 + circle::y#10 + [46] plot::y#6 = circle::yc#0 + circle::x1#10 + [47] call plot + to:circle::@12 +circle::@12: scope:[circle] from circle::@11 + [48] plot::x#7 = circle::xc#0 - circle::y#10 + [49] plot::y#7 = circle::yc#0 + circle::x1#10 + [50] call plot + to:circle::@13 +circle::@13: scope:[circle] from circle::@12 + [51] circle::x1#1 = ++ circle::x1#10 + to:circle::@1 +circle::@3: scope:[circle] from circle::@2 + [52] circle::$9 = circle::x1#10 << 2 + [53] circle::$10 = circle::p#3 + circle::$9 + [54] circle::p#1 = circle::$10 + 6 + to:circle::@4 + +void plot(int x , int y) +plot: scope:[plot] from circle::@10 circle::@11 circle::@12 circle::@4 circle::@6 circle::@7 circle::@8 circle::@9 + [55] plot::y#8 = phi( circle::@10/plot::y#5, circle::@11/plot::y#6, circle::@12/plot::y#7, circle::@4/plot::y#0, circle::@6/plot::y#1, circle::@7/plot::y#2, circle::@8/plot::y#3, circle::@9/plot::y#4 ) + [55] plot::x#8 = phi( circle::@10/plot::x#5, circle::@11/plot::x#6, circle::@12/plot::x#7, circle::@4/plot::x#0, circle::@6/plot::x#1, circle::@7/plot::x#2, circle::@8/plot::x#3, circle::@9/plot::x#4 ) + [56] plot::$0 = plot::x#8 & $fff8 + [57] plot::location#1 = BITMAP + plot::$0 + [58] plot::$6 = (char)plot::y#8 + [59] plot::$1 = plot::$6 & 7 + [60] plot::location#2 = plot::location#1 + plot::$1 + [61] plot::$2 = plot::y#8 >> 3 + [62] plot::$7 = plot::$2 << 2 + [63] plot::$8 = plot::$7 + plot::$2 + [64] plot::$3 = plot::$8 << 6 + [65] plot::location#3 = plot::location#2 + plot::$3 + [66] plot::$4 = plot::x#8 & 7 + [67] plot::$5 = *plot::location#3 | bitmask[plot::$4] + [68] *plot::location#3 = plot::$5 + to:plot::@return +plot::@return: scope:[plot] from plot + [69] return + to:@return + + +VARIABLE REGISTER WEIGHTS +void circle(int xc , int yc , int r) +int circle::$10 // 202.0 +int circle::$5 // 202.0 +int circle::$6 // 202.0 +int circle::$7 // 202.0 +int circle::$9 // 202.0 +int circle::p +int circle::p#1 // 202.0 +int circle::p#10 // 11.653846153846153 +int circle::p#2 // 202.0 +int circle::p#3 // 57.714285714285715 +int circle::r +int circle::x1 +int circle::x1#1 // 202.0 +int circle::x1#10 // 36.47222222222223 +int circle::xc +int circle::y +int circle::y#1 // 60.599999999999994 +int circle::y#10 // 42.73076923076923 +int circle::y#13 // 67.33333333333333 +int circle::yc +void fill(char *start , int size , char val) +char *fill::addr +char *fill::addr#0 // 11.0 +char *fill::addr#1 // 202.0 +char *fill::addr#2 // 138.33333333333331 +char *fill::end +char *fill::end#0 // 22.4 +int fill::size +int fill::size#2 // 11.0 +char *fill::start +char fill::val +char fill::val#4 // 16.833333333333332 +void main() +void plot(int x , int y) +int plot::$0 // 2002.0 +char plot::$1 // 2002.0 +int plot::$2 // 1501.5 +int plot::$3 // 2002.0 +signed char plot::$4 // 2002.0 +char plot::$5 // 2002.0 +char plot::$6 // 2002.0 +int plot::$7 // 2002.0 +int plot::$8 // 2002.0 +char *plot::location +char *plot::location#1 // 667.3333333333334 +char *plot::location#2 // 400.4 +char *plot::location#3 // 1001.0 +int plot::x +int plot::x#0 // 101.0 +int plot::x#1 // 101.0 +int plot::x#2 // 101.0 +int plot::x#3 // 101.0 +int plot::x#4 // 101.0 +int plot::x#5 // 101.0 +int plot::x#6 // 101.0 +int plot::x#7 // 101.0 +int plot::x#8 // 255.45454545454544 +int plot::y +int plot::y#0 // 202.0 +int plot::y#1 // 202.0 +int plot::y#2 // 202.0 +int plot::y#3 // 202.0 +int plot::y#4 // 202.0 +int plot::y#5 // 202.0 +int plot::y#6 // 202.0 +int plot::y#7 // 202.0 +int plot::y#8 // 301.5 + +Initial phi equivalence classes +[ fill::size#2 ] +[ fill::val#4 ] +[ fill::addr#2 fill::addr#0 fill::addr#1 ] +[ circle::x1#10 circle::x1#1 ] +[ circle::y#13 circle::y#10 circle::y#1 ] +[ circle::p#3 circle::p#10 circle::p#1 circle::p#2 ] +[ plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ] +[ plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 ] +Added variable fill::end#0 to live range equivalence class [ fill::end#0 ] +Added variable circle::$5 to live range equivalence class [ circle::$5 ] +Added variable circle::$6 to live range equivalence class [ circle::$6 ] +Added variable circle::$7 to live range equivalence class [ circle::$7 ] +Added variable circle::$9 to live range equivalence class [ circle::$9 ] +Added variable circle::$10 to live range equivalence class [ circle::$10 ] +Added variable plot::$0 to live range equivalence class [ plot::$0 ] +Added variable plot::location#1 to live range equivalence class [ plot::location#1 ] +Added variable plot::$6 to live range equivalence class [ plot::$6 ] +Added variable plot::$1 to live range equivalence class [ plot::$1 ] +Added variable plot::location#2 to live range equivalence class [ plot::location#2 ] +Added variable plot::$2 to live range equivalence class [ plot::$2 ] +Added variable plot::$7 to live range equivalence class [ plot::$7 ] +Added variable plot::$8 to live range equivalence class [ plot::$8 ] +Added variable plot::$3 to live range equivalence class [ plot::$3 ] +Added variable plot::location#3 to live range equivalence class [ plot::location#3 ] +Added variable plot::$4 to live range equivalence class [ plot::$4 ] +Added variable plot::$5 to live range equivalence class [ plot::$5 ] +Complete equivalence classes +[ fill::size#2 ] +[ fill::val#4 ] +[ fill::addr#2 fill::addr#0 fill::addr#1 ] +[ circle::x1#10 circle::x1#1 ] +[ circle::y#13 circle::y#10 circle::y#1 ] +[ circle::p#3 circle::p#10 circle::p#1 circle::p#2 ] +[ plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ] +[ plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 ] +[ fill::end#0 ] +[ circle::$5 ] +[ circle::$6 ] +[ circle::$7 ] +[ circle::$9 ] +[ circle::$10 ] +[ plot::$0 ] +[ plot::location#1 ] +[ plot::$6 ] +[ plot::$1 ] +[ plot::location#2 ] +[ plot::$2 ] +[ plot::$7 ] +[ plot::$8 ] +[ plot::$3 ] +[ plot::location#3 ] +[ plot::$4 ] +[ plot::$5 ] +Allocated zp[2]:2 [ plot::$0 ] +Allocated zp[1]:4 [ plot::$6 ] +Allocated zp[1]:5 [ plot::$1 ] +Allocated zp[2]:6 [ plot::$7 ] +Allocated zp[2]:8 [ plot::$8 ] +Allocated zp[2]:10 [ plot::$3 ] +Allocated zp[1]:12 [ plot::$4 ] +Allocated zp[1]:13 [ plot::$5 ] +Allocated zp[2]:14 [ plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 ] +Allocated zp[2]:16 [ plot::$2 ] +Allocated zp[2]:18 [ plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ] +Allocated zp[2]:20 [ plot::location#3 ] +Allocated zp[2]:22 [ plot::location#1 ] +Allocated zp[2]:24 [ circle::p#3 circle::p#10 circle::p#1 circle::p#2 ] +Allocated zp[2]:26 [ plot::location#2 ] +Allocated zp[2]:28 [ fill::addr#2 fill::addr#0 fill::addr#1 ] +Allocated zp[2]:30 [ circle::x1#10 circle::x1#1 ] +Allocated zp[2]:32 [ circle::$5 ] +Allocated zp[2]:34 [ circle::$6 ] +Allocated zp[2]:36 [ circle::$7 ] +Allocated zp[2]:38 [ circle::$9 ] +Allocated zp[2]:40 [ circle::$10 ] +Allocated zp[2]:42 [ circle::y#13 circle::y#10 circle::y#1 ] +Allocated zp[2]:44 [ fill::end#0 ] +Allocated zp[1]:46 [ fill::val#4 ] +Allocated zp[2]:47 [ fill::size#2 ] +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [4] *BORDER_COLOR = BLUE [ ] ( [ ] { } ) always clobbers reg byte a +Statement [5] *D011 = VICII_BMM|VICII_DEN|VICII_RSEL|3 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [6] *VICII_MEMORY = (char)(unsigned int)SCREEN&$3fff/$40|(unsigned int)BITMAP&$3fff/$400 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [10] fill::end#0 = fill::addr#0 + fill::size#2 [ fill::addr#0 fill::val#4 fill::end#0 ] ( fill:1 [ fill::addr#0 fill::val#4 fill::end#0 ] { } fill:3 [ fill::addr#0 fill::val#4 fill::end#0 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:46 [ fill::val#4 ] +Statement [12] if(fill::addr#2!=fill::end#0) goto fill::@2 [ fill::val#4 fill::end#0 fill::addr#2 ] ( fill:1 [ fill::val#4 fill::end#0 fill::addr#2 ] { } fill:3 [ fill::val#4 fill::end#0 fill::addr#2 ] { } ) always clobbers reg byte a +Statement [14] *fill::addr#2 = fill::val#4 [ fill::val#4 fill::end#0 fill::addr#2 ] ( fill:1 [ fill::val#4 fill::end#0 fill::addr#2 ] { } fill:3 [ fill::val#4 fill::end#0 fill::addr#2 ] { } ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp[1]:46 [ fill::val#4 ] +Statement [18] if(circle::x1#10<=circle::y#13) goto circle::@2 [ circle::x1#10 circle::y#13 circle::p#3 ] ( circle:7 [ circle::x1#10 circle::y#13 circle::p#3 ] { } ) always clobbers reg byte a +Statement [20] if(circle::p#3<0) goto circle::@3 [ circle::x1#10 circle::y#13 circle::p#3 ] ( circle:7 [ circle::x1#10 circle::y#13 circle::p#3 ] { } ) always clobbers reg byte a +Statement [21] circle::y#1 = circle::y#13 - 1 [ circle::x1#10 circle::p#3 circle::y#1 ] ( circle:7 [ circle::x1#10 circle::p#3 circle::y#1 ] { } ) always clobbers reg byte a +Statement [22] circle::$5 = circle::x1#10 - circle::y#1 [ circle::x1#10 circle::p#3 circle::y#1 circle::$5 ] ( circle:7 [ circle::x1#10 circle::p#3 circle::y#1 circle::$5 ] { } ) always clobbers reg byte a +Statement [23] circle::$6 = circle::$5 << 2 [ circle::x1#10 circle::p#3 circle::y#1 circle::$6 ] ( circle:7 [ circle::x1#10 circle::p#3 circle::y#1 circle::$6 ] { } ) always clobbers reg byte a +Statement [24] circle::$7 = circle::p#3 + circle::$6 [ circle::x1#10 circle::y#1 circle::$7 ] ( circle:7 [ circle::x1#10 circle::y#1 circle::$7 ] { } ) always clobbers reg byte a +Statement [25] circle::p#2 = circle::$7 + $a [ circle::x1#10 circle::y#1 circle::p#2 ] ( circle:7 [ circle::x1#10 circle::y#1 circle::p#2 ] { } ) always clobbers reg byte a +Statement [27] plot::x#0 = circle::xc#0 + circle::x1#10 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#0 ] ( circle:7 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#0 ] { { plot::x#0 = plot::x#8 } { plot::y#0 = plot::y#8 } } ) always clobbers reg byte a +Statement [28] plot::y#0 = circle::yc#0 - circle::y#10 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#0 plot::y#0 ] ( circle:7 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#0 plot::y#0 ] { { plot::x#0 = plot::x#8 } { plot::y#0 = plot::y#8 } } ) always clobbers reg byte a +Statement [30] plot::x#1 = circle::xc#0 - circle::x1#10 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#1 ] ( circle:7 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#1 ] { { plot::x#1 = plot::x#8 } { plot::y#1 = plot::y#8 } } ) always clobbers reg byte a +Statement [31] plot::y#1 = circle::yc#0 - circle::y#10 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#1 plot::y#1 ] ( circle:7 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#1 plot::y#1 ] { { plot::x#1 = plot::x#8 } { plot::y#1 = plot::y#8 } } ) always clobbers reg byte a +Statement [33] plot::x#2 = circle::xc#0 + circle::x1#10 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#2 ] ( circle:7 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#2 ] { { plot::x#2 = plot::x#8 } { plot::y#2 = plot::y#8 } } ) always clobbers reg byte a +Statement [34] plot::y#2 = circle::yc#0 + circle::y#10 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#2 plot::y#2 ] ( circle:7 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#2 plot::y#2 ] { { plot::x#2 = plot::x#8 } { plot::y#2 = plot::y#8 } } ) always clobbers reg byte a +Statement [36] plot::x#3 = circle::xc#0 - circle::x1#10 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#3 ] ( circle:7 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#3 ] { { plot::x#3 = plot::x#8 } { plot::y#3 = plot::y#8 } } ) always clobbers reg byte a +Statement [37] plot::y#3 = circle::yc#0 + circle::y#10 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#3 plot::y#3 ] ( circle:7 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#3 plot::y#3 ] { { plot::x#3 = plot::x#8 } { plot::y#3 = plot::y#8 } } ) always clobbers reg byte a +Statement [39] plot::x#4 = circle::xc#0 + circle::y#10 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#4 ] ( circle:7 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#4 ] { { plot::x#4 = plot::x#8 } { plot::y#4 = plot::y#8 } } ) always clobbers reg byte a +Statement [40] plot::y#4 = circle::yc#0 - circle::x1#10 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#4 plot::y#4 ] ( circle:7 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#4 plot::y#4 ] { { plot::x#4 = plot::x#8 } { plot::y#4 = plot::y#8 } } ) always clobbers reg byte a +Statement [42] plot::x#5 = circle::xc#0 - circle::y#10 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#5 ] ( circle:7 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#5 ] { { plot::x#5 = plot::x#8 } { plot::y#5 = plot::y#8 } } ) always clobbers reg byte a +Statement [43] plot::y#5 = circle::yc#0 - circle::x1#10 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#5 plot::y#5 ] ( circle:7 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#5 plot::y#5 ] { { plot::x#5 = plot::x#8 } { plot::y#5 = plot::y#8 } } ) always clobbers reg byte a +Statement [45] plot::x#6 = circle::xc#0 + circle::y#10 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#6 ] ( circle:7 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#6 ] { { plot::x#6 = plot::x#8 } { plot::y#6 = plot::y#8 } } ) always clobbers reg byte a +Statement [46] plot::y#6 = circle::yc#0 + circle::x1#10 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#6 plot::y#6 ] ( circle:7 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#6 plot::y#6 ] { { plot::x#6 = plot::x#8 } { plot::y#6 = plot::y#8 } } ) always clobbers reg byte a +Statement [48] plot::x#7 = circle::xc#0 - circle::y#10 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#7 ] ( circle:7 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#7 ] { { plot::x#7 = plot::x#8 } { plot::y#7 = plot::y#8 } } ) always clobbers reg byte a +Statement [49] plot::y#7 = circle::yc#0 + circle::x1#10 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#7 plot::y#7 ] ( circle:7 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#7 plot::y#7 ] { { plot::x#7 = plot::x#8 } { plot::y#7 = plot::y#8 } } ) always clobbers reg byte a +Statement [52] circle::$9 = circle::x1#10 << 2 [ circle::x1#10 circle::y#13 circle::p#3 circle::$9 ] ( circle:7 [ circle::x1#10 circle::y#13 circle::p#3 circle::$9 ] { } ) always clobbers reg byte a +Statement [53] circle::$10 = circle::p#3 + circle::$9 [ circle::x1#10 circle::y#13 circle::$10 ] ( circle:7 [ circle::x1#10 circle::y#13 circle::$10 ] { } ) always clobbers reg byte a +Statement [54] circle::p#1 = circle::$10 + 6 [ circle::x1#10 circle::y#13 circle::p#1 ] ( circle:7 [ circle::x1#10 circle::y#13 circle::p#1 ] { } ) always clobbers reg byte a +Statement [56] plot::$0 = plot::x#8 & $fff8 [ plot::x#8 plot::y#8 plot::$0 ] ( circle:7::plot:29 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::$0 ] { { plot::x#0 = plot::x#8 } { plot::y#0 = plot::y#8 } } circle:7::plot:32 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::$0 ] { { plot::x#1 = plot::x#8 } { plot::y#1 = plot::y#8 } } circle:7::plot:35 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::$0 ] { { plot::x#2 = plot::x#8 } { plot::y#2 = plot::y#8 } } circle:7::plot:38 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::$0 ] { { plot::x#3 = plot::x#8 } { plot::y#3 = plot::y#8 } } circle:7::plot:41 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::$0 ] { { plot::x#4 = plot::x#8 } { plot::y#4 = plot::y#8 } } circle:7::plot:44 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::$0 ] { { plot::x#5 = plot::x#8 } { plot::y#5 = plot::y#8 } } circle:7::plot:47 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::$0 ] { { plot::x#6 = plot::x#8 } { plot::y#6 = plot::y#8 } } circle:7::plot:50 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::$0 ] { { plot::x#7 = plot::x#8 } { plot::y#7 = plot::y#8 } } ) always clobbers reg byte a +Statement [57] plot::location#1 = BITMAP + plot::$0 [ plot::x#8 plot::y#8 plot::location#1 ] ( circle:7::plot:29 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::location#1 ] { { plot::x#0 = plot::x#8 } { plot::y#0 = plot::y#8 } } circle:7::plot:32 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::location#1 ] { { plot::x#1 = plot::x#8 } { plot::y#1 = plot::y#8 } } circle:7::plot:35 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::location#1 ] { { plot::x#2 = plot::x#8 } { plot::y#2 = plot::y#8 } } circle:7::plot:38 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::location#1 ] { { plot::x#3 = plot::x#8 } { plot::y#3 = plot::y#8 } } circle:7::plot:41 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::location#1 ] { { plot::x#4 = plot::x#8 } { plot::y#4 = plot::y#8 } } circle:7::plot:44 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::location#1 ] { { plot::x#5 = plot::x#8 } { plot::y#5 = plot::y#8 } } circle:7::plot:47 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::location#1 ] { { plot::x#6 = plot::x#8 } { plot::y#6 = plot::y#8 } } circle:7::plot:50 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::location#1 ] { { plot::x#7 = plot::x#8 } { plot::y#7 = plot::y#8 } } ) always clobbers reg byte a +Statement [58] plot::$6 = (char)plot::y#8 [ plot::x#8 plot::y#8 plot::location#1 plot::$6 ] ( circle:7::plot:29 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::location#1 plot::$6 ] { { plot::x#0 = plot::x#8 } { plot::y#0 = plot::y#8 } } circle:7::plot:32 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::location#1 plot::$6 ] { { plot::x#1 = plot::x#8 } { plot::y#1 = plot::y#8 } } circle:7::plot:35 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::location#1 plot::$6 ] { { plot::x#2 = plot::x#8 } { plot::y#2 = plot::y#8 } } circle:7::plot:38 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::location#1 plot::$6 ] { { plot::x#3 = plot::x#8 } { plot::y#3 = plot::y#8 } } circle:7::plot:41 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::location#1 plot::$6 ] { { plot::x#4 = plot::x#8 } { plot::y#4 = plot::y#8 } } circle:7::plot:44 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::location#1 plot::$6 ] { { plot::x#5 = plot::x#8 } { plot::y#5 = plot::y#8 } } circle:7::plot:47 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::location#1 plot::$6 ] { { plot::x#6 = plot::x#8 } { plot::y#6 = plot::y#8 } } circle:7::plot:50 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::location#1 plot::$6 ] { { plot::x#7 = plot::x#8 } { plot::y#7 = plot::y#8 } } ) always clobbers reg byte a +Statement [60] plot::location#2 = plot::location#1 + plot::$1 [ plot::x#8 plot::y#8 plot::location#2 ] ( circle:7::plot:29 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::location#2 ] { { plot::x#0 = plot::x#8 } { plot::y#0 = plot::y#8 } } circle:7::plot:32 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::location#2 ] { { plot::x#1 = plot::x#8 } { plot::y#1 = plot::y#8 } } circle:7::plot:35 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::location#2 ] { { plot::x#2 = plot::x#8 } { plot::y#2 = plot::y#8 } } circle:7::plot:38 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::location#2 ] { { plot::x#3 = plot::x#8 } { plot::y#3 = plot::y#8 } } circle:7::plot:41 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::location#2 ] { { plot::x#4 = plot::x#8 } { plot::y#4 = plot::y#8 } } circle:7::plot:44 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::location#2 ] { { plot::x#5 = plot::x#8 } { plot::y#5 = plot::y#8 } } circle:7::plot:47 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::location#2 ] { { plot::x#6 = plot::x#8 } { plot::y#6 = plot::y#8 } } circle:7::plot:50 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::location#2 ] { { plot::x#7 = plot::x#8 } { plot::y#7 = plot::y#8 } } ) always clobbers reg byte a +Statement [61] plot::$2 = plot::y#8 >> 3 [ plot::x#8 plot::location#2 plot::$2 ] ( circle:7::plot:29 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$2 ] { { plot::x#0 = plot::x#8 } { plot::y#0 = plot::y#8 } } circle:7::plot:32 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$2 ] { { plot::x#1 = plot::x#8 } { plot::y#1 = plot::y#8 } } circle:7::plot:35 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$2 ] { { plot::x#2 = plot::x#8 } { plot::y#2 = plot::y#8 } } circle:7::plot:38 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$2 ] { { plot::x#3 = plot::x#8 } { plot::y#3 = plot::y#8 } } circle:7::plot:41 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$2 ] { { plot::x#4 = plot::x#8 } { plot::y#4 = plot::y#8 } } circle:7::plot:44 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$2 ] { { plot::x#5 = plot::x#8 } { plot::y#5 = plot::y#8 } } circle:7::plot:47 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$2 ] { { plot::x#6 = plot::x#8 } { plot::y#6 = plot::y#8 } } circle:7::plot:50 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$2 ] { { plot::x#7 = plot::x#8 } { plot::y#7 = plot::y#8 } } ) always clobbers reg byte a +Statement [62] plot::$7 = plot::$2 << 2 [ plot::x#8 plot::location#2 plot::$2 plot::$7 ] ( circle:7::plot:29 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$2 plot::$7 ] { { plot::x#0 = plot::x#8 } { plot::y#0 = plot::y#8 } } circle:7::plot:32 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$2 plot::$7 ] { { plot::x#1 = plot::x#8 } { plot::y#1 = plot::y#8 } } circle:7::plot:35 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$2 plot::$7 ] { { plot::x#2 = plot::x#8 } { plot::y#2 = plot::y#8 } } circle:7::plot:38 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$2 plot::$7 ] { { plot::x#3 = plot::x#8 } { plot::y#3 = plot::y#8 } } circle:7::plot:41 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$2 plot::$7 ] { { plot::x#4 = plot::x#8 } { plot::y#4 = plot::y#8 } } circle:7::plot:44 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$2 plot::$7 ] { { plot::x#5 = plot::x#8 } { plot::y#5 = plot::y#8 } } circle:7::plot:47 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$2 plot::$7 ] { { plot::x#6 = plot::x#8 } { plot::y#6 = plot::y#8 } } circle:7::plot:50 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$2 plot::$7 ] { { plot::x#7 = plot::x#8 } { plot::y#7 = plot::y#8 } } ) always clobbers reg byte a +Statement [63] plot::$8 = plot::$7 + plot::$2 [ plot::x#8 plot::location#2 plot::$8 ] ( circle:7::plot:29 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$8 ] { { plot::x#0 = plot::x#8 } { plot::y#0 = plot::y#8 } } circle:7::plot:32 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$8 ] { { plot::x#1 = plot::x#8 } { plot::y#1 = plot::y#8 } } circle:7::plot:35 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$8 ] { { plot::x#2 = plot::x#8 } { plot::y#2 = plot::y#8 } } circle:7::plot:38 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$8 ] { { plot::x#3 = plot::x#8 } { plot::y#3 = plot::y#8 } } circle:7::plot:41 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$8 ] { { plot::x#4 = plot::x#8 } { plot::y#4 = plot::y#8 } } circle:7::plot:44 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$8 ] { { plot::x#5 = plot::x#8 } { plot::y#5 = plot::y#8 } } circle:7::plot:47 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$8 ] { { plot::x#6 = plot::x#8 } { plot::y#6 = plot::y#8 } } circle:7::plot:50 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$8 ] { { plot::x#7 = plot::x#8 } { plot::y#7 = plot::y#8 } } ) always clobbers reg byte a +Statement [64] plot::$3 = plot::$8 << 6 [ plot::x#8 plot::location#2 plot::$3 ] ( circle:7::plot:29 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$3 ] { { plot::x#0 = plot::x#8 } { plot::y#0 = plot::y#8 } } circle:7::plot:32 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$3 ] { { plot::x#1 = plot::x#8 } { plot::y#1 = plot::y#8 } } circle:7::plot:35 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$3 ] { { plot::x#2 = plot::x#8 } { plot::y#2 = plot::y#8 } } circle:7::plot:38 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$3 ] { { plot::x#3 = plot::x#8 } { plot::y#3 = plot::y#8 } } circle:7::plot:41 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$3 ] { { plot::x#4 = plot::x#8 } { plot::y#4 = plot::y#8 } } circle:7::plot:44 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$3 ] { { plot::x#5 = plot::x#8 } { plot::y#5 = plot::y#8 } } circle:7::plot:47 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$3 ] { { plot::x#6 = plot::x#8 } { plot::y#6 = plot::y#8 } } circle:7::plot:50 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$3 ] { { plot::x#7 = plot::x#8 } { plot::y#7 = plot::y#8 } } ) always clobbers reg byte a +Statement [65] plot::location#3 = plot::location#2 + plot::$3 [ plot::x#8 plot::location#3 ] ( circle:7::plot:29 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#3 ] { { plot::x#0 = plot::x#8 } { plot::y#0 = plot::y#8 } } circle:7::plot:32 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#3 ] { { plot::x#1 = plot::x#8 } { plot::y#1 = plot::y#8 } } circle:7::plot:35 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#3 ] { { plot::x#2 = plot::x#8 } { plot::y#2 = plot::y#8 } } circle:7::plot:38 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#3 ] { { plot::x#3 = plot::x#8 } { plot::y#3 = plot::y#8 } } circle:7::plot:41 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#3 ] { { plot::x#4 = plot::x#8 } { plot::y#4 = plot::y#8 } } circle:7::plot:44 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#3 ] { { plot::x#5 = plot::x#8 } { plot::y#5 = plot::y#8 } } circle:7::plot:47 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#3 ] { { plot::x#6 = plot::x#8 } { plot::y#6 = plot::y#8 } } circle:7::plot:50 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#3 ] { { plot::x#7 = plot::x#8 } { plot::y#7 = plot::y#8 } } ) always clobbers reg byte a +Statement [66] plot::$4 = plot::x#8 & 7 [ plot::location#3 plot::$4 ] ( circle:7::plot:29 [ circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$4 ] { { plot::x#0 = plot::x#8 } { plot::y#0 = plot::y#8 } } circle:7::plot:32 [ circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$4 ] { { plot::x#1 = plot::x#8 } { plot::y#1 = plot::y#8 } } circle:7::plot:35 [ circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$4 ] { { plot::x#2 = plot::x#8 } { plot::y#2 = plot::y#8 } } circle:7::plot:38 [ circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$4 ] { { plot::x#3 = plot::x#8 } { plot::y#3 = plot::y#8 } } circle:7::plot:41 [ circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$4 ] { { plot::x#4 = plot::x#8 } { plot::y#4 = plot::y#8 } } circle:7::plot:44 [ circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$4 ] { { plot::x#5 = plot::x#8 } { plot::y#5 = plot::y#8 } } circle:7::plot:47 [ circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$4 ] { { plot::x#6 = plot::x#8 } { plot::y#6 = plot::y#8 } } circle:7::plot:50 [ circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$4 ] { { plot::x#7 = plot::x#8 } { plot::y#7 = plot::y#8 } } ) always clobbers reg byte a +Statement [67] plot::$5 = *plot::location#3 | bitmask[plot::$4] [ plot::location#3 plot::$5 ] ( circle:7::plot:29 [ circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$5 ] { { plot::x#0 = plot::x#8 } { plot::y#0 = plot::y#8 } } circle:7::plot:32 [ circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$5 ] { { plot::x#1 = plot::x#8 } { plot::y#1 = plot::y#8 } } circle:7::plot:35 [ circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$5 ] { { plot::x#2 = plot::x#8 } { plot::y#2 = plot::y#8 } } circle:7::plot:38 [ circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$5 ] { { plot::x#3 = plot::x#8 } { plot::y#3 = plot::y#8 } } circle:7::plot:41 [ circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$5 ] { { plot::x#4 = plot::x#8 } { plot::y#4 = plot::y#8 } } circle:7::plot:44 [ circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$5 ] { { plot::x#5 = plot::x#8 } { plot::y#5 = plot::y#8 } } circle:7::plot:47 [ circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$5 ] { { plot::x#6 = plot::x#8 } { plot::y#6 = plot::y#8 } } circle:7::plot:50 [ circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$5 ] { { plot::x#7 = plot::x#8 } { plot::y#7 = plot::y#8 } } ) always clobbers reg byte a reg byte y +Statement [68] *plot::location#3 = plot::$5 [ ] ( circle:7::plot:29 [ circle::x1#10 circle::y#10 circle::p#10 ] { { plot::x#0 = plot::x#8 } { plot::y#0 = plot::y#8 } } circle:7::plot:32 [ circle::x1#10 circle::y#10 circle::p#10 ] { { plot::x#1 = plot::x#8 } { plot::y#1 = plot::y#8 } } circle:7::plot:35 [ circle::x1#10 circle::y#10 circle::p#10 ] { { plot::x#2 = plot::x#8 } { plot::y#2 = plot::y#8 } } circle:7::plot:38 [ circle::x1#10 circle::y#10 circle::p#10 ] { { plot::x#3 = plot::x#8 } { plot::y#3 = plot::y#8 } } circle:7::plot:41 [ circle::x1#10 circle::y#10 circle::p#10 ] { { plot::x#4 = plot::x#8 } { plot::y#4 = plot::y#8 } } circle:7::plot:44 [ circle::x1#10 circle::y#10 circle::p#10 ] { { plot::x#5 = plot::x#8 } { plot::y#5 = plot::y#8 } } circle:7::plot:47 [ circle::x1#10 circle::y#10 circle::p#10 ] { { plot::x#6 = plot::x#8 } { plot::y#6 = plot::y#8 } } circle:7::plot:50 [ circle::x1#10 circle::y#10 circle::p#10 ] { { plot::x#7 = plot::x#8 } { plot::y#7 = plot::y#8 } } ) always clobbers reg byte y +Statement [4] *BORDER_COLOR = BLUE [ ] ( [ ] { } ) always clobbers reg byte a +Statement [5] *D011 = VICII_BMM|VICII_DEN|VICII_RSEL|3 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [6] *VICII_MEMORY = (char)(unsigned int)SCREEN&$3fff/$40|(unsigned int)BITMAP&$3fff/$400 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [10] fill::end#0 = fill::addr#0 + fill::size#2 [ fill::addr#0 fill::val#4 fill::end#0 ] ( fill:1 [ fill::addr#0 fill::val#4 fill::end#0 ] { } fill:3 [ fill::addr#0 fill::val#4 fill::end#0 ] { } ) always clobbers reg byte a +Statement [12] if(fill::addr#2!=fill::end#0) goto fill::@2 [ fill::val#4 fill::end#0 fill::addr#2 ] ( fill:1 [ fill::val#4 fill::end#0 fill::addr#2 ] { } fill:3 [ fill::val#4 fill::end#0 fill::addr#2 ] { } ) always clobbers reg byte a +Statement [14] *fill::addr#2 = fill::val#4 [ fill::val#4 fill::end#0 fill::addr#2 ] ( fill:1 [ fill::val#4 fill::end#0 fill::addr#2 ] { } fill:3 [ fill::val#4 fill::end#0 fill::addr#2 ] { } ) always clobbers reg byte a reg byte y +Statement [18] if(circle::x1#10<=circle::y#13) goto circle::@2 [ circle::x1#10 circle::y#13 circle::p#3 ] ( circle:7 [ circle::x1#10 circle::y#13 circle::p#3 ] { } ) always clobbers reg byte a +Statement [20] if(circle::p#3<0) goto circle::@3 [ circle::x1#10 circle::y#13 circle::p#3 ] ( circle:7 [ circle::x1#10 circle::y#13 circle::p#3 ] { } ) always clobbers reg byte a +Statement [21] circle::y#1 = circle::y#13 - 1 [ circle::x1#10 circle::p#3 circle::y#1 ] ( circle:7 [ circle::x1#10 circle::p#3 circle::y#1 ] { } ) always clobbers reg byte a +Statement [22] circle::$5 = circle::x1#10 - circle::y#1 [ circle::x1#10 circle::p#3 circle::y#1 circle::$5 ] ( circle:7 [ circle::x1#10 circle::p#3 circle::y#1 circle::$5 ] { } ) always clobbers reg byte a +Statement [23] circle::$6 = circle::$5 << 2 [ circle::x1#10 circle::p#3 circle::y#1 circle::$6 ] ( circle:7 [ circle::x1#10 circle::p#3 circle::y#1 circle::$6 ] { } ) always clobbers reg byte a +Statement [24] circle::$7 = circle::p#3 + circle::$6 [ circle::x1#10 circle::y#1 circle::$7 ] ( circle:7 [ circle::x1#10 circle::y#1 circle::$7 ] { } ) always clobbers reg byte a +Statement [25] circle::p#2 = circle::$7 + $a [ circle::x1#10 circle::y#1 circle::p#2 ] ( circle:7 [ circle::x1#10 circle::y#1 circle::p#2 ] { } ) always clobbers reg byte a +Statement [27] plot::x#0 = circle::xc#0 + circle::x1#10 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#0 ] ( circle:7 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#0 ] { { plot::x#0 = plot::x#8 } { plot::y#0 = plot::y#8 } } ) always clobbers reg byte a +Statement [28] plot::y#0 = circle::yc#0 - circle::y#10 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#0 plot::y#0 ] ( circle:7 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#0 plot::y#0 ] { { plot::x#0 = plot::x#8 } { plot::y#0 = plot::y#8 } } ) always clobbers reg byte a +Statement [30] plot::x#1 = circle::xc#0 - circle::x1#10 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#1 ] ( circle:7 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#1 ] { { plot::x#1 = plot::x#8 } { plot::y#1 = plot::y#8 } } ) always clobbers reg byte a +Statement [31] plot::y#1 = circle::yc#0 - circle::y#10 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#1 plot::y#1 ] ( circle:7 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#1 plot::y#1 ] { { plot::x#1 = plot::x#8 } { plot::y#1 = plot::y#8 } } ) always clobbers reg byte a +Statement [33] plot::x#2 = circle::xc#0 + circle::x1#10 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#2 ] ( circle:7 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#2 ] { { plot::x#2 = plot::x#8 } { plot::y#2 = plot::y#8 } } ) always clobbers reg byte a +Statement [34] plot::y#2 = circle::yc#0 + circle::y#10 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#2 plot::y#2 ] ( circle:7 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#2 plot::y#2 ] { { plot::x#2 = plot::x#8 } { plot::y#2 = plot::y#8 } } ) always clobbers reg byte a +Statement [36] plot::x#3 = circle::xc#0 - circle::x1#10 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#3 ] ( circle:7 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#3 ] { { plot::x#3 = plot::x#8 } { plot::y#3 = plot::y#8 } } ) always clobbers reg byte a +Statement [37] plot::y#3 = circle::yc#0 + circle::y#10 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#3 plot::y#3 ] ( circle:7 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#3 plot::y#3 ] { { plot::x#3 = plot::x#8 } { plot::y#3 = plot::y#8 } } ) always clobbers reg byte a +Statement [39] plot::x#4 = circle::xc#0 + circle::y#10 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#4 ] ( circle:7 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#4 ] { { plot::x#4 = plot::x#8 } { plot::y#4 = plot::y#8 } } ) always clobbers reg byte a +Statement [40] plot::y#4 = circle::yc#0 - circle::x1#10 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#4 plot::y#4 ] ( circle:7 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#4 plot::y#4 ] { { plot::x#4 = plot::x#8 } { plot::y#4 = plot::y#8 } } ) always clobbers reg byte a +Statement [42] plot::x#5 = circle::xc#0 - circle::y#10 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#5 ] ( circle:7 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#5 ] { { plot::x#5 = plot::x#8 } { plot::y#5 = plot::y#8 } } ) always clobbers reg byte a +Statement [43] plot::y#5 = circle::yc#0 - circle::x1#10 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#5 plot::y#5 ] ( circle:7 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#5 plot::y#5 ] { { plot::x#5 = plot::x#8 } { plot::y#5 = plot::y#8 } } ) always clobbers reg byte a +Statement [45] plot::x#6 = circle::xc#0 + circle::y#10 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#6 ] ( circle:7 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#6 ] { { plot::x#6 = plot::x#8 } { plot::y#6 = plot::y#8 } } ) always clobbers reg byte a +Statement [46] plot::y#6 = circle::yc#0 + circle::x1#10 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#6 plot::y#6 ] ( circle:7 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#6 plot::y#6 ] { { plot::x#6 = plot::x#8 } { plot::y#6 = plot::y#8 } } ) always clobbers reg byte a +Statement [48] plot::x#7 = circle::xc#0 - circle::y#10 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#7 ] ( circle:7 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#7 ] { { plot::x#7 = plot::x#8 } { plot::y#7 = plot::y#8 } } ) always clobbers reg byte a +Statement [49] plot::y#7 = circle::yc#0 + circle::x1#10 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#7 plot::y#7 ] ( circle:7 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#7 plot::y#7 ] { { plot::x#7 = plot::x#8 } { plot::y#7 = plot::y#8 } } ) always clobbers reg byte a +Statement [52] circle::$9 = circle::x1#10 << 2 [ circle::x1#10 circle::y#13 circle::p#3 circle::$9 ] ( circle:7 [ circle::x1#10 circle::y#13 circle::p#3 circle::$9 ] { } ) always clobbers reg byte a +Statement [53] circle::$10 = circle::p#3 + circle::$9 [ circle::x1#10 circle::y#13 circle::$10 ] ( circle:7 [ circle::x1#10 circle::y#13 circle::$10 ] { } ) always clobbers reg byte a +Statement [54] circle::p#1 = circle::$10 + 6 [ circle::x1#10 circle::y#13 circle::p#1 ] ( circle:7 [ circle::x1#10 circle::y#13 circle::p#1 ] { } ) always clobbers reg byte a +Statement [56] plot::$0 = plot::x#8 & $fff8 [ plot::x#8 plot::y#8 plot::$0 ] ( circle:7::plot:29 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::$0 ] { { plot::x#0 = plot::x#8 } { plot::y#0 = plot::y#8 } } circle:7::plot:32 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::$0 ] { { plot::x#1 = plot::x#8 } { plot::y#1 = plot::y#8 } } circle:7::plot:35 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::$0 ] { { plot::x#2 = plot::x#8 } { plot::y#2 = plot::y#8 } } circle:7::plot:38 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::$0 ] { { plot::x#3 = plot::x#8 } { plot::y#3 = plot::y#8 } } circle:7::plot:41 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::$0 ] { { plot::x#4 = plot::x#8 } { plot::y#4 = plot::y#8 } } circle:7::plot:44 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::$0 ] { { plot::x#5 = plot::x#8 } { plot::y#5 = plot::y#8 } } circle:7::plot:47 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::$0 ] { { plot::x#6 = plot::x#8 } { plot::y#6 = plot::y#8 } } circle:7::plot:50 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::$0 ] { { plot::x#7 = plot::x#8 } { plot::y#7 = plot::y#8 } } ) always clobbers reg byte a +Statement [57] plot::location#1 = BITMAP + plot::$0 [ plot::x#8 plot::y#8 plot::location#1 ] ( circle:7::plot:29 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::location#1 ] { { plot::x#0 = plot::x#8 } { plot::y#0 = plot::y#8 } } circle:7::plot:32 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::location#1 ] { { plot::x#1 = plot::x#8 } { plot::y#1 = plot::y#8 } } circle:7::plot:35 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::location#1 ] { { plot::x#2 = plot::x#8 } { plot::y#2 = plot::y#8 } } circle:7::plot:38 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::location#1 ] { { plot::x#3 = plot::x#8 } { plot::y#3 = plot::y#8 } } circle:7::plot:41 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::location#1 ] { { plot::x#4 = plot::x#8 } { plot::y#4 = plot::y#8 } } circle:7::plot:44 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::location#1 ] { { plot::x#5 = plot::x#8 } { plot::y#5 = plot::y#8 } } circle:7::plot:47 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::location#1 ] { { plot::x#6 = plot::x#8 } { plot::y#6 = plot::y#8 } } circle:7::plot:50 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::location#1 ] { { plot::x#7 = plot::x#8 } { plot::y#7 = plot::y#8 } } ) always clobbers reg byte a +Statement [58] plot::$6 = (char)plot::y#8 [ plot::x#8 plot::y#8 plot::location#1 plot::$6 ] ( circle:7::plot:29 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::location#1 plot::$6 ] { { plot::x#0 = plot::x#8 } { plot::y#0 = plot::y#8 } } circle:7::plot:32 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::location#1 plot::$6 ] { { plot::x#1 = plot::x#8 } { plot::y#1 = plot::y#8 } } circle:7::plot:35 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::location#1 plot::$6 ] { { plot::x#2 = plot::x#8 } { plot::y#2 = plot::y#8 } } circle:7::plot:38 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::location#1 plot::$6 ] { { plot::x#3 = plot::x#8 } { plot::y#3 = plot::y#8 } } circle:7::plot:41 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::location#1 plot::$6 ] { { plot::x#4 = plot::x#8 } { plot::y#4 = plot::y#8 } } circle:7::plot:44 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::location#1 plot::$6 ] { { plot::x#5 = plot::x#8 } { plot::y#5 = plot::y#8 } } circle:7::plot:47 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::location#1 plot::$6 ] { { plot::x#6 = plot::x#8 } { plot::y#6 = plot::y#8 } } circle:7::plot:50 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::location#1 plot::$6 ] { { plot::x#7 = plot::x#8 } { plot::y#7 = plot::y#8 } } ) always clobbers reg byte a +Statement [60] plot::location#2 = plot::location#1 + plot::$1 [ plot::x#8 plot::y#8 plot::location#2 ] ( circle:7::plot:29 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::location#2 ] { { plot::x#0 = plot::x#8 } { plot::y#0 = plot::y#8 } } circle:7::plot:32 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::location#2 ] { { plot::x#1 = plot::x#8 } { plot::y#1 = plot::y#8 } } circle:7::plot:35 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::location#2 ] { { plot::x#2 = plot::x#8 } { plot::y#2 = plot::y#8 } } circle:7::plot:38 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::location#2 ] { { plot::x#3 = plot::x#8 } { plot::y#3 = plot::y#8 } } circle:7::plot:41 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::location#2 ] { { plot::x#4 = plot::x#8 } { plot::y#4 = plot::y#8 } } circle:7::plot:44 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::location#2 ] { { plot::x#5 = plot::x#8 } { plot::y#5 = plot::y#8 } } circle:7::plot:47 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::location#2 ] { { plot::x#6 = plot::x#8 } { plot::y#6 = plot::y#8 } } circle:7::plot:50 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::y#8 plot::location#2 ] { { plot::x#7 = plot::x#8 } { plot::y#7 = plot::y#8 } } ) always clobbers reg byte a +Statement [61] plot::$2 = plot::y#8 >> 3 [ plot::x#8 plot::location#2 plot::$2 ] ( circle:7::plot:29 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$2 ] { { plot::x#0 = plot::x#8 } { plot::y#0 = plot::y#8 } } circle:7::plot:32 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$2 ] { { plot::x#1 = plot::x#8 } { plot::y#1 = plot::y#8 } } circle:7::plot:35 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$2 ] { { plot::x#2 = plot::x#8 } { plot::y#2 = plot::y#8 } } circle:7::plot:38 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$2 ] { { plot::x#3 = plot::x#8 } { plot::y#3 = plot::y#8 } } circle:7::plot:41 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$2 ] { { plot::x#4 = plot::x#8 } { plot::y#4 = plot::y#8 } } circle:7::plot:44 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$2 ] { { plot::x#5 = plot::x#8 } { plot::y#5 = plot::y#8 } } circle:7::plot:47 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$2 ] { { plot::x#6 = plot::x#8 } { plot::y#6 = plot::y#8 } } circle:7::plot:50 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$2 ] { { plot::x#7 = plot::x#8 } { plot::y#7 = plot::y#8 } } ) always clobbers reg byte a +Statement [62] plot::$7 = plot::$2 << 2 [ plot::x#8 plot::location#2 plot::$2 plot::$7 ] ( circle:7::plot:29 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$2 plot::$7 ] { { plot::x#0 = plot::x#8 } { plot::y#0 = plot::y#8 } } circle:7::plot:32 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$2 plot::$7 ] { { plot::x#1 = plot::x#8 } { plot::y#1 = plot::y#8 } } circle:7::plot:35 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$2 plot::$7 ] { { plot::x#2 = plot::x#8 } { plot::y#2 = plot::y#8 } } circle:7::plot:38 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$2 plot::$7 ] { { plot::x#3 = plot::x#8 } { plot::y#3 = plot::y#8 } } circle:7::plot:41 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$2 plot::$7 ] { { plot::x#4 = plot::x#8 } { plot::y#4 = plot::y#8 } } circle:7::plot:44 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$2 plot::$7 ] { { plot::x#5 = plot::x#8 } { plot::y#5 = plot::y#8 } } circle:7::plot:47 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$2 plot::$7 ] { { plot::x#6 = plot::x#8 } { plot::y#6 = plot::y#8 } } circle:7::plot:50 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$2 plot::$7 ] { { plot::x#7 = plot::x#8 } { plot::y#7 = plot::y#8 } } ) always clobbers reg byte a +Statement [63] plot::$8 = plot::$7 + plot::$2 [ plot::x#8 plot::location#2 plot::$8 ] ( circle:7::plot:29 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$8 ] { { plot::x#0 = plot::x#8 } { plot::y#0 = plot::y#8 } } circle:7::plot:32 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$8 ] { { plot::x#1 = plot::x#8 } { plot::y#1 = plot::y#8 } } circle:7::plot:35 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$8 ] { { plot::x#2 = plot::x#8 } { plot::y#2 = plot::y#8 } } circle:7::plot:38 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$8 ] { { plot::x#3 = plot::x#8 } { plot::y#3 = plot::y#8 } } circle:7::plot:41 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$8 ] { { plot::x#4 = plot::x#8 } { plot::y#4 = plot::y#8 } } circle:7::plot:44 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$8 ] { { plot::x#5 = plot::x#8 } { plot::y#5 = plot::y#8 } } circle:7::plot:47 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$8 ] { { plot::x#6 = plot::x#8 } { plot::y#6 = plot::y#8 } } circle:7::plot:50 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$8 ] { { plot::x#7 = plot::x#8 } { plot::y#7 = plot::y#8 } } ) always clobbers reg byte a +Statement [64] plot::$3 = plot::$8 << 6 [ plot::x#8 plot::location#2 plot::$3 ] ( circle:7::plot:29 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$3 ] { { plot::x#0 = plot::x#8 } { plot::y#0 = plot::y#8 } } circle:7::plot:32 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$3 ] { { plot::x#1 = plot::x#8 } { plot::y#1 = plot::y#8 } } circle:7::plot:35 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$3 ] { { plot::x#2 = plot::x#8 } { plot::y#2 = plot::y#8 } } circle:7::plot:38 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$3 ] { { plot::x#3 = plot::x#8 } { plot::y#3 = plot::y#8 } } circle:7::plot:41 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$3 ] { { plot::x#4 = plot::x#8 } { plot::y#4 = plot::y#8 } } circle:7::plot:44 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$3 ] { { plot::x#5 = plot::x#8 } { plot::y#5 = plot::y#8 } } circle:7::plot:47 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$3 ] { { plot::x#6 = plot::x#8 } { plot::y#6 = plot::y#8 } } circle:7::plot:50 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#2 plot::$3 ] { { plot::x#7 = plot::x#8 } { plot::y#7 = plot::y#8 } } ) always clobbers reg byte a +Statement [65] plot::location#3 = plot::location#2 + plot::$3 [ plot::x#8 plot::location#3 ] ( circle:7::plot:29 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#3 ] { { plot::x#0 = plot::x#8 } { plot::y#0 = plot::y#8 } } circle:7::plot:32 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#3 ] { { plot::x#1 = plot::x#8 } { plot::y#1 = plot::y#8 } } circle:7::plot:35 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#3 ] { { plot::x#2 = plot::x#8 } { plot::y#2 = plot::y#8 } } circle:7::plot:38 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#3 ] { { plot::x#3 = plot::x#8 } { plot::y#3 = plot::y#8 } } circle:7::plot:41 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#3 ] { { plot::x#4 = plot::x#8 } { plot::y#4 = plot::y#8 } } circle:7::plot:44 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#3 ] { { plot::x#5 = plot::x#8 } { plot::y#5 = plot::y#8 } } circle:7::plot:47 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#3 ] { { plot::x#6 = plot::x#8 } { plot::y#6 = plot::y#8 } } circle:7::plot:50 [ circle::x1#10 circle::y#10 circle::p#10 plot::x#8 plot::location#3 ] { { plot::x#7 = plot::x#8 } { plot::y#7 = plot::y#8 } } ) always clobbers reg byte a +Statement [66] plot::$4 = plot::x#8 & 7 [ plot::location#3 plot::$4 ] ( circle:7::plot:29 [ circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$4 ] { { plot::x#0 = plot::x#8 } { plot::y#0 = plot::y#8 } } circle:7::plot:32 [ circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$4 ] { { plot::x#1 = plot::x#8 } { plot::y#1 = plot::y#8 } } circle:7::plot:35 [ circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$4 ] { { plot::x#2 = plot::x#8 } { plot::y#2 = plot::y#8 } } circle:7::plot:38 [ circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$4 ] { { plot::x#3 = plot::x#8 } { plot::y#3 = plot::y#8 } } circle:7::plot:41 [ circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$4 ] { { plot::x#4 = plot::x#8 } { plot::y#4 = plot::y#8 } } circle:7::plot:44 [ circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$4 ] { { plot::x#5 = plot::x#8 } { plot::y#5 = plot::y#8 } } circle:7::plot:47 [ circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$4 ] { { plot::x#6 = plot::x#8 } { plot::y#6 = plot::y#8 } } circle:7::plot:50 [ circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$4 ] { { plot::x#7 = plot::x#8 } { plot::y#7 = plot::y#8 } } ) always clobbers reg byte a +Statement [67] plot::$5 = *plot::location#3 | bitmask[plot::$4] [ plot::location#3 plot::$5 ] ( circle:7::plot:29 [ circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$5 ] { { plot::x#0 = plot::x#8 } { plot::y#0 = plot::y#8 } } circle:7::plot:32 [ circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$5 ] { { plot::x#1 = plot::x#8 } { plot::y#1 = plot::y#8 } } circle:7::plot:35 [ circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$5 ] { { plot::x#2 = plot::x#8 } { plot::y#2 = plot::y#8 } } circle:7::plot:38 [ circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$5 ] { { plot::x#3 = plot::x#8 } { plot::y#3 = plot::y#8 } } circle:7::plot:41 [ circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$5 ] { { plot::x#4 = plot::x#8 } { plot::y#4 = plot::y#8 } } circle:7::plot:44 [ circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$5 ] { { plot::x#5 = plot::x#8 } { plot::y#5 = plot::y#8 } } circle:7::plot:47 [ circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$5 ] { { plot::x#6 = plot::x#8 } { plot::y#6 = plot::y#8 } } circle:7::plot:50 [ circle::x1#10 circle::y#10 circle::p#10 plot::location#3 plot::$5 ] { { plot::x#7 = plot::x#8 } { plot::y#7 = plot::y#8 } } ) always clobbers reg byte a reg byte y +Statement [68] *plot::location#3 = plot::$5 [ ] ( circle:7::plot:29 [ circle::x1#10 circle::y#10 circle::p#10 ] { { plot::x#0 = plot::x#8 } { plot::y#0 = plot::y#8 } } circle:7::plot:32 [ circle::x1#10 circle::y#10 circle::p#10 ] { { plot::x#1 = plot::x#8 } { plot::y#1 = plot::y#8 } } circle:7::plot:35 [ circle::x1#10 circle::y#10 circle::p#10 ] { { plot::x#2 = plot::x#8 } { plot::y#2 = plot::y#8 } } circle:7::plot:38 [ circle::x1#10 circle::y#10 circle::p#10 ] { { plot::x#3 = plot::x#8 } { plot::y#3 = plot::y#8 } } circle:7::plot:41 [ circle::x1#10 circle::y#10 circle::p#10 ] { { plot::x#4 = plot::x#8 } { plot::y#4 = plot::y#8 } } circle:7::plot:44 [ circle::x1#10 circle::y#10 circle::p#10 ] { { plot::x#5 = plot::x#8 } { plot::y#5 = plot::y#8 } } circle:7::plot:47 [ circle::x1#10 circle::y#10 circle::p#10 ] { { plot::x#6 = plot::x#8 } { plot::y#6 = plot::y#8 } } circle:7::plot:50 [ circle::x1#10 circle::y#10 circle::p#10 ] { { plot::x#7 = plot::x#8 } { plot::y#7 = plot::y#8 } } ) always clobbers reg byte y +Potential registers zp[2]:47 [ fill::size#2 ] : zp[2]:47 , +Potential registers zp[1]:46 [ fill::val#4 ] : zp[1]:46 , reg byte x , +Potential registers zp[2]:28 [ fill::addr#2 fill::addr#0 fill::addr#1 ] : zp[2]:28 , +Potential registers zp[2]:30 [ circle::x1#10 circle::x1#1 ] : zp[2]:30 , +Potential registers zp[2]:42 [ circle::y#13 circle::y#10 circle::y#1 ] : zp[2]:42 , +Potential registers zp[2]:24 [ circle::p#3 circle::p#10 circle::p#1 circle::p#2 ] : zp[2]:24 , +Potential registers zp[2]:18 [ plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ] : zp[2]:18 , +Potential registers zp[2]:14 [ plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 ] : zp[2]:14 , +Potential registers zp[2]:44 [ fill::end#0 ] : zp[2]:44 , +Potential registers zp[2]:32 [ circle::$5 ] : zp[2]:32 , +Potential registers zp[2]:34 [ circle::$6 ] : zp[2]:34 , +Potential registers zp[2]:36 [ circle::$7 ] : zp[2]:36 , +Potential registers zp[2]:38 [ circle::$9 ] : zp[2]:38 , +Potential registers zp[2]:40 [ circle::$10 ] : zp[2]:40 , +Potential registers zp[2]:2 [ plot::$0 ] : zp[2]:2 , +Potential registers zp[2]:22 [ plot::location#1 ] : zp[2]:22 , +Potential registers zp[1]:4 [ plot::$6 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:5 [ plot::$1 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:26 [ plot::location#2 ] : zp[2]:26 , +Potential registers zp[2]:16 [ plot::$2 ] : zp[2]:16 , +Potential registers zp[2]:6 [ plot::$7 ] : zp[2]:6 , +Potential registers zp[2]:8 [ plot::$8 ] : zp[2]:8 , +Potential registers zp[2]:10 [ plot::$3 ] : zp[2]:10 , +Potential registers zp[2]:20 [ plot::location#3 ] : zp[2]:20 , +Potential registers zp[1]:12 [ plot::$4 ] : zp[1]:12 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:13 [ plot::$5 ] : zp[1]:13 , reg byte a , reg byte x , reg byte y , + +REGISTER UPLIFT SCOPES +Uplift Scope [plot] 2,002: zp[2]:2 [ plot::$0 ] 2,002: zp[1]:4 [ plot::$6 ] 2,002: zp[1]:5 [ plot::$1 ] 2,002: zp[2]:6 [ plot::$7 ] 2,002: zp[2]:8 [ plot::$8 ] 2,002: zp[2]:10 [ plot::$3 ] 2,002: zp[1]:12 [ plot::$4 ] 2,002: zp[1]:13 [ plot::$5 ] 1,917.5: zp[2]:14 [ plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 ] 1,501.5: zp[2]:16 [ plot::$2 ] 1,063.45: zp[2]:18 [ plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ] 1,001: zp[2]:20 [ plot::location#3 ] 667.33: zp[2]:22 [ plot::location#1 ] 400.4: zp[2]:26 [ plot::location#2 ] +Uplift Scope [circle] 473.37: zp[2]:24 [ circle::p#3 circle::p#10 circle::p#1 circle::p#2 ] 238.47: zp[2]:30 [ circle::x1#10 circle::x1#1 ] 202: zp[2]:32 [ circle::$5 ] 202: zp[2]:34 [ circle::$6 ] 202: zp[2]:36 [ circle::$7 ] 202: zp[2]:38 [ circle::$9 ] 202: zp[2]:40 [ circle::$10 ] 170.66: zp[2]:42 [ circle::y#13 circle::y#10 circle::y#1 ] +Uplift Scope [fill] 351.33: zp[2]:28 [ fill::addr#2 fill::addr#0 fill::addr#1 ] 22.4: zp[2]:44 [ fill::end#0 ] 16.83: zp[1]:46 [ fill::val#4 ] 11: zp[2]:47 [ fill::size#2 ] +Uplift Scope [main] +Uplift Scope [] + +Uplifting [plot] best 6407 combination zp[2]:2 [ plot::$0 ] reg byte a [ plot::$6 ] reg byte a [ plot::$1 ] zp[2]:6 [ plot::$7 ] zp[2]:8 [ plot::$8 ] zp[2]:10 [ plot::$3 ] reg byte a [ plot::$4 ] reg byte a [ plot::$5 ] zp[2]:14 [ plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 ] zp[2]:16 [ plot::$2 ] zp[2]:18 [ plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ] zp[2]:20 [ plot::location#3 ] zp[2]:22 [ plot::location#1 ] zp[2]:26 [ plot::location#2 ] +Limited combination testing to 100 combinations of 256 possible. +Uplifting [circle] best 6407 combination zp[2]:24 [ circle::p#3 circle::p#10 circle::p#1 circle::p#2 ] zp[2]:30 [ circle::x1#10 circle::x1#1 ] zp[2]:32 [ circle::$5 ] zp[2]:34 [ circle::$6 ] zp[2]:36 [ circle::$7 ] zp[2]:38 [ circle::$9 ] zp[2]:40 [ circle::$10 ] zp[2]:42 [ circle::y#13 circle::y#10 circle::y#1 ] +Uplifting [fill] best 6391 combination zp[2]:28 [ fill::addr#2 fill::addr#0 fill::addr#1 ] zp[2]:44 [ fill::end#0 ] reg byte x [ fill::val#4 ] zp[2]:47 [ fill::size#2 ] +Uplifting [main] best 6391 combination +Uplifting [] best 6391 combination +Coalescing zero page register [ zp[2]:24 [ circle::p#3 circle::p#10 circle::p#1 circle::p#2 ] ] with [ zp[2]:36 [ circle::$7 ] ] - score: 2 +Coalescing zero page register [ zp[2]:24 [ circle::p#3 circle::p#10 circle::p#1 circle::p#2 circle::$7 ] ] with [ zp[2]:40 [ circle::$10 ] ] - score: 2 +Coalescing zero page register [ zp[2]:47 [ fill::size#2 ] ] with [ zp[2]:44 [ fill::end#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:14 [ plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 ] ] with [ zp[2]:16 [ plot::$2 ] ] - score: 1 +Coalescing zero page register [ zp[2]:32 [ circle::$5 ] ] with [ zp[2]:34 [ circle::$6 ] ] - score: 1 +Coalescing zero page register [ zp[2]:2 [ plot::$0 ] ] with [ zp[2]:22 [ plot::location#1 ] ] - score: 1 +Coalescing zero page register [ zp[2]:26 [ plot::location#2 ] ] with [ zp[2]:20 [ plot::location#3 ] ] - score: 1 +Coalescing zero page register [ zp[2]:6 [ plot::$7 ] ] with [ zp[2]:8 [ plot::$8 ] ] - score: 1 +Coalescing zero page register [ zp[2]:2 [ plot::$0 plot::location#1 ] ] with [ zp[2]:26 [ plot::location#2 plot::location#3 ] ] - score: 1 +Coalescing zero page register [ zp[2]:6 [ plot::$7 plot::$8 ] ] with [ zp[2]:10 [ plot::$3 ] ] - score: 1 +Coalescing zero page register [ zp[2]:30 [ circle::x1#10 circle::x1#1 ] ] with [ zp[2]:47 [ fill::size#2 fill::end#0 ] ] +Coalescing zero page register [ zp[2]:42 [ circle::y#13 circle::y#10 circle::y#1 ] ] with [ zp[2]:28 [ fill::addr#2 fill::addr#0 fill::addr#1 ] ] +Coalescing zero page register [ zp[2]:32 [ circle::$5 circle::$6 ] ] with [ zp[2]:18 [ plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ] ] +Coalescing zero page register [ zp[2]:38 [ circle::$9 ] ] with [ zp[2]:14 [ plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 plot::$2 ] ] +Allocated (was zp[2]:6) zp[2]:2 [ plot::$7 plot::$8 plot::$3 ] +Allocated (was zp[2]:2) zp[2]:4 [ plot::$0 plot::location#1 plot::location#2 plot::location#3 ] +Allocated (was zp[2]:38) zp[2]:6 [ circle::$9 plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 plot::$2 ] +Allocated (was zp[2]:32) zp[2]:8 [ circle::$5 circle::$6 plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ] +Allocated (was zp[2]:24) zp[2]:10 [ circle::p#3 circle::p#10 circle::p#1 circle::p#2 circle::$7 circle::$10 ] +Allocated (was zp[2]:42) zp[2]:12 [ circle::y#13 circle::y#10 circle::y#1 fill::addr#2 fill::addr#0 fill::addr#1 ] +Allocated (was zp[2]:30) zp[2]:14 [ circle::x1#10 circle::x1#1 fill::size#2 fill::end#0 ] + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +// Plots a circle on a bitmap using Bresenham's Circle algorithm +// Coded by Richard-William Loerakker +// Original Source https://bcaorganizer.blogspot.com/p/c-program-for_21.html?fbclid=IwAR0iL8pYcCqhCPa6LmtQ9qej-YonYVepY2cBegYRIWO0l8RPeOnTVniMAac + // Upstart + // Commodore 64 PRG executable file +.file [name="bitmap-circle-standalone.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + // Global Constants & labels + .const VICII_BMM = $20 + .const VICII_DEN = $10 + .const VICII_RSEL = 8 + .const BLUE = 6 + .label SCREEN = $400 + .label BITMAP = $2000 + .label D011 = $d011 + .label VICII_MEMORY = $d018 + .label BORDER_COLOR = $d020 +.segment Code + // main +main: { + // [1] call fill + // [9] phi from main to fill [phi:main->fill] + fill_from_main: + // [9] phi fill::val#4 = 0 [phi:main->fill#0] -- vbuxx=vbuc1 + ldx #0 + // [9] phi fill::size#2 = (int)$28*$19*8 [phi:main->fill#1] -- vwsz1=vwsc1 + lda #<$28*$19*8 + sta.z fill.size + lda #>$28*$19*8 + sta.z fill.size+1 + // [9] phi fill::addr#0 = BITMAP [phi:main->fill#2] -- pbuz1=pbuc1 + lda #BITMAP + sta.z fill.addr+1 + jsr fill + // [2] phi from main to main::@2 [phi:main->main::@2] + __b2_from_main: + jmp __b2 + // main::@2 + __b2: + // [3] call fill + // [9] phi from main::@2 to fill [phi:main::@2->fill] + fill_from___b2: + // [9] phi fill::val#4 = $16 [phi:main::@2->fill#0] -- vbuxx=vbuc1 + ldx #$16 + // [9] phi fill::size#2 = (int)$28*$19 [phi:main::@2->fill#1] -- vwsz1=vwsc1 + lda #<$28*$19 + sta.z fill.size + lda #>$28*$19 + sta.z fill.size+1 + // [9] phi fill::addr#0 = SCREEN [phi:main::@2->fill#2] -- pbuz1=pbuc1 + lda #SCREEN + sta.z fill.addr+1 + jsr fill + jmp __b3 + // main::@3 + __b3: + // [4] *BORDER_COLOR = BLUE -- _deref_pbuc1=vbuc2 + lda #BLUE + sta BORDER_COLOR + // [5] *D011 = VICII_BMM|VICII_DEN|VICII_RSEL|3 -- _deref_pbuc1=vbuc2 + lda #VICII_BMM|VICII_DEN|VICII_RSEL|3 + sta D011 + // [6] *VICII_MEMORY = (char)(unsigned int)SCREEN&$3fff/$40|(unsigned int)BITMAP&$3fff/$400 -- _deref_pbuc1=vbuc2 + lda #(SCREEN&$3fff)/$40|(BITMAP&$3fff)/$400 + sta VICII_MEMORY + // [7] call circle + // [16] phi from main::@3 to circle [phi:main::@3->circle] + circle_from___b3: + jsr circle + // [8] phi from main::@1 main::@3 to main::@1 [phi:main::@1/main::@3->main::@1] + __b1_from___b1: + __b1_from___b3: + jmp __b1 + // main::@1 + __b1: + jmp __b1_from___b1 +} + // fill +// Fill some memory with a value +// void fill(char *start, __zp($e) int size, __register(X) char val) +fill: { + .label end = $e + .label addr = $c + .label size = $e + // [10] fill::end#0 = fill::addr#0 + fill::size#2 -- pbuz1=pbuz2_plus_vwsz1 + clc + lda.z end + adc.z addr + sta.z end + lda.z end+1 + adc.z addr+1 + sta.z end+1 + // [11] phi from fill fill::@2 to fill::@1 [phi:fill/fill::@2->fill::@1] + __b1_from_fill: + __b1_from___b2: + // [11] phi fill::addr#2 = fill::addr#0 [phi:fill/fill::@2->fill::@1#0] -- register_copy + jmp __b1 + // fill::@1 + __b1: + // [12] if(fill::addr#2!=fill::end#0) goto fill::@2 -- pbuz1_neq_pbuz2_then_la1 + lda.z addr+1 + cmp.z end+1 + bne __b2 + lda.z addr + cmp.z end + bne __b2 + jmp __breturn + // fill::@return + __breturn: + // [13] return + rts + // fill::@2 + __b2: + // [14] *fill::addr#2 = fill::val#4 -- _deref_pbuz1=vbuxx + txa + ldy #0 + sta (addr),y + // [15] fill::addr#1 = ++ fill::addr#2 -- pbuz1=_inc_pbuz1 + inc.z addr + bne !+ + inc.z addr+1 + !: + jmp __b1_from___b2 +} + // circle +// void circle(int xc, int yc, int r) +circle: { + .const xc = $64 + .const yc = $64 + .const r = $32 + .label __5 = 8 + .label __6 = 8 + .label __7 = $a + .label __9 = 6 + .label __10 = $a + .label p = $a + .label y = $c + .label x1 = $e + // [17] phi from circle to circle::@1 [phi:circle->circle::@1] + __b1_from_circle: + // [17] phi circle::p#3 = 3-circle::r#0<<1 [phi:circle->circle::@1#0] -- vwsz1=vwsc1 + lda #<3-(r<<1) + sta.z p + lda #>3-(r<<1) + sta.z p+1 + // [17] phi circle::y#13 = circle::r#0 [phi:circle->circle::@1#1] -- vwsz1=vwsc1 + lda #r + sta.z y+1 + // [17] phi circle::x1#10 = 0 [phi:circle->circle::@1#2] -- vwsz1=vwsc1 + lda #<0 + sta.z x1 + lda #>0 + sta.z x1+1 + jmp __b1 + // circle::@1 + __b1: + // [18] if(circle::x1#10<=circle::y#13) goto circle::@2 -- vwsz1_le_vwsz2_then_la1 + lda.z y + cmp.z x1 + lda.z y+1 + sbc.z x1+1 + bvc !+ + eor #$80 + !: + bpl __b2 + jmp __breturn + // circle::@return + __breturn: + // [19] return + rts + // circle::@2 + __b2: + // [20] if(circle::p#3<0) goto circle::@3 -- vwsz1_lt_0_then_la1 + lda.z p+1 + bmi __b3 + jmp __b5 + // circle::@5 + __b5: + // [21] circle::y#1 = circle::y#13 - 1 -- vwsz1=vwsz1_minus_1 + sec + lda.z y + sbc #1 + sta.z y + bcs !+ + dec.z y+1 + !: + // [22] circle::$5 = circle::x1#10 - circle::y#1 -- vwsz1=vwsz2_minus_vwsz3 + lda.z x1 + sec + sbc.z y + sta.z __5 + lda.z x1+1 + sbc.z y+1 + sta.z __5+1 + // [23] circle::$6 = circle::$5 << 2 -- vwsz1=vwsz1_rol_2 + asl.z __6 + rol.z __6+1 + asl.z __6 + rol.z __6+1 + // [24] circle::$7 = circle::p#3 + circle::$6 -- vwsz1=vwsz1_plus_vwsz2 + clc + lda.z __7 + adc.z __6 + sta.z __7 + lda.z __7+1 + adc.z __6+1 + sta.z __7+1 + // [25] circle::p#2 = circle::$7 + $a -- vwsz1=vwsz1_plus_vbsc1 + lda.z p + clc + adc #<$a + sta.z p + lda.z p+1 + adc #>$a + sta.z p+1 + // [26] phi from circle::@3 circle::@5 to circle::@4 [phi:circle::@3/circle::@5->circle::@4] + __b4_from___b3: + __b4_from___b5: + // [26] phi circle::p#10 = circle::p#1 [phi:circle::@3/circle::@5->circle::@4#0] -- register_copy + // [26] phi circle::y#10 = circle::y#13 [phi:circle::@3/circle::@5->circle::@4#1] -- register_copy + jmp __b4 + // circle::@4 + __b4: + // [27] plot::x#0 = circle::xc#0 + circle::x1#10 -- vwsz1=vwsc1_plus_vwsz2 + clc + lda.z x1 + adc #xc + sta.z plot.x+1 + // [28] plot::y#0 = circle::yc#0 - circle::y#10 -- vwsz1=vwsc1_minus_vwsz2 + lda #yc + sbc.z y+1 + sta.z plot.y+1 + // [29] call plot + // [55] phi from circle::@4 to plot [phi:circle::@4->plot] + plot_from___b4: + // [55] phi plot::y#8 = plot::y#0 [phi:circle::@4->plot#0] -- register_copy + // [55] phi plot::x#8 = plot::x#0 [phi:circle::@4->plot#1] -- register_copy + jsr plot + jmp __b6 + // circle::@6 + __b6: + // [30] plot::x#1 = circle::xc#0 - circle::x1#10 -- vwsz1=vwsc1_minus_vwsz2 + lda #xc + sbc.z x1+1 + sta.z plot.x+1 + // [31] plot::y#1 = circle::yc#0 - circle::y#10 -- vwsz1=vwsc1_minus_vwsz2 + lda #yc + sbc.z y+1 + sta.z plot.y+1 + // [32] call plot + // [55] phi from circle::@6 to plot [phi:circle::@6->plot] + plot_from___b6: + // [55] phi plot::y#8 = plot::y#1 [phi:circle::@6->plot#0] -- register_copy + // [55] phi plot::x#8 = plot::x#1 [phi:circle::@6->plot#1] -- register_copy + jsr plot + jmp __b7 + // circle::@7 + __b7: + // [33] plot::x#2 = circle::xc#0 + circle::x1#10 -- vwsz1=vwsc1_plus_vwsz2 + clc + lda.z x1 + adc #xc + sta.z plot.x+1 + // [34] plot::y#2 = circle::yc#0 + circle::y#10 -- vwsz1=vwsc1_plus_vwsz2 + clc + lda.z y + adc #yc + sta.z plot.y+1 + // [35] call plot + // [55] phi from circle::@7 to plot [phi:circle::@7->plot] + plot_from___b7: + // [55] phi plot::y#8 = plot::y#2 [phi:circle::@7->plot#0] -- register_copy + // [55] phi plot::x#8 = plot::x#2 [phi:circle::@7->plot#1] -- register_copy + jsr plot + jmp __b8 + // circle::@8 + __b8: + // [36] plot::x#3 = circle::xc#0 - circle::x1#10 -- vwsz1=vwsc1_minus_vwsz2 + lda #xc + sbc.z x1+1 + sta.z plot.x+1 + // [37] plot::y#3 = circle::yc#0 + circle::y#10 -- vwsz1=vwsc1_plus_vwsz2 + clc + lda.z y + adc #yc + sta.z plot.y+1 + // [38] call plot + // [55] phi from circle::@8 to plot [phi:circle::@8->plot] + plot_from___b8: + // [55] phi plot::y#8 = plot::y#3 [phi:circle::@8->plot#0] -- register_copy + // [55] phi plot::x#8 = plot::x#3 [phi:circle::@8->plot#1] -- register_copy + jsr plot + jmp __b9 + // circle::@9 + __b9: + // [39] plot::x#4 = circle::xc#0 + circle::y#10 -- vwsz1=vwsc1_plus_vwsz2 + clc + lda.z y + adc #xc + sta.z plot.x+1 + // [40] plot::y#4 = circle::yc#0 - circle::x1#10 -- vwsz1=vwsc1_minus_vwsz2 + lda #yc + sbc.z x1+1 + sta.z plot.y+1 + // [41] call plot + // [55] phi from circle::@9 to plot [phi:circle::@9->plot] + plot_from___b9: + // [55] phi plot::y#8 = plot::y#4 [phi:circle::@9->plot#0] -- register_copy + // [55] phi plot::x#8 = plot::x#4 [phi:circle::@9->plot#1] -- register_copy + jsr plot + jmp __b10 + // circle::@10 + __b10: + // [42] plot::x#5 = circle::xc#0 - circle::y#10 -- vwsz1=vwsc1_minus_vwsz2 + lda #xc + sbc.z y+1 + sta.z plot.x+1 + // [43] plot::y#5 = circle::yc#0 - circle::x1#10 -- vwsz1=vwsc1_minus_vwsz2 + lda #yc + sbc.z x1+1 + sta.z plot.y+1 + // [44] call plot + // [55] phi from circle::@10 to plot [phi:circle::@10->plot] + plot_from___b10: + // [55] phi plot::y#8 = plot::y#5 [phi:circle::@10->plot#0] -- register_copy + // [55] phi plot::x#8 = plot::x#5 [phi:circle::@10->plot#1] -- register_copy + jsr plot + jmp __b11 + // circle::@11 + __b11: + // [45] plot::x#6 = circle::xc#0 + circle::y#10 -- vwsz1=vwsc1_plus_vwsz2 + clc + lda.z y + adc #xc + sta.z plot.x+1 + // [46] plot::y#6 = circle::yc#0 + circle::x1#10 -- vwsz1=vwsc1_plus_vwsz2 + clc + lda.z x1 + adc #yc + sta.z plot.y+1 + // [47] call plot + // [55] phi from circle::@11 to plot [phi:circle::@11->plot] + plot_from___b11: + // [55] phi plot::y#8 = plot::y#6 [phi:circle::@11->plot#0] -- register_copy + // [55] phi plot::x#8 = plot::x#6 [phi:circle::@11->plot#1] -- register_copy + jsr plot + jmp __b12 + // circle::@12 + __b12: + // [48] plot::x#7 = circle::xc#0 - circle::y#10 -- vwsz1=vwsc1_minus_vwsz2 + lda #xc + sbc.z y+1 + sta.z plot.x+1 + // [49] plot::y#7 = circle::yc#0 + circle::x1#10 -- vwsz1=vwsc1_plus_vwsz2 + clc + lda.z x1 + adc #yc + sta.z plot.y+1 + // [50] call plot + // [55] phi from circle::@12 to plot [phi:circle::@12->plot] + plot_from___b12: + // [55] phi plot::y#8 = plot::y#7 [phi:circle::@12->plot#0] -- register_copy + // [55] phi plot::x#8 = plot::x#7 [phi:circle::@12->plot#1] -- register_copy + jsr plot + jmp __b13 + // circle::@13 + __b13: + // [51] circle::x1#1 = ++ circle::x1#10 -- vwsz1=_inc_vwsz1 + inc.z x1 + bne !+ + inc.z x1+1 + !: + // [17] phi from circle::@13 to circle::@1 [phi:circle::@13->circle::@1] + __b1_from___b13: + // [17] phi circle::p#3 = circle::p#10 [phi:circle::@13->circle::@1#0] -- register_copy + // [17] phi circle::y#13 = circle::y#10 [phi:circle::@13->circle::@1#1] -- register_copy + // [17] phi circle::x1#10 = circle::x1#1 [phi:circle::@13->circle::@1#2] -- register_copy + jmp __b1 + // circle::@3 + __b3: + // [52] circle::$9 = circle::x1#10 << 2 -- vwsz1=vwsz2_rol_2 + lda.z x1 + asl + sta.z __9 + lda.z x1+1 + rol + sta.z __9+1 + asl.z __9 + rol.z __9+1 + // [53] circle::$10 = circle::p#3 + circle::$9 -- vwsz1=vwsz1_plus_vwsz2 + clc + lda.z __10 + adc.z __9 + sta.z __10 + lda.z __10+1 + adc.z __9+1 + sta.z __10+1 + // [54] circle::p#1 = circle::$10 + 6 -- vwsz1=vwsz1_plus_vbsc1 + lda.z p + clc + adc #<6 + sta.z p + lda.z p+1 + adc #>6 + sta.z p+1 + jmp __b4_from___b3 +} + // plot +// void plot(__zp(8) int x, __zp(6) int y) +plot: { + .label __0 = 4 + .label __2 = 6 + .label __3 = 2 + .label x = 8 + .label y = 6 + .label location = 4 + .label __7 = 2 + .label __8 = 2 + // [56] plot::$0 = plot::x#8 & $fff8 -- vwsz1=vwsz2_band_vdsc1 + lda.z x + and #<$fff8 + sta.z __0 + lda.z x+1 + and #>$fff8 + sta.z __0+1 + // [57] plot::location#1 = BITMAP + plot::$0 -- pbuz1=pbuc1_plus_vwsz1 + lda #BITMAP + adc.z location+1 + sta.z location+1 + // [58] plot::$6 = (char)plot::y#8 -- vbuaa=_byte_vwsz1 + lda.z y + // [59] plot::$1 = plot::$6 & 7 -- vbuaa=vbuaa_band_vbuc1 + and #7 + // [60] plot::location#2 = plot::location#1 + plot::$1 -- pbuz1=pbuz1_plus_vbuaa + clc + adc.z location + sta.z location + bcc !+ + inc.z location+1 + !: + // [61] plot::$2 = plot::y#8 >> 3 -- vwsz1=vwsz1_ror_3 + lda.z __2+1 + cmp #$80 + ror.z __2+1 + ror.z __2 + lda.z __2+1 + cmp #$80 + ror.z __2+1 + ror.z __2 + lda.z __2+1 + cmp #$80 + ror.z __2+1 + ror.z __2 + // [62] plot::$7 = plot::$2 << 2 -- vwsz1=vwsz2_rol_2 + lda.z __2 + asl + sta.z __7 + lda.z __2+1 + rol + sta.z __7+1 + asl.z __7 + rol.z __7+1 + // [63] plot::$8 = plot::$7 + plot::$2 -- vwsz1=vwsz1_plus_vwsz2 + clc + lda.z __8 + adc.z __2 + sta.z __8 + lda.z __8+1 + adc.z __2+1 + sta.z __8+1 + // [64] plot::$3 = plot::$8 << 6 -- vwsz1=vwsz1_rol_6 + lda.z __3+1 + sta.z $ff + lda.z __3 + sta.z __3+1 + lda #0 + sta.z __3 + lsr.z $ff + ror.z __3+1 + ror.z __3 + lsr.z $ff + ror.z __3+1 + ror.z __3 + // [65] plot::location#3 = plot::location#2 + plot::$3 -- pbuz1=pbuz1_plus_vwsz2 + clc + lda.z location + adc.z __3 + sta.z location + lda.z location+1 + adc.z __3+1 + sta.z location+1 + // [66] plot::$4 = plot::x#8 & 7 -- vbsaa=vwsz1_band_vbsc1 + lda #7 + and.z x + // [67] plot::$5 = *plot::location#3 | bitmask[plot::$4] -- vbuaa=_deref_pbuz1_bor_pbuc1_derefidx_vbsaa + tay + lda bitmask,y + ldy #0 + ora (location),y + // [68] *plot::location#3 = plot::$5 -- _deref_pbuz1=vbuaa + ldy #0 + sta (location),y + jmp __breturn + // plot::@return + __breturn: + // [69] return + rts +} + // File Data +.segment Data + bitmask: .byte $80, $40, $20, $10, 8, 4, 2, 1 + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __b2 +Removing instruction jmp __b3 +Removing instruction jmp __b1 +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __b5 +Removing instruction jmp __b4 +Removing instruction jmp __b6 +Removing instruction jmp __b7 +Removing instruction jmp __b8 +Removing instruction jmp __b9 +Removing instruction jmp __b10 +Removing instruction jmp __b11 +Removing instruction jmp __b12 +Removing instruction jmp __b13 +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction lda #>0 +Removing instruction ldy #0 +Succesful ASM optimization Pass5UnnecesaryLoadElimination +Replacing label __b1_from___b1 with __b1 +Replacing label __b1_from___b2 with __b1 +Replacing label __b4_from___b3 with __b4 +Removing instruction __b2_from_main: +Removing instruction fill_from___b2: +Removing instruction __b1_from___b1: +Removing instruction __b1_from___b3: +Removing instruction __b1_from_fill: +Removing instruction __b1_from___b2: +Removing instruction __b4_from___b3: +Removing instruction __b4_from___b5: +Succesful ASM optimization Pass5RedundantLabelElimination +Removing instruction fill_from_main: +Removing instruction __b2: +Removing instruction __b3: +Removing instruction circle_from___b3: +Removing instruction __breturn: +Removing instruction __b1_from_circle: +Removing instruction __breturn: +Removing instruction __b5: +Removing instruction plot_from___b4: +Removing instruction __b6: +Removing instruction plot_from___b6: +Removing instruction __b7: +Removing instruction plot_from___b7: +Removing instruction __b8: +Removing instruction plot_from___b8: +Removing instruction __b9: +Removing instruction plot_from___b9: +Removing instruction __b10: +Removing instruction plot_from___b10: +Removing instruction __b11: +Removing instruction plot_from___b11: +Removing instruction __b12: +Removing instruction plot_from___b12: +Removing instruction __b13: +Removing instruction __b1_from___b13: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination +Fixing long branch [119] bmi __b3 to bpl + +FINAL SYMBOL TABLE +__constant char * const BITMAP = (char *) 8192 +__constant const char BLUE = 6 +__constant char * const BORDER_COLOR = (char *) 53280 +__constant char * const D011 = (char *) 53265 +__constant char * const SCREEN = (char *) 1024 +__constant const char VICII_BMM = $20 +__constant const char VICII_DEN = $10 +__constant char * const VICII_MEMORY = (char *) 53272 +__constant const char VICII_RSEL = 8 +__constant char bitmask[] = { $80, $40, $20, $10, 8, 4, 2, 1 } +void circle(int xc , int yc , int r) +int circle::$10 // zp[2]:10 202.0 +int circle::$5 // zp[2]:8 202.0 +int circle::$6 // zp[2]:8 202.0 +int circle::$7 // zp[2]:10 202.0 +int circle::$9 // zp[2]:6 202.0 +int circle::p +int circle::p#1 // p zp[2]:10 202.0 +int circle::p#10 // p zp[2]:10 11.653846153846153 +int circle::p#2 // p zp[2]:10 202.0 +int circle::p#3 // p zp[2]:10 57.714285714285715 +int circle::r +__constant int circle::r#0 = $32 // r +int circle::x1 +int circle::x1#1 // x1 zp[2]:14 202.0 +int circle::x1#10 // x1 zp[2]:14 36.47222222222223 +int circle::xc +__constant int circle::xc#0 = $64 // xc +int circle::y +int circle::y#1 // y zp[2]:12 60.599999999999994 +int circle::y#10 // y zp[2]:12 42.73076923076923 +int circle::y#13 // y zp[2]:12 67.33333333333333 +int circle::yc +__constant int circle::yc#0 = $64 // yc +void fill(char *start , int size , char val) +char *fill::addr +char *fill::addr#0 // addr zp[2]:12 11.0 +char *fill::addr#1 // addr zp[2]:12 202.0 +char *fill::addr#2 // addr zp[2]:12 138.33333333333331 +char *fill::end +char *fill::end#0 // end zp[2]:14 22.4 +int fill::size +int fill::size#2 // size zp[2]:14 11.0 +char *fill::start +char fill::val +char fill::val#4 // reg byte x 16.833333333333332 +void main() +void plot(int x , int y) +int plot::$0 // zp[2]:4 2002.0 +char plot::$1 // reg byte a 2002.0 +int plot::$2 // zp[2]:6 1501.5 +int plot::$3 // zp[2]:2 2002.0 +signed char plot::$4 // reg byte a 2002.0 +char plot::$5 // reg byte a 2002.0 +char plot::$6 // reg byte a 2002.0 +int plot::$7 // zp[2]:2 2002.0 +int plot::$8 // zp[2]:2 2002.0 +char *plot::location +char *plot::location#1 // location zp[2]:4 667.3333333333334 +char *plot::location#2 // location zp[2]:4 400.4 +char *plot::location#3 // location zp[2]:4 1001.0 +int plot::x +int plot::x#0 // x zp[2]:8 101.0 +int plot::x#1 // x zp[2]:8 101.0 +int plot::x#2 // x zp[2]:8 101.0 +int plot::x#3 // x zp[2]:8 101.0 +int plot::x#4 // x zp[2]:8 101.0 +int plot::x#5 // x zp[2]:8 101.0 +int plot::x#6 // x zp[2]:8 101.0 +int plot::x#7 // x zp[2]:8 101.0 +int plot::x#8 // x zp[2]:8 255.45454545454544 +int plot::y +int plot::y#0 // y zp[2]:6 202.0 +int plot::y#1 // y zp[2]:6 202.0 +int plot::y#2 // y zp[2]:6 202.0 +int plot::y#3 // y zp[2]:6 202.0 +int plot::y#4 // y zp[2]:6 202.0 +int plot::y#5 // y zp[2]:6 202.0 +int plot::y#6 // y zp[2]:6 202.0 +int plot::y#7 // y zp[2]:6 202.0 +int plot::y#8 // y zp[2]:6 301.5 + +reg byte x [ fill::val#4 ] +zp[2]:14 [ circle::x1#10 circle::x1#1 fill::size#2 fill::end#0 ] +zp[2]:12 [ circle::y#13 circle::y#10 circle::y#1 fill::addr#2 fill::addr#0 fill::addr#1 ] +zp[2]:10 [ circle::p#3 circle::p#10 circle::p#1 circle::p#2 circle::$7 circle::$10 ] +zp[2]:8 [ circle::$5 circle::$6 plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ] +zp[2]:6 [ circle::$9 plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 plot::$2 ] +zp[2]:4 [ plot::$0 plot::location#1 plot::location#2 plot::location#3 ] +reg byte a [ plot::$6 ] +reg byte a [ plot::$1 ] +zp[2]:2 [ plot::$7 plot::$8 plot::$3 ] +reg byte a [ plot::$4 ] +reg byte a [ plot::$5 ] + + +FINAL ASSEMBLER +Score: 6073 + + // File Comments +// Plots a circle on a bitmap using Bresenham's Circle algorithm +// Coded by Richard-William Loerakker +// Original Source https://bcaorganizer.blogspot.com/p/c-program-for_21.html?fbclid=IwAR0iL8pYcCqhCPa6LmtQ9qej-YonYVepY2cBegYRIWO0l8RPeOnTVniMAac + // Upstart + // Commodore 64 PRG executable file +.file [name="bitmap-circle-standalone.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + // Global Constants & labels + .const VICII_BMM = $20 + .const VICII_DEN = $10 + .const VICII_RSEL = 8 + .const BLUE = 6 + .label SCREEN = $400 + .label BITMAP = $2000 + .label D011 = $d011 + .label VICII_MEMORY = $d018 + .label BORDER_COLOR = $d020 +.segment Code + // main +main: { + // fill(BITMAP,40*25*8,0) + // [1] call fill + // [9] phi from main to fill [phi:main->fill] + // [9] phi fill::val#4 = 0 [phi:main->fill#0] -- vbuxx=vbuc1 + ldx #0 + // [9] phi fill::size#2 = (int)$28*$19*8 [phi:main->fill#1] -- vwsz1=vwsc1 + lda #<$28*$19*8 + sta.z fill.size + lda #>$28*$19*8 + sta.z fill.size+1 + // [9] phi fill::addr#0 = BITMAP [phi:main->fill#2] -- pbuz1=pbuc1 + lda #BITMAP + sta.z fill.addr+1 + jsr fill + // [2] phi from main to main::@2 [phi:main->main::@2] + // main::@2 + // fill(SCREEN,40*25,$16) + // [3] call fill + // [9] phi from main::@2 to fill [phi:main::@2->fill] + // [9] phi fill::val#4 = $16 [phi:main::@2->fill#0] -- vbuxx=vbuc1 + ldx #$16 + // [9] phi fill::size#2 = (int)$28*$19 [phi:main::@2->fill#1] -- vwsz1=vwsc1 + lda #<$28*$19 + sta.z fill.size + lda #>$28*$19 + sta.z fill.size+1 + // [9] phi fill::addr#0 = SCREEN [phi:main::@2->fill#2] -- pbuz1=pbuc1 + lda #SCREEN + sta.z fill.addr+1 + jsr fill + // main::@3 + // *BORDER_COLOR = BLUE + // [4] *BORDER_COLOR = BLUE -- _deref_pbuc1=vbuc2 + lda #BLUE + sta BORDER_COLOR + // *D011 = VICII_BMM|VICII_DEN|VICII_RSEL|3 + // [5] *D011 = VICII_BMM|VICII_DEN|VICII_RSEL|3 -- _deref_pbuc1=vbuc2 + lda #VICII_BMM|VICII_DEN|VICII_RSEL|3 + sta D011 + // *VICII_MEMORY = (byte)((((word)SCREEN&$3fff)/$40)|(((word)BITMAP&$3fff)/$400)) + // [6] *VICII_MEMORY = (char)(unsigned int)SCREEN&$3fff/$40|(unsigned int)BITMAP&$3fff/$400 -- _deref_pbuc1=vbuc2 + lda #(SCREEN&$3fff)/$40|(BITMAP&$3fff)/$400 + sta VICII_MEMORY + // circle(100,100,50) + // [7] call circle + // [16] phi from main::@3 to circle [phi:main::@3->circle] + jsr circle + // [8] phi from main::@1 main::@3 to main::@1 [phi:main::@1/main::@3->main::@1] + // main::@1 + __b1: + jmp __b1 +} + // fill +// Fill some memory with a value +// void fill(char *start, __zp($e) int size, __register(X) char val) +fill: { + .label end = $e + .label addr = $c + .label size = $e + // byte* end = start + size + // [10] fill::end#0 = fill::addr#0 + fill::size#2 -- pbuz1=pbuz2_plus_vwsz1 + clc + lda.z end + adc.z addr + sta.z end + lda.z end+1 + adc.z addr+1 + sta.z end+1 + // [11] phi from fill fill::@2 to fill::@1 [phi:fill/fill::@2->fill::@1] + // [11] phi fill::addr#2 = fill::addr#0 [phi:fill/fill::@2->fill::@1#0] -- register_copy + // fill::@1 + __b1: + // for(byte* addr = start; addr!=end; addr++) + // [12] if(fill::addr#2!=fill::end#0) goto fill::@2 -- pbuz1_neq_pbuz2_then_la1 + lda.z addr+1 + cmp.z end+1 + bne __b2 + lda.z addr + cmp.z end + bne __b2 + // fill::@return + // } + // [13] return + rts + // fill::@2 + __b2: + // *addr = val + // [14] *fill::addr#2 = fill::val#4 -- _deref_pbuz1=vbuxx + txa + ldy #0 + sta (addr),y + // for(byte* addr = start; addr!=end; addr++) + // [15] fill::addr#1 = ++ fill::addr#2 -- pbuz1=_inc_pbuz1 + inc.z addr + bne !+ + inc.z addr+1 + !: + jmp __b1 +} + // circle +// void circle(int xc, int yc, int r) +circle: { + .const xc = $64 + .const yc = $64 + .const r = $32 + .label __5 = 8 + .label __6 = 8 + .label __7 = $a + .label __9 = 6 + .label __10 = $a + .label p = $a + .label y = $c + .label x1 = $e + // [17] phi from circle to circle::@1 [phi:circle->circle::@1] + // [17] phi circle::p#3 = 3-circle::r#0<<1 [phi:circle->circle::@1#0] -- vwsz1=vwsc1 + lda #<3-(r<<1) + sta.z p + lda #>3-(r<<1) + sta.z p+1 + // [17] phi circle::y#13 = circle::r#0 [phi:circle->circle::@1#1] -- vwsz1=vwsc1 + lda #r + sta.z y+1 + // [17] phi circle::x1#10 = 0 [phi:circle->circle::@1#2] -- vwsz1=vwsc1 + lda #<0 + sta.z x1 + sta.z x1+1 + // circle::@1 + __b1: + // for(int x = 0; x <= y; x ++) + // [18] if(circle::x1#10<=circle::y#13) goto circle::@2 -- vwsz1_le_vwsz2_then_la1 + lda.z y + cmp.z x1 + lda.z y+1 + sbc.z x1+1 + bvc !+ + eor #$80 + !: + bpl __b2 + // circle::@return + // } + // [19] return + rts + // circle::@2 + __b2: + // if(p < 0) + // [20] if(circle::p#3<0) goto circle::@3 -- vwsz1_lt_0_then_la1 + lda.z p+1 + bpl !__b3+ + jmp __b3 + !__b3: + // circle::@5 + // y=y-1 + // [21] circle::y#1 = circle::y#13 - 1 -- vwsz1=vwsz1_minus_1 + sec + lda.z y + sbc #1 + sta.z y + bcs !+ + dec.z y+1 + !: + // x-y + // [22] circle::$5 = circle::x1#10 - circle::y#1 -- vwsz1=vwsz2_minus_vwsz3 + lda.z x1 + sec + sbc.z y + sta.z __5 + lda.z x1+1 + sbc.z y+1 + sta.z __5+1 + // (x-y) << 2 + // [23] circle::$6 = circle::$5 << 2 -- vwsz1=vwsz1_rol_2 + asl.z __6 + rol.z __6+1 + asl.z __6 + rol.z __6+1 + // p + ((x-y) << 2) + // [24] circle::$7 = circle::p#3 + circle::$6 -- vwsz1=vwsz1_plus_vwsz2 + clc + lda.z __7 + adc.z __6 + sta.z __7 + lda.z __7+1 + adc.z __6+1 + sta.z __7+1 + // p = p + ((x-y) << 2) + 10 + // [25] circle::p#2 = circle::$7 + $a -- vwsz1=vwsz1_plus_vbsc1 + lda.z p + clc + adc #<$a + sta.z p + lda.z p+1 + adc #>$a + sta.z p+1 + // [26] phi from circle::@3 circle::@5 to circle::@4 [phi:circle::@3/circle::@5->circle::@4] + // [26] phi circle::p#10 = circle::p#1 [phi:circle::@3/circle::@5->circle::@4#0] -- register_copy + // [26] phi circle::y#10 = circle::y#13 [phi:circle::@3/circle::@5->circle::@4#1] -- register_copy + // circle::@4 + __b4: + // plot(xc+x,yc-y) + // [27] plot::x#0 = circle::xc#0 + circle::x1#10 -- vwsz1=vwsc1_plus_vwsz2 + clc + lda.z x1 + adc #xc + sta.z plot.x+1 + // [28] plot::y#0 = circle::yc#0 - circle::y#10 -- vwsz1=vwsc1_minus_vwsz2 + lda #yc + sbc.z y+1 + sta.z plot.y+1 + // [29] call plot + // [55] phi from circle::@4 to plot [phi:circle::@4->plot] + // [55] phi plot::y#8 = plot::y#0 [phi:circle::@4->plot#0] -- register_copy + // [55] phi plot::x#8 = plot::x#0 [phi:circle::@4->plot#1] -- register_copy + jsr plot + // circle::@6 + // plot(xc-x,yc-y) + // [30] plot::x#1 = circle::xc#0 - circle::x1#10 -- vwsz1=vwsc1_minus_vwsz2 + lda #xc + sbc.z x1+1 + sta.z plot.x+1 + // [31] plot::y#1 = circle::yc#0 - circle::y#10 -- vwsz1=vwsc1_minus_vwsz2 + lda #yc + sbc.z y+1 + sta.z plot.y+1 + // [32] call plot + // [55] phi from circle::@6 to plot [phi:circle::@6->plot] + // [55] phi plot::y#8 = plot::y#1 [phi:circle::@6->plot#0] -- register_copy + // [55] phi plot::x#8 = plot::x#1 [phi:circle::@6->plot#1] -- register_copy + jsr plot + // circle::@7 + // plot(xc+x,yc+y) + // [33] plot::x#2 = circle::xc#0 + circle::x1#10 -- vwsz1=vwsc1_plus_vwsz2 + clc + lda.z x1 + adc #xc + sta.z plot.x+1 + // [34] plot::y#2 = circle::yc#0 + circle::y#10 -- vwsz1=vwsc1_plus_vwsz2 + clc + lda.z y + adc #yc + sta.z plot.y+1 + // [35] call plot + // [55] phi from circle::@7 to plot [phi:circle::@7->plot] + // [55] phi plot::y#8 = plot::y#2 [phi:circle::@7->plot#0] -- register_copy + // [55] phi plot::x#8 = plot::x#2 [phi:circle::@7->plot#1] -- register_copy + jsr plot + // circle::@8 + // plot(xc-x,yc+y) + // [36] plot::x#3 = circle::xc#0 - circle::x1#10 -- vwsz1=vwsc1_minus_vwsz2 + lda #xc + sbc.z x1+1 + sta.z plot.x+1 + // [37] plot::y#3 = circle::yc#0 + circle::y#10 -- vwsz1=vwsc1_plus_vwsz2 + clc + lda.z y + adc #yc + sta.z plot.y+1 + // [38] call plot + // [55] phi from circle::@8 to plot [phi:circle::@8->plot] + // [55] phi plot::y#8 = plot::y#3 [phi:circle::@8->plot#0] -- register_copy + // [55] phi plot::x#8 = plot::x#3 [phi:circle::@8->plot#1] -- register_copy + jsr plot + // circle::@9 + // plot(xc+y,yc-x) + // [39] plot::x#4 = circle::xc#0 + circle::y#10 -- vwsz1=vwsc1_plus_vwsz2 + clc + lda.z y + adc #xc + sta.z plot.x+1 + // [40] plot::y#4 = circle::yc#0 - circle::x1#10 -- vwsz1=vwsc1_minus_vwsz2 + lda #yc + sbc.z x1+1 + sta.z plot.y+1 + // [41] call plot + // [55] phi from circle::@9 to plot [phi:circle::@9->plot] + // [55] phi plot::y#8 = plot::y#4 [phi:circle::@9->plot#0] -- register_copy + // [55] phi plot::x#8 = plot::x#4 [phi:circle::@9->plot#1] -- register_copy + jsr plot + // circle::@10 + // plot(xc-y,yc-x) + // [42] plot::x#5 = circle::xc#0 - circle::y#10 -- vwsz1=vwsc1_minus_vwsz2 + lda #xc + sbc.z y+1 + sta.z plot.x+1 + // [43] plot::y#5 = circle::yc#0 - circle::x1#10 -- vwsz1=vwsc1_minus_vwsz2 + lda #yc + sbc.z x1+1 + sta.z plot.y+1 + // [44] call plot + // [55] phi from circle::@10 to plot [phi:circle::@10->plot] + // [55] phi plot::y#8 = plot::y#5 [phi:circle::@10->plot#0] -- register_copy + // [55] phi plot::x#8 = plot::x#5 [phi:circle::@10->plot#1] -- register_copy + jsr plot + // circle::@11 + // plot(xc+y,yc+x) + // [45] plot::x#6 = circle::xc#0 + circle::y#10 -- vwsz1=vwsc1_plus_vwsz2 + clc + lda.z y + adc #xc + sta.z plot.x+1 + // [46] plot::y#6 = circle::yc#0 + circle::x1#10 -- vwsz1=vwsc1_plus_vwsz2 + clc + lda.z x1 + adc #yc + sta.z plot.y+1 + // [47] call plot + // [55] phi from circle::@11 to plot [phi:circle::@11->plot] + // [55] phi plot::y#8 = plot::y#6 [phi:circle::@11->plot#0] -- register_copy + // [55] phi plot::x#8 = plot::x#6 [phi:circle::@11->plot#1] -- register_copy + jsr plot + // circle::@12 + // plot(xc-y,yc+x) + // [48] plot::x#7 = circle::xc#0 - circle::y#10 -- vwsz1=vwsc1_minus_vwsz2 + lda #xc + sbc.z y+1 + sta.z plot.x+1 + // [49] plot::y#7 = circle::yc#0 + circle::x1#10 -- vwsz1=vwsc1_plus_vwsz2 + clc + lda.z x1 + adc #yc + sta.z plot.y+1 + // [50] call plot + // [55] phi from circle::@12 to plot [phi:circle::@12->plot] + // [55] phi plot::y#8 = plot::y#7 [phi:circle::@12->plot#0] -- register_copy + // [55] phi plot::x#8 = plot::x#7 [phi:circle::@12->plot#1] -- register_copy + jsr plot + // circle::@13 + // for(int x = 0; x <= y; x ++) + // [51] circle::x1#1 = ++ circle::x1#10 -- vwsz1=_inc_vwsz1 + inc.z x1 + bne !+ + inc.z x1+1 + !: + // [17] phi from circle::@13 to circle::@1 [phi:circle::@13->circle::@1] + // [17] phi circle::p#3 = circle::p#10 [phi:circle::@13->circle::@1#0] -- register_copy + // [17] phi circle::y#13 = circle::y#10 [phi:circle::@13->circle::@1#1] -- register_copy + // [17] phi circle::x1#10 = circle::x1#1 [phi:circle::@13->circle::@1#2] -- register_copy + jmp __b1 + // circle::@3 + __b3: + // x << 2 + // [52] circle::$9 = circle::x1#10 << 2 -- vwsz1=vwsz2_rol_2 + lda.z x1 + asl + sta.z __9 + lda.z x1+1 + rol + sta.z __9+1 + asl.z __9 + rol.z __9+1 + // p + (x << 2) + // [53] circle::$10 = circle::p#3 + circle::$9 -- vwsz1=vwsz1_plus_vwsz2 + clc + lda.z __10 + adc.z __9 + sta.z __10 + lda.z __10+1 + adc.z __9+1 + sta.z __10+1 + // p = p + (x << 2) + 6 + // [54] circle::p#1 = circle::$10 + 6 -- vwsz1=vwsz1_plus_vbsc1 + lda.z p + clc + adc #<6 + sta.z p + lda.z p+1 + adc #>6 + sta.z p+1 + jmp __b4 +} + // plot +// void plot(__zp(8) int x, __zp(6) int y) +plot: { + .label __0 = 4 + .label __2 = 6 + .label __3 = 2 + .label x = 8 + .label y = 6 + .label location = 4 + .label __7 = 2 + .label __8 = 2 + // x & $fff8 + // [56] plot::$0 = plot::x#8 & $fff8 -- vwsz1=vwsz2_band_vdsc1 + lda.z x + and #<$fff8 + sta.z __0 + lda.z x+1 + and #>$fff8 + sta.z __0+1 + // location += x & $fff8 + // [57] plot::location#1 = BITMAP + plot::$0 -- pbuz1=pbuc1_plus_vwsz1 + lda #BITMAP + adc.z location+1 + sta.z location+1 + // (char)y & 7 + // [58] plot::$6 = (char)plot::y#8 -- vbuaa=_byte_vwsz1 + lda.z y + // [59] plot::$1 = plot::$6 & 7 -- vbuaa=vbuaa_band_vbuc1 + and #7 + // location += (char)y & 7 + // [60] plot::location#2 = plot::location#1 + plot::$1 -- pbuz1=pbuz1_plus_vbuaa + clc + adc.z location + sta.z location + bcc !+ + inc.z location+1 + !: + // y >> 3 + // [61] plot::$2 = plot::y#8 >> 3 -- vwsz1=vwsz1_ror_3 + lda.z __2+1 + cmp #$80 + ror.z __2+1 + ror.z __2 + lda.z __2+1 + cmp #$80 + ror.z __2+1 + ror.z __2 + lda.z __2+1 + cmp #$80 + ror.z __2+1 + ror.z __2 + // (y >> 3) * 320 + // [62] plot::$7 = plot::$2 << 2 -- vwsz1=vwsz2_rol_2 + lda.z __2 + asl + sta.z __7 + lda.z __2+1 + rol + sta.z __7+1 + asl.z __7 + rol.z __7+1 + // [63] plot::$8 = plot::$7 + plot::$2 -- vwsz1=vwsz1_plus_vwsz2 + clc + lda.z __8 + adc.z __2 + sta.z __8 + lda.z __8+1 + adc.z __2+1 + sta.z __8+1 + // [64] plot::$3 = plot::$8 << 6 -- vwsz1=vwsz1_rol_6 + lda.z __3+1 + sta.z $ff + lda.z __3 + sta.z __3+1 + lda #0 + sta.z __3 + lsr.z $ff + ror.z __3+1 + ror.z __3 + lsr.z $ff + ror.z __3+1 + ror.z __3 + // location += ((y >> 3) * 320) + // [65] plot::location#3 = plot::location#2 + plot::$3 -- pbuz1=pbuz1_plus_vwsz2 + clc + lda.z location + adc.z __3 + sta.z location + lda.z location+1 + adc.z __3+1 + sta.z location+1 + // x & 7 + // [66] plot::$4 = plot::x#8 & 7 -- vbsaa=vwsz1_band_vbsc1 + lda #7 + and.z x + // (*location) | bitmask[x & 7] + // [67] plot::$5 = *plot::location#3 | bitmask[plot::$4] -- vbuaa=_deref_pbuz1_bor_pbuc1_derefidx_vbsaa + tay + lda bitmask,y + ldy #0 + ora (location),y + // (*location) = (*location) | bitmask[x & 7] + // [68] *plot::location#3 = plot::$5 -- _deref_pbuz1=vbuaa + sta (location),y + // plot::@return + // } + // [69] return + rts +} + // File Data +.segment Data + bitmask: .byte $80, $40, $20, $10, 8, 4, 2, 1 + diff --git a/src/test/ref/bitmap-circle-standalone.sym b/src/test/ref/bitmap-circle-standalone.sym new file mode 100644 index 000000000..cb996a99d --- /dev/null +++ b/src/test/ref/bitmap-circle-standalone.sym @@ -0,0 +1,94 @@ +__constant char * const BITMAP = (char *) 8192 +__constant const char BLUE = 6 +__constant char * const BORDER_COLOR = (char *) 53280 +__constant char * const D011 = (char *) 53265 +__constant char * const SCREEN = (char *) 1024 +__constant const char VICII_BMM = $20 +__constant const char VICII_DEN = $10 +__constant char * const VICII_MEMORY = (char *) 53272 +__constant const char VICII_RSEL = 8 +__constant char bitmask[] = { $80, $40, $20, $10, 8, 4, 2, 1 } +void circle(int xc , int yc , int r) +int circle::$10 // zp[2]:10 202.0 +int circle::$5 // zp[2]:8 202.0 +int circle::$6 // zp[2]:8 202.0 +int circle::$7 // zp[2]:10 202.0 +int circle::$9 // zp[2]:6 202.0 +int circle::p +int circle::p#1 // p zp[2]:10 202.0 +int circle::p#10 // p zp[2]:10 11.653846153846153 +int circle::p#2 // p zp[2]:10 202.0 +int circle::p#3 // p zp[2]:10 57.714285714285715 +int circle::r +__constant int circle::r#0 = $32 // r +int circle::x1 +int circle::x1#1 // x1 zp[2]:14 202.0 +int circle::x1#10 // x1 zp[2]:14 36.47222222222223 +int circle::xc +__constant int circle::xc#0 = $64 // xc +int circle::y +int circle::y#1 // y zp[2]:12 60.599999999999994 +int circle::y#10 // y zp[2]:12 42.73076923076923 +int circle::y#13 // y zp[2]:12 67.33333333333333 +int circle::yc +__constant int circle::yc#0 = $64 // yc +void fill(char *start , int size , char val) +char *fill::addr +char *fill::addr#0 // addr zp[2]:12 11.0 +char *fill::addr#1 // addr zp[2]:12 202.0 +char *fill::addr#2 // addr zp[2]:12 138.33333333333331 +char *fill::end +char *fill::end#0 // end zp[2]:14 22.4 +int fill::size +int fill::size#2 // size zp[2]:14 11.0 +char *fill::start +char fill::val +char fill::val#4 // reg byte x 16.833333333333332 +void main() +void plot(int x , int y) +int plot::$0 // zp[2]:4 2002.0 +char plot::$1 // reg byte a 2002.0 +int plot::$2 // zp[2]:6 1501.5 +int plot::$3 // zp[2]:2 2002.0 +signed char plot::$4 // reg byte a 2002.0 +char plot::$5 // reg byte a 2002.0 +char plot::$6 // reg byte a 2002.0 +int plot::$7 // zp[2]:2 2002.0 +int plot::$8 // zp[2]:2 2002.0 +char *plot::location +char *plot::location#1 // location zp[2]:4 667.3333333333334 +char *plot::location#2 // location zp[2]:4 400.4 +char *plot::location#3 // location zp[2]:4 1001.0 +int plot::x +int plot::x#0 // x zp[2]:8 101.0 +int plot::x#1 // x zp[2]:8 101.0 +int plot::x#2 // x zp[2]:8 101.0 +int plot::x#3 // x zp[2]:8 101.0 +int plot::x#4 // x zp[2]:8 101.0 +int plot::x#5 // x zp[2]:8 101.0 +int plot::x#6 // x zp[2]:8 101.0 +int plot::x#7 // x zp[2]:8 101.0 +int plot::x#8 // x zp[2]:8 255.45454545454544 +int plot::y +int plot::y#0 // y zp[2]:6 202.0 +int plot::y#1 // y zp[2]:6 202.0 +int plot::y#2 // y zp[2]:6 202.0 +int plot::y#3 // y zp[2]:6 202.0 +int plot::y#4 // y zp[2]:6 202.0 +int plot::y#5 // y zp[2]:6 202.0 +int plot::y#6 // y zp[2]:6 202.0 +int plot::y#7 // y zp[2]:6 202.0 +int plot::y#8 // y zp[2]:6 301.5 + +reg byte x [ fill::val#4 ] +zp[2]:14 [ circle::x1#10 circle::x1#1 fill::size#2 fill::end#0 ] +zp[2]:12 [ circle::y#13 circle::y#10 circle::y#1 fill::addr#2 fill::addr#0 fill::addr#1 ] +zp[2]:10 [ circle::p#3 circle::p#10 circle::p#1 circle::p#2 circle::$7 circle::$10 ] +zp[2]:8 [ circle::$5 circle::$6 plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ] +zp[2]:6 [ circle::$9 plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 plot::$2 ] +zp[2]:4 [ plot::$0 plot::location#1 plot::location#2 plot::location#3 ] +reg byte a [ plot::$6 ] +reg byte a [ plot::$1 ] +zp[2]:2 [ plot::$7 plot::$8 plot::$3 ] +reg byte a [ plot::$4 ] +reg byte a [ plot::$5 ] diff --git a/src/test/ref/complex/borderline_pacman/pacman.asm b/src/test/ref/complex/borderline_pacman/pacman.asm index 081505bb5..f94c0e4b4 100644 --- a/src/test/ref/complex/borderline_pacman/pacman.asm +++ b/src/test/ref/complex/borderline_pacman/pacman.asm @@ -216,9 +216,9 @@ // Pointer to the music play routine .label musicPlay = INTRO_MUSIC+6 // Is the pacman eating sound enabled - .label pacman_ch1_enabled = $6e + .label pacman_ch1_enabled = $66 // Index into the eating sound - .label pacman_ch1_idx = $66 + .label pacman_ch1_idx = $5e // Pointer to the tile to render in the logic code .label logic_tile_ptr = $1a // The x-column of the tile to render @@ -226,16 +226,16 @@ // The y-fine of the tile to render .label logic_tile_yfine = $1d // The ID*4 of the left tile to render - .label logic_tile_left_idx = $4d + .label logic_tile_left_idx = $4c // The ID*4 of the right tile to render - .label logic_tile_right_idx = $4e + .label logic_tile_right_idx = $4d // Variables used by the logic-code renderer and restorer - .label left_render_index_xcol = $4f - .label left_canvas = $51 - .label left_ypos_inc_offset = $53 - .label rigt_render_index_xcol = $54 - .label rigt_canvas = $56 - .label rigt_ypos_inc_offset = $58 + .label left_render_index_xcol = $4e + .label left_canvas = $50 + .label left_ypos_inc_offset = $52 + .label rigt_render_index_xcol = $53 + .label rigt_canvas = $55 + .label rigt_ypos_inc_offset = $57 // The high-byte of the start-address of the canvas currently being rendered to .label canvas_base_hi = $20 // The offset used for bobs_restore - used to achieve double buffering @@ -249,7 +249,7 @@ .label bottom_sprites_color = $18 .label bottom_sprites_mc = $19 // The number of pills left - .label pill_count = $59 + .label pill_count = $58 // 1 When pacman wins .label pacman_wins = $1f // The number of pacman lives left @@ -259,19 +259,19 @@ // 0: intro, 1: game .label phase = $3d // The double buffer frame (0=BANK_1, 1=BANK_2) - .label frame = $6d + .label frame = $65 // The animation frame IDX (within the current direction) [0-3] - .label anim_frame_idx = $68 + .label anim_frame_idx = $60 // Pacman x fine position (0-99). .label pacman_xfine = $47 // Pacman y fine position (0-70). .label pacman_yfine = $48 // The pacman movement current direction - .label pacman_direction = $34 + .label pacman_direction = $35 // Pacman movement substep (0: on tile, 1: between tiles). .label pacman_substep = $2c // Mode determining ghost target mode. 0: chase, 1: scatter - .label ghosts_mode = $67 + .label ghosts_mode = $5f // Counts frames to change ghost mode (7 seconds scatter, 20 seconds chase ) .label ghosts_mode_count = $2b // Ghost 1 x fine position (0-99). @@ -279,11 +279,11 @@ // Ghost 1 y fine position (0-70). .label ghost1_yfine = $3c // Ghost 1 movement current direction - .label ghost1_direction = $35 + .label ghost1_direction = $36 // Ghost 1 movement substep (0: on tile, 1: between tiles). .label ghost1_substep = $2d // Ghost 1 movement should be reversed (0: normal, 1: reverse direction) - .label ghost1_reverse = $69 + .label ghost1_reverse = $61 // Ghost 1 respawn timer .label ghost1_respawn = $26 // Ghost 2 x fine position (0-99). @@ -291,11 +291,11 @@ // Ghost 2 y fine position (0-70). .label ghost2_yfine = $3f // Ghost 2 movement current direction - .label ghost2_direction = $36 + .label ghost2_direction = $37 // Ghost 2 movement substep (0: on tile, 1: between tiles). .label ghost2_substep = $2e // Ghost 2 movement should be reversed (0: normal, 1: reverse direction) - .label ghost2_reverse = $6a + .label ghost2_reverse = $62 // Ghost 2 respawn timer .label ghost2_respawn = $28 // Ghost 3 x fine position (0-99). @@ -307,7 +307,7 @@ // Ghost 3 movement substep (0: on tile, 1: between tiles). .label ghost3_substep = $2f // Ghost 3 movement should be reversed (0: normal, 1: reverse direction) - .label ghost3_reverse = $6b + .label ghost3_reverse = $63 // Ghost 3 respawn timer .label ghost3_respawn = $29 // Ghost 4 x fine position (0-99). @@ -319,11 +319,11 @@ // Ghost 4 movement substep (0: on tile, 1: between tiles). .label ghost4_substep = $30 // Ghost 4 movement should be reversed (0: normal, 1: reverse direction) - .label ghost4_reverse = $6c + .label ghost4_reverse = $64 // Ghost 4 respawn timer .label ghost4_respawn = $2a // Game logic sub-step [0-7]. Each frame a different sub-step is animated - .label game_logic_substep = $5c + .label game_logic_substep = $5a // 1 when the game is playable and characters should move around .label game_playable = $41 .segment Code @@ -646,21 +646,21 @@ main: { game_logic: { .label __67 = $45 .label __71 = $45 - .label __210 = $5d - .label ghost_frame_idx = $49 - .label pacman_xtile = $5b + .label __210 = $22 + .label ghost_frame_idx = $4a + .label pacman_xtile = $49 .label ytiles = $45 - .label ghost4_xtile = $5e - .label ghost4_ytile = $5f + .label ghost4_xtile = $33 + .label ghost4_ytile = $34 .label target_ytile = $27 - .label ghost3_xtile = $60 - .label ghost3_ytile = $61 + .label ghost3_xtile = $5b + .label ghost3_ytile = $34 .label target_ytile1 = $27 - .label ghost2_xtile = $62 - .label ghost2_ytile = $63 + .label ghost2_xtile = $5c + .label ghost2_ytile = $34 .label target_ytile2 = $27 - .label ghost1_xtile = $64 - .label ghost1_ytile = $65 + .label ghost1_xtile = $5d + .label ghost1_ytile = $34 .label target_ytile3 = $27 // if(game_playable==0) lda.z game_playable @@ -1347,8 +1347,6 @@ game_logic: { // choose_direction( open_directions, ghost4_xtile, ghost4_ytile, target_xtile, target_ytile ) sty.z choose_direction.open_directions ldy.z ghost4_xtile - lda.z ghost4_ytile - sta.z choose_direction.ghost_ytile jsr choose_direction // choose_direction( open_directions, ghost4_xtile, ghost4_ytile, target_xtile, target_ytile ) lda.z choose_direction.return @@ -1518,8 +1516,6 @@ game_logic: { // choose_direction( open_directions, ghost3_xtile, ghost3_ytile, target_xtile, target_ytile ) sty.z choose_direction.open_directions ldy.z ghost3_xtile - lda.z ghost3_ytile - sta.z choose_direction.ghost_ytile jsr choose_direction // choose_direction( open_directions, ghost3_xtile, ghost3_ytile, target_xtile, target_ytile ) lda.z choose_direction.return @@ -1690,8 +1686,6 @@ game_logic: { // choose_direction( open_directions, ghost2_xtile, ghost2_ytile, target_xtile, target_ytile ) sty.z choose_direction.open_directions ldy.z ghost2_xtile - lda.z ghost2_ytile - sta.z choose_direction.ghost_ytile jsr choose_direction // choose_direction( open_directions, ghost2_xtile, ghost2_ytile, target_xtile, target_ytile ) lda.z choose_direction.return @@ -1863,8 +1857,6 @@ game_logic: { // choose_direction( open_directions, ghost1_xtile, ghost1_ytile, target_xtile, target_ytile ) sty.z choose_direction.open_directions ldy.z ghost1_xtile - lda.z ghost1_ytile - sta.z choose_direction.ghost_ytile jsr choose_direction // choose_direction( open_directions, ghost1_xtile, ghost1_ytile, target_xtile, target_ytile ) lda.z choose_direction.return @@ -2853,13 +2845,13 @@ level_tile_directions: { } // Choose the open direction that brings the ghost closest to the target // Uses Manhattan distance calculation -// __zp($33) char choose_direction(__zp($4a) char open_directions, __register(Y) char ghost_xtile, __zp($37) char ghost_ytile, __register(X) char target_xtile, __zp($27) char target_ytile) +// __zp($33) char choose_direction(__zp($49) char open_directions, __register(Y) char ghost_xtile, __zp($34) char ghost_ytile, __register(X) char target_xtile, __zp($27) char target_ytile) choose_direction: { - .label open_directions = $4a - .label ghost_ytile = $37 + .label open_directions = $49 + .label ghost_ytile = $34 .label target_ytile = $27 - .label xdiff = $4c - .label ydiff = $4b + .label xdiff = $4b + .label ydiff = $34 .label dist_left = $22 .label return = $33 .label direction = $33 @@ -2871,7 +2863,7 @@ choose_direction: { sbc.z $ff sta.z xdiff // char ydiff = ghost_ytile-target_ytile - lda.z ghost_ytile + lda.z ydiff sec sbc.z target_ytile sta.z ydiff @@ -2976,12 +2968,12 @@ choose_direction: { jmp __b2 } // Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. -// void * memset(__zp($6f) void *str, char c, __zp(5) unsigned int num) +// void * memset(__zp($b) void *str, char c, __zp(5) unsigned int num) memset: { .label end = 5 .label dst = $b .label num = 5 - .label str = $6f + .label str = $b // if(num>0) lda.z num bne !+ @@ -2996,10 +2988,6 @@ memset: { lda.z end+1 adc.z str+1 sta.z end+1 - lda.z str - sta.z dst - lda.z str+1 - sta.z dst+1 __b2: // for(char* dst = str; dst!=end; dst++) lda.z dst+1 diff --git a/src/test/ref/complex/borderline_pacman/pacman.log b/src/test/ref/complex/borderline_pacman/pacman.log index cbe0efb5a..4a230314f 100644 --- a/src/test/ref/complex/borderline_pacman/pacman.log +++ b/src/test/ref/complex/borderline_pacman/pacman.log @@ -7434,6 +7434,7 @@ Simple Condition choose_direction::$25 [1226] if(choose_direction::dist_right#0> Successful SSA optimization Pass2ConditionalJumpSimplification Rewriting ! if()-condition to reversed if() [49] merge_code::$10 = ! merge_code::$9 Rewriting && if()-condition to two if()s [48] merge_code::$9 = merge_code::$4 && merge_code::$8 +Rewriting || if()-condition to two if()s [47] merge_code::$8 = merge_code::$6 || merge_code::$7 Rewriting ! if()-condition to reversed if() [474] gameplay_run::$15 = ! gameplay_run::$14 Rewriting || if()-condition to two if()s [473] gameplay_run::$14 = pacman_wins || gameplay_run::$13 Rewriting ! if()-condition to reversed if() [540] level_tile_get::$3 = ! level_tile_get::$2 @@ -7452,7 +7453,6 @@ Rewriting && if()-condition to two if()s [971] game_logic::$132 = game_logic::$1 Rewriting && if()-condition to two if()s [1035] game_logic::$153 = game_logic::$151 && game_logic::$152 Rewriting && if()-condition to two if()s [1099] game_logic::$174 = game_logic::$172 && game_logic::$173 Rewriting && if()-condition to two if()s [1158] game_logic::$195 = game_logic::$193 && game_logic::$194 -Rewriting || if()-condition to two if()s [47] merge_code::$8 = merge_code::$6 || merge_code::$7 Successful SSA optimization Pass2ConditionalAndOrRewriting Warning! Adding boolean cast to non-boolean condition pacman_wins Negating conditional jump and destination [41] if(merge_code::cycle_budget#13<=0) goto merge_code::@10 @@ -7644,11 +7644,11 @@ Successful SSA optimization PassNSimplifyExpressionWithZero Removing unused block main::@return Successful SSA optimization Pass2EliminateUnusedBlocks Eliminating unused variable merge_code::dest_code#5 and assignment [59] merge_code::dest_code#5 = ++ merge_code::dest_code#12 -Eliminating unused variable memset::return#2 and assignment [216] memset::return#2 = memset::str#6 -Eliminating unused variable memset::return#3 and assignment [223] memset::return#3 = memset::str#6 -Eliminating unused variable memset::return#4 and assignment [225] memset::return#4 = memset::str#6 -Eliminating unused variable memset::return#5 and assignment [231] memset::return#5 = memset::str#6 -Eliminating unused variable memset::return#6 and assignment [240] memset::return#6 = memset::str#6 +Eliminating unused variable memset::return#2 and assignment [218] memset::return#2 = memset::str#6 +Eliminating unused variable memset::return#3 and assignment [225] memset::return#3 = memset::str#6 +Eliminating unused variable memset::return#4 and assignment [227] memset::return#4 = memset::str#6 +Eliminating unused variable memset::return#5 and assignment [233] memset::return#5 = memset::str#6 +Eliminating unused variable memset::return#6 and assignment [242] memset::return#6 = memset::str#6 Eliminating unused constant memcpy::return#2 Eliminating unused constant game_logic::target_xtile#0 Eliminating unused constant game_logic::target_ytile#0 @@ -7744,81 +7744,81 @@ Alias candidate removed (volatile)ghost3_direction = game_logic::$140 Alias candidate removed (volatile)ghost2_direction = game_logic::$161 Alias candidate removed (volatile)ghost1_direction = game_logic::$182 Simple Condition merge_code::$4 [35] if(merge_code::logic_cycles#0!=merge_code::LOGIC_EXIT) goto merge_code::@20 -Simple Condition gameplay_run::$16 [362] if(0!=pacman_wins) goto gameplay_run::@return -Simple Condition level_tile_get::$0 [409] if(level_tile_get::xtile#4>$31) goto level_tile_get::@2 -Simple Condition level_tile_directions::$0 [418] if(level_tile_directions::xtile#5>$31) goto level_tile_directions::@2 -Simple Condition game_logic::$10 [543] if(game_logic_substep==3) goto game_logic::@14 -Simple Condition game_logic::$76 [644] if(ABS[game_logic::$75]<2) goto game_logic::@170 -Simple Condition game_logic::$81 [651] if(ABS[game_logic::$80]<2) goto game_logic::@171 -Simple Condition game_logic::$86 [657] if(ABS[game_logic::$85]<2) goto game_logic::@172 -Simple Condition game_logic::$91 [663] if(ABS[game_logic::$90]<2) goto game_logic::@173 -Simple Condition game_logic::$109 [705] if(ghost4_substep==0) goto game_logic::@174 -Simple Condition game_logic::$130 [754] if(ghost3_substep==0) goto game_logic::@175 -Simple Condition game_logic::$151 [803] if(ghost2_substep==0) goto game_logic::@176 -Simple Condition game_logic::$172 [852] if(ghost1_substep==0) goto game_logic::@177 -Simple Condition game_logic::$193 [898] if(pacman_substep==0) goto game_logic::@178 -Simple Condition merge_code::$6 [1038] if(merge_code::logic_cycles#0$24) goto level_tile_get::@2 -Simple Condition level_tile_directions::$1 [1041] if(level_tile_directions::ytile#5>$24) goto level_tile_directions::@2 -Simple Condition game_logic::$11 [1042] if(game_logic_substep==7) goto game_logic::@14 -Simple Condition game_logic::$78 [1043] if(ABS[game_logic::$77]<2) goto game_logic::@51 -Simple Condition game_logic::$83 [1044] if(ABS[game_logic::$82]<2) goto game_logic::@52 -Simple Condition game_logic::$88 [1045] if(ABS[game_logic::$87]<2) goto game_logic::@53 -Simple Condition game_logic::$93 [1046] if(ABS[game_logic::$92]<2) goto game_logic::@67 -Condition not simple game_logic::$110 [1047] if(game_logic::$110) goto game_logic::@77 +Simple Condition merge_code::$6 [66] if(merge_code::logic_cycles#0$31) goto level_tile_get::@2 +Simple Condition level_tile_get::$1 [418] if(level_tile_get::ytile#4>$24) goto level_tile_get::@2 +Simple Condition level_tile_directions::$0 [422] if(level_tile_directions::xtile#5>$31) goto level_tile_directions::@2 +Simple Condition level_tile_directions::$1 [428] if(level_tile_directions::ytile#5>$24) goto level_tile_directions::@2 +Simple Condition game_logic::$10 [548] if(game_logic_substep==3) goto game_logic::@14 +Simple Condition game_logic::$76 [649] if(ABS[game_logic::$75]<2) goto game_logic::@170 +Simple Condition game_logic::$81 [656] if(ABS[game_logic::$80]<2) goto game_logic::@171 +Simple Condition game_logic::$86 [662] if(ABS[game_logic::$85]<2) goto game_logic::@172 +Simple Condition game_logic::$91 [668] if(ABS[game_logic::$90]<2) goto game_logic::@173 +Simple Condition game_logic::$109 [710] if(ghost4_substep==0) goto game_logic::@174 +Simple Condition game_logic::$130 [759] if(ghost3_substep==0) goto game_logic::@175 +Simple Condition game_logic::$151 [808] if(ghost2_substep==0) goto game_logic::@176 +Simple Condition game_logic::$172 [857] if(ghost1_substep==0) goto game_logic::@177 +Simple Condition game_logic::$193 [903] if(pacman_substep==0) goto game_logic::@178 +Simple Condition game_logic::$11 [927] if(game_logic_substep==7) goto game_logic::@14 +Simple Condition game_logic::$78 [928] if(ABS[game_logic::$77]<2) goto game_logic::@51 +Simple Condition game_logic::$83 [929] if(ABS[game_logic::$82]<2) goto game_logic::@52 +Simple Condition game_logic::$88 [930] if(ABS[game_logic::$87]<2) goto game_logic::@53 +Simple Condition game_logic::$93 [931] if(ABS[game_logic::$92]<2) goto game_logic::@67 +Condition not simple game_logic::$110 [932] if(game_logic::$110) goto game_logic::@77 Introduced intermediate condition variable game_logic::$220 = ghost4_direction -Condition not simple game_logic::$110 [1047] if(game_logic::$110) goto game_logic::@77 +Condition not simple game_logic::$110 [932] if(game_logic::$110) goto game_logic::@77 Introduced intermediate condition variable game_logic::$221 = ghost4_direction -Condition not simple game_logic::$110 [1047] if(game_logic::$110) goto game_logic::@77 +Condition not simple game_logic::$110 [932] if(game_logic::$110) goto game_logic::@77 Introduced intermediate condition variable game_logic::$222 = ghost4_direction -Simple Condition game_logic::$110 [1047] if(game_logic::$220!=STOP) goto game_logic::@77 -Condition not simple game_logic::$131 [1048] if(game_logic::$131) goto game_logic::@95 +Simple Condition game_logic::$110 [932] if(game_logic::$220!=STOP) goto game_logic::@77 +Condition not simple game_logic::$131 [933] if(game_logic::$131) goto game_logic::@95 Introduced intermediate condition variable game_logic::$223 = ghost3_direction -Condition not simple game_logic::$131 [1048] if(game_logic::$131) goto game_logic::@95 +Condition not simple game_logic::$131 [933] if(game_logic::$131) goto game_logic::@95 Introduced intermediate condition variable game_logic::$224 = ghost3_direction -Condition not simple game_logic::$131 [1048] if(game_logic::$131) goto game_logic::@95 +Condition not simple game_logic::$131 [933] if(game_logic::$131) goto game_logic::@95 Introduced intermediate condition variable game_logic::$225 = ghost3_direction -Simple Condition game_logic::$131 [1048] if(game_logic::$223!=STOP) goto game_logic::@95 -Condition not simple game_logic::$152 [1049] if(game_logic::$152) goto game_logic::@113 +Simple Condition game_logic::$131 [933] if(game_logic::$223!=STOP) goto game_logic::@95 +Condition not simple game_logic::$152 [934] if(game_logic::$152) goto game_logic::@113 Introduced intermediate condition variable game_logic::$226 = ghost2_direction -Condition not simple game_logic::$152 [1049] if(game_logic::$152) goto game_logic::@113 +Condition not simple game_logic::$152 [934] if(game_logic::$152) goto game_logic::@113 Introduced intermediate condition variable game_logic::$227 = ghost2_direction -Condition not simple game_logic::$152 [1049] if(game_logic::$152) goto game_logic::@113 +Condition not simple game_logic::$152 [934] if(game_logic::$152) goto game_logic::@113 Introduced intermediate condition variable game_logic::$228 = ghost2_direction -Simple Condition game_logic::$152 [1049] if(game_logic::$226!=STOP) goto game_logic::@113 -Condition not simple game_logic::$173 [1050] if(game_logic::$173) goto game_logic::@131 +Simple Condition game_logic::$152 [934] if(game_logic::$226!=STOP) goto game_logic::@113 +Condition not simple game_logic::$173 [935] if(game_logic::$173) goto game_logic::@131 Introduced intermediate condition variable game_logic::$229 = ghost1_direction -Condition not simple game_logic::$173 [1050] if(game_logic::$173) goto game_logic::@131 +Condition not simple game_logic::$173 [935] if(game_logic::$173) goto game_logic::@131 Introduced intermediate condition variable game_logic::$230 = ghost1_direction -Condition not simple game_logic::$173 [1050] if(game_logic::$173) goto game_logic::@131 +Condition not simple game_logic::$173 [935] if(game_logic::$173) goto game_logic::@131 Introduced intermediate condition variable game_logic::$231 = ghost1_direction -Simple Condition game_logic::$173 [1050] if(game_logic::$229!=STOP) goto game_logic::@131 -Condition not simple game_logic::$194 [1051] if(game_logic::$194) goto game_logic::@148 +Simple Condition game_logic::$173 [935] if(game_logic::$229!=STOP) goto game_logic::@131 +Condition not simple game_logic::$194 [936] if(game_logic::$194) goto game_logic::@148 Introduced intermediate condition variable game_logic::$232 = pacman_direction -Condition not simple game_logic::$194 [1051] if(game_logic::$194) goto game_logic::@148 +Condition not simple game_logic::$194 [936] if(game_logic::$194) goto game_logic::@148 Introduced intermediate condition variable game_logic::$233 = pacman_direction -Simple Condition game_logic::$194 [1051] if(game_logic::$232!=STOP) goto game_logic::@148 -Simple Condition merge_code::$7 [1052] if(merge_code::logic_cycles#0==merge_code::cycle_budget#13) goto merge_code::@9 +Simple Condition game_logic::$194 [936] if(game_logic::$232!=STOP) goto game_logic::@148 Successful SSA optimization Pass2ConditionalJumpSimplification -Negating conditional jump and destination [644] if(ABS[game_logic::$75]>=2) goto game_logic::@64 -Negating conditional jump and destination [651] if(ABS[game_logic::$80]>=2) goto game_logic::@65 -Negating conditional jump and destination [657] if(ABS[game_logic::$85]>=2) goto game_logic::@66 -Negating conditional jump and destination [663] if(ABS[game_logic::$90]>=2) goto game_logic::@return -Negating conditional jump and destination [705] if(ghost4_substep!=0) goto game_logic::@83 -Negating conditional jump and destination [754] if(ghost3_substep!=0) goto game_logic::@101 -Negating conditional jump and destination [803] if(ghost2_substep!=0) goto game_logic::@119 -Negating conditional jump and destination [852] if(ghost1_substep!=0) goto game_logic::@137 -Negating conditional jump and destination [898] if(pacman_substep!=0) goto game_logic::@151 +Negating conditional jump and destination [649] if(ABS[game_logic::$75]>=2) goto game_logic::@64 +Negating conditional jump and destination [656] if(ABS[game_logic::$80]>=2) goto game_logic::@65 +Negating conditional jump and destination [662] if(ABS[game_logic::$85]>=2) goto game_logic::@66 +Negating conditional jump and destination [668] if(ABS[game_logic::$90]>=2) goto game_logic::@return +Negating conditional jump and destination [710] if(ghost4_substep!=0) goto game_logic::@83 +Negating conditional jump and destination [759] if(ghost3_substep!=0) goto game_logic::@101 +Negating conditional jump and destination [808] if(ghost2_substep!=0) goto game_logic::@119 +Negating conditional jump and destination [857] if(ghost1_substep!=0) goto game_logic::@137 +Negating conditional jump and destination [903] if(pacman_substep!=0) goto game_logic::@151 Successful SSA optimization Pass2ConditionalJumpSequenceImprovement Constant right-side identified [0] memcpy::src_end#0 = memcpy::$2 + memcpy::num#0 -Constant right-side identified [247] splash_run::toDd001_$0 = byte1 (unsigned int)splash_run::toDd001_gfx#0 -Constant right-side identified [253] splash_run::toD0181_$0 = splash_run::toD0181_$7 & $3fff -Constant right-side identified [256] splash_run::toD0181_$3 = byte1 (unsigned int)splash_run::toD0181_gfx#0 -Constant right-side identified [488] irq_screen_top::toD0181_$0 = irq_screen_top::toD0181_$7 & $3fff -Constant right-side identified [491] irq_screen_top::toD0181_$3 = byte1 (unsigned int)irq_screen_top::toD0181_gfx#0 -Constant right-side identified [503] irq_screen_top::toDd001_$0 = byte1 (unsigned int)irq_screen_top::toDd001_gfx#0 -Constant right-side identified [509] irq_screen_top::toDd002_$0 = byte1 (unsigned int)irq_screen_top::toDd002_gfx#0 +Constant right-side identified [249] splash_run::toDd001_$0 = byte1 (unsigned int)splash_run::toDd001_gfx#0 +Constant right-side identified [255] splash_run::toD0181_$0 = splash_run::toD0181_$7 & $3fff +Constant right-side identified [258] splash_run::toD0181_$3 = byte1 (unsigned int)splash_run::toD0181_gfx#0 +Constant right-side identified [493] irq_screen_top::toD0181_$0 = irq_screen_top::toD0181_$7 & $3fff +Constant right-side identified [496] irq_screen_top::toD0181_$3 = byte1 (unsigned int)irq_screen_top::toD0181_gfx#0 +Constant right-side identified [508] irq_screen_top::toDd001_$0 = byte1 (unsigned int)irq_screen_top::toDd001_gfx#0 +Constant right-side identified [514] irq_screen_top::toDd002_$0 = byte1 (unsigned int)irq_screen_top::toDd002_gfx#0 Successful SSA optimization Pass2ConstantRValueConsolidation Constant memcpy::src_end#0 = memcpy::$2+memcpy::num#0 Constant splash_run::toDd001_$0 = byte1 (unsigned int)splash_run::toDd001_gfx#0 @@ -7830,22 +7830,22 @@ Constant irq_screen_top::toD0181_$3 = byte1 (unsigned int)irq_screen_top::toD018 Constant irq_screen_top::toDd001_$0 = byte1 (unsigned int)irq_screen_top::toDd001_gfx#0 Constant irq_screen_top::toDd002_$0 = byte1 (unsigned int)irq_screen_top::toDd002_gfx#0 Successful SSA optimization Pass2ConstantIdentification -Rewriting conditional comparison [409] if(level_tile_get::xtile#4>$31) goto level_tile_get::@2 -Rewriting conditional comparison [418] if(level_tile_directions::xtile#5>$31) goto level_tile_directions::@2 -Rewriting conditional comparison [1040] if(level_tile_get::ytile#4>$24) goto level_tile_get::@2 -Rewriting conditional comparison [1041] if(level_tile_directions::ytile#5>$24) goto level_tile_directions::@2 +Rewriting conditional comparison [412] if(level_tile_get::xtile#4>$31) goto level_tile_get::@2 +Rewriting conditional comparison [418] if(level_tile_get::ytile#4>$24) goto level_tile_get::@2 +Rewriting conditional comparison [422] if(level_tile_directions::xtile#5>$31) goto level_tile_directions::@2 +Rewriting conditional comparison [428] if(level_tile_directions::ytile#5>$24) goto level_tile_directions::@2 Simplifying constant evaluating to zero splash_run::toD0181_$7&$3fff in Simplifying constant evaluating to zero irq_screen_top::toD0181_$7&$3fff in Successful SSA optimization PassNSimplifyConstantZero -Eliminating unused variable game_logic::$221 and assignment [676] game_logic::$221 = ghost4_direction -Eliminating unused variable game_logic::$222 and assignment [677] game_logic::$222 = ghost4_direction -Eliminating unused variable game_logic::$224 and assignment [726] game_logic::$224 = ghost3_direction -Eliminating unused variable game_logic::$225 and assignment [727] game_logic::$225 = ghost3_direction -Eliminating unused variable game_logic::$227 and assignment [776] game_logic::$227 = ghost2_direction -Eliminating unused variable game_logic::$228 and assignment [777] game_logic::$228 = ghost2_direction -Eliminating unused variable game_logic::$230 and assignment [826] game_logic::$230 = ghost1_direction -Eliminating unused variable game_logic::$231 and assignment [827] game_logic::$231 = ghost1_direction -Eliminating unused variable game_logic::$233 and assignment [873] game_logic::$233 = pacman_direction +Eliminating unused variable game_logic::$221 and assignment [681] game_logic::$221 = ghost4_direction +Eliminating unused variable game_logic::$222 and assignment [682] game_logic::$222 = ghost4_direction +Eliminating unused variable game_logic::$224 and assignment [731] game_logic::$224 = ghost3_direction +Eliminating unused variable game_logic::$225 and assignment [732] game_logic::$225 = ghost3_direction +Eliminating unused variable game_logic::$227 and assignment [781] game_logic::$227 = ghost2_direction +Eliminating unused variable game_logic::$228 and assignment [782] game_logic::$228 = ghost2_direction +Eliminating unused variable game_logic::$230 and assignment [831] game_logic::$230 = ghost1_direction +Eliminating unused variable game_logic::$231 and assignment [832] game_logic::$231 = ghost1_direction +Eliminating unused variable game_logic::$233 and assignment [878] game_logic::$233 = pacman_direction Eliminating unused constant splash_run::toD0181_$7 Eliminating unused constant irq_screen_top::toD0181_$7 Successful SSA optimization PassNEliminateUnusedVars @@ -7855,20 +7855,20 @@ Successful SSA optimization PassNEliminateUnusedVars Adding number conversion cast (unumber) $16 in Adding number conversion cast (unumber) $31+1 in if(level_tile_get::xtile#4>=$31+1) goto level_tile_get::@2 Adding number conversion cast (unumber) 1 in if(level_tile_get::xtile#4>=(unumber)$31+1) goto level_tile_get::@2 -Adding number conversion cast (unumber) $31+1 in if(level_tile_directions::xtile#5>=$31+1) goto level_tile_directions::@2 -Adding number conversion cast (unumber) 1 in if(level_tile_directions::xtile#5>=(unumber)$31+1) goto level_tile_directions::@2 Adding number conversion cast (unumber) $24+1 in if(level_tile_get::ytile#4>=$24+1) goto level_tile_get::@2 Adding number conversion cast (unumber) 1 in if(level_tile_get::ytile#4>=(unumber)$24+1) goto level_tile_get::@2 +Adding number conversion cast (unumber) $31+1 in if(level_tile_directions::xtile#5>=$31+1) goto level_tile_directions::@2 +Adding number conversion cast (unumber) 1 in if(level_tile_directions::xtile#5>=(unumber)$31+1) goto level_tile_directions::@2 Adding number conversion cast (unumber) $24+1 in if(level_tile_directions::ytile#5>=$24+1) goto level_tile_directions::@2 Adding number conversion cast (unumber) 1 in if(level_tile_directions::ytile#5>=(unumber)$24+1) goto level_tile_directions::@2 Successful SSA optimization PassNAddNumberTypeConversions Simplifying constant integer cast $16 Simplifying constant integer cast $31+(unumber)1 Simplifying constant integer cast 1 -Simplifying constant integer cast $31+(unumber)1 -Simplifying constant integer cast 1 Simplifying constant integer cast $24+(unumber)1 Simplifying constant integer cast 1 +Simplifying constant integer cast $31+(unumber)1 +Simplifying constant integer cast 1 Simplifying constant integer cast $24+(unumber)1 Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification @@ -7889,13 +7889,13 @@ Alias candidate removed (volatile)ghost4_direction = game_logic::$119 Alias candidate removed (volatile)ghost3_direction = game_logic::$140 Alias candidate removed (volatile)ghost2_direction = game_logic::$161 Alias candidate removed (volatile)ghost1_direction = game_logic::$182 -Constant right-side identified [243] splash_run::toDd001_$1 = splash_run::toDd001_$0 / $40 -Constant right-side identified [248] splash_run::toD0181_$1 = splash_run::toD0181_$0 * 4 -Constant right-side identified [250] splash_run::toD0181_$4 = splash_run::toD0181_$3 / 4 -Constant right-side identified [474] irq_screen_top::toD0181_$1 = irq_screen_top::toD0181_$0 * 4 -Constant right-side identified [476] irq_screen_top::toD0181_$4 = irq_screen_top::toD0181_$3 / 4 -Constant right-side identified [487] irq_screen_top::toDd001_$1 = irq_screen_top::toDd001_$0 / $40 -Constant right-side identified [492] irq_screen_top::toDd002_$1 = irq_screen_top::toDd002_$0 / $40 +Constant right-side identified [245] splash_run::toDd001_$1 = splash_run::toDd001_$0 / $40 +Constant right-side identified [250] splash_run::toD0181_$1 = splash_run::toD0181_$0 * 4 +Constant right-side identified [252] splash_run::toD0181_$4 = splash_run::toD0181_$3 / 4 +Constant right-side identified [479] irq_screen_top::toD0181_$1 = irq_screen_top::toD0181_$0 * 4 +Constant right-side identified [481] irq_screen_top::toD0181_$4 = irq_screen_top::toD0181_$3 / 4 +Constant right-side identified [492] irq_screen_top::toDd001_$1 = irq_screen_top::toDd001_$0 / $40 +Constant right-side identified [497] irq_screen_top::toDd002_$1 = irq_screen_top::toDd002_$0 / $40 Successful SSA optimization Pass2ConstantRValueConsolidation Constant splash_run::toDd001_$1 = splash_run::toDd001_$0/$40 Constant splash_run::toD0181_$1 = splash_run::toD0181_$0*4 @@ -7922,13 +7922,13 @@ Alias candidate removed (volatile)ghost4_direction = game_logic::$119 Alias candidate removed (volatile)ghost3_direction = game_logic::$140 Alias candidate removed (volatile)ghost2_direction = game_logic::$161 Alias candidate removed (volatile)ghost1_direction = game_logic::$182 -Constant right-side identified [243] splash_run::toDd001_return#0 = 3 ^ splash_run::toDd001_$1 -Constant right-side identified [247] splash_run::toD0181_$2 = byte1 splash_run::toD0181_$1 -Constant right-side identified [248] splash_run::toD0181_$5 = splash_run::toD0181_$4 & $f -Constant right-side identified [471] irq_screen_top::toD0181_$2 = byte1 irq_screen_top::toD0181_$1 -Constant right-side identified [472] irq_screen_top::toD0181_$5 = irq_screen_top::toD0181_$4 & $f -Constant right-side identified [482] irq_screen_top::toDd001_return#0 = 3 ^ irq_screen_top::toDd001_$1 -Constant right-side identified [486] irq_screen_top::toDd002_return#0 = 3 ^ irq_screen_top::toDd002_$1 +Constant right-side identified [245] splash_run::toDd001_return#0 = 3 ^ splash_run::toDd001_$1 +Constant right-side identified [249] splash_run::toD0181_$2 = byte1 splash_run::toD0181_$1 +Constant right-side identified [250] splash_run::toD0181_$5 = splash_run::toD0181_$4 & $f +Constant right-side identified [476] irq_screen_top::toD0181_$2 = byte1 irq_screen_top::toD0181_$1 +Constant right-side identified [477] irq_screen_top::toD0181_$5 = irq_screen_top::toD0181_$4 & $f +Constant right-side identified [487] irq_screen_top::toDd001_return#0 = 3 ^ irq_screen_top::toDd001_$1 +Constant right-side identified [491] irq_screen_top::toDd002_return#0 = 3 ^ irq_screen_top::toDd002_$1 Successful SSA optimization Pass2ConstantRValueConsolidation Constant splash_run::toDd001_return#0 = 3^splash_run::toDd001_$1 Constant splash_run::toD0181_$2 = byte1 splash_run::toD0181_$1 @@ -7944,8 +7944,8 @@ Simplifying constant evaluating to zero byte1 irq_screen_top::toD0181_$1 in Simplifying constant evaluating to zero irq_screen_top::toD0181_$4&$f in Simplifying constant evaluating to zero 3^irq_screen_top::toDd001_$1 in Successful SSA optimization PassNSimplifyConstantZero -Simplifying expression containing zero splash_run::toD0181_$5 in [249] splash_run::toD0181_return#0 = splash_run::toD0181_$2 | splash_run::toD0181_$5 -Simplifying expression containing zero irq_screen_top::toD0181_$5 in [473] irq_screen_top::toD0181_return#0 = irq_screen_top::toD0181_$2 | irq_screen_top::toD0181_$5 +Simplifying expression containing zero splash_run::toD0181_$5 in [251] splash_run::toD0181_return#0 = splash_run::toD0181_$2 | splash_run::toD0181_$5 +Simplifying expression containing zero irq_screen_top::toD0181_$5 in [478] irq_screen_top::toD0181_return#0 = irq_screen_top::toD0181_$2 | irq_screen_top::toD0181_$5 Successful SSA optimization PassNSimplifyExpressionWithZero Eliminating unused constant splash_run::toD0181_$1 Eliminating unused constant splash_run::toD0181_$4 @@ -7991,52 +7991,52 @@ Alias candidate removed (volatile)ghost1_direction = game_logic::$182 Inlining Noop Cast [8] memset::$4 = (char *)memset::str#6 keeping memset::str#6 Inlining Noop Cast [10] memset::dst#0 = (char *)memset::str#6 keeping memset::str#6 Successful SSA optimization Pass2NopCastInlining -Inlining Noop Cast [110] render::render_index_xcol#0 = (char *)render::$3 keeping render::render_index_xcol#0 -Inlining Noop Cast [132] render_tiles::render_index_xcol#0 = (char *)render_tiles::$6 keeping render_tiles::render_index_xcol#0 +Inlining Noop Cast [112] render::render_index_xcol#0 = (char *)render::$3 keeping render::render_index_xcol#0 +Inlining Noop Cast [134] render_tiles::render_index_xcol#0 = (char *)render_tiles::$6 keeping render_tiles::render_index_xcol#0 Successful SSA optimization Pass2NopCastInlining -Rewriting multiplication to use shift [83] init_render_index::$9 = init_render_index::x_col#2 * SIZEOF_POINTER -Rewriting multiplication to use shift [88] init_render_index::$10 = init_render_index::$11 * SIZEOF_UNSIGNED_INT -Rewriting division to use shift [106] render::ytile#0 = render::ypos#2 / 4 -Rewriting multiplication to use shift [108] render::$2 = render::ytile#0 * 2 -Rewriting multiplication to use shift [125] render_tiles::$0 = render_tiles::tile_left#0 * 4 -Rewriting multiplication to use shift [127] render_tiles::$2 = render_tiles::tile_right#0 * 4 -Rewriting multiplication to use shift [130] render_tiles::$5 = render_tiles::ytile#0 * 2 -Rewriting multiplication to use shift [235] splash_run::$24 = splash_run::i#2 * 2 -Rewriting multiplication to use shift [237] splash_run::$34 = splash_run::i#2 * SIZEOF_UNSIGNED_INT -Rewriting division to use shift [240] splash_run::msb#1 = splash_run::msb#10 / 2 -Rewriting multiplication to use shift [392] level_tile_get::$5 = level_tile_get::ytile#4 * SIZEOF_UNSIGNED_INT -Rewriting multiplication to use shift [399] level_tile_directions::$5 = level_tile_directions::ytile#5 * SIZEOF_UNSIGNED_INT -Rewriting division to use shift [512] game_logic::$17 = game_logic::pacman_bob_xfine#0 / 4 -Rewriting division to use shift [524] game_logic::$25 = game_logic::ghost1_bob_xfine#0 / 4 -Rewriting division to use shift [533] game_logic::$31 = game_logic::ghost2_bob_xfine#0 / 4 -Rewriting division to use shift [542] game_logic::$37 = game_logic::ghost3_bob_xfine#0 / 4 -Rewriting division to use shift [551] game_logic::$43 = game_logic::ghost4_bob_xfine#0 / 4 -Rewriting division to use shift [573] game_logic::pacman_xtile#0 = pacman_xfine / 2 -Rewriting division to use shift [574] game_logic::pacman_ytile#0 = pacman_yfine / 2 -Rewriting multiplication to use shift [575] game_logic::$210 = game_logic::pacman_ytile#0 * SIZEOF_UNSIGNED_INT -Rewriting division to use shift [584] game_logic::$69 = game_logic::pacman_xtile#0 / 2 -Rewriting multiplication to use shift [589] game_logic::$72 = game_logic::pacman_ytile#0 * 2 -Rewriting division to use shift [595] game_logic::$65 = game_logic::pacman_xtile#0 / 2 -Rewriting multiplication to use shift [600] game_logic::$68 = game_logic::pacman_ytile#0 * 2 -Rewriting division to use shift [667] game_logic::ghost4_xtile#0 = ghost4_xfine / 2 -Rewriting division to use shift [668] game_logic::ghost4_ytile#0 = ghost4_yfine / 2 -Rewriting division to use shift [678] game_logic::target_xtile#2 = pacman_xfine / 2 -Rewriting division to use shift [679] game_logic::target_ytile#2 = pacman_yfine / 2 -Rewriting division to use shift [715] game_logic::ghost3_xtile#0 = ghost3_xfine / 2 -Rewriting division to use shift [716] game_logic::ghost3_ytile#0 = ghost3_yfine / 2 -Rewriting division to use shift [726] game_logic::target_xtile1#2 = pacman_xfine / 2 -Rewriting division to use shift [727] game_logic::target_ytile1#2 = pacman_yfine / 2 -Rewriting division to use shift [763] game_logic::ghost2_xtile#0 = ghost2_xfine / 2 -Rewriting division to use shift [764] game_logic::ghost2_ytile#0 = ghost2_yfine / 2 -Rewriting division to use shift [774] game_logic::target_xtile2#2 = pacman_xfine / 2 -Rewriting division to use shift [775] game_logic::target_ytile2#2 = pacman_yfine / 2 -Rewriting division to use shift [811] game_logic::ghost1_xtile#0 = ghost1_xfine / 2 -Rewriting division to use shift [812] game_logic::ghost1_ytile#0 = ghost1_yfine / 2 -Rewriting division to use shift [822] game_logic::target_xtile3#2 = pacman_xfine / 2 -Rewriting division to use shift [823] game_logic::target_ytile3#2 = pacman_yfine / 2 -Rewriting division to use shift [854] game_logic::pacman_xtile1#0 = pacman_xfine / 2 -Rewriting division to use shift [855] game_logic::pacman_ytile1#0 = pacman_yfine / 2 -Rewriting multiplication to use shift [863] game_logic::joy_directions#0 = game_logic::$200 * 4 +Rewriting multiplication to use shift [85] init_render_index::$9 = init_render_index::x_col#2 * SIZEOF_POINTER +Rewriting multiplication to use shift [90] init_render_index::$10 = init_render_index::$11 * SIZEOF_UNSIGNED_INT +Rewriting division to use shift [108] render::ytile#0 = render::ypos#2 / 4 +Rewriting multiplication to use shift [110] render::$2 = render::ytile#0 * 2 +Rewriting multiplication to use shift [127] render_tiles::$0 = render_tiles::tile_left#0 * 4 +Rewriting multiplication to use shift [129] render_tiles::$2 = render_tiles::tile_right#0 * 4 +Rewriting multiplication to use shift [132] render_tiles::$5 = render_tiles::ytile#0 * 2 +Rewriting multiplication to use shift [237] splash_run::$24 = splash_run::i#2 * 2 +Rewriting multiplication to use shift [239] splash_run::$34 = splash_run::i#2 * SIZEOF_UNSIGNED_INT +Rewriting division to use shift [242] splash_run::msb#1 = splash_run::msb#10 / 2 +Rewriting multiplication to use shift [395] level_tile_get::$5 = level_tile_get::ytile#4 * SIZEOF_UNSIGNED_INT +Rewriting multiplication to use shift [403] level_tile_directions::$5 = level_tile_directions::ytile#5 * SIZEOF_UNSIGNED_INT +Rewriting division to use shift [517] game_logic::$17 = game_logic::pacman_bob_xfine#0 / 4 +Rewriting division to use shift [529] game_logic::$25 = game_logic::ghost1_bob_xfine#0 / 4 +Rewriting division to use shift [538] game_logic::$31 = game_logic::ghost2_bob_xfine#0 / 4 +Rewriting division to use shift [547] game_logic::$37 = game_logic::ghost3_bob_xfine#0 / 4 +Rewriting division to use shift [556] game_logic::$43 = game_logic::ghost4_bob_xfine#0 / 4 +Rewriting division to use shift [578] game_logic::pacman_xtile#0 = pacman_xfine / 2 +Rewriting division to use shift [579] game_logic::pacman_ytile#0 = pacman_yfine / 2 +Rewriting multiplication to use shift [580] game_logic::$210 = game_logic::pacman_ytile#0 * SIZEOF_UNSIGNED_INT +Rewriting division to use shift [589] game_logic::$69 = game_logic::pacman_xtile#0 / 2 +Rewriting multiplication to use shift [594] game_logic::$72 = game_logic::pacman_ytile#0 * 2 +Rewriting division to use shift [600] game_logic::$65 = game_logic::pacman_xtile#0 / 2 +Rewriting multiplication to use shift [605] game_logic::$68 = game_logic::pacman_ytile#0 * 2 +Rewriting division to use shift [672] game_logic::ghost4_xtile#0 = ghost4_xfine / 2 +Rewriting division to use shift [673] game_logic::ghost4_ytile#0 = ghost4_yfine / 2 +Rewriting division to use shift [683] game_logic::target_xtile#2 = pacman_xfine / 2 +Rewriting division to use shift [684] game_logic::target_ytile#2 = pacman_yfine / 2 +Rewriting division to use shift [720] game_logic::ghost3_xtile#0 = ghost3_xfine / 2 +Rewriting division to use shift [721] game_logic::ghost3_ytile#0 = ghost3_yfine / 2 +Rewriting division to use shift [731] game_logic::target_xtile1#2 = pacman_xfine / 2 +Rewriting division to use shift [732] game_logic::target_ytile1#2 = pacman_yfine / 2 +Rewriting division to use shift [768] game_logic::ghost2_xtile#0 = ghost2_xfine / 2 +Rewriting division to use shift [769] game_logic::ghost2_ytile#0 = ghost2_yfine / 2 +Rewriting division to use shift [779] game_logic::target_xtile2#2 = pacman_xfine / 2 +Rewriting division to use shift [780] game_logic::target_ytile2#2 = pacman_yfine / 2 +Rewriting division to use shift [816] game_logic::ghost1_xtile#0 = ghost1_xfine / 2 +Rewriting division to use shift [817] game_logic::ghost1_ytile#0 = ghost1_yfine / 2 +Rewriting division to use shift [827] game_logic::target_xtile3#2 = pacman_xfine / 2 +Rewriting division to use shift [828] game_logic::target_ytile3#2 = pacman_yfine / 2 +Rewriting division to use shift [859] game_logic::pacman_xtile1#0 = pacman_xfine / 2 +Rewriting division to use shift [860] game_logic::pacman_ytile1#0 = pacman_yfine / 2 +Rewriting multiplication to use shift [868] game_logic::joy_directions#0 = game_logic::$200 * 4 Successful SSA optimization Pass2MultiplyToShiftRewriting Inlining constant with var siblings memcpy::src#0 Inlining constant with var siblings memcpy::dst#0 @@ -8266,9 +8266,9 @@ Alias candidate removed (volatile)ghost2_direction = game_logic::$161 Alias candidate removed (volatile)ghost1_direction = game_logic::$182 Identical Phi Values memset::c#7 0 Successful SSA optimization Pass2IdenticalPhiElimination -Identified duplicate assignment right side [233] splash_run::$34 = splash_run::i#2 << 1 -Identified duplicate assignment right side [585] game_logic::$72 = game_logic::pacman_ytile#0 << 1 -Identified duplicate assignment right side [596] game_logic::$68 = game_logic::pacman_ytile#0 << 1 +Identified duplicate assignment right side [235] splash_run::$34 = splash_run::i#2 << 1 +Identified duplicate assignment right side [590] game_logic::$72 = game_logic::pacman_ytile#0 << 1 +Identified duplicate assignment right side [601] game_logic::$68 = game_logic::pacman_ytile#0 << 1 Successful SSA optimization Pass2DuplicateRValueIdentification Eliminating unused constant SIZEOF_POINTER Eliminating unused constant SIZEOF_UNSIGNED_INT @@ -13236,222 +13236,114 @@ Allocated zp[1]:248 [ game_logic::$34 ] Allocated zp[1]:249 [ game_logic::$35 ] Allocated zp[1]:250 [ game_logic::$37 ] Allocated zp[1]:251 [ game_logic::$38 ] -Zero-page exhausted. Moving allocation to main memory game_logic::$40 -Allocated mem[1] [ game_logic::$40 ] -Zero-page exhausted. Moving allocation to main memory game_logic::$41 -Allocated mem[1] [ game_logic::$41 ] -Zero-page exhausted. Moving allocation to main memory game_logic::$43 -Allocated mem[1] [ game_logic::$43 ] -Zero-page exhausted. Moving allocation to main memory game_logic::$44 -Allocated mem[1] [ game_logic::$44 ] -Zero-page exhausted. Moving allocation to main memory game_logic::$46 -Allocated mem[1] [ game_logic::$46 ] -Zero-page exhausted. Moving allocation to main memory game_logic::$47 -Allocated mem[1] [ game_logic::$47 ] -Zero-page exhausted. Moving allocation to main memory game_logic::pacman_ytile#0 -Allocated mem[1] [ game_logic::pacman_ytile#0 ] -Zero-page exhausted. Moving allocation to main memory game_logic::$65 -Allocated mem[1] [ game_logic::$65 ] -Zero-page exhausted. Moving allocation to main memory game_logic::$66 -Allocated mem[1] [ game_logic::$66 ] -Zero-page exhausted. Moving allocation to main memory game_logic::$67 -Allocated mem[2] [ game_logic::$67 ] -Zero-page exhausted. Moving allocation to main memory game_logic::$68 -Allocated mem[1] [ game_logic::$68 ] -Zero-page exhausted. Moving allocation to main memory game_logic::$69 -Allocated mem[1] [ game_logic::$69 ] -Zero-page exhausted. Moving allocation to main memory game_logic::$70 -Allocated mem[1] [ game_logic::$70 ] -Zero-page exhausted. Moving allocation to main memory game_logic::$71 -Allocated mem[2] [ game_logic::$71 ] -Zero-page exhausted. Moving allocation to main memory game_logic::$72 -Allocated mem[1] [ game_logic::$72 ] -Zero-page exhausted. Moving allocation to main memory level_tile_directions::return#3 -Allocated mem[1] [ level_tile_directions::return#3 ] -Zero-page exhausted. Moving allocation to main memory game_logic::open_directions#0 -Allocated mem[1] [ game_logic::open_directions#0 ] -Zero-page exhausted. Moving allocation to main memory choose_direction::return#0 -Allocated mem[1] [ choose_direction::return#0 ] -Zero-page exhausted. Moving allocation to main memory game_logic::$119 -Allocated mem[1] [ game_logic::$119 ] -Zero-page exhausted. Moving allocation to main memory level_tile_directions::return#10 -Allocated mem[1] [ level_tile_directions::return#10 ] -Zero-page exhausted. Moving allocation to main memory game_logic::open_directions1#0 -Allocated mem[1] [ game_logic::open_directions1#0 ] -Zero-page exhausted. Moving allocation to main memory choose_direction::return#1 -Allocated mem[1] [ choose_direction::return#1 ] -Zero-page exhausted. Moving allocation to main memory game_logic::$140 -Allocated mem[1] [ game_logic::$140 ] -Zero-page exhausted. Moving allocation to main memory level_tile_directions::return#11 -Allocated mem[1] [ level_tile_directions::return#11 ] -Zero-page exhausted. Moving allocation to main memory game_logic::open_directions2#0 -Allocated mem[1] [ game_logic::open_directions2#0 ] -Zero-page exhausted. Moving allocation to main memory choose_direction::return#2 -Allocated mem[1] [ choose_direction::return#2 ] -Zero-page exhausted. Moving allocation to main memory game_logic::$161 -Allocated mem[1] [ game_logic::$161 ] -Zero-page exhausted. Moving allocation to main memory level_tile_directions::return#12 -Allocated mem[1] [ level_tile_directions::return#12 ] -Zero-page exhausted. Moving allocation to main memory game_logic::open_directions3#0 -Allocated mem[1] [ game_logic::open_directions3#0 ] -Zero-page exhausted. Moving allocation to main memory choose_direction::return#3 -Allocated mem[1] [ choose_direction::return#3 ] -Zero-page exhausted. Moving allocation to main memory game_logic::$182 -Allocated mem[1] [ game_logic::$182 ] -Zero-page exhausted. Moving allocation to main memory level_tile_directions::return#13 -Allocated mem[1] [ level_tile_directions::return#13 ] -Zero-page exhausted. Moving allocation to main memory game_logic::$199 -Allocated mem[1] [ game_logic::$199 ] -Zero-page exhausted. Moving allocation to main memory game_logic::$200 -Allocated mem[1] [ game_logic::$200 ] -Zero-page exhausted. Moving allocation to main memory game_logic::$204 -Allocated mem[1] [ game_logic::$204 ] -Zero-page exhausted. Moving allocation to main memory choose_direction::ydiff#0 -Allocated mem[1] [ choose_direction::ydiff#0 ] -Zero-page exhausted. Moving allocation to main memory choose_direction::xdiff#0 -Allocated mem[1] [ choose_direction::xdiff#0 ] -Zero-page exhausted. Moving allocation to main memory logic_tile_left_idx -Allocated mem[1] [ logic_tile_left_idx ] -Zero-page exhausted. Moving allocation to main memory logic_tile_right_idx -Allocated mem[1] [ logic_tile_right_idx ] -Zero-page exhausted. Moving allocation to main memory left_render_index_xcol -Allocated mem[2] [ left_render_index_xcol ] -Zero-page exhausted. Moving allocation to main memory left_canvas -Allocated mem[2] [ left_canvas ] -Zero-page exhausted. Moving allocation to main memory left_ypos_inc_offset -Allocated mem[1] [ left_ypos_inc_offset ] -Zero-page exhausted. Moving allocation to main memory rigt_render_index_xcol -Allocated mem[2] [ rigt_render_index_xcol ] -Zero-page exhausted. Moving allocation to main memory rigt_canvas -Allocated mem[2] [ rigt_canvas ] -Zero-page exhausted. Moving allocation to main memory rigt_ypos_inc_offset -Allocated mem[1] [ rigt_ypos_inc_offset ] -Zero-page exhausted. Moving allocation to main memory game_logic::target_xtile#3 -Allocated mem[1] [ game_logic::target_xtile#3 game_logic::target_xtile#2 ] -Zero-page exhausted. Moving allocation to main memory game_logic::target_xtile1#3 -Allocated mem[1] [ game_logic::target_xtile1#3 game_logic::target_xtile1#2 ] -Zero-page exhausted. Moving allocation to main memory game_logic::target_xtile2#3 -Allocated mem[1] [ game_logic::target_xtile2#3 game_logic::target_xtile2#2 ] -Zero-page exhausted. Moving allocation to main memory game_logic::target_xtile3#3 -Allocated mem[1] [ game_logic::target_xtile3#3 game_logic::target_xtile3#2 ] -Zero-page exhausted. Moving allocation to main memory game_logic::tile_id#0 -Allocated mem[1] [ game_logic::tile_id#0 ] -Zero-page exhausted. Moving allocation to main memory game_logic::joy_directions#0 -Allocated mem[1] [ game_logic::joy_directions#0 ] -Zero-page exhausted. Moving allocation to main memory game_logic::new_direction#0 -Allocated mem[1] [ game_logic::new_direction#0 ] -Zero-page exhausted. Moving allocation to main memory pill_count -Allocated mem[2] [ pill_count ] -Zero-page exhausted. Moving allocation to main memory game_logic::do_reverse#4 -Allocated mem[1] [ game_logic::do_reverse#4 ] -Zero-page exhausted. Moving allocation to main memory game_logic::$19 -Allocated mem[1] [ game_logic::$19 ] -Zero-page exhausted. Moving allocation to main memory game_logic::$27 -Allocated mem[1] [ game_logic::$27 ] -Zero-page exhausted. Moving allocation to main memory game_logic::$33 -Allocated mem[1] [ game_logic::$33 ] -Zero-page exhausted. Moving allocation to main memory game_logic::$39 -Allocated mem[1] [ game_logic::$39 ] -Zero-page exhausted. Moving allocation to main memory game_logic::$45 -Allocated mem[1] [ game_logic::$45 ] -Zero-page exhausted. Moving allocation to main memory game_logic::$75 -Allocated mem[1] [ game_logic::$75 ] -Zero-page exhausted. Moving allocation to main memory game_logic::$77 -Allocated mem[1] [ game_logic::$77 ] -Zero-page exhausted. Moving allocation to main memory game_logic::$80 -Allocated mem[1] [ game_logic::$80 ] -Zero-page exhausted. Moving allocation to main memory game_logic::$82 -Allocated mem[1] [ game_logic::$82 ] -Zero-page exhausted. Moving allocation to main memory game_logic::$85 -Allocated mem[1] [ game_logic::$85 ] -Zero-page exhausted. Moving allocation to main memory game_logic::$87 -Allocated mem[1] [ game_logic::$87 ] -Zero-page exhausted. Moving allocation to main memory game_logic::$90 -Allocated mem[1] [ game_logic::$90 ] -Zero-page exhausted. Moving allocation to main memory game_logic::$92 -Allocated mem[1] [ game_logic::$92 ] -Zero-page exhausted. Moving allocation to main memory game_logic::$220 -Allocated mem[1] [ game_logic::$220 ] -Zero-page exhausted. Moving allocation to main memory game_logic::$223 -Allocated mem[1] [ game_logic::$223 ] -Zero-page exhausted. Moving allocation to main memory game_logic::$226 -Allocated mem[1] [ game_logic::$226 ] -Zero-page exhausted. Moving allocation to main memory game_logic::$229 -Allocated mem[1] [ game_logic::$229 ] -Zero-page exhausted. Moving allocation to main memory game_logic::$232 -Allocated mem[1] [ game_logic::$232 ] -Zero-page exhausted. Moving allocation to main memory game_logic::pacman_xtile1#0 -Allocated mem[1] [ game_logic::pacman_xtile1#0 ] -Zero-page exhausted. Moving allocation to main memory game_logic::pacman_ytile1#0 -Allocated mem[1] [ game_logic::pacman_ytile1#0 ] -Zero-page exhausted. Moving allocation to main memory game_logic::pacman_xtile#0 -Allocated mem[1] [ game_logic::pacman_xtile#0 ] -Zero-page exhausted. Moving allocation to main memory game_logic::pacman_bob_xfine#0 -Allocated mem[1] [ game_logic::pacman_bob_xfine#0 ] -Zero-page exhausted. Moving allocation to main memory game_logic::ghost1_bob_xfine#0 -Allocated mem[1] [ game_logic::ghost1_bob_xfine#0 ] -Zero-page exhausted. Moving allocation to main memory game_logic::ghost2_bob_xfine#0 -Allocated mem[1] [ game_logic::ghost2_bob_xfine#0 ] -Zero-page exhausted. Moving allocation to main memory game_logic::ghost3_bob_xfine#0 -Allocated mem[1] [ game_logic::ghost3_bob_xfine#0 ] -Zero-page exhausted. Moving allocation to main memory game_logic::ghost4_bob_xfine#0 -Allocated mem[1] [ game_logic::ghost4_bob_xfine#0 ] -Zero-page exhausted. Moving allocation to main memory game_logic::ytiles#0 -Allocated mem[2] [ game_logic::ytiles#0 ] -Zero-page exhausted. Moving allocation to main memory game_logic::open_directions#1 -Allocated mem[1] [ game_logic::open_directions#1 ] -Zero-page exhausted. Moving allocation to main memory game_logic::open_directions1#1 -Allocated mem[1] [ game_logic::open_directions1#1 ] -Zero-page exhausted. Moving allocation to main memory game_logic::open_directions2#1 -Allocated mem[1] [ game_logic::open_directions2#1 ] -Zero-page exhausted. Moving allocation to main memory game_logic::open_directions3#1 -Allocated mem[1] [ game_logic::open_directions3#1 ] -Zero-page exhausted. Moving allocation to main memory irq_screen_top::$1 -Allocated mem[1] [ irq_screen_top::$1 ] -Zero-page exhausted. Moving allocation to main memory irq_screen_top::$2 -Allocated mem[1] [ irq_screen_top::$2 ] -Zero-page exhausted. Moving allocation to main memory game_logic::open_directions4#0 -Allocated mem[1] [ game_logic::open_directions4#0 ] -Zero-page exhausted. Moving allocation to main memory game_logic_substep -Allocated mem[1] [ game_logic_substep ] -Zero-page exhausted. Moving allocation to main memory game_logic::$210 -Allocated mem[1] [ game_logic::$210 ] -Zero-page exhausted. Moving allocation to main memory game_logic::ghost4_xtile#0 -Allocated mem[1] [ game_logic::ghost4_xtile#0 ] -Zero-page exhausted. Moving allocation to main memory game_logic::ghost4_ytile#0 -Allocated mem[1] [ game_logic::ghost4_ytile#0 ] -Zero-page exhausted. Moving allocation to main memory game_logic::ghost3_xtile#0 -Allocated mem[1] [ game_logic::ghost3_xtile#0 ] -Zero-page exhausted. Moving allocation to main memory game_logic::ghost3_ytile#0 -Allocated mem[1] [ game_logic::ghost3_ytile#0 ] -Zero-page exhausted. Moving allocation to main memory game_logic::ghost2_xtile#0 -Allocated mem[1] [ game_logic::ghost2_xtile#0 ] -Zero-page exhausted. Moving allocation to main memory game_logic::ghost2_ytile#0 -Allocated mem[1] [ game_logic::ghost2_ytile#0 ] -Zero-page exhausted. Moving allocation to main memory game_logic::ghost1_xtile#0 -Allocated mem[1] [ game_logic::ghost1_xtile#0 ] -Zero-page exhausted. Moving allocation to main memory game_logic::ghost1_ytile#0 -Allocated mem[1] [ game_logic::ghost1_ytile#0 ] -Zero-page exhausted. Moving allocation to main memory pacman_ch1_idx -Allocated mem[1] [ pacman_ch1_idx ] -Zero-page exhausted. Moving allocation to main memory ghosts_mode -Allocated mem[1] [ ghosts_mode ] -Zero-page exhausted. Moving allocation to main memory anim_frame_idx -Allocated mem[1] [ anim_frame_idx ] -Zero-page exhausted. Moving allocation to main memory ghost1_reverse -Allocated mem[1] [ ghost1_reverse ] -Zero-page exhausted. Moving allocation to main memory ghost2_reverse -Allocated mem[1] [ ghost2_reverse ] -Zero-page exhausted. Moving allocation to main memory ghost3_reverse -Allocated mem[1] [ ghost3_reverse ] -Zero-page exhausted. Moving allocation to main memory ghost4_reverse -Allocated mem[1] [ ghost4_reverse ] -Zero-page exhausted. Moving allocation to main memory frame -Allocated mem[1] [ frame ] -Zero-page exhausted. Moving allocation to main memory pacman_ch1_enabled -Allocated mem[1] [ pacman_ch1_enabled ] -Zero-page exhausted. Moving allocation to main memory memset::str#6 -Allocated mem[2] [ memset::str#6 ] +Allocated zp[1]:256 [ game_logic::$40 ] +Allocated zp[1]:257 [ game_logic::$41 ] +Allocated zp[1]:258 [ game_logic::$43 ] +Allocated zp[1]:259 [ game_logic::$44 ] +Allocated zp[1]:260 [ game_logic::$46 ] +Allocated zp[1]:261 [ game_logic::$47 ] +Allocated zp[1]:262 [ game_logic::pacman_ytile#0 ] +Allocated zp[1]:263 [ game_logic::$65 ] +Allocated zp[1]:264 [ game_logic::$66 ] +Allocated zp[2]:265 [ game_logic::$67 ] +Allocated zp[1]:267 [ game_logic::$68 ] +Allocated zp[1]:268 [ game_logic::$69 ] +Allocated zp[1]:269 [ game_logic::$70 ] +Allocated zp[2]:270 [ game_logic::$71 ] +Allocated zp[1]:272 [ game_logic::$72 ] +Allocated zp[1]:273 [ level_tile_directions::return#3 ] +Allocated zp[1]:274 [ game_logic::open_directions#0 ] +Allocated zp[1]:275 [ choose_direction::return#0 ] +Allocated zp[1]:276 [ game_logic::$119 ] +Allocated zp[1]:277 [ level_tile_directions::return#10 ] +Allocated zp[1]:278 [ game_logic::open_directions1#0 ] +Allocated zp[1]:279 [ choose_direction::return#1 ] +Allocated zp[1]:280 [ game_logic::$140 ] +Allocated zp[1]:281 [ level_tile_directions::return#11 ] +Allocated zp[1]:282 [ game_logic::open_directions2#0 ] +Allocated zp[1]:283 [ choose_direction::return#2 ] +Allocated zp[1]:284 [ game_logic::$161 ] +Allocated zp[1]:285 [ level_tile_directions::return#12 ] +Allocated zp[1]:286 [ game_logic::open_directions3#0 ] +Allocated zp[1]:287 [ choose_direction::return#3 ] +Allocated zp[1]:288 [ game_logic::$182 ] +Allocated zp[1]:289 [ level_tile_directions::return#13 ] +Allocated zp[1]:290 [ game_logic::$199 ] +Allocated zp[1]:291 [ game_logic::$200 ] +Allocated zp[1]:292 [ game_logic::$204 ] +Allocated zp[1]:293 [ choose_direction::ydiff#0 ] +Allocated zp[1]:294 [ choose_direction::xdiff#0 ] +Allocated zp[1]:295 [ logic_tile_left_idx ] +Allocated zp[1]:296 [ logic_tile_right_idx ] +Allocated zp[2]:297 [ left_render_index_xcol ] +Allocated zp[2]:299 [ left_canvas ] +Allocated zp[1]:301 [ left_ypos_inc_offset ] +Allocated zp[2]:302 [ rigt_render_index_xcol ] +Allocated zp[2]:304 [ rigt_canvas ] +Allocated zp[1]:306 [ rigt_ypos_inc_offset ] +Allocated zp[1]:307 [ game_logic::target_xtile#3 game_logic::target_xtile#2 ] +Allocated zp[1]:308 [ game_logic::target_xtile1#3 game_logic::target_xtile1#2 ] +Allocated zp[1]:309 [ game_logic::target_xtile2#3 game_logic::target_xtile2#2 ] +Allocated zp[1]:310 [ game_logic::target_xtile3#3 game_logic::target_xtile3#2 ] +Allocated zp[1]:311 [ game_logic::tile_id#0 ] +Allocated zp[1]:312 [ game_logic::joy_directions#0 ] +Allocated zp[1]:313 [ game_logic::new_direction#0 ] +Allocated zp[2]:314 [ pill_count ] +Allocated zp[1]:316 [ game_logic::do_reverse#4 ] +Allocated zp[1]:317 [ game_logic::$19 ] +Allocated zp[1]:318 [ game_logic::$27 ] +Allocated zp[1]:319 [ game_logic::$33 ] +Allocated zp[1]:320 [ game_logic::$39 ] +Allocated zp[1]:321 [ game_logic::$45 ] +Allocated zp[1]:322 [ game_logic::$75 ] +Allocated zp[1]:323 [ game_logic::$77 ] +Allocated zp[1]:324 [ game_logic::$80 ] +Allocated zp[1]:325 [ game_logic::$82 ] +Allocated zp[1]:326 [ game_logic::$85 ] +Allocated zp[1]:327 [ game_logic::$87 ] +Allocated zp[1]:328 [ game_logic::$90 ] +Allocated zp[1]:329 [ game_logic::$92 ] +Allocated zp[1]:330 [ game_logic::$220 ] +Allocated zp[1]:331 [ game_logic::$223 ] +Allocated zp[1]:332 [ game_logic::$226 ] +Allocated zp[1]:333 [ game_logic::$229 ] +Allocated zp[1]:334 [ game_logic::$232 ] +Allocated zp[1]:335 [ game_logic::pacman_xtile1#0 ] +Allocated zp[1]:336 [ game_logic::pacman_ytile1#0 ] +Allocated zp[1]:337 [ game_logic::pacman_xtile#0 ] +Allocated zp[1]:338 [ game_logic::pacman_bob_xfine#0 ] +Allocated zp[1]:339 [ game_logic::ghost1_bob_xfine#0 ] +Allocated zp[1]:340 [ game_logic::ghost2_bob_xfine#0 ] +Allocated zp[1]:341 [ game_logic::ghost3_bob_xfine#0 ] +Allocated zp[1]:342 [ game_logic::ghost4_bob_xfine#0 ] +Allocated zp[2]:343 [ game_logic::ytiles#0 ] +Allocated zp[1]:345 [ game_logic::open_directions#1 ] +Allocated zp[1]:346 [ game_logic::open_directions1#1 ] +Allocated zp[1]:347 [ game_logic::open_directions2#1 ] +Allocated zp[1]:348 [ game_logic::open_directions3#1 ] +Allocated zp[1]:349 [ irq_screen_top::$1 ] +Allocated zp[1]:350 [ irq_screen_top::$2 ] +Allocated zp[1]:351 [ game_logic::open_directions4#0 ] +Allocated zp[1]:352 [ game_logic_substep ] +Allocated zp[1]:353 [ game_logic::$210 ] +Allocated zp[1]:354 [ game_logic::ghost4_xtile#0 ] +Allocated zp[1]:355 [ game_logic::ghost4_ytile#0 ] +Allocated zp[1]:356 [ game_logic::ghost3_xtile#0 ] +Allocated zp[1]:357 [ game_logic::ghost3_ytile#0 ] +Allocated zp[1]:358 [ game_logic::ghost2_xtile#0 ] +Allocated zp[1]:359 [ game_logic::ghost2_ytile#0 ] +Allocated zp[1]:360 [ game_logic::ghost1_xtile#0 ] +Allocated zp[1]:361 [ game_logic::ghost1_ytile#0 ] +Allocated zp[1]:362 [ pacman_ch1_idx ] +Allocated zp[1]:363 [ ghosts_mode ] +Allocated zp[1]:364 [ anim_frame_idx ] +Allocated zp[1]:365 [ ghost1_reverse ] +Allocated zp[1]:366 [ ghost2_reverse ] +Allocated zp[1]:367 [ ghost3_reverse ] +Allocated zp[1]:368 [ ghost4_reverse ] +Allocated zp[1]:369 [ frame ] +Allocated zp[1]:370 [ pacman_ch1_enabled ] +Allocated zp[2]:371 [ memset::str#6 ] REGISTER UPLIFT POTENTIAL REGISTERS Statement [1] pacman_ch1_enabled = 0 [ ] ( [ ] { } ) always clobbers reg byte a Statement [2] pacman_ch1_idx = 0 [ ] ( [ ] { } ) always clobbers reg byte a @@ -13577,37 +13469,37 @@ Statement [117] if(game_logic_substep==6) goto game_logic::@7 [ pacman_ch1_enabl Statement [118] if(game_logic_substep==3) goto game_logic::@14 [ pacman_ch1_enabled anim_frame_idx pacman_xfine pacman_yfine pacman_direction ghosts_mode ghost1_xfine ghost1_yfine ghost1_direction ghost2_xfine ghost2_yfine ghost2_direction ghost3_xfine ghost3_yfine ghost3_direction ghost4_xfine ghost4_yfine ghost4_direction game_logic_substep ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled anim_frame_idx pacman_xfine pacman_yfine pacman_direction ghosts_mode ghost1_xfine ghost1_yfine ghost1_direction ghost2_xfine ghost2_yfine ghost2_direction ghost3_xfine ghost3_yfine ghost3_direction ghost4_xfine ghost4_yfine ghost4_direction game_logic_substep ] { } ) always clobbers reg byte a Statement [119] if(game_logic_substep==7) goto game_logic::@14 [ pacman_ch1_enabled anim_frame_idx pacman_xfine pacman_yfine pacman_direction ghosts_mode ghost1_xfine ghost1_yfine ghost1_direction ghost2_xfine ghost2_yfine ghost2_direction ghost3_xfine ghost3_yfine ghost3_direction ghost4_xfine ghost4_yfine ghost4_direction ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled anim_frame_idx pacman_xfine pacman_yfine pacman_direction ghosts_mode ghost1_xfine ghost1_yfine ghost1_direction ghost2_xfine ghost2_yfine ghost2_direction ghost3_xfine ghost3_yfine ghost3_direction ghost4_xfine ghost4_yfine ghost4_direction ] { } ) always clobbers reg byte a Statement [124] game_logic::$17 = game_logic::pacman_bob_xfine#0 >> 2 [ pacman_ch1_enabled anim_frame_idx pacman_yfine pacman_direction ghosts_mode ghost1_xfine ghost1_yfine ghost1_direction ghost2_xfine ghost2_yfine ghost2_direction ghost3_xfine ghost3_yfine ghost3_direction ghost4_xfine ghost4_yfine ghost4_direction game_logic::pacman_bob_xfine#0 game_logic::$17 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled anim_frame_idx pacman_yfine pacman_direction ghosts_mode ghost1_xfine ghost1_yfine ghost1_direction ghost2_xfine ghost2_yfine ghost2_direction ghost3_xfine ghost3_yfine ghost3_direction ghost4_xfine ghost4_yfine ghost4_direction game_logic::pacman_bob_xfine#0 game_logic::$17 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for mem[1] [ game_logic::pacman_bob_xfine#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:338 [ game_logic::pacman_bob_xfine#0 ] Statement [128] game_logic::$19 = pacman_direction | anim_frame_idx [ pacman_ch1_enabled anim_frame_idx ghosts_mode ghost1_xfine ghost1_yfine ghost1_direction ghost2_xfine ghost2_yfine ghost2_direction ghost3_xfine ghost3_yfine ghost3_direction ghost4_xfine ghost4_yfine ghost4_direction game_logic::pacman_bob_xfine#0 game_logic::$19 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled anim_frame_idx ghosts_mode ghost1_xfine ghost1_yfine ghost1_direction ghost2_xfine ghost2_yfine ghost2_direction ghost3_xfine ghost3_yfine ghost3_direction ghost4_xfine ghost4_yfine ghost4_direction game_logic::pacman_bob_xfine#0 game_logic::$19 ] { } ) always clobbers reg byte a Statement [129] game_logic::$20 = game_logic::pacman_bob_xfine#0 & 3 [ pacman_ch1_enabled anim_frame_idx ghosts_mode ghost1_xfine ghost1_yfine ghost1_direction ghost2_xfine ghost2_yfine ghost2_direction ghost3_xfine ghost3_yfine ghost3_direction ghost4_xfine ghost4_yfine ghost4_direction game_logic::$19 game_logic::$20 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled anim_frame_idx ghosts_mode ghost1_xfine ghost1_yfine ghost1_direction ghost2_xfine ghost2_yfine ghost2_direction ghost3_xfine ghost3_yfine ghost3_direction ghost4_xfine ghost4_yfine ghost4_direction game_logic::$19 game_logic::$20 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for mem[1] [ game_logic::$19 ] +Removing always clobbered register reg byte a as potential for zp[1]:317 [ game_logic::$19 ] Statement [130] game_logic::$21 = pacman_frames[game_logic::$19] + game_logic::$20 [ pacman_ch1_enabled anim_frame_idx ghosts_mode ghost1_xfine ghost1_yfine ghost1_direction ghost2_xfine ghost2_yfine ghost2_direction ghost3_xfine ghost3_yfine ghost3_direction ghost4_xfine ghost4_yfine ghost4_direction game_logic::$21 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled anim_frame_idx ghosts_mode ghost1_xfine ghost1_yfine ghost1_direction ghost2_xfine ghost2_yfine ghost2_direction ghost3_xfine ghost3_yfine ghost3_direction ghost4_xfine ghost4_yfine ghost4_direction game_logic::$21 ] { } ) always clobbers reg byte a Statement [133] if(ghosts_mode!=FRIGHTENED) goto game_logic::@44 [ pacman_ch1_enabled ghost1_xfine ghost1_yfine ghost1_direction ghost2_xfine ghost2_yfine ghost2_direction ghost3_xfine ghost3_yfine ghost3_direction ghost4_xfine ghost4_yfine ghost4_direction game_logic::ghost_frame_idx#0 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled ghost1_xfine ghost1_yfine ghost1_direction ghost2_xfine ghost2_yfine ghost2_direction ghost3_xfine ghost3_yfine ghost3_direction ghost4_xfine ghost4_yfine ghost4_direction game_logic::ghost_frame_idx#0 ] { } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:228 [ game_logic::ghost_frame_idx#2 game_logic::ghost_frame_idx#0 game_logic::ghost_frame_idx#1 ] Statement [134] game_logic::ghost_frame_idx#1 = game_logic::ghost_frame_idx#0 | $40 [ pacman_ch1_enabled ghost1_xfine ghost1_yfine ghost1_direction ghost2_xfine ghost2_yfine ghost2_direction ghost3_xfine ghost3_yfine ghost3_direction ghost4_xfine ghost4_yfine ghost4_direction game_logic::ghost_frame_idx#1 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled ghost1_xfine ghost1_yfine ghost1_direction ghost2_xfine ghost2_yfine ghost2_direction ghost3_xfine ghost3_yfine ghost3_direction ghost4_xfine ghost4_yfine ghost4_direction game_logic::ghost_frame_idx#1 ] { } ) always clobbers reg byte a Statement [137] game_logic::$25 = game_logic::ghost1_bob_xfine#0 >> 2 [ pacman_ch1_enabled ghost1_yfine ghost1_direction ghost2_xfine ghost2_yfine ghost2_direction ghost3_xfine ghost3_yfine ghost3_direction ghost4_xfine ghost4_yfine ghost4_direction game_logic::ghost_frame_idx#2 game_logic::ghost1_bob_xfine#0 game_logic::$25 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled ghost1_yfine ghost1_direction ghost2_xfine ghost2_yfine ghost2_direction ghost3_xfine ghost3_yfine ghost3_direction ghost4_xfine ghost4_yfine ghost4_direction game_logic::ghost_frame_idx#2 game_logic::ghost1_bob_xfine#0 game_logic::$25 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for mem[1] [ game_logic::ghost1_bob_xfine#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:339 [ game_logic::ghost1_bob_xfine#0 ] Statement [141] game_logic::$27 = ghost1_direction | game_logic::ghost_frame_idx#2 [ pacman_ch1_enabled ghost2_xfine ghost2_yfine ghost2_direction ghost3_xfine ghost3_yfine ghost3_direction ghost4_xfine ghost4_yfine ghost4_direction game_logic::ghost_frame_idx#2 game_logic::ghost1_bob_xfine#0 game_logic::$27 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled ghost2_xfine ghost2_yfine ghost2_direction ghost3_xfine ghost3_yfine ghost3_direction ghost4_xfine ghost4_yfine ghost4_direction game_logic::ghost_frame_idx#2 game_logic::ghost1_bob_xfine#0 game_logic::$27 ] { } ) always clobbers reg byte a Statement [142] game_logic::$28 = game_logic::ghost1_bob_xfine#0 & 3 [ pacman_ch1_enabled ghost2_xfine ghost2_yfine ghost2_direction ghost3_xfine ghost3_yfine ghost3_direction ghost4_xfine ghost4_yfine ghost4_direction game_logic::ghost_frame_idx#2 game_logic::$27 game_logic::$28 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled ghost2_xfine ghost2_yfine ghost2_direction ghost3_xfine ghost3_yfine ghost3_direction ghost4_xfine ghost4_yfine ghost4_direction game_logic::ghost_frame_idx#2 game_logic::$27 game_logic::$28 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for mem[1] [ game_logic::$27 ] +Removing always clobbered register reg byte a as potential for zp[1]:318 [ game_logic::$27 ] Statement [143] game_logic::$29 = ghost_frames[game_logic::$27] + game_logic::$28 [ pacman_ch1_enabled ghost2_xfine ghost2_yfine ghost2_direction ghost3_xfine ghost3_yfine ghost3_direction ghost4_xfine ghost4_yfine ghost4_direction game_logic::ghost_frame_idx#2 game_logic::$29 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled ghost2_xfine ghost2_yfine ghost2_direction ghost3_xfine ghost3_yfine ghost3_direction ghost4_xfine ghost4_yfine ghost4_direction game_logic::ghost_frame_idx#2 game_logic::$29 ] { } ) always clobbers reg byte a Statement [146] game_logic::$31 = game_logic::ghost2_bob_xfine#0 >> 2 [ pacman_ch1_enabled ghost2_yfine ghost2_direction ghost3_xfine ghost3_yfine ghost3_direction ghost4_xfine ghost4_yfine ghost4_direction game_logic::ghost_frame_idx#2 game_logic::ghost2_bob_xfine#0 game_logic::$31 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled ghost2_yfine ghost2_direction ghost3_xfine ghost3_yfine ghost3_direction ghost4_xfine ghost4_yfine ghost4_direction game_logic::ghost_frame_idx#2 game_logic::ghost2_bob_xfine#0 game_logic::$31 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for mem[1] [ game_logic::ghost2_bob_xfine#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:340 [ game_logic::ghost2_bob_xfine#0 ] Statement [150] game_logic::$33 = ghost2_direction | game_logic::ghost_frame_idx#2 [ pacman_ch1_enabled ghost3_xfine ghost3_yfine ghost3_direction ghost4_xfine ghost4_yfine ghost4_direction game_logic::ghost_frame_idx#2 game_logic::ghost2_bob_xfine#0 game_logic::$33 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled ghost3_xfine ghost3_yfine ghost3_direction ghost4_xfine ghost4_yfine ghost4_direction game_logic::ghost_frame_idx#2 game_logic::ghost2_bob_xfine#0 game_logic::$33 ] { } ) always clobbers reg byte a Statement [151] game_logic::$34 = game_logic::ghost2_bob_xfine#0 & 3 [ pacman_ch1_enabled ghost3_xfine ghost3_yfine ghost3_direction ghost4_xfine ghost4_yfine ghost4_direction game_logic::ghost_frame_idx#2 game_logic::$33 game_logic::$34 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled ghost3_xfine ghost3_yfine ghost3_direction ghost4_xfine ghost4_yfine ghost4_direction game_logic::ghost_frame_idx#2 game_logic::$33 game_logic::$34 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for mem[1] [ game_logic::$33 ] +Removing always clobbered register reg byte a as potential for zp[1]:319 [ game_logic::$33 ] Statement [152] game_logic::$35 = ghost_frames[game_logic::$33] + game_logic::$34 [ pacman_ch1_enabled ghost3_xfine ghost3_yfine ghost3_direction ghost4_xfine ghost4_yfine ghost4_direction game_logic::ghost_frame_idx#2 game_logic::$35 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled ghost3_xfine ghost3_yfine ghost3_direction ghost4_xfine ghost4_yfine ghost4_direction game_logic::ghost_frame_idx#2 game_logic::$35 ] { } ) always clobbers reg byte a Statement [155] game_logic::$37 = game_logic::ghost3_bob_xfine#0 >> 2 [ pacman_ch1_enabled ghost3_yfine ghost3_direction ghost4_xfine ghost4_yfine ghost4_direction game_logic::ghost_frame_idx#2 game_logic::ghost3_bob_xfine#0 game_logic::$37 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled ghost3_yfine ghost3_direction ghost4_xfine ghost4_yfine ghost4_direction game_logic::ghost_frame_idx#2 game_logic::ghost3_bob_xfine#0 game_logic::$37 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for mem[1] [ game_logic::ghost3_bob_xfine#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:341 [ game_logic::ghost3_bob_xfine#0 ] Statement [159] game_logic::$39 = ghost3_direction | game_logic::ghost_frame_idx#2 [ pacman_ch1_enabled ghost4_xfine ghost4_yfine ghost4_direction game_logic::ghost_frame_idx#2 game_logic::ghost3_bob_xfine#0 game_logic::$39 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled ghost4_xfine ghost4_yfine ghost4_direction game_logic::ghost_frame_idx#2 game_logic::ghost3_bob_xfine#0 game_logic::$39 ] { } ) always clobbers reg byte a Statement [160] game_logic::$40 = game_logic::ghost3_bob_xfine#0 & 3 [ pacman_ch1_enabled ghost4_xfine ghost4_yfine ghost4_direction game_logic::ghost_frame_idx#2 game_logic::$39 game_logic::$40 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled ghost4_xfine ghost4_yfine ghost4_direction game_logic::ghost_frame_idx#2 game_logic::$39 game_logic::$40 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for mem[1] [ game_logic::$39 ] +Removing always clobbered register reg byte a as potential for zp[1]:320 [ game_logic::$39 ] Statement [161] game_logic::$41 = ghost_frames[game_logic::$39] + game_logic::$40 [ pacman_ch1_enabled ghost4_xfine ghost4_yfine ghost4_direction game_logic::ghost_frame_idx#2 game_logic::$41 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled ghost4_xfine ghost4_yfine ghost4_direction game_logic::ghost_frame_idx#2 game_logic::$41 ] { } ) always clobbers reg byte a Statement [164] game_logic::$43 = game_logic::ghost4_bob_xfine#0 >> 2 [ pacman_ch1_enabled ghost4_yfine ghost4_direction game_logic::ghost_frame_idx#2 game_logic::ghost4_bob_xfine#0 game_logic::$43 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled ghost4_yfine ghost4_direction game_logic::ghost_frame_idx#2 game_logic::ghost4_bob_xfine#0 game_logic::$43 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for mem[1] [ game_logic::ghost4_bob_xfine#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:342 [ game_logic::ghost4_bob_xfine#0 ] Statement [168] game_logic::$45 = ghost4_direction | game_logic::ghost_frame_idx#2 [ pacman_ch1_enabled game_logic::ghost4_bob_xfine#0 game_logic::$45 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled game_logic::ghost4_bob_xfine#0 game_logic::$45 ] { } ) always clobbers reg byte a Statement [169] game_logic::$46 = game_logic::ghost4_bob_xfine#0 & 3 [ pacman_ch1_enabled game_logic::$45 game_logic::$46 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled game_logic::$45 game_logic::$46 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for mem[1] [ game_logic::$45 ] +Removing always clobbered register reg byte a as potential for zp[1]:321 [ game_logic::$45 ] Statement [170] game_logic::$47 = ghost_frames[game_logic::$45] + game_logic::$46 [ pacman_ch1_enabled game_logic::$47 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled game_logic::$47 ] { } ) always clobbers reg byte a Statement [173] if(ghosts_mode==SCATTER) goto game_logic::@45 [ pacman_ch1_enabled pill_count pacman_lives pacman_xfine pacman_yfine ghosts_mode ghosts_mode_count ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pill_count pacman_lives pacman_xfine pacman_yfine ghosts_mode ghosts_mode_count ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine ] { } ) always clobbers reg byte a Statement [174] if(ghosts_mode==CHASE) goto game_logic::@46 [ pacman_ch1_enabled pill_count pacman_lives pacman_xfine pacman_yfine ghosts_mode ghosts_mode_count ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pill_count pacman_lives pacman_xfine pacman_yfine ghosts_mode ghosts_mode_count ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine ] { } ) always clobbers reg byte a @@ -13621,17 +13513,15 @@ Statement [183] ghost3_reverse = 1 [ pacman_ch1_enabled pill_count pacman_lives Statement [184] ghost4_reverse = 1 [ pacman_ch1_enabled pill_count pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pill_count pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine ] { } ) always clobbers reg byte a Statement [185] game_logic::pacman_xtile#0 = pacman_xfine >> 1 [ pacman_ch1_enabled pill_count pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pill_count pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 ] { } ) always clobbers reg byte a Statement [186] game_logic::pacman_ytile#0 = pacman_yfine >> 1 [ pacman_ch1_enabled pill_count pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 game_logic::pacman_ytile#0 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pill_count pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 game_logic::pacman_ytile#0 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for mem[1] [ game_logic::pacman_xtile#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:337 [ game_logic::pacman_xtile#0 ] Statement [187] game_logic::$210 = game_logic::pacman_ytile#0 << 1 [ pacman_ch1_enabled pill_count pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 game_logic::$210 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pill_count pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 game_logic::$210 ] { } ) always clobbers reg byte a Statement [188] game_logic::ytiles#0 = LEVEL_TILES + LEVEL_YTILE_OFFSET[game_logic::$210] [ pacman_ch1_enabled pill_count pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 game_logic::$210 game_logic::ytiles#0 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pill_count pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 game_logic::$210 game_logic::ytiles#0 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for mem[1] [ game_logic::$210 ] +Removing always clobbered register reg byte a as potential for zp[1]:353 [ game_logic::$210 ] Statement [189] game_logic::tile_id#0 = game_logic::ytiles#0[game_logic::pacman_xtile#0] [ pacman_ch1_enabled pill_count pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 game_logic::$210 game_logic::ytiles#0 game_logic::tile_id#0 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pill_count pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 game_logic::$210 game_logic::ytiles#0 game_logic::tile_id#0 ] { } ) always clobbers reg byte a Statement [190] if(TILES_TYPE[game_logic::tile_id#0]==PILL) goto game_logic::@49 [ pacman_ch1_enabled pill_count pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 game_logic::$210 game_logic::ytiles#0 game_logic::tile_id#0 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pill_count pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 game_logic::$210 game_logic::ytiles#0 game_logic::tile_id#0 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for mem[1] [ game_logic::tile_id#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:311 [ game_logic::tile_id#0 ] Statement [191] if(TILES_TYPE[game_logic::tile_id#0]!=POWERUP) goto game_logic::@50 [ pacman_ch1_enabled pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 game_logic::$210 game_logic::ytiles#0 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 game_logic::$210 game_logic::ytiles#0 ] { } ) always clobbers reg byte a -Statement [192] game_logic::ytiles#0[game_logic::pacman_xtile#0] = EMPTY [ pacman_ch1_enabled pacman_lives pacman_xfine pacman_yfine ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 game_logic::$210 game_logic::ytiles#0 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_lives pacman_xfine pacman_yfine ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 game_logic::$210 game_logic::ytiles#0 ] { } ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte y as potential for mem[1] [ game_logic::pacman_xtile#0 ] -Removing always clobbered register reg byte y as potential for mem[1] [ game_logic::$210 ] +Statement [192] game_logic::ytiles#0[game_logic::pacman_xtile#0] = EMPTY [ pacman_ch1_enabled pacman_lives pacman_xfine pacman_yfine ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 game_logic::$210 game_logic::ytiles#0 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_lives pacman_xfine pacman_yfine ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 game_logic::$210 game_logic::ytiles#0 ] { } ) always clobbers reg byte a Statement [193] game_logic::$65 = game_logic::pacman_xtile#0 >> 1 [ pacman_ch1_enabled pacman_lives pacman_xfine pacman_yfine ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 game_logic::$210 game_logic::ytiles#0 game_logic::$65 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_lives pacman_xfine pacman_yfine ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 game_logic::$210 game_logic::ytiles#0 game_logic::$65 ] { } ) always clobbers reg byte a Statement [195] game_logic::$66 = game_logic::pacman_xtile#0 & $fe [ pacman_ch1_enabled pacman_lives pacman_xfine pacman_yfine ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::$210 game_logic::ytiles#0 game_logic::$66 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_lives pacman_xfine pacman_yfine ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::$210 game_logic::ytiles#0 game_logic::$66 ] { } ) always clobbers reg byte a Statement [196] game_logic::$67 = game_logic::ytiles#0 + game_logic::$66 [ pacman_ch1_enabled pacman_lives pacman_xfine pacman_yfine ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::$210 game_logic::$67 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_lives pacman_xfine pacman_yfine ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::$210 game_logic::$67 ] { } ) always clobbers reg byte a @@ -13640,27 +13530,27 @@ Statement [200] ghosts_mode = FRIGHTENED [ pacman_ch1_enabled pacman_lives pacma Statement [201] ghosts_mode_count = 0 [ pacman_ch1_enabled pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine ] { } ) always clobbers reg byte a Statement [202] game_logic::$75 = pacman_xfine - ghost1_xfine [ pacman_ch1_enabled pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::$75 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::$75 ] { } ) always clobbers reg byte a Statement [203] game_logic::$77 = pacman_yfine - ghost1_yfine [ pacman_ch1_enabled pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::$75 game_logic::$77 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::$75 game_logic::$77 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for mem[1] [ game_logic::$75 ] +Removing always clobbered register reg byte a as potential for zp[1]:322 [ game_logic::$75 ] Statement [204] if(ABS[game_logic::$75]>=2) goto game_logic::@64 [ pacman_ch1_enabled pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::$77 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::$77 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for mem[1] [ game_logic::$77 ] +Removing always clobbered register reg byte a as potential for zp[1]:323 [ game_logic::$77 ] Statement [205] if(ABS[game_logic::$77]<2) goto game_logic::@51 [ pacman_ch1_enabled pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine ] { } ) always clobbers reg byte a Statement [206] game_logic::$80 = pacman_xfine - ghost2_xfine [ pacman_ch1_enabled pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::$80 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::$80 ] { } ) always clobbers reg byte a Statement [207] game_logic::$82 = pacman_yfine - ghost2_yfine [ pacman_ch1_enabled pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::$80 game_logic::$82 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::$80 game_logic::$82 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for mem[1] [ game_logic::$80 ] +Removing always clobbered register reg byte a as potential for zp[1]:324 [ game_logic::$80 ] Statement [208] if(ABS[game_logic::$80]>=2) goto game_logic::@65 [ pacman_ch1_enabled pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::$82 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::$82 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for mem[1] [ game_logic::$82 ] +Removing always clobbered register reg byte a as potential for zp[1]:325 [ game_logic::$82 ] Statement [209] if(ABS[game_logic::$82]<2) goto game_logic::@52 [ pacman_ch1_enabled pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine ] { } ) always clobbers reg byte a Statement [210] game_logic::$85 = pacman_xfine - ghost3_xfine [ pacman_ch1_enabled pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost3_yfine ghost4_xfine ghost4_yfine game_logic::$85 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost3_yfine ghost4_xfine ghost4_yfine game_logic::$85 ] { } ) always clobbers reg byte a Statement [211] game_logic::$87 = pacman_yfine - ghost3_yfine [ pacman_ch1_enabled pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost4_xfine ghost4_yfine game_logic::$85 game_logic::$87 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost4_xfine ghost4_yfine game_logic::$85 game_logic::$87 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for mem[1] [ game_logic::$85 ] +Removing always clobbered register reg byte a as potential for zp[1]:326 [ game_logic::$85 ] Statement [212] if(ABS[game_logic::$85]>=2) goto game_logic::@66 [ pacman_ch1_enabled pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost4_xfine ghost4_yfine game_logic::$87 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost4_xfine ghost4_yfine game_logic::$87 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for mem[1] [ game_logic::$87 ] +Removing always clobbered register reg byte a as potential for zp[1]:327 [ game_logic::$87 ] Statement [213] if(ABS[game_logic::$87]<2) goto game_logic::@53 [ pacman_ch1_enabled pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost4_xfine ghost4_yfine ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost4_xfine ghost4_yfine ] { } ) always clobbers reg byte a Statement [214] game_logic::$90 = pacman_xfine - ghost4_xfine [ pacman_ch1_enabled pacman_lives pacman_yfine ghosts_mode ghost4_yfine game_logic::$90 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_lives pacman_yfine ghosts_mode ghost4_yfine game_logic::$90 ] { } ) always clobbers reg byte a Statement [215] game_logic::$92 = pacman_yfine - ghost4_yfine [ pacman_ch1_enabled pacman_lives ghosts_mode game_logic::$90 game_logic::$92 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_lives ghosts_mode game_logic::$90 game_logic::$92 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for mem[1] [ game_logic::$90 ] +Removing always clobbered register reg byte a as potential for zp[1]:328 [ game_logic::$90 ] Statement [216] if(ABS[game_logic::$90]>=2) goto game_logic::@return [ pacman_ch1_enabled pacman_lives ghosts_mode game_logic::$92 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_lives ghosts_mode game_logic::$92 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for mem[1] [ game_logic::$92 ] +Removing always clobbered register reg byte a as potential for zp[1]:329 [ game_logic::$92 ] Statement [217] if(ABS[game_logic::$92]<2) goto game_logic::@67 [ pacman_ch1_enabled pacman_lives ghosts_mode ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_lives ghosts_mode ] { } ) always clobbers reg byte a Statement [218] if(ghosts_mode==FRIGHTENED) goto game_logic::@54 [ pacman_ch1_enabled pacman_lives ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_lives ] { } ) always clobbers reg byte a Statement [221] ghost4_direction = STOP [ pacman_ch1_enabled ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled ] { } ) always clobbers reg byte a @@ -13686,7 +13576,7 @@ Statement [246] ghost1_xfine = $32 [ pacman_ch1_enabled ] ( game_logic:89 [ pacm Statement [247] ghost1_yfine = $23 [ pacman_ch1_enabled ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled ] { } ) always clobbers reg byte a Statement [248] ghost1_substep = 0 [ pacman_ch1_enabled ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled ] { } ) always clobbers reg byte a Statement [249] ghost1_respawn = $32 [ pacman_ch1_enabled ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled ] { } ) always clobbers reg byte a -Statement [250] game_logic::ytiles#0[game_logic::pacman_xtile#0] = EMPTY [ pacman_ch1_enabled pill_count pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 game_logic::$210 game_logic::ytiles#0 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pill_count pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 game_logic::$210 game_logic::ytiles#0 ] { } ) always clobbers reg byte a reg byte y +Statement [250] game_logic::ytiles#0[game_logic::pacman_xtile#0] = EMPTY [ pacman_ch1_enabled pill_count pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 game_logic::$210 game_logic::ytiles#0 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pill_count pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 game_logic::$210 game_logic::ytiles#0 ] { } ) always clobbers reg byte a Statement [251] game_logic::$69 = game_logic::pacman_xtile#0 >> 1 [ pacman_ch1_enabled pill_count pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 game_logic::$210 game_logic::ytiles#0 game_logic::$69 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pill_count pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 game_logic::$210 game_logic::ytiles#0 game_logic::$69 ] { } ) always clobbers reg byte a Statement [253] game_logic::$70 = game_logic::pacman_xtile#0 & $fe [ pacman_ch1_enabled pill_count pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::$210 game_logic::ytiles#0 game_logic::$70 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pill_count pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::$210 game_logic::ytiles#0 game_logic::$70 ] { } ) always clobbers reg byte a Statement [254] game_logic::$71 = game_logic::ytiles#0 + game_logic::$70 [ pacman_ch1_enabled pill_count pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::$210 game_logic::$71 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pill_count pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::$210 game_logic::$71 ] { } ) always clobbers reg byte a @@ -13706,20 +13596,20 @@ Statement [269] if(ghost4_direction==DOWN) goto game_logic::@74 [ pacman_ch1_ena Statement [270] if(ghost4_direction==LEFT) goto game_logic::@75 [ pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost4_xfine ghost4_yfine ghost4_direction ghost4_substep ghost4_reverse ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost4_xfine ghost4_yfine ghost4_direction ghost4_substep ghost4_reverse ] { } ) always clobbers reg byte a Statement [271] if(ghost4_direction!=UP) goto game_logic::@76 [ pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost4_xfine ghost4_yfine ghost4_direction ghost4_substep ghost4_reverse ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost4_xfine ghost4_yfine ghost4_direction ghost4_substep ghost4_reverse ] { } ) always clobbers reg byte a Statement [274] if(ghost4_substep!=0) goto game_logic::@82 [ pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost4_xfine ghost4_yfine ghost4_direction ghost4_reverse game_logic::$220 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost4_xfine ghost4_yfine ghost4_direction ghost4_reverse game_logic::$220 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for mem[1] [ game_logic::$220 ] +Removing always clobbered register reg byte a as potential for zp[1]:330 [ game_logic::$220 ] Statement [276] ghost4_substep = 0 [ pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost4_xfine ghost4_yfine ghost4_direction ghost4_reverse ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost4_xfine ghost4_yfine ghost4_direction ghost4_reverse ] { } ) always clobbers reg byte a Statement [277] if(0!=ghost4_reverse) goto game_logic::@78 [ pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost4_xfine ghost4_yfine ghost4_direction ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost4_xfine ghost4_yfine ghost4_direction ] { } ) always clobbers reg byte a Statement [278] game_logic::ghost4_xtile#0 = ghost4_xfine >> 1 [ pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost4_yfine ghost4_direction game_logic::ghost4_xtile#0 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost4_yfine ghost4_direction game_logic::ghost4_xtile#0 ] { { level_tile_directions::xtile#0 = level_tile_directions::xtile#5 game_logic::ghost4_xtile#0 } { level_tile_directions::ytile#0 = level_tile_directions::ytile#5 game_logic::ghost4_ytile#0 } { level_tile_directions::return#2 = level_tile_directions::return#3 } } ) always clobbers reg byte a Statement [279] game_logic::ghost4_ytile#0 = ghost4_yfine >> 1 [ pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost4_direction game_logic::ghost4_xtile#0 game_logic::ghost4_ytile#0 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost4_direction game_logic::ghost4_xtile#0 game_logic::ghost4_ytile#0 ] { { level_tile_directions::xtile#0 = level_tile_directions::xtile#5 game_logic::ghost4_xtile#0 } { level_tile_directions::ytile#0 = level_tile_directions::ytile#5 game_logic::ghost4_ytile#0 } { level_tile_directions::return#2 = level_tile_directions::return#3 } } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for mem[1] [ game_logic::ghost4_xtile#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:354 [ game_logic::ghost4_xtile#0 ] Statement [285] game_logic::open_directions#1 = game_logic::open_directions#0 & DIRECTION_ELIMINATE[ghost4_direction] [ pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode game_logic::ghost4_xtile#0 game_logic::ghost4_ytile#0 game_logic::open_directions#1 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode game_logic::ghost4_xtile#0 game_logic::ghost4_ytile#0 game_logic::open_directions#1 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for mem[1] [ game_logic::ghost4_ytile#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:355 [ game_logic::ghost4_ytile#0 ] Statement [286] if(ghosts_mode==FRIGHTENED) goto game_logic::@79 [ pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode game_logic::ghost4_xtile#0 game_logic::ghost4_ytile#0 game_logic::open_directions#1 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode game_logic::ghost4_xtile#0 game_logic::ghost4_ytile#0 game_logic::open_directions#1 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for mem[1] [ game_logic::open_directions#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:345 [ game_logic::open_directions#1 ] Statement [287] if(ghosts_mode==SCATTER) goto game_logic::@80 [ pacman_ch1_enabled pacman_xfine pacman_yfine game_logic::ghost4_xtile#0 game_logic::ghost4_ytile#0 game_logic::open_directions#1 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_xfine pacman_yfine game_logic::ghost4_xtile#0 game_logic::ghost4_ytile#0 game_logic::open_directions#1 ] { } ) always clobbers reg byte a Statement [288] game_logic::target_xtile#2 = pacman_xfine >> 1 [ pacman_ch1_enabled pacman_yfine game_logic::ghost4_xtile#0 game_logic::ghost4_ytile#0 game_logic::open_directions#1 game_logic::target_xtile#2 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_yfine game_logic::ghost4_xtile#0 game_logic::ghost4_ytile#0 game_logic::open_directions#1 game_logic::target_xtile#2 ] { } ) always clobbers reg byte a Statement [289] game_logic::target_ytile#2 = pacman_yfine >> 1 [ pacman_ch1_enabled game_logic::ghost4_xtile#0 game_logic::ghost4_ytile#0 game_logic::open_directions#1 game_logic::target_xtile#2 game_logic::target_ytile#2 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled game_logic::ghost4_xtile#0 game_logic::ghost4_ytile#0 game_logic::open_directions#1 game_logic::target_xtile#2 game_logic::target_ytile#2 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for mem[1] [ game_logic::target_xtile#3 game_logic::target_xtile#2 ] +Removing always clobbered register reg byte a as potential for zp[1]:307 [ game_logic::target_xtile#3 game_logic::target_xtile#2 ] Statement [300] ghost4_direction = DIRECTION_SINGLE[game_logic::open_directions#1] [ pacman_ch1_enabled ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled ] { } ) always clobbers reg byte a Statement [301] ghost4_direction = DIRECTION_REVERSE[ghost4_direction] [ pacman_ch1_enabled ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled ] { } ) always clobbers reg byte a reg byte y Statement [302] ghost4_reverse = 0 [ pacman_ch1_enabled ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled ] { } ) always clobbers reg byte a @@ -13739,20 +13629,20 @@ Statement [319] if(ghost3_direction==DOWN) goto game_logic::@91 [ pacman_ch1_ena Statement [320] if(ghost3_direction==LEFT) goto game_logic::@92 [ pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost3_xfine ghost3_yfine ghost3_direction ghost3_substep ghost3_reverse ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost3_xfine ghost3_yfine ghost3_direction ghost3_substep ghost3_reverse ] { } ) always clobbers reg byte a Statement [321] if(ghost3_direction!=UP) goto game_logic::@93 [ pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost3_xfine ghost3_yfine ghost3_direction ghost3_substep ghost3_reverse ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost3_xfine ghost3_yfine ghost3_direction ghost3_substep ghost3_reverse ] { } ) always clobbers reg byte a Statement [324] if(ghost3_substep!=0) goto game_logic::@99 [ pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost3_xfine ghost3_yfine ghost3_direction ghost3_reverse game_logic::$223 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost3_xfine ghost3_yfine ghost3_direction ghost3_reverse game_logic::$223 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for mem[1] [ game_logic::$223 ] +Removing always clobbered register reg byte a as potential for zp[1]:331 [ game_logic::$223 ] Statement [326] ghost3_substep = 0 [ pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost3_xfine ghost3_yfine ghost3_direction ghost3_reverse ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost3_xfine ghost3_yfine ghost3_direction ghost3_reverse ] { } ) always clobbers reg byte a Statement [327] if(0!=ghost3_reverse) goto game_logic::@95 [ pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost3_xfine ghost3_yfine ghost3_direction ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost3_xfine ghost3_yfine ghost3_direction ] { } ) always clobbers reg byte a Statement [328] game_logic::ghost3_xtile#0 = ghost3_xfine >> 1 [ pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost3_yfine ghost3_direction game_logic::ghost3_xtile#0 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost3_yfine ghost3_direction game_logic::ghost3_xtile#0 ] { { level_tile_directions::xtile#1 = level_tile_directions::xtile#5 game_logic::ghost3_xtile#0 } { level_tile_directions::ytile#1 = level_tile_directions::ytile#5 game_logic::ghost3_ytile#0 } { level_tile_directions::return#10 = level_tile_directions::return#2 } } ) always clobbers reg byte a Statement [329] game_logic::ghost3_ytile#0 = ghost3_yfine >> 1 [ pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost3_direction game_logic::ghost3_xtile#0 game_logic::ghost3_ytile#0 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost3_direction game_logic::ghost3_xtile#0 game_logic::ghost3_ytile#0 ] { { level_tile_directions::xtile#1 = level_tile_directions::xtile#5 game_logic::ghost3_xtile#0 } { level_tile_directions::ytile#1 = level_tile_directions::ytile#5 game_logic::ghost3_ytile#0 } { level_tile_directions::return#10 = level_tile_directions::return#2 } } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for mem[1] [ game_logic::ghost3_xtile#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:356 [ game_logic::ghost3_xtile#0 ] Statement [335] game_logic::open_directions1#1 = game_logic::open_directions1#0 & DIRECTION_ELIMINATE[ghost3_direction] [ pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode game_logic::ghost3_xtile#0 game_logic::ghost3_ytile#0 game_logic::open_directions1#1 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode game_logic::ghost3_xtile#0 game_logic::ghost3_ytile#0 game_logic::open_directions1#1 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for mem[1] [ game_logic::ghost3_ytile#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:357 [ game_logic::ghost3_ytile#0 ] Statement [336] if(ghosts_mode==FRIGHTENED) goto game_logic::@96 [ pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode game_logic::ghost3_xtile#0 game_logic::ghost3_ytile#0 game_logic::open_directions1#1 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode game_logic::ghost3_xtile#0 game_logic::ghost3_ytile#0 game_logic::open_directions1#1 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for mem[1] [ game_logic::open_directions1#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:346 [ game_logic::open_directions1#1 ] Statement [337] if(ghosts_mode==SCATTER) goto game_logic::@97 [ pacman_ch1_enabled pacman_xfine pacman_yfine game_logic::ghost3_xtile#0 game_logic::ghost3_ytile#0 game_logic::open_directions1#1 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_xfine pacman_yfine game_logic::ghost3_xtile#0 game_logic::ghost3_ytile#0 game_logic::open_directions1#1 ] { } ) always clobbers reg byte a Statement [338] game_logic::target_xtile1#2 = pacman_xfine >> 1 [ pacman_ch1_enabled pacman_yfine game_logic::ghost3_xtile#0 game_logic::ghost3_ytile#0 game_logic::open_directions1#1 game_logic::target_xtile1#2 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_yfine game_logic::ghost3_xtile#0 game_logic::ghost3_ytile#0 game_logic::open_directions1#1 game_logic::target_xtile1#2 ] { } ) always clobbers reg byte a Statement [339] game_logic::target_ytile1#2 = pacman_yfine >> 1 [ pacman_ch1_enabled game_logic::ghost3_xtile#0 game_logic::ghost3_ytile#0 game_logic::open_directions1#1 game_logic::target_xtile1#2 game_logic::target_ytile1#2 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled game_logic::ghost3_xtile#0 game_logic::ghost3_ytile#0 game_logic::open_directions1#1 game_logic::target_xtile1#2 game_logic::target_ytile1#2 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for mem[1] [ game_logic::target_xtile1#3 game_logic::target_xtile1#2 ] +Removing always clobbered register reg byte a as potential for zp[1]:308 [ game_logic::target_xtile1#3 game_logic::target_xtile1#2 ] Statement [350] ghost3_direction = DIRECTION_SINGLE[game_logic::open_directions1#1] [ pacman_ch1_enabled ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled ] { } ) always clobbers reg byte a Statement [351] ghost3_direction = DIRECTION_REVERSE[ghost3_direction] [ pacman_ch1_enabled ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled ] { } ) always clobbers reg byte a reg byte y Statement [352] ghost3_reverse = 0 [ pacman_ch1_enabled ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled ] { } ) always clobbers reg byte a @@ -13772,20 +13662,20 @@ Statement [369] if(ghost2_direction==DOWN) goto game_logic::@108 [ pacman_ch1_en Statement [370] if(ghost2_direction==LEFT) goto game_logic::@109 [ pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost2_xfine ghost2_yfine ghost2_direction ghost2_substep ghost2_reverse ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost2_xfine ghost2_yfine ghost2_direction ghost2_substep ghost2_reverse ] { } ) always clobbers reg byte a Statement [371] if(ghost2_direction!=UP) goto game_logic::@110 [ pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost2_xfine ghost2_yfine ghost2_direction ghost2_substep ghost2_reverse ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost2_xfine ghost2_yfine ghost2_direction ghost2_substep ghost2_reverse ] { } ) always clobbers reg byte a Statement [374] if(ghost2_substep!=0) goto game_logic::@116 [ pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost2_xfine ghost2_yfine ghost2_direction ghost2_reverse game_logic::$226 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost2_xfine ghost2_yfine ghost2_direction ghost2_reverse game_logic::$226 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for mem[1] [ game_logic::$226 ] +Removing always clobbered register reg byte a as potential for zp[1]:332 [ game_logic::$226 ] Statement [376] ghost2_substep = 0 [ pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost2_xfine ghost2_yfine ghost2_direction ghost2_reverse ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost2_xfine ghost2_yfine ghost2_direction ghost2_reverse ] { } ) always clobbers reg byte a Statement [377] if(0!=ghost2_reverse) goto game_logic::@112 [ pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost2_xfine ghost2_yfine ghost2_direction ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost2_xfine ghost2_yfine ghost2_direction ] { } ) always clobbers reg byte a Statement [378] game_logic::ghost2_xtile#0 = ghost2_xfine >> 1 [ pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost2_yfine ghost2_direction game_logic::ghost2_xtile#0 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost2_yfine ghost2_direction game_logic::ghost2_xtile#0 ] { { level_tile_directions::xtile#2 = level_tile_directions::xtile#5 game_logic::ghost2_xtile#0 } { level_tile_directions::ytile#2 = level_tile_directions::ytile#5 game_logic::ghost2_ytile#0 } { level_tile_directions::return#11 = level_tile_directions::return#2 } } ) always clobbers reg byte a Statement [379] game_logic::ghost2_ytile#0 = ghost2_yfine >> 1 [ pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost2_direction game_logic::ghost2_xtile#0 game_logic::ghost2_ytile#0 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost2_direction game_logic::ghost2_xtile#0 game_logic::ghost2_ytile#0 ] { { level_tile_directions::xtile#2 = level_tile_directions::xtile#5 game_logic::ghost2_xtile#0 } { level_tile_directions::ytile#2 = level_tile_directions::ytile#5 game_logic::ghost2_ytile#0 } { level_tile_directions::return#11 = level_tile_directions::return#2 } } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for mem[1] [ game_logic::ghost2_xtile#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:358 [ game_logic::ghost2_xtile#0 ] Statement [385] game_logic::open_directions2#1 = game_logic::open_directions2#0 & DIRECTION_ELIMINATE[ghost2_direction] [ pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode game_logic::ghost2_xtile#0 game_logic::ghost2_ytile#0 game_logic::open_directions2#1 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode game_logic::ghost2_xtile#0 game_logic::ghost2_ytile#0 game_logic::open_directions2#1 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for mem[1] [ game_logic::ghost2_ytile#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:359 [ game_logic::ghost2_ytile#0 ] Statement [386] if(ghosts_mode==FRIGHTENED) goto game_logic::@113 [ pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode game_logic::ghost2_xtile#0 game_logic::ghost2_ytile#0 game_logic::open_directions2#1 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode game_logic::ghost2_xtile#0 game_logic::ghost2_ytile#0 game_logic::open_directions2#1 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for mem[1] [ game_logic::open_directions2#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:347 [ game_logic::open_directions2#1 ] Statement [387] if(ghosts_mode==SCATTER) goto game_logic::@114 [ pacman_ch1_enabled pacman_xfine pacman_yfine game_logic::ghost2_xtile#0 game_logic::ghost2_ytile#0 game_logic::open_directions2#1 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_xfine pacman_yfine game_logic::ghost2_xtile#0 game_logic::ghost2_ytile#0 game_logic::open_directions2#1 ] { } ) always clobbers reg byte a Statement [388] game_logic::target_xtile2#2 = pacman_xfine >> 1 [ pacman_ch1_enabled pacman_yfine game_logic::ghost2_xtile#0 game_logic::ghost2_ytile#0 game_logic::open_directions2#1 game_logic::target_xtile2#2 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_yfine game_logic::ghost2_xtile#0 game_logic::ghost2_ytile#0 game_logic::open_directions2#1 game_logic::target_xtile2#2 ] { } ) always clobbers reg byte a Statement [389] game_logic::target_ytile2#2 = pacman_yfine >> 1 [ pacman_ch1_enabled game_logic::ghost2_xtile#0 game_logic::ghost2_ytile#0 game_logic::open_directions2#1 game_logic::target_xtile2#2 game_logic::target_ytile2#2 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled game_logic::ghost2_xtile#0 game_logic::ghost2_ytile#0 game_logic::open_directions2#1 game_logic::target_xtile2#2 game_logic::target_ytile2#2 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for mem[1] [ game_logic::target_xtile2#3 game_logic::target_xtile2#2 ] +Removing always clobbered register reg byte a as potential for zp[1]:309 [ game_logic::target_xtile2#3 game_logic::target_xtile2#2 ] Statement [400] ghost2_direction = DIRECTION_SINGLE[game_logic::open_directions2#1] [ pacman_ch1_enabled ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled ] { } ) always clobbers reg byte a Statement [401] ghost2_direction = DIRECTION_REVERSE[ghost2_direction] [ pacman_ch1_enabled ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled ] { } ) always clobbers reg byte a reg byte y Statement [402] ghost2_reverse = 0 [ pacman_ch1_enabled ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled ] { } ) always clobbers reg byte a @@ -13805,20 +13695,20 @@ Statement [419] if(ghost1_direction==DOWN) goto game_logic::@125 [ pacman_ch1_en Statement [420] if(ghost1_direction==LEFT) goto game_logic::@126 [ pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost1_direction ghost1_substep ghost1_reverse ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost1_direction ghost1_substep ghost1_reverse ] { } ) always clobbers reg byte a Statement [421] if(ghost1_direction!=UP) goto game_logic::@127 [ pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost1_direction ghost1_substep ghost1_reverse ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost1_direction ghost1_substep ghost1_reverse ] { } ) always clobbers reg byte a Statement [424] if(ghost1_substep!=0) goto game_logic::@133 [ pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost1_direction ghost1_reverse game_logic::$229 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost1_direction ghost1_reverse game_logic::$229 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for mem[1] [ game_logic::$229 ] +Removing always clobbered register reg byte a as potential for zp[1]:333 [ game_logic::$229 ] Statement [426] ghost1_substep = 0 [ pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost1_direction ghost1_reverse ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost1_direction ghost1_reverse ] { } ) always clobbers reg byte a Statement [427] if(0!=ghost1_reverse) goto game_logic::@129 [ pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost1_direction ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost1_direction ] { } ) always clobbers reg byte a Statement [428] game_logic::ghost1_xtile#0 = ghost1_xfine >> 1 [ pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost1_yfine ghost1_direction game_logic::ghost1_xtile#0 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost1_yfine ghost1_direction game_logic::ghost1_xtile#0 ] { { level_tile_directions::xtile#3 = level_tile_directions::xtile#5 game_logic::ghost1_xtile#0 } { level_tile_directions::ytile#3 = level_tile_directions::ytile#5 game_logic::ghost1_ytile#0 } { level_tile_directions::return#12 = level_tile_directions::return#2 } } ) always clobbers reg byte a Statement [429] game_logic::ghost1_ytile#0 = ghost1_yfine >> 1 [ pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost1_direction game_logic::ghost1_xtile#0 game_logic::ghost1_ytile#0 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode ghost1_direction game_logic::ghost1_xtile#0 game_logic::ghost1_ytile#0 ] { { level_tile_directions::xtile#3 = level_tile_directions::xtile#5 game_logic::ghost1_xtile#0 } { level_tile_directions::ytile#3 = level_tile_directions::ytile#5 game_logic::ghost1_ytile#0 } { level_tile_directions::return#12 = level_tile_directions::return#2 } } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for mem[1] [ game_logic::ghost1_xtile#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:360 [ game_logic::ghost1_xtile#0 ] Statement [435] game_logic::open_directions3#1 = game_logic::open_directions3#0 & DIRECTION_ELIMINATE[ghost1_direction] [ pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode game_logic::ghost1_xtile#0 game_logic::ghost1_ytile#0 game_logic::open_directions3#1 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode game_logic::ghost1_xtile#0 game_logic::ghost1_ytile#0 game_logic::open_directions3#1 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for mem[1] [ game_logic::ghost1_ytile#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:361 [ game_logic::ghost1_ytile#0 ] Statement [436] if(ghosts_mode==FRIGHTENED) goto game_logic::@130 [ pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode game_logic::ghost1_xtile#0 game_logic::ghost1_ytile#0 game_logic::open_directions3#1 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_xfine pacman_yfine ghosts_mode game_logic::ghost1_xtile#0 game_logic::ghost1_ytile#0 game_logic::open_directions3#1 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for mem[1] [ game_logic::open_directions3#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:348 [ game_logic::open_directions3#1 ] Statement [437] if(ghosts_mode==SCATTER) goto game_logic::@131 [ pacman_ch1_enabled pacman_xfine pacman_yfine game_logic::ghost1_xtile#0 game_logic::ghost1_ytile#0 game_logic::open_directions3#1 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_xfine pacman_yfine game_logic::ghost1_xtile#0 game_logic::ghost1_ytile#0 game_logic::open_directions3#1 ] { } ) always clobbers reg byte a Statement [438] game_logic::target_xtile3#2 = pacman_xfine >> 1 [ pacman_ch1_enabled pacman_yfine game_logic::ghost1_xtile#0 game_logic::ghost1_ytile#0 game_logic::open_directions3#1 game_logic::target_xtile3#2 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_yfine game_logic::ghost1_xtile#0 game_logic::ghost1_ytile#0 game_logic::open_directions3#1 game_logic::target_xtile3#2 ] { } ) always clobbers reg byte a Statement [439] game_logic::target_ytile3#2 = pacman_yfine >> 1 [ pacman_ch1_enabled game_logic::ghost1_xtile#0 game_logic::ghost1_ytile#0 game_logic::open_directions3#1 game_logic::target_xtile3#2 game_logic::target_ytile3#2 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled game_logic::ghost1_xtile#0 game_logic::ghost1_ytile#0 game_logic::open_directions3#1 game_logic::target_xtile3#2 game_logic::target_ytile3#2 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for mem[1] [ game_logic::target_xtile3#3 game_logic::target_xtile3#2 ] +Removing always clobbered register reg byte a as potential for zp[1]:310 [ game_logic::target_xtile3#3 game_logic::target_xtile3#2 ] Statement [450] ghost1_direction = DIRECTION_SINGLE[game_logic::open_directions3#1] [ pacman_ch1_enabled ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled ] { } ) always clobbers reg byte a Statement [451] ghost1_direction = DIRECTION_REVERSE[ghost1_direction] [ pacman_ch1_enabled ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled ] { } ) always clobbers reg byte a reg byte y Statement [452] ghost1_reverse = 0 [ pacman_ch1_enabled ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled ] { } ) always clobbers reg byte a @@ -13837,13 +13727,13 @@ Statement [468] if(pacman_direction==DOWN) goto game_logic::@141 [ pacman_ch1_en Statement [469] if(pacman_direction==LEFT) goto game_logic::@142 [ pacman_ch1_enabled pacman_xfine pacman_yfine pacman_direction pacman_substep ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_xfine pacman_yfine pacman_direction pacman_substep ] { } ) always clobbers reg byte a Statement [470] if(pacman_direction!=UP) goto game_logic::@143 [ pacman_ch1_enabled pacman_xfine pacman_yfine pacman_direction pacman_substep ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_xfine pacman_yfine pacman_direction pacman_substep ] { } ) always clobbers reg byte a Statement [473] if(pacman_substep!=0) goto game_logic::@147 [ pacman_ch1_enabled pacman_xfine pacman_yfine pacman_direction game_logic::$232 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_xfine pacman_yfine pacman_direction game_logic::$232 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for mem[1] [ game_logic::$232 ] +Removing always clobbered register reg byte a as potential for zp[1]:334 [ game_logic::$232 ] Statement [475] pacman_substep = 0 [ pacman_ch1_enabled pacman_xfine pacman_yfine pacman_direction ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_xfine pacman_yfine pacman_direction ] { { level_tile_directions::xtile#4 = level_tile_directions::xtile#5 game_logic::pacman_xtile1#0 } { level_tile_directions::ytile#4 = level_tile_directions::ytile#5 game_logic::pacman_ytile1#0 } { level_tile_directions::return#13 = level_tile_directions::return#2 } } ) always clobbers reg byte a Statement [476] game_logic::pacman_xtile1#0 = pacman_xfine >> 1 [ pacman_ch1_enabled pacman_yfine pacman_direction game_logic::pacman_xtile1#0 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_yfine pacman_direction game_logic::pacman_xtile1#0 ] { { level_tile_directions::xtile#4 = level_tile_directions::xtile#5 game_logic::pacman_xtile1#0 } { level_tile_directions::ytile#4 = level_tile_directions::ytile#5 game_logic::pacman_ytile1#0 } { level_tile_directions::return#13 = level_tile_directions::return#2 } } ) always clobbers reg byte a Statement [477] game_logic::pacman_ytile1#0 = pacman_yfine >> 1 [ pacman_ch1_enabled pacman_direction game_logic::pacman_xtile1#0 game_logic::pacman_ytile1#0 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_direction game_logic::pacman_xtile1#0 game_logic::pacman_ytile1#0 ] { { level_tile_directions::xtile#4 = level_tile_directions::xtile#5 game_logic::pacman_xtile1#0 } { level_tile_directions::ytile#4 = level_tile_directions::ytile#5 game_logic::pacman_ytile1#0 } { level_tile_directions::return#13 = level_tile_directions::return#2 } } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for mem[1] [ game_logic::pacman_xtile1#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:335 [ game_logic::pacman_xtile1#0 ] Statement [483] game_logic::$199 = *((char *)CIA1) & $f [ pacman_ch1_enabled pacman_direction game_logic::open_directions4#0 game_logic::$199 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_direction game_logic::open_directions4#0 game_logic::$199 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for mem[1] [ game_logic::open_directions4#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:351 [ game_logic::open_directions4#0 ] Statement [484] game_logic::$200 = game_logic::$199 ^ $f [ pacman_ch1_enabled pacman_direction game_logic::open_directions4#0 game_logic::$200 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_direction game_logic::open_directions4#0 game_logic::$200 ] { } ) always clobbers reg byte a Statement [485] game_logic::joy_directions#0 = game_logic::$200 << 2 [ pacman_ch1_enabled pacman_direction game_logic::open_directions4#0 game_logic::joy_directions#0 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_direction game_logic::open_directions4#0 game_logic::joy_directions#0 ] { } ) always clobbers reg byte a Statement [491] pacman_direction = pacman_direction & game_logic::open_directions4#0 [ pacman_ch1_enabled ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled ] { } ) always clobbers reg byte a @@ -14009,9 +13899,9 @@ Removing always clobbered register reg byte a as potential for zp[1]:212 [ choos Removing always clobbered register reg byte a as potential for zp[1]:207 [ choose_direction::target_ytile#4 choose_direction::target_ytile#2 choose_direction::target_ytile#3 choose_direction::target_ytile#0 choose_direction::target_ytile#1 ] Removing always clobbered register reg byte a as potential for zp[1]:229 [ choose_direction::open_directions#10 choose_direction::open_directions#2 choose_direction::open_directions#3 choose_direction::open_directions#0 choose_direction::open_directions#1 ] Statement [750] choose_direction::ydiff#0 = choose_direction::ghost_ytile#4 - choose_direction::target_ytile#4 [ choose_direction::open_directions#10 choose_direction::xdiff#0 choose_direction::ydiff#0 ] ( game_logic:89::choose_direction:296 [ pacman_ch1_idx pacman_ch1_enabled choose_direction::open_directions#10 choose_direction::xdiff#0 choose_direction::ydiff#0 ] { { choose_direction::ghost_xtile#0 = choose_direction::ghost_xtile#4 game_logic::ghost4_xtile#0 } { choose_direction::target_xtile#0 = choose_direction::target_xtile#4 game_logic::target_xtile#3 } { choose_direction::ghost_ytile#0 = choose_direction::ghost_ytile#4 game_logic::ghost4_ytile#0 } { choose_direction::target_ytile#0 = choose_direction::target_ytile#4 game_logic::target_ytile#3 } { choose_direction::open_directions#0 = choose_direction::open_directions#10 game_logic::open_directions#1 } { choose_direction::return#0 = choose_direction::return#10 } } game_logic:89::choose_direction:346 [ pacman_ch1_idx pacman_ch1_enabled choose_direction::open_directions#10 choose_direction::xdiff#0 choose_direction::ydiff#0 ] { { choose_direction::ghost_xtile#1 = choose_direction::ghost_xtile#4 game_logic::ghost3_xtile#0 } { choose_direction::target_xtile#1 = choose_direction::target_xtile#4 game_logic::target_xtile1#3 } { choose_direction::ghost_ytile#1 = choose_direction::ghost_ytile#4 game_logic::ghost3_ytile#0 } { choose_direction::target_ytile#1 = choose_direction::target_ytile#4 game_logic::target_ytile1#3 } { choose_direction::open_directions#1 = choose_direction::open_directions#10 game_logic::open_directions1#1 } { choose_direction::return#1 = choose_direction::return#10 } } game_logic:89::choose_direction:396 [ pacman_ch1_idx pacman_ch1_enabled choose_direction::open_directions#10 choose_direction::xdiff#0 choose_direction::ydiff#0 ] { { choose_direction::ghost_xtile#2 = choose_direction::ghost_xtile#4 game_logic::ghost2_xtile#0 } { choose_direction::target_xtile#2 = choose_direction::target_xtile#4 game_logic::target_xtile2#3 } { choose_direction::ghost_ytile#2 = choose_direction::ghost_ytile#4 game_logic::ghost2_ytile#0 } { choose_direction::target_ytile#2 = choose_direction::target_ytile#4 game_logic::target_ytile2#3 } { choose_direction::open_directions#10 = choose_direction::open_directions#2 game_logic::open_directions2#1 } { choose_direction::return#10 = choose_direction::return#2 } } game_logic:89::choose_direction:446 [ pacman_ch1_idx pacman_ch1_enabled choose_direction::open_directions#10 choose_direction::xdiff#0 choose_direction::ydiff#0 ] { { choose_direction::ghost_xtile#3 = choose_direction::ghost_xtile#4 game_logic::ghost1_xtile#0 } { choose_direction::target_xtile#3 = choose_direction::target_xtile#4 game_logic::target_xtile3#3 } { choose_direction::ghost_ytile#3 = choose_direction::ghost_ytile#4 game_logic::ghost1_ytile#0 } { choose_direction::target_ytile#3 = choose_direction::target_ytile#4 game_logic::target_ytile3#3 } { choose_direction::open_directions#10 = choose_direction::open_directions#3 game_logic::open_directions3#1 } { choose_direction::return#10 = choose_direction::return#3 } } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for mem[1] [ choose_direction::xdiff#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:294 [ choose_direction::xdiff#0 ] Statement [751] choose_direction::$2 = choose_direction::open_directions#10 & UP [ choose_direction::open_directions#10 choose_direction::xdiff#0 choose_direction::ydiff#0 choose_direction::$2 ] ( game_logic:89::choose_direction:296 [ pacman_ch1_idx pacman_ch1_enabled choose_direction::open_directions#10 choose_direction::xdiff#0 choose_direction::ydiff#0 choose_direction::$2 ] { { choose_direction::ghost_xtile#0 = choose_direction::ghost_xtile#4 game_logic::ghost4_xtile#0 } { choose_direction::target_xtile#0 = choose_direction::target_xtile#4 game_logic::target_xtile#3 } { choose_direction::ghost_ytile#0 = choose_direction::ghost_ytile#4 game_logic::ghost4_ytile#0 } { choose_direction::target_ytile#0 = choose_direction::target_ytile#4 game_logic::target_ytile#3 } { choose_direction::open_directions#0 = choose_direction::open_directions#10 game_logic::open_directions#1 } { choose_direction::return#0 = choose_direction::return#10 } } game_logic:89::choose_direction:346 [ pacman_ch1_idx pacman_ch1_enabled choose_direction::open_directions#10 choose_direction::xdiff#0 choose_direction::ydiff#0 choose_direction::$2 ] { { choose_direction::ghost_xtile#1 = choose_direction::ghost_xtile#4 game_logic::ghost3_xtile#0 } { choose_direction::target_xtile#1 = choose_direction::target_xtile#4 game_logic::target_xtile1#3 } { choose_direction::ghost_ytile#1 = choose_direction::ghost_ytile#4 game_logic::ghost3_ytile#0 } { choose_direction::target_ytile#1 = choose_direction::target_ytile#4 game_logic::target_ytile1#3 } { choose_direction::open_directions#1 = choose_direction::open_directions#10 game_logic::open_directions1#1 } { choose_direction::return#1 = choose_direction::return#10 } } game_logic:89::choose_direction:396 [ pacman_ch1_idx pacman_ch1_enabled choose_direction::open_directions#10 choose_direction::xdiff#0 choose_direction::ydiff#0 choose_direction::$2 ] { { choose_direction::ghost_xtile#2 = choose_direction::ghost_xtile#4 game_logic::ghost2_xtile#0 } { choose_direction::target_xtile#2 = choose_direction::target_xtile#4 game_logic::target_xtile2#3 } { choose_direction::ghost_ytile#2 = choose_direction::ghost_ytile#4 game_logic::ghost2_ytile#0 } { choose_direction::target_ytile#2 = choose_direction::target_ytile#4 game_logic::target_ytile2#3 } { choose_direction::open_directions#10 = choose_direction::open_directions#2 game_logic::open_directions2#1 } { choose_direction::return#10 = choose_direction::return#2 } } game_logic:89::choose_direction:446 [ pacman_ch1_idx pacman_ch1_enabled choose_direction::open_directions#10 choose_direction::xdiff#0 choose_direction::ydiff#0 choose_direction::$2 ] { { choose_direction::ghost_xtile#3 = choose_direction::ghost_xtile#4 game_logic::ghost1_xtile#0 } { choose_direction::target_xtile#3 = choose_direction::target_xtile#4 game_logic::target_xtile3#3 } { choose_direction::ghost_ytile#3 = choose_direction::ghost_ytile#4 game_logic::ghost1_ytile#0 } { choose_direction::target_ytile#3 = choose_direction::target_ytile#4 game_logic::target_ytile3#3 } { choose_direction::open_directions#10 = choose_direction::open_directions#3 game_logic::open_directions3#1 } { choose_direction::return#10 = choose_direction::return#3 } } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for mem[1] [ choose_direction::ydiff#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:293 [ choose_direction::ydiff#0 ] Statement [753] choose_direction::dist_up#0 = ABS[choose_direction::xdiff#0] + (ABS+-1)[choose_direction::ydiff#0] [ choose_direction::open_directions#10 choose_direction::xdiff#0 choose_direction::ydiff#0 choose_direction::dist_up#0 ] ( game_logic:89::choose_direction:296 [ pacman_ch1_idx pacman_ch1_enabled choose_direction::open_directions#10 choose_direction::xdiff#0 choose_direction::ydiff#0 choose_direction::dist_up#0 ] { { choose_direction::ghost_xtile#0 = choose_direction::ghost_xtile#4 game_logic::ghost4_xtile#0 } { choose_direction::target_xtile#0 = choose_direction::target_xtile#4 game_logic::target_xtile#3 } { choose_direction::ghost_ytile#0 = choose_direction::ghost_ytile#4 game_logic::ghost4_ytile#0 } { choose_direction::target_ytile#0 = choose_direction::target_ytile#4 game_logic::target_ytile#3 } { choose_direction::open_directions#0 = choose_direction::open_directions#10 game_logic::open_directions#1 } { choose_direction::return#0 = choose_direction::return#10 } } game_logic:89::choose_direction:346 [ pacman_ch1_idx pacman_ch1_enabled choose_direction::open_directions#10 choose_direction::xdiff#0 choose_direction::ydiff#0 choose_direction::dist_up#0 ] { { choose_direction::ghost_xtile#1 = choose_direction::ghost_xtile#4 game_logic::ghost3_xtile#0 } { choose_direction::target_xtile#1 = choose_direction::target_xtile#4 game_logic::target_xtile1#3 } { choose_direction::ghost_ytile#1 = choose_direction::ghost_ytile#4 game_logic::ghost3_ytile#0 } { choose_direction::target_ytile#1 = choose_direction::target_ytile#4 game_logic::target_ytile1#3 } { choose_direction::open_directions#1 = choose_direction::open_directions#10 game_logic::open_directions1#1 } { choose_direction::return#1 = choose_direction::return#10 } } game_logic:89::choose_direction:396 [ pacman_ch1_idx pacman_ch1_enabled choose_direction::open_directions#10 choose_direction::xdiff#0 choose_direction::ydiff#0 choose_direction::dist_up#0 ] { { choose_direction::ghost_xtile#2 = choose_direction::ghost_xtile#4 game_logic::ghost2_xtile#0 } { choose_direction::target_xtile#2 = choose_direction::target_xtile#4 game_logic::target_xtile2#3 } { choose_direction::ghost_ytile#2 = choose_direction::ghost_ytile#4 game_logic::ghost2_ytile#0 } { choose_direction::target_ytile#2 = choose_direction::target_ytile#4 game_logic::target_ytile2#3 } { choose_direction::open_directions#10 = choose_direction::open_directions#2 game_logic::open_directions2#1 } { choose_direction::return#10 = choose_direction::return#2 } } game_logic:89::choose_direction:446 [ pacman_ch1_idx pacman_ch1_enabled choose_direction::open_directions#10 choose_direction::xdiff#0 choose_direction::ydiff#0 choose_direction::dist_up#0 ] { { choose_direction::ghost_xtile#3 = choose_direction::ghost_xtile#4 game_logic::ghost1_xtile#0 } { choose_direction::target_xtile#3 = choose_direction::target_xtile#4 game_logic::target_xtile3#3 } { choose_direction::ghost_ytile#3 = choose_direction::ghost_ytile#4 game_logic::ghost1_ytile#0 } { choose_direction::target_ytile#3 = choose_direction::target_ytile#4 game_logic::target_ytile3#3 } { choose_direction::open_directions#10 = choose_direction::open_directions#3 game_logic::open_directions3#1 } { choose_direction::return#10 = choose_direction::return#3 } } ) always clobbers reg byte a Statement [757] choose_direction::$4 = choose_direction::open_directions#10 & DOWN [ choose_direction::open_directions#10 choose_direction::xdiff#0 choose_direction::ydiff#0 choose_direction::dist_min#6 choose_direction::direction#10 choose_direction::$4 ] ( game_logic:89::choose_direction:296 [ pacman_ch1_idx pacman_ch1_enabled choose_direction::open_directions#10 choose_direction::xdiff#0 choose_direction::ydiff#0 choose_direction::dist_min#6 choose_direction::direction#10 choose_direction::$4 ] { { choose_direction::ghost_xtile#0 = choose_direction::ghost_xtile#4 game_logic::ghost4_xtile#0 } { choose_direction::target_xtile#0 = choose_direction::target_xtile#4 game_logic::target_xtile#3 } { choose_direction::ghost_ytile#0 = choose_direction::ghost_ytile#4 game_logic::ghost4_ytile#0 } { choose_direction::target_ytile#0 = choose_direction::target_ytile#4 game_logic::target_ytile#3 } { choose_direction::open_directions#0 = choose_direction::open_directions#10 game_logic::open_directions#1 } { choose_direction::return#0 = choose_direction::return#10 } } game_logic:89::choose_direction:346 [ pacman_ch1_idx pacman_ch1_enabled choose_direction::open_directions#10 choose_direction::xdiff#0 choose_direction::ydiff#0 choose_direction::dist_min#6 choose_direction::direction#10 choose_direction::$4 ] { { choose_direction::ghost_xtile#1 = choose_direction::ghost_xtile#4 game_logic::ghost3_xtile#0 } { choose_direction::target_xtile#1 = choose_direction::target_xtile#4 game_logic::target_xtile1#3 } { choose_direction::ghost_ytile#1 = choose_direction::ghost_ytile#4 game_logic::ghost3_ytile#0 } { choose_direction::target_ytile#1 = choose_direction::target_ytile#4 game_logic::target_ytile1#3 } { choose_direction::open_directions#1 = choose_direction::open_directions#10 game_logic::open_directions1#1 } { choose_direction::return#1 = choose_direction::return#10 } } game_logic:89::choose_direction:396 [ pacman_ch1_idx pacman_ch1_enabled choose_direction::open_directions#10 choose_direction::xdiff#0 choose_direction::ydiff#0 choose_direction::dist_min#6 choose_direction::direction#10 choose_direction::$4 ] { { choose_direction::ghost_xtile#2 = choose_direction::ghost_xtile#4 game_logic::ghost2_xtile#0 } { choose_direction::target_xtile#2 = choose_direction::target_xtile#4 game_logic::target_xtile2#3 } { choose_direction::ghost_ytile#2 = choose_direction::ghost_ytile#4 game_logic::ghost2_ytile#0 } { choose_direction::target_ytile#2 = choose_direction::target_ytile#4 game_logic::target_ytile2#3 } { choose_direction::open_directions#10 = choose_direction::open_directions#2 game_logic::open_directions2#1 } { choose_direction::return#10 = choose_direction::return#2 } } game_logic:89::choose_direction:446 [ pacman_ch1_idx pacman_ch1_enabled choose_direction::open_directions#10 choose_direction::xdiff#0 choose_direction::ydiff#0 choose_direction::dist_min#6 choose_direction::direction#10 choose_direction::$4 ] { { choose_direction::ghost_xtile#3 = choose_direction::ghost_xtile#4 game_logic::ghost1_xtile#0 } { choose_direction::target_xtile#3 = choose_direction::target_xtile#4 game_logic::target_xtile3#3 } { choose_direction::ghost_ytile#3 = choose_direction::ghost_ytile#4 game_logic::ghost1_ytile#0 } { choose_direction::target_ytile#3 = choose_direction::target_ytile#4 game_logic::target_ytile3#3 } { choose_direction::open_directions#10 = choose_direction::open_directions#3 game_logic::open_directions3#1 } { choose_direction::return#10 = choose_direction::return#3 } } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:205 [ choose_direction::dist_min#6 choose_direction::dist_up#0 ] @@ -14346,11 +14236,11 @@ Statement [184] ghost4_reverse = 1 [ pacman_ch1_enabled pill_count pacman_lives Statement [185] game_logic::pacman_xtile#0 = pacman_xfine >> 1 [ pacman_ch1_enabled pill_count pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pill_count pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 ] { } ) always clobbers reg byte a Statement [186] game_logic::pacman_ytile#0 = pacman_yfine >> 1 [ pacman_ch1_enabled pill_count pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 game_logic::pacman_ytile#0 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pill_count pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 game_logic::pacman_ytile#0 ] { } ) always clobbers reg byte a Statement [187] game_logic::$210 = game_logic::pacman_ytile#0 << 1 [ pacman_ch1_enabled pill_count pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 game_logic::$210 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pill_count pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 game_logic::$210 ] { } ) always clobbers reg byte a -Statement [188] game_logic::ytiles#0 = LEVEL_TILES + LEVEL_YTILE_OFFSET[game_logic::$210] [ pacman_ch1_enabled pill_count pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 game_logic::$210 game_logic::ytiles#0 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pill_count pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 game_logic::$210 game_logic::ytiles#0 ] { } ) always clobbers reg byte a reg byte y -Statement [189] game_logic::tile_id#0 = game_logic::ytiles#0[game_logic::pacman_xtile#0] [ pacman_ch1_enabled pill_count pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 game_logic::$210 game_logic::ytiles#0 game_logic::tile_id#0 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pill_count pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 game_logic::$210 game_logic::ytiles#0 game_logic::tile_id#0 ] { } ) always clobbers reg byte a reg byte y +Statement [188] game_logic::ytiles#0 = LEVEL_TILES + LEVEL_YTILE_OFFSET[game_logic::$210] [ pacman_ch1_enabled pill_count pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 game_logic::$210 game_logic::ytiles#0 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pill_count pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 game_logic::$210 game_logic::ytiles#0 ] { } ) always clobbers reg byte a +Statement [189] game_logic::tile_id#0 = game_logic::ytiles#0[game_logic::pacman_xtile#0] [ pacman_ch1_enabled pill_count pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 game_logic::$210 game_logic::ytiles#0 game_logic::tile_id#0 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pill_count pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 game_logic::$210 game_logic::ytiles#0 game_logic::tile_id#0 ] { } ) always clobbers reg byte a Statement [190] if(TILES_TYPE[game_logic::tile_id#0]==PILL) goto game_logic::@49 [ pacman_ch1_enabled pill_count pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 game_logic::$210 game_logic::ytiles#0 game_logic::tile_id#0 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pill_count pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 game_logic::$210 game_logic::ytiles#0 game_logic::tile_id#0 ] { } ) always clobbers reg byte a Statement [191] if(TILES_TYPE[game_logic::tile_id#0]!=POWERUP) goto game_logic::@50 [ pacman_ch1_enabled pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 game_logic::$210 game_logic::ytiles#0 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 game_logic::$210 game_logic::ytiles#0 ] { } ) always clobbers reg byte a -Statement [192] game_logic::ytiles#0[game_logic::pacman_xtile#0] = EMPTY [ pacman_ch1_enabled pacman_lives pacman_xfine pacman_yfine ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 game_logic::$210 game_logic::ytiles#0 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_lives pacman_xfine pacman_yfine ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 game_logic::$210 game_logic::ytiles#0 ] { } ) always clobbers reg byte a reg byte y +Statement [192] game_logic::ytiles#0[game_logic::pacman_xtile#0] = EMPTY [ pacman_ch1_enabled pacman_lives pacman_xfine pacman_yfine ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 game_logic::$210 game_logic::ytiles#0 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_lives pacman_xfine pacman_yfine ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 game_logic::$210 game_logic::ytiles#0 ] { } ) always clobbers reg byte a Statement [193] game_logic::$65 = game_logic::pacman_xtile#0 >> 1 [ pacman_ch1_enabled pacman_lives pacman_xfine pacman_yfine ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 game_logic::$210 game_logic::ytiles#0 game_logic::$65 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_lives pacman_xfine pacman_yfine ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 game_logic::$210 game_logic::ytiles#0 game_logic::$65 ] { } ) always clobbers reg byte a Statement [195] game_logic::$66 = game_logic::pacman_xtile#0 & $fe [ pacman_ch1_enabled pacman_lives pacman_xfine pacman_yfine ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::$210 game_logic::ytiles#0 game_logic::$66 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_lives pacman_xfine pacman_yfine ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::$210 game_logic::ytiles#0 game_logic::$66 ] { } ) always clobbers reg byte a Statement [196] game_logic::$67 = game_logic::ytiles#0 + game_logic::$66 [ pacman_ch1_enabled pacman_lives pacman_xfine pacman_yfine ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::$210 game_logic::$67 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pacman_lives pacman_xfine pacman_yfine ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::$210 game_logic::$67 ] { } ) always clobbers reg byte a @@ -14397,7 +14287,7 @@ Statement [246] ghost1_xfine = $32 [ pacman_ch1_enabled ] ( game_logic:89 [ pacm Statement [247] ghost1_yfine = $23 [ pacman_ch1_enabled ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled ] { } ) always clobbers reg byte a Statement [248] ghost1_substep = 0 [ pacman_ch1_enabled ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled ] { } ) always clobbers reg byte a Statement [249] ghost1_respawn = $32 [ pacman_ch1_enabled ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled ] { } ) always clobbers reg byte a -Statement [250] game_logic::ytiles#0[game_logic::pacman_xtile#0] = EMPTY [ pacman_ch1_enabled pill_count pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 game_logic::$210 game_logic::ytiles#0 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pill_count pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 game_logic::$210 game_logic::ytiles#0 ] { } ) always clobbers reg byte a reg byte y +Statement [250] game_logic::ytiles#0[game_logic::pacman_xtile#0] = EMPTY [ pacman_ch1_enabled pill_count pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 game_logic::$210 game_logic::ytiles#0 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pill_count pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 game_logic::$210 game_logic::ytiles#0 ] { } ) always clobbers reg byte a Statement [251] game_logic::$69 = game_logic::pacman_xtile#0 >> 1 [ pacman_ch1_enabled pill_count pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 game_logic::$210 game_logic::ytiles#0 game_logic::$69 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pill_count pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::pacman_xtile#0 game_logic::$210 game_logic::ytiles#0 game_logic::$69 ] { } ) always clobbers reg byte a Statement [253] game_logic::$70 = game_logic::pacman_xtile#0 & $fe [ pacman_ch1_enabled pill_count pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::$210 game_logic::ytiles#0 game_logic::$70 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pill_count pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::$210 game_logic::ytiles#0 game_logic::$70 ] { } ) always clobbers reg byte a Statement [254] game_logic::$71 = game_logic::ytiles#0 + game_logic::$70 [ pacman_ch1_enabled pill_count pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::$210 game_logic::$71 ] ( game_logic:89 [ pacman_ch1_idx pacman_ch1_enabled pill_count pacman_lives pacman_xfine pacman_yfine ghosts_mode ghost1_xfine ghost1_yfine ghost2_xfine ghost2_yfine ghost3_xfine ghost3_yfine ghost4_xfine ghost4_yfine game_logic::$210 game_logic::$71 ] { } ) always clobbers reg byte a @@ -14803,14 +14693,14 @@ Statement [1042] *render_tiles::canvas2#2 = render_tiles::pixels#0 [ render_tile Statement [1043] render_tiles::canvas1#1 = render_tiles::canvas1#2 + RENDER_YPOS_INC[render_tiles::ypos_inc_offset#2] [ render_tiles::tile_left_pixels#0 render_tiles::tile_right_pixels#0 render_tiles::y#2 render_tiles::canvas2#2 render_tiles::ypos_inc_offset#2 render_tiles::canvas1#1 ] ( main:62::gameplay_run:104::level_show:633::render_tiles:990 [ pacman_wins pacman_lives level_show::ytile#2 level_show::level#8 level_show::xcol#2 level_show::xtile#2 level_show::count#11 render_tiles::tile_left_pixels#0 render_tiles::tile_right_pixels#0 render_tiles::y#2 render_tiles::canvas2#2 render_tiles::ypos_inc_offset#2 render_tiles::canvas1#1 ] { { level_show::return#0 = level_show::count#12 } { render_tiles::xcol#0 = level_show::xcol#2 } { render_tiles::ytile#0 = level_show::ytile#2 } { render_tiles::tile_left#0 = level_show::tile_left#0 } { render_tiles::tile_right#0 = level_show::tile_right#0 } } ) always clobbers reg byte a Statement [1044] render_tiles::canvas2#1 = render_tiles::canvas2#2 + RENDER_YPOS_INC[render_tiles::ypos_inc_offset#2] [ render_tiles::tile_left_pixels#0 render_tiles::tile_right_pixels#0 render_tiles::y#2 render_tiles::ypos_inc_offset#2 render_tiles::canvas1#1 render_tiles::canvas2#1 ] ( main:62::gameplay_run:104::level_show:633::render_tiles:990 [ pacman_wins pacman_lives level_show::ytile#2 level_show::level#8 level_show::xcol#2 level_show::xtile#2 level_show::count#11 render_tiles::tile_left_pixels#0 render_tiles::tile_right_pixels#0 render_tiles::y#2 render_tiles::ypos_inc_offset#2 render_tiles::canvas1#1 render_tiles::canvas2#1 ] { { level_show::return#0 = level_show::count#12 } { render_tiles::xcol#0 = level_show::xcol#2 } { render_tiles::ytile#0 = level_show::ytile#2 } { render_tiles::tile_left#0 = level_show::tile_left#0 } { render_tiles::tile_right#0 = level_show::tile_right#0 } } ) always clobbers reg byte a Potential registers zp[1]:228 [ game_logic::ghost_frame_idx#2 game_logic::ghost_frame_idx#0 game_logic::ghost_frame_idx#1 ] : zp[1]:228 , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::do_reverse#4 ] : mem[1] , reg byte a , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::target_xtile#3 game_logic::target_xtile#2 ] : mem[1] , reg byte x , reg byte y , +Potential registers zp[1]:316 [ game_logic::do_reverse#4 ] : zp[1]:316 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:307 [ game_logic::target_xtile#3 game_logic::target_xtile#2 ] : zp[1]:307 , reg byte x , reg byte y , Potential registers zp[1]:230 [ game_logic::target_ytile#3 game_logic::target_ytile#2 ] : zp[1]:230 , reg byte a , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::target_xtile1#3 game_logic::target_xtile1#2 ] : mem[1] , reg byte x , reg byte y , +Potential registers zp[1]:308 [ game_logic::target_xtile1#3 game_logic::target_xtile1#2 ] : zp[1]:308 , reg byte x , reg byte y , Potential registers zp[1]:231 [ game_logic::target_ytile1#3 game_logic::target_ytile1#2 ] : zp[1]:231 , reg byte a , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::target_xtile2#3 game_logic::target_xtile2#2 ] : mem[1] , reg byte x , reg byte y , +Potential registers zp[1]:309 [ game_logic::target_xtile2#3 game_logic::target_xtile2#2 ] : zp[1]:309 , reg byte x , reg byte y , Potential registers zp[1]:232 [ game_logic::target_ytile2#3 game_logic::target_ytile2#2 ] : zp[1]:232 , reg byte a , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::target_xtile3#3 game_logic::target_xtile3#2 ] : mem[1] , reg byte x , reg byte y , +Potential registers zp[1]:310 [ game_logic::target_xtile3#3 game_logic::target_xtile3#2 ] : zp[1]:310 , reg byte x , reg byte y , Potential registers zp[1]:233 [ game_logic::target_ytile3#3 game_logic::target_ytile3#2 ] : zp[1]:233 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:162 [ splash_run::i#2 splash_run::i#1 ] : zp[1]:162 , reg byte x , reg byte y , Potential registers zp[1]:158 [ splash_run::msb#10 splash_run::msb#8 splash_run::msb#1 splash_run::msb#2 ] : zp[1]:158 , reg byte x , reg byte y , @@ -14837,7 +14727,7 @@ Potential registers zp[1]:176 [ choose_direction::dist_min#10 choose_direction:: Potential registers zp[1]:179 [ choose_direction::dist_min#11 choose_direction::dist_left#0 choose_direction::dist_min#17 choose_direction::dist_min#18 ] : zp[1]:179 , reg byte x , reg byte y , Potential registers zp[1]:203 [ choose_direction::return#10 choose_direction::direction#6 choose_direction::direction#8 choose_direction::direction#10 ] : zp[1]:203 , reg byte x , reg byte y , Potential registers zp[2]:174 [ memset::num#5 ] : zp[2]:174 , -Potential registers mem[2] [ memset::str#6 ] : mem[2] , +Potential registers zp[2]:371 [ memset::str#6 ] : zp[2]:371 , Potential registers zp[2]:128 [ memset::dst#2 memset::dst#4 memset::dst#1 ] : zp[2]:128 , Potential registers zp[2]:124 [ merge_code::raster_code#4 merge_code::raster_code#2 merge_code::raster_code#0 ] : zp[2]:124 , Potential registers zp[2]:112 [ merge_code::logic_code#12 merge_code::logic_code#5 merge_code::logic_code#18 merge_code::logic_code#17 merge_code::logic_code#2 ] : zp[2]:112 , @@ -14887,19 +14777,19 @@ Potential registers zp[1]:2 [ render_tiles::y#2 render_tiles::y#1 ] : zp[1]:2 , Potential registers zp[2]:7 [ render_tiles::canvas1#2 render_tiles::canvas1#0 render_tiles::canvas1#1 ] : zp[2]:7 , Potential registers zp[2]:5 [ render_tiles::canvas2#2 render_tiles::canvas2#0 render_tiles::canvas2#1 ] : zp[2]:5 , Potential registers zp[1]:3 [ render_tiles::ypos_inc_offset#2 render_tiles::ypos_inc_offset#0 render_tiles::ypos_inc_offset#1 ] : zp[1]:3 , reg byte x , -Potential registers mem[1] [ pacman_ch1_enabled ] : mem[1] , -Potential registers mem[1] [ pacman_ch1_idx ] : mem[1] , +Potential registers zp[1]:370 [ pacman_ch1_enabled ] : zp[1]:370 , +Potential registers zp[1]:362 [ pacman_ch1_idx ] : zp[1]:362 , Potential registers zp[2]:150 [ logic_tile_ptr ] : zp[2]:150 , Potential registers zp[1]:152 [ logic_tile_xcol ] : zp[1]:152 , Potential registers zp[1]:153 [ logic_tile_yfine ] : zp[1]:153 , -Potential registers mem[1] [ logic_tile_left_idx ] : mem[1] , -Potential registers mem[1] [ logic_tile_right_idx ] : mem[1] , -Potential registers mem[2] [ left_render_index_xcol ] : mem[2] , -Potential registers mem[2] [ left_canvas ] : mem[2] , -Potential registers mem[1] [ left_ypos_inc_offset ] : mem[1] , -Potential registers mem[2] [ rigt_render_index_xcol ] : mem[2] , -Potential registers mem[2] [ rigt_canvas ] : mem[2] , -Potential registers mem[1] [ rigt_ypos_inc_offset ] : mem[1] , +Potential registers zp[1]:295 [ logic_tile_left_idx ] : zp[1]:295 , +Potential registers zp[1]:296 [ logic_tile_right_idx ] : zp[1]:296 , +Potential registers zp[2]:297 [ left_render_index_xcol ] : zp[2]:297 , +Potential registers zp[2]:299 [ left_canvas ] : zp[2]:299 , +Potential registers zp[1]:301 [ left_ypos_inc_offset ] : zp[1]:301 , +Potential registers zp[2]:302 [ rigt_render_index_xcol ] : zp[2]:302 , +Potential registers zp[2]:304 [ rigt_canvas ] : zp[2]:304 , +Potential registers zp[1]:306 [ rigt_ypos_inc_offset ] : zp[1]:306 , Potential registers zp[1]:172 [ canvas_base_hi ] : zp[1]:172 , Potential registers zp[1]:173 [ bobs_restore_base ] : zp[1]:173 , Potential registers zp[1]:159 [ top_sprites_color ] : zp[1]:159 , @@ -14908,144 +14798,144 @@ Potential registers zp[1]:146 [ side_sprites_color ] : zp[1]:146 , Potential registers zp[1]:147 [ side_sprites_mc ] : zp[1]:147 , Potential registers zp[1]:148 [ bottom_sprites_color ] : zp[1]:148 , Potential registers zp[1]:149 [ bottom_sprites_mc ] : zp[1]:149 , -Potential registers mem[2] [ pill_count ] : mem[2] , +Potential registers zp[2]:314 [ pill_count ] : zp[2]:314 , Potential registers zp[1]:163 [ pacman_wins ] : zp[1]:163 , Potential registers zp[1]:180 [ pacman_lives ] : zp[1]:180 , Potential registers zp[1]:123 [ music_play_next ] : zp[1]:123 , Potential registers zp[1]:218 [ phase ] : zp[1]:218 , -Potential registers mem[1] [ frame ] : mem[1] , -Potential registers mem[1] [ anim_frame_idx ] : mem[1] , +Potential registers zp[1]:369 [ frame ] : zp[1]:369 , +Potential registers zp[1]:364 [ anim_frame_idx ] : zp[1]:364 , Potential registers zp[1]:226 [ pacman_xfine ] : zp[1]:226 , Potential registers zp[1]:227 [ pacman_yfine ] : zp[1]:227 , Potential registers zp[1]:208 [ pacman_direction ] : zp[1]:208 , Potential registers zp[1]:188 [ pacman_substep ] : zp[1]:188 , -Potential registers mem[1] [ ghosts_mode ] : mem[1] , +Potential registers zp[1]:363 [ ghosts_mode ] : zp[1]:363 , Potential registers zp[1]:187 [ ghosts_mode_count ] : zp[1]:187 , Potential registers zp[1]:216 [ ghost1_xfine ] : zp[1]:216 , Potential registers zp[1]:217 [ ghost1_yfine ] : zp[1]:217 , Potential registers zp[1]:209 [ ghost1_direction ] : zp[1]:209 , Potential registers zp[1]:190 [ ghost1_substep ] : zp[1]:190 , -Potential registers mem[1] [ ghost1_reverse ] : mem[1] , +Potential registers zp[1]:365 [ ghost1_reverse ] : zp[1]:365 , Potential registers zp[1]:183 [ ghost1_respawn ] : zp[1]:183 , Potential registers zp[1]:219 [ ghost2_xfine ] : zp[1]:219 , Potential registers zp[1]:220 [ ghost2_yfine ] : zp[1]:220 , Potential registers zp[1]:210 [ ghost2_direction ] : zp[1]:210 , Potential registers zp[1]:191 [ ghost2_substep ] : zp[1]:191 , -Potential registers mem[1] [ ghost2_reverse ] : mem[1] , +Potential registers zp[1]:366 [ ghost2_reverse ] : zp[1]:366 , Potential registers zp[1]:184 [ ghost2_respawn ] : zp[1]:184 , Potential registers zp[1]:221 [ ghost3_xfine ] : zp[1]:221 , Potential registers zp[1]:223 [ ghost3_yfine ] : zp[1]:223 , Potential registers zp[1]:213 [ ghost3_direction ] : zp[1]:213 , Potential registers zp[1]:192 [ ghost3_substep ] : zp[1]:192 , -Potential registers mem[1] [ ghost3_reverse ] : mem[1] , +Potential registers zp[1]:367 [ ghost3_reverse ] : zp[1]:367 , Potential registers zp[1]:185 [ ghost3_respawn ] : zp[1]:185 , Potential registers zp[1]:224 [ ghost4_xfine ] : zp[1]:224 , Potential registers zp[1]:225 [ ghost4_yfine ] : zp[1]:225 , Potential registers zp[1]:214 [ ghost4_direction ] : zp[1]:214 , Potential registers zp[1]:193 [ ghost4_substep ] : zp[1]:193 , -Potential registers mem[1] [ ghost4_reverse ] : mem[1] , +Potential registers zp[1]:368 [ ghost4_reverse ] : zp[1]:368 , Potential registers zp[1]:186 [ ghost4_respawn ] : zp[1]:186 , -Potential registers mem[1] [ game_logic_substep ] : mem[1] , +Potential registers zp[1]:352 [ game_logic_substep ] : zp[1]:352 , Potential registers zp[1]:222 [ game_playable ] : zp[1]:222 , -Potential registers mem[1] [ irq_screen_top::$1 ] : mem[1] , reg byte a , reg byte x , reg byte y , -Potential registers mem[1] [ irq_screen_top::$2 ] : mem[1] , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:349 [ irq_screen_top::$1 ] : zp[1]:349 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:350 [ irq_screen_top::$2 ] : zp[1]:350 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:234 [ game_logic::$2 ] : zp[1]:234 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:235 [ game_logic::$3 ] : zp[1]:235 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:236 [ game_logic::$14 ] : zp[1]:236 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:237 [ game_logic::$15 ] : zp[1]:237 , reg byte a , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::pacman_bob_xfine#0 ] : mem[1] , reg byte x , reg byte y , +Potential registers zp[1]:338 [ game_logic::pacman_bob_xfine#0 ] : zp[1]:338 , reg byte x , reg byte y , Potential registers zp[1]:238 [ game_logic::$17 ] : zp[1]:238 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:239 [ game_logic::$18 ] : zp[1]:239 , reg byte a , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::$19 ] : mem[1] , reg byte x , reg byte y , +Potential registers zp[1]:317 [ game_logic::$19 ] : zp[1]:317 , reg byte x , reg byte y , Potential registers zp[1]:240 [ game_logic::$20 ] : zp[1]:240 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:241 [ game_logic::$21 ] : zp[1]:241 , reg byte a , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::ghost1_bob_xfine#0 ] : mem[1] , reg byte x , reg byte y , +Potential registers zp[1]:339 [ game_logic::ghost1_bob_xfine#0 ] : zp[1]:339 , reg byte x , reg byte y , Potential registers zp[1]:242 [ game_logic::$25 ] : zp[1]:242 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:243 [ game_logic::$26 ] : zp[1]:243 , reg byte a , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::$27 ] : mem[1] , reg byte x , reg byte y , +Potential registers zp[1]:318 [ game_logic::$27 ] : zp[1]:318 , reg byte x , reg byte y , Potential registers zp[1]:244 [ game_logic::$28 ] : zp[1]:244 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:245 [ game_logic::$29 ] : zp[1]:245 , reg byte a , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::ghost2_bob_xfine#0 ] : mem[1] , reg byte x , reg byte y , +Potential registers zp[1]:340 [ game_logic::ghost2_bob_xfine#0 ] : zp[1]:340 , reg byte x , reg byte y , Potential registers zp[1]:246 [ game_logic::$31 ] : zp[1]:246 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:247 [ game_logic::$32 ] : zp[1]:247 , reg byte a , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::$33 ] : mem[1] , reg byte x , reg byte y , +Potential registers zp[1]:319 [ game_logic::$33 ] : zp[1]:319 , reg byte x , reg byte y , Potential registers zp[1]:248 [ game_logic::$34 ] : zp[1]:248 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:249 [ game_logic::$35 ] : zp[1]:249 , reg byte a , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::ghost3_bob_xfine#0 ] : mem[1] , reg byte x , reg byte y , +Potential registers zp[1]:341 [ game_logic::ghost3_bob_xfine#0 ] : zp[1]:341 , reg byte x , reg byte y , Potential registers zp[1]:250 [ game_logic::$37 ] : zp[1]:250 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:251 [ game_logic::$38 ] : zp[1]:251 , reg byte a , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::$39 ] : mem[1] , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::$40 ] : mem[1] , reg byte a , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::$41 ] : mem[1] , reg byte a , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::ghost4_bob_xfine#0 ] : mem[1] , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::$43 ] : mem[1] , reg byte a , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::$44 ] : mem[1] , reg byte a , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::$45 ] : mem[1] , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::$46 ] : mem[1] , reg byte a , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::$47 ] : mem[1] , reg byte a , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::pacman_xtile#0 ] : mem[1] , reg byte x , -Potential registers mem[1] [ game_logic::pacman_ytile#0 ] : mem[1] , reg byte a , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::$210 ] : mem[1] , reg byte x , -Potential registers mem[2] [ game_logic::ytiles#0 ] : mem[2] , -Potential registers mem[1] [ game_logic::tile_id#0 ] : mem[1] , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::$65 ] : mem[1] , reg byte a , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::$66 ] : mem[1] , reg byte a , reg byte x , reg byte y , -Potential registers mem[2] [ game_logic::$67 ] : mem[2] , -Potential registers mem[1] [ game_logic::$68 ] : mem[1] , reg byte a , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::$75 ] : mem[1] , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::$77 ] : mem[1] , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::$80 ] : mem[1] , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::$82 ] : mem[1] , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::$85 ] : mem[1] , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::$87 ] : mem[1] , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::$90 ] : mem[1] , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::$92 ] : mem[1] , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::$69 ] : mem[1] , reg byte a , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::$70 ] : mem[1] , reg byte a , reg byte x , reg byte y , -Potential registers mem[2] [ game_logic::$71 ] : mem[2] , -Potential registers mem[1] [ game_logic::$72 ] : mem[1] , reg byte a , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::$220 ] : mem[1] , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::ghost4_xtile#0 ] : mem[1] , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::ghost4_ytile#0 ] : mem[1] , reg byte x , reg byte y , -Potential registers mem[1] [ level_tile_directions::return#3 ] : mem[1] , reg byte a , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::open_directions#0 ] : mem[1] , reg byte a , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::open_directions#1 ] : mem[1] , reg byte x , reg byte y , -Potential registers mem[1] [ choose_direction::return#0 ] : mem[1] , reg byte a , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::$119 ] : mem[1] , reg byte a , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::$223 ] : mem[1] , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::ghost3_xtile#0 ] : mem[1] , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::ghost3_ytile#0 ] : mem[1] , reg byte x , reg byte y , -Potential registers mem[1] [ level_tile_directions::return#10 ] : mem[1] , reg byte a , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::open_directions1#0 ] : mem[1] , reg byte a , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::open_directions1#1 ] : mem[1] , reg byte x , reg byte y , -Potential registers mem[1] [ choose_direction::return#1 ] : mem[1] , reg byte a , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::$140 ] : mem[1] , reg byte a , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::$226 ] : mem[1] , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::ghost2_xtile#0 ] : mem[1] , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::ghost2_ytile#0 ] : mem[1] , reg byte x , reg byte y , -Potential registers mem[1] [ level_tile_directions::return#11 ] : mem[1] , reg byte a , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::open_directions2#0 ] : mem[1] , reg byte a , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::open_directions2#1 ] : mem[1] , reg byte x , reg byte y , -Potential registers mem[1] [ choose_direction::return#2 ] : mem[1] , reg byte a , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::$161 ] : mem[1] , reg byte a , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::$229 ] : mem[1] , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::ghost1_xtile#0 ] : mem[1] , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::ghost1_ytile#0 ] : mem[1] , reg byte x , reg byte y , -Potential registers mem[1] [ level_tile_directions::return#12 ] : mem[1] , reg byte a , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::open_directions3#0 ] : mem[1] , reg byte a , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::open_directions3#1 ] : mem[1] , reg byte x , reg byte y , -Potential registers mem[1] [ choose_direction::return#3 ] : mem[1] , reg byte a , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::$182 ] : mem[1] , reg byte a , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::$232 ] : mem[1] , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::pacman_xtile1#0 ] : mem[1] , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::pacman_ytile1#0 ] : mem[1] , reg byte a , reg byte x , reg byte y , -Potential registers mem[1] [ level_tile_directions::return#13 ] : mem[1] , reg byte a , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::open_directions4#0 ] : mem[1] , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::$199 ] : mem[1] , reg byte a , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::$200 ] : mem[1] , reg byte a , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::joy_directions#0 ] : mem[1] , reg byte a , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::$204 ] : mem[1] , reg byte a , reg byte x , reg byte y , -Potential registers mem[1] [ game_logic::new_direction#0 ] : mem[1] , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:320 [ game_logic::$39 ] : zp[1]:320 , reg byte x , reg byte y , +Potential registers zp[1]:256 [ game_logic::$40 ] : zp[1]:256 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:257 [ game_logic::$41 ] : zp[1]:257 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:342 [ game_logic::ghost4_bob_xfine#0 ] : zp[1]:342 , reg byte x , reg byte y , +Potential registers zp[1]:258 [ game_logic::$43 ] : zp[1]:258 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:259 [ game_logic::$44 ] : zp[1]:259 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:321 [ game_logic::$45 ] : zp[1]:321 , reg byte x , reg byte y , +Potential registers zp[1]:260 [ game_logic::$46 ] : zp[1]:260 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:261 [ game_logic::$47 ] : zp[1]:261 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:337 [ game_logic::pacman_xtile#0 ] : zp[1]:337 , reg byte x , reg byte y , +Potential registers zp[1]:262 [ game_logic::pacman_ytile#0 ] : zp[1]:262 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:353 [ game_logic::$210 ] : zp[1]:353 , reg byte x , reg byte y , +Potential registers zp[2]:343 [ game_logic::ytiles#0 ] : zp[2]:343 , +Potential registers zp[1]:311 [ game_logic::tile_id#0 ] : zp[1]:311 , reg byte x , reg byte y , +Potential registers zp[1]:263 [ game_logic::$65 ] : zp[1]:263 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:264 [ game_logic::$66 ] : zp[1]:264 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:265 [ game_logic::$67 ] : zp[2]:265 , +Potential registers zp[1]:267 [ game_logic::$68 ] : zp[1]:267 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:322 [ game_logic::$75 ] : zp[1]:322 , reg byte x , reg byte y , +Potential registers zp[1]:323 [ game_logic::$77 ] : zp[1]:323 , reg byte x , reg byte y , +Potential registers zp[1]:324 [ game_logic::$80 ] : zp[1]:324 , reg byte x , reg byte y , +Potential registers zp[1]:325 [ game_logic::$82 ] : zp[1]:325 , reg byte x , reg byte y , +Potential registers zp[1]:326 [ game_logic::$85 ] : zp[1]:326 , reg byte x , reg byte y , +Potential registers zp[1]:327 [ game_logic::$87 ] : zp[1]:327 , reg byte x , reg byte y , +Potential registers zp[1]:328 [ game_logic::$90 ] : zp[1]:328 , reg byte x , reg byte y , +Potential registers zp[1]:329 [ game_logic::$92 ] : zp[1]:329 , reg byte x , reg byte y , +Potential registers zp[1]:268 [ game_logic::$69 ] : zp[1]:268 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:269 [ game_logic::$70 ] : zp[1]:269 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:270 [ game_logic::$71 ] : zp[2]:270 , +Potential registers zp[1]:272 [ game_logic::$72 ] : zp[1]:272 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:330 [ game_logic::$220 ] : zp[1]:330 , reg byte x , reg byte y , +Potential registers zp[1]:354 [ game_logic::ghost4_xtile#0 ] : zp[1]:354 , reg byte x , reg byte y , +Potential registers zp[1]:355 [ game_logic::ghost4_ytile#0 ] : zp[1]:355 , reg byte x , reg byte y , +Potential registers zp[1]:273 [ level_tile_directions::return#3 ] : zp[1]:273 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:274 [ game_logic::open_directions#0 ] : zp[1]:274 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:345 [ game_logic::open_directions#1 ] : zp[1]:345 , reg byte x , reg byte y , +Potential registers zp[1]:275 [ choose_direction::return#0 ] : zp[1]:275 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:276 [ game_logic::$119 ] : zp[1]:276 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:331 [ game_logic::$223 ] : zp[1]:331 , reg byte x , reg byte y , +Potential registers zp[1]:356 [ game_logic::ghost3_xtile#0 ] : zp[1]:356 , reg byte x , reg byte y , +Potential registers zp[1]:357 [ game_logic::ghost3_ytile#0 ] : zp[1]:357 , reg byte x , reg byte y , +Potential registers zp[1]:277 [ level_tile_directions::return#10 ] : zp[1]:277 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:278 [ game_logic::open_directions1#0 ] : zp[1]:278 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:346 [ game_logic::open_directions1#1 ] : zp[1]:346 , reg byte x , reg byte y , +Potential registers zp[1]:279 [ choose_direction::return#1 ] : zp[1]:279 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:280 [ game_logic::$140 ] : zp[1]:280 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:332 [ game_logic::$226 ] : zp[1]:332 , reg byte x , reg byte y , +Potential registers zp[1]:358 [ game_logic::ghost2_xtile#0 ] : zp[1]:358 , reg byte x , reg byte y , +Potential registers zp[1]:359 [ game_logic::ghost2_ytile#0 ] : zp[1]:359 , reg byte x , reg byte y , +Potential registers zp[1]:281 [ level_tile_directions::return#11 ] : zp[1]:281 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:282 [ game_logic::open_directions2#0 ] : zp[1]:282 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:347 [ game_logic::open_directions2#1 ] : zp[1]:347 , reg byte x , reg byte y , +Potential registers zp[1]:283 [ choose_direction::return#2 ] : zp[1]:283 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:284 [ game_logic::$161 ] : zp[1]:284 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:333 [ game_logic::$229 ] : zp[1]:333 , reg byte x , reg byte y , +Potential registers zp[1]:360 [ game_logic::ghost1_xtile#0 ] : zp[1]:360 , reg byte x , reg byte y , +Potential registers zp[1]:361 [ game_logic::ghost1_ytile#0 ] : zp[1]:361 , reg byte x , reg byte y , +Potential registers zp[1]:285 [ level_tile_directions::return#12 ] : zp[1]:285 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:286 [ game_logic::open_directions3#0 ] : zp[1]:286 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:348 [ game_logic::open_directions3#1 ] : zp[1]:348 , reg byte x , reg byte y , +Potential registers zp[1]:287 [ choose_direction::return#3 ] : zp[1]:287 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:288 [ game_logic::$182 ] : zp[1]:288 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:334 [ game_logic::$232 ] : zp[1]:334 , reg byte x , reg byte y , +Potential registers zp[1]:335 [ game_logic::pacman_xtile1#0 ] : zp[1]:335 , reg byte x , reg byte y , +Potential registers zp[1]:336 [ game_logic::pacman_ytile1#0 ] : zp[1]:336 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:289 [ level_tile_directions::return#13 ] : zp[1]:289 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:351 [ game_logic::open_directions4#0 ] : zp[1]:351 , reg byte x , reg byte y , +Potential registers zp[1]:290 [ game_logic::$199 ] : zp[1]:290 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:291 [ game_logic::$200 ] : zp[1]:291 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:312 [ game_logic::joy_directions#0 ] : zp[1]:312 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:292 [ game_logic::$204 ] : zp[1]:292 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:313 [ game_logic::new_direction#0 ] : zp[1]:313 , reg byte a , reg byte x , reg byte y , Potential registers zp[2]:181 [ byteboozer_decrunch::crunched ] : zp[2]:181 , Potential registers zp[1]:139 [ joyfire::return#1 ] : zp[1]:139 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:140 [ splash_run::$30 ] : zp[1]:140 , reg byte a , reg byte x , reg byte y , @@ -15059,8 +14949,8 @@ Potential registers zp[1]:82 [ done_run::$8 ] : zp[1]:82 , reg byte a , reg byte Potential registers zp[1]:91 [ done_run::pixels#0 ] : zp[1]:91 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:194 [ level_tile_directions::$5 ] : zp[1]:194 , reg byte a , reg byte x , reg byte y , Potential registers zp[2]:195 [ level_tile_directions::ytiles#0 ] : zp[2]:195 , -Potential registers mem[1] [ choose_direction::xdiff#0 ] : mem[1] , reg byte x , reg byte y , -Potential registers mem[1] [ choose_direction::ydiff#0 ] : mem[1] , reg byte x , reg byte y , +Potential registers zp[1]:294 [ choose_direction::xdiff#0 ] : zp[1]:294 , reg byte x , reg byte y , +Potential registers zp[1]:293 [ choose_direction::ydiff#0 ] : zp[1]:293 , reg byte x , reg byte y , Potential registers zp[1]:197 [ choose_direction::$2 ] : zp[1]:197 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:198 [ choose_direction::$4 ] : zp[1]:198 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:199 [ choose_direction::$6 ] : zp[1]:199 , reg byte a , reg byte x , reg byte y , @@ -15130,15 +15020,15 @@ Uplift Scope [init_render_index] 530,687.43: zp[1]:90 [ init_render_index::ypos_ Uplift Scope [gameplay_run] 333,336.67: zp[1]:92 [ gameplay_run::i#2 gameplay_run::i#1 ] 333,336.67: zp[1]:93 [ gameplay_run::i1#2 gameplay_run::i1#1 ] 333,336.67: zp[1]:94 [ gameplay_run::i2#2 gameplay_run::i2#1 ] 2,002: zp[2]:167 [ gameplay_run::$4 ] Uplift Scope [splash_show] 250,002.5: zp[1]:102 [ splash_show::ypos#2 splash_show::ypos#1 ] 123,335.92: zp[2]:118 [ splash_show::splash#4 splash_show::splash#2 splash_show::splash#1 ] 50,000.5: zp[1]:126 [ splash_show::pixels#0 ] 31,820.55: zp[1]:130 [ splash_show::xcol#2 splash_show::xcol#1 ] Uplift Scope [init_bobs_restore] 333,336.67: zp[1]:96 [ init_bobs_restore::i#2 init_bobs_restore::i#1 ] 26,001.7: zp[2]:133 [ init_bobs_restore::bob_restore#5 init_bobs_restore::bob_restore#1 ] 22,729.55: zp[1]:135 [ init_bobs_restore::bob#2 init_bobs_restore::bob#1 ] -Uplift Scope [] 69,506.88: zp[1]:123 [ music_play_next ] 11,040: zp[1]:146 [ side_sprites_color ] 11,040: zp[1]:147 [ side_sprites_mc ] 11,040: zp[1]:148 [ bottom_sprites_color ] 11,040: zp[1]:149 [ bottom_sprites_mc ] 10,250: zp[2]:150 [ logic_tile_ptr ] 10,250: zp[1]:152 [ logic_tile_xcol ] 10,250: zp[1]:153 [ logic_tile_yfine ] 3,403.67: zp[1]:159 [ top_sprites_color ] 2,040.32: zp[1]:163 [ pacman_wins ] 1,070: zp[1]:172 [ canvas_base_hi ] 1,070: zp[1]:173 [ bobs_restore_base ] 656.44: zp[1]:180 [ pacman_lives ] 271.84: zp[1]:183 [ ghost1_respawn ] 264.68: zp[1]:184 [ ghost2_respawn ] 257.9: zp[1]:185 [ ghost3_respawn ] 251.45: zp[1]:186 [ ghost4_respawn ] 234.93: zp[1]:187 [ ghosts_mode_count ] 233.4: zp[1]:188 [ pacman_substep ] 223.51: zp[1]:190 [ ghost1_substep ] 218.65: zp[1]:191 [ ghost2_substep ] 214: zp[1]:192 [ ghost3_substep ] 209.54: zp[1]:193 [ ghost4_substep ] 132.92: zp[1]:208 [ pacman_direction ] 122.24: zp[1]:209 [ ghost1_direction ] 110.28: zp[1]:210 [ ghost2_direction ] 100.46: zp[1]:213 [ ghost3_direction ] 92.24: zp[1]:214 [ ghost4_direction ] 92: zp[1]:215 [ top_sprites_mc ] 84.55: zp[1]:216 [ ghost1_xfine ] 82.13: zp[1]:217 [ ghost1_yfine ] 78.04: zp[1]:218 [ phase ] 76.29: zp[1]:219 [ ghost2_xfine ] 74.28: zp[1]:220 [ ghost2_yfine ] 69.49: zp[1]:221 [ ghost3_xfine ] 69.48: zp[1]:222 [ game_playable ] 67.8: zp[1]:223 [ ghost3_yfine ] 63.81: zp[1]:224 [ ghost4_xfine ] 62.36: zp[1]:225 [ ghost4_yfine ] 47.72: zp[1]:226 [ pacman_xfine ] 46.22: zp[1]:227 [ pacman_yfine ] 20: mem[1] [ logic_tile_left_idx ] 20: mem[1] [ logic_tile_right_idx ] 20: mem[2] [ left_render_index_xcol ] 20: mem[2] [ left_canvas ] 20: mem[1] [ left_ypos_inc_offset ] 20: mem[2] [ rigt_render_index_xcol ] 20: mem[2] [ rigt_canvas ] 20: mem[1] [ rigt_ypos_inc_offset ] 14.19: mem[2] [ pill_count ] 2.95: mem[1] [ game_logic_substep ] 1.94: mem[1] [ pacman_ch1_idx ] 1.1: mem[1] [ ghosts_mode ] 0.9: mem[1] [ anim_frame_idx ] 0.73: mem[1] [ ghost1_reverse ] 0.71: mem[1] [ ghost2_reverse ] 0.7: mem[1] [ ghost3_reverse ] 0.69: mem[1] [ ghost4_reverse ] 0.5: mem[1] [ frame ] 0.08: mem[1] [ pacman_ch1_enabled ] +Uplift Scope [] 69,506.88: zp[1]:123 [ music_play_next ] 11,040: zp[1]:146 [ side_sprites_color ] 11,040: zp[1]:147 [ side_sprites_mc ] 11,040: zp[1]:148 [ bottom_sprites_color ] 11,040: zp[1]:149 [ bottom_sprites_mc ] 10,250: zp[2]:150 [ logic_tile_ptr ] 10,250: zp[1]:152 [ logic_tile_xcol ] 10,250: zp[1]:153 [ logic_tile_yfine ] 3,403.67: zp[1]:159 [ top_sprites_color ] 2,040.32: zp[1]:163 [ pacman_wins ] 1,070: zp[1]:172 [ canvas_base_hi ] 1,070: zp[1]:173 [ bobs_restore_base ] 656.44: zp[1]:180 [ pacman_lives ] 271.84: zp[1]:183 [ ghost1_respawn ] 264.68: zp[1]:184 [ ghost2_respawn ] 257.9: zp[1]:185 [ ghost3_respawn ] 251.45: zp[1]:186 [ ghost4_respawn ] 234.93: zp[1]:187 [ ghosts_mode_count ] 233.4: zp[1]:188 [ pacman_substep ] 223.51: zp[1]:190 [ ghost1_substep ] 218.65: zp[1]:191 [ ghost2_substep ] 214: zp[1]:192 [ ghost3_substep ] 209.54: zp[1]:193 [ ghost4_substep ] 132.92: zp[1]:208 [ pacman_direction ] 122.24: zp[1]:209 [ ghost1_direction ] 110.28: zp[1]:210 [ ghost2_direction ] 100.46: zp[1]:213 [ ghost3_direction ] 92.24: zp[1]:214 [ ghost4_direction ] 92: zp[1]:215 [ top_sprites_mc ] 84.55: zp[1]:216 [ ghost1_xfine ] 82.13: zp[1]:217 [ ghost1_yfine ] 78.04: zp[1]:218 [ phase ] 76.29: zp[1]:219 [ ghost2_xfine ] 74.28: zp[1]:220 [ ghost2_yfine ] 69.49: zp[1]:221 [ ghost3_xfine ] 69.48: zp[1]:222 [ game_playable ] 67.8: zp[1]:223 [ ghost3_yfine ] 63.81: zp[1]:224 [ ghost4_xfine ] 62.36: zp[1]:225 [ ghost4_yfine ] 47.72: zp[1]:226 [ pacman_xfine ] 46.22: zp[1]:227 [ pacman_yfine ] 20: zp[1]:295 [ logic_tile_left_idx ] 20: zp[1]:296 [ logic_tile_right_idx ] 20: zp[2]:297 [ left_render_index_xcol ] 20: zp[2]:299 [ left_canvas ] 20: zp[1]:301 [ left_ypos_inc_offset ] 20: zp[2]:302 [ rigt_render_index_xcol ] 20: zp[2]:304 [ rigt_canvas ] 20: zp[1]:306 [ rigt_ypos_inc_offset ] 14.19: zp[2]:314 [ pill_count ] 2.95: zp[1]:352 [ game_logic_substep ] 1.94: zp[1]:362 [ pacman_ch1_idx ] 1.1: zp[1]:363 [ ghosts_mode ] 0.9: zp[1]:364 [ anim_frame_idx ] 0.73: zp[1]:365 [ ghost1_reverse ] 0.71: zp[1]:366 [ ghost2_reverse ] 0.7: zp[1]:367 [ ghost3_reverse ] 0.69: zp[1]:368 [ ghost4_reverse ] 0.5: zp[1]:369 [ frame ] 0.08: zp[1]:370 [ pacman_ch1_enabled ] Uplift Scope [memcpy] 30,003: zp[2]:131 [ memcpy::src#2 memcpy::src#1 ] 20,002: zp[2]:137 [ memcpy::dst#2 memcpy::dst#1 ] -Uplift Scope [memset] 35,672.33: zp[2]:128 [ memset::dst#2 memset::dst#4 memset::dst#1 ] 1,833.67: zp[2]:169 [ memset::end#0 ] 1,001: zp[2]:174 [ memset::num#5 ] 0: mem[2] [ memset::str#6 ] +Uplift Scope [memset] 35,672.33: zp[2]:128 [ memset::dst#2 memset::dst#4 memset::dst#1 ] 1,833.67: zp[2]:169 [ memset::end#0 ] 1,001: zp[2]:174 [ memset::num#5 ] 0: zp[2]:371 [ memset::str#6 ] Uplift Scope [splash_run] 20,002: zp[1]:140 [ splash_run::$30 ] 4,679.75: zp[1]:158 [ splash_run::msb#10 splash_run::msb#8 splash_run::msb#1 splash_run::msb#2 ] 3,336.67: zp[1]:160 [ splash_run::i1#2 splash_run::i1#1 ] 3,203.2: zp[1]:161 [ splash_run::i2#2 splash_run::i2#1 ] 2,366: zp[1]:162 [ splash_run::i#2 splash_run::i#1 ] 2,002: zp[1]:164 [ splash_run::$25 ] 1,334.67: zp[1]:171 [ splash_run::$34 ] 667.33: zp[2]:177 [ splash_run::xpos#0 ] -Uplift Scope [choose_direction] 676.7: zp[1]:176 [ choose_direction::dist_min#10 choose_direction::dist_min#13 choose_direction::dist_min#14 choose_direction::dist_down#0 ] 656.5: zp[1]:179 [ choose_direction::dist_min#11 choose_direction::dist_left#0 choose_direction::dist_min#17 choose_direction::dist_min#18 ] 202: zp[1]:197 [ choose_direction::$2 ] 202: zp[1]:198 [ choose_direction::$4 ] 202: zp[1]:199 [ choose_direction::$6 ] 202: zp[1]:200 [ choose_direction::$8 ] 202: zp[1]:201 [ choose_direction::dist_right#0 ] 194.9: zp[1]:203 [ choose_direction::return#10 choose_direction::direction#6 choose_direction::direction#8 choose_direction::direction#10 ] 189: zp[1]:204 [ choose_direction::target_xtile#4 choose_direction::target_xtile#2 choose_direction::target_xtile#3 choose_direction::target_xtile#0 choose_direction::target_xtile#1 ] 181.8: zp[1]:205 [ choose_direction::dist_min#6 choose_direction::dist_up#0 ] 167: zp[1]:206 [ choose_direction::ghost_xtile#4 choose_direction::ghost_xtile#2 choose_direction::ghost_xtile#3 choose_direction::ghost_xtile#0 choose_direction::ghost_xtile#1 ] 160.5: zp[1]:207 [ choose_direction::target_ytile#4 choose_direction::target_ytile#2 choose_direction::target_ytile#3 choose_direction::target_ytile#0 choose_direction::target_ytile#1 ] 101.83: zp[1]:212 [ choose_direction::ghost_ytile#4 choose_direction::ghost_ytile#2 choose_direction::ghost_ytile#3 choose_direction::ghost_ytile#0 choose_direction::ghost_ytile#1 ] 37.08: zp[1]:229 [ choose_direction::open_directions#10 choose_direction::open_directions#2 choose_direction::open_directions#3 choose_direction::open_directions#0 choose_direction::open_directions#1 ] 22: mem[1] [ choose_direction::return#0 ] 22: mem[1] [ choose_direction::return#1 ] 22: mem[1] [ choose_direction::return#2 ] 22: mem[1] [ choose_direction::return#3 ] 21.96: mem[1] [ choose_direction::ydiff#0 ] 21.04: mem[1] [ choose_direction::xdiff#0 ] -Uplift Scope [game_logic] 40.5: zp[1]:228 [ game_logic::ghost_frame_idx#2 game_logic::ghost_frame_idx#0 game_logic::ghost_frame_idx#1 ] 26.4: zp[1]:230 [ game_logic::target_ytile#3 game_logic::target_ytile#2 ] 26.4: zp[1]:231 [ game_logic::target_ytile1#3 game_logic::target_ytile1#2 ] 26.4: zp[1]:232 [ game_logic::target_ytile2#3 game_logic::target_ytile2#2 ] 26.4: zp[1]:233 [ game_logic::target_ytile3#3 game_logic::target_ytile3#2 ] 22: zp[1]:234 [ game_logic::$2 ] 22: zp[1]:235 [ game_logic::$3 ] 22: zp[1]:236 [ game_logic::$14 ] 22: zp[1]:237 [ game_logic::$15 ] 22: zp[1]:238 [ game_logic::$17 ] 22: zp[1]:239 [ game_logic::$18 ] 22: zp[1]:240 [ game_logic::$20 ] 22: zp[1]:241 [ game_logic::$21 ] 22: zp[1]:242 [ game_logic::$25 ] 22: zp[1]:243 [ game_logic::$26 ] 22: zp[1]:244 [ game_logic::$28 ] 22: zp[1]:245 [ game_logic::$29 ] 22: zp[1]:246 [ game_logic::$31 ] 22: zp[1]:247 [ game_logic::$32 ] 22: zp[1]:248 [ game_logic::$34 ] 22: zp[1]:249 [ game_logic::$35 ] 22: zp[1]:250 [ game_logic::$37 ] 22: zp[1]:251 [ game_logic::$38 ] 22: mem[1] [ game_logic::$40 ] 22: mem[1] [ game_logic::$41 ] 22: mem[1] [ game_logic::$43 ] 22: mem[1] [ game_logic::$44 ] 22: mem[1] [ game_logic::$46 ] 22: mem[1] [ game_logic::$47 ] 22: mem[1] [ game_logic::pacman_ytile#0 ] 22: mem[1] [ game_logic::$65 ] 22: mem[1] [ game_logic::$66 ] 22: mem[2] [ game_logic::$67 ] 22: mem[1] [ game_logic::$68 ] 22: mem[1] [ game_logic::$69 ] 22: mem[1] [ game_logic::$70 ] 22: mem[2] [ game_logic::$71 ] 22: mem[1] [ game_logic::$72 ] 22: mem[1] [ game_logic::open_directions#0 ] 22: mem[1] [ game_logic::$119 ] 22: mem[1] [ game_logic::open_directions1#0 ] 22: mem[1] [ game_logic::$140 ] 22: mem[1] [ game_logic::open_directions2#0 ] 22: mem[1] [ game_logic::$161 ] 22: mem[1] [ game_logic::open_directions3#0 ] 22: mem[1] [ game_logic::$182 ] 22: mem[1] [ game_logic::$199 ] 22: mem[1] [ game_logic::$200 ] 22: mem[1] [ game_logic::$204 ] 16.5: mem[1] [ game_logic::target_xtile#3 game_logic::target_xtile#2 ] 16.5: mem[1] [ game_logic::target_xtile1#3 game_logic::target_xtile1#2 ] 16.5: mem[1] [ game_logic::target_xtile2#3 game_logic::target_xtile2#2 ] 16.5: mem[1] [ game_logic::target_xtile3#3 game_logic::target_xtile3#2 ] 16.5: mem[1] [ game_logic::tile_id#0 ] 16.5: mem[1] [ game_logic::joy_directions#0 ] 16.5: mem[1] [ game_logic::new_direction#0 ] 11: mem[1] [ game_logic::do_reverse#4 ] 11: mem[1] [ game_logic::$19 ] 11: mem[1] [ game_logic::$27 ] 11: mem[1] [ game_logic::$33 ] 11: mem[1] [ game_logic::$39 ] 11: mem[1] [ game_logic::$45 ] 11: mem[1] [ game_logic::$75 ] 11: mem[1] [ game_logic::$77 ] 11: mem[1] [ game_logic::$80 ] 11: mem[1] [ game_logic::$82 ] 11: mem[1] [ game_logic::$85 ] 11: mem[1] [ game_logic::$87 ] 11: mem[1] [ game_logic::$90 ] 11: mem[1] [ game_logic::$92 ] 11: mem[1] [ game_logic::$220 ] 11: mem[1] [ game_logic::$223 ] 11: mem[1] [ game_logic::$226 ] 11: mem[1] [ game_logic::$229 ] 11: mem[1] [ game_logic::$232 ] 11: mem[1] [ game_logic::pacman_xtile1#0 ] 11: mem[1] [ game_logic::pacman_ytile1#0 ] 6.77: mem[1] [ game_logic::pacman_xtile#0 ] 5.5: mem[1] [ game_logic::pacman_bob_xfine#0 ] 5.5: mem[1] [ game_logic::ghost1_bob_xfine#0 ] 5.5: mem[1] [ game_logic::ghost2_bob_xfine#0 ] 5.5: mem[1] [ game_logic::ghost3_bob_xfine#0 ] 5.5: mem[1] [ game_logic::ghost4_bob_xfine#0 ] 5.5: mem[2] [ game_logic::ytiles#0 ] 5.5: mem[1] [ game_logic::open_directions#1 ] 5.5: mem[1] [ game_logic::open_directions1#1 ] 5.5: mem[1] [ game_logic::open_directions2#1 ] 5.5: mem[1] [ game_logic::open_directions3#1 ] 3.67: mem[1] [ game_logic::open_directions4#0 ] 2.59: mem[1] [ game_logic::$210 ] 2.36: mem[1] [ game_logic::ghost4_xtile#0 ] 2.36: mem[1] [ game_logic::ghost4_ytile#0 ] 2.36: mem[1] [ game_logic::ghost3_xtile#0 ] 2.36: mem[1] [ game_logic::ghost3_ytile#0 ] 2.36: mem[1] [ game_logic::ghost2_xtile#0 ] 2.36: mem[1] [ game_logic::ghost2_ytile#0 ] 2.36: mem[1] [ game_logic::ghost1_xtile#0 ] 2.36: mem[1] [ game_logic::ghost1_ytile#0 ] -Uplift Scope [level_tile_directions] 224.29: zp[1]:189 [ level_tile_directions::return#2 level_tile_directions::return#0 ] 202: zp[1]:194 [ level_tile_directions::$5 ] 202: zp[2]:195 [ level_tile_directions::ytiles#0 ] 195.67: zp[1]:202 [ level_tile_directions::ytile#5 level_tile_directions::ytile#1 level_tile_directions::ytile#2 level_tile_directions::ytile#3 level_tile_directions::ytile#4 level_tile_directions::ytile#0 ] 106.4: zp[1]:211 [ level_tile_directions::xtile#5 level_tile_directions::xtile#1 level_tile_directions::xtile#2 level_tile_directions::xtile#3 level_tile_directions::xtile#4 level_tile_directions::xtile#0 ] 22: mem[1] [ level_tile_directions::return#3 ] 22: mem[1] [ level_tile_directions::return#10 ] 22: mem[1] [ level_tile_directions::return#11 ] 22: mem[1] [ level_tile_directions::return#12 ] 22: mem[1] [ level_tile_directions::return#13 ] +Uplift Scope [choose_direction] 676.7: zp[1]:176 [ choose_direction::dist_min#10 choose_direction::dist_min#13 choose_direction::dist_min#14 choose_direction::dist_down#0 ] 656.5: zp[1]:179 [ choose_direction::dist_min#11 choose_direction::dist_left#0 choose_direction::dist_min#17 choose_direction::dist_min#18 ] 202: zp[1]:197 [ choose_direction::$2 ] 202: zp[1]:198 [ choose_direction::$4 ] 202: zp[1]:199 [ choose_direction::$6 ] 202: zp[1]:200 [ choose_direction::$8 ] 202: zp[1]:201 [ choose_direction::dist_right#0 ] 194.9: zp[1]:203 [ choose_direction::return#10 choose_direction::direction#6 choose_direction::direction#8 choose_direction::direction#10 ] 189: zp[1]:204 [ choose_direction::target_xtile#4 choose_direction::target_xtile#2 choose_direction::target_xtile#3 choose_direction::target_xtile#0 choose_direction::target_xtile#1 ] 181.8: zp[1]:205 [ choose_direction::dist_min#6 choose_direction::dist_up#0 ] 167: zp[1]:206 [ choose_direction::ghost_xtile#4 choose_direction::ghost_xtile#2 choose_direction::ghost_xtile#3 choose_direction::ghost_xtile#0 choose_direction::ghost_xtile#1 ] 160.5: zp[1]:207 [ choose_direction::target_ytile#4 choose_direction::target_ytile#2 choose_direction::target_ytile#3 choose_direction::target_ytile#0 choose_direction::target_ytile#1 ] 101.83: zp[1]:212 [ choose_direction::ghost_ytile#4 choose_direction::ghost_ytile#2 choose_direction::ghost_ytile#3 choose_direction::ghost_ytile#0 choose_direction::ghost_ytile#1 ] 37.08: zp[1]:229 [ choose_direction::open_directions#10 choose_direction::open_directions#2 choose_direction::open_directions#3 choose_direction::open_directions#0 choose_direction::open_directions#1 ] 22: zp[1]:275 [ choose_direction::return#0 ] 22: zp[1]:279 [ choose_direction::return#1 ] 22: zp[1]:283 [ choose_direction::return#2 ] 22: zp[1]:287 [ choose_direction::return#3 ] 21.96: zp[1]:293 [ choose_direction::ydiff#0 ] 21.04: zp[1]:294 [ choose_direction::xdiff#0 ] +Uplift Scope [game_logic] 40.5: zp[1]:228 [ game_logic::ghost_frame_idx#2 game_logic::ghost_frame_idx#0 game_logic::ghost_frame_idx#1 ] 26.4: zp[1]:230 [ game_logic::target_ytile#3 game_logic::target_ytile#2 ] 26.4: zp[1]:231 [ game_logic::target_ytile1#3 game_logic::target_ytile1#2 ] 26.4: zp[1]:232 [ game_logic::target_ytile2#3 game_logic::target_ytile2#2 ] 26.4: zp[1]:233 [ game_logic::target_ytile3#3 game_logic::target_ytile3#2 ] 22: zp[1]:234 [ game_logic::$2 ] 22: zp[1]:235 [ game_logic::$3 ] 22: zp[1]:236 [ game_logic::$14 ] 22: zp[1]:237 [ game_logic::$15 ] 22: zp[1]:238 [ game_logic::$17 ] 22: zp[1]:239 [ game_logic::$18 ] 22: zp[1]:240 [ game_logic::$20 ] 22: zp[1]:241 [ game_logic::$21 ] 22: zp[1]:242 [ game_logic::$25 ] 22: zp[1]:243 [ game_logic::$26 ] 22: zp[1]:244 [ game_logic::$28 ] 22: zp[1]:245 [ game_logic::$29 ] 22: zp[1]:246 [ game_logic::$31 ] 22: zp[1]:247 [ game_logic::$32 ] 22: zp[1]:248 [ game_logic::$34 ] 22: zp[1]:249 [ game_logic::$35 ] 22: zp[1]:250 [ game_logic::$37 ] 22: zp[1]:251 [ game_logic::$38 ] 22: zp[1]:256 [ game_logic::$40 ] 22: zp[1]:257 [ game_logic::$41 ] 22: zp[1]:258 [ game_logic::$43 ] 22: zp[1]:259 [ game_logic::$44 ] 22: zp[1]:260 [ game_logic::$46 ] 22: zp[1]:261 [ game_logic::$47 ] 22: zp[1]:262 [ game_logic::pacman_ytile#0 ] 22: zp[1]:263 [ game_logic::$65 ] 22: zp[1]:264 [ game_logic::$66 ] 22: zp[2]:265 [ game_logic::$67 ] 22: zp[1]:267 [ game_logic::$68 ] 22: zp[1]:268 [ game_logic::$69 ] 22: zp[1]:269 [ game_logic::$70 ] 22: zp[2]:270 [ game_logic::$71 ] 22: zp[1]:272 [ game_logic::$72 ] 22: zp[1]:274 [ game_logic::open_directions#0 ] 22: zp[1]:276 [ game_logic::$119 ] 22: zp[1]:278 [ game_logic::open_directions1#0 ] 22: zp[1]:280 [ game_logic::$140 ] 22: zp[1]:282 [ game_logic::open_directions2#0 ] 22: zp[1]:284 [ game_logic::$161 ] 22: zp[1]:286 [ game_logic::open_directions3#0 ] 22: zp[1]:288 [ game_logic::$182 ] 22: zp[1]:290 [ game_logic::$199 ] 22: zp[1]:291 [ game_logic::$200 ] 22: zp[1]:292 [ game_logic::$204 ] 16.5: zp[1]:307 [ game_logic::target_xtile#3 game_logic::target_xtile#2 ] 16.5: zp[1]:308 [ game_logic::target_xtile1#3 game_logic::target_xtile1#2 ] 16.5: zp[1]:309 [ game_logic::target_xtile2#3 game_logic::target_xtile2#2 ] 16.5: zp[1]:310 [ game_logic::target_xtile3#3 game_logic::target_xtile3#2 ] 16.5: zp[1]:311 [ game_logic::tile_id#0 ] 16.5: zp[1]:312 [ game_logic::joy_directions#0 ] 16.5: zp[1]:313 [ game_logic::new_direction#0 ] 11: zp[1]:316 [ game_logic::do_reverse#4 ] 11: zp[1]:317 [ game_logic::$19 ] 11: zp[1]:318 [ game_logic::$27 ] 11: zp[1]:319 [ game_logic::$33 ] 11: zp[1]:320 [ game_logic::$39 ] 11: zp[1]:321 [ game_logic::$45 ] 11: zp[1]:322 [ game_logic::$75 ] 11: zp[1]:323 [ game_logic::$77 ] 11: zp[1]:324 [ game_logic::$80 ] 11: zp[1]:325 [ game_logic::$82 ] 11: zp[1]:326 [ game_logic::$85 ] 11: zp[1]:327 [ game_logic::$87 ] 11: zp[1]:328 [ game_logic::$90 ] 11: zp[1]:329 [ game_logic::$92 ] 11: zp[1]:330 [ game_logic::$220 ] 11: zp[1]:331 [ game_logic::$223 ] 11: zp[1]:332 [ game_logic::$226 ] 11: zp[1]:333 [ game_logic::$229 ] 11: zp[1]:334 [ game_logic::$232 ] 11: zp[1]:335 [ game_logic::pacman_xtile1#0 ] 11: zp[1]:336 [ game_logic::pacman_ytile1#0 ] 6.77: zp[1]:337 [ game_logic::pacman_xtile#0 ] 5.5: zp[1]:338 [ game_logic::pacman_bob_xfine#0 ] 5.5: zp[1]:339 [ game_logic::ghost1_bob_xfine#0 ] 5.5: zp[1]:340 [ game_logic::ghost2_bob_xfine#0 ] 5.5: zp[1]:341 [ game_logic::ghost3_bob_xfine#0 ] 5.5: zp[1]:342 [ game_logic::ghost4_bob_xfine#0 ] 5.5: zp[2]:343 [ game_logic::ytiles#0 ] 5.5: zp[1]:345 [ game_logic::open_directions#1 ] 5.5: zp[1]:346 [ game_logic::open_directions1#1 ] 5.5: zp[1]:347 [ game_logic::open_directions2#1 ] 5.5: zp[1]:348 [ game_logic::open_directions3#1 ] 3.67: zp[1]:351 [ game_logic::open_directions4#0 ] 2.59: zp[1]:353 [ game_logic::$210 ] 2.36: zp[1]:354 [ game_logic::ghost4_xtile#0 ] 2.36: zp[1]:355 [ game_logic::ghost4_ytile#0 ] 2.36: zp[1]:356 [ game_logic::ghost3_xtile#0 ] 2.36: zp[1]:357 [ game_logic::ghost3_ytile#0 ] 2.36: zp[1]:358 [ game_logic::ghost2_xtile#0 ] 2.36: zp[1]:359 [ game_logic::ghost2_ytile#0 ] 2.36: zp[1]:360 [ game_logic::ghost1_xtile#0 ] 2.36: zp[1]:361 [ game_logic::ghost1_ytile#0 ] +Uplift Scope [level_tile_directions] 224.29: zp[1]:189 [ level_tile_directions::return#2 level_tile_directions::return#0 ] 202: zp[1]:194 [ level_tile_directions::$5 ] 202: zp[2]:195 [ level_tile_directions::ytiles#0 ] 195.67: zp[1]:202 [ level_tile_directions::ytile#5 level_tile_directions::ytile#1 level_tile_directions::ytile#2 level_tile_directions::ytile#3 level_tile_directions::ytile#4 level_tile_directions::ytile#0 ] 106.4: zp[1]:211 [ level_tile_directions::xtile#5 level_tile_directions::xtile#1 level_tile_directions::xtile#2 level_tile_directions::xtile#3 level_tile_directions::xtile#4 level_tile_directions::xtile#0 ] 22: zp[1]:273 [ level_tile_directions::return#3 ] 22: zp[1]:277 [ level_tile_directions::return#10 ] 22: zp[1]:281 [ level_tile_directions::return#11 ] 22: zp[1]:285 [ level_tile_directions::return#12 ] 22: zp[1]:289 [ level_tile_directions::return#13 ] Uplift Scope [byteboozer_decrunch] 438.5: zp[2]:181 [ byteboozer_decrunch::crunched ] -Uplift Scope [irq_screen_top] 4: mem[1] [ irq_screen_top::$1 ] 4: mem[1] [ irq_screen_top::$2 ] +Uplift Scope [irq_screen_top] 4: zp[1]:349 [ irq_screen_top::$1 ] 4: zp[1]:350 [ irq_screen_top::$2 ] Uplift Scope [MOS6526_CIA] Uplift Scope [MOS6569_VICII] Uplift Scope [MOS6581_SID] @@ -15152,467 +15042,467 @@ Uplift Scope [GHOSTS_MODE] Uplift Scope [spawn_all] Uplift Scope [__start] -Uplifting [render_tiles] best 2567936 combination zp[1]:2 [ render_tiles::y#2 render_tiles::y#1 ] reg byte x [ render_tiles::ypos_inc_offset#2 render_tiles::ypos_inc_offset#0 render_tiles::ypos_inc_offset#1 ] reg byte a [ render_tiles::pixels#0 ] zp[2]:5 [ render_tiles::canvas2#2 render_tiles::canvas2#0 render_tiles::canvas2#1 ] zp[2]:7 [ render_tiles::canvas1#2 render_tiles::canvas1#0 render_tiles::canvas1#1 ] zp[2]:15 [ render_tiles::tile_right_pixels#0 ] zp[2]:17 [ render_tiles::tile_left_pixels#0 ] reg byte a [ render_tiles::$0 ] reg byte a [ render_tiles::$2 ] zp[1]:26 [ render_tiles::$5 ] zp[2]:27 [ render_tiles::canvas_offset#0 ] zp[1]:32 [ render_tiles::$4 ] zp[1]:35 [ render_tiles::tile_left#0 ] zp[1]:36 [ render_tiles::tile_right#0 ] zp[2]:38 [ render_tiles::render_index_xcol#0 ] zp[1]:56 [ render_tiles::xcol#0 ] zp[1]:57 [ render_tiles::ytile#0 ] +Uplifting [render_tiles] best 2567556 combination zp[1]:2 [ render_tiles::y#2 render_tiles::y#1 ] reg byte x [ render_tiles::ypos_inc_offset#2 render_tiles::ypos_inc_offset#0 render_tiles::ypos_inc_offset#1 ] reg byte a [ render_tiles::pixels#0 ] zp[2]:5 [ render_tiles::canvas2#2 render_tiles::canvas2#0 render_tiles::canvas2#1 ] zp[2]:7 [ render_tiles::canvas1#2 render_tiles::canvas1#0 render_tiles::canvas1#1 ] zp[2]:15 [ render_tiles::tile_right_pixels#0 ] zp[2]:17 [ render_tiles::tile_left_pixels#0 ] reg byte a [ render_tiles::$0 ] reg byte a [ render_tiles::$2 ] zp[1]:26 [ render_tiles::$5 ] zp[2]:27 [ render_tiles::canvas_offset#0 ] zp[1]:32 [ render_tiles::$4 ] zp[1]:35 [ render_tiles::tile_left#0 ] zp[1]:36 [ render_tiles::tile_right#0 ] zp[2]:38 [ render_tiles::render_index_xcol#0 ] zp[1]:56 [ render_tiles::xcol#0 ] zp[1]:57 [ render_tiles::ytile#0 ] Limited combination testing to 100 combinations of 248832 possible. -Uplifting [render] best 2387929 combination reg byte y [ render::i#2 render::i#1 ] reg byte x [ render::ypos_inc_offset#2 render::ypos_inc_offset#0 render::ypos_inc_offset#1 ] zp[2]:11 [ render::canvas1#2 render::canvas1#0 render::canvas1#1 ] zp[2]:13 [ render::canvas2#2 render::canvas2#0 render::canvas2#1 ] zp[1]:19 [ render::ypix#0 ] reg byte a [ render::$2 ] zp[2]:54 [ render::canvas_offset#0 ] zp[1]:59 [ render::ytile#0 ] zp[1]:60 [ render::$1 ] zp[1]:61 [ render::xcol#2 render::xcol#0 render::xcol#1 ] zp[1]:64 [ render::ypos#2 render::ypos#0 render::ypos#1 ] zp[1]:65 [ render::pixels#4 render::pixels#0 render::pixels#1 ] zp[2]:73 [ render::render_index_xcol#0 ] +Uplifting [render] best 2387549 combination reg byte y [ render::i#2 render::i#1 ] reg byte x [ render::ypos_inc_offset#2 render::ypos_inc_offset#0 render::ypos_inc_offset#1 ] zp[2]:11 [ render::canvas1#2 render::canvas1#0 render::canvas1#1 ] zp[2]:13 [ render::canvas2#2 render::canvas2#0 render::canvas2#1 ] zp[1]:19 [ render::ypix#0 ] reg byte a [ render::$2 ] zp[2]:54 [ render::canvas_offset#0 ] zp[1]:59 [ render::ytile#0 ] zp[1]:60 [ render::$1 ] zp[1]:61 [ render::xcol#2 render::xcol#0 render::xcol#1 ] zp[1]:64 [ render::ypos#2 render::ypos#0 render::ypos#1 ] zp[1]:65 [ render::pixels#4 render::pixels#0 render::pixels#1 ] zp[2]:73 [ render::render_index_xcol#0 ] Limited combination testing to 100 combinations of 11664 possible. -Uplifting [level_tile_get] best 2355911 combination reg byte a [ level_tile_get::return#2 level_tile_get::return#0 ] reg byte a [ level_tile_get::$5 ] zp[2]:22 [ level_tile_get::ytiles#0 ] reg byte a [ level_tile_get::ytile#4 level_tile_get::ytile#0 level_tile_get::ytile#1 level_tile_get::ytile#2 level_tile_get::ytile#3 ] reg byte x [ level_tile_get::xtile#4 level_tile_get::xtile#0 level_tile_get::xtile#1 level_tile_get::xtile#2 level_tile_get::xtile#3 ] zp[1]:44 [ level_tile_get::return#3 ] zp[1]:46 [ level_tile_get::return#4 ] zp[1]:48 [ level_tile_get::return#10 ] zp[1]:50 [ level_tile_get::return#11 ] +Uplifting [level_tile_get] best 2355531 combination reg byte a [ level_tile_get::return#2 level_tile_get::return#0 ] reg byte a [ level_tile_get::$5 ] zp[2]:22 [ level_tile_get::ytiles#0 ] reg byte a [ level_tile_get::ytile#4 level_tile_get::ytile#0 level_tile_get::ytile#1 level_tile_get::ytile#2 level_tile_get::ytile#3 ] reg byte x [ level_tile_get::xtile#4 level_tile_get::xtile#0 level_tile_get::xtile#1 level_tile_get::xtile#2 level_tile_get::xtile#3 ] zp[1]:44 [ level_tile_get::return#3 ] zp[1]:46 [ level_tile_get::return#4 ] zp[1]:48 [ level_tile_get::return#10 ] zp[1]:50 [ level_tile_get::return#11 ] Limited combination testing to 100 combinations of 49152 possible. -Uplifting [init_level_tile_directions] best 2343911 combination zp[1]:31 [ init_level_tile_directions::open_directions#8 init_level_tile_directions::open_directions#4 init_level_tile_directions::open_directions#13 init_level_tile_directions::open_directions#3 init_level_tile_directions::open_directions#12 init_level_tile_directions::open_directions#2 init_level_tile_directions::open_directions#11 ] zp[1]:41 [ init_level_tile_directions::xtile#10 init_level_tile_directions::xtile#1 ] reg byte x [ init_level_tile_directions::$3 ] reg byte x [ init_level_tile_directions::$7 ] zp[1]:49 [ init_level_tile_directions::$11 ] zp[1]:51 [ init_level_tile_directions::$15 ] zp[1]:69 [ init_level_tile_directions::ytile#15 init_level_tile_directions::ytile#1 ] zp[2]:85 [ init_level_tile_directions::directions#7 init_level_tile_directions::directions#1 ] +Uplifting [init_level_tile_directions] best 2343531 combination zp[1]:31 [ init_level_tile_directions::open_directions#8 init_level_tile_directions::open_directions#4 init_level_tile_directions::open_directions#13 init_level_tile_directions::open_directions#3 init_level_tile_directions::open_directions#12 init_level_tile_directions::open_directions#2 init_level_tile_directions::open_directions#11 ] zp[1]:41 [ init_level_tile_directions::xtile#10 init_level_tile_directions::xtile#1 ] reg byte x [ init_level_tile_directions::$3 ] reg byte x [ init_level_tile_directions::$7 ] zp[1]:49 [ init_level_tile_directions::$11 ] zp[1]:51 [ init_level_tile_directions::$15 ] zp[1]:69 [ init_level_tile_directions::ytile#15 init_level_tile_directions::ytile#1 ] zp[2]:85 [ init_level_tile_directions::directions#7 init_level_tile_directions::directions#1 ] Limited combination testing to 100 combinations of 6912 possible. -Uplifting [level_show] best 2327911 combination zp[2]:33 [ level_show::count#5 level_show::count#12 level_show::count#10 level_show::count#11 level_show::count#1 level_show::count#2 ] zp[1]:40 [ level_show::xcol#2 level_show::xcol#1 ] zp[1]:58 [ level_show::xtile#3 level_show::xtile#2 ] reg byte y [ level_show::xtile#1 ] zp[1]:63 [ level_show::tile_right#0 ] zp[1]:70 [ level_show::ytile#2 level_show::ytile#1 ] reg byte x [ level_show::tile_left#0 ] zp[2]:79 [ level_show::level#8 level_show::level#1 ] zp[2]:165 [ level_show::return#0 ] +Uplifting [level_show] best 2327531 combination zp[2]:33 [ level_show::count#5 level_show::count#12 level_show::count#10 level_show::count#11 level_show::count#1 level_show::count#2 ] zp[1]:40 [ level_show::xcol#2 level_show::xcol#1 ] zp[1]:58 [ level_show::xtile#3 level_show::xtile#2 ] reg byte y [ level_show::xtile#1 ] zp[1]:63 [ level_show::tile_right#0 ] zp[1]:70 [ level_show::ytile#2 level_show::ytile#1 ] reg byte x [ level_show::tile_left#0 ] zp[2]:79 [ level_show::level#8 level_show::level#1 ] zp[2]:165 [ level_show::return#0 ] Limited combination testing to 100 combinations of 216 possible. -Uplifting [init_sprite_pointers] best 2295011 combination reg byte y [ init_sprite_pointers::sprite#2 init_sprite_pointers::sprite#1 ] reg byte a [ init_sprite_pointers::$2 ] reg byte a [ init_sprite_pointers::sprite_id#0 ] reg byte x [ init_sprite_pointers::screen#2 init_sprite_pointers::screen#1 ] zp[2]:77 [ init_sprite_pointers::sprites_ptr_2#5 init_sprite_pointers::sprites_ptr_2#1 ] zp[2]:83 [ init_sprite_pointers::sprites_ptr_1#5 init_sprite_pointers::sprites_ptr_1#1 ] +Uplifting [init_sprite_pointers] best 2294631 combination reg byte y [ init_sprite_pointers::sprite#2 init_sprite_pointers::sprite#1 ] reg byte a [ init_sprite_pointers::$2 ] reg byte a [ init_sprite_pointers::sprite_id#0 ] reg byte x [ init_sprite_pointers::screen#2 init_sprite_pointers::screen#1 ] zp[2]:77 [ init_sprite_pointers::sprites_ptr_2#5 init_sprite_pointers::sprites_ptr_2#1 ] zp[2]:83 [ init_sprite_pointers::sprites_ptr_1#5 init_sprite_pointers::sprites_ptr_1#1 ] Limited combination testing to 100 combinations of 144 possible. -Uplifting [joyfire] best 2285101 combination reg byte a [ joyfire::$0 ] reg byte a [ joyfire::return#0 ] reg byte a [ joyfire::return#4 ] reg byte a [ joyfire::return#1 ] +Uplifting [joyfire] best 2284721 combination reg byte a [ joyfire::$0 ] reg byte a [ joyfire::return#0 ] reg byte a [ joyfire::return#4 ] reg byte a [ joyfire::return#1 ] Limited combination testing to 100 combinations of 256 possible. -Uplifting [done_run] best 2275901 combination zp[1]:71 [ done_run::ypos#2 done_run::ypos#1 ] reg byte a [ done_run::$8 ] zp[2]:87 [ done_run::gfx#4 done_run::gfx#2 done_run::gfx#1 ] reg byte x [ done_run::pixels#0 ] reg byte x [ done_run::i#2 done_run::i#1 ] zp[1]:99 [ done_run::i1#2 done_run::i1#1 ] zp[1]:100 [ done_run::xcol#2 done_run::xcol#1 ] +Uplifting [done_run] best 2275521 combination zp[1]:71 [ done_run::ypos#2 done_run::ypos#1 ] reg byte a [ done_run::$8 ] zp[2]:87 [ done_run::gfx#4 done_run::gfx#2 done_run::gfx#1 ] reg byte x [ done_run::pixels#0 ] reg byte x [ done_run::i#2 done_run::i#1 ] zp[1]:99 [ done_run::i1#2 done_run::i1#1 ] zp[1]:100 [ done_run::xcol#2 done_run::xcol#1 ] Limited combination testing to 100 combinations of 576 possible. -Uplifting [merge_code] best 2273411 combination zp[2]:66 [ merge_code::logic_code#10 merge_code::logic_code#1 merge_code::logic_code#0 ] zp[2]:75 [ merge_code::dest_code#21 merge_code::dest_code#12 merge_code::dest_code#13 merge_code::dest_code#14 merge_code::dest_code#10 merge_code::dest_code#0 merge_code::dest_code#6 merge_code::dest_code#15 merge_code::dest_code#3 merge_code::dest_code#4 merge_code::dest_code#1 ] reg byte x [ merge_code::cycle_budget#10 merge_code::cycle_budget#2 merge_code::cycle_budget#3 merge_code::cycle_budget#13 merge_code::cycle_budget#0 merge_code::cycle_budget#1 ] zp[2]:97 [ merge_code::logic_code#14 merge_code::logic_code#3 merge_code::logic_code#4 ] zp[2]:112 [ merge_code::logic_code#12 merge_code::logic_code#5 merge_code::logic_code#18 merge_code::logic_code#17 merge_code::logic_code#2 ] zp[2]:116 [ merge_code::dest_code#2 ] reg byte y [ merge_code::$5 ] zp[2]:124 [ merge_code::raster_code#4 merge_code::raster_code#2 merge_code::raster_code#0 ] zp[1]:127 [ merge_code::logic_cycles#0 ] zp[2]:142 [ merge_code::raster_code#1 ] -Uplifting [init_render_index] best 2270711 combination reg byte x [ init_render_index::ypos_inc_offset#4 init_render_index::ypos_inc_offset#7 init_render_index::ypos_inc_offset#8 init_render_index::ypos_inc_offset#2 init_render_index::ypos_inc_offset#3 ] zp[1]:103 [ init_render_index::y_pos#2 init_render_index::y_pos#1 ] zp[2]:104 [ init_render_index::$11 ] zp[2]:106 [ init_render_index::$10 ] zp[2]:108 [ init_render_index::$12 ] reg byte a [ init_render_index::$5 ] reg byte a [ init_render_index::$6 ] zp[2]:114 [ init_render_index::render_index_xcol#2 init_render_index::render_index_xcol#7 init_render_index::render_index_xcol#1 ] zp[2]:121 [ init_render_index::canvas#0 ] zp[1]:136 [ init_render_index::x_col#2 init_render_index::x_col#1 ] reg byte a [ init_render_index::$9 ] zp[2]:144 [ init_render_index::render_index_xcol#0 init_render_index::render_index#1 ] zp[2]:154 [ init_render_index::canvas_xcol#0 ] zp[2]:156 [ init_render_index::render_ypos_table#4 ] +Uplifting [merge_code] best 2273031 combination zp[2]:66 [ merge_code::logic_code#10 merge_code::logic_code#1 merge_code::logic_code#0 ] zp[2]:75 [ merge_code::dest_code#21 merge_code::dest_code#12 merge_code::dest_code#13 merge_code::dest_code#14 merge_code::dest_code#10 merge_code::dest_code#0 merge_code::dest_code#6 merge_code::dest_code#15 merge_code::dest_code#3 merge_code::dest_code#4 merge_code::dest_code#1 ] reg byte x [ merge_code::cycle_budget#10 merge_code::cycle_budget#2 merge_code::cycle_budget#3 merge_code::cycle_budget#13 merge_code::cycle_budget#0 merge_code::cycle_budget#1 ] zp[2]:97 [ merge_code::logic_code#14 merge_code::logic_code#3 merge_code::logic_code#4 ] zp[2]:112 [ merge_code::logic_code#12 merge_code::logic_code#5 merge_code::logic_code#18 merge_code::logic_code#17 merge_code::logic_code#2 ] zp[2]:116 [ merge_code::dest_code#2 ] reg byte y [ merge_code::$5 ] zp[2]:124 [ merge_code::raster_code#4 merge_code::raster_code#2 merge_code::raster_code#0 ] zp[1]:127 [ merge_code::logic_cycles#0 ] zp[2]:142 [ merge_code::raster_code#1 ] +Uplifting [init_render_index] best 2270331 combination reg byte x [ init_render_index::ypos_inc_offset#4 init_render_index::ypos_inc_offset#7 init_render_index::ypos_inc_offset#8 init_render_index::ypos_inc_offset#2 init_render_index::ypos_inc_offset#3 ] zp[1]:103 [ init_render_index::y_pos#2 init_render_index::y_pos#1 ] zp[2]:104 [ init_render_index::$11 ] zp[2]:106 [ init_render_index::$10 ] zp[2]:108 [ init_render_index::$12 ] reg byte a [ init_render_index::$5 ] reg byte a [ init_render_index::$6 ] zp[2]:114 [ init_render_index::render_index_xcol#2 init_render_index::render_index_xcol#7 init_render_index::render_index_xcol#1 ] zp[2]:121 [ init_render_index::canvas#0 ] zp[1]:136 [ init_render_index::x_col#2 init_render_index::x_col#1 ] reg byte a [ init_render_index::$9 ] zp[2]:144 [ init_render_index::render_index_xcol#0 init_render_index::render_index#1 ] zp[2]:154 [ init_render_index::canvas_xcol#0 ] zp[2]:156 [ init_render_index::render_ypos_table#4 ] Limited combination testing to 100 combinations of 128 possible. -Uplifting [gameplay_run] best 2267111 combination reg byte x [ gameplay_run::i#2 gameplay_run::i#1 ] reg byte x [ gameplay_run::i1#2 gameplay_run::i1#1 ] reg byte x [ gameplay_run::i2#2 gameplay_run::i2#1 ] zp[2]:167 [ gameplay_run::$4 ] -Uplifting [splash_show] best 2266711 combination zp[1]:102 [ splash_show::ypos#2 splash_show::ypos#1 ] zp[2]:118 [ splash_show::splash#4 splash_show::splash#2 splash_show::splash#1 ] reg byte x [ splash_show::pixels#0 ] zp[1]:130 [ splash_show::xcol#2 splash_show::xcol#1 ] -Uplifting [init_bobs_restore] best 2265421 combination reg byte y [ init_bobs_restore::i#2 init_bobs_restore::i#1 ] zp[2]:133 [ init_bobs_restore::bob_restore#5 init_bobs_restore::bob_restore#1 ] reg byte x [ init_bobs_restore::bob#2 init_bobs_restore::bob#1 ] -Uplifting [] best 2265421 combination zp[1]:123 [ music_play_next ] zp[1]:146 [ side_sprites_color ] zp[1]:147 [ side_sprites_mc ] zp[1]:148 [ bottom_sprites_color ] zp[1]:149 [ bottom_sprites_mc ] zp[2]:150 [ logic_tile_ptr ] zp[1]:152 [ logic_tile_xcol ] zp[1]:153 [ logic_tile_yfine ] zp[1]:159 [ top_sprites_color ] zp[1]:163 [ pacman_wins ] zp[1]:172 [ canvas_base_hi ] zp[1]:173 [ bobs_restore_base ] zp[1]:180 [ pacman_lives ] zp[1]:183 [ ghost1_respawn ] zp[1]:184 [ ghost2_respawn ] zp[1]:185 [ ghost3_respawn ] zp[1]:186 [ ghost4_respawn ] zp[1]:187 [ ghosts_mode_count ] zp[1]:188 [ pacman_substep ] zp[1]:190 [ ghost1_substep ] zp[1]:191 [ ghost2_substep ] zp[1]:192 [ ghost3_substep ] zp[1]:193 [ ghost4_substep ] zp[1]:208 [ pacman_direction ] zp[1]:209 [ ghost1_direction ] zp[1]:210 [ ghost2_direction ] zp[1]:213 [ ghost3_direction ] zp[1]:214 [ ghost4_direction ] zp[1]:215 [ top_sprites_mc ] zp[1]:216 [ ghost1_xfine ] zp[1]:217 [ ghost1_yfine ] zp[1]:218 [ phase ] zp[1]:219 [ ghost2_xfine ] zp[1]:220 [ ghost2_yfine ] zp[1]:221 [ ghost3_xfine ] zp[1]:222 [ game_playable ] zp[1]:223 [ ghost3_yfine ] zp[1]:224 [ ghost4_xfine ] zp[1]:225 [ ghost4_yfine ] zp[1]:226 [ pacman_xfine ] zp[1]:227 [ pacman_yfine ] mem[1] [ logic_tile_left_idx ] mem[1] [ logic_tile_right_idx ] mem[2] [ left_render_index_xcol ] mem[2] [ left_canvas ] mem[1] [ left_ypos_inc_offset ] mem[2] [ rigt_render_index_xcol ] mem[2] [ rigt_canvas ] mem[1] [ rigt_ypos_inc_offset ] mem[2] [ pill_count ] mem[1] [ game_logic_substep ] mem[1] [ pacman_ch1_idx ] mem[1] [ ghosts_mode ] mem[1] [ anim_frame_idx ] mem[1] [ ghost1_reverse ] mem[1] [ ghost2_reverse ] mem[1] [ ghost3_reverse ] mem[1] [ ghost4_reverse ] mem[1] [ frame ] mem[1] [ pacman_ch1_enabled ] -Uplifting [memcpy] best 2265421 combination zp[2]:131 [ memcpy::src#2 memcpy::src#1 ] zp[2]:137 [ memcpy::dst#2 memcpy::dst#1 ] -Uplifting [memset] best 2265421 combination zp[2]:128 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp[2]:169 [ memset::end#0 ] zp[2]:174 [ memset::num#5 ] mem[2] [ memset::str#6 ] -Uplifting [splash_run] best 2264678 combination reg byte a [ splash_run::$30 ] reg byte x [ splash_run::msb#10 splash_run::msb#8 splash_run::msb#1 splash_run::msb#2 ] reg byte x [ splash_run::i1#2 splash_run::i1#1 ] reg byte x [ splash_run::i2#2 splash_run::i2#1 ] zp[1]:162 [ splash_run::i#2 splash_run::i#1 ] zp[1]:164 [ splash_run::$25 ] zp[1]:171 [ splash_run::$34 ] zp[2]:177 [ splash_run::xpos#0 ] +Uplifting [gameplay_run] best 2266731 combination reg byte x [ gameplay_run::i#2 gameplay_run::i#1 ] reg byte x [ gameplay_run::i1#2 gameplay_run::i1#1 ] reg byte x [ gameplay_run::i2#2 gameplay_run::i2#1 ] zp[2]:167 [ gameplay_run::$4 ] +Uplifting [splash_show] best 2266331 combination zp[1]:102 [ splash_show::ypos#2 splash_show::ypos#1 ] zp[2]:118 [ splash_show::splash#4 splash_show::splash#2 splash_show::splash#1 ] reg byte x [ splash_show::pixels#0 ] zp[1]:130 [ splash_show::xcol#2 splash_show::xcol#1 ] +Uplifting [init_bobs_restore] best 2265041 combination reg byte y [ init_bobs_restore::i#2 init_bobs_restore::i#1 ] zp[2]:133 [ init_bobs_restore::bob_restore#5 init_bobs_restore::bob_restore#1 ] reg byte x [ init_bobs_restore::bob#2 init_bobs_restore::bob#1 ] +Uplifting [] best 2265041 combination zp[1]:123 [ music_play_next ] zp[1]:146 [ side_sprites_color ] zp[1]:147 [ side_sprites_mc ] zp[1]:148 [ bottom_sprites_color ] zp[1]:149 [ bottom_sprites_mc ] zp[2]:150 [ logic_tile_ptr ] zp[1]:152 [ logic_tile_xcol ] zp[1]:153 [ logic_tile_yfine ] zp[1]:159 [ top_sprites_color ] zp[1]:163 [ pacman_wins ] zp[1]:172 [ canvas_base_hi ] zp[1]:173 [ bobs_restore_base ] zp[1]:180 [ pacman_lives ] zp[1]:183 [ ghost1_respawn ] zp[1]:184 [ ghost2_respawn ] zp[1]:185 [ ghost3_respawn ] zp[1]:186 [ ghost4_respawn ] zp[1]:187 [ ghosts_mode_count ] zp[1]:188 [ pacman_substep ] zp[1]:190 [ ghost1_substep ] zp[1]:191 [ ghost2_substep ] zp[1]:192 [ ghost3_substep ] zp[1]:193 [ ghost4_substep ] zp[1]:208 [ pacman_direction ] zp[1]:209 [ ghost1_direction ] zp[1]:210 [ ghost2_direction ] zp[1]:213 [ ghost3_direction ] zp[1]:214 [ ghost4_direction ] zp[1]:215 [ top_sprites_mc ] zp[1]:216 [ ghost1_xfine ] zp[1]:217 [ ghost1_yfine ] zp[1]:218 [ phase ] zp[1]:219 [ ghost2_xfine ] zp[1]:220 [ ghost2_yfine ] zp[1]:221 [ ghost3_xfine ] zp[1]:222 [ game_playable ] zp[1]:223 [ ghost3_yfine ] zp[1]:224 [ ghost4_xfine ] zp[1]:225 [ ghost4_yfine ] zp[1]:226 [ pacman_xfine ] zp[1]:227 [ pacman_yfine ] zp[1]:295 [ logic_tile_left_idx ] zp[1]:296 [ logic_tile_right_idx ] zp[2]:297 [ left_render_index_xcol ] zp[2]:299 [ left_canvas ] zp[1]:301 [ left_ypos_inc_offset ] zp[2]:302 [ rigt_render_index_xcol ] zp[2]:304 [ rigt_canvas ] zp[1]:306 [ rigt_ypos_inc_offset ] zp[2]:314 [ pill_count ] zp[1]:352 [ game_logic_substep ] zp[1]:362 [ pacman_ch1_idx ] zp[1]:363 [ ghosts_mode ] zp[1]:364 [ anim_frame_idx ] zp[1]:365 [ ghost1_reverse ] zp[1]:366 [ ghost2_reverse ] zp[1]:367 [ ghost3_reverse ] zp[1]:368 [ ghost4_reverse ] zp[1]:369 [ frame ] zp[1]:370 [ pacman_ch1_enabled ] +Uplifting [memcpy] best 2265041 combination zp[2]:131 [ memcpy::src#2 memcpy::src#1 ] zp[2]:137 [ memcpy::dst#2 memcpy::dst#1 ] +Uplifting [memset] best 2265041 combination zp[2]:128 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp[2]:169 [ memset::end#0 ] zp[2]:174 [ memset::num#5 ] zp[2]:371 [ memset::str#6 ] +Uplifting [splash_run] best 2264298 combination reg byte a [ splash_run::$30 ] reg byte x [ splash_run::msb#10 splash_run::msb#8 splash_run::msb#1 splash_run::msb#2 ] reg byte x [ splash_run::i1#2 splash_run::i1#1 ] reg byte x [ splash_run::i2#2 splash_run::i2#1 ] zp[1]:162 [ splash_run::i#2 splash_run::i#1 ] zp[1]:164 [ splash_run::$25 ] zp[1]:171 [ splash_run::$34 ] zp[2]:177 [ splash_run::xpos#0 ] Limited combination testing to 100 combinations of 3888 possible. -Uplifting [choose_direction] best 2264657 combination reg byte x [ choose_direction::dist_min#10 choose_direction::dist_min#13 choose_direction::dist_min#14 choose_direction::dist_down#0 ] zp[1]:179 [ choose_direction::dist_min#11 choose_direction::dist_left#0 choose_direction::dist_min#17 choose_direction::dist_min#18 ] reg byte a [ choose_direction::$2 ] reg byte a [ choose_direction::$4 ] zp[1]:199 [ choose_direction::$6 ] zp[1]:200 [ choose_direction::$8 ] zp[1]:201 [ choose_direction::dist_right#0 ] zp[1]:203 [ choose_direction::return#10 choose_direction::direction#6 choose_direction::direction#8 choose_direction::direction#10 ] zp[1]:204 [ choose_direction::target_xtile#4 choose_direction::target_xtile#2 choose_direction::target_xtile#3 choose_direction::target_xtile#0 choose_direction::target_xtile#1 ] zp[1]:205 [ choose_direction::dist_min#6 choose_direction::dist_up#0 ] zp[1]:206 [ choose_direction::ghost_xtile#4 choose_direction::ghost_xtile#2 choose_direction::ghost_xtile#3 choose_direction::ghost_xtile#0 choose_direction::ghost_xtile#1 ] zp[1]:207 [ choose_direction::target_ytile#4 choose_direction::target_ytile#2 choose_direction::target_ytile#3 choose_direction::target_ytile#0 choose_direction::target_ytile#1 ] zp[1]:212 [ choose_direction::ghost_ytile#4 choose_direction::ghost_ytile#2 choose_direction::ghost_ytile#3 choose_direction::ghost_ytile#0 choose_direction::ghost_ytile#1 ] zp[1]:229 [ choose_direction::open_directions#10 choose_direction::open_directions#2 choose_direction::open_directions#3 choose_direction::open_directions#0 choose_direction::open_directions#1 ] mem[1] [ choose_direction::return#0 ] mem[1] [ choose_direction::return#1 ] mem[1] [ choose_direction::return#2 ] mem[1] [ choose_direction::return#3 ] mem[1] [ choose_direction::ydiff#0 ] mem[1] [ choose_direction::xdiff#0 ] +Uplifting [choose_direction] best 2264277 combination reg byte x [ choose_direction::dist_min#10 choose_direction::dist_min#13 choose_direction::dist_min#14 choose_direction::dist_down#0 ] zp[1]:179 [ choose_direction::dist_min#11 choose_direction::dist_left#0 choose_direction::dist_min#17 choose_direction::dist_min#18 ] reg byte a [ choose_direction::$2 ] reg byte a [ choose_direction::$4 ] zp[1]:199 [ choose_direction::$6 ] zp[1]:200 [ choose_direction::$8 ] zp[1]:201 [ choose_direction::dist_right#0 ] zp[1]:203 [ choose_direction::return#10 choose_direction::direction#6 choose_direction::direction#8 choose_direction::direction#10 ] zp[1]:204 [ choose_direction::target_xtile#4 choose_direction::target_xtile#2 choose_direction::target_xtile#3 choose_direction::target_xtile#0 choose_direction::target_xtile#1 ] zp[1]:205 [ choose_direction::dist_min#6 choose_direction::dist_up#0 ] zp[1]:206 [ choose_direction::ghost_xtile#4 choose_direction::ghost_xtile#2 choose_direction::ghost_xtile#3 choose_direction::ghost_xtile#0 choose_direction::ghost_xtile#1 ] zp[1]:207 [ choose_direction::target_ytile#4 choose_direction::target_ytile#2 choose_direction::target_ytile#3 choose_direction::target_ytile#0 choose_direction::target_ytile#1 ] zp[1]:212 [ choose_direction::ghost_ytile#4 choose_direction::ghost_ytile#2 choose_direction::ghost_ytile#3 choose_direction::ghost_ytile#0 choose_direction::ghost_ytile#1 ] zp[1]:229 [ choose_direction::open_directions#10 choose_direction::open_directions#2 choose_direction::open_directions#3 choose_direction::open_directions#0 choose_direction::open_directions#1 ] zp[1]:275 [ choose_direction::return#0 ] zp[1]:279 [ choose_direction::return#1 ] zp[1]:283 [ choose_direction::return#2 ] zp[1]:287 [ choose_direction::return#3 ] zp[1]:293 [ choose_direction::ydiff#0 ] zp[1]:294 [ choose_direction::xdiff#0 ] Limited combination testing to 100 combinations of 952107008 possible. -Uplifting [level_tile_directions] best 2264594 combination reg byte a [ level_tile_directions::return#2 level_tile_directions::return#0 ] reg byte a [ level_tile_directions::$5 ] zp[2]:195 [ level_tile_directions::ytiles#0 ] reg byte a [ level_tile_directions::ytile#5 level_tile_directions::ytile#1 level_tile_directions::ytile#2 level_tile_directions::ytile#3 level_tile_directions::ytile#4 level_tile_directions::ytile#0 ] reg byte x [ level_tile_directions::xtile#5 level_tile_directions::xtile#1 level_tile_directions::xtile#2 level_tile_directions::xtile#3 level_tile_directions::xtile#4 level_tile_directions::xtile#0 ] mem[1] [ level_tile_directions::return#3 ] mem[1] [ level_tile_directions::return#10 ] mem[1] [ level_tile_directions::return#11 ] mem[1] [ level_tile_directions::return#12 ] mem[1] [ level_tile_directions::return#13 ] +Uplifting [level_tile_directions] best 2264214 combination reg byte a [ level_tile_directions::return#2 level_tile_directions::return#0 ] reg byte a [ level_tile_directions::$5 ] zp[2]:195 [ level_tile_directions::ytiles#0 ] reg byte a [ level_tile_directions::ytile#5 level_tile_directions::ytile#1 level_tile_directions::ytile#2 level_tile_directions::ytile#3 level_tile_directions::ytile#4 level_tile_directions::ytile#0 ] reg byte x [ level_tile_directions::xtile#5 level_tile_directions::xtile#1 level_tile_directions::xtile#2 level_tile_directions::xtile#3 level_tile_directions::xtile#4 level_tile_directions::xtile#0 ] zp[1]:273 [ level_tile_directions::return#3 ] zp[1]:277 [ level_tile_directions::return#10 ] zp[1]:281 [ level_tile_directions::return#11 ] zp[1]:285 [ level_tile_directions::return#12 ] zp[1]:289 [ level_tile_directions::return#13 ] Limited combination testing to 100 combinations of 196608 possible. -Uplifting [byteboozer_decrunch] best 2264594 combination zp[2]:181 [ byteboozer_decrunch::crunched ] -Uplifting [irq_screen_top] best 2264580 combination reg byte a [ irq_screen_top::$1 ] reg byte a [ irq_screen_top::$2 ] -Uplifting [MOS6526_CIA] best 2264580 combination -Uplifting [MOS6569_VICII] best 2264580 combination -Uplifting [MOS6581_SID] best 2264580 combination -Uplifting [pacman_sound_init] best 2264580 combination -Uplifting [pacman_sound_play] best 2264580 combination -Uplifting [TILE_TYPE] best 2264580 combination -Uplifting [main] best 2264580 combination -Uplifting [joyinit] best 2264580 combination -Uplifting [DIRECTION] best 2264580 combination -Uplifting [GHOSTS_MODE] best 2264580 combination -Uplifting [spawn_all] best 2264580 combination -Uplifting [__start] best 2264580 combination +Uplifting [byteboozer_decrunch] best 2264214 combination zp[2]:181 [ byteboozer_decrunch::crunched ] +Uplifting [irq_screen_top] best 2264204 combination reg byte a [ irq_screen_top::$1 ] reg byte a [ irq_screen_top::$2 ] +Uplifting [MOS6526_CIA] best 2264204 combination +Uplifting [MOS6569_VICII] best 2264204 combination +Uplifting [MOS6581_SID] best 2264204 combination +Uplifting [pacman_sound_init] best 2264204 combination +Uplifting [pacman_sound_play] best 2264204 combination +Uplifting [TILE_TYPE] best 2264204 combination +Uplifting [main] best 2264204 combination +Uplifting [joyinit] best 2264204 combination +Uplifting [DIRECTION] best 2264204 combination +Uplifting [GHOSTS_MODE] best 2264204 combination +Uplifting [spawn_all] best 2264204 combination +Uplifting [__start] best 2264204 combination Attempting to uplift remaining variables inzp[1]:2 [ render_tiles::y#2 render_tiles::y#1 ] -Uplifting [render_tiles] best 2264580 combination zp[1]:2 [ render_tiles::y#2 render_tiles::y#1 ] +Uplifting [render_tiles] best 2264204 combination zp[1]:2 [ render_tiles::y#2 render_tiles::y#1 ] Attempting to uplift remaining variables inzp[1]:19 [ render::ypix#0 ] -Uplifting [render] best 2264580 combination zp[1]:19 [ render::ypix#0 ] +Uplifting [render] best 2264204 combination zp[1]:19 [ render::ypix#0 ] Attempting to uplift remaining variables inzp[1]:26 [ render_tiles::$5 ] -Uplifting [render_tiles] best 2264574 combination reg byte a [ render_tiles::$5 ] +Uplifting [render_tiles] best 2264198 combination reg byte a [ render_tiles::$5 ] Attempting to uplift remaining variables inzp[1]:31 [ init_level_tile_directions::open_directions#8 init_level_tile_directions::open_directions#4 init_level_tile_directions::open_directions#13 init_level_tile_directions::open_directions#3 init_level_tile_directions::open_directions#12 init_level_tile_directions::open_directions#2 init_level_tile_directions::open_directions#11 ] -Uplifting [init_level_tile_directions] best 2264574 combination zp[1]:31 [ init_level_tile_directions::open_directions#8 init_level_tile_directions::open_directions#4 init_level_tile_directions::open_directions#13 init_level_tile_directions::open_directions#3 init_level_tile_directions::open_directions#12 init_level_tile_directions::open_directions#2 init_level_tile_directions::open_directions#11 ] +Uplifting [init_level_tile_directions] best 2264198 combination zp[1]:31 [ init_level_tile_directions::open_directions#8 init_level_tile_directions::open_directions#4 init_level_tile_directions::open_directions#13 init_level_tile_directions::open_directions#3 init_level_tile_directions::open_directions#12 init_level_tile_directions::open_directions#2 init_level_tile_directions::open_directions#11 ] Attempting to uplift remaining variables inzp[1]:32 [ render_tiles::$4 ] -Uplifting [render_tiles] best 2264568 combination reg byte x [ render_tiles::$4 ] +Uplifting [render_tiles] best 2264192 combination reg byte x [ render_tiles::$4 ] Attempting to uplift remaining variables inzp[1]:35 [ render_tiles::tile_left#0 ] -Uplifting [render_tiles] best 2261567 combination reg byte x [ render_tiles::tile_left#0 ] +Uplifting [render_tiles] best 2261191 combination reg byte x [ render_tiles::tile_left#0 ] Attempting to uplift remaining variables inzp[1]:36 [ render_tiles::tile_right#0 ] -Uplifting [render_tiles] best 2258566 combination reg byte y [ render_tiles::tile_right#0 ] +Uplifting [render_tiles] best 2258190 combination reg byte y [ render_tiles::tile_right#0 ] Attempting to uplift remaining variables inzp[1]:40 [ level_show::xcol#2 level_show::xcol#1 ] -Uplifting [level_show] best 2258566 combination zp[1]:40 [ level_show::xcol#2 level_show::xcol#1 ] +Uplifting [level_show] best 2258190 combination zp[1]:40 [ level_show::xcol#2 level_show::xcol#1 ] Attempting to uplift remaining variables inzp[1]:41 [ init_level_tile_directions::xtile#10 init_level_tile_directions::xtile#1 ] -Uplifting [init_level_tile_directions] best 2258566 combination zp[1]:41 [ init_level_tile_directions::xtile#10 init_level_tile_directions::xtile#1 ] +Uplifting [init_level_tile_directions] best 2258190 combination zp[1]:41 [ init_level_tile_directions::xtile#10 init_level_tile_directions::xtile#1 ] Attempting to uplift remaining variables inzp[1]:44 [ level_tile_get::return#3 ] -Uplifting [level_tile_get] best 2254566 combination reg byte a [ level_tile_get::return#3 ] +Uplifting [level_tile_get] best 2254190 combination reg byte a [ level_tile_get::return#3 ] Attempting to uplift remaining variables inzp[1]:46 [ level_tile_get::return#4 ] -Uplifting [level_tile_get] best 2250566 combination reg byte a [ level_tile_get::return#4 ] +Uplifting [level_tile_get] best 2250190 combination reg byte a [ level_tile_get::return#4 ] Attempting to uplift remaining variables inzp[1]:48 [ level_tile_get::return#10 ] -Uplifting [level_tile_get] best 2244566 combination reg byte a [ level_tile_get::return#10 ] +Uplifting [level_tile_get] best 2244190 combination reg byte a [ level_tile_get::return#10 ] Attempting to uplift remaining variables inzp[1]:49 [ init_level_tile_directions::$11 ] -Uplifting [init_level_tile_directions] best 2240566 combination reg byte a [ init_level_tile_directions::$11 ] +Uplifting [init_level_tile_directions] best 2240190 combination reg byte a [ init_level_tile_directions::$11 ] Attempting to uplift remaining variables inzp[1]:50 [ level_tile_get::return#11 ] -Uplifting [level_tile_get] best 2234566 combination reg byte a [ level_tile_get::return#11 ] +Uplifting [level_tile_get] best 2234190 combination reg byte a [ level_tile_get::return#11 ] Attempting to uplift remaining variables inzp[1]:51 [ init_level_tile_directions::$15 ] -Uplifting [init_level_tile_directions] best 2230566 combination reg byte a [ init_level_tile_directions::$15 ] +Uplifting [init_level_tile_directions] best 2230190 combination reg byte a [ init_level_tile_directions::$15 ] Attempting to uplift remaining variables inzp[1]:56 [ render_tiles::xcol#0 ] -Uplifting [render_tiles] best 2230566 combination zp[1]:56 [ render_tiles::xcol#0 ] +Uplifting [render_tiles] best 2230190 combination zp[1]:56 [ render_tiles::xcol#0 ] Attempting to uplift remaining variables inzp[1]:57 [ render_tiles::ytile#0 ] -Uplifting [render_tiles] best 2230566 combination zp[1]:57 [ render_tiles::ytile#0 ] +Uplifting [render_tiles] best 2230190 combination zp[1]:57 [ render_tiles::ytile#0 ] Attempting to uplift remaining variables inzp[1]:58 [ level_show::xtile#3 level_show::xtile#2 ] -Uplifting [level_show] best 2230566 combination zp[1]:58 [ level_show::xtile#3 level_show::xtile#2 ] +Uplifting [level_show] best 2230190 combination zp[1]:58 [ level_show::xtile#3 level_show::xtile#2 ] Attempting to uplift remaining variables inzp[1]:59 [ render::ytile#0 ] -Uplifting [render] best 2230564 combination reg byte y [ render::ytile#0 ] +Uplifting [render] best 2230188 combination reg byte y [ render::ytile#0 ] Attempting to uplift remaining variables inzp[1]:60 [ render::$1 ] -Uplifting [render] best 2230558 combination reg byte x [ render::$1 ] +Uplifting [render] best 2230182 combination reg byte x [ render::$1 ] Attempting to uplift remaining variables inzp[1]:61 [ render::xcol#2 render::xcol#0 render::xcol#1 ] -Uplifting [render] best 2230558 combination zp[1]:61 [ render::xcol#2 render::xcol#0 render::xcol#1 ] +Uplifting [render] best 2230182 combination zp[1]:61 [ render::xcol#2 render::xcol#0 render::xcol#1 ] Attempting to uplift remaining variables inzp[1]:63 [ level_show::tile_right#0 ] -Uplifting [level_show] best 2230558 combination zp[1]:63 [ level_show::tile_right#0 ] +Uplifting [level_show] best 2230182 combination zp[1]:63 [ level_show::tile_right#0 ] Attempting to uplift remaining variables inzp[1]:64 [ render::ypos#2 render::ypos#0 render::ypos#1 ] -Uplifting [render] best 2230558 combination zp[1]:64 [ render::ypos#2 render::ypos#0 render::ypos#1 ] +Uplifting [render] best 2230182 combination zp[1]:64 [ render::ypos#2 render::ypos#0 render::ypos#1 ] Attempting to uplift remaining variables inzp[1]:65 [ render::pixels#4 render::pixels#0 render::pixels#1 ] -Uplifting [render] best 2230558 combination zp[1]:65 [ render::pixels#4 render::pixels#0 render::pixels#1 ] +Uplifting [render] best 2230182 combination zp[1]:65 [ render::pixels#4 render::pixels#0 render::pixels#1 ] Attempting to uplift remaining variables inzp[1]:69 [ init_level_tile_directions::ytile#15 init_level_tile_directions::ytile#1 ] -Uplifting [init_level_tile_directions] best 2230558 combination zp[1]:69 [ init_level_tile_directions::ytile#15 init_level_tile_directions::ytile#1 ] +Uplifting [init_level_tile_directions] best 2230182 combination zp[1]:69 [ init_level_tile_directions::ytile#15 init_level_tile_directions::ytile#1 ] Attempting to uplift remaining variables inzp[1]:70 [ level_show::ytile#2 level_show::ytile#1 ] -Uplifting [level_show] best 2230558 combination zp[1]:70 [ level_show::ytile#2 level_show::ytile#1 ] +Uplifting [level_show] best 2230182 combination zp[1]:70 [ level_show::ytile#2 level_show::ytile#1 ] Attempting to uplift remaining variables inzp[1]:71 [ done_run::ypos#2 done_run::ypos#1 ] -Uplifting [done_run] best 2230558 combination zp[1]:71 [ done_run::ypos#2 done_run::ypos#1 ] +Uplifting [done_run] best 2230182 combination zp[1]:71 [ done_run::ypos#2 done_run::ypos#1 ] Attempting to uplift remaining variables inzp[1]:99 [ done_run::i1#2 done_run::i1#1 ] -Uplifting [done_run] best 2228758 combination reg byte x [ done_run::i1#2 done_run::i1#1 ] +Uplifting [done_run] best 2228382 combination reg byte x [ done_run::i1#2 done_run::i1#1 ] Attempting to uplift remaining variables inzp[1]:100 [ done_run::xcol#2 done_run::xcol#1 ] -Uplifting [done_run] best 2228758 combination zp[1]:100 [ done_run::xcol#2 done_run::xcol#1 ] +Uplifting [done_run] best 2228382 combination zp[1]:100 [ done_run::xcol#2 done_run::xcol#1 ] Attempting to uplift remaining variables inzp[1]:102 [ splash_show::ypos#2 splash_show::ypos#1 ] -Uplifting [splash_show] best 2228758 combination zp[1]:102 [ splash_show::ypos#2 splash_show::ypos#1 ] +Uplifting [splash_show] best 2228382 combination zp[1]:102 [ splash_show::ypos#2 splash_show::ypos#1 ] Attempting to uplift remaining variables inzp[1]:103 [ init_render_index::y_pos#2 init_render_index::y_pos#1 ] -Uplifting [init_render_index] best 2228758 combination zp[1]:103 [ init_render_index::y_pos#2 init_render_index::y_pos#1 ] +Uplifting [init_render_index] best 2228382 combination zp[1]:103 [ init_render_index::y_pos#2 init_render_index::y_pos#1 ] Attempting to uplift remaining variables inzp[1]:123 [ music_play_next ] -Uplifting [] best 2228758 combination zp[1]:123 [ music_play_next ] +Uplifting [] best 2228382 combination zp[1]:123 [ music_play_next ] Attempting to uplift remaining variables inzp[1]:127 [ merge_code::logic_cycles#0 ] -Uplifting [merge_code] best 2228758 combination zp[1]:127 [ merge_code::logic_cycles#0 ] +Uplifting [merge_code] best 2228382 combination zp[1]:127 [ merge_code::logic_cycles#0 ] Attempting to uplift remaining variables inzp[1]:130 [ splash_show::xcol#2 splash_show::xcol#1 ] -Uplifting [splash_show] best 2228758 combination zp[1]:130 [ splash_show::xcol#2 splash_show::xcol#1 ] +Uplifting [splash_show] best 2228382 combination zp[1]:130 [ splash_show::xcol#2 splash_show::xcol#1 ] Attempting to uplift remaining variables inzp[1]:136 [ init_render_index::x_col#2 init_render_index::x_col#1 ] -Uplifting [init_render_index] best 2228758 combination zp[1]:136 [ init_render_index::x_col#2 init_render_index::x_col#1 ] +Uplifting [init_render_index] best 2228382 combination zp[1]:136 [ init_render_index::x_col#2 init_render_index::x_col#1 ] Attempting to uplift remaining variables inzp[1]:146 [ side_sprites_color ] -Uplifting [] best 2228758 combination zp[1]:146 [ side_sprites_color ] +Uplifting [] best 2228382 combination zp[1]:146 [ side_sprites_color ] Attempting to uplift remaining variables inzp[1]:147 [ side_sprites_mc ] -Uplifting [] best 2228758 combination zp[1]:147 [ side_sprites_mc ] +Uplifting [] best 2228382 combination zp[1]:147 [ side_sprites_mc ] Attempting to uplift remaining variables inzp[1]:148 [ bottom_sprites_color ] -Uplifting [] best 2228758 combination zp[1]:148 [ bottom_sprites_color ] +Uplifting [] best 2228382 combination zp[1]:148 [ bottom_sprites_color ] Attempting to uplift remaining variables inzp[1]:149 [ bottom_sprites_mc ] -Uplifting [] best 2228758 combination zp[1]:149 [ bottom_sprites_mc ] +Uplifting [] best 2228382 combination zp[1]:149 [ bottom_sprites_mc ] Attempting to uplift remaining variables inzp[1]:152 [ logic_tile_xcol ] -Uplifting [] best 2228758 combination zp[1]:152 [ logic_tile_xcol ] +Uplifting [] best 2228382 combination zp[1]:152 [ logic_tile_xcol ] Attempting to uplift remaining variables inzp[1]:153 [ logic_tile_yfine ] -Uplifting [] best 2228758 combination zp[1]:153 [ logic_tile_yfine ] +Uplifting [] best 2228382 combination zp[1]:153 [ logic_tile_yfine ] Attempting to uplift remaining variables inzp[1]:159 [ top_sprites_color ] -Uplifting [] best 2228758 combination zp[1]:159 [ top_sprites_color ] +Uplifting [] best 2228382 combination zp[1]:159 [ top_sprites_color ] Attempting to uplift remaining variables inzp[1]:162 [ splash_run::i#2 splash_run::i#1 ] -Uplifting [splash_run] best 2228758 combination zp[1]:162 [ splash_run::i#2 splash_run::i#1 ] +Uplifting [splash_run] best 2228382 combination zp[1]:162 [ splash_run::i#2 splash_run::i#1 ] Attempting to uplift remaining variables inzp[1]:163 [ pacman_wins ] -Uplifting [] best 2228758 combination zp[1]:163 [ pacman_wins ] +Uplifting [] best 2228382 combination zp[1]:163 [ pacman_wins ] Attempting to uplift remaining variables inzp[1]:164 [ splash_run::$25 ] -Uplifting [splash_run] best 2228718 combination reg byte a [ splash_run::$25 ] +Uplifting [splash_run] best 2228342 combination reg byte a [ splash_run::$25 ] Attempting to uplift remaining variables inzp[1]:171 [ splash_run::$34 ] -Uplifting [splash_run] best 2228618 combination reg byte y [ splash_run::$34 ] +Uplifting [splash_run] best 2228242 combination reg byte y [ splash_run::$34 ] Attempting to uplift remaining variables inzp[1]:172 [ canvas_base_hi ] -Uplifting [] best 2228618 combination zp[1]:172 [ canvas_base_hi ] +Uplifting [] best 2228242 combination zp[1]:172 [ canvas_base_hi ] Attempting to uplift remaining variables inzp[1]:173 [ bobs_restore_base ] -Uplifting [] best 2228618 combination zp[1]:173 [ bobs_restore_base ] +Uplifting [] best 2228242 combination zp[1]:173 [ bobs_restore_base ] Attempting to uplift remaining variables inzp[1]:179 [ choose_direction::dist_min#11 choose_direction::dist_left#0 choose_direction::dist_min#17 choose_direction::dist_min#18 ] -Uplifting [choose_direction] best 2228618 combination zp[1]:179 [ choose_direction::dist_min#11 choose_direction::dist_left#0 choose_direction::dist_min#17 choose_direction::dist_min#18 ] +Uplifting [choose_direction] best 2228242 combination zp[1]:179 [ choose_direction::dist_min#11 choose_direction::dist_left#0 choose_direction::dist_min#17 choose_direction::dist_min#18 ] Attempting to uplift remaining variables inzp[1]:180 [ pacman_lives ] -Uplifting [] best 2228618 combination zp[1]:180 [ pacman_lives ] +Uplifting [] best 2228242 combination zp[1]:180 [ pacman_lives ] Attempting to uplift remaining variables inzp[1]:183 [ ghost1_respawn ] -Uplifting [] best 2228618 combination zp[1]:183 [ ghost1_respawn ] +Uplifting [] best 2228242 combination zp[1]:183 [ ghost1_respawn ] Attempting to uplift remaining variables inzp[1]:184 [ ghost2_respawn ] -Uplifting [] best 2228618 combination zp[1]:184 [ ghost2_respawn ] +Uplifting [] best 2228242 combination zp[1]:184 [ ghost2_respawn ] Attempting to uplift remaining variables inzp[1]:185 [ ghost3_respawn ] -Uplifting [] best 2228618 combination zp[1]:185 [ ghost3_respawn ] +Uplifting [] best 2228242 combination zp[1]:185 [ ghost3_respawn ] Attempting to uplift remaining variables inzp[1]:186 [ ghost4_respawn ] -Uplifting [] best 2228618 combination zp[1]:186 [ ghost4_respawn ] +Uplifting [] best 2228242 combination zp[1]:186 [ ghost4_respawn ] Attempting to uplift remaining variables inzp[1]:187 [ ghosts_mode_count ] -Uplifting [] best 2228618 combination zp[1]:187 [ ghosts_mode_count ] +Uplifting [] best 2228242 combination zp[1]:187 [ ghosts_mode_count ] Attempting to uplift remaining variables inzp[1]:188 [ pacman_substep ] -Uplifting [] best 2228618 combination zp[1]:188 [ pacman_substep ] +Uplifting [] best 2228242 combination zp[1]:188 [ pacman_substep ] Attempting to uplift remaining variables inzp[1]:190 [ ghost1_substep ] -Uplifting [] best 2228618 combination zp[1]:190 [ ghost1_substep ] +Uplifting [] best 2228242 combination zp[1]:190 [ ghost1_substep ] Attempting to uplift remaining variables inzp[1]:191 [ ghost2_substep ] -Uplifting [] best 2228618 combination zp[1]:191 [ ghost2_substep ] +Uplifting [] best 2228242 combination zp[1]:191 [ ghost2_substep ] Attempting to uplift remaining variables inzp[1]:192 [ ghost3_substep ] -Uplifting [] best 2228618 combination zp[1]:192 [ ghost3_substep ] +Uplifting [] best 2228242 combination zp[1]:192 [ ghost3_substep ] Attempting to uplift remaining variables inzp[1]:193 [ ghost4_substep ] -Uplifting [] best 2228618 combination zp[1]:193 [ ghost4_substep ] +Uplifting [] best 2228242 combination zp[1]:193 [ ghost4_substep ] Attempting to uplift remaining variables inzp[1]:199 [ choose_direction::$6 ] -Uplifting [choose_direction] best 2228614 combination reg byte a [ choose_direction::$6 ] +Uplifting [choose_direction] best 2228238 combination reg byte a [ choose_direction::$6 ] Attempting to uplift remaining variables inzp[1]:200 [ choose_direction::$8 ] -Uplifting [choose_direction] best 2228610 combination reg byte a [ choose_direction::$8 ] +Uplifting [choose_direction] best 2228234 combination reg byte a [ choose_direction::$8 ] Attempting to uplift remaining variables inzp[1]:201 [ choose_direction::dist_right#0 ] -Uplifting [choose_direction] best 2228604 combination reg byte a [ choose_direction::dist_right#0 ] +Uplifting [choose_direction] best 2228228 combination reg byte a [ choose_direction::dist_right#0 ] Attempting to uplift remaining variables inzp[1]:203 [ choose_direction::return#10 choose_direction::direction#6 choose_direction::direction#8 choose_direction::direction#10 ] -Uplifting [choose_direction] best 2228604 combination zp[1]:203 [ choose_direction::return#10 choose_direction::direction#6 choose_direction::direction#8 choose_direction::direction#10 ] +Uplifting [choose_direction] best 2228228 combination zp[1]:203 [ choose_direction::return#10 choose_direction::direction#6 choose_direction::direction#8 choose_direction::direction#10 ] Attempting to uplift remaining variables inzp[1]:204 [ choose_direction::target_xtile#4 choose_direction::target_xtile#2 choose_direction::target_xtile#3 choose_direction::target_xtile#0 choose_direction::target_xtile#1 ] -Uplifting [choose_direction] best 2228593 combination reg byte x [ choose_direction::target_xtile#4 choose_direction::target_xtile#2 choose_direction::target_xtile#3 choose_direction::target_xtile#0 choose_direction::target_xtile#1 ] +Uplifting [choose_direction] best 2228217 combination reg byte x [ choose_direction::target_xtile#4 choose_direction::target_xtile#2 choose_direction::target_xtile#3 choose_direction::target_xtile#0 choose_direction::target_xtile#1 ] Attempting to uplift remaining variables inzp[1]:205 [ choose_direction::dist_min#6 choose_direction::dist_up#0 ] -Uplifting [choose_direction] best 2228591 combination reg byte y [ choose_direction::dist_min#6 choose_direction::dist_up#0 ] +Uplifting [choose_direction] best 2228215 combination reg byte y [ choose_direction::dist_min#6 choose_direction::dist_up#0 ] Attempting to uplift remaining variables inzp[1]:206 [ choose_direction::ghost_xtile#4 choose_direction::ghost_xtile#2 choose_direction::ghost_xtile#3 choose_direction::ghost_xtile#0 choose_direction::ghost_xtile#1 ] -Uplifting [choose_direction] best 2228580 combination reg byte y [ choose_direction::ghost_xtile#4 choose_direction::ghost_xtile#2 choose_direction::ghost_xtile#3 choose_direction::ghost_xtile#0 choose_direction::ghost_xtile#1 ] +Uplifting [choose_direction] best 2228204 combination reg byte y [ choose_direction::ghost_xtile#4 choose_direction::ghost_xtile#2 choose_direction::ghost_xtile#3 choose_direction::ghost_xtile#0 choose_direction::ghost_xtile#1 ] Attempting to uplift remaining variables inzp[1]:207 [ choose_direction::target_ytile#4 choose_direction::target_ytile#2 choose_direction::target_ytile#3 choose_direction::target_ytile#0 choose_direction::target_ytile#1 ] -Uplifting [choose_direction] best 2228580 combination zp[1]:207 [ choose_direction::target_ytile#4 choose_direction::target_ytile#2 choose_direction::target_ytile#3 choose_direction::target_ytile#0 choose_direction::target_ytile#1 ] +Uplifting [choose_direction] best 2228204 combination zp[1]:207 [ choose_direction::target_ytile#4 choose_direction::target_ytile#2 choose_direction::target_ytile#3 choose_direction::target_ytile#0 choose_direction::target_ytile#1 ] Attempting to uplift remaining variables inzp[1]:208 [ pacman_direction ] -Uplifting [] best 2228580 combination zp[1]:208 [ pacman_direction ] +Uplifting [] best 2228204 combination zp[1]:208 [ pacman_direction ] Attempting to uplift remaining variables inzp[1]:209 [ ghost1_direction ] -Uplifting [] best 2228580 combination zp[1]:209 [ ghost1_direction ] +Uplifting [] best 2228204 combination zp[1]:209 [ ghost1_direction ] Attempting to uplift remaining variables inzp[1]:210 [ ghost2_direction ] -Uplifting [] best 2228580 combination zp[1]:210 [ ghost2_direction ] +Uplifting [] best 2228204 combination zp[1]:210 [ ghost2_direction ] Attempting to uplift remaining variables inzp[1]:212 [ choose_direction::ghost_ytile#4 choose_direction::ghost_ytile#2 choose_direction::ghost_ytile#3 choose_direction::ghost_ytile#0 choose_direction::ghost_ytile#1 ] -Uplifting [choose_direction] best 2228580 combination zp[1]:212 [ choose_direction::ghost_ytile#4 choose_direction::ghost_ytile#2 choose_direction::ghost_ytile#3 choose_direction::ghost_ytile#0 choose_direction::ghost_ytile#1 ] +Uplifting [choose_direction] best 2228204 combination zp[1]:212 [ choose_direction::ghost_ytile#4 choose_direction::ghost_ytile#2 choose_direction::ghost_ytile#3 choose_direction::ghost_ytile#0 choose_direction::ghost_ytile#1 ] Attempting to uplift remaining variables inzp[1]:213 [ ghost3_direction ] -Uplifting [] best 2228580 combination zp[1]:213 [ ghost3_direction ] +Uplifting [] best 2228204 combination zp[1]:213 [ ghost3_direction ] Attempting to uplift remaining variables inzp[1]:214 [ ghost4_direction ] -Uplifting [] best 2228580 combination zp[1]:214 [ ghost4_direction ] +Uplifting [] best 2228204 combination zp[1]:214 [ ghost4_direction ] Attempting to uplift remaining variables inzp[1]:215 [ top_sprites_mc ] -Uplifting [] best 2228580 combination zp[1]:215 [ top_sprites_mc ] +Uplifting [] best 2228204 combination zp[1]:215 [ top_sprites_mc ] Attempting to uplift remaining variables inzp[1]:216 [ ghost1_xfine ] -Uplifting [] best 2228580 combination zp[1]:216 [ ghost1_xfine ] +Uplifting [] best 2228204 combination zp[1]:216 [ ghost1_xfine ] Attempting to uplift remaining variables inzp[1]:217 [ ghost1_yfine ] -Uplifting [] best 2228580 combination zp[1]:217 [ ghost1_yfine ] +Uplifting [] best 2228204 combination zp[1]:217 [ ghost1_yfine ] Attempting to uplift remaining variables inzp[1]:218 [ phase ] -Uplifting [] best 2228580 combination zp[1]:218 [ phase ] +Uplifting [] best 2228204 combination zp[1]:218 [ phase ] Attempting to uplift remaining variables inzp[1]:219 [ ghost2_xfine ] -Uplifting [] best 2228580 combination zp[1]:219 [ ghost2_xfine ] +Uplifting [] best 2228204 combination zp[1]:219 [ ghost2_xfine ] Attempting to uplift remaining variables inzp[1]:220 [ ghost2_yfine ] -Uplifting [] best 2228580 combination zp[1]:220 [ ghost2_yfine ] +Uplifting [] best 2228204 combination zp[1]:220 [ ghost2_yfine ] Attempting to uplift remaining variables inzp[1]:221 [ ghost3_xfine ] -Uplifting [] best 2228580 combination zp[1]:221 [ ghost3_xfine ] +Uplifting [] best 2228204 combination zp[1]:221 [ ghost3_xfine ] Attempting to uplift remaining variables inzp[1]:222 [ game_playable ] -Uplifting [] best 2228580 combination zp[1]:222 [ game_playable ] +Uplifting [] best 2228204 combination zp[1]:222 [ game_playable ] Attempting to uplift remaining variables inzp[1]:223 [ ghost3_yfine ] -Uplifting [] best 2228580 combination zp[1]:223 [ ghost3_yfine ] +Uplifting [] best 2228204 combination zp[1]:223 [ ghost3_yfine ] Attempting to uplift remaining variables inzp[1]:224 [ ghost4_xfine ] -Uplifting [] best 2228580 combination zp[1]:224 [ ghost4_xfine ] +Uplifting [] best 2228204 combination zp[1]:224 [ ghost4_xfine ] Attempting to uplift remaining variables inzp[1]:225 [ ghost4_yfine ] -Uplifting [] best 2228580 combination zp[1]:225 [ ghost4_yfine ] +Uplifting [] best 2228204 combination zp[1]:225 [ ghost4_yfine ] Attempting to uplift remaining variables inzp[1]:226 [ pacman_xfine ] -Uplifting [] best 2228580 combination zp[1]:226 [ pacman_xfine ] +Uplifting [] best 2228204 combination zp[1]:226 [ pacman_xfine ] Attempting to uplift remaining variables inzp[1]:227 [ pacman_yfine ] -Uplifting [] best 2228580 combination zp[1]:227 [ pacman_yfine ] +Uplifting [] best 2228204 combination zp[1]:227 [ pacman_yfine ] Attempting to uplift remaining variables inzp[1]:228 [ game_logic::ghost_frame_idx#2 game_logic::ghost_frame_idx#0 game_logic::ghost_frame_idx#1 ] -Uplifting [game_logic] best 2228580 combination zp[1]:228 [ game_logic::ghost_frame_idx#2 game_logic::ghost_frame_idx#0 game_logic::ghost_frame_idx#1 ] +Uplifting [game_logic] best 2228204 combination zp[1]:228 [ game_logic::ghost_frame_idx#2 game_logic::ghost_frame_idx#0 game_logic::ghost_frame_idx#1 ] Attempting to uplift remaining variables inzp[1]:229 [ choose_direction::open_directions#10 choose_direction::open_directions#2 choose_direction::open_directions#3 choose_direction::open_directions#0 choose_direction::open_directions#1 ] -Uplifting [choose_direction] best 2228580 combination zp[1]:229 [ choose_direction::open_directions#10 choose_direction::open_directions#2 choose_direction::open_directions#3 choose_direction::open_directions#0 choose_direction::open_directions#1 ] +Uplifting [choose_direction] best 2228204 combination zp[1]:229 [ choose_direction::open_directions#10 choose_direction::open_directions#2 choose_direction::open_directions#3 choose_direction::open_directions#0 choose_direction::open_directions#1 ] Attempting to uplift remaining variables inzp[1]:230 [ game_logic::target_ytile#3 game_logic::target_ytile#2 ] -Uplifting [game_logic] best 2228580 combination zp[1]:230 [ game_logic::target_ytile#3 game_logic::target_ytile#2 ] +Uplifting [game_logic] best 2228204 combination zp[1]:230 [ game_logic::target_ytile#3 game_logic::target_ytile#2 ] Attempting to uplift remaining variables inzp[1]:231 [ game_logic::target_ytile1#3 game_logic::target_ytile1#2 ] -Uplifting [game_logic] best 2228580 combination zp[1]:231 [ game_logic::target_ytile1#3 game_logic::target_ytile1#2 ] +Uplifting [game_logic] best 2228204 combination zp[1]:231 [ game_logic::target_ytile1#3 game_logic::target_ytile1#2 ] Attempting to uplift remaining variables inzp[1]:232 [ game_logic::target_ytile2#3 game_logic::target_ytile2#2 ] -Uplifting [game_logic] best 2228580 combination zp[1]:232 [ game_logic::target_ytile2#3 game_logic::target_ytile2#2 ] +Uplifting [game_logic] best 2228204 combination zp[1]:232 [ game_logic::target_ytile2#3 game_logic::target_ytile2#2 ] Attempting to uplift remaining variables inzp[1]:233 [ game_logic::target_ytile3#3 game_logic::target_ytile3#2 ] -Uplifting [game_logic] best 2228580 combination zp[1]:233 [ game_logic::target_ytile3#3 game_logic::target_ytile3#2 ] +Uplifting [game_logic] best 2228204 combination zp[1]:233 [ game_logic::target_ytile3#3 game_logic::target_ytile3#2 ] Attempting to uplift remaining variables inzp[1]:234 [ game_logic::$2 ] -Uplifting [game_logic] best 2228574 combination reg byte x [ game_logic::$2 ] +Uplifting [game_logic] best 2228198 combination reg byte x [ game_logic::$2 ] Attempting to uplift remaining variables inzp[1]:235 [ game_logic::$3 ] -Uplifting [game_logic] best 2228570 combination reg byte a [ game_logic::$3 ] +Uplifting [game_logic] best 2228194 combination reg byte a [ game_logic::$3 ] Attempting to uplift remaining variables inzp[1]:236 [ game_logic::$14 ] -Uplifting [game_logic] best 2228564 combination reg byte x [ game_logic::$14 ] +Uplifting [game_logic] best 2228188 combination reg byte x [ game_logic::$14 ] Attempting to uplift remaining variables inzp[1]:237 [ game_logic::$15 ] -Uplifting [game_logic] best 2228560 combination reg byte a [ game_logic::$15 ] +Uplifting [game_logic] best 2228184 combination reg byte a [ game_logic::$15 ] Attempting to uplift remaining variables inzp[1]:238 [ game_logic::$17 ] -Uplifting [game_logic] best 2228554 combination reg byte a [ game_logic::$17 ] +Uplifting [game_logic] best 2228178 combination reg byte a [ game_logic::$17 ] Attempting to uplift remaining variables inzp[1]:239 [ game_logic::$18 ] -Uplifting [game_logic] best 2228548 combination reg byte x [ game_logic::$18 ] +Uplifting [game_logic] best 2228172 combination reg byte x [ game_logic::$18 ] Attempting to uplift remaining variables inzp[1]:240 [ game_logic::$20 ] -Uplifting [game_logic] best 2228542 combination reg byte a [ game_logic::$20 ] +Uplifting [game_logic] best 2228166 combination reg byte a [ game_logic::$20 ] Attempting to uplift remaining variables inzp[1]:241 [ game_logic::$21 ] -Uplifting [game_logic] best 2228536 combination reg byte a [ game_logic::$21 ] +Uplifting [game_logic] best 2228160 combination reg byte a [ game_logic::$21 ] Attempting to uplift remaining variables inzp[1]:242 [ game_logic::$25 ] -Uplifting [game_logic] best 2228530 combination reg byte a [ game_logic::$25 ] +Uplifting [game_logic] best 2228154 combination reg byte a [ game_logic::$25 ] Attempting to uplift remaining variables inzp[1]:243 [ game_logic::$26 ] -Uplifting [game_logic] best 2228524 combination reg byte x [ game_logic::$26 ] +Uplifting [game_logic] best 2228148 combination reg byte x [ game_logic::$26 ] Attempting to uplift remaining variables inzp[1]:244 [ game_logic::$28 ] -Uplifting [game_logic] best 2228518 combination reg byte a [ game_logic::$28 ] +Uplifting [game_logic] best 2228142 combination reg byte a [ game_logic::$28 ] Attempting to uplift remaining variables inzp[1]:245 [ game_logic::$29 ] -Uplifting [game_logic] best 2228512 combination reg byte a [ game_logic::$29 ] +Uplifting [game_logic] best 2228136 combination reg byte a [ game_logic::$29 ] Attempting to uplift remaining variables inzp[1]:246 [ game_logic::$31 ] -Uplifting [game_logic] best 2228506 combination reg byte a [ game_logic::$31 ] +Uplifting [game_logic] best 2228130 combination reg byte a [ game_logic::$31 ] Attempting to uplift remaining variables inzp[1]:247 [ game_logic::$32 ] -Uplifting [game_logic] best 2228500 combination reg byte x [ game_logic::$32 ] +Uplifting [game_logic] best 2228124 combination reg byte x [ game_logic::$32 ] Attempting to uplift remaining variables inzp[1]:248 [ game_logic::$34 ] -Uplifting [game_logic] best 2228494 combination reg byte a [ game_logic::$34 ] +Uplifting [game_logic] best 2228118 combination reg byte a [ game_logic::$34 ] Attempting to uplift remaining variables inzp[1]:249 [ game_logic::$35 ] -Uplifting [game_logic] best 2228488 combination reg byte a [ game_logic::$35 ] +Uplifting [game_logic] best 2228112 combination reg byte a [ game_logic::$35 ] Attempting to uplift remaining variables inzp[1]:250 [ game_logic::$37 ] -Uplifting [game_logic] best 2228482 combination reg byte a [ game_logic::$37 ] +Uplifting [game_logic] best 2228106 combination reg byte a [ game_logic::$37 ] Attempting to uplift remaining variables inzp[1]:251 [ game_logic::$38 ] -Uplifting [game_logic] best 2228476 combination reg byte x [ game_logic::$38 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::$40 ] -Uplifting [game_logic] best 2228468 combination reg byte a [ game_logic::$40 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::$41 ] -Uplifting [game_logic] best 2228460 combination reg byte a [ game_logic::$41 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::$43 ] -Uplifting [game_logic] best 2228452 combination reg byte a [ game_logic::$43 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::$44 ] -Uplifting [game_logic] best 2228444 combination reg byte x [ game_logic::$44 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::$46 ] -Uplifting [game_logic] best 2228436 combination reg byte a [ game_logic::$46 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::$47 ] -Uplifting [game_logic] best 2228428 combination reg byte a [ game_logic::$47 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::pacman_ytile#0 ] -Uplifting [game_logic] best 2228420 combination reg byte a [ game_logic::pacman_ytile#0 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::$65 ] -Uplifting [game_logic] best 2228412 combination reg byte a [ game_logic::$65 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::$66 ] -Uplifting [game_logic] best 2228404 combination reg byte a [ game_logic::$66 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::$68 ] -Uplifting [game_logic] best 2228396 combination reg byte a [ game_logic::$68 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::$69 ] -Uplifting [game_logic] best 2228388 combination reg byte a [ game_logic::$69 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::$70 ] -Uplifting [game_logic] best 2228380 combination reg byte a [ game_logic::$70 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::$72 ] -Uplifting [game_logic] best 2228372 combination reg byte a [ game_logic::$72 ] -Attempting to uplift remaining variables inmem[1] [ level_tile_directions::return#3 ] -Uplifting [level_tile_directions] best 2228364 combination reg byte a [ level_tile_directions::return#3 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::open_directions#0 ] -Uplifting [game_logic] best 2228356 combination reg byte a [ game_logic::open_directions#0 ] -Attempting to uplift remaining variables inmem[1] [ choose_direction::return#0 ] -Uplifting [choose_direction] best 2228348 combination reg byte a [ choose_direction::return#0 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::$119 ] -Uplifting [game_logic] best 2228340 combination reg byte a [ game_logic::$119 ] -Attempting to uplift remaining variables inmem[1] [ level_tile_directions::return#10 ] -Uplifting [level_tile_directions] best 2228332 combination reg byte a [ level_tile_directions::return#10 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::open_directions1#0 ] -Uplifting [game_logic] best 2228324 combination reg byte a [ game_logic::open_directions1#0 ] -Attempting to uplift remaining variables inmem[1] [ choose_direction::return#1 ] -Uplifting [choose_direction] best 2228316 combination reg byte a [ choose_direction::return#1 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::$140 ] -Uplifting [game_logic] best 2228308 combination reg byte a [ game_logic::$140 ] -Attempting to uplift remaining variables inmem[1] [ level_tile_directions::return#11 ] -Uplifting [level_tile_directions] best 2228300 combination reg byte a [ level_tile_directions::return#11 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::open_directions2#0 ] -Uplifting [game_logic] best 2228292 combination reg byte a [ game_logic::open_directions2#0 ] -Attempting to uplift remaining variables inmem[1] [ choose_direction::return#2 ] -Uplifting [choose_direction] best 2228284 combination reg byte a [ choose_direction::return#2 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::$161 ] -Uplifting [game_logic] best 2228276 combination reg byte a [ game_logic::$161 ] -Attempting to uplift remaining variables inmem[1] [ level_tile_directions::return#12 ] -Uplifting [level_tile_directions] best 2228268 combination reg byte a [ level_tile_directions::return#12 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::open_directions3#0 ] -Uplifting [game_logic] best 2228260 combination reg byte a [ game_logic::open_directions3#0 ] -Attempting to uplift remaining variables inmem[1] [ choose_direction::return#3 ] -Uplifting [choose_direction] best 2228252 combination reg byte a [ choose_direction::return#3 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::$182 ] -Uplifting [game_logic] best 2228244 combination reg byte a [ game_logic::$182 ] -Attempting to uplift remaining variables inmem[1] [ level_tile_directions::return#13 ] -Uplifting [level_tile_directions] best 2228236 combination reg byte a [ level_tile_directions::return#13 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::$199 ] -Uplifting [game_logic] best 2228228 combination reg byte a [ game_logic::$199 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::$200 ] -Uplifting [game_logic] best 2228220 combination reg byte a [ game_logic::$200 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::$204 ] -Uplifting [game_logic] best 2228214 combination reg byte a [ game_logic::$204 ] -Attempting to uplift remaining variables inmem[1] [ choose_direction::ydiff#0 ] -Uplifting [choose_direction] best 2228214 combination mem[1] [ choose_direction::ydiff#0 ] -Attempting to uplift remaining variables inmem[1] [ choose_direction::xdiff#0 ] -Uplifting [choose_direction] best 2228214 combination mem[1] [ choose_direction::xdiff#0 ] -Attempting to uplift remaining variables inmem[1] [ logic_tile_left_idx ] -Uplifting [] best 2228214 combination mem[1] [ logic_tile_left_idx ] -Attempting to uplift remaining variables inmem[1] [ logic_tile_right_idx ] -Uplifting [] best 2228214 combination mem[1] [ logic_tile_right_idx ] -Attempting to uplift remaining variables inmem[1] [ left_ypos_inc_offset ] -Uplifting [] best 2228214 combination mem[1] [ left_ypos_inc_offset ] -Attempting to uplift remaining variables inmem[1] [ rigt_ypos_inc_offset ] -Uplifting [] best 2228214 combination mem[1] [ rigt_ypos_inc_offset ] -Attempting to uplift remaining variables inmem[1] [ game_logic::target_xtile#3 game_logic::target_xtile#2 ] -Uplifting [game_logic] best 2228204 combination reg byte x [ game_logic::target_xtile#3 game_logic::target_xtile#2 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::target_xtile1#3 game_logic::target_xtile1#2 ] -Uplifting [game_logic] best 2228194 combination reg byte x [ game_logic::target_xtile1#3 game_logic::target_xtile1#2 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::target_xtile2#3 game_logic::target_xtile2#2 ] -Uplifting [game_logic] best 2228184 combination reg byte x [ game_logic::target_xtile2#3 game_logic::target_xtile2#2 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::target_xtile3#3 game_logic::target_xtile3#2 ] -Uplifting [game_logic] best 2228174 combination reg byte x [ game_logic::target_xtile3#3 game_logic::target_xtile3#2 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::tile_id#0 ] -Uplifting [game_logic] best 2228164 combination reg byte x [ game_logic::tile_id#0 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::joy_directions#0 ] -Uplifting [game_logic] best 2228154 combination reg byte a [ game_logic::joy_directions#0 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::new_direction#0 ] -Uplifting [game_logic] best 2228144 combination reg byte a [ game_logic::new_direction#0 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::do_reverse#4 ] -Uplifting [game_logic] best 2228134 combination reg byte a [ game_logic::do_reverse#4 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::$19 ] -Uplifting [game_logic] best 2228128 combination reg byte x [ game_logic::$19 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::$27 ] -Uplifting [game_logic] best 2228122 combination reg byte x [ game_logic::$27 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::$33 ] -Uplifting [game_logic] best 2228116 combination reg byte x [ game_logic::$33 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::$39 ] -Uplifting [game_logic] best 2228110 combination reg byte x [ game_logic::$39 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::$45 ] -Uplifting [game_logic] best 2228104 combination reg byte x [ game_logic::$45 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::$75 ] -Uplifting [game_logic] best 2228098 combination reg byte x [ game_logic::$75 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::$77 ] -Uplifting [game_logic] best 2228092 combination reg byte y [ game_logic::$77 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::$80 ] -Uplifting [game_logic] best 2228086 combination reg byte x [ game_logic::$80 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::$82 ] -Uplifting [game_logic] best 2228080 combination reg byte y [ game_logic::$82 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::$85 ] -Uplifting [game_logic] best 2228074 combination reg byte x [ game_logic::$85 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::$87 ] -Uplifting [game_logic] best 2228068 combination reg byte y [ game_logic::$87 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::$90 ] -Uplifting [game_logic] best 2228062 combination reg byte x [ game_logic::$90 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::$92 ] -Uplifting [game_logic] best 2228056 combination reg byte y [ game_logic::$92 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::$220 ] -Uplifting [game_logic] best 2228048 combination reg byte x [ game_logic::$220 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::$223 ] -Uplifting [game_logic] best 2228040 combination reg byte x [ game_logic::$223 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::$226 ] -Uplifting [game_logic] best 2228032 combination reg byte x [ game_logic::$226 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::$229 ] -Uplifting [game_logic] best 2228024 combination reg byte x [ game_logic::$229 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::$232 ] -Uplifting [game_logic] best 2228016 combination reg byte x [ game_logic::$232 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::pacman_xtile1#0 ] -Uplifting [game_logic] best 2228010 combination reg byte x [ game_logic::pacman_xtile1#0 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::pacman_ytile1#0 ] -Uplifting [game_logic] best 2228002 combination reg byte a [ game_logic::pacman_ytile1#0 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::pacman_xtile#0 ] -Uplifting [game_logic] best 2228002 combination mem[1] [ game_logic::pacman_xtile#0 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::pacman_bob_xfine#0 ] -Uplifting [game_logic] best 2227996 combination reg byte y [ game_logic::pacman_bob_xfine#0 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::ghost1_bob_xfine#0 ] -Uplifting [game_logic] best 2227990 combination reg byte y [ game_logic::ghost1_bob_xfine#0 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::ghost2_bob_xfine#0 ] -Uplifting [game_logic] best 2227984 combination reg byte y [ game_logic::ghost2_bob_xfine#0 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::ghost3_bob_xfine#0 ] -Uplifting [game_logic] best 2227978 combination reg byte y [ game_logic::ghost3_bob_xfine#0 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::ghost4_bob_xfine#0 ] -Uplifting [game_logic] best 2227972 combination reg byte y [ game_logic::ghost4_bob_xfine#0 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::open_directions#1 ] -Uplifting [game_logic] best 2227962 combination reg byte y [ game_logic::open_directions#1 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::open_directions1#1 ] -Uplifting [game_logic] best 2227952 combination reg byte y [ game_logic::open_directions1#1 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::open_directions2#1 ] -Uplifting [game_logic] best 2227942 combination reg byte y [ game_logic::open_directions2#1 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::open_directions3#1 ] -Uplifting [game_logic] best 2227932 combination reg byte y [ game_logic::open_directions3#1 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::open_directions4#0 ] -Uplifting [game_logic] best 2227928 combination reg byte x [ game_logic::open_directions4#0 ] -Attempting to uplift remaining variables inmem[1] [ game_logic_substep ] -Uplifting [] best 2227928 combination mem[1] [ game_logic_substep ] -Attempting to uplift remaining variables inmem[1] [ game_logic::$210 ] -Uplifting [game_logic] best 2227928 combination mem[1] [ game_logic::$210 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::ghost4_xtile#0 ] -Uplifting [game_logic] best 2227928 combination mem[1] [ game_logic::ghost4_xtile#0 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::ghost4_ytile#0 ] -Uplifting [game_logic] best 2227928 combination mem[1] [ game_logic::ghost4_ytile#0 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::ghost3_xtile#0 ] -Uplifting [game_logic] best 2227928 combination mem[1] [ game_logic::ghost3_xtile#0 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::ghost3_ytile#0 ] -Uplifting [game_logic] best 2227928 combination mem[1] [ game_logic::ghost3_ytile#0 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::ghost2_xtile#0 ] -Uplifting [game_logic] best 2227928 combination mem[1] [ game_logic::ghost2_xtile#0 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::ghost2_ytile#0 ] -Uplifting [game_logic] best 2227928 combination mem[1] [ game_logic::ghost2_ytile#0 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::ghost1_xtile#0 ] -Uplifting [game_logic] best 2227928 combination mem[1] [ game_logic::ghost1_xtile#0 ] -Attempting to uplift remaining variables inmem[1] [ game_logic::ghost1_ytile#0 ] -Uplifting [game_logic] best 2227928 combination mem[1] [ game_logic::ghost1_ytile#0 ] -Attempting to uplift remaining variables inmem[1] [ pacman_ch1_idx ] -Uplifting [] best 2227928 combination mem[1] [ pacman_ch1_idx ] -Attempting to uplift remaining variables inmem[1] [ ghosts_mode ] -Uplifting [] best 2227928 combination mem[1] [ ghosts_mode ] -Attempting to uplift remaining variables inmem[1] [ anim_frame_idx ] -Uplifting [] best 2227928 combination mem[1] [ anim_frame_idx ] -Attempting to uplift remaining variables inmem[1] [ ghost1_reverse ] -Uplifting [] best 2227928 combination mem[1] [ ghost1_reverse ] -Attempting to uplift remaining variables inmem[1] [ ghost2_reverse ] -Uplifting [] best 2227928 combination mem[1] [ ghost2_reverse ] -Attempting to uplift remaining variables inmem[1] [ ghost3_reverse ] -Uplifting [] best 2227928 combination mem[1] [ ghost3_reverse ] -Attempting to uplift remaining variables inmem[1] [ ghost4_reverse ] -Uplifting [] best 2227928 combination mem[1] [ ghost4_reverse ] -Attempting to uplift remaining variables inmem[1] [ frame ] -Uplifting [] best 2227928 combination mem[1] [ frame ] -Attempting to uplift remaining variables inmem[1] [ pacman_ch1_enabled ] -Uplifting [] best 2227928 combination mem[1] [ pacman_ch1_enabled ] +Uplifting [game_logic] best 2228100 combination reg byte x [ game_logic::$38 ] +Attempting to uplift remaining variables inzp[1]:256 [ game_logic::$40 ] +Uplifting [game_logic] best 2228094 combination reg byte a [ game_logic::$40 ] +Attempting to uplift remaining variables inzp[1]:257 [ game_logic::$41 ] +Uplifting [game_logic] best 2228088 combination reg byte a [ game_logic::$41 ] +Attempting to uplift remaining variables inzp[1]:258 [ game_logic::$43 ] +Uplifting [game_logic] best 2228082 combination reg byte a [ game_logic::$43 ] +Attempting to uplift remaining variables inzp[1]:259 [ game_logic::$44 ] +Uplifting [game_logic] best 2228076 combination reg byte x [ game_logic::$44 ] +Attempting to uplift remaining variables inzp[1]:260 [ game_logic::$46 ] +Uplifting [game_logic] best 2228070 combination reg byte a [ game_logic::$46 ] +Attempting to uplift remaining variables inzp[1]:261 [ game_logic::$47 ] +Uplifting [game_logic] best 2228064 combination reg byte a [ game_logic::$47 ] +Attempting to uplift remaining variables inzp[1]:262 [ game_logic::pacman_ytile#0 ] +Uplifting [game_logic] best 2228058 combination reg byte a [ game_logic::pacman_ytile#0 ] +Attempting to uplift remaining variables inzp[1]:263 [ game_logic::$65 ] +Uplifting [game_logic] best 2228052 combination reg byte a [ game_logic::$65 ] +Attempting to uplift remaining variables inzp[1]:264 [ game_logic::$66 ] +Uplifting [game_logic] best 2228046 combination reg byte a [ game_logic::$66 ] +Attempting to uplift remaining variables inzp[1]:267 [ game_logic::$68 ] +Uplifting [game_logic] best 2228040 combination reg byte a [ game_logic::$68 ] +Attempting to uplift remaining variables inzp[1]:268 [ game_logic::$69 ] +Uplifting [game_logic] best 2228034 combination reg byte a [ game_logic::$69 ] +Attempting to uplift remaining variables inzp[1]:269 [ game_logic::$70 ] +Uplifting [game_logic] best 2228028 combination reg byte a [ game_logic::$70 ] +Attempting to uplift remaining variables inzp[1]:272 [ game_logic::$72 ] +Uplifting [game_logic] best 2228022 combination reg byte a [ game_logic::$72 ] +Attempting to uplift remaining variables inzp[1]:273 [ level_tile_directions::return#3 ] +Uplifting [level_tile_directions] best 2228016 combination reg byte a [ level_tile_directions::return#3 ] +Attempting to uplift remaining variables inzp[1]:274 [ game_logic::open_directions#0 ] +Uplifting [game_logic] best 2228010 combination reg byte a [ game_logic::open_directions#0 ] +Attempting to uplift remaining variables inzp[1]:275 [ choose_direction::return#0 ] +Uplifting [choose_direction] best 2228004 combination reg byte a [ choose_direction::return#0 ] +Attempting to uplift remaining variables inzp[1]:276 [ game_logic::$119 ] +Uplifting [game_logic] best 2227998 combination reg byte a [ game_logic::$119 ] +Attempting to uplift remaining variables inzp[1]:277 [ level_tile_directions::return#10 ] +Uplifting [level_tile_directions] best 2227992 combination reg byte a [ level_tile_directions::return#10 ] +Attempting to uplift remaining variables inzp[1]:278 [ game_logic::open_directions1#0 ] +Uplifting [game_logic] best 2227986 combination reg byte a [ game_logic::open_directions1#0 ] +Attempting to uplift remaining variables inzp[1]:279 [ choose_direction::return#1 ] +Uplifting [choose_direction] best 2227980 combination reg byte a [ choose_direction::return#1 ] +Attempting to uplift remaining variables inzp[1]:280 [ game_logic::$140 ] +Uplifting [game_logic] best 2227974 combination reg byte a [ game_logic::$140 ] +Attempting to uplift remaining variables inzp[1]:281 [ level_tile_directions::return#11 ] +Uplifting [level_tile_directions] best 2227968 combination reg byte a [ level_tile_directions::return#11 ] +Attempting to uplift remaining variables inzp[1]:282 [ game_logic::open_directions2#0 ] +Uplifting [game_logic] best 2227962 combination reg byte a [ game_logic::open_directions2#0 ] +Attempting to uplift remaining variables inzp[1]:283 [ choose_direction::return#2 ] +Uplifting [choose_direction] best 2227956 combination reg byte a [ choose_direction::return#2 ] +Attempting to uplift remaining variables inzp[1]:284 [ game_logic::$161 ] +Uplifting [game_logic] best 2227950 combination reg byte a [ game_logic::$161 ] +Attempting to uplift remaining variables inzp[1]:285 [ level_tile_directions::return#12 ] +Uplifting [level_tile_directions] best 2227944 combination reg byte a [ level_tile_directions::return#12 ] +Attempting to uplift remaining variables inzp[1]:286 [ game_logic::open_directions3#0 ] +Uplifting [game_logic] best 2227938 combination reg byte a [ game_logic::open_directions3#0 ] +Attempting to uplift remaining variables inzp[1]:287 [ choose_direction::return#3 ] +Uplifting [choose_direction] best 2227932 combination reg byte a [ choose_direction::return#3 ] +Attempting to uplift remaining variables inzp[1]:288 [ game_logic::$182 ] +Uplifting [game_logic] best 2227926 combination reg byte a [ game_logic::$182 ] +Attempting to uplift remaining variables inzp[1]:289 [ level_tile_directions::return#13 ] +Uplifting [level_tile_directions] best 2227920 combination reg byte a [ level_tile_directions::return#13 ] +Attempting to uplift remaining variables inzp[1]:290 [ game_logic::$199 ] +Uplifting [game_logic] best 2227914 combination reg byte a [ game_logic::$199 ] +Attempting to uplift remaining variables inzp[1]:291 [ game_logic::$200 ] +Uplifting [game_logic] best 2227908 combination reg byte a [ game_logic::$200 ] +Attempting to uplift remaining variables inzp[1]:292 [ game_logic::$204 ] +Uplifting [game_logic] best 2227904 combination reg byte a [ game_logic::$204 ] +Attempting to uplift remaining variables inzp[1]:293 [ choose_direction::ydiff#0 ] +Uplifting [choose_direction] best 2227904 combination zp[1]:293 [ choose_direction::ydiff#0 ] +Attempting to uplift remaining variables inzp[1]:294 [ choose_direction::xdiff#0 ] +Uplifting [choose_direction] best 2227904 combination zp[1]:294 [ choose_direction::xdiff#0 ] +Attempting to uplift remaining variables inzp[1]:295 [ logic_tile_left_idx ] +Uplifting [] best 2227904 combination zp[1]:295 [ logic_tile_left_idx ] +Attempting to uplift remaining variables inzp[1]:296 [ logic_tile_right_idx ] +Uplifting [] best 2227904 combination zp[1]:296 [ logic_tile_right_idx ] +Attempting to uplift remaining variables inzp[1]:301 [ left_ypos_inc_offset ] +Uplifting [] best 2227904 combination zp[1]:301 [ left_ypos_inc_offset ] +Attempting to uplift remaining variables inzp[1]:306 [ rigt_ypos_inc_offset ] +Uplifting [] best 2227904 combination zp[1]:306 [ rigt_ypos_inc_offset ] +Attempting to uplift remaining variables inzp[1]:307 [ game_logic::target_xtile#3 game_logic::target_xtile#2 ] +Uplifting [game_logic] best 2227897 combination reg byte x [ game_logic::target_xtile#3 game_logic::target_xtile#2 ] +Attempting to uplift remaining variables inzp[1]:308 [ game_logic::target_xtile1#3 game_logic::target_xtile1#2 ] +Uplifting [game_logic] best 2227890 combination reg byte x [ game_logic::target_xtile1#3 game_logic::target_xtile1#2 ] +Attempting to uplift remaining variables inzp[1]:309 [ game_logic::target_xtile2#3 game_logic::target_xtile2#2 ] +Uplifting [game_logic] best 2227883 combination reg byte x [ game_logic::target_xtile2#3 game_logic::target_xtile2#2 ] +Attempting to uplift remaining variables inzp[1]:310 [ game_logic::target_xtile3#3 game_logic::target_xtile3#2 ] +Uplifting [game_logic] best 2227876 combination reg byte x [ game_logic::target_xtile3#3 game_logic::target_xtile3#2 ] +Attempting to uplift remaining variables inzp[1]:311 [ game_logic::tile_id#0 ] +Uplifting [game_logic] best 2227869 combination reg byte x [ game_logic::tile_id#0 ] +Attempting to uplift remaining variables inzp[1]:312 [ game_logic::joy_directions#0 ] +Uplifting [game_logic] best 2227862 combination reg byte a [ game_logic::joy_directions#0 ] +Attempting to uplift remaining variables inzp[1]:313 [ game_logic::new_direction#0 ] +Uplifting [game_logic] best 2227855 combination reg byte a [ game_logic::new_direction#0 ] +Attempting to uplift remaining variables inzp[1]:316 [ game_logic::do_reverse#4 ] +Uplifting [game_logic] best 2227848 combination reg byte a [ game_logic::do_reverse#4 ] +Attempting to uplift remaining variables inzp[1]:317 [ game_logic::$19 ] +Uplifting [game_logic] best 2227844 combination reg byte x [ game_logic::$19 ] +Attempting to uplift remaining variables inzp[1]:318 [ game_logic::$27 ] +Uplifting [game_logic] best 2227840 combination reg byte x [ game_logic::$27 ] +Attempting to uplift remaining variables inzp[1]:319 [ game_logic::$33 ] +Uplifting [game_logic] best 2227836 combination reg byte x [ game_logic::$33 ] +Attempting to uplift remaining variables inzp[1]:320 [ game_logic::$39 ] +Uplifting [game_logic] best 2227832 combination reg byte x [ game_logic::$39 ] +Attempting to uplift remaining variables inzp[1]:321 [ game_logic::$45 ] +Uplifting [game_logic] best 2227828 combination reg byte x [ game_logic::$45 ] +Attempting to uplift remaining variables inzp[1]:322 [ game_logic::$75 ] +Uplifting [game_logic] best 2227824 combination reg byte x [ game_logic::$75 ] +Attempting to uplift remaining variables inzp[1]:323 [ game_logic::$77 ] +Uplifting [game_logic] best 2227820 combination reg byte y [ game_logic::$77 ] +Attempting to uplift remaining variables inzp[1]:324 [ game_logic::$80 ] +Uplifting [game_logic] best 2227816 combination reg byte x [ game_logic::$80 ] +Attempting to uplift remaining variables inzp[1]:325 [ game_logic::$82 ] +Uplifting [game_logic] best 2227812 combination reg byte y [ game_logic::$82 ] +Attempting to uplift remaining variables inzp[1]:326 [ game_logic::$85 ] +Uplifting [game_logic] best 2227808 combination reg byte x [ game_logic::$85 ] +Attempting to uplift remaining variables inzp[1]:327 [ game_logic::$87 ] +Uplifting [game_logic] best 2227804 combination reg byte y [ game_logic::$87 ] +Attempting to uplift remaining variables inzp[1]:328 [ game_logic::$90 ] +Uplifting [game_logic] best 2227800 combination reg byte x [ game_logic::$90 ] +Attempting to uplift remaining variables inzp[1]:329 [ game_logic::$92 ] +Uplifting [game_logic] best 2227796 combination reg byte y [ game_logic::$92 ] +Attempting to uplift remaining variables inzp[1]:330 [ game_logic::$220 ] +Uplifting [game_logic] best 2227790 combination reg byte x [ game_logic::$220 ] +Attempting to uplift remaining variables inzp[1]:331 [ game_logic::$223 ] +Uplifting [game_logic] best 2227784 combination reg byte x [ game_logic::$223 ] +Attempting to uplift remaining variables inzp[1]:332 [ game_logic::$226 ] +Uplifting [game_logic] best 2227778 combination reg byte x [ game_logic::$226 ] +Attempting to uplift remaining variables inzp[1]:333 [ game_logic::$229 ] +Uplifting [game_logic] best 2227772 combination reg byte x [ game_logic::$229 ] +Attempting to uplift remaining variables inzp[1]:334 [ game_logic::$232 ] +Uplifting [game_logic] best 2227766 combination reg byte x [ game_logic::$232 ] +Attempting to uplift remaining variables inzp[1]:335 [ game_logic::pacman_xtile1#0 ] +Uplifting [game_logic] best 2227762 combination reg byte x [ game_logic::pacman_xtile1#0 ] +Attempting to uplift remaining variables inzp[1]:336 [ game_logic::pacman_ytile1#0 ] +Uplifting [game_logic] best 2227756 combination reg byte a [ game_logic::pacman_ytile1#0 ] +Attempting to uplift remaining variables inzp[1]:337 [ game_logic::pacman_xtile#0 ] +Uplifting [game_logic] best 2227756 combination zp[1]:337 [ game_logic::pacman_xtile#0 ] +Attempting to uplift remaining variables inzp[1]:338 [ game_logic::pacman_bob_xfine#0 ] +Uplifting [game_logic] best 2227753 combination reg byte y [ game_logic::pacman_bob_xfine#0 ] +Attempting to uplift remaining variables inzp[1]:339 [ game_logic::ghost1_bob_xfine#0 ] +Uplifting [game_logic] best 2227750 combination reg byte y [ game_logic::ghost1_bob_xfine#0 ] +Attempting to uplift remaining variables inzp[1]:340 [ game_logic::ghost2_bob_xfine#0 ] +Uplifting [game_logic] best 2227747 combination reg byte y [ game_logic::ghost2_bob_xfine#0 ] +Attempting to uplift remaining variables inzp[1]:341 [ game_logic::ghost3_bob_xfine#0 ] +Uplifting [game_logic] best 2227744 combination reg byte y [ game_logic::ghost3_bob_xfine#0 ] +Attempting to uplift remaining variables inzp[1]:342 [ game_logic::ghost4_bob_xfine#0 ] +Uplifting [game_logic] best 2227741 combination reg byte y [ game_logic::ghost4_bob_xfine#0 ] +Attempting to uplift remaining variables inzp[1]:345 [ game_logic::open_directions#1 ] +Uplifting [game_logic] best 2227734 combination reg byte y [ game_logic::open_directions#1 ] +Attempting to uplift remaining variables inzp[1]:346 [ game_logic::open_directions1#1 ] +Uplifting [game_logic] best 2227727 combination reg byte y [ game_logic::open_directions1#1 ] +Attempting to uplift remaining variables inzp[1]:347 [ game_logic::open_directions2#1 ] +Uplifting [game_logic] best 2227720 combination reg byte y [ game_logic::open_directions2#1 ] +Attempting to uplift remaining variables inzp[1]:348 [ game_logic::open_directions3#1 ] +Uplifting [game_logic] best 2227713 combination reg byte y [ game_logic::open_directions3#1 ] +Attempting to uplift remaining variables inzp[1]:351 [ game_logic::open_directions4#0 ] +Uplifting [game_logic] best 2227712 combination reg byte x [ game_logic::open_directions4#0 ] +Attempting to uplift remaining variables inzp[1]:352 [ game_logic_substep ] +Uplifting [] best 2227712 combination zp[1]:352 [ game_logic_substep ] +Attempting to uplift remaining variables inzp[1]:353 [ game_logic::$210 ] +Uplifting [game_logic] best 2227712 combination zp[1]:353 [ game_logic::$210 ] +Attempting to uplift remaining variables inzp[1]:354 [ game_logic::ghost4_xtile#0 ] +Uplifting [game_logic] best 2227712 combination zp[1]:354 [ game_logic::ghost4_xtile#0 ] +Attempting to uplift remaining variables inzp[1]:355 [ game_logic::ghost4_ytile#0 ] +Uplifting [game_logic] best 2227712 combination zp[1]:355 [ game_logic::ghost4_ytile#0 ] +Attempting to uplift remaining variables inzp[1]:356 [ game_logic::ghost3_xtile#0 ] +Uplifting [game_logic] best 2227712 combination zp[1]:356 [ game_logic::ghost3_xtile#0 ] +Attempting to uplift remaining variables inzp[1]:357 [ game_logic::ghost3_ytile#0 ] +Uplifting [game_logic] best 2227712 combination zp[1]:357 [ game_logic::ghost3_ytile#0 ] +Attempting to uplift remaining variables inzp[1]:358 [ game_logic::ghost2_xtile#0 ] +Uplifting [game_logic] best 2227712 combination zp[1]:358 [ game_logic::ghost2_xtile#0 ] +Attempting to uplift remaining variables inzp[1]:359 [ game_logic::ghost2_ytile#0 ] +Uplifting [game_logic] best 2227712 combination zp[1]:359 [ game_logic::ghost2_ytile#0 ] +Attempting to uplift remaining variables inzp[1]:360 [ game_logic::ghost1_xtile#0 ] +Uplifting [game_logic] best 2227712 combination zp[1]:360 [ game_logic::ghost1_xtile#0 ] +Attempting to uplift remaining variables inzp[1]:361 [ game_logic::ghost1_ytile#0 ] +Uplifting [game_logic] best 2227712 combination zp[1]:361 [ game_logic::ghost1_ytile#0 ] +Attempting to uplift remaining variables inzp[1]:362 [ pacman_ch1_idx ] +Uplifting [] best 2227712 combination zp[1]:362 [ pacman_ch1_idx ] +Attempting to uplift remaining variables inzp[1]:363 [ ghosts_mode ] +Uplifting [] best 2227712 combination zp[1]:363 [ ghosts_mode ] +Attempting to uplift remaining variables inzp[1]:364 [ anim_frame_idx ] +Uplifting [] best 2227712 combination zp[1]:364 [ anim_frame_idx ] +Attempting to uplift remaining variables inzp[1]:365 [ ghost1_reverse ] +Uplifting [] best 2227712 combination zp[1]:365 [ ghost1_reverse ] +Attempting to uplift remaining variables inzp[1]:366 [ ghost2_reverse ] +Uplifting [] best 2227712 combination zp[1]:366 [ ghost2_reverse ] +Attempting to uplift remaining variables inzp[1]:367 [ ghost3_reverse ] +Uplifting [] best 2227712 combination zp[1]:367 [ ghost3_reverse ] +Attempting to uplift remaining variables inzp[1]:368 [ ghost4_reverse ] +Uplifting [] best 2227712 combination zp[1]:368 [ ghost4_reverse ] +Attempting to uplift remaining variables inzp[1]:369 [ frame ] +Uplifting [] best 2227712 combination zp[1]:369 [ frame ] +Attempting to uplift remaining variables inzp[1]:370 [ pacman_ch1_enabled ] +Uplifting [] best 2227712 combination zp[1]:370 [ pacman_ch1_enabled ] Coalescing zero page register [ zp[2]:124 [ merge_code::raster_code#4 merge_code::raster_code#2 merge_code::raster_code#0 ] ] with [ zp[2]:142 [ merge_code::raster_code#1 ] ] - score: 2 Coalescing zero page register [ zp[2]:112 [ merge_code::logic_code#12 merge_code::logic_code#5 merge_code::logic_code#18 merge_code::logic_code#17 merge_code::logic_code#2 ] ] with [ zp[2]:97 [ merge_code::logic_code#14 merge_code::logic_code#3 merge_code::logic_code#4 ] ] - score: 2 Coalescing zero page register [ zp[2]:112 [ merge_code::logic_code#12 merge_code::logic_code#5 merge_code::logic_code#18 merge_code::logic_code#17 merge_code::logic_code#2 merge_code::logic_code#14 merge_code::logic_code#3 merge_code::logic_code#4 ] ] with [ zp[2]:66 [ merge_code::logic_code#10 merge_code::logic_code#1 merge_code::logic_code#0 ] ] - score: 2 @@ -15620,14 +15510,20 @@ Coalescing zero page register [ zp[2]:75 [ merge_code::dest_code#21 merge_code:: Coalescing zero page register [ zp[1]:230 [ game_logic::target_ytile#3 game_logic::target_ytile#2 ] ] with [ zp[1]:207 [ choose_direction::target_ytile#4 choose_direction::target_ytile#2 choose_direction::target_ytile#3 choose_direction::target_ytile#0 choose_direction::target_ytile#1 ] ] - score: 1 Coalescing zero page register [ zp[1]:100 [ done_run::xcol#2 done_run::xcol#1 ] ] with [ zp[1]:61 [ render::xcol#2 render::xcol#0 render::xcol#1 ] ] - score: 1 Coalescing zero page register [ zp[1]:71 [ done_run::ypos#2 done_run::ypos#1 ] ] with [ zp[1]:64 [ render::ypos#2 render::ypos#0 render::ypos#1 ] ] - score: 1 +Coalescing zero page register [ zp[1]:212 [ choose_direction::ghost_ytile#4 choose_direction::ghost_ytile#2 choose_direction::ghost_ytile#3 choose_direction::ghost_ytile#0 choose_direction::ghost_ytile#1 ] ] with [ zp[1]:355 [ game_logic::ghost4_ytile#0 ] ] - score: 1 +Coalescing zero page register [ zp[1]:212 [ choose_direction::ghost_ytile#4 choose_direction::ghost_ytile#2 choose_direction::ghost_ytile#3 choose_direction::ghost_ytile#0 choose_direction::ghost_ytile#1 game_logic::ghost4_ytile#0 ] ] with [ zp[1]:357 [ game_logic::ghost3_ytile#0 ] ] - score: 1 +Coalescing zero page register [ zp[1]:212 [ choose_direction::ghost_ytile#4 choose_direction::ghost_ytile#2 choose_direction::ghost_ytile#3 choose_direction::ghost_ytile#0 choose_direction::ghost_ytile#1 game_logic::ghost4_ytile#0 game_logic::ghost3_ytile#0 ] ] with [ zp[1]:359 [ game_logic::ghost2_ytile#0 ] ] - score: 1 +Coalescing zero page register [ zp[1]:212 [ choose_direction::ghost_ytile#4 choose_direction::ghost_ytile#2 choose_direction::ghost_ytile#3 choose_direction::ghost_ytile#0 choose_direction::ghost_ytile#1 game_logic::ghost4_ytile#0 game_logic::ghost3_ytile#0 game_logic::ghost2_ytile#0 ] ] with [ zp[1]:361 [ game_logic::ghost1_ytile#0 ] ] - score: 1 +Coalescing zero page register [ zp[1]:212 [ choose_direction::ghost_ytile#4 choose_direction::ghost_ytile#2 choose_direction::ghost_ytile#3 choose_direction::ghost_ytile#0 choose_direction::ghost_ytile#1 game_logic::ghost4_ytile#0 game_logic::ghost3_ytile#0 game_logic::ghost2_ytile#0 game_logic::ghost1_ytile#0 ] ] with [ zp[1]:293 [ choose_direction::ydiff#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:174 [ memset::num#5 ] ] with [ zp[2]:169 [ memset::end#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:371 [ memset::str#6 ] ] with [ zp[2]:128 [ memset::dst#2 memset::dst#4 memset::dst#1 ] ] - score: 1 Coalescing zero page register [ zp[1]:70 [ level_show::ytile#2 level_show::ytile#1 ] ] with [ zp[1]:57 [ render_tiles::ytile#0 ] ] - score: 1 Coalescing zero page register [ zp[1]:40 [ level_show::xcol#2 level_show::xcol#1 ] ] with [ zp[1]:56 [ render_tiles::xcol#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:33 [ level_show::count#5 level_show::count#12 level_show::count#10 level_show::count#11 level_show::count#1 level_show::count#2 ] ] with [ zp[2]:165 [ level_show::return#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:13 [ render::canvas2#2 render::canvas2#0 render::canvas2#1 ] ] with [ zp[2]:54 [ render::canvas_offset#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:5 [ render_tiles::canvas2#2 render_tiles::canvas2#0 render_tiles::canvas2#1 ] ] with [ zp[2]:27 [ render_tiles::canvas_offset#0 ] ] - score: 1 -Coalescing zero page register [ mem[2] [ game_logic::ytiles#0 ] ] with [ mem[2] [ game_logic::$67 ] ] - score: 1 -Coalescing zero page register [ mem[2] [ game_logic::ytiles#0 game_logic::$67 ] ] with [ mem[2] [ game_logic::$71 ] ] - score: 1 +Coalescing zero page register [ zp[2]:343 [ game_logic::ytiles#0 ] ] with [ zp[2]:265 [ game_logic::$67 ] ] - score: 1 +Coalescing zero page register [ zp[2]:343 [ game_logic::ytiles#0 game_logic::$67 ] ] with [ zp[2]:270 [ game_logic::$71 ] ] - score: 1 Coalescing zero page register [ zp[2]:104 [ init_render_index::$11 ] ] with [ zp[2]:106 [ init_render_index::$10 ] ] - score: 1 Coalescing zero page register [ zp[2]:108 [ init_render_index::$12 ] ] with [ zp[2]:121 [ init_render_index::canvas#0 ] ] - score: 1 Coalescing zero page register [ zp[1]:230 [ game_logic::target_ytile#3 game_logic::target_ytile#2 choose_direction::target_ytile#4 choose_direction::target_ytile#2 choose_direction::target_ytile#3 choose_direction::target_ytile#0 choose_direction::target_ytile#1 ] ] with [ zp[1]:231 [ game_logic::target_ytile1#3 game_logic::target_ytile1#2 ] ] - score: 1 @@ -15638,7 +15534,7 @@ Coalescing zero page register [ zp[1]:71 [ done_run::ypos#2 done_run::ypos#1 ren Coalescing zero page register [ zp[2]:33 [ level_show::count#5 level_show::count#12 level_show::count#10 level_show::count#11 level_show::count#1 level_show::count#2 level_show::return#0 ] ] with [ zp[2]:167 [ gameplay_run::$4 ] ] - score: 1 Coalescing zero page register [ zp[2]:104 [ init_render_index::$11 init_render_index::$10 ] ] with [ zp[2]:108 [ init_render_index::$12 init_render_index::canvas#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:174 [ memset::num#5 memset::end#0 ] ] with [ zp[2]:87 [ done_run::gfx#4 done_run::gfx#2 done_run::gfx#1 ] ] -Coalescing zero page register [ zp[2]:124 [ merge_code::raster_code#4 merge_code::raster_code#2 merge_code::raster_code#0 merge_code::raster_code#1 ] ] with [ zp[2]:128 [ memset::dst#2 memset::dst#4 memset::dst#1 ] ] +Coalescing zero page register [ zp[2]:124 [ merge_code::raster_code#4 merge_code::raster_code#2 merge_code::raster_code#0 merge_code::raster_code#1 ] ] with [ zp[2]:371 [ memset::str#6 memset::dst#2 memset::dst#4 memset::dst#1 ] ] Coalescing zero page register [ zp[1]:136 [ init_render_index::x_col#2 init_render_index::x_col#1 ] ] with [ zp[1]:100 [ done_run::xcol#2 done_run::xcol#1 render::xcol#2 render::xcol#0 render::xcol#1 splash_show::xcol#2 splash_show::xcol#1 ] ] Coalescing zero page register [ zp[2]:144 [ init_render_index::render_index_xcol#0 init_render_index::render_index#1 ] ] with [ zp[2]:112 [ merge_code::logic_code#12 merge_code::logic_code#5 merge_code::logic_code#18 merge_code::logic_code#17 merge_code::logic_code#2 merge_code::logic_code#14 merge_code::logic_code#3 merge_code::logic_code#4 merge_code::logic_code#10 merge_code::logic_code#1 merge_code::logic_code#0 ] ] Coalescing zero page register [ zp[2]:156 [ init_render_index::render_ypos_table#4 ] ] with [ zp[2]:75 [ merge_code::dest_code#21 merge_code::dest_code#12 merge_code::dest_code#13 merge_code::dest_code#14 merge_code::dest_code#10 merge_code::dest_code#0 merge_code::dest_code#6 merge_code::dest_code#15 merge_code::dest_code#3 merge_code::dest_code#4 merge_code::dest_code#1 merge_code::dest_code#2 ] ] @@ -15653,6 +15549,9 @@ Coalescing zero page register [ zp[1]:40 [ level_show::xcol#2 level_show::xcol#1 Coalescing zero page register [ zp[1]:65 [ render::pixels#4 render::pixels#0 render::pixels#1 ] ] with [ zp[1]:58 [ level_show::xtile#3 level_show::xtile#2 ] ] Coalescing zero page register [ zp[2]:11 [ render::canvas1#2 render::canvas1#0 render::canvas1#1 ] ] with [ zp[2]:79 [ level_show::level#8 level_show::level#1 ] ] Coalescing zero page register [ zp[2]:13 [ render::canvas2#2 render::canvas2#0 render::canvas2#1 render::canvas_offset#0 ] ] with [ zp[2]:33 [ level_show::count#5 level_show::count#12 level_show::count#10 level_show::count#11 level_show::count#1 level_show::count#2 level_show::return#0 gameplay_run::$4 ] ] +Coalescing zero page register [ zp[1]:337 [ game_logic::pacman_xtile#0 ] ] with [ zp[1]:229 [ choose_direction::open_directions#10 choose_direction::open_directions#2 choose_direction::open_directions#3 choose_direction::open_directions#0 choose_direction::open_directions#1 ] ] +Coalescing zero page register [ zp[1]:353 [ game_logic::$210 ] ] with [ zp[1]:179 [ choose_direction::dist_min#11 choose_direction::dist_left#0 choose_direction::dist_min#17 choose_direction::dist_min#18 ] ] +Coalescing zero page register [ zp[1]:354 [ game_logic::ghost4_xtile#0 ] ] with [ zp[1]:203 [ choose_direction::return#10 choose_direction::direction#6 choose_direction::direction#8 choose_direction::direction#10 ] ] Coalescing zero page register [ zp[2]:177 [ splash_run::xpos#0 ] ] with [ zp[2]:7 [ render_tiles::canvas1#2 render_tiles::canvas1#0 render_tiles::canvas1#1 ] ] Coalescing zero page register [ zp[1]:127 [ merge_code::logic_cycles#0 ] ] with [ zp[1]:2 [ render_tiles::y#2 render_tiles::y#1 ] ] Coalescing zero page register [ zp[2]:154 [ init_render_index::canvas_xcol#0 ] ] with [ zp[2]:5 [ render_tiles::canvas2#2 render_tiles::canvas2#0 render_tiles::canvas2#1 render_tiles::canvas_offset#0 ] ] @@ -15660,7 +15559,7 @@ Coalescing zero page register [ zp[2]:73 [ render::render_index_xcol#0 ] ] with Coalescing zero page register [ zp[1]:19 [ render::ypix#0 ] ] with [ zp[1]:63 [ level_show::tile_right#0 ] ] Coalescing zero page register [ zp[2]:17 [ render_tiles::tile_left_pixels#0 ] ] with [ zp[2]:22 [ level_tile_get::ytiles#0 ] ] Coalescing zero page register [ zp[2]:144 [ init_render_index::render_index_xcol#0 init_render_index::render_index#1 merge_code::logic_code#12 merge_code::logic_code#5 merge_code::logic_code#18 merge_code::logic_code#17 merge_code::logic_code#2 merge_code::logic_code#14 merge_code::logic_code#3 merge_code::logic_code#4 merge_code::logic_code#10 merge_code::logic_code#1 merge_code::logic_code#0 ] ] with [ zp[2]:174 [ memset::num#5 memset::end#0 done_run::gfx#4 done_run::gfx#2 done_run::gfx#1 ] ] -Coalescing zero page register [ zp[2]:118 [ splash_show::splash#4 splash_show::splash#2 splash_show::splash#1 init_render_index::render_index_xcol#2 init_render_index::render_index_xcol#7 init_render_index::render_index_xcol#1 ] ] with [ zp[2]:124 [ merge_code::raster_code#4 merge_code::raster_code#2 merge_code::raster_code#0 merge_code::raster_code#1 memset::dst#2 memset::dst#4 memset::dst#1 ] ] +Coalescing zero page register [ zp[2]:118 [ splash_show::splash#4 splash_show::splash#2 splash_show::splash#1 init_render_index::render_index_xcol#2 init_render_index::render_index_xcol#7 init_render_index::render_index_xcol#1 ] ] with [ zp[2]:124 [ merge_code::raster_code#4 merge_code::raster_code#2 merge_code::raster_code#0 merge_code::raster_code#1 memset::str#6 memset::dst#2 memset::dst#4 memset::dst#1 ] ] Coalescing zero page register [ zp[2]:83 [ init_sprite_pointers::sprites_ptr_1#5 init_sprite_pointers::sprites_ptr_1#1 init_bobs_restore::bob_restore#5 init_bobs_restore::bob_restore#1 ] ] with [ zp[2]:156 [ init_render_index::render_ypos_table#4 merge_code::dest_code#21 merge_code::dest_code#12 merge_code::dest_code#13 merge_code::dest_code#14 merge_code::dest_code#10 merge_code::dest_code#0 merge_code::dest_code#6 merge_code::dest_code#15 merge_code::dest_code#3 merge_code::dest_code#4 merge_code::dest_code#1 merge_code::dest_code#2 ] ] Coalescing zero page register [ zp[1]:69 [ init_level_tile_directions::ytile#15 init_level_tile_directions::ytile#1 splash_run::i#2 splash_run::i#1 ] ] with [ zp[1]:136 [ init_render_index::x_col#2 init_render_index::x_col#1 done_run::xcol#2 done_run::xcol#1 render::xcol#2 render::xcol#0 render::xcol#1 splash_show::xcol#2 splash_show::xcol#1 ] ] Coalescing zero page register [ zp[1]:70 [ level_show::ytile#2 level_show::ytile#1 render_tiles::ytile#0 init_level_tile_directions::xtile#10 init_level_tile_directions::xtile#1 ] ] with [ zp[1]:103 [ init_render_index::y_pos#2 init_render_index::y_pos#1 done_run::ypos#2 done_run::ypos#1 render::ypos#2 render::ypos#0 render::ypos#1 splash_show::ypos#2 splash_show::ypos#1 ] ] @@ -15670,13 +15569,13 @@ Coalescing zero page register [ zp[1]:19 [ render::ypix#0 level_show::tile_right Coalescing zero page register [ zp[2]:17 [ render_tiles::tile_left_pixels#0 level_tile_get::ytiles#0 ] ] with [ zp[2]:73 [ render::render_index_xcol#0 init_render_index::$11 init_render_index::$10 init_render_index::$12 init_render_index::canvas#0 ] ] Coalescing zero page register [ zp[2]:13 [ render::canvas2#2 render::canvas2#0 render::canvas2#1 render::canvas_offset#0 level_show::count#5 level_show::count#12 level_show::count#10 level_show::count#11 level_show::count#1 level_show::count#2 level_show::return#0 gameplay_run::$4 init_level_tile_directions::directions#7 init_level_tile_directions::directions#1 memcpy::dst#2 memcpy::dst#1 ] ] with [ zp[2]:83 [ init_sprite_pointers::sprites_ptr_1#5 init_sprite_pointers::sprites_ptr_1#1 init_bobs_restore::bob_restore#5 init_bobs_restore::bob_restore#1 init_render_index::render_ypos_table#4 merge_code::dest_code#21 merge_code::dest_code#12 merge_code::dest_code#13 merge_code::dest_code#14 merge_code::dest_code#10 merge_code::dest_code#0 merge_code::dest_code#6 merge_code::dest_code#15 merge_code::dest_code#3 merge_code::dest_code#4 merge_code::dest_code#1 merge_code::dest_code#2 ] ] Coalescing zero page register [ zp[2]:177 [ splash_run::xpos#0 render_tiles::canvas1#2 render_tiles::canvas1#0 render_tiles::canvas1#1 ] ] with [ zp[2]:144 [ init_render_index::render_index_xcol#0 init_render_index::render_index#1 merge_code::logic_code#12 merge_code::logic_code#5 merge_code::logic_code#18 merge_code::logic_code#17 merge_code::logic_code#2 merge_code::logic_code#14 merge_code::logic_code#3 merge_code::logic_code#4 merge_code::logic_code#10 merge_code::logic_code#1 merge_code::logic_code#0 memset::num#5 memset::end#0 done_run::gfx#4 done_run::gfx#2 done_run::gfx#1 ] ] -Coalescing zero page register [ zp[2]:15 [ render_tiles::tile_right_pixels#0 ] ] with [ zp[2]:118 [ splash_show::splash#4 splash_show::splash#2 splash_show::splash#1 init_render_index::render_index_xcol#2 init_render_index::render_index_xcol#7 init_render_index::render_index_xcol#1 merge_code::raster_code#4 merge_code::raster_code#2 merge_code::raster_code#0 merge_code::raster_code#1 memset::dst#2 memset::dst#4 memset::dst#1 ] ] +Coalescing zero page register [ zp[2]:15 [ render_tiles::tile_right_pixels#0 ] ] with [ zp[2]:118 [ splash_show::splash#4 splash_show::splash#2 splash_show::splash#1 init_render_index::render_index_xcol#2 init_render_index::render_index_xcol#7 init_render_index::render_index_xcol#1 merge_code::raster_code#4 merge_code::raster_code#2 merge_code::raster_code#0 merge_code::raster_code#1 memset::str#6 memset::dst#2 memset::dst#4 memset::dst#1 ] ] Allocated (was zp[1]:19) zp[1]:2 [ render::ypix#0 level_show::tile_right#0 merge_code::logic_cycles#0 render_tiles::y#2 render_tiles::y#1 ] Allocated (was zp[2]:154) zp[2]:3 [ init_render_index::canvas_xcol#0 render_tiles::canvas2#2 render_tiles::canvas2#0 render_tiles::canvas2#1 render_tiles::canvas_offset#0 ] Allocated (was zp[2]:177) zp[2]:5 [ splash_run::xpos#0 render_tiles::canvas1#2 render_tiles::canvas1#0 render_tiles::canvas1#1 init_render_index::render_index_xcol#0 init_render_index::render_index#1 merge_code::logic_code#12 merge_code::logic_code#5 merge_code::logic_code#18 merge_code::logic_code#17 merge_code::logic_code#2 merge_code::logic_code#14 merge_code::logic_code#3 merge_code::logic_code#4 merge_code::logic_code#10 merge_code::logic_code#1 merge_code::logic_code#0 memset::num#5 memset::end#0 done_run::gfx#4 done_run::gfx#2 done_run::gfx#1 ] Allocated (was zp[2]:11) zp[2]:7 [ render::canvas1#2 render::canvas1#0 render::canvas1#1 level_show::level#8 level_show::level#1 memcpy::src#2 memcpy::src#1 init_sprite_pointers::sprites_ptr_2#5 init_sprite_pointers::sprites_ptr_2#1 ] Allocated (was zp[2]:13) zp[2]:9 [ render::canvas2#2 render::canvas2#0 render::canvas2#1 render::canvas_offset#0 level_show::count#5 level_show::count#12 level_show::count#10 level_show::count#11 level_show::count#1 level_show::count#2 level_show::return#0 gameplay_run::$4 init_level_tile_directions::directions#7 init_level_tile_directions::directions#1 memcpy::dst#2 memcpy::dst#1 init_sprite_pointers::sprites_ptr_1#5 init_sprite_pointers::sprites_ptr_1#1 init_bobs_restore::bob_restore#5 init_bobs_restore::bob_restore#1 init_render_index::render_ypos_table#4 merge_code::dest_code#21 merge_code::dest_code#12 merge_code::dest_code#13 merge_code::dest_code#14 merge_code::dest_code#10 merge_code::dest_code#0 merge_code::dest_code#6 merge_code::dest_code#15 merge_code::dest_code#3 merge_code::dest_code#4 merge_code::dest_code#1 merge_code::dest_code#2 ] -Allocated (was zp[2]:15) zp[2]:11 [ render_tiles::tile_right_pixels#0 splash_show::splash#4 splash_show::splash#2 splash_show::splash#1 init_render_index::render_index_xcol#2 init_render_index::render_index_xcol#7 init_render_index::render_index_xcol#1 merge_code::raster_code#4 merge_code::raster_code#2 merge_code::raster_code#0 merge_code::raster_code#1 memset::dst#2 memset::dst#4 memset::dst#1 ] +Allocated (was zp[2]:15) zp[2]:11 [ render_tiles::tile_right_pixels#0 splash_show::splash#4 splash_show::splash#2 splash_show::splash#1 init_render_index::render_index_xcol#2 init_render_index::render_index_xcol#7 init_render_index::render_index_xcol#1 merge_code::raster_code#4 merge_code::raster_code#2 merge_code::raster_code#0 merge_code::raster_code#1 memset::str#6 memset::dst#2 memset::dst#4 memset::dst#1 ] Allocated (was zp[2]:17) zp[2]:13 [ render_tiles::tile_left_pixels#0 level_tile_get::ytiles#0 render::render_index_xcol#0 init_render_index::$11 init_render_index::$10 init_render_index::$12 init_render_index::canvas#0 ] Allocated (was zp[1]:40) zp[1]:15 [ level_show::xcol#2 level_show::xcol#1 render_tiles::xcol#0 init_level_tile_directions::open_directions#8 init_level_tile_directions::open_directions#4 init_level_tile_directions::open_directions#13 init_level_tile_directions::open_directions#3 init_level_tile_directions::open_directions#12 init_level_tile_directions::open_directions#2 init_level_tile_directions::open_directions#11 ] Allocated (was zp[1]:70) zp[1]:16 [ level_show::ytile#2 level_show::ytile#1 render_tiles::ytile#0 init_level_tile_directions::xtile#10 init_level_tile_directions::xtile#1 init_render_index::y_pos#2 init_render_index::y_pos#1 done_run::ypos#2 done_run::ypos#1 render::ypos#2 render::ypos#0 render::ypos#1 splash_show::ypos#2 splash_show::ypos#1 ] @@ -15695,7 +15594,7 @@ Allocated (was zp[1]:159) zp[1]:30 [ top_sprites_color ] Allocated (was zp[1]:163) zp[1]:31 [ pacman_wins ] Allocated (was zp[1]:172) zp[1]:32 [ canvas_base_hi ] Allocated (was zp[1]:173) zp[1]:33 [ bobs_restore_base ] -Allocated (was zp[1]:179) zp[1]:34 [ choose_direction::dist_min#11 choose_direction::dist_left#0 choose_direction::dist_min#17 choose_direction::dist_min#18 ] +Allocated (was zp[1]:353) zp[1]:34 [ game_logic::$210 choose_direction::dist_min#11 choose_direction::dist_left#0 choose_direction::dist_min#17 choose_direction::dist_min#18 ] Allocated (was zp[1]:180) zp[1]:35 [ pacman_lives ] Allocated (was zp[2]:181) zp[2]:36 [ byteboozer_decrunch::crunched ] Allocated (was zp[1]:183) zp[1]:38 [ ghost1_respawn ] @@ -15710,11 +15609,11 @@ Allocated (was zp[1]:191) zp[1]:46 [ ghost2_substep ] Allocated (was zp[1]:192) zp[1]:47 [ ghost3_substep ] Allocated (was zp[1]:193) zp[1]:48 [ ghost4_substep ] Allocated (was zp[2]:195) zp[2]:49 [ level_tile_directions::ytiles#0 ] -Allocated (was zp[1]:203) zp[1]:51 [ choose_direction::return#10 choose_direction::direction#6 choose_direction::direction#8 choose_direction::direction#10 ] -Allocated (was zp[1]:208) zp[1]:52 [ pacman_direction ] -Allocated (was zp[1]:209) zp[1]:53 [ ghost1_direction ] -Allocated (was zp[1]:210) zp[1]:54 [ ghost2_direction ] -Allocated (was zp[1]:212) zp[1]:55 [ choose_direction::ghost_ytile#4 choose_direction::ghost_ytile#2 choose_direction::ghost_ytile#3 choose_direction::ghost_ytile#0 choose_direction::ghost_ytile#1 ] +Allocated (was zp[1]:354) zp[1]:51 [ game_logic::ghost4_xtile#0 choose_direction::return#10 choose_direction::direction#6 choose_direction::direction#8 choose_direction::direction#10 ] +Allocated (was zp[1]:212) zp[1]:52 [ choose_direction::ghost_ytile#4 choose_direction::ghost_ytile#2 choose_direction::ghost_ytile#3 choose_direction::ghost_ytile#0 choose_direction::ghost_ytile#1 game_logic::ghost4_ytile#0 game_logic::ghost3_ytile#0 game_logic::ghost2_ytile#0 game_logic::ghost1_ytile#0 choose_direction::ydiff#0 ] +Allocated (was zp[1]:208) zp[1]:53 [ pacman_direction ] +Allocated (was zp[1]:209) zp[1]:54 [ ghost1_direction ] +Allocated (was zp[1]:210) zp[1]:55 [ ghost2_direction ] Allocated (was zp[1]:213) zp[1]:56 [ ghost3_direction ] Allocated (was zp[1]:214) zp[1]:57 [ ghost4_direction ] Allocated (was zp[1]:215) zp[1]:58 [ top_sprites_mc ] @@ -15728,43 +15627,34 @@ Allocated (was zp[1]:222) zp[1]:65 [ game_playable ] Allocated (was zp[1]:223) zp[1]:66 [ ghost3_yfine ] Allocated (was zp[1]:224) zp[1]:67 [ ghost4_xfine ] Allocated (was zp[1]:225) zp[1]:68 [ ghost4_yfine ] -Allocated (was mem[2]) zp[2]:69 [ game_logic::ytiles#0 game_logic::$67 game_logic::$71 ] +Allocated (was zp[2]:343) zp[2]:69 [ game_logic::ytiles#0 game_logic::$67 game_logic::$71 ] Allocated (was zp[1]:226) zp[1]:71 [ pacman_xfine ] Allocated (was zp[1]:227) zp[1]:72 [ pacman_yfine ] -Allocated (was zp[1]:228) zp[1]:73 [ game_logic::ghost_frame_idx#2 game_logic::ghost_frame_idx#0 game_logic::ghost_frame_idx#1 ] -Allocated (was zp[1]:229) zp[1]:74 [ choose_direction::open_directions#10 choose_direction::open_directions#2 choose_direction::open_directions#3 choose_direction::open_directions#0 choose_direction::open_directions#1 ] -Allocated (was mem[1]) zp[1]:75 [ choose_direction::ydiff#0 ] -Allocated (was mem[1]) zp[1]:76 [ choose_direction::xdiff#0 ] -Allocated (was mem[1]) zp[1]:77 [ logic_tile_left_idx ] -Allocated (was mem[1]) zp[1]:78 [ logic_tile_right_idx ] -Allocated (was mem[2]) zp[2]:79 [ left_render_index_xcol ] -Allocated (was mem[2]) zp[2]:81 [ left_canvas ] -Allocated (was mem[1]) zp[1]:83 [ left_ypos_inc_offset ] -Allocated (was mem[2]) zp[2]:84 [ rigt_render_index_xcol ] -Allocated (was mem[2]) zp[2]:86 [ rigt_canvas ] -Allocated (was mem[1]) zp[1]:88 [ rigt_ypos_inc_offset ] -Allocated (was mem[2]) zp[2]:89 [ pill_count ] -Allocated (was mem[1]) zp[1]:91 [ game_logic::pacman_xtile#0 ] -Allocated (was mem[1]) zp[1]:92 [ game_logic_substep ] -Allocated (was mem[1]) zp[1]:93 [ game_logic::$210 ] -Allocated (was mem[1]) zp[1]:94 [ game_logic::ghost4_xtile#0 ] -Allocated (was mem[1]) zp[1]:95 [ game_logic::ghost4_ytile#0 ] -Allocated (was mem[1]) zp[1]:96 [ game_logic::ghost3_xtile#0 ] -Allocated (was mem[1]) zp[1]:97 [ game_logic::ghost3_ytile#0 ] -Allocated (was mem[1]) zp[1]:98 [ game_logic::ghost2_xtile#0 ] -Allocated (was mem[1]) zp[1]:99 [ game_logic::ghost2_ytile#0 ] -Allocated (was mem[1]) zp[1]:100 [ game_logic::ghost1_xtile#0 ] -Allocated (was mem[1]) zp[1]:101 [ game_logic::ghost1_ytile#0 ] -Allocated (was mem[1]) zp[1]:102 [ pacman_ch1_idx ] -Allocated (was mem[1]) zp[1]:103 [ ghosts_mode ] -Allocated (was mem[1]) zp[1]:104 [ anim_frame_idx ] -Allocated (was mem[1]) zp[1]:105 [ ghost1_reverse ] -Allocated (was mem[1]) zp[1]:106 [ ghost2_reverse ] -Allocated (was mem[1]) zp[1]:107 [ ghost3_reverse ] -Allocated (was mem[1]) zp[1]:108 [ ghost4_reverse ] -Allocated (was mem[1]) zp[1]:109 [ frame ] -Allocated (was mem[1]) zp[1]:110 [ pacman_ch1_enabled ] -Allocated (was mem[2]) zp[2]:111 [ memset::str#6 ] +Allocated (was zp[1]:337) zp[1]:73 [ game_logic::pacman_xtile#0 choose_direction::open_directions#10 choose_direction::open_directions#2 choose_direction::open_directions#3 choose_direction::open_directions#0 choose_direction::open_directions#1 ] +Allocated (was zp[1]:228) zp[1]:74 [ game_logic::ghost_frame_idx#2 game_logic::ghost_frame_idx#0 game_logic::ghost_frame_idx#1 ] +Allocated (was zp[1]:294) zp[1]:75 [ choose_direction::xdiff#0 ] +Allocated (was zp[1]:295) zp[1]:76 [ logic_tile_left_idx ] +Allocated (was zp[1]:296) zp[1]:77 [ logic_tile_right_idx ] +Allocated (was zp[2]:297) zp[2]:78 [ left_render_index_xcol ] +Allocated (was zp[2]:299) zp[2]:80 [ left_canvas ] +Allocated (was zp[1]:301) zp[1]:82 [ left_ypos_inc_offset ] +Allocated (was zp[2]:302) zp[2]:83 [ rigt_render_index_xcol ] +Allocated (was zp[2]:304) zp[2]:85 [ rigt_canvas ] +Allocated (was zp[1]:306) zp[1]:87 [ rigt_ypos_inc_offset ] +Allocated (was zp[2]:314) zp[2]:88 [ pill_count ] +Allocated (was zp[1]:352) zp[1]:90 [ game_logic_substep ] +Allocated (was zp[1]:356) zp[1]:91 [ game_logic::ghost3_xtile#0 ] +Allocated (was zp[1]:358) zp[1]:92 [ game_logic::ghost2_xtile#0 ] +Allocated (was zp[1]:360) zp[1]:93 [ game_logic::ghost1_xtile#0 ] +Allocated (was zp[1]:362) zp[1]:94 [ pacman_ch1_idx ] +Allocated (was zp[1]:363) zp[1]:95 [ ghosts_mode ] +Allocated (was zp[1]:364) zp[1]:96 [ anim_frame_idx ] +Allocated (was zp[1]:365) zp[1]:97 [ ghost1_reverse ] +Allocated (was zp[1]:366) zp[1]:98 [ ghost2_reverse ] +Allocated (was zp[1]:367) zp[1]:99 [ ghost3_reverse ] +Allocated (was zp[1]:368) zp[1]:100 [ ghost4_reverse ] +Allocated (was zp[1]:369) zp[1]:101 [ frame ] +Allocated (was zp[1]:370) zp[1]:102 [ pacman_ch1_enabled ] Interrupt procedure irq_screen_top clobbers AXYZcnzvidePSB ASSEMBLER BEFORE OPTIMIZATION @@ -15989,9 +15879,9 @@ ASSEMBLER BEFORE OPTIMIZATION // Pointer to the music play routine .label musicPlay = INTRO_MUSIC+6 // Is the pacman eating sound enabled - .label pacman_ch1_enabled = $6e + .label pacman_ch1_enabled = $66 // Index into the eating sound - .label pacman_ch1_idx = $66 + .label pacman_ch1_idx = $5e // Pointer to the tile to render in the logic code .label logic_tile_ptr = $1a // The x-column of the tile to render @@ -15999,16 +15889,16 @@ ASSEMBLER BEFORE OPTIMIZATION // The y-fine of the tile to render .label logic_tile_yfine = $1d // The ID*4 of the left tile to render - .label logic_tile_left_idx = $4d + .label logic_tile_left_idx = $4c // The ID*4 of the right tile to render - .label logic_tile_right_idx = $4e + .label logic_tile_right_idx = $4d // Variables used by the logic-code renderer and restorer - .label left_render_index_xcol = $4f - .label left_canvas = $51 - .label left_ypos_inc_offset = $53 - .label rigt_render_index_xcol = $54 - .label rigt_canvas = $56 - .label rigt_ypos_inc_offset = $58 + .label left_render_index_xcol = $4e + .label left_canvas = $50 + .label left_ypos_inc_offset = $52 + .label rigt_render_index_xcol = $53 + .label rigt_canvas = $55 + .label rigt_ypos_inc_offset = $57 // The high-byte of the start-address of the canvas currently being rendered to .label canvas_base_hi = $20 // The offset used for bobs_restore - used to achieve double buffering @@ -16022,7 +15912,7 @@ ASSEMBLER BEFORE OPTIMIZATION .label bottom_sprites_color = $18 .label bottom_sprites_mc = $19 // The number of pills left - .label pill_count = $59 + .label pill_count = $58 // 1 When pacman wins .label pacman_wins = $1f // The number of pacman lives left @@ -16032,19 +15922,19 @@ ASSEMBLER BEFORE OPTIMIZATION // 0: intro, 1: game .label phase = $3d // The double buffer frame (0=BANK_1, 1=BANK_2) - .label frame = $6d + .label frame = $65 // The animation frame IDX (within the current direction) [0-3] - .label anim_frame_idx = $68 + .label anim_frame_idx = $60 // Pacman x fine position (0-99). .label pacman_xfine = $47 // Pacman y fine position (0-70). .label pacman_yfine = $48 // The pacman movement current direction - .label pacman_direction = $34 + .label pacman_direction = $35 // Pacman movement substep (0: on tile, 1: between tiles). .label pacman_substep = $2c // Mode determining ghost target mode. 0: chase, 1: scatter - .label ghosts_mode = $67 + .label ghosts_mode = $5f // Counts frames to change ghost mode (7 seconds scatter, 20 seconds chase ) .label ghosts_mode_count = $2b // Ghost 1 x fine position (0-99). @@ -16052,11 +15942,11 @@ ASSEMBLER BEFORE OPTIMIZATION // Ghost 1 y fine position (0-70). .label ghost1_yfine = $3c // Ghost 1 movement current direction - .label ghost1_direction = $35 + .label ghost1_direction = $36 // Ghost 1 movement substep (0: on tile, 1: between tiles). .label ghost1_substep = $2d // Ghost 1 movement should be reversed (0: normal, 1: reverse direction) - .label ghost1_reverse = $69 + .label ghost1_reverse = $61 // Ghost 1 respawn timer .label ghost1_respawn = $26 // Ghost 2 x fine position (0-99). @@ -16064,11 +15954,11 @@ ASSEMBLER BEFORE OPTIMIZATION // Ghost 2 y fine position (0-70). .label ghost2_yfine = $3f // Ghost 2 movement current direction - .label ghost2_direction = $36 + .label ghost2_direction = $37 // Ghost 2 movement substep (0: on tile, 1: between tiles). .label ghost2_substep = $2e // Ghost 2 movement should be reversed (0: normal, 1: reverse direction) - .label ghost2_reverse = $6a + .label ghost2_reverse = $62 // Ghost 2 respawn timer .label ghost2_respawn = $28 // Ghost 3 x fine position (0-99). @@ -16080,7 +15970,7 @@ ASSEMBLER BEFORE OPTIMIZATION // Ghost 3 movement substep (0: on tile, 1: between tiles). .label ghost3_substep = $2f // Ghost 3 movement should be reversed (0: normal, 1: reverse direction) - .label ghost3_reverse = $6b + .label ghost3_reverse = $63 // Ghost 3 respawn timer .label ghost3_respawn = $29 // Ghost 4 x fine position (0-99). @@ -16092,11 +15982,11 @@ ASSEMBLER BEFORE OPTIMIZATION // Ghost 4 movement substep (0: on tile, 1: between tiles). .label ghost4_substep = $30 // Ghost 4 movement should be reversed (0: normal, 1: reverse direction) - .label ghost4_reverse = $6c + .label ghost4_reverse = $64 // Ghost 4 respawn timer .label ghost4_respawn = $2a // Game logic sub-step [0-7]. Each frame a different sub-step is animated - .label game_logic_substep = $5c + .label game_logic_substep = $5a // 1 when the game is playable and characters should move around .label game_playable = $41 .segment Code @@ -16544,21 +16434,21 @@ main: { game_logic: { .label __67 = $45 .label __71 = $45 - .label __210 = $5d - .label ghost_frame_idx = $49 - .label pacman_xtile = $5b + .label __210 = $22 + .label ghost_frame_idx = $4a + .label pacman_xtile = $49 .label ytiles = $45 - .label ghost4_xtile = $5e - .label ghost4_ytile = $5f + .label ghost4_xtile = $33 + .label ghost4_ytile = $34 .label target_ytile = $27 - .label ghost3_xtile = $60 - .label ghost3_ytile = $61 + .label ghost3_xtile = $5b + .label ghost3_ytile = $34 .label target_ytile1 = $27 - .label ghost2_xtile = $62 - .label ghost2_ytile = $63 + .label ghost2_xtile = $5c + .label ghost2_ytile = $34 .label target_ytile2 = $27 - .label ghost1_xtile = $64 - .label ghost1_ytile = $65 + .label ghost1_xtile = $5d + .label ghost1_ytile = $34 .label target_ytile3 = $27 // [107] if(game_playable!=0) goto game_logic::@1 -- vbuz1_neq_0_then_la1 lda.z game_playable @@ -17396,9 +17286,7 @@ game_logic: { sty.z choose_direction.open_directions // [292] choose_direction::ghost_xtile#0 = game_logic::ghost4_xtile#0 -- vbuyy=vbuz1 ldy.z ghost4_xtile - // [293] choose_direction::ghost_ytile#0 = game_logic::ghost4_ytile#0 -- vbuz1=vbuz2 - lda.z ghost4_ytile - sta.z choose_direction.ghost_ytile + // [293] choose_direction::ghost_ytile#0 = game_logic::ghost4_ytile#0 // [294] choose_direction::target_xtile#0 = game_logic::target_xtile#3 // [295] choose_direction::target_ytile#0 = game_logic::target_ytile#3 // [296] call choose_direction @@ -17644,9 +17532,7 @@ game_logic: { sty.z choose_direction.open_directions // [342] choose_direction::ghost_xtile#1 = game_logic::ghost3_xtile#0 -- vbuyy=vbuz1 ldy.z ghost3_xtile - // [343] choose_direction::ghost_ytile#1 = game_logic::ghost3_ytile#0 -- vbuz1=vbuz2 - lda.z ghost3_ytile - sta.z choose_direction.ghost_ytile + // [343] choose_direction::ghost_ytile#1 = game_logic::ghost3_ytile#0 // [344] choose_direction::target_xtile#1 = game_logic::target_xtile1#3 // [345] choose_direction::target_ytile#1 = game_logic::target_ytile1#3 // [346] call choose_direction @@ -17892,9 +17778,7 @@ game_logic: { sty.z choose_direction.open_directions // [392] choose_direction::ghost_xtile#2 = game_logic::ghost2_xtile#0 -- vbuyy=vbuz1 ldy.z ghost2_xtile - // [393] choose_direction::ghost_ytile#2 = game_logic::ghost2_ytile#0 -- vbuz1=vbuz2 - lda.z ghost2_ytile - sta.z choose_direction.ghost_ytile + // [393] choose_direction::ghost_ytile#2 = game_logic::ghost2_ytile#0 // [394] choose_direction::target_xtile#2 = game_logic::target_xtile2#3 // [395] choose_direction::target_ytile#2 = game_logic::target_ytile2#3 // [396] call choose_direction @@ -18141,9 +18025,7 @@ game_logic: { sty.z choose_direction.open_directions // [442] choose_direction::ghost_xtile#3 = game_logic::ghost1_xtile#0 -- vbuyy=vbuz1 ldy.z ghost1_xtile - // [443] choose_direction::ghost_ytile#3 = game_logic::ghost1_ytile#0 -- vbuz1=vbuz2 - lda.z ghost1_ytile - sta.z choose_direction.ghost_ytile + // [443] choose_direction::ghost_ytile#3 = game_logic::ghost1_ytile#0 // [444] choose_direction::target_xtile#3 = game_logic::target_xtile3#3 // [445] choose_direction::target_ytile#3 = game_logic::target_ytile3#3 // [446] call choose_direction @@ -19660,13 +19542,13 @@ level_tile_directions: { // choose_direction // Choose the open direction that brings the ghost closest to the target // Uses Manhattan distance calculation -// __zp($33) char choose_direction(__zp($4a) char open_directions, __register(Y) char ghost_xtile, __zp($37) char ghost_ytile, __register(X) char target_xtile, __zp($27) char target_ytile) +// __zp($33) char choose_direction(__zp($49) char open_directions, __register(Y) char ghost_xtile, __zp($34) char ghost_ytile, __register(X) char target_xtile, __zp($27) char target_ytile) choose_direction: { - .label open_directions = $4a - .label ghost_ytile = $37 + .label open_directions = $49 + .label ghost_ytile = $34 .label target_ytile = $27 - .label xdiff = $4c - .label ydiff = $4b + .label xdiff = $4b + .label ydiff = $34 .label dist_left = $22 .label return = $33 .label direction = $33 @@ -19677,8 +19559,8 @@ choose_direction: { sec sbc.z $ff sta.z xdiff - // [750] choose_direction::ydiff#0 = choose_direction::ghost_ytile#4 - choose_direction::target_ytile#4 -- vbuz1=vbuz2_minus_vbuz3 - lda.z ghost_ytile + // [750] choose_direction::ydiff#0 = choose_direction::ghost_ytile#4 - choose_direction::target_ytile#4 -- vbuz1=vbuz1_minus_vbuz2 + lda.z ydiff sec sbc.z target_ytile sta.z ydiff @@ -19859,12 +19741,12 @@ choose_direction: { } // memset // Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. -// void * memset(__zp($6f) void *str, char c, __zp(5) unsigned int num) +// void * memset(__zp($b) void *str, char c, __zp(5) unsigned int num) memset: { .label end = 5 .label dst = $b .label num = 5 - .label str = $6f + .label str = $b // [779] if(memset::num#5<=0) goto memset::@return -- vwuz1_le_0_then_la1 lda.z num bne !+ @@ -19882,11 +19764,7 @@ memset: { lda.z end+1 adc.z str+1 sta.z end+1 - // [781] memset::dst#4 = (char *)memset::str#6 -- pbuz1=pbuz2 - lda.z str - sta.z dst - lda.z str+1 - sta.z dst+1 + // [781] memset::dst#4 = (char *)memset::str#6 // [782] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] __b2_from___b1: __b2_from___b3: @@ -23269,15 +23147,15 @@ Fixing long branch [850] bcs __breturn to bcc Fixing long branch [964] bne __b50 to beq Fixing long branch [973] bcc __b9 to bcs Fixing long branch [984] bcc __b9 to bcs -Fixing long branch [1083] bne __breturn to beq -Fixing long branch [1105] bne __breturn to beq -Fixing long branch [1208] bne __breturn to beq -Fixing long branch [1230] bne __breturn to beq -Fixing long branch [1334] bne __breturn to beq -Fixing long branch [1356] bne __breturn to beq -Fixing long branch [1461] bne __breturn to beq -Fixing long branch [1483] bne __breturn to beq -Fixing long branch [1561] bne __breturn to beq +Fixing long branch [1081] bne __breturn to beq +Fixing long branch [1103] bne __breturn to beq +Fixing long branch [1204] bne __breturn to beq +Fixing long branch [1226] bne __breturn to beq +Fixing long branch [1328] bne __breturn to beq +Fixing long branch [1350] bne __breturn to beq +Fixing long branch [1453] bne __breturn to beq +Fixing long branch [1475] bne __breturn to beq +Fixing long branch [1553] bne __breturn to beq Fixing long branch [580] beq __b2 to bne Fixing long branch [585] beq __b3 to bne Fixing long branch [590] beq __b4 to bne @@ -23292,23 +23170,23 @@ Fixing long branch [1015] bne __b72 to beq Fixing long branch [1021] beq __b73 to bne Fixing long branch [1026] beq __b74 to bne Fixing long branch [1031] beq __b75 to bne -Fixing long branch [1148] bne __b89 to beq -Fixing long branch [1154] beq __b90 to bne -Fixing long branch [1159] beq __b91 to bne -Fixing long branch [1164] beq __b92 to bne -Fixing long branch [1282] bne __b106 to beq -Fixing long branch [1288] beq __b107 to bne -Fixing long branch [1293] beq __b108 to bne -Fixing long branch [1298] beq __b109 to bne -Fixing long branch [1416] bne __b123 to beq -Fixing long branch [1423] beq __b124 to bne -Fixing long branch [1428] beq __b125 to bne -Fixing long branch [1433] beq __b126 to bne -Fixing long branch [1772] bcc __b3 to bcs -Fixing long branch [1937] bcc __b2 to bcs -Fixing long branch [1953] bcc __b5 to bcs -Fixing long branch [2079] bcc __b5 to bcs -Fixing long branch [2450] bne __b2 to beq +Fixing long branch [1146] bne __b89 to beq +Fixing long branch [1152] beq __b90 to bne +Fixing long branch [1157] beq __b91 to bne +Fixing long branch [1162] beq __b92 to bne +Fixing long branch [1278] bne __b106 to beq +Fixing long branch [1284] beq __b107 to bne +Fixing long branch [1289] beq __b108 to bne +Fixing long branch [1294] beq __b109 to bne +Fixing long branch [1410] bne __b123 to beq +Fixing long branch [1417] beq __b124 to bne +Fixing long branch [1422] beq __b125 to bne +Fixing long branch [1427] beq __b126 to bne +Fixing long branch [1764] bcc __b3 to bcs +Fixing long branch [1929] bcc __b2 to bcs +Fixing long branch [1945] bcc __b5 to bcs +Fixing long branch [2071] bcc __b5 to bcs +Fixing long branch [2438] bne __b2 to beq FINAL SYMBOL TABLE __constant char ABS[$100] = kickasm {{ .for(var i=0;i<$100;i++) { @@ -24121,7 +23999,7 @@ __constant char WIN_GFX_CRUNCHED[] = kickasm( uses WIN_GFX) {{ .modify B2() { }} __constant const char YELLOW = 7 void __start() -__loadstore volatile char anim_frame_idx // zp[1]:104 0.9019607843137255 +__loadstore volatile char anim_frame_idx // zp[1]:96 0.9019607843137255 __constant char bobs_bob_id[NUM_BOBS] = { 0, 0, 0, 0, 0 } __constant char bobs_restore[NUM_BOBS*SIZE_BOB_RESTORE*2] = { fill( NUM_BOBS*SIZE_BOB_RESTORE*2, 0) } __loadstore volatile char bobs_restore_base // zp[1]:33 1070.0 @@ -24164,17 +24042,17 @@ char choose_direction::ghost_xtile#2 // reg byte y 5.5 char choose_direction::ghost_xtile#3 // reg byte y 5.5 char choose_direction::ghost_xtile#4 // reg byte y 145.0 char choose_direction::ghost_ytile -char choose_direction::ghost_ytile#0 // ghost_ytile zp[1]:55 7.333333333333333 -char choose_direction::ghost_ytile#1 // ghost_ytile zp[1]:55 7.333333333333333 -char choose_direction::ghost_ytile#2 // ghost_ytile zp[1]:55 7.333333333333333 -char choose_direction::ghost_ytile#3 // ghost_ytile zp[1]:55 7.333333333333333 -char choose_direction::ghost_ytile#4 // ghost_ytile zp[1]:55 72.5 +char choose_direction::ghost_ytile#0 // ghost_ytile zp[1]:52 7.333333333333333 +char choose_direction::ghost_ytile#1 // ghost_ytile zp[1]:52 7.333333333333333 +char choose_direction::ghost_ytile#2 // ghost_ytile zp[1]:52 7.333333333333333 +char choose_direction::ghost_ytile#3 // ghost_ytile zp[1]:52 7.333333333333333 +char choose_direction::ghost_ytile#4 // ghost_ytile zp[1]:52 72.5 char choose_direction::open_directions -char choose_direction::open_directions#0 // open_directions zp[1]:74 4.4 -char choose_direction::open_directions#1 // open_directions zp[1]:74 4.4 -char choose_direction::open_directions#10 // open_directions zp[1]:74 19.478260869565215 -char choose_direction::open_directions#2 // open_directions zp[1]:74 4.4 -char choose_direction::open_directions#3 // open_directions zp[1]:74 4.4 +char choose_direction::open_directions#0 // open_directions zp[1]:73 4.4 +char choose_direction::open_directions#1 // open_directions zp[1]:73 4.4 +char choose_direction::open_directions#10 // open_directions zp[1]:73 19.478260869565215 +char choose_direction::open_directions#2 // open_directions zp[1]:73 4.4 +char choose_direction::open_directions#3 // open_directions zp[1]:73 4.4 char choose_direction::return char choose_direction::return#0 // reg byte a 22.0 char choose_direction::return#1 // reg byte a 22.0 @@ -24194,9 +24072,9 @@ char choose_direction::target_ytile#2 // target_ytile zp[1]:39 22.0 char choose_direction::target_ytile#3 // target_ytile zp[1]:39 22.0 char choose_direction::target_ytile#4 // target_ytile zp[1]:39 72.5 char choose_direction::xdiff -char choose_direction::xdiff#0 // xdiff zp[1]:76 21.041666666666664 +char choose_direction::xdiff#0 // xdiff zp[1]:75 21.041666666666664 char choose_direction::ydiff -char choose_direction::ydiff#0 // ydiff zp[1]:75 21.956521739130434 +char choose_direction::ydiff#0 // ydiff zp[1]:52 21.956521739130434 void done_run() char done_run::$8 // reg byte a 2000002.0 char *done_run::gfx @@ -24217,7 +24095,7 @@ char done_run::xcol#2 // xcol zp[1]:20 118182.18181818182 char done_run::ypos char done_run::ypos#1 // ypos zp[1]:16 2000002.0 char done_run::ypos#2 // ypos zp[1]:16 500000.5 -__loadstore volatile char frame // zp[1]:109 0.5 +__loadstore volatile char frame // zp[1]:101 0.5 void game_logic() char game_logic::$119 // reg byte a 22.0 char game_logic::$14 // reg byte x 22.0 @@ -24234,7 +24112,7 @@ char game_logic::$20 // reg byte a 22.0 char game_logic::$200 // reg byte a 22.0 char game_logic::$204 // reg byte a 22.0 char game_logic::$21 // reg byte a 22.0 -char game_logic::$210 // zp[1]:93 2.588235294117647 +char game_logic::$210 // zp[1]:34 2.588235294117647 char game_logic::$220 // reg byte x 11.0 char game_logic::$223 // reg byte x 11.0 char game_logic::$226 // reg byte x 11.0 @@ -24282,31 +24160,31 @@ char game_logic::do_reverse#4 // reg byte a 11.0 char game_logic::ghost1_bob_xfine char game_logic::ghost1_bob_xfine#0 // reg byte y 5.5 char game_logic::ghost1_xtile -char game_logic::ghost1_xtile#0 // ghost1_xtile zp[1]:100 2.357142857142857 +char game_logic::ghost1_xtile#0 // ghost1_xtile zp[1]:93 2.357142857142857 char game_logic::ghost1_ytile -char game_logic::ghost1_ytile#0 // ghost1_ytile zp[1]:101 2.357142857142857 +char game_logic::ghost1_ytile#0 // ghost1_ytile zp[1]:52 2.357142857142857 char game_logic::ghost2_bob_xfine char game_logic::ghost2_bob_xfine#0 // reg byte y 5.5 char game_logic::ghost2_xtile -char game_logic::ghost2_xtile#0 // ghost2_xtile zp[1]:98 2.357142857142857 +char game_logic::ghost2_xtile#0 // ghost2_xtile zp[1]:92 2.357142857142857 char game_logic::ghost2_ytile -char game_logic::ghost2_ytile#0 // ghost2_ytile zp[1]:99 2.357142857142857 +char game_logic::ghost2_ytile#0 // ghost2_ytile zp[1]:52 2.357142857142857 char game_logic::ghost3_bob_xfine char game_logic::ghost3_bob_xfine#0 // reg byte y 5.5 char game_logic::ghost3_xtile -char game_logic::ghost3_xtile#0 // ghost3_xtile zp[1]:96 2.357142857142857 +char game_logic::ghost3_xtile#0 // ghost3_xtile zp[1]:91 2.357142857142857 char game_logic::ghost3_ytile -char game_logic::ghost3_ytile#0 // ghost3_ytile zp[1]:97 2.357142857142857 +char game_logic::ghost3_ytile#0 // ghost3_ytile zp[1]:52 2.357142857142857 char game_logic::ghost4_bob_xfine char game_logic::ghost4_bob_xfine#0 // reg byte y 5.5 char game_logic::ghost4_xtile -char game_logic::ghost4_xtile#0 // ghost4_xtile zp[1]:94 2.357142857142857 +char game_logic::ghost4_xtile#0 // ghost4_xtile zp[1]:51 2.357142857142857 char game_logic::ghost4_ytile -char game_logic::ghost4_ytile#0 // ghost4_ytile zp[1]:95 2.357142857142857 +char game_logic::ghost4_ytile#0 // ghost4_ytile zp[1]:52 2.357142857142857 char game_logic::ghost_frame_idx -char game_logic::ghost_frame_idx#0 // ghost_frame_idx zp[1]:73 16.5 -char game_logic::ghost_frame_idx#1 // ghost_frame_idx zp[1]:73 22.0 -char game_logic::ghost_frame_idx#2 // ghost_frame_idx zp[1]:73 1.9999999999999998 +char game_logic::ghost_frame_idx#0 // ghost_frame_idx zp[1]:74 16.5 +char game_logic::ghost_frame_idx#1 // ghost_frame_idx zp[1]:74 22.0 +char game_logic::ghost_frame_idx#2 // ghost_frame_idx zp[1]:74 1.9999999999999998 char game_logic::joy_directions char game_logic::joy_directions#0 // reg byte a 16.5 char game_logic::new_direction @@ -24328,7 +24206,7 @@ char game_logic::open_directions4#0 // reg byte x 3.666666666666667 char game_logic::pacman_bob_xfine char game_logic::pacman_bob_xfine#0 // reg byte y 5.5 char game_logic::pacman_xtile -char game_logic::pacman_xtile#0 // pacman_xtile zp[1]:91 6.769230769230768 +char game_logic::pacman_xtile#0 // pacman_xtile zp[1]:73 6.769230769230768 char game_logic::pacman_xtile1 char game_logic::pacman_xtile1#0 // reg byte x 11.0 char game_logic::pacman_ytile @@ -24363,7 +24241,7 @@ char game_logic::tile_id char game_logic::tile_id#0 // reg byte x 16.5 char *game_logic::ytiles char *game_logic::ytiles#0 // ytiles zp[2]:69 5.5 -__loadstore volatile char game_logic_substep // zp[1]:92 2.947368421052632 +__loadstore volatile char game_logic_substep // zp[1]:90 2.947368421052632 __loadstore volatile char game_playable // zp[1]:65 69.48275862068965 void gameplay_run() unsigned int gameplay_run::$4 // zp[2]:9 2002.0 @@ -24376,32 +24254,32 @@ char gameplay_run::i1#2 // reg byte x 133334.66666666666 char gameplay_run::i2 char gameplay_run::i2#1 // reg byte x 200002.0 char gameplay_run::i2#2 // reg byte x 133334.66666666666 -__loadstore volatile char ghost1_direction // zp[1]:53 122.24096385542168 +__loadstore volatile char ghost1_direction // zp[1]:54 122.24096385542168 __loadstore volatile char ghost1_respawn // zp[1]:38 271.8378378378378 -__loadstore volatile char ghost1_reverse // zp[1]:105 0.7291666666666666 +__loadstore volatile char ghost1_reverse // zp[1]:97 0.7291666666666666 __loadstore volatile char ghost1_substep // zp[1]:45 223.51111111111112 __loadstore volatile char ghost1_xfine // zp[1]:59 84.55 __loadstore volatile char ghost1_yfine // zp[1]:60 82.13008130081302 -__loadstore volatile char ghost2_direction // zp[1]:54 110.28260869565217 +__loadstore volatile char ghost2_direction // zp[1]:55 110.28260869565217 __loadstore volatile char ghost2_respawn // zp[1]:40 264.6842105263158 -__loadstore volatile char ghost2_reverse // zp[1]:106 0.7142857142857143 +__loadstore volatile char ghost2_reverse // zp[1]:98 0.7142857142857143 __loadstore volatile char ghost2_substep // zp[1]:46 218.65217391304347 __loadstore volatile char ghost2_xfine // zp[1]:62 76.28571428571428 __loadstore volatile char ghost2_yfine // zp[1]:63 74.27941176470588 __loadstore volatile char ghost3_direction // zp[1]:56 100.45544554455446 __loadstore volatile char ghost3_respawn // zp[1]:41 257.8974358974359 -__loadstore volatile char ghost3_reverse // zp[1]:107 0.7 +__loadstore volatile char ghost3_reverse // zp[1]:99 0.7 __loadstore volatile char ghost3_substep // zp[1]:47 214.0 __loadstore volatile char ghost3_xfine // zp[1]:64 69.4931506849315 __loadstore volatile char ghost3_yfine // zp[1]:66 67.7986577181208 __loadstore volatile char ghost4_direction // zp[1]:57 92.23636363636363 __loadstore volatile char ghost4_respawn // zp[1]:42 251.45000000000002 -__loadstore volatile char ghost4_reverse // zp[1]:108 0.6862745098039216 +__loadstore volatile char ghost4_reverse // zp[1]:100 0.6862745098039216 __loadstore volatile char ghost4_substep // zp[1]:48 209.54166666666666 __loadstore volatile char ghost4_xfine // zp[1]:67 63.81132075471698 __loadstore volatile char ghost4_yfine // zp[1]:68 62.358024691358025 __constant char ghost_frames[] = { 0, 0, 0, 0, $3c, $40, $3c, $40, $34, $38, $34, $38, 0, 0, 0, 0, $2c, $30, $2c, $30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, $24, $28, $24, $28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, $5c, $60, $5c, $60, $54, $58, $54, $58, 0, 0, 0, 0, $4c, $50, $4c, $50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, $44, $48, $44, $48 } -__loadstore volatile char ghosts_mode // zp[1]:103 1.1044776119402984 +__loadstore volatile char ghosts_mode // zp[1]:95 1.1044776119402984 __loadstore volatile char ghosts_mode_count // zp[1]:43 234.93023255813955 void init_bobs_restore() __constant char *init_bobs_restore::CANVAS_HIDDEN = (char *) 59904 @@ -24506,9 +24384,9 @@ char joyfire::return#0 // reg byte a 2000002.0 char joyfire::return#1 // reg byte a 20002.0 char joyfire::return#4 // reg byte a 252500.5 void joyinit() -__loadstore char * volatile left_canvas // zp[2]:81 20.0 -__loadstore char * volatile left_render_index_xcol // zp[2]:79 20.0 -__loadstore volatile char left_ypos_inc_offset // zp[1]:83 20.0 +__loadstore char * volatile left_canvas // zp[2]:80 20.0 +__loadstore char * volatile left_render_index_xcol // zp[2]:78 20.0 +__loadstore volatile char left_ypos_inc_offset // zp[1]:82 20.0 unsigned int level_show() unsigned int level_show::count unsigned int level_show::count#1 // count zp[2]:9 2.0000002E7 @@ -24585,9 +24463,9 @@ char level_tile_get::ytile#3 // reg byte a 1.0000001E7 char level_tile_get::ytile#4 // reg byte a 8.0000002E7 char *level_tile_get::ytiles char *level_tile_get::ytiles#0 // ytiles zp[2]:13 2.00000002E8 -__loadstore volatile char logic_tile_left_idx // zp[1]:77 20.0 +__loadstore volatile char logic_tile_left_idx // zp[1]:76 20.0 __loadstore volatile char * volatile logic_tile_ptr // zp[2]:26 10250.0 -__loadstore volatile char logic_tile_right_idx // zp[1]:78 20.0 +__loadstore volatile char logic_tile_right_idx // zp[1]:77 20.0 __loadstore volatile char logic_tile_xcol // zp[1]:28 10250.0 __loadstore volatile char logic_tile_yfine // zp[1]:29 10250.0 void main() @@ -24618,7 +24496,7 @@ unsigned int memset::num unsigned int memset::num#5 // num zp[2]:5 1001.0 void *memset::return void *memset::str -void *memset::str#6 // str zp[2]:111 +void *memset::str#6 // str zp[2]:11 void merge_code(char *dest_code , char *raster_code , char *logic_code) char merge_code::$5 // reg byte y 100001.0 __constant const char merge_code::LOGIC_END = $ff @@ -24667,9 +24545,9 @@ char *merge_code::raster_code#4 // raster_code zp[2]:11 37501.5 __constant void (* const musicInit)() = (void (*)())INTRO_MUSIC __constant void (* const musicPlay)() = (void (*)())INTRO_MUSIC+6 __loadstore volatile char music_play_next // zp[1]:21 69506.875 -__loadstore volatile char pacman_ch1_enabled // zp[1]:110 0.08254716981132076 -__loadstore volatile char pacman_ch1_idx // zp[1]:102 1.9428571428571428 -__loadstore volatile char pacman_direction // zp[1]:52 132.92105263157893 +__loadstore volatile char pacman_ch1_enabled // zp[1]:102 0.08254716981132076 +__loadstore volatile char pacman_ch1_idx // zp[1]:94 1.9428571428571428 +__loadstore volatile char pacman_direction // zp[1]:53 132.92105263157893 __constant char pacman_frames[] = { 8, 8, 8, 8, 8, $18, $14, $18, 8, $20, $1c, $20, 0, 0, 0, 0, 8, 4, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, $c, $10, $c } __loadstore volatile char pacman_lives // zp[1]:35 656.4415584415585 void pacman_sound_init() @@ -24679,7 +24557,7 @@ __loadstore volatile char pacman_wins // zp[1]:31 2040.32 __loadstore volatile char pacman_xfine // zp[1]:71 47.719626168224295 __loadstore volatile char pacman_yfine // zp[1]:72 46.21818181818182 __loadstore volatile char phase // zp[1]:61 78.03703703703704 -__loadstore volatile unsigned int pill_count // zp[2]:89 14.191780821917808 +__loadstore volatile unsigned int pill_count // zp[2]:88 14.191780821917808 void render(char xcol , char ypos , char pixels) char render::$1 // reg byte x 1.0000001E7 char render::$2 // reg byte a 2.0000002E7 @@ -24756,9 +24634,9 @@ char render_tiles::ypos_inc_offset#1 // reg byte x 1.000000000001E12 char render_tiles::ypos_inc_offset#2 // reg byte x 5.714428571435714E11 char render_tiles::ytile char render_tiles::ytile#0 // ytile zp[1]:16 1.375000025E7 -__loadstore char * volatile rigt_canvas // zp[2]:86 20.0 -__loadstore char * volatile rigt_render_index_xcol // zp[2]:84 20.0 -__loadstore volatile char rigt_ypos_inc_offset // zp[1]:88 20.0 +__loadstore char * volatile rigt_canvas // zp[2]:85 20.0 +__loadstore char * volatile rigt_render_index_xcol // zp[2]:83 20.0 +__loadstore volatile char rigt_ypos_inc_offset // zp[1]:87 20.0 __loadstore volatile char side_sprites_color // zp[1]:22 11040.0 __loadstore volatile char side_sprites_mc // zp[1]:23 11040.0 void spawn_all() @@ -24806,7 +24684,7 @@ char splash_show::ypos#2 // ypos zp[1]:16 50000.5 __loadstore volatile char top_sprites_color // zp[1]:30 3403.666666666667 __loadstore volatile char top_sprites_mc // zp[1]:58 92.0 -zp[1]:73 [ game_logic::ghost_frame_idx#2 game_logic::ghost_frame_idx#0 game_logic::ghost_frame_idx#1 ] +zp[1]:74 [ game_logic::ghost_frame_idx#2 game_logic::ghost_frame_idx#0 game_logic::ghost_frame_idx#1 ] reg byte a [ game_logic::do_reverse#4 ] reg byte x [ game_logic::target_xtile#3 game_logic::target_xtile#2 ] zp[1]:39 [ game_logic::target_ytile#3 game_logic::target_ytile#2 choose_direction::target_ytile#4 choose_direction::target_ytile#2 choose_direction::target_ytile#3 choose_direction::target_ytile#0 choose_direction::target_ytile#1 game_logic::target_ytile1#3 game_logic::target_ytile1#2 game_logic::target_ytile2#3 game_logic::target_ytile2#2 game_logic::target_ytile3#3 game_logic::target_ytile3#2 ] @@ -24826,13 +24704,9 @@ reg byte a [ level_tile_directions::ytile#5 level_tile_directions::ytile#1 level reg byte a [ level_tile_directions::return#2 level_tile_directions::return#0 ] reg byte y [ choose_direction::ghost_xtile#4 choose_direction::ghost_xtile#2 choose_direction::ghost_xtile#3 choose_direction::ghost_xtile#0 choose_direction::ghost_xtile#1 ] reg byte x [ choose_direction::target_xtile#4 choose_direction::target_xtile#2 choose_direction::target_xtile#3 choose_direction::target_xtile#0 choose_direction::target_xtile#1 ] -zp[1]:55 [ choose_direction::ghost_ytile#4 choose_direction::ghost_ytile#2 choose_direction::ghost_ytile#3 choose_direction::ghost_ytile#0 choose_direction::ghost_ytile#1 ] -zp[1]:74 [ choose_direction::open_directions#10 choose_direction::open_directions#2 choose_direction::open_directions#3 choose_direction::open_directions#0 choose_direction::open_directions#1 ] +zp[1]:52 [ choose_direction::ghost_ytile#4 choose_direction::ghost_ytile#2 choose_direction::ghost_ytile#3 choose_direction::ghost_ytile#0 choose_direction::ghost_ytile#1 game_logic::ghost4_ytile#0 game_logic::ghost3_ytile#0 game_logic::ghost2_ytile#0 game_logic::ghost1_ytile#0 choose_direction::ydiff#0 ] reg byte y [ choose_direction::dist_min#6 choose_direction::dist_up#0 ] reg byte x [ choose_direction::dist_min#10 choose_direction::dist_min#13 choose_direction::dist_min#14 choose_direction::dist_down#0 ] -zp[1]:34 [ choose_direction::dist_min#11 choose_direction::dist_left#0 choose_direction::dist_min#17 choose_direction::dist_min#18 ] -zp[1]:51 [ choose_direction::return#10 choose_direction::direction#6 choose_direction::direction#8 choose_direction::direction#10 ] -zp[2]:111 [ memset::str#6 ] reg byte x [ merge_code::cycle_budget#10 merge_code::cycle_budget#2 merge_code::cycle_budget#3 merge_code::cycle_budget#13 merge_code::cycle_budget#0 merge_code::cycle_budget#1 ] reg byte x [ init_render_index::ypos_inc_offset#4 init_render_index::ypos_inc_offset#7 init_render_index::ypos_inc_offset#8 init_render_index::ypos_inc_offset#2 init_render_index::ypos_inc_offset#3 ] reg byte x [ init_bobs_restore::bob#2 init_bobs_restore::bob#1 ] @@ -24852,19 +24726,19 @@ reg byte x [ level_tile_get::xtile#4 level_tile_get::xtile#0 level_tile_get::xti reg byte a [ level_tile_get::ytile#4 level_tile_get::ytile#0 level_tile_get::ytile#1 level_tile_get::ytile#2 level_tile_get::ytile#3 ] reg byte a [ level_tile_get::return#2 level_tile_get::return#0 ] reg byte x [ render_tiles::ypos_inc_offset#2 render_tiles::ypos_inc_offset#0 render_tiles::ypos_inc_offset#1 ] -zp[1]:110 [ pacman_ch1_enabled ] -zp[1]:102 [ pacman_ch1_idx ] +zp[1]:102 [ pacman_ch1_enabled ] +zp[1]:94 [ pacman_ch1_idx ] zp[2]:26 [ logic_tile_ptr ] zp[1]:28 [ logic_tile_xcol ] zp[1]:29 [ logic_tile_yfine ] -zp[1]:77 [ logic_tile_left_idx ] -zp[1]:78 [ logic_tile_right_idx ] -zp[2]:79 [ left_render_index_xcol ] -zp[2]:81 [ left_canvas ] -zp[1]:83 [ left_ypos_inc_offset ] -zp[2]:84 [ rigt_render_index_xcol ] -zp[2]:86 [ rigt_canvas ] -zp[1]:88 [ rigt_ypos_inc_offset ] +zp[1]:76 [ logic_tile_left_idx ] +zp[1]:77 [ logic_tile_right_idx ] +zp[2]:78 [ left_render_index_xcol ] +zp[2]:80 [ left_canvas ] +zp[1]:82 [ left_ypos_inc_offset ] +zp[2]:83 [ rigt_render_index_xcol ] +zp[2]:85 [ rigt_canvas ] +zp[1]:87 [ rigt_ypos_inc_offset ] zp[1]:32 [ canvas_base_hi ] zp[1]:33 [ bobs_restore_base ] zp[1]:30 [ top_sprites_color ] @@ -24873,44 +24747,44 @@ zp[1]:22 [ side_sprites_color ] zp[1]:23 [ side_sprites_mc ] zp[1]:24 [ bottom_sprites_color ] zp[1]:25 [ bottom_sprites_mc ] -zp[2]:89 [ pill_count ] +zp[2]:88 [ pill_count ] zp[1]:31 [ pacman_wins ] zp[1]:35 [ pacman_lives ] zp[1]:21 [ music_play_next ] zp[1]:61 [ phase ] -zp[1]:109 [ frame ] -zp[1]:104 [ anim_frame_idx ] +zp[1]:101 [ frame ] +zp[1]:96 [ anim_frame_idx ] zp[1]:71 [ pacman_xfine ] zp[1]:72 [ pacman_yfine ] -zp[1]:52 [ pacman_direction ] +zp[1]:53 [ pacman_direction ] zp[1]:44 [ pacman_substep ] -zp[1]:103 [ ghosts_mode ] +zp[1]:95 [ ghosts_mode ] zp[1]:43 [ ghosts_mode_count ] zp[1]:59 [ ghost1_xfine ] zp[1]:60 [ ghost1_yfine ] -zp[1]:53 [ ghost1_direction ] +zp[1]:54 [ ghost1_direction ] zp[1]:45 [ ghost1_substep ] -zp[1]:105 [ ghost1_reverse ] +zp[1]:97 [ ghost1_reverse ] zp[1]:38 [ ghost1_respawn ] zp[1]:62 [ ghost2_xfine ] zp[1]:63 [ ghost2_yfine ] -zp[1]:54 [ ghost2_direction ] +zp[1]:55 [ ghost2_direction ] zp[1]:46 [ ghost2_substep ] -zp[1]:106 [ ghost2_reverse ] +zp[1]:98 [ ghost2_reverse ] zp[1]:40 [ ghost2_respawn ] zp[1]:64 [ ghost3_xfine ] zp[1]:66 [ ghost3_yfine ] zp[1]:56 [ ghost3_direction ] zp[1]:47 [ ghost3_substep ] -zp[1]:107 [ ghost3_reverse ] +zp[1]:99 [ ghost3_reverse ] zp[1]:41 [ ghost3_respawn ] zp[1]:67 [ ghost4_xfine ] zp[1]:68 [ ghost4_yfine ] zp[1]:57 [ ghost4_direction ] zp[1]:48 [ ghost4_substep ] -zp[1]:108 [ ghost4_reverse ] +zp[1]:100 [ ghost4_reverse ] zp[1]:42 [ ghost4_respawn ] -zp[1]:92 [ game_logic_substep ] +zp[1]:90 [ game_logic_substep ] zp[1]:65 [ game_playable ] reg byte a [ irq_screen_top::$1 ] reg byte a [ irq_screen_top::$2 ] @@ -24948,9 +24822,9 @@ reg byte x [ game_logic::$44 ] reg byte x [ game_logic::$45 ] reg byte a [ game_logic::$46 ] reg byte a [ game_logic::$47 ] -zp[1]:91 [ game_logic::pacman_xtile#0 ] +zp[1]:73 [ game_logic::pacman_xtile#0 choose_direction::open_directions#10 choose_direction::open_directions#2 choose_direction::open_directions#3 choose_direction::open_directions#0 choose_direction::open_directions#1 ] reg byte a [ game_logic::pacman_ytile#0 ] -zp[1]:93 [ game_logic::$210 ] +zp[1]:34 [ game_logic::$210 choose_direction::dist_min#11 choose_direction::dist_left#0 choose_direction::dist_min#17 choose_direction::dist_min#18 ] zp[2]:69 [ game_logic::ytiles#0 game_logic::$67 game_logic::$71 ] reg byte x [ game_logic::tile_id#0 ] reg byte a [ game_logic::$65 ] @@ -24968,32 +24842,28 @@ reg byte a [ game_logic::$69 ] reg byte a [ game_logic::$70 ] reg byte a [ game_logic::$72 ] reg byte x [ game_logic::$220 ] -zp[1]:94 [ game_logic::ghost4_xtile#0 ] -zp[1]:95 [ game_logic::ghost4_ytile#0 ] +zp[1]:51 [ game_logic::ghost4_xtile#0 choose_direction::return#10 choose_direction::direction#6 choose_direction::direction#8 choose_direction::direction#10 ] reg byte a [ level_tile_directions::return#3 ] reg byte a [ game_logic::open_directions#0 ] reg byte y [ game_logic::open_directions#1 ] reg byte a [ choose_direction::return#0 ] reg byte a [ game_logic::$119 ] reg byte x [ game_logic::$223 ] -zp[1]:96 [ game_logic::ghost3_xtile#0 ] -zp[1]:97 [ game_logic::ghost3_ytile#0 ] +zp[1]:91 [ game_logic::ghost3_xtile#0 ] reg byte a [ level_tile_directions::return#10 ] reg byte a [ game_logic::open_directions1#0 ] reg byte y [ game_logic::open_directions1#1 ] reg byte a [ choose_direction::return#1 ] reg byte a [ game_logic::$140 ] reg byte x [ game_logic::$226 ] -zp[1]:98 [ game_logic::ghost2_xtile#0 ] -zp[1]:99 [ game_logic::ghost2_ytile#0 ] +zp[1]:92 [ game_logic::ghost2_xtile#0 ] reg byte a [ level_tile_directions::return#11 ] reg byte a [ game_logic::open_directions2#0 ] reg byte y [ game_logic::open_directions2#1 ] reg byte a [ choose_direction::return#2 ] reg byte a [ game_logic::$161 ] reg byte x [ game_logic::$229 ] -zp[1]:100 [ game_logic::ghost1_xtile#0 ] -zp[1]:101 [ game_logic::ghost1_ytile#0 ] +zp[1]:93 [ game_logic::ghost1_xtile#0 ] reg byte a [ level_tile_directions::return#12 ] reg byte a [ game_logic::open_directions3#0 ] reg byte y [ game_logic::open_directions3#1 ] @@ -25020,8 +24890,7 @@ reg byte a [ done_run::$8 ] reg byte x [ done_run::pixels#0 ] reg byte a [ level_tile_directions::$5 ] zp[2]:49 [ level_tile_directions::ytiles#0 ] -zp[1]:76 [ choose_direction::xdiff#0 ] -zp[1]:75 [ choose_direction::ydiff#0 ] +zp[1]:75 [ choose_direction::xdiff#0 ] reg byte a [ choose_direction::$2 ] reg byte a [ choose_direction::$4 ] reg byte a [ choose_direction::$6 ] @@ -25056,7 +24925,7 @@ reg byte a [ level_tile_get::$5 ] reg byte a [ render_tiles::$0 ] zp[2]:13 [ render_tiles::tile_left_pixels#0 level_tile_get::ytiles#0 render::render_index_xcol#0 init_render_index::$11 init_render_index::$10 init_render_index::$12 init_render_index::canvas#0 ] reg byte a [ render_tiles::$2 ] -zp[2]:11 [ render_tiles::tile_right_pixels#0 splash_show::splash#4 splash_show::splash#2 splash_show::splash#1 init_render_index::render_index_xcol#2 init_render_index::render_index_xcol#7 init_render_index::render_index_xcol#1 merge_code::raster_code#4 merge_code::raster_code#2 merge_code::raster_code#0 merge_code::raster_code#1 memset::dst#2 memset::dst#4 memset::dst#1 ] +zp[2]:11 [ render_tiles::tile_right_pixels#0 splash_show::splash#4 splash_show::splash#2 splash_show::splash#1 init_render_index::render_index_xcol#2 init_render_index::render_index_xcol#7 init_render_index::render_index_xcol#1 merge_code::raster_code#4 merge_code::raster_code#2 merge_code::raster_code#0 merge_code::raster_code#1 memset::str#6 memset::dst#2 memset::dst#4 memset::dst#1 ] reg byte x [ render_tiles::$4 ] reg byte a [ render_tiles::$5 ] zp[2]:17 [ render_tiles::render_index_xcol#0 ] @@ -25064,7 +24933,7 @@ reg byte a [ render_tiles::pixels#0 ] FINAL ASSEMBLER -Score: 1949498 +Score: 1949462 // File Comments // Camelot Borderline Entry @@ -25287,9 +25156,9 @@ Score: 1949498 // Pointer to the music play routine .label musicPlay = INTRO_MUSIC+6 // Is the pacman eating sound enabled - .label pacman_ch1_enabled = $6e + .label pacman_ch1_enabled = $66 // Index into the eating sound - .label pacman_ch1_idx = $66 + .label pacman_ch1_idx = $5e // Pointer to the tile to render in the logic code .label logic_tile_ptr = $1a // The x-column of the tile to render @@ -25297,16 +25166,16 @@ Score: 1949498 // The y-fine of the tile to render .label logic_tile_yfine = $1d // The ID*4 of the left tile to render - .label logic_tile_left_idx = $4d + .label logic_tile_left_idx = $4c // The ID*4 of the right tile to render - .label logic_tile_right_idx = $4e + .label logic_tile_right_idx = $4d // Variables used by the logic-code renderer and restorer - .label left_render_index_xcol = $4f - .label left_canvas = $51 - .label left_ypos_inc_offset = $53 - .label rigt_render_index_xcol = $54 - .label rigt_canvas = $56 - .label rigt_ypos_inc_offset = $58 + .label left_render_index_xcol = $4e + .label left_canvas = $50 + .label left_ypos_inc_offset = $52 + .label rigt_render_index_xcol = $53 + .label rigt_canvas = $55 + .label rigt_ypos_inc_offset = $57 // The high-byte of the start-address of the canvas currently being rendered to .label canvas_base_hi = $20 // The offset used for bobs_restore - used to achieve double buffering @@ -25320,7 +25189,7 @@ Score: 1949498 .label bottom_sprites_color = $18 .label bottom_sprites_mc = $19 // The number of pills left - .label pill_count = $59 + .label pill_count = $58 // 1 When pacman wins .label pacman_wins = $1f // The number of pacman lives left @@ -25330,19 +25199,19 @@ Score: 1949498 // 0: intro, 1: game .label phase = $3d // The double buffer frame (0=BANK_1, 1=BANK_2) - .label frame = $6d + .label frame = $65 // The animation frame IDX (within the current direction) [0-3] - .label anim_frame_idx = $68 + .label anim_frame_idx = $60 // Pacman x fine position (0-99). .label pacman_xfine = $47 // Pacman y fine position (0-70). .label pacman_yfine = $48 // The pacman movement current direction - .label pacman_direction = $34 + .label pacman_direction = $35 // Pacman movement substep (0: on tile, 1: between tiles). .label pacman_substep = $2c // Mode determining ghost target mode. 0: chase, 1: scatter - .label ghosts_mode = $67 + .label ghosts_mode = $5f // Counts frames to change ghost mode (7 seconds scatter, 20 seconds chase ) .label ghosts_mode_count = $2b // Ghost 1 x fine position (0-99). @@ -25350,11 +25219,11 @@ Score: 1949498 // Ghost 1 y fine position (0-70). .label ghost1_yfine = $3c // Ghost 1 movement current direction - .label ghost1_direction = $35 + .label ghost1_direction = $36 // Ghost 1 movement substep (0: on tile, 1: between tiles). .label ghost1_substep = $2d // Ghost 1 movement should be reversed (0: normal, 1: reverse direction) - .label ghost1_reverse = $69 + .label ghost1_reverse = $61 // Ghost 1 respawn timer .label ghost1_respawn = $26 // Ghost 2 x fine position (0-99). @@ -25362,11 +25231,11 @@ Score: 1949498 // Ghost 2 y fine position (0-70). .label ghost2_yfine = $3f // Ghost 2 movement current direction - .label ghost2_direction = $36 + .label ghost2_direction = $37 // Ghost 2 movement substep (0: on tile, 1: between tiles). .label ghost2_substep = $2e // Ghost 2 movement should be reversed (0: normal, 1: reverse direction) - .label ghost2_reverse = $6a + .label ghost2_reverse = $62 // Ghost 2 respawn timer .label ghost2_respawn = $28 // Ghost 3 x fine position (0-99). @@ -25378,7 +25247,7 @@ Score: 1949498 // Ghost 3 movement substep (0: on tile, 1: between tiles). .label ghost3_substep = $2f // Ghost 3 movement should be reversed (0: normal, 1: reverse direction) - .label ghost3_reverse = $6b + .label ghost3_reverse = $63 // Ghost 3 respawn timer .label ghost3_respawn = $29 // Ghost 4 x fine position (0-99). @@ -25390,11 +25259,11 @@ Score: 1949498 // Ghost 4 movement substep (0: on tile, 1: between tiles). .label ghost4_substep = $30 // Ghost 4 movement should be reversed (0: normal, 1: reverse direction) - .label ghost4_reverse = $6c + .label ghost4_reverse = $64 // Ghost 4 respawn timer .label ghost4_respawn = $2a // Game logic sub-step [0-7]. Each frame a different sub-step is animated - .label game_logic_substep = $5c + .label game_logic_substep = $5a // 1 when the game is playable and characters should move around .label game_playable = $41 .segment Code @@ -25848,21 +25717,21 @@ main: { game_logic: { .label __67 = $45 .label __71 = $45 - .label __210 = $5d - .label ghost_frame_idx = $49 - .label pacman_xtile = $5b + .label __210 = $22 + .label ghost_frame_idx = $4a + .label pacman_xtile = $49 .label ytiles = $45 - .label ghost4_xtile = $5e - .label ghost4_ytile = $5f + .label ghost4_xtile = $33 + .label ghost4_ytile = $34 .label target_ytile = $27 - .label ghost3_xtile = $60 - .label ghost3_ytile = $61 + .label ghost3_xtile = $5b + .label ghost3_ytile = $34 .label target_ytile1 = $27 - .label ghost2_xtile = $62 - .label ghost2_ytile = $63 + .label ghost2_xtile = $5c + .label ghost2_ytile = $34 .label target_ytile2 = $27 - .label ghost1_xtile = $64 - .label ghost1_ytile = $65 + .label ghost1_xtile = $5d + .label ghost1_ytile = $34 .label target_ytile3 = $27 // if(game_playable==0) // [107] if(game_playable!=0) goto game_logic::@1 -- vbuz1_neq_0_then_la1 @@ -26809,9 +26678,7 @@ game_logic: { sty.z choose_direction.open_directions // [292] choose_direction::ghost_xtile#0 = game_logic::ghost4_xtile#0 -- vbuyy=vbuz1 ldy.z ghost4_xtile - // [293] choose_direction::ghost_ytile#0 = game_logic::ghost4_ytile#0 -- vbuz1=vbuz2 - lda.z ghost4_ytile - sta.z choose_direction.ghost_ytile + // [293] choose_direction::ghost_ytile#0 = game_logic::ghost4_ytile#0 // [294] choose_direction::target_xtile#0 = game_logic::target_xtile#3 // [295] choose_direction::target_ytile#0 = game_logic::target_ytile#3 // [296] call choose_direction @@ -27070,9 +26937,7 @@ game_logic: { sty.z choose_direction.open_directions // [342] choose_direction::ghost_xtile#1 = game_logic::ghost3_xtile#0 -- vbuyy=vbuz1 ldy.z ghost3_xtile - // [343] choose_direction::ghost_ytile#1 = game_logic::ghost3_ytile#0 -- vbuz1=vbuz2 - lda.z ghost3_ytile - sta.z choose_direction.ghost_ytile + // [343] choose_direction::ghost_ytile#1 = game_logic::ghost3_ytile#0 // [344] choose_direction::target_xtile#1 = game_logic::target_xtile1#3 // [345] choose_direction::target_ytile#1 = game_logic::target_ytile1#3 // [346] call choose_direction @@ -27332,9 +27197,7 @@ game_logic: { sty.z choose_direction.open_directions // [392] choose_direction::ghost_xtile#2 = game_logic::ghost2_xtile#0 -- vbuyy=vbuz1 ldy.z ghost2_xtile - // [393] choose_direction::ghost_ytile#2 = game_logic::ghost2_ytile#0 -- vbuz1=vbuz2 - lda.z ghost2_ytile - sta.z choose_direction.ghost_ytile + // [393] choose_direction::ghost_ytile#2 = game_logic::ghost2_ytile#0 // [394] choose_direction::target_xtile#2 = game_logic::target_xtile2#3 // [395] choose_direction::target_ytile#2 = game_logic::target_ytile2#3 // [396] call choose_direction @@ -27595,9 +27458,7 @@ game_logic: { sty.z choose_direction.open_directions // [442] choose_direction::ghost_xtile#3 = game_logic::ghost1_xtile#0 -- vbuyy=vbuz1 ldy.z ghost1_xtile - // [443] choose_direction::ghost_ytile#3 = game_logic::ghost1_ytile#0 -- vbuz1=vbuz2 - lda.z ghost1_ytile - sta.z choose_direction.ghost_ytile + // [443] choose_direction::ghost_ytile#3 = game_logic::ghost1_ytile#0 // [444] choose_direction::target_xtile#3 = game_logic::target_xtile3#3 // [445] choose_direction::target_ytile#3 = game_logic::target_ytile3#3 // [446] call choose_direction @@ -29096,13 +28957,13 @@ level_tile_directions: { // choose_direction // Choose the open direction that brings the ghost closest to the target // Uses Manhattan distance calculation -// __zp($33) char choose_direction(__zp($4a) char open_directions, __register(Y) char ghost_xtile, __zp($37) char ghost_ytile, __register(X) char target_xtile, __zp($27) char target_ytile) +// __zp($33) char choose_direction(__zp($49) char open_directions, __register(Y) char ghost_xtile, __zp($34) char ghost_ytile, __register(X) char target_xtile, __zp($27) char target_ytile) choose_direction: { - .label open_directions = $4a - .label ghost_ytile = $37 + .label open_directions = $49 + .label ghost_ytile = $34 .label target_ytile = $27 - .label xdiff = $4c - .label ydiff = $4b + .label xdiff = $4b + .label ydiff = $34 .label dist_left = $22 .label return = $33 .label direction = $33 @@ -29115,8 +28976,8 @@ choose_direction: { sbc.z $ff sta.z xdiff // char ydiff = ghost_ytile-target_ytile - // [750] choose_direction::ydiff#0 = choose_direction::ghost_ytile#4 - choose_direction::target_ytile#4 -- vbuz1=vbuz2_minus_vbuz3 - lda.z ghost_ytile + // [750] choose_direction::ydiff#0 = choose_direction::ghost_ytile#4 - choose_direction::target_ytile#4 -- vbuz1=vbuz1_minus_vbuz2 + lda.z ydiff sec sbc.z target_ytile sta.z ydiff @@ -29282,12 +29143,12 @@ choose_direction: { } // memset // Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. -// void * memset(__zp($6f) void *str, char c, __zp(5) unsigned int num) +// void * memset(__zp($b) void *str, char c, __zp(5) unsigned int num) memset: { .label end = 5 .label dst = $b .label num = 5 - .label str = $6f + .label str = $b // if(num>0) // [779] if(memset::num#5<=0) goto memset::@return -- vwuz1_le_0_then_la1 lda.z num @@ -29305,11 +29166,7 @@ memset: { lda.z end+1 adc.z str+1 sta.z end+1 - // [781] memset::dst#4 = (char *)memset::str#6 -- pbuz1=pbuz2 - lda.z str - sta.z dst - lda.z str+1 - sta.z dst+1 + // [781] memset::dst#4 = (char *)memset::str#6 // [782] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] // [782] phi memset::dst#2 = memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy // memset::@2 diff --git a/src/test/ref/complex/borderline_pacman/pacman.sym b/src/test/ref/complex/borderline_pacman/pacman.sym index 96a2a1568..cce0b783e 100644 --- a/src/test/ref/complex/borderline_pacman/pacman.sym +++ b/src/test/ref/complex/borderline_pacman/pacman.sym @@ -808,7 +808,7 @@ __constant char WIN_GFX_CRUNCHED[] = kickasm( uses WIN_GFX) {{ .modify B2() { }} __constant const char YELLOW = 7 void __start() -__loadstore volatile char anim_frame_idx // zp[1]:104 0.9019607843137255 +__loadstore volatile char anim_frame_idx // zp[1]:96 0.9019607843137255 __constant char bobs_bob_id[NUM_BOBS] = { 0, 0, 0, 0, 0 } __constant char bobs_restore[NUM_BOBS*SIZE_BOB_RESTORE*2] = { fill( NUM_BOBS*SIZE_BOB_RESTORE*2, 0) } __loadstore volatile char bobs_restore_base // zp[1]:33 1070.0 @@ -851,17 +851,17 @@ char choose_direction::ghost_xtile#2 // reg byte y 5.5 char choose_direction::ghost_xtile#3 // reg byte y 5.5 char choose_direction::ghost_xtile#4 // reg byte y 145.0 char choose_direction::ghost_ytile -char choose_direction::ghost_ytile#0 // ghost_ytile zp[1]:55 7.333333333333333 -char choose_direction::ghost_ytile#1 // ghost_ytile zp[1]:55 7.333333333333333 -char choose_direction::ghost_ytile#2 // ghost_ytile zp[1]:55 7.333333333333333 -char choose_direction::ghost_ytile#3 // ghost_ytile zp[1]:55 7.333333333333333 -char choose_direction::ghost_ytile#4 // ghost_ytile zp[1]:55 72.5 +char choose_direction::ghost_ytile#0 // ghost_ytile zp[1]:52 7.333333333333333 +char choose_direction::ghost_ytile#1 // ghost_ytile zp[1]:52 7.333333333333333 +char choose_direction::ghost_ytile#2 // ghost_ytile zp[1]:52 7.333333333333333 +char choose_direction::ghost_ytile#3 // ghost_ytile zp[1]:52 7.333333333333333 +char choose_direction::ghost_ytile#4 // ghost_ytile zp[1]:52 72.5 char choose_direction::open_directions -char choose_direction::open_directions#0 // open_directions zp[1]:74 4.4 -char choose_direction::open_directions#1 // open_directions zp[1]:74 4.4 -char choose_direction::open_directions#10 // open_directions zp[1]:74 19.478260869565215 -char choose_direction::open_directions#2 // open_directions zp[1]:74 4.4 -char choose_direction::open_directions#3 // open_directions zp[1]:74 4.4 +char choose_direction::open_directions#0 // open_directions zp[1]:73 4.4 +char choose_direction::open_directions#1 // open_directions zp[1]:73 4.4 +char choose_direction::open_directions#10 // open_directions zp[1]:73 19.478260869565215 +char choose_direction::open_directions#2 // open_directions zp[1]:73 4.4 +char choose_direction::open_directions#3 // open_directions zp[1]:73 4.4 char choose_direction::return char choose_direction::return#0 // reg byte a 22.0 char choose_direction::return#1 // reg byte a 22.0 @@ -881,9 +881,9 @@ char choose_direction::target_ytile#2 // target_ytile zp[1]:39 22.0 char choose_direction::target_ytile#3 // target_ytile zp[1]:39 22.0 char choose_direction::target_ytile#4 // target_ytile zp[1]:39 72.5 char choose_direction::xdiff -char choose_direction::xdiff#0 // xdiff zp[1]:76 21.041666666666664 +char choose_direction::xdiff#0 // xdiff zp[1]:75 21.041666666666664 char choose_direction::ydiff -char choose_direction::ydiff#0 // ydiff zp[1]:75 21.956521739130434 +char choose_direction::ydiff#0 // ydiff zp[1]:52 21.956521739130434 void done_run() char done_run::$8 // reg byte a 2000002.0 char *done_run::gfx @@ -904,7 +904,7 @@ char done_run::xcol#2 // xcol zp[1]:20 118182.18181818182 char done_run::ypos char done_run::ypos#1 // ypos zp[1]:16 2000002.0 char done_run::ypos#2 // ypos zp[1]:16 500000.5 -__loadstore volatile char frame // zp[1]:109 0.5 +__loadstore volatile char frame // zp[1]:101 0.5 void game_logic() char game_logic::$119 // reg byte a 22.0 char game_logic::$14 // reg byte x 22.0 @@ -921,7 +921,7 @@ char game_logic::$20 // reg byte a 22.0 char game_logic::$200 // reg byte a 22.0 char game_logic::$204 // reg byte a 22.0 char game_logic::$21 // reg byte a 22.0 -char game_logic::$210 // zp[1]:93 2.588235294117647 +char game_logic::$210 // zp[1]:34 2.588235294117647 char game_logic::$220 // reg byte x 11.0 char game_logic::$223 // reg byte x 11.0 char game_logic::$226 // reg byte x 11.0 @@ -969,31 +969,31 @@ char game_logic::do_reverse#4 // reg byte a 11.0 char game_logic::ghost1_bob_xfine char game_logic::ghost1_bob_xfine#0 // reg byte y 5.5 char game_logic::ghost1_xtile -char game_logic::ghost1_xtile#0 // ghost1_xtile zp[1]:100 2.357142857142857 +char game_logic::ghost1_xtile#0 // ghost1_xtile zp[1]:93 2.357142857142857 char game_logic::ghost1_ytile -char game_logic::ghost1_ytile#0 // ghost1_ytile zp[1]:101 2.357142857142857 +char game_logic::ghost1_ytile#0 // ghost1_ytile zp[1]:52 2.357142857142857 char game_logic::ghost2_bob_xfine char game_logic::ghost2_bob_xfine#0 // reg byte y 5.5 char game_logic::ghost2_xtile -char game_logic::ghost2_xtile#0 // ghost2_xtile zp[1]:98 2.357142857142857 +char game_logic::ghost2_xtile#0 // ghost2_xtile zp[1]:92 2.357142857142857 char game_logic::ghost2_ytile -char game_logic::ghost2_ytile#0 // ghost2_ytile zp[1]:99 2.357142857142857 +char game_logic::ghost2_ytile#0 // ghost2_ytile zp[1]:52 2.357142857142857 char game_logic::ghost3_bob_xfine char game_logic::ghost3_bob_xfine#0 // reg byte y 5.5 char game_logic::ghost3_xtile -char game_logic::ghost3_xtile#0 // ghost3_xtile zp[1]:96 2.357142857142857 +char game_logic::ghost3_xtile#0 // ghost3_xtile zp[1]:91 2.357142857142857 char game_logic::ghost3_ytile -char game_logic::ghost3_ytile#0 // ghost3_ytile zp[1]:97 2.357142857142857 +char game_logic::ghost3_ytile#0 // ghost3_ytile zp[1]:52 2.357142857142857 char game_logic::ghost4_bob_xfine char game_logic::ghost4_bob_xfine#0 // reg byte y 5.5 char game_logic::ghost4_xtile -char game_logic::ghost4_xtile#0 // ghost4_xtile zp[1]:94 2.357142857142857 +char game_logic::ghost4_xtile#0 // ghost4_xtile zp[1]:51 2.357142857142857 char game_logic::ghost4_ytile -char game_logic::ghost4_ytile#0 // ghost4_ytile zp[1]:95 2.357142857142857 +char game_logic::ghost4_ytile#0 // ghost4_ytile zp[1]:52 2.357142857142857 char game_logic::ghost_frame_idx -char game_logic::ghost_frame_idx#0 // ghost_frame_idx zp[1]:73 16.5 -char game_logic::ghost_frame_idx#1 // ghost_frame_idx zp[1]:73 22.0 -char game_logic::ghost_frame_idx#2 // ghost_frame_idx zp[1]:73 1.9999999999999998 +char game_logic::ghost_frame_idx#0 // ghost_frame_idx zp[1]:74 16.5 +char game_logic::ghost_frame_idx#1 // ghost_frame_idx zp[1]:74 22.0 +char game_logic::ghost_frame_idx#2 // ghost_frame_idx zp[1]:74 1.9999999999999998 char game_logic::joy_directions char game_logic::joy_directions#0 // reg byte a 16.5 char game_logic::new_direction @@ -1015,7 +1015,7 @@ char game_logic::open_directions4#0 // reg byte x 3.666666666666667 char game_logic::pacman_bob_xfine char game_logic::pacman_bob_xfine#0 // reg byte y 5.5 char game_logic::pacman_xtile -char game_logic::pacman_xtile#0 // pacman_xtile zp[1]:91 6.769230769230768 +char game_logic::pacman_xtile#0 // pacman_xtile zp[1]:73 6.769230769230768 char game_logic::pacman_xtile1 char game_logic::pacman_xtile1#0 // reg byte x 11.0 char game_logic::pacman_ytile @@ -1050,7 +1050,7 @@ char game_logic::tile_id char game_logic::tile_id#0 // reg byte x 16.5 char *game_logic::ytiles char *game_logic::ytiles#0 // ytiles zp[2]:69 5.5 -__loadstore volatile char game_logic_substep // zp[1]:92 2.947368421052632 +__loadstore volatile char game_logic_substep // zp[1]:90 2.947368421052632 __loadstore volatile char game_playable // zp[1]:65 69.48275862068965 void gameplay_run() unsigned int gameplay_run::$4 // zp[2]:9 2002.0 @@ -1063,32 +1063,32 @@ char gameplay_run::i1#2 // reg byte x 133334.66666666666 char gameplay_run::i2 char gameplay_run::i2#1 // reg byte x 200002.0 char gameplay_run::i2#2 // reg byte x 133334.66666666666 -__loadstore volatile char ghost1_direction // zp[1]:53 122.24096385542168 +__loadstore volatile char ghost1_direction // zp[1]:54 122.24096385542168 __loadstore volatile char ghost1_respawn // zp[1]:38 271.8378378378378 -__loadstore volatile char ghost1_reverse // zp[1]:105 0.7291666666666666 +__loadstore volatile char ghost1_reverse // zp[1]:97 0.7291666666666666 __loadstore volatile char ghost1_substep // zp[1]:45 223.51111111111112 __loadstore volatile char ghost1_xfine // zp[1]:59 84.55 __loadstore volatile char ghost1_yfine // zp[1]:60 82.13008130081302 -__loadstore volatile char ghost2_direction // zp[1]:54 110.28260869565217 +__loadstore volatile char ghost2_direction // zp[1]:55 110.28260869565217 __loadstore volatile char ghost2_respawn // zp[1]:40 264.6842105263158 -__loadstore volatile char ghost2_reverse // zp[1]:106 0.7142857142857143 +__loadstore volatile char ghost2_reverse // zp[1]:98 0.7142857142857143 __loadstore volatile char ghost2_substep // zp[1]:46 218.65217391304347 __loadstore volatile char ghost2_xfine // zp[1]:62 76.28571428571428 __loadstore volatile char ghost2_yfine // zp[1]:63 74.27941176470588 __loadstore volatile char ghost3_direction // zp[1]:56 100.45544554455446 __loadstore volatile char ghost3_respawn // zp[1]:41 257.8974358974359 -__loadstore volatile char ghost3_reverse // zp[1]:107 0.7 +__loadstore volatile char ghost3_reverse // zp[1]:99 0.7 __loadstore volatile char ghost3_substep // zp[1]:47 214.0 __loadstore volatile char ghost3_xfine // zp[1]:64 69.4931506849315 __loadstore volatile char ghost3_yfine // zp[1]:66 67.7986577181208 __loadstore volatile char ghost4_direction // zp[1]:57 92.23636363636363 __loadstore volatile char ghost4_respawn // zp[1]:42 251.45000000000002 -__loadstore volatile char ghost4_reverse // zp[1]:108 0.6862745098039216 +__loadstore volatile char ghost4_reverse // zp[1]:100 0.6862745098039216 __loadstore volatile char ghost4_substep // zp[1]:48 209.54166666666666 __loadstore volatile char ghost4_xfine // zp[1]:67 63.81132075471698 __loadstore volatile char ghost4_yfine // zp[1]:68 62.358024691358025 __constant char ghost_frames[] = { 0, 0, 0, 0, $3c, $40, $3c, $40, $34, $38, $34, $38, 0, 0, 0, 0, $2c, $30, $2c, $30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, $24, $28, $24, $28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, $5c, $60, $5c, $60, $54, $58, $54, $58, 0, 0, 0, 0, $4c, $50, $4c, $50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, $44, $48, $44, $48 } -__loadstore volatile char ghosts_mode // zp[1]:103 1.1044776119402984 +__loadstore volatile char ghosts_mode // zp[1]:95 1.1044776119402984 __loadstore volatile char ghosts_mode_count // zp[1]:43 234.93023255813955 void init_bobs_restore() __constant char *init_bobs_restore::CANVAS_HIDDEN = (char *) 59904 @@ -1193,9 +1193,9 @@ char joyfire::return#0 // reg byte a 2000002.0 char joyfire::return#1 // reg byte a 20002.0 char joyfire::return#4 // reg byte a 252500.5 void joyinit() -__loadstore char * volatile left_canvas // zp[2]:81 20.0 -__loadstore char * volatile left_render_index_xcol // zp[2]:79 20.0 -__loadstore volatile char left_ypos_inc_offset // zp[1]:83 20.0 +__loadstore char * volatile left_canvas // zp[2]:80 20.0 +__loadstore char * volatile left_render_index_xcol // zp[2]:78 20.0 +__loadstore volatile char left_ypos_inc_offset // zp[1]:82 20.0 unsigned int level_show() unsigned int level_show::count unsigned int level_show::count#1 // count zp[2]:9 2.0000002E7 @@ -1272,9 +1272,9 @@ char level_tile_get::ytile#3 // reg byte a 1.0000001E7 char level_tile_get::ytile#4 // reg byte a 8.0000002E7 char *level_tile_get::ytiles char *level_tile_get::ytiles#0 // ytiles zp[2]:13 2.00000002E8 -__loadstore volatile char logic_tile_left_idx // zp[1]:77 20.0 +__loadstore volatile char logic_tile_left_idx // zp[1]:76 20.0 __loadstore volatile char * volatile logic_tile_ptr // zp[2]:26 10250.0 -__loadstore volatile char logic_tile_right_idx // zp[1]:78 20.0 +__loadstore volatile char logic_tile_right_idx // zp[1]:77 20.0 __loadstore volatile char logic_tile_xcol // zp[1]:28 10250.0 __loadstore volatile char logic_tile_yfine // zp[1]:29 10250.0 void main() @@ -1305,7 +1305,7 @@ unsigned int memset::num unsigned int memset::num#5 // num zp[2]:5 1001.0 void *memset::return void *memset::str -void *memset::str#6 // str zp[2]:111 +void *memset::str#6 // str zp[2]:11 void merge_code(char *dest_code , char *raster_code , char *logic_code) char merge_code::$5 // reg byte y 100001.0 __constant const char merge_code::LOGIC_END = $ff @@ -1354,9 +1354,9 @@ char *merge_code::raster_code#4 // raster_code zp[2]:11 37501.5 __constant void (* const musicInit)() = (void (*)())INTRO_MUSIC __constant void (* const musicPlay)() = (void (*)())INTRO_MUSIC+6 __loadstore volatile char music_play_next // zp[1]:21 69506.875 -__loadstore volatile char pacman_ch1_enabled // zp[1]:110 0.08254716981132076 -__loadstore volatile char pacman_ch1_idx // zp[1]:102 1.9428571428571428 -__loadstore volatile char pacman_direction // zp[1]:52 132.92105263157893 +__loadstore volatile char pacman_ch1_enabled // zp[1]:102 0.08254716981132076 +__loadstore volatile char pacman_ch1_idx // zp[1]:94 1.9428571428571428 +__loadstore volatile char pacman_direction // zp[1]:53 132.92105263157893 __constant char pacman_frames[] = { 8, 8, 8, 8, 8, $18, $14, $18, 8, $20, $1c, $20, 0, 0, 0, 0, 8, 4, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, $c, $10, $c } __loadstore volatile char pacman_lives // zp[1]:35 656.4415584415585 void pacman_sound_init() @@ -1366,7 +1366,7 @@ __loadstore volatile char pacman_wins // zp[1]:31 2040.32 __loadstore volatile char pacman_xfine // zp[1]:71 47.719626168224295 __loadstore volatile char pacman_yfine // zp[1]:72 46.21818181818182 __loadstore volatile char phase // zp[1]:61 78.03703703703704 -__loadstore volatile unsigned int pill_count // zp[2]:89 14.191780821917808 +__loadstore volatile unsigned int pill_count // zp[2]:88 14.191780821917808 void render(char xcol , char ypos , char pixels) char render::$1 // reg byte x 1.0000001E7 char render::$2 // reg byte a 2.0000002E7 @@ -1443,9 +1443,9 @@ char render_tiles::ypos_inc_offset#1 // reg byte x 1.000000000001E12 char render_tiles::ypos_inc_offset#2 // reg byte x 5.714428571435714E11 char render_tiles::ytile char render_tiles::ytile#0 // ytile zp[1]:16 1.375000025E7 -__loadstore char * volatile rigt_canvas // zp[2]:86 20.0 -__loadstore char * volatile rigt_render_index_xcol // zp[2]:84 20.0 -__loadstore volatile char rigt_ypos_inc_offset // zp[1]:88 20.0 +__loadstore char * volatile rigt_canvas // zp[2]:85 20.0 +__loadstore char * volatile rigt_render_index_xcol // zp[2]:83 20.0 +__loadstore volatile char rigt_ypos_inc_offset // zp[1]:87 20.0 __loadstore volatile char side_sprites_color // zp[1]:22 11040.0 __loadstore volatile char side_sprites_mc // zp[1]:23 11040.0 void spawn_all() @@ -1493,7 +1493,7 @@ char splash_show::ypos#2 // ypos zp[1]:16 50000.5 __loadstore volatile char top_sprites_color // zp[1]:30 3403.666666666667 __loadstore volatile char top_sprites_mc // zp[1]:58 92.0 -zp[1]:73 [ game_logic::ghost_frame_idx#2 game_logic::ghost_frame_idx#0 game_logic::ghost_frame_idx#1 ] +zp[1]:74 [ game_logic::ghost_frame_idx#2 game_logic::ghost_frame_idx#0 game_logic::ghost_frame_idx#1 ] reg byte a [ game_logic::do_reverse#4 ] reg byte x [ game_logic::target_xtile#3 game_logic::target_xtile#2 ] zp[1]:39 [ game_logic::target_ytile#3 game_logic::target_ytile#2 choose_direction::target_ytile#4 choose_direction::target_ytile#2 choose_direction::target_ytile#3 choose_direction::target_ytile#0 choose_direction::target_ytile#1 game_logic::target_ytile1#3 game_logic::target_ytile1#2 game_logic::target_ytile2#3 game_logic::target_ytile2#2 game_logic::target_ytile3#3 game_logic::target_ytile3#2 ] @@ -1513,13 +1513,9 @@ reg byte a [ level_tile_directions::ytile#5 level_tile_directions::ytile#1 level reg byte a [ level_tile_directions::return#2 level_tile_directions::return#0 ] reg byte y [ choose_direction::ghost_xtile#4 choose_direction::ghost_xtile#2 choose_direction::ghost_xtile#3 choose_direction::ghost_xtile#0 choose_direction::ghost_xtile#1 ] reg byte x [ choose_direction::target_xtile#4 choose_direction::target_xtile#2 choose_direction::target_xtile#3 choose_direction::target_xtile#0 choose_direction::target_xtile#1 ] -zp[1]:55 [ choose_direction::ghost_ytile#4 choose_direction::ghost_ytile#2 choose_direction::ghost_ytile#3 choose_direction::ghost_ytile#0 choose_direction::ghost_ytile#1 ] -zp[1]:74 [ choose_direction::open_directions#10 choose_direction::open_directions#2 choose_direction::open_directions#3 choose_direction::open_directions#0 choose_direction::open_directions#1 ] +zp[1]:52 [ choose_direction::ghost_ytile#4 choose_direction::ghost_ytile#2 choose_direction::ghost_ytile#3 choose_direction::ghost_ytile#0 choose_direction::ghost_ytile#1 game_logic::ghost4_ytile#0 game_logic::ghost3_ytile#0 game_logic::ghost2_ytile#0 game_logic::ghost1_ytile#0 choose_direction::ydiff#0 ] reg byte y [ choose_direction::dist_min#6 choose_direction::dist_up#0 ] reg byte x [ choose_direction::dist_min#10 choose_direction::dist_min#13 choose_direction::dist_min#14 choose_direction::dist_down#0 ] -zp[1]:34 [ choose_direction::dist_min#11 choose_direction::dist_left#0 choose_direction::dist_min#17 choose_direction::dist_min#18 ] -zp[1]:51 [ choose_direction::return#10 choose_direction::direction#6 choose_direction::direction#8 choose_direction::direction#10 ] -zp[2]:111 [ memset::str#6 ] reg byte x [ merge_code::cycle_budget#10 merge_code::cycle_budget#2 merge_code::cycle_budget#3 merge_code::cycle_budget#13 merge_code::cycle_budget#0 merge_code::cycle_budget#1 ] reg byte x [ init_render_index::ypos_inc_offset#4 init_render_index::ypos_inc_offset#7 init_render_index::ypos_inc_offset#8 init_render_index::ypos_inc_offset#2 init_render_index::ypos_inc_offset#3 ] reg byte x [ init_bobs_restore::bob#2 init_bobs_restore::bob#1 ] @@ -1539,19 +1535,19 @@ reg byte x [ level_tile_get::xtile#4 level_tile_get::xtile#0 level_tile_get::xti reg byte a [ level_tile_get::ytile#4 level_tile_get::ytile#0 level_tile_get::ytile#1 level_tile_get::ytile#2 level_tile_get::ytile#3 ] reg byte a [ level_tile_get::return#2 level_tile_get::return#0 ] reg byte x [ render_tiles::ypos_inc_offset#2 render_tiles::ypos_inc_offset#0 render_tiles::ypos_inc_offset#1 ] -zp[1]:110 [ pacman_ch1_enabled ] -zp[1]:102 [ pacman_ch1_idx ] +zp[1]:102 [ pacman_ch1_enabled ] +zp[1]:94 [ pacman_ch1_idx ] zp[2]:26 [ logic_tile_ptr ] zp[1]:28 [ logic_tile_xcol ] zp[1]:29 [ logic_tile_yfine ] -zp[1]:77 [ logic_tile_left_idx ] -zp[1]:78 [ logic_tile_right_idx ] -zp[2]:79 [ left_render_index_xcol ] -zp[2]:81 [ left_canvas ] -zp[1]:83 [ left_ypos_inc_offset ] -zp[2]:84 [ rigt_render_index_xcol ] -zp[2]:86 [ rigt_canvas ] -zp[1]:88 [ rigt_ypos_inc_offset ] +zp[1]:76 [ logic_tile_left_idx ] +zp[1]:77 [ logic_tile_right_idx ] +zp[2]:78 [ left_render_index_xcol ] +zp[2]:80 [ left_canvas ] +zp[1]:82 [ left_ypos_inc_offset ] +zp[2]:83 [ rigt_render_index_xcol ] +zp[2]:85 [ rigt_canvas ] +zp[1]:87 [ rigt_ypos_inc_offset ] zp[1]:32 [ canvas_base_hi ] zp[1]:33 [ bobs_restore_base ] zp[1]:30 [ top_sprites_color ] @@ -1560,44 +1556,44 @@ zp[1]:22 [ side_sprites_color ] zp[1]:23 [ side_sprites_mc ] zp[1]:24 [ bottom_sprites_color ] zp[1]:25 [ bottom_sprites_mc ] -zp[2]:89 [ pill_count ] +zp[2]:88 [ pill_count ] zp[1]:31 [ pacman_wins ] zp[1]:35 [ pacman_lives ] zp[1]:21 [ music_play_next ] zp[1]:61 [ phase ] -zp[1]:109 [ frame ] -zp[1]:104 [ anim_frame_idx ] +zp[1]:101 [ frame ] +zp[1]:96 [ anim_frame_idx ] zp[1]:71 [ pacman_xfine ] zp[1]:72 [ pacman_yfine ] -zp[1]:52 [ pacman_direction ] +zp[1]:53 [ pacman_direction ] zp[1]:44 [ pacman_substep ] -zp[1]:103 [ ghosts_mode ] +zp[1]:95 [ ghosts_mode ] zp[1]:43 [ ghosts_mode_count ] zp[1]:59 [ ghost1_xfine ] zp[1]:60 [ ghost1_yfine ] -zp[1]:53 [ ghost1_direction ] +zp[1]:54 [ ghost1_direction ] zp[1]:45 [ ghost1_substep ] -zp[1]:105 [ ghost1_reverse ] +zp[1]:97 [ ghost1_reverse ] zp[1]:38 [ ghost1_respawn ] zp[1]:62 [ ghost2_xfine ] zp[1]:63 [ ghost2_yfine ] -zp[1]:54 [ ghost2_direction ] +zp[1]:55 [ ghost2_direction ] zp[1]:46 [ ghost2_substep ] -zp[1]:106 [ ghost2_reverse ] +zp[1]:98 [ ghost2_reverse ] zp[1]:40 [ ghost2_respawn ] zp[1]:64 [ ghost3_xfine ] zp[1]:66 [ ghost3_yfine ] zp[1]:56 [ ghost3_direction ] zp[1]:47 [ ghost3_substep ] -zp[1]:107 [ ghost3_reverse ] +zp[1]:99 [ ghost3_reverse ] zp[1]:41 [ ghost3_respawn ] zp[1]:67 [ ghost4_xfine ] zp[1]:68 [ ghost4_yfine ] zp[1]:57 [ ghost4_direction ] zp[1]:48 [ ghost4_substep ] -zp[1]:108 [ ghost4_reverse ] +zp[1]:100 [ ghost4_reverse ] zp[1]:42 [ ghost4_respawn ] -zp[1]:92 [ game_logic_substep ] +zp[1]:90 [ game_logic_substep ] zp[1]:65 [ game_playable ] reg byte a [ irq_screen_top::$1 ] reg byte a [ irq_screen_top::$2 ] @@ -1635,9 +1631,9 @@ reg byte x [ game_logic::$44 ] reg byte x [ game_logic::$45 ] reg byte a [ game_logic::$46 ] reg byte a [ game_logic::$47 ] -zp[1]:91 [ game_logic::pacman_xtile#0 ] +zp[1]:73 [ game_logic::pacman_xtile#0 choose_direction::open_directions#10 choose_direction::open_directions#2 choose_direction::open_directions#3 choose_direction::open_directions#0 choose_direction::open_directions#1 ] reg byte a [ game_logic::pacman_ytile#0 ] -zp[1]:93 [ game_logic::$210 ] +zp[1]:34 [ game_logic::$210 choose_direction::dist_min#11 choose_direction::dist_left#0 choose_direction::dist_min#17 choose_direction::dist_min#18 ] zp[2]:69 [ game_logic::ytiles#0 game_logic::$67 game_logic::$71 ] reg byte x [ game_logic::tile_id#0 ] reg byte a [ game_logic::$65 ] @@ -1655,32 +1651,28 @@ reg byte a [ game_logic::$69 ] reg byte a [ game_logic::$70 ] reg byte a [ game_logic::$72 ] reg byte x [ game_logic::$220 ] -zp[1]:94 [ game_logic::ghost4_xtile#0 ] -zp[1]:95 [ game_logic::ghost4_ytile#0 ] +zp[1]:51 [ game_logic::ghost4_xtile#0 choose_direction::return#10 choose_direction::direction#6 choose_direction::direction#8 choose_direction::direction#10 ] reg byte a [ level_tile_directions::return#3 ] reg byte a [ game_logic::open_directions#0 ] reg byte y [ game_logic::open_directions#1 ] reg byte a [ choose_direction::return#0 ] reg byte a [ game_logic::$119 ] reg byte x [ game_logic::$223 ] -zp[1]:96 [ game_logic::ghost3_xtile#0 ] -zp[1]:97 [ game_logic::ghost3_ytile#0 ] +zp[1]:91 [ game_logic::ghost3_xtile#0 ] reg byte a [ level_tile_directions::return#10 ] reg byte a [ game_logic::open_directions1#0 ] reg byte y [ game_logic::open_directions1#1 ] reg byte a [ choose_direction::return#1 ] reg byte a [ game_logic::$140 ] reg byte x [ game_logic::$226 ] -zp[1]:98 [ game_logic::ghost2_xtile#0 ] -zp[1]:99 [ game_logic::ghost2_ytile#0 ] +zp[1]:92 [ game_logic::ghost2_xtile#0 ] reg byte a [ level_tile_directions::return#11 ] reg byte a [ game_logic::open_directions2#0 ] reg byte y [ game_logic::open_directions2#1 ] reg byte a [ choose_direction::return#2 ] reg byte a [ game_logic::$161 ] reg byte x [ game_logic::$229 ] -zp[1]:100 [ game_logic::ghost1_xtile#0 ] -zp[1]:101 [ game_logic::ghost1_ytile#0 ] +zp[1]:93 [ game_logic::ghost1_xtile#0 ] reg byte a [ level_tile_directions::return#12 ] reg byte a [ game_logic::open_directions3#0 ] reg byte y [ game_logic::open_directions3#1 ] @@ -1707,8 +1699,7 @@ reg byte a [ done_run::$8 ] reg byte x [ done_run::pixels#0 ] reg byte a [ level_tile_directions::$5 ] zp[2]:49 [ level_tile_directions::ytiles#0 ] -zp[1]:76 [ choose_direction::xdiff#0 ] -zp[1]:75 [ choose_direction::ydiff#0 ] +zp[1]:75 [ choose_direction::xdiff#0 ] reg byte a [ choose_direction::$2 ] reg byte a [ choose_direction::$4 ] reg byte a [ choose_direction::$6 ] @@ -1743,7 +1734,7 @@ reg byte a [ level_tile_get::$5 ] reg byte a [ render_tiles::$0 ] zp[2]:13 [ render_tiles::tile_left_pixels#0 level_tile_get::ytiles#0 render::render_index_xcol#0 init_render_index::$11 init_render_index::$10 init_render_index::$12 init_render_index::canvas#0 ] reg byte a [ render_tiles::$2 ] -zp[2]:11 [ render_tiles::tile_right_pixels#0 splash_show::splash#4 splash_show::splash#2 splash_show::splash#1 init_render_index::render_index_xcol#2 init_render_index::render_index_xcol#7 init_render_index::render_index_xcol#1 merge_code::raster_code#4 merge_code::raster_code#2 merge_code::raster_code#0 merge_code::raster_code#1 memset::dst#2 memset::dst#4 memset::dst#1 ] +zp[2]:11 [ render_tiles::tile_right_pixels#0 splash_show::splash#4 splash_show::splash#2 splash_show::splash#1 init_render_index::render_index_xcol#2 init_render_index::render_index_xcol#7 init_render_index::render_index_xcol#1 merge_code::raster_code#4 merge_code::raster_code#2 merge_code::raster_code#0 merge_code::raster_code#1 memset::str#6 memset::dst#2 memset::dst#4 memset::dst#1 ] reg byte x [ render_tiles::$4 ] reg byte a [ render_tiles::$5 ] zp[2]:17 [ render_tiles::render_index_xcol#0 ] diff --git a/src/test/ref/complex/new_30_years_low_resolution/new_30_years_low_resolution.log b/src/test/ref/complex/new_30_years_low_resolution/new_30_years_low_resolution.log index 973e330c5..134e3cf2c 100644 --- a/src/test/ref/complex/new_30_years_low_resolution/new_30_years_low_resolution.log +++ b/src/test/ref/complex/new_30_years_low_resolution/new_30_years_low_resolution.log @@ -3957,17 +3957,17 @@ Eliminating unused variable memset::return#2 and assignment [51] memset::return# Eliminating unused variable memcpy::return#2 and assignment [55] memcpy::return#2 = memcpy::destination#6 Eliminating unused variable memcpy::return#3 and assignment [59] memcpy::return#3 = memcpy::destination#6 Eliminating unused variable memcpy::return#4 and assignment [61] memcpy::return#4 = memcpy::destination#6 -Eliminating unused variable plexPrepareFrame::$21 and assignment [242] plexPrepareFrame::$21 = plexPrepareFrame::$25 -Eliminating unused variable plexPrepareFrame::$22 and assignment [245] plexPrepareFrame::$22 = plexPrepareFrame::$26 + OFFSET_STRUCT_BUCKETSPRITE_PLEX_ID -Eliminating unused variable plexPrepareFrame::$23 and assignment [259] plexPrepareFrame::$23 = plexPrepareFrame::$27 -Eliminating unused variable plexPrepareFrame::$24 and assignment [262] plexPrepareFrame::$24 = plexPrepareFrame::$28 -Eliminating unused variable memcpy::return#5 and assignment [293] memcpy::return#5 = memcpy::destination#6 -Eliminating unused variable memcpy::return#6 and assignment [295] memcpy::return#6 = memcpy::destination#6 -Eliminating unused variable memset::return#3 and assignment [303] memset::return#3 = memset::str#6 -Eliminating unused variable memset::return#4 and assignment [307] memset::return#4 = memset::str#6 -Eliminating unused variable memset::return#5 and assignment [309] memset::return#5 = memset::str#6 -Eliminating unused variable memcpy::return#7 and assignment [317] memcpy::return#7 = memcpy::destination#6 -Eliminating unused variable memset::return#6 and assignment [343] memset::return#6 = memset::str#6 +Eliminating unused variable plexPrepareFrame::$21 and assignment [244] plexPrepareFrame::$21 = plexPrepareFrame::$25 +Eliminating unused variable plexPrepareFrame::$22 and assignment [247] plexPrepareFrame::$22 = plexPrepareFrame::$26 + OFFSET_STRUCT_BUCKETSPRITE_PLEX_ID +Eliminating unused variable plexPrepareFrame::$23 and assignment [261] plexPrepareFrame::$23 = plexPrepareFrame::$27 +Eliminating unused variable plexPrepareFrame::$24 and assignment [264] plexPrepareFrame::$24 = plexPrepareFrame::$28 +Eliminating unused variable memcpy::return#5 and assignment [296] memcpy::return#5 = memcpy::destination#6 +Eliminating unused variable memcpy::return#6 and assignment [298] memcpy::return#6 = memcpy::destination#6 +Eliminating unused variable memset::return#3 and assignment [306] memset::return#3 = memset::str#6 +Eliminating unused variable memset::return#4 and assignment [310] memset::return#4 = memset::str#6 +Eliminating unused variable memset::return#5 and assignment [312] memset::return#5 = memset::str#6 +Eliminating unused variable memcpy::return#7 and assignment [320] memcpy::return#7 = memcpy::destination#6 +Eliminating unused variable memset::return#6 and assignment [346] memset::return#6 = memset::str#6 Eliminating unused constant OFFSET_STRUCT_MOS6526_CIA_PORT_A Eliminating unused constant OFFSET_STRUCT_MOS6569_VICII_SPRITE0_X Eliminating unused constant OFFSET_STRUCT_BUCKETSPRITE_YPOS @@ -3992,50 +3992,50 @@ Alias candidate removed (volatile)plex_real_sprite_idx = plexBucketShow::$1 Alias candidate removed (volatile)vsp_fine_scroll = irq_swing_plex::$6 Alias candidate removed (volatile)vsp_scroll = irq_swing_plex::$16 Simple Condition part1_loop::$2 [87] if(0==sparkler_active) goto part1_loop::@10 -Simple Condition flipper_fix_colors::$0 [188] if(irq_flipper_top_line>$2e) goto flipper_fix_colors::@6 -Simple Condition plexPrepareFrame::$7 [221] if(plexPrepareFrame::s#1!=$ff) goto plexPrepareFrame::@19 -Simple Condition part2_loop::$21 [365] if(0!=p2_logo_revealing) goto part2_loop::@13 -Simple Condition part2_loop::$6 [368] if(0==p2_logo_revealing) goto part2_loop::@14 -Simple Condition part2_loop::$10 [371] if(0==p2_logo_swinging) goto part2_loop::@15 -Simple Condition part2_loop::$13 [375] if(0==p2_plex_scroller_moving) goto part2_loop::@16 -Condition not simple part1_loop::$3 [565] if(part1_loop::$3) goto part1_loop::@3 +Condition not simple part1_loop::$3 [95] if(part1_loop::$3) goto part1_loop::@3 Introduced intermediate condition variable part1_loop::$11 = demo_frame_count -Simple Condition part1_loop::$3 [565] if(part1_loop::$11>(unsigned int)9*$32-3) goto part1_loop::@3 -Simple Condition flipper_fix_colors::$1 [566] if(irq_flipper_top_line<$f6) goto flipper_fix_colors::@1 -Simple Condition plexPrepareFrame::$8 [567] if(plexPrepareFrame::nxt_y#0(unsigned int)9*$32-3) goto part1_loop::@3 +Simple Condition flipper_fix_colors::$0 [189] if(irq_flipper_top_line>$2e) goto flipper_fix_colors::@6 +Simple Condition flipper_fix_colors::$1 [204] if(irq_flipper_top_line<$f6) goto flipper_fix_colors::@1 +Simple Condition plexPrepareFrame::$7 [223] if(plexPrepareFrame::s#1!=$ff) goto plexPrepareFrame::@19 +Simple Condition plexPrepareFrame::$8 [259] if(plexPrepareFrame::nxt_y#0(unsigned int)$12*$32+$19) goto part2_loop::@8 -Simple Condition part2_loop::$22 [571] if(0!=p2_logo_reveal_done) goto part2_loop::@9 -Condition not simple part2_loop::$14 [572] if(part2_loop::$14) goto part2_loop::@10 +Simple Condition part2_loop::$7 [383] if(part2_loop::$23>(unsigned int)$12*$32+$19) goto part2_loop::@8 +Simple Condition part2_loop::$22 [385] if(0!=p2_logo_reveal_done) goto part2_loop::@9 +Condition not simple part2_loop::$14 [386] if(part2_loop::$14) goto part2_loop::@10 Introduced intermediate condition variable part2_loop::$24 = demo_frame_count -Simple Condition part2_loop::$14 [572] if(part2_loop::$24>(unsigned int)$1a*$32) goto part2_loop::@10 +Simple Condition part2_loop::$14 [386] if(part2_loop::$24>(unsigned int)$1a*$32) goto part2_loop::@10 Successful SSA optimization Pass2ConditionalJumpSimplification Negating conditional jump and destination [87] if(0!=sparkler_active) goto part1_loop::@4 -Negating conditional jump and destination [188] if(irq_flipper_top_line<=$2e) goto flipper_fix_colors::@return -Negating conditional jump and destination [221] if(plexPrepareFrame::s#1==$ff) goto plexPrepareFrame::@6 -Negating conditional jump and destination [365] if(0==p2_logo_revealing) goto part2_loop::@4 -Negating conditional jump and destination [368] if(0!=p2_logo_revealing) goto part2_loop::@5 -Negating conditional jump and destination [371] if(0!=p2_logo_swinging) goto part2_loop::@6 -Negating conditional jump and destination [375] if(0!=p2_plex_scroller_moving) goto part2_loop::@7 -Negating conditional jump and destination [565] if(part1_loop::$11<=(unsigned int)9*$32-3) goto part1_loop::@4 -Negating conditional jump and destination [569] if(part2_loop::$23<=(unsigned int)$12*$32+$19) goto part2_loop::@5 -Negating conditional jump and destination [571] if(0==p2_logo_reveal_done) goto part2_loop::@6 -Negating conditional jump and destination [572] if(part2_loop::$24<=(unsigned int)$1a*$32) goto part2_loop::@7 +Negating conditional jump and destination [95] if(part1_loop::$11<=(unsigned int)9*$32-3) goto part1_loop::@4 +Negating conditional jump and destination [189] if(irq_flipper_top_line<=$2e) goto flipper_fix_colors::@return +Negating conditional jump and destination [223] if(plexPrepareFrame::s#1==$ff) goto plexPrepareFrame::@6 +Negating conditional jump and destination [368] if(0==p2_logo_revealing) goto part2_loop::@4 +Negating conditional jump and destination [371] if(0!=p2_logo_revealing) goto part2_loop::@5 +Negating conditional jump and destination [374] if(0!=p2_logo_swinging) goto part2_loop::@6 +Negating conditional jump and destination [378] if(0!=p2_plex_scroller_moving) goto part2_loop::@7 +Negating conditional jump and destination [383] if(part2_loop::$23<=(unsigned int)$12*$32+$19) goto part2_loop::@5 +Negating conditional jump and destination [385] if(0==p2_logo_reveal_done) goto part2_loop::@6 +Negating conditional jump and destination [386] if(part2_loop::$24<=(unsigned int)$1a*$32) goto part2_loop::@7 Successful SSA optimization Pass2ConditionalJumpSequenceImprovement Constant right-side identified [76] part1_run::toSpritePtr1_$0 = part1_run::toSpritePtr1_$1 / $40 -Constant right-side identified [109] irq_part1_top::toDd001_$0 = byte1 (unsigned int)irq_part1_top::toDd001_gfx#0 -Constant right-side identified [113] irq_part1_top::toD0181_$0 = irq_part1_top::toD0181_$7 & $3fff -Constant right-side identified [116] irq_part1_top::toD0181_$3 = byte1 (unsigned int)irq_part1_top::toD0181_gfx#0 -Constant right-side identified [156] irq_flipper_bottom::toD0181_$0 = irq_flipper_bottom::toD0181_$7 & $3fff -Constant right-side identified [159] irq_flipper_bottom::toD0181_$3 = byte1 (unsigned int)irq_flipper_bottom::toD0181_gfx#0 -Constant right-side identified [315] part2_init::toSpritePtr1_$0 = part2_init::toSpritePtr1_$1 / $40 -Constant right-side identified [333] part2_run::toDd001_$0 = byte1 (unsigned int)part2_run::toDd001_gfx#0 -Constant right-side identified [337] part2_run::toD0181_$0 = part2_run::toD0181_$7 & $3fff -Constant right-side identified [340] part2_run::toD0181_$3 = byte1 (unsigned int)part2_run::toD0181_gfx#0 -Constant right-side identified [400] plex_scroller_move::toSpritePtr1_$0 = plex_scroller_move::toSpritePtr1_$1 / $40 -Constant right-side identified [519] sparkler_anim::toSpritePtr1_$0 = sparkler_anim::toSpritePtr1_$1 / $40 +Constant right-side identified [110] irq_part1_top::toDd001_$0 = byte1 (unsigned int)irq_part1_top::toDd001_gfx#0 +Constant right-side identified [114] irq_part1_top::toD0181_$0 = irq_part1_top::toD0181_$7 & $3fff +Constant right-side identified [117] irq_part1_top::toD0181_$3 = byte1 (unsigned int)irq_part1_top::toD0181_gfx#0 +Constant right-side identified [157] irq_flipper_bottom::toD0181_$0 = irq_flipper_bottom::toD0181_$7 & $3fff +Constant right-side identified [160] irq_flipper_bottom::toD0181_$3 = byte1 (unsigned int)irq_flipper_bottom::toD0181_gfx#0 +Constant right-side identified [318] part2_init::toSpritePtr1_$0 = part2_init::toSpritePtr1_$1 / $40 +Constant right-side identified [336] part2_run::toDd001_$0 = byte1 (unsigned int)part2_run::toDd001_gfx#0 +Constant right-side identified [340] part2_run::toD0181_$0 = part2_run::toD0181_$7 & $3fff +Constant right-side identified [343] part2_run::toD0181_$3 = byte1 (unsigned int)part2_run::toD0181_gfx#0 +Constant right-side identified [408] plex_scroller_move::toSpritePtr1_$0 = plex_scroller_move::toSpritePtr1_$1 / $40 +Constant right-side identified [527] sparkler_anim::toSpritePtr1_$0 = sparkler_anim::toSpritePtr1_$1 / $40 Successful SSA optimization Pass2ConstantRValueConsolidation Constant part1_run::toSpritePtr1_$0 = part1_run::toSpritePtr1_$1/$40 Constant irq_part1_top::toDd001_$0 = byte1 (unsigned int)irq_part1_top::toDd001_gfx#0 @@ -4055,7 +4055,7 @@ Constant part2_init::toSpritePtr1_return#0 = (char)part2_init::toSpritePtr1_$0 Constant plex_scroller_move::toSpritePtr1_return#0 = (char)plex_scroller_move::toSpritePtr1_$0 Constant sparkler_anim::toSpritePtr1_return#0 = (char)sparkler_anim::toSpritePtr1_$0 Successful SSA optimization Pass2ConstantIdentification -Rewriting conditional comparison [188] if(irq_flipper_top_line<=$2e) goto flipper_fix_colors::@return +Rewriting conditional comparison [189] if(irq_flipper_top_line<=$2e) goto flipper_fix_colors::@return Adding number conversion cast (unumber) 8*9*8 in Adding number conversion cast (unumber) $130 in Adding number conversion cast (unumber) $30 in @@ -4077,15 +4077,15 @@ Alias candidate removed (volatile)irq_flipper_bottom_line = irq_flipper_bottom:: Alias candidate removed (volatile)plex_real_sprite_idx = plexBucketShow::$1 Alias candidate removed (volatile)vsp_fine_scroll = irq_swing_plex::$6 Alias candidate removed (volatile)vsp_scroll = irq_swing_plex::$16 -Constant right-side identified [106] irq_part1_top::toDd001_$1 = irq_part1_top::toDd001_$0 / $40 -Constant right-side identified [109] irq_part1_top::toD0181_$1 = irq_part1_top::toD0181_$0 * 4 -Constant right-side identified [111] irq_part1_top::toD0181_$4 = irq_part1_top::toD0181_$3 / 4 -Constant right-side identified [150] irq_flipper_bottom::toD0181_$1 = irq_flipper_bottom::toD0181_$0 * 4 -Constant right-side identified [152] irq_flipper_bottom::toD0181_$4 = irq_flipper_bottom::toD0181_$3 / 4 -Constant right-side identified [303] part2_init::$17 = part2_init::toSpritePtr1_return#0 + ' ' -Constant right-side identified [319] part2_run::toDd001_$1 = part2_run::toDd001_$0 / $40 -Constant right-side identified [322] part2_run::toD0181_$1 = part2_run::toD0181_$0 * 4 -Constant right-side identified [324] part2_run::toD0181_$4 = part2_run::toD0181_$3 / 4 +Constant right-side identified [107] irq_part1_top::toDd001_$1 = irq_part1_top::toDd001_$0 / $40 +Constant right-side identified [110] irq_part1_top::toD0181_$1 = irq_part1_top::toD0181_$0 * 4 +Constant right-side identified [112] irq_part1_top::toD0181_$4 = irq_part1_top::toD0181_$3 / 4 +Constant right-side identified [151] irq_flipper_bottom::toD0181_$1 = irq_flipper_bottom::toD0181_$0 * 4 +Constant right-side identified [153] irq_flipper_bottom::toD0181_$4 = irq_flipper_bottom::toD0181_$3 / 4 +Constant right-side identified [306] part2_init::$17 = part2_init::toSpritePtr1_return#0 + ' ' +Constant right-side identified [322] part2_run::toDd001_$1 = part2_run::toDd001_$0 / $40 +Constant right-side identified [325] part2_run::toD0181_$1 = part2_run::toD0181_$0 * 4 +Constant right-side identified [327] part2_run::toD0181_$4 = part2_run::toD0181_$3 / 4 Successful SSA optimization Pass2ConstantRValueConsolidation Constant irq_part1_top::toDd001_$1 = irq_part1_top::toDd001_$0/$40 Constant irq_part1_top::toD0181_$1 = irq_part1_top::toD0181_$0*4 @@ -4103,14 +4103,14 @@ Alias candidate removed (volatile)irq_flipper_bottom_line = irq_flipper_bottom:: Alias candidate removed (volatile)plex_real_sprite_idx = plexBucketShow::$1 Alias candidate removed (volatile)vsp_fine_scroll = irq_swing_plex::$6 Alias candidate removed (volatile)vsp_scroll = irq_swing_plex::$16 -Constant right-side identified [106] irq_part1_top::toDd001_return#0 = 3 ^ irq_part1_top::toDd001_$1 -Constant right-side identified [108] irq_part1_top::toD0181_$2 = byte1 irq_part1_top::toD0181_$1 -Constant right-side identified [109] irq_part1_top::toD0181_$5 = irq_part1_top::toD0181_$4 & $f -Constant right-side identified [147] irq_flipper_bottom::toD0181_$2 = byte1 irq_flipper_bottom::toD0181_$1 -Constant right-side identified [148] irq_flipper_bottom::toD0181_$5 = irq_flipper_bottom::toD0181_$4 & $f -Constant right-side identified [313] part2_run::toDd001_return#0 = 3 ^ part2_run::toDd001_$1 -Constant right-side identified [315] part2_run::toD0181_$2 = byte1 part2_run::toD0181_$1 -Constant right-side identified [316] part2_run::toD0181_$5 = part2_run::toD0181_$4 & $f +Constant right-side identified [107] irq_part1_top::toDd001_return#0 = 3 ^ irq_part1_top::toDd001_$1 +Constant right-side identified [109] irq_part1_top::toD0181_$2 = byte1 irq_part1_top::toD0181_$1 +Constant right-side identified [110] irq_part1_top::toD0181_$5 = irq_part1_top::toD0181_$4 & $f +Constant right-side identified [148] irq_flipper_bottom::toD0181_$2 = byte1 irq_flipper_bottom::toD0181_$1 +Constant right-side identified [149] irq_flipper_bottom::toD0181_$5 = irq_flipper_bottom::toD0181_$4 & $f +Constant right-side identified [316] part2_run::toDd001_return#0 = 3 ^ part2_run::toDd001_$1 +Constant right-side identified [318] part2_run::toD0181_$2 = byte1 part2_run::toD0181_$1 +Constant right-side identified [319] part2_run::toD0181_$5 = part2_run::toD0181_$4 & $f Successful SSA optimization Pass2ConstantRValueConsolidation Constant irq_part1_top::toDd001_return#0 = 3^irq_part1_top::toDd001_$1 Constant irq_part1_top::toD0181_$2 = byte1 irq_part1_top::toD0181_$1 @@ -4126,8 +4126,8 @@ Simplifying constant evaluating to zero irq_part1_top::toD0181_$4&$f in Simplifying constant evaluating to zero 3^part2_run::toDd001_$1 in Simplifying constant evaluating to zero part2_run::toD0181_$4&$f in Successful SSA optimization PassNSimplifyConstantZero -Simplifying expression containing zero irq_part1_top::toD0181_$2 in [110] irq_part1_top::toD0181_return#0 = irq_part1_top::toD0181_$2 | irq_part1_top::toD0181_$5 -Simplifying expression containing zero part2_run::toD0181_$2 in [317] part2_run::toD0181_return#0 = part2_run::toD0181_$2 | part2_run::toD0181_$5 +Simplifying expression containing zero irq_part1_top::toD0181_$2 in [111] irq_part1_top::toD0181_return#0 = irq_part1_top::toD0181_$2 | irq_part1_top::toD0181_$5 +Simplifying expression containing zero part2_run::toD0181_$2 in [320] part2_run::toD0181_return#0 = part2_run::toD0181_$2 | part2_run::toD0181_$5 Successful SSA optimization PassNSimplifyExpressionWithZero Eliminating unused constant irq_part1_top::toDd001_$1 Eliminating unused constant irq_part1_top::toD0181_$4 @@ -4152,7 +4152,7 @@ Alias candidate removed (volatile)irq_flipper_bottom_line = irq_flipper_bottom:: Alias candidate removed (volatile)plex_real_sprite_idx = plexBucketShow::$1 Alias candidate removed (volatile)vsp_fine_scroll = irq_swing_plex::$6 Alias candidate removed (volatile)vsp_scroll = irq_swing_plex::$16 -Constant right-side identified [144] irq_flipper_bottom::toD0181_return#0 = irq_flipper_bottom::toD0181_$2 | irq_flipper_bottom::toD0181_$5 +Constant right-side identified [145] irq_flipper_bottom::toD0181_return#0 = irq_flipper_bottom::toD0181_$2 | irq_flipper_bottom::toD0181_$5 Successful SSA optimization Pass2ConstantRValueConsolidation Constant irq_part1_top::toD0181_return#0 = irq_part1_top::toD0181_$2 Constant irq_flipper_bottom::toD0181_return#0 = irq_flipper_bottom::toD0181_$2|irq_flipper_bottom::toD0181_$5 @@ -4169,24 +4169,24 @@ Inlining Noop Cast [2] memcpy::dst#0 = (char *)memcpy::destination#6 keeping mem Inlining Noop Cast [3] memcpy::$2 = (char *)memcpy::source#6 keeping memcpy::source#6 Inlining Noop Cast [13] memset::$4 = (char *)memset::str#6 keeping memset::str#6 Inlining Noop Cast [15] memset::dst#0 = (char *)memset::str#6 keeping memset::str#6 -Inlining Noop Cast [213] plexPrepareFrame::$25 = (char *)plexPrepareFrame::sprite#4 keeping plexPrepareFrame::sprite#4 -Inlining Noop Cast [215] plexPrepareFrame::$26 = (char *)plexPrepareFrame::sprite#4 keeping plexPrepareFrame::sprite#4 -Inlining Noop Cast [228] plexPrepareFrame::$27 = (char *)plexPrepareFrame::sprite#3 keeping plexPrepareFrame::sprite#3 -Inlining Noop Cast [230] plexPrepareFrame::$28 = (char *)plexPrepareFrame::sprite#3 keeping plexPrepareFrame::sprite#3 -Inlining Noop Cast [236] plexBucketShow::bucket_ptr#0 = (char *)plexBucketShow::bucket#2 keeping plexBucketShow::bucket#2 +Inlining Noop Cast [215] plexPrepareFrame::$25 = (char *)plexPrepareFrame::sprite#4 keeping plexPrepareFrame::sprite#4 +Inlining Noop Cast [217] plexPrepareFrame::$26 = (char *)plexPrepareFrame::sprite#4 keeping plexPrepareFrame::sprite#4 +Inlining Noop Cast [230] plexPrepareFrame::$27 = (char *)plexPrepareFrame::sprite#3 keeping plexPrepareFrame::sprite#3 +Inlining Noop Cast [232] plexPrepareFrame::$28 = (char *)plexPrepareFrame::sprite#3 keeping plexPrepareFrame::sprite#3 +Inlining Noop Cast [239] plexBucketShow::bucket_ptr#0 = (char *)plexBucketShow::bucket#2 keeping plexBucketShow::bucket#2 Successful SSA optimization Pass2NopCastInlining -Rewriting multiplication to use shift [149] irq_flipper_bottom::$12 = irq_flipper_idx * SIZEOF_UNSIGNED_INT -Rewriting division to use shift [168] flipper_fix_colors::$5 = flipper_fix_colors::$4 / 8 -Rewriting multiplication to use shift and addition[172] flipper_fix_colors::offset#0 = flipper_fix_colors::$12 * $28 -Rewriting multiplication to use shift [237] plexBucketShow::real_idx#0 = plex_real_sprite_idx * 2 -Rewriting division to use shift [244] plexBucketShow::real_idx#1 = plexBucketShow::real_idx#4 / 2 -Rewriting multiplication to use shift [251] plexBucketShow::real_idx#3 = plexBucketShow::real_idx#2 * 2 -Rewriting division to use shift [255] plexBucketShow::$1 = plexBucketShow::real_idx#8 / 2 -Rewriting multiplication to use shift [400] irq_swing_plex::$26 = irq_swing_plex::$27 * SIZEOF_UNSIGNED_INT -Rewriting division to use shift [407] irq_swing_plex::$7 = irq_swing_plex::scroll#0 / 8 -Rewriting multiplication to use shift [434] update_frame_plex_id_offset::$0 = update_frame_plex_id_offset::plex_frame_id#0 * SIZEOF_UNSIGNED_INT -Rewriting multiplication to use shift [442] vsp_update_screen::x_offset8 = vsp_update_screen::$5 * 8 -Rewriting division to use shift [475] sparkler_anim::$3 = sparkler_idx / 2 +Rewriting multiplication to use shift [150] irq_flipper_bottom::$12 = irq_flipper_idx * SIZEOF_UNSIGNED_INT +Rewriting division to use shift [169] flipper_fix_colors::$5 = flipper_fix_colors::$4 / 8 +Rewriting multiplication to use shift and addition[173] flipper_fix_colors::offset#0 = flipper_fix_colors::$12 * $28 +Rewriting multiplication to use shift [240] plexBucketShow::real_idx#0 = plex_real_sprite_idx * 2 +Rewriting division to use shift [247] plexBucketShow::real_idx#1 = plexBucketShow::real_idx#4 / 2 +Rewriting multiplication to use shift [254] plexBucketShow::real_idx#3 = plexBucketShow::real_idx#2 * 2 +Rewriting division to use shift [258] plexBucketShow::$1 = plexBucketShow::real_idx#8 / 2 +Rewriting multiplication to use shift [407] irq_swing_plex::$26 = irq_swing_plex::$27 * SIZEOF_UNSIGNED_INT +Rewriting division to use shift [414] irq_swing_plex::$7 = irq_swing_plex::scroll#0 / 8 +Rewriting multiplication to use shift [441] update_frame_plex_id_offset::$0 = update_frame_plex_id_offset::plex_frame_id#0 * SIZEOF_UNSIGNED_INT +Rewriting multiplication to use shift [449] vsp_update_screen::x_offset8 = vsp_update_screen::$5 * 8 +Rewriting division to use shift [482] sparkler_anim::$3 = sparkler_idx / 2 Successful SSA optimization Pass2MultiplyToShiftRewriting Inlining constant with var siblings memcpy::destination#0 Inlining constant with var siblings memcpy::source#0 @@ -4389,10 +4389,18 @@ Finalized unsigned number type (char) 8 Finalized unsigned number type (unsigned int) $400 Finalized unsigned number type (char) $e Finalized unsigned number type (char) $32 +Finalized unsigned number type (char) 9 +Finalized unsigned number type (char) $32 +Finalized unsigned number type (char) 3 Finalized unsigned number type (char) $20 Finalized unsigned number type (char) 1 Finalized unsigned number type (char) 8 Finalized unsigned number type (char) 9 +Finalized unsigned number type (char) $12 +Finalized unsigned number type (char) $32 +Finalized unsigned number type (char) $19 +Finalized unsigned number type (char) $1a +Finalized unsigned number type (char) $32 Finalized unsigned number type (char) 9 Finalized unsigned number type (char) 8 Finalized unsigned number type (char) 8 @@ -4404,14 +4412,6 @@ Finalized unsigned number type (char) 5 Finalized unsigned number type (char) $32 Finalized unsigned number type (char) $10 Finalized unsigned number type (char) $32 -Finalized unsigned number type (char) 9 -Finalized unsigned number type (char) $32 -Finalized unsigned number type (char) 3 -Finalized unsigned number type (char) $12 -Finalized unsigned number type (char) $32 -Finalized unsigned number type (char) $19 -Finalized unsigned number type (char) $1a -Finalized unsigned number type (char) $32 Successful SSA optimization PassNFinalizeNumberTypeConversions Simplifying constant integer cast $20-1 Simplifying constant integer cast 8*9