diff --git a/src/main/kc/stdlib/basic-floats.kc b/src/main/kc/stdlib/basic-floats.kc index f58c14fd1..c6e2bf378 100644 --- a/src/main/kc/stdlib/basic-floats.kc +++ b/src/main/kc/stdlib/basic-floats.kc @@ -3,23 +3,23 @@ // See http://www.pagetable.com/c64rom/c64rom_sc.html // Zeropage addresses used to hold lo/hi-bytes of addresses of float numbers in MEM -const byte* memLo = $fe; -const byte* memHi = $ff; +const char* memLo = 0xfe; +const char* memHi = 0xff; // Prepare MEM pointers for operations using MEM -void prepareMEM(byte* mem) { +inline void prepareMEM(unsigned int mem) { *memLo = mem; } // FAC = word // Set the FAC (floating point accumulator) to the integer value of a 16bit word -void setFAC(word w) { - prepareMEM((byte*)w); +void setFAC(unsigned int w) { + prepareMEM(w); // Load word register Y,A into FAC (floating point accumulator) asm { - ldy $fe - lda $ff + ldy memLo + lda memHi jsr $b391 } } @@ -27,14 +27,14 @@ void setFAC(word w) { // word = FAC // Get the value of the FAC (floating point accumulator) as an integer 16bit word // Destroys the value in the FAC in the process -word getFAC() { +unsigned int getFAC() { // Load FAC (floating point accumulator) integer part into word register Y,A asm { jsr $b1aa - sty $fe - sta $ff + sty memLo + sta memHi } - word w = { *memHi, *memLo}; + unsigned int w = { *memHi, *memLo }; return w; } @@ -57,11 +57,11 @@ void setFACtoARG() { // MEM = FAC // Stores the value of the FAC to memory // Stores 5 bytes (means it is necessary to allocate 5 bytes to avoid clobbering other data using eg. byte[] mem = {0, 0, 0, 0, 0};) -void setMEMtoFAC(byte* mem) { - prepareMEM(mem); +void setMEMtoFAC(char* mem) { + prepareMEM((unsigned int)mem); asm { - ldx $fe - ldy $ff + ldx memLo + ldy memHi jsr $bbd4 } } @@ -69,11 +69,11 @@ void setMEMtoFAC(byte* mem) { // FAC = MEM // Set the FAC to value from MEM (float saved in memory) // Reads 5 bytes -void setFACtoMEM(byte* mem) { - prepareMEM(mem); +void setFACtoMEM(char* mem) { + prepareMEM((unsigned int)mem); asm(clobbers "AY") { - lda $fe - ldy $ff + lda memLo + ldy memHi jsr $bba2 } } @@ -103,11 +103,11 @@ void setFACto2PI() { // ARG = MEM // Load the ARG from memory // Reads 5 bytes -void setARGtoMEM(byte* mem) { - prepareMEM(mem); +void setARGtoMEM(char* mem) { + prepareMEM((unsigned int)mem); asm(clobbers "AY") { - lda $fe - ldy $ff + lda memLo + ldy memHi jsr $ba8c } } @@ -115,11 +115,11 @@ void setARGtoMEM(byte* mem) { // FAC = MEM+FAC // Set FAC to MEM (float saved in memory) plus FAC (float accumulator) // Reads 5 bytes from memory -void addMEMtoFAC(byte* mem) { - prepareMEM(mem); +void addMEMtoFAC(char* mem) { + prepareMEM((unsigned int)mem); asm { - lda $fe //memLo - ldy $ff //memHi + lda memLo //memLo + ldy memHi //memHi jsr $b867 } } @@ -135,11 +135,11 @@ void addARGtoFAC() { // FAC = MEM-FAC // Set FAC to MEM (float saved in memory) minus FAC (float accumulator) // Reads 5 bytes from memory -void subFACfromMEM(byte* mem) { - prepareMEM(mem); +void subFACfromMEM(char* mem) { + prepareMEM((unsigned int)mem); asm { - lda $fe - ldy $ff + lda memLo + ldy memHi jsr $b850 } } @@ -155,11 +155,11 @@ void subFACfromARG() { // FAC = MEM/FAC // Set FAC to MEM (float saved in memory) divided by FAC (float accumulator) // Reads 5 bytes from memory -void divMEMbyFAC(byte* mem) { - prepareMEM(mem); +void divMEMbyFAC(char* mem) { + prepareMEM((unsigned int)mem); asm { - lda $fe - ldy $ff + lda memLo + ldy memHi jsr $bb0f } } @@ -167,11 +167,11 @@ void divMEMbyFAC(byte* mem) { // FAC = MEM*FAC // Set FAC to MEM (float saved in memory) multiplied by FAC (float accumulator) // Reads 5 bytes from memory -void mulFACbyMEM(byte* mem) { - prepareMEM(mem); +void mulFACbyMEM(char* mem) { + prepareMEM((unsigned int)mem); asm { - lda $fe - ldy $ff + lda memLo + ldy memHi jsr $ba28 } } @@ -179,11 +179,11 @@ void mulFACbyMEM(byte* mem) { // FAC = MEM^FAC // Set FAC to MEM (float saved in memory) raised to power of FAC (float accumulator) // Reads 5 bytes from memory -void pwrMEMbyFAC(byte* mem) { - prepareMEM(mem); +void pwrMEMbyFAC(char* mem) { + prepareMEM((unsigned int)mem); asm { - lda $fe - ldy $ff + lda memLo + ldy memHi jsr $bf78 } } diff --git a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java index 37be96ced..72ccb66cd 100644 --- a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java +++ b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java @@ -36,6 +36,11 @@ public class TestPrograms { public TestPrograms() { } + @Test + public void testInlineAsmParam() throws IOException, URISyntaxException { + compileAndCompare("inline-asm-param"); + } + @Test public void testAtariTempest() throws IOException, URISyntaxException { compileAndCompare("complex/ataritempest/ataritempest"); diff --git a/src/test/kc/inline-asm-param.kc b/src/test/kc/inline-asm-param.kc index 65bb72785..f468d6412 100644 --- a/src/test/kc/inline-asm-param.kc +++ b/src/test/kc/inline-asm-param.kc @@ -2,10 +2,12 @@ byte* SCREEN = $0400; void main() { byte a = 'a'; - asm { - lda {a} - sta {SCREEN} - }; - a++; + for( byte i:0..3) { + asm { + lda #'a' + sta SCREEN + } + a++; + } } diff --git a/src/test/ref/examples/sinsprites/sinus-sprites.asm b/src/test/ref/examples/sinsprites/sinus-sprites.asm index e10a44328..f0ef0747e 100644 --- a/src/test/ref/examples/sinsprites/sinus-sprites.asm +++ b/src/test/ref/examples/sinsprites/sinus-sprites.asm @@ -169,7 +169,7 @@ init: { rts } clear_screen: { - .label sc = $13 + .label sc = $f lda #SCREEN @@ -197,15 +197,15 @@ clear_screen: { // - length is the length of the sine table // - min is the minimum value of the generated sinus // - max is the maximum value of the generated sinus -// gen_sintab(byte* zeropage($13) sintab, byte zeropage(8) length, byte zeropage(6) min, byte register(X) max) +// gen_sintab(byte* zeropage($f) sintab, byte zeropage(8) length, byte zeropage(6) min, byte register(X) max) gen_sintab: { // amplitude/2 .label f_2pi = $e2e5 - .label _24 = $f + .label _24 = $13 .label i = 9 .label min = 6 .label length = 8 - .label sintab = $13 + .label sintab = $f txa sta.z setFAC.w lda #0 @@ -229,9 +229,9 @@ gen_sintab: { sta.z setMEMtoFAC.mem+1 jsr setMEMtoFAC lda #<2 - sta.z setFAC.w + sta.z setFAC.prepareMEM1_mem lda #>2 - sta.z setFAC.w+1 + sta.z setFAC.prepareMEM1_mem+1 jsr setFAC lda #gen_sintab.f_min - sta.z prepareMEM.mem+1 - jsr prepareMEM - lda.z $fe - ldy.z $ff - jsr $b867 - rts -} -// Prepare MEM pointers for operations using MEM -// prepareMEM(byte* zeropage($f) mem) -prepareMEM: { - .label mem = $f - lda.z mem sta memLo - lda.z mem+1 + lda #>gen_sintab.f_min sta memHi + lda memLo + ldy memHi + jsr $b867 rts } // FAC = MEM*FAC // Set FAC to MEM (float saved in memory) multiplied by FAC (float accumulator) // Reads 5 bytes from memory -// mulFACbyMEM(byte* zeropage($f) mem) +// mulFACbyMEM(byte* zeropage($13) mem) mulFACbyMEM: { - .label mem = $f - jsr prepareMEM - lda.z $fe - ldy.z $ff + .label mem = $13 + lda.z mem + sta memLo + lda.z mem+1 + sta memHi + lda memLo + ldy memHi jsr $ba28 rts } @@ -391,36 +383,45 @@ sinFAC: { // FAC = MEM/FAC // Set FAC to MEM (float saved in memory) divided by FAC (float accumulator) // Reads 5 bytes from memory -// divMEMbyFAC(byte* zeropage($f) mem) +// divMEMbyFAC(byte* zeropage($13) mem) divMEMbyFAC: { - .label mem = $f - jsr prepareMEM - lda.z $fe - ldy.z $ff + .label mem = $13 + lda.z mem + sta memLo + lda.z mem+1 + sta memHi + lda memLo + ldy memHi jsr $bb0f rts } // FAC = word // Set the FAC (floating point accumulator) to the integer value of a 16bit word -// setFAC(word zeropage($f) w) +// setFAC(word zeropage($13) w) setFAC: { - .label w = $f - jsr prepareMEM + .label prepareMEM1_mem = $13 + .label w = $13 + lda.z prepareMEM1_mem + sta memLo + lda.z prepareMEM1_mem+1 + sta memHi // Load word register Y,A into FAC (floating point accumulator) - ldy.z $fe - lda.z $ff + ldy memLo jsr $b391 rts } // MEM = FAC // Stores the value of the FAC to memory // Stores 5 bytes (means it is necessary to allocate 5 bytes to avoid clobbering other data using eg. byte[] mem = {0, 0, 0, 0, 0};) -// setMEMtoFAC(byte* zeropage($f) mem) +// setMEMtoFAC(byte* zeropage($13) mem) setMEMtoFAC: { - .label mem = $f - jsr prepareMEM - ldx.z $fe - ldy.z $ff + .label mem = $13 + lda.z mem + sta memLo + lda.z mem+1 + sta memHi + ldx memLo + tay jsr $bbd4 rts } diff --git a/src/test/ref/examples/sinsprites/sinus-sprites.cfg b/src/test/ref/examples/sinsprites/sinus-sprites.cfg index a6d7f3b69..9cdb6fde5 100644 --- a/src/test/ref/examples/sinsprites/sinus-sprites.cfg +++ b/src/test/ref/examples/sinsprites/sinus-sprites.cfg @@ -257,7 +257,7 @@ progress_inc::@return: scope:[progress_inc] from progress_inc::@1 [127] return to:@return getFAC: scope:[getFAC] from gen_sintab::@20 - asm { jsr$b1aa sty$fe sta$ff } + asm { jsr$b1aa stymemLo stamemHi } [129] (word) getFAC::return#0 ← *((const byte*) memHi#0) w= *((const byte*) memLo#0) to:getFAC::@return getFAC::@return: scope:[getFAC] from getFAC @@ -265,200 +265,209 @@ getFAC::@return: scope:[getFAC] from getFAC to:@return addMEMtoFAC: scope:[addMEMtoFAC] from gen_sintab::@11 gen_sintab::@19 [131] phi() - [132] call prepareMEM + to:addMEMtoFAC::prepareMEM1 +addMEMtoFAC::prepareMEM1: scope:[addMEMtoFAC] from addMEMtoFAC + [132] *((const byte*) memLo#0) ← <(word)(const byte[]) gen_sintab::f_min#0 + [133] *((const byte*) memHi#0) ← >(word)(const byte[]) gen_sintab::f_min#0 to:addMEMtoFAC::@1 -addMEMtoFAC::@1: scope:[addMEMtoFAC] from addMEMtoFAC - asm { lda$fe ldy$ff jsr$b867 } +addMEMtoFAC::@1: scope:[addMEMtoFAC] from addMEMtoFAC::prepareMEM1 + asm { ldamemLo ldymemHi jsr$b867 } to:addMEMtoFAC::@return addMEMtoFAC::@return: scope:[addMEMtoFAC] from addMEMtoFAC::@1 - [134] return - to:@return -prepareMEM: scope:[prepareMEM] from addMEMtoFAC divMEMbyFAC mulFACbyMEM setFAC setMEMtoFAC - [135] (byte*) prepareMEM::mem#5 ← phi( addMEMtoFAC/(const byte[]) gen_sintab::f_min#0 divMEMbyFAC/(byte*) prepareMEM::mem#3 mulFACbyMEM/(byte*) prepareMEM::mem#4 setFAC/(byte*) prepareMEM::mem#0 setMEMtoFAC/(byte*) prepareMEM::mem#1 ) - [136] (byte~) prepareMEM::$0 ← < (byte*) prepareMEM::mem#5 - [137] *((const byte*) memLo#0) ← (byte~) prepareMEM::$0 - [138] (byte~) prepareMEM::$1 ← > (byte*) prepareMEM::mem#5 - [139] *((const byte*) memHi#0) ← (byte~) prepareMEM::$1 - to:prepareMEM::@return -prepareMEM::@return: scope:[prepareMEM] from prepareMEM - [140] return + [135] return to:@return mulFACbyMEM: scope:[mulFACbyMEM] from gen_sintab::@13 gen_sintab::@18 - [141] (byte*) mulFACbyMEM::mem#2 ← phi( gen_sintab::@13/(const byte*) gen_sintab::f_2pi#0 gen_sintab::@18/(const byte[]) gen_sintab::f_amp#0 ) - [142] (byte*) prepareMEM::mem#4 ← (byte*) mulFACbyMEM::mem#2 - [143] call prepareMEM + [136] (byte*) mulFACbyMEM::mem#2 ← phi( gen_sintab::@13/(const byte*) gen_sintab::f_2pi#0 gen_sintab::@18/(const byte[]) gen_sintab::f_amp#0 ) + to:mulFACbyMEM::prepareMEM1 +mulFACbyMEM::prepareMEM1: scope:[mulFACbyMEM] from mulFACbyMEM + [137] (byte~) mulFACbyMEM::prepareMEM1_$0#0 ← < (word)(byte*) mulFACbyMEM::mem#2 + [138] *((const byte*) memLo#0) ← (byte~) mulFACbyMEM::prepareMEM1_$0#0 + [139] (byte~) mulFACbyMEM::prepareMEM1_$1#0 ← > (word)(byte*) mulFACbyMEM::mem#2 + [140] *((const byte*) memHi#0) ← (byte~) mulFACbyMEM::prepareMEM1_$1#0 to:mulFACbyMEM::@1 -mulFACbyMEM::@1: scope:[mulFACbyMEM] from mulFACbyMEM - asm { lda$fe ldy$ff jsr$ba28 } +mulFACbyMEM::@1: scope:[mulFACbyMEM] from mulFACbyMEM::prepareMEM1 + asm { ldamemLo ldymemHi jsr$ba28 } to:mulFACbyMEM::@return mulFACbyMEM::@return: scope:[mulFACbyMEM] from mulFACbyMEM::@1 - [145] return + [142] return to:@return sinFAC: scope:[sinFAC] from gen_sintab::@17 asm { jsr$e26b } to:sinFAC::@return sinFAC::@return: scope:[sinFAC] from sinFAC - [147] return + [144] return to:@return divMEMbyFAC: scope:[divMEMbyFAC] from gen_sintab::@16 gen_sintab::@9 - [148] (byte*) divMEMbyFAC::mem#2 ← phi( gen_sintab::@9/(const byte[]) gen_sintab::f_amp#0 gen_sintab::@16/(const byte[]) gen_sintab::f_i#0 ) - [149] (byte*) prepareMEM::mem#3 ← (byte*) divMEMbyFAC::mem#2 - [150] call prepareMEM + [145] (byte*) divMEMbyFAC::mem#2 ← phi( gen_sintab::@9/(const byte[]) gen_sintab::f_amp#0 gen_sintab::@16/(const byte[]) gen_sintab::f_i#0 ) + to:divMEMbyFAC::prepareMEM1 +divMEMbyFAC::prepareMEM1: scope:[divMEMbyFAC] from divMEMbyFAC + [146] (byte~) divMEMbyFAC::prepareMEM1_$0#0 ← < (word)(byte*) divMEMbyFAC::mem#2 + [147] *((const byte*) memLo#0) ← (byte~) divMEMbyFAC::prepareMEM1_$0#0 + [148] (byte~) divMEMbyFAC::prepareMEM1_$1#0 ← > (word)(byte*) divMEMbyFAC::mem#2 + [149] *((const byte*) memHi#0) ← (byte~) divMEMbyFAC::prepareMEM1_$1#0 to:divMEMbyFAC::@1 -divMEMbyFAC::@1: scope:[divMEMbyFAC] from divMEMbyFAC - asm { lda$fe ldy$ff jsr$bb0f } +divMEMbyFAC::@1: scope:[divMEMbyFAC] from divMEMbyFAC::prepareMEM1 + asm { ldamemLo ldymemHi jsr$bb0f } to:divMEMbyFAC::@return divMEMbyFAC::@return: scope:[divMEMbyFAC] from divMEMbyFAC::@1 - [152] return + [151] return to:@return setFAC: scope:[setFAC] from gen_sintab gen_sintab::@15 gen_sintab::@2 gen_sintab::@4 gen_sintab::@8 - [153] (word) setFAC::w#5 ← phi( gen_sintab/(word) setFAC::w#0 gen_sintab::@8/(byte) 2 gen_sintab::@2/(word) setFAC::w#3 gen_sintab::@15/(word) setFAC::w#4 gen_sintab::@4/(word) setFAC::w#1 ) - [154] (byte*) prepareMEM::mem#0 ← (byte*)(word) setFAC::w#5 - [155] call prepareMEM + [152] (word) setFAC::prepareMEM1_mem#0 ← phi( gen_sintab/(word) setFAC::w#0 gen_sintab::@8/(byte) 2 gen_sintab::@2/(word) setFAC::w#3 gen_sintab::@15/(word) setFAC::w#4 gen_sintab::@4/(word) setFAC::w#1 ) + to:setFAC::prepareMEM1 +setFAC::prepareMEM1: scope:[setFAC] from setFAC + [153] (byte~) setFAC::prepareMEM1_$0#0 ← < (word) setFAC::prepareMEM1_mem#0 + [154] *((const byte*) memLo#0) ← (byte~) setFAC::prepareMEM1_$0#0 + [155] (byte~) setFAC::prepareMEM1_$1#0 ← > (word) setFAC::prepareMEM1_mem#0 + [156] *((const byte*) memHi#0) ← (byte~) setFAC::prepareMEM1_$1#0 to:setFAC::@1 -setFAC::@1: scope:[setFAC] from setFAC - asm { ldy$fe lda$ff jsr$b391 } +setFAC::@1: scope:[setFAC] from setFAC::prepareMEM1 + asm { ldymemLo ldamemHi jsr$b391 } to:setFAC::@return setFAC::@return: scope:[setFAC] from setFAC::@1 - [157] return + [158] return to:@return setMEMtoFAC: scope:[setMEMtoFAC] from gen_sintab::@10 gen_sintab::@12 gen_sintab::@14 gen_sintab::@5 gen_sintab::@7 - [158] (byte*) setMEMtoFAC::mem#5 ← phi( gen_sintab::@7/(const byte[]) gen_sintab::f_amp#0 gen_sintab::@10/(const byte[]) gen_sintab::f_amp#0 gen_sintab::@12/(const byte[]) gen_sintab::f_min#0 gen_sintab::@14/(const byte[]) gen_sintab::f_i#0 gen_sintab::@5/(const byte[]) gen_sintab::f_min#0 ) - [159] (byte*) prepareMEM::mem#1 ← (byte*) setMEMtoFAC::mem#5 - [160] call prepareMEM + [159] (byte*) setMEMtoFAC::mem#5 ← phi( gen_sintab::@7/(const byte[]) gen_sintab::f_amp#0 gen_sintab::@10/(const byte[]) gen_sintab::f_amp#0 gen_sintab::@12/(const byte[]) gen_sintab::f_min#0 gen_sintab::@14/(const byte[]) gen_sintab::f_i#0 gen_sintab::@5/(const byte[]) gen_sintab::f_min#0 ) + to:setMEMtoFAC::prepareMEM1 +setMEMtoFAC::prepareMEM1: scope:[setMEMtoFAC] from setMEMtoFAC + [160] (byte~) setMEMtoFAC::prepareMEM1_$0#0 ← < (word)(byte*) setMEMtoFAC::mem#5 + [161] *((const byte*) memLo#0) ← (byte~) setMEMtoFAC::prepareMEM1_$0#0 + [162] (byte~) setMEMtoFAC::prepareMEM1_$1#0 ← > (word)(byte*) setMEMtoFAC::mem#5 + [163] *((const byte*) memHi#0) ← (byte~) setMEMtoFAC::prepareMEM1_$1#0 to:setMEMtoFAC::@1 -setMEMtoFAC::@1: scope:[setMEMtoFAC] from setMEMtoFAC - asm { ldx$fe ldy$ff jsr$bbd4 } +setMEMtoFAC::@1: scope:[setMEMtoFAC] from setMEMtoFAC::prepareMEM1 + asm { ldxmemLo ldymemHi jsr$bbd4 } to:setMEMtoFAC::@return setMEMtoFAC::@return: scope:[setMEMtoFAC] from setMEMtoFAC::@1 - [162] return + [165] return to:@return subFACfromARG: scope:[subFACfromARG] from gen_sintab::@6 asm { jsr$b853 } to:subFACfromARG::@return subFACfromARG::@return: scope:[subFACfromARG] from subFACfromARG - [164] return + [167] return to:@return setARGtoFAC: scope:[setARGtoFAC] from gen_sintab::@3 asm { jsr$bc0f } to:setARGtoFAC::@return setARGtoFAC::@return: scope:[setARGtoFAC] from setARGtoFAC - [166] return + [169] return to:@return progress_init: scope:[progress_init] from init::@4 init::@6 - [167] (byte*) progress_init::line#2 ← phi( init::@4/(const byte*) SCREEN#0 init::@6/(const byte*) SCREEN#0+(byte) $28 ) + [170] (byte*) progress_init::line#2 ← phi( init::@4/(const byte*) SCREEN#0 init::@6/(const byte*) SCREEN#0+(byte) $28 ) to:progress_init::@return progress_init::@return: scope:[progress_init] from progress_init - [168] return + [171] return to:@return gen_sprites: scope:[gen_sprites] from init::@3 - [169] phi() + [172] phi() to:gen_sprites::@1 gen_sprites::@1: scope:[gen_sprites] from gen_sprites gen_sprites::@2 - [170] (byte*) gen_sprites::spr#2 ← phi( gen_sprites/(const byte*) sprites#0 gen_sprites::@2/(byte*) gen_sprites::spr#1 ) - [170] (byte) gen_sprites::i#2 ← phi( gen_sprites/(byte) 0 gen_sprites::@2/(byte) gen_sprites::i#1 ) - [171] (byte) gen_chargen_sprite::ch#0 ← *((const byte[]) gen_sprites::cml#0 + (byte) gen_sprites::i#2) - [172] (byte*) gen_chargen_sprite::sprite#0 ← (byte*) gen_sprites::spr#2 - [173] call gen_chargen_sprite + [173] (byte*) gen_sprites::spr#2 ← phi( gen_sprites/(const byte*) sprites#0 gen_sprites::@2/(byte*) gen_sprites::spr#1 ) + [173] (byte) gen_sprites::i#2 ← phi( gen_sprites/(byte) 0 gen_sprites::@2/(byte) gen_sprites::i#1 ) + [174] (byte) gen_chargen_sprite::ch#0 ← *((const byte[]) gen_sprites::cml#0 + (byte) gen_sprites::i#2) + [175] (byte*) gen_chargen_sprite::sprite#0 ← (byte*) gen_sprites::spr#2 + [176] call gen_chargen_sprite to:gen_sprites::@2 gen_sprites::@2: scope:[gen_sprites] from gen_sprites::@1 - [174] (byte*) gen_sprites::spr#1 ← (byte*) gen_sprites::spr#2 + (byte) $40 - [175] (byte) gen_sprites::i#1 ← ++ (byte) gen_sprites::i#2 - [176] if((byte) gen_sprites::i#1!=(byte) 7) goto gen_sprites::@1 + [177] (byte*) gen_sprites::spr#1 ← (byte*) gen_sprites::spr#2 + (byte) $40 + [178] (byte) gen_sprites::i#1 ← ++ (byte) gen_sprites::i#2 + [179] if((byte) gen_sprites::i#1!=(byte) 7) goto gen_sprites::@1 to:gen_sprites::@return gen_sprites::@return: scope:[gen_sprites] from gen_sprites::@2 - [177] return + [180] return to:@return gen_chargen_sprite: scope:[gen_chargen_sprite] from gen_sprites::@1 - [178] (word~) gen_chargen_sprite::$0 ← (word)(byte) gen_chargen_sprite::ch#0 - [179] (word~) gen_chargen_sprite::$1 ← (word~) gen_chargen_sprite::$0 << (byte) 3 - [180] (byte*) gen_chargen_sprite::chargen#0 ← (const byte*) CHARGEN#0 + (word~) gen_chargen_sprite::$1 + [181] (word~) gen_chargen_sprite::$0 ← (word)(byte) gen_chargen_sprite::ch#0 + [182] (word~) gen_chargen_sprite::$1 ← (word~) gen_chargen_sprite::$0 << (byte) 3 + [183] (byte*) gen_chargen_sprite::chargen#0 ← (const byte*) CHARGEN#0 + (word~) gen_chargen_sprite::$1 asm { sei } - [182] *((const byte*) PROCPORT#0) ← (byte) $32 + [185] *((const byte*) PROCPORT#0) ← (byte) $32 to:gen_chargen_sprite::@1 gen_chargen_sprite::@1: scope:[gen_chargen_sprite] from gen_chargen_sprite gen_chargen_sprite::@8 - [183] (byte*) gen_chargen_sprite::sprite#11 ← phi( gen_chargen_sprite/(byte*) gen_chargen_sprite::sprite#0 gen_chargen_sprite::@8/(byte*) gen_chargen_sprite::sprite#2 ) - [183] (byte) gen_chargen_sprite::y#2 ← phi( gen_chargen_sprite/(byte) 0 gen_chargen_sprite::@8/(byte) gen_chargen_sprite::y#1 ) - [184] (byte) gen_chargen_sprite::bits#0 ← *((byte*) gen_chargen_sprite::chargen#0 + (byte) gen_chargen_sprite::y#2) + [186] (byte*) gen_chargen_sprite::sprite#11 ← phi( gen_chargen_sprite/(byte*) gen_chargen_sprite::sprite#0 gen_chargen_sprite::@8/(byte*) gen_chargen_sprite::sprite#2 ) + [186] (byte) gen_chargen_sprite::y#2 ← phi( gen_chargen_sprite/(byte) 0 gen_chargen_sprite::@8/(byte) gen_chargen_sprite::y#1 ) + [187] (byte) gen_chargen_sprite::bits#0 ← *((byte*) gen_chargen_sprite::chargen#0 + (byte) gen_chargen_sprite::y#2) to:gen_chargen_sprite::@2 gen_chargen_sprite::@2: scope:[gen_chargen_sprite] from gen_chargen_sprite::@1 gen_chargen_sprite::@7 - [185] (byte) gen_chargen_sprite::x#6 ← phi( gen_chargen_sprite::@1/(byte) 0 gen_chargen_sprite::@7/(byte) gen_chargen_sprite::x#1 ) - [185] (byte*) gen_chargen_sprite::sprite#10 ← phi( gen_chargen_sprite::@1/(byte*) gen_chargen_sprite::sprite#11 gen_chargen_sprite::@7/(byte*) gen_chargen_sprite::sprite#4 ) - [185] (byte) gen_chargen_sprite::s_gen_cnt#4 ← phi( gen_chargen_sprite::@1/(byte) 0 gen_chargen_sprite::@7/(byte) gen_chargen_sprite::s_gen_cnt#5 ) - [185] (byte) gen_chargen_sprite::s_gen#5 ← phi( gen_chargen_sprite::@1/(byte) 0 gen_chargen_sprite::@7/(byte) gen_chargen_sprite::s_gen#6 ) - [185] (byte) gen_chargen_sprite::bits#2 ← phi( gen_chargen_sprite::@1/(byte) gen_chargen_sprite::bits#0 gen_chargen_sprite::@7/(byte) gen_chargen_sprite::bits#1 ) - [186] (byte~) gen_chargen_sprite::$3 ← (byte) gen_chargen_sprite::bits#2 & (byte) $80 - [187] if((byte~) gen_chargen_sprite::$3==(byte) 0) goto gen_chargen_sprite::@3 + [188] (byte) gen_chargen_sprite::x#6 ← phi( gen_chargen_sprite::@1/(byte) 0 gen_chargen_sprite::@7/(byte) gen_chargen_sprite::x#1 ) + [188] (byte*) gen_chargen_sprite::sprite#10 ← phi( gen_chargen_sprite::@1/(byte*) gen_chargen_sprite::sprite#11 gen_chargen_sprite::@7/(byte*) gen_chargen_sprite::sprite#4 ) + [188] (byte) gen_chargen_sprite::s_gen_cnt#4 ← phi( gen_chargen_sprite::@1/(byte) 0 gen_chargen_sprite::@7/(byte) gen_chargen_sprite::s_gen_cnt#5 ) + [188] (byte) gen_chargen_sprite::s_gen#5 ← phi( gen_chargen_sprite::@1/(byte) 0 gen_chargen_sprite::@7/(byte) gen_chargen_sprite::s_gen#6 ) + [188] (byte) gen_chargen_sprite::bits#2 ← phi( gen_chargen_sprite::@1/(byte) gen_chargen_sprite::bits#0 gen_chargen_sprite::@7/(byte) gen_chargen_sprite::bits#1 ) + [189] (byte~) gen_chargen_sprite::$3 ← (byte) gen_chargen_sprite::bits#2 & (byte) $80 + [190] if((byte~) gen_chargen_sprite::$3==(byte) 0) goto gen_chargen_sprite::@3 to:gen_chargen_sprite::@10 gen_chargen_sprite::@10: scope:[gen_chargen_sprite] from gen_chargen_sprite::@2 - [188] phi() + [191] phi() to:gen_chargen_sprite::@3 gen_chargen_sprite::@3: scope:[gen_chargen_sprite] from gen_chargen_sprite::@10 gen_chargen_sprite::@2 - [189] (byte) gen_chargen_sprite::c#3 ← phi( gen_chargen_sprite::@10/(byte) 1 gen_chargen_sprite::@2/(byte) 0 ) + [192] (byte) gen_chargen_sprite::c#3 ← phi( gen_chargen_sprite::@10/(byte) 1 gen_chargen_sprite::@2/(byte) 0 ) to:gen_chargen_sprite::@4 gen_chargen_sprite::@4: scope:[gen_chargen_sprite] from gen_chargen_sprite::@3 gen_chargen_sprite::@5 - [190] (byte*) gen_chargen_sprite::sprite#3 ← phi( gen_chargen_sprite::@3/(byte*) gen_chargen_sprite::sprite#10 gen_chargen_sprite::@5/(byte*) gen_chargen_sprite::sprite#4 ) - [190] (byte) gen_chargen_sprite::b#2 ← phi( gen_chargen_sprite::@3/(byte) 0 gen_chargen_sprite::@5/(byte) gen_chargen_sprite::b#1 ) - [190] (byte) gen_chargen_sprite::s_gen_cnt#3 ← phi( gen_chargen_sprite::@3/(byte) gen_chargen_sprite::s_gen_cnt#4 gen_chargen_sprite::@5/(byte) gen_chargen_sprite::s_gen_cnt#5 ) - [190] (byte) gen_chargen_sprite::s_gen#3 ← phi( gen_chargen_sprite::@3/(byte) gen_chargen_sprite::s_gen#5 gen_chargen_sprite::@5/(byte) gen_chargen_sprite::s_gen#6 ) - [191] (byte~) gen_chargen_sprite::$6 ← (byte) gen_chargen_sprite::s_gen#3 << (byte) 1 - [192] (byte) gen_chargen_sprite::s_gen#1 ← (byte~) gen_chargen_sprite::$6 | (byte) gen_chargen_sprite::c#3 - [193] (byte) gen_chargen_sprite::s_gen_cnt#1 ← ++ (byte) gen_chargen_sprite::s_gen_cnt#3 - [194] if((byte) gen_chargen_sprite::s_gen_cnt#1!=(byte) 8) goto gen_chargen_sprite::@5 + [193] (byte*) gen_chargen_sprite::sprite#3 ← phi( gen_chargen_sprite::@3/(byte*) gen_chargen_sprite::sprite#10 gen_chargen_sprite::@5/(byte*) gen_chargen_sprite::sprite#4 ) + [193] (byte) gen_chargen_sprite::b#2 ← phi( gen_chargen_sprite::@3/(byte) 0 gen_chargen_sprite::@5/(byte) gen_chargen_sprite::b#1 ) + [193] (byte) gen_chargen_sprite::s_gen_cnt#3 ← phi( gen_chargen_sprite::@3/(byte) gen_chargen_sprite::s_gen_cnt#4 gen_chargen_sprite::@5/(byte) gen_chargen_sprite::s_gen_cnt#5 ) + [193] (byte) gen_chargen_sprite::s_gen#3 ← phi( gen_chargen_sprite::@3/(byte) gen_chargen_sprite::s_gen#5 gen_chargen_sprite::@5/(byte) gen_chargen_sprite::s_gen#6 ) + [194] (byte~) gen_chargen_sprite::$6 ← (byte) gen_chargen_sprite::s_gen#3 << (byte) 1 + [195] (byte) gen_chargen_sprite::s_gen#1 ← (byte~) gen_chargen_sprite::$6 | (byte) gen_chargen_sprite::c#3 + [196] (byte) gen_chargen_sprite::s_gen_cnt#1 ← ++ (byte) gen_chargen_sprite::s_gen_cnt#3 + [197] if((byte) gen_chargen_sprite::s_gen_cnt#1!=(byte) 8) goto gen_chargen_sprite::@5 to:gen_chargen_sprite::@6 gen_chargen_sprite::@6: scope:[gen_chargen_sprite] from gen_chargen_sprite::@4 - [195] *((byte*) gen_chargen_sprite::sprite#3) ← (byte) gen_chargen_sprite::s_gen#1 - [196] *((byte*) gen_chargen_sprite::sprite#3 + (byte) 3) ← (byte) gen_chargen_sprite::s_gen#1 - [197] *((byte*) gen_chargen_sprite::sprite#3 + (byte) 6) ← (byte) gen_chargen_sprite::s_gen#1 - [198] (byte*) gen_chargen_sprite::sprite#1 ← ++ (byte*) gen_chargen_sprite::sprite#3 + [198] *((byte*) gen_chargen_sprite::sprite#3) ← (byte) gen_chargen_sprite::s_gen#1 + [199] *((byte*) gen_chargen_sprite::sprite#3 + (byte) 3) ← (byte) gen_chargen_sprite::s_gen#1 + [200] *((byte*) gen_chargen_sprite::sprite#3 + (byte) 6) ← (byte) gen_chargen_sprite::s_gen#1 + [201] (byte*) gen_chargen_sprite::sprite#1 ← ++ (byte*) gen_chargen_sprite::sprite#3 to:gen_chargen_sprite::@5 gen_chargen_sprite::@5: scope:[gen_chargen_sprite] from gen_chargen_sprite::@4 gen_chargen_sprite::@6 - [199] (byte*) gen_chargen_sprite::sprite#4 ← phi( gen_chargen_sprite::@4/(byte*) gen_chargen_sprite::sprite#3 gen_chargen_sprite::@6/(byte*) gen_chargen_sprite::sprite#1 ) - [199] (byte) gen_chargen_sprite::s_gen_cnt#5 ← phi( gen_chargen_sprite::@4/(byte) gen_chargen_sprite::s_gen_cnt#1 gen_chargen_sprite::@6/(byte) 0 ) - [199] (byte) gen_chargen_sprite::s_gen#6 ← phi( gen_chargen_sprite::@4/(byte) gen_chargen_sprite::s_gen#1 gen_chargen_sprite::@6/(byte) 0 ) - [200] (byte) gen_chargen_sprite::b#1 ← ++ (byte) gen_chargen_sprite::b#2 - [201] if((byte) gen_chargen_sprite::b#1!=(byte) 3) goto gen_chargen_sprite::@4 + [202] (byte*) gen_chargen_sprite::sprite#4 ← phi( gen_chargen_sprite::@4/(byte*) gen_chargen_sprite::sprite#3 gen_chargen_sprite::@6/(byte*) gen_chargen_sprite::sprite#1 ) + [202] (byte) gen_chargen_sprite::s_gen_cnt#5 ← phi( gen_chargen_sprite::@4/(byte) gen_chargen_sprite::s_gen_cnt#1 gen_chargen_sprite::@6/(byte) 0 ) + [202] (byte) gen_chargen_sprite::s_gen#6 ← phi( gen_chargen_sprite::@4/(byte) gen_chargen_sprite::s_gen#1 gen_chargen_sprite::@6/(byte) 0 ) + [203] (byte) gen_chargen_sprite::b#1 ← ++ (byte) gen_chargen_sprite::b#2 + [204] if((byte) gen_chargen_sprite::b#1!=(byte) 3) goto gen_chargen_sprite::@4 to:gen_chargen_sprite::@7 gen_chargen_sprite::@7: scope:[gen_chargen_sprite] from gen_chargen_sprite::@5 - [202] (byte) gen_chargen_sprite::bits#1 ← (byte) gen_chargen_sprite::bits#2 << (byte) 1 - [203] (byte) gen_chargen_sprite::x#1 ← ++ (byte) gen_chargen_sprite::x#6 - [204] if((byte) gen_chargen_sprite::x#1!=(byte) 8) goto gen_chargen_sprite::@2 + [205] (byte) gen_chargen_sprite::bits#1 ← (byte) gen_chargen_sprite::bits#2 << (byte) 1 + [206] (byte) gen_chargen_sprite::x#1 ← ++ (byte) gen_chargen_sprite::x#6 + [207] if((byte) gen_chargen_sprite::x#1!=(byte) 8) goto gen_chargen_sprite::@2 to:gen_chargen_sprite::@8 gen_chargen_sprite::@8: scope:[gen_chargen_sprite] from gen_chargen_sprite::@7 - [205] (byte*) gen_chargen_sprite::sprite#2 ← (byte*) gen_chargen_sprite::sprite#4 + (byte) 6 - [206] (byte) gen_chargen_sprite::y#1 ← ++ (byte) gen_chargen_sprite::y#2 - [207] if((byte) gen_chargen_sprite::y#1!=(byte) 8) goto gen_chargen_sprite::@1 + [208] (byte*) gen_chargen_sprite::sprite#2 ← (byte*) gen_chargen_sprite::sprite#4 + (byte) 6 + [209] (byte) gen_chargen_sprite::y#1 ← ++ (byte) gen_chargen_sprite::y#2 + [210] if((byte) gen_chargen_sprite::y#1!=(byte) 8) goto gen_chargen_sprite::@1 to:gen_chargen_sprite::@9 gen_chargen_sprite::@9: scope:[gen_chargen_sprite] from gen_chargen_sprite::@8 - [208] *((const byte*) PROCPORT#0) ← (byte) $37 + [211] *((const byte*) PROCPORT#0) ← (byte) $37 asm { cli } to:gen_chargen_sprite::@return gen_chargen_sprite::@return: scope:[gen_chargen_sprite] from gen_chargen_sprite::@9 - [210] return + [213] return to:@return place_sprites: scope:[place_sprites] from init::@2 - [211] *((const byte*) SPRITES_ENABLE#0) ← (byte) $7f - [212] *((const byte*) SPRITES_EXPAND_X#0) ← (byte) $7f - [213] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte) $7f + [214] *((const byte*) SPRITES_ENABLE#0) ← (byte) $7f + [215] *((const byte*) SPRITES_EXPAND_X#0) ← (byte) $7f + [216] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte) $7f to:place_sprites::@1 place_sprites::@1: scope:[place_sprites] from place_sprites place_sprites::@1 - [214] (byte) place_sprites::col#2 ← phi( place_sprites/(byte) 5 place_sprites::@1/(byte) place_sprites::col#1 ) - [214] (byte) place_sprites::j2#3 ← phi( place_sprites/(byte) 0 place_sprites::@1/(byte) place_sprites::j2#2 ) - [214] (byte) place_sprites::spr_x#2 ← phi( place_sprites/(byte) $3c place_sprites::@1/(byte) place_sprites::spr_x#1 ) - [214] (byte) place_sprites::j#2 ← phi( place_sprites/(byte) 0 place_sprites::@1/(byte) place_sprites::j#1 ) - [214] (byte) place_sprites::spr_id#2 ← phi( place_sprites/(byte)(word)(const byte*) sprites#0/(byte) $40 place_sprites::@1/(byte) place_sprites::spr_id#1 ) - [215] *((const byte*) place_sprites::sprites_ptr#0 + (byte) place_sprites::j#2) ← (byte) place_sprites::spr_id#2 - [216] (byte) place_sprites::spr_id#1 ← ++ (byte) place_sprites::spr_id#2 - [217] *((const byte*) SPRITES_XPOS#0 + (byte) place_sprites::j2#3) ← (byte) place_sprites::spr_x#2 - [218] *((const byte*) SPRITES_YPOS#0 + (byte) place_sprites::j2#3) ← (byte) $50 - [219] *((const byte*) SPRITES_COLS#0 + (byte) place_sprites::j#2) ← (byte) place_sprites::col#2 - [220] (byte) place_sprites::spr_x#1 ← (byte) place_sprites::spr_x#2 + (byte) $20 - [221] (byte) place_sprites::col#1 ← (byte) place_sprites::col#2 ^ (byte)(number) 7^(number) 5 - [222] (byte) place_sprites::j2#1 ← ++ (byte) place_sprites::j2#3 - [223] (byte) place_sprites::j2#2 ← ++ (byte) place_sprites::j2#1 - [224] (byte) place_sprites::j#1 ← ++ (byte) place_sprites::j#2 - [225] if((byte) place_sprites::j#1!=(byte) 7) goto place_sprites::@1 + [217] (byte) place_sprites::col#2 ← phi( place_sprites/(byte) 5 place_sprites::@1/(byte) place_sprites::col#1 ) + [217] (byte) place_sprites::j2#3 ← phi( place_sprites/(byte) 0 place_sprites::@1/(byte) place_sprites::j2#2 ) + [217] (byte) place_sprites::spr_x#2 ← phi( place_sprites/(byte) $3c place_sprites::@1/(byte) place_sprites::spr_x#1 ) + [217] (byte) place_sprites::j#2 ← phi( place_sprites/(byte) 0 place_sprites::@1/(byte) place_sprites::j#1 ) + [217] (byte) place_sprites::spr_id#2 ← phi( place_sprites/(byte)(word)(const byte*) sprites#0/(byte) $40 place_sprites::@1/(byte) place_sprites::spr_id#1 ) + [218] *((const byte*) place_sprites::sprites_ptr#0 + (byte) place_sprites::j#2) ← (byte) place_sprites::spr_id#2 + [219] (byte) place_sprites::spr_id#1 ← ++ (byte) place_sprites::spr_id#2 + [220] *((const byte*) SPRITES_XPOS#0 + (byte) place_sprites::j2#3) ← (byte) place_sprites::spr_x#2 + [221] *((const byte*) SPRITES_YPOS#0 + (byte) place_sprites::j2#3) ← (byte) $50 + [222] *((const byte*) SPRITES_COLS#0 + (byte) place_sprites::j#2) ← (byte) place_sprites::col#2 + [223] (byte) place_sprites::spr_x#1 ← (byte) place_sprites::spr_x#2 + (byte) $20 + [224] (byte) place_sprites::col#1 ← (byte) place_sprites::col#2 ^ (byte)(number) 7^(number) 5 + [225] (byte) place_sprites::j2#1 ← ++ (byte) place_sprites::j2#3 + [226] (byte) place_sprites::j2#2 ← ++ (byte) place_sprites::j2#1 + [227] (byte) place_sprites::j#1 ← ++ (byte) place_sprites::j#2 + [228] if((byte) place_sprites::j#1!=(byte) 7) goto place_sprites::@1 to:place_sprites::@return place_sprites::@return: scope:[place_sprites] from place_sprites::@1 - [226] return + [229] return to:@return diff --git a/src/test/ref/examples/sinsprites/sinus-sprites.log b/src/test/ref/examples/sinsprites/sinus-sprites.log index c6c63548b..b68f0772d 100644 --- a/src/test/ref/examples/sinsprites/sinus-sprites.log +++ b/src/test/ref/examples/sinsprites/sinus-sprites.log @@ -12,25 +12,39 @@ Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_line Identified constant variable (byte*) HEAP_TOP Identified constant variable (byte*) gen_sintab::f_2pi Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx +Inlined call call prepareMEM (word) setFAC::w +Inlined call call prepareMEM (word~) setMEMtoFAC::$0 +Inlined call call prepareMEM (word~) setFACtoMEM::$0 +Inlined call call prepareMEM (word~) setARGtoMEM::$0 +Inlined call call prepareMEM (word~) addMEMtoFAC::$0 +Inlined call call prepareMEM (word~) subFACfromMEM::$0 +Inlined call call prepareMEM (word~) divMEMbyFAC::$0 +Inlined call call prepareMEM (word~) mulFACbyMEM::$0 +Inlined call call prepareMEM (word~) pwrMEMbyFAC::$0 Culled Empty Block (label) @1 Culled Empty Block (label) @2 Culled Empty Block (label) @3 Culled Empty Block (label) @5 +Culled Empty Block (label) setFAC::prepareMEM1_@return Culled Empty Block (label) @6 Culled Empty Block (label) getFAC::@1 Culled Empty Block (label) @7 Culled Empty Block (label) @8 Culled Empty Block (label) @9 +Culled Empty Block (label) setMEMtoFAC::prepareMEM1_@return Culled Empty Block (label) @10 Culled Empty Block (label) @11 Culled Empty Block (label) @12 Culled Empty Block (label) @13 Culled Empty Block (label) @14 +Culled Empty Block (label) addMEMtoFAC::prepareMEM1_@return Culled Empty Block (label) @15 Culled Empty Block (label) @16 Culled Empty Block (label) @17 Culled Empty Block (label) @18 +Culled Empty Block (label) divMEMbyFAC::prepareMEM1_@return Culled Empty Block (label) @19 +Culled Empty Block (label) mulFACbyMEM::prepareMEM1_@return Culled Empty Block (label) @20 Culled Empty Block (label) @21 Culled Empty Block (label) @22 @@ -117,30 +131,25 @@ CONTROL FLOW GRAPH SSA (byte*) memLo#0 ← ((byte*)) (number) $fe (byte*) memHi#0 ← ((byte*)) (number) $ff to:@67 -prepareMEM: scope:[prepareMEM] from addMEMtoFAC divMEMbyFAC mulFACbyMEM setFAC setMEMtoFAC - (byte*) prepareMEM::mem#5 ← phi( addMEMtoFAC/(byte*) prepareMEM::mem#2 divMEMbyFAC/(byte*) prepareMEM::mem#3 mulFACbyMEM/(byte*) prepareMEM::mem#4 setFAC/(byte*) prepareMEM::mem#0 setMEMtoFAC/(byte*) prepareMEM::mem#1 ) - (byte~) prepareMEM::$0 ← < (byte*) prepareMEM::mem#5 - *((byte*) memLo#0) ← (byte~) prepareMEM::$0 - (byte~) prepareMEM::$1 ← > (byte*) prepareMEM::mem#5 - *((byte*) memHi#0) ← (byte~) prepareMEM::$1 - to:prepareMEM::@return -prepareMEM::@return: scope:[prepareMEM] from prepareMEM - return - to:@return setFAC: scope:[setFAC] from gen_sintab gen_sintab::@12 gen_sintab::@2 gen_sintab::@20 gen_sintab::@8 (word) setFAC::w#5 ← phi( gen_sintab/(word) setFAC::w#0 gen_sintab::@12/(word) setFAC::w#2 gen_sintab::@2/(word) setFAC::w#3 gen_sintab::@20/(word) setFAC::w#4 gen_sintab::@8/(word) setFAC::w#1 ) - (byte*~) setFAC::$0 ← ((byte*)) (word) setFAC::w#5 - (byte*) prepareMEM::mem#0 ← (byte*~) setFAC::$0 - call prepareMEM + (word) setFAC::prepareMEM1_mem#0 ← (word) setFAC::w#5 + to:setFAC::prepareMEM1 +setFAC::prepareMEM1: scope:[setFAC] from setFAC + (word) setFAC::prepareMEM1_mem#1 ← phi( setFAC/(word) setFAC::prepareMEM1_mem#0 ) + (byte~) setFAC::prepareMEM1_$0#0 ← < (word) setFAC::prepareMEM1_mem#1 + *((byte*) memLo#0) ← (byte~) setFAC::prepareMEM1_$0#0 + (byte~) setFAC::prepareMEM1_$1#0 ← > (word) setFAC::prepareMEM1_mem#1 + *((byte*) memHi#0) ← (byte~) setFAC::prepareMEM1_$1#0 to:setFAC::@1 -setFAC::@1: scope:[setFAC] from setFAC - asm { ldy$fe lda$ff jsr$b391 } +setFAC::@1: scope:[setFAC] from setFAC::prepareMEM1 + asm { ldymemLo ldamemHi jsr$b391 } to:setFAC::@return setFAC::@return: scope:[setFAC] from setFAC::@1 return to:@return getFAC: scope:[getFAC] from gen_sintab::@25 - asm { jsr$b1aa sty$fe sta$ff } + asm { jsr$b1aa stymemLo stamemHi } (word) getFAC::w#0 ← ((word)) { *((byte*) memHi#0), *((byte*) memLo#0) } (word) getFAC::return#0 ← (word) getFAC::w#0 to:getFAC::@return @@ -157,22 +166,36 @@ setARGtoFAC::@return: scope:[setARGtoFAC] from setARGtoFAC to:@return setMEMtoFAC: scope:[setMEMtoFAC] from gen_sintab::@11 gen_sintab::@14 gen_sintab::@16 gen_sintab::@19 gen_sintab::@9 (byte*) setMEMtoFAC::mem#5 ← phi( gen_sintab::@11/(byte*) setMEMtoFAC::mem#1 gen_sintab::@14/(byte*) setMEMtoFAC::mem#2 gen_sintab::@16/(byte*) setMEMtoFAC::mem#3 gen_sintab::@19/(byte*) setMEMtoFAC::mem#4 gen_sintab::@9/(byte*) setMEMtoFAC::mem#0 ) - (byte*) prepareMEM::mem#1 ← (byte*) setMEMtoFAC::mem#5 - call prepareMEM + (word~) setMEMtoFAC::$0 ← ((word)) (byte*) setMEMtoFAC::mem#5 + (word) setMEMtoFAC::prepareMEM1_mem#0 ← (word~) setMEMtoFAC::$0 + to:setMEMtoFAC::prepareMEM1 +setMEMtoFAC::prepareMEM1: scope:[setMEMtoFAC] from setMEMtoFAC + (word) setMEMtoFAC::prepareMEM1_mem#1 ← phi( setMEMtoFAC/(word) setMEMtoFAC::prepareMEM1_mem#0 ) + (byte~) setMEMtoFAC::prepareMEM1_$0#0 ← < (word) setMEMtoFAC::prepareMEM1_mem#1 + *((byte*) memLo#0) ← (byte~) setMEMtoFAC::prepareMEM1_$0#0 + (byte~) setMEMtoFAC::prepareMEM1_$1#0 ← > (word) setMEMtoFAC::prepareMEM1_mem#1 + *((byte*) memHi#0) ← (byte~) setMEMtoFAC::prepareMEM1_$1#0 to:setMEMtoFAC::@1 -setMEMtoFAC::@1: scope:[setMEMtoFAC] from setMEMtoFAC - asm { ldx$fe ldy$ff jsr$bbd4 } +setMEMtoFAC::@1: scope:[setMEMtoFAC] from setMEMtoFAC::prepareMEM1 + asm { ldxmemLo ldymemHi jsr$bbd4 } to:setMEMtoFAC::@return setMEMtoFAC::@return: scope:[setMEMtoFAC] from setMEMtoFAC::@1 return to:@return addMEMtoFAC: scope:[addMEMtoFAC] from gen_sintab::@15 gen_sintab::@24 (byte*) addMEMtoFAC::mem#2 ← phi( gen_sintab::@15/(byte*) addMEMtoFAC::mem#0 gen_sintab::@24/(byte*) addMEMtoFAC::mem#1 ) - (byte*) prepareMEM::mem#2 ← (byte*) addMEMtoFAC::mem#2 - call prepareMEM + (word~) addMEMtoFAC::$0 ← ((word)) (byte*) addMEMtoFAC::mem#2 + (word) addMEMtoFAC::prepareMEM1_mem#0 ← (word~) addMEMtoFAC::$0 + to:addMEMtoFAC::prepareMEM1 +addMEMtoFAC::prepareMEM1: scope:[addMEMtoFAC] from addMEMtoFAC + (word) addMEMtoFAC::prepareMEM1_mem#1 ← phi( addMEMtoFAC/(word) addMEMtoFAC::prepareMEM1_mem#0 ) + (byte~) addMEMtoFAC::prepareMEM1_$0#0 ← < (word) addMEMtoFAC::prepareMEM1_mem#1 + *((byte*) memLo#0) ← (byte~) addMEMtoFAC::prepareMEM1_$0#0 + (byte~) addMEMtoFAC::prepareMEM1_$1#0 ← > (word) addMEMtoFAC::prepareMEM1_mem#1 + *((byte*) memHi#0) ← (byte~) addMEMtoFAC::prepareMEM1_$1#0 to:addMEMtoFAC::@1 -addMEMtoFAC::@1: scope:[addMEMtoFAC] from addMEMtoFAC - asm { lda$fe ldy$ff jsr$b867 } +addMEMtoFAC::@1: scope:[addMEMtoFAC] from addMEMtoFAC::prepareMEM1 + asm { ldamemLo ldymemHi jsr$b867 } to:addMEMtoFAC::@return addMEMtoFAC::@return: scope:[addMEMtoFAC] from addMEMtoFAC::@1 return @@ -185,22 +208,36 @@ subFACfromARG::@return: scope:[subFACfromARG] from subFACfromARG to:@return divMEMbyFAC: scope:[divMEMbyFAC] from gen_sintab::@13 gen_sintab::@21 (byte*) divMEMbyFAC::mem#2 ← phi( gen_sintab::@13/(byte*) divMEMbyFAC::mem#0 gen_sintab::@21/(byte*) divMEMbyFAC::mem#1 ) - (byte*) prepareMEM::mem#3 ← (byte*) divMEMbyFAC::mem#2 - call prepareMEM + (word~) divMEMbyFAC::$0 ← ((word)) (byte*) divMEMbyFAC::mem#2 + (word) divMEMbyFAC::prepareMEM1_mem#0 ← (word~) divMEMbyFAC::$0 + to:divMEMbyFAC::prepareMEM1 +divMEMbyFAC::prepareMEM1: scope:[divMEMbyFAC] from divMEMbyFAC + (word) divMEMbyFAC::prepareMEM1_mem#1 ← phi( divMEMbyFAC/(word) divMEMbyFAC::prepareMEM1_mem#0 ) + (byte~) divMEMbyFAC::prepareMEM1_$0#0 ← < (word) divMEMbyFAC::prepareMEM1_mem#1 + *((byte*) memLo#0) ← (byte~) divMEMbyFAC::prepareMEM1_$0#0 + (byte~) divMEMbyFAC::prepareMEM1_$1#0 ← > (word) divMEMbyFAC::prepareMEM1_mem#1 + *((byte*) memHi#0) ← (byte~) divMEMbyFAC::prepareMEM1_$1#0 to:divMEMbyFAC::@1 -divMEMbyFAC::@1: scope:[divMEMbyFAC] from divMEMbyFAC - asm { lda$fe ldy$ff jsr$bb0f } +divMEMbyFAC::@1: scope:[divMEMbyFAC] from divMEMbyFAC::prepareMEM1 + asm { ldamemLo ldymemHi jsr$bb0f } to:divMEMbyFAC::@return divMEMbyFAC::@return: scope:[divMEMbyFAC] from divMEMbyFAC::@1 return to:@return mulFACbyMEM: scope:[mulFACbyMEM] from gen_sintab::@18 gen_sintab::@23 (byte*) mulFACbyMEM::mem#2 ← phi( gen_sintab::@18/(byte*) mulFACbyMEM::mem#0 gen_sintab::@23/(byte*) mulFACbyMEM::mem#1 ) - (byte*) prepareMEM::mem#4 ← (byte*) mulFACbyMEM::mem#2 - call prepareMEM + (word~) mulFACbyMEM::$0 ← ((word)) (byte*) mulFACbyMEM::mem#2 + (word) mulFACbyMEM::prepareMEM1_mem#0 ← (word~) mulFACbyMEM::$0 + to:mulFACbyMEM::prepareMEM1 +mulFACbyMEM::prepareMEM1: scope:[mulFACbyMEM] from mulFACbyMEM + (word) mulFACbyMEM::prepareMEM1_mem#1 ← phi( mulFACbyMEM/(word) mulFACbyMEM::prepareMEM1_mem#0 ) + (byte~) mulFACbyMEM::prepareMEM1_$0#0 ← < (word) mulFACbyMEM::prepareMEM1_mem#1 + *((byte*) memLo#0) ← (byte~) mulFACbyMEM::prepareMEM1_$0#0 + (byte~) mulFACbyMEM::prepareMEM1_$1#0 ← > (word) mulFACbyMEM::prepareMEM1_mem#1 + *((byte*) memHi#0) ← (byte~) mulFACbyMEM::prepareMEM1_$1#0 to:mulFACbyMEM::@1 -mulFACbyMEM::@1: scope:[mulFACbyMEM] from mulFACbyMEM - asm { lda$fe ldy$ff jsr$ba28 } +mulFACbyMEM::@1: scope:[mulFACbyMEM] from mulFACbyMEM::prepareMEM1 + asm { ldamemLo ldymemHi jsr$ba28 } to:mulFACbyMEM::@return mulFACbyMEM::@return: scope:[mulFACbyMEM] from mulFACbyMEM::@1 return @@ -1023,12 +1060,21 @@ SYMBOL TABLE SSA (byte*) SPRITES_YPOS (byte*) SPRITES_YPOS#0 (void()) addMEMtoFAC((byte*) addMEMtoFAC::mem) +(word~) addMEMtoFAC::$0 (label) addMEMtoFAC::@1 (label) addMEMtoFAC::@return (byte*) addMEMtoFAC::mem (byte*) addMEMtoFAC::mem#0 (byte*) addMEMtoFAC::mem#1 (byte*) addMEMtoFAC::mem#2 +(label) addMEMtoFAC::prepareMEM1 +(byte~) addMEMtoFAC::prepareMEM1_$0 +(byte~) addMEMtoFAC::prepareMEM1_$0#0 +(byte~) addMEMtoFAC::prepareMEM1_$1 +(byte~) addMEMtoFAC::prepareMEM1_$1#0 +(word) addMEMtoFAC::prepareMEM1_mem +(word) addMEMtoFAC::prepareMEM1_mem#0 +(word) addMEMtoFAC::prepareMEM1_mem#1 (void()) anim() (bool~) anim::$0 (bool~) anim::$1 @@ -1118,12 +1164,21 @@ SYMBOL TABLE SSA (byte*) clear_screen::sc#2 (byte*) clear_screen::sc#3 (void()) divMEMbyFAC((byte*) divMEMbyFAC::mem) +(word~) divMEMbyFAC::$0 (label) divMEMbyFAC::@1 (label) divMEMbyFAC::@return (byte*) divMEMbyFAC::mem (byte*) divMEMbyFAC::mem#0 (byte*) divMEMbyFAC::mem#1 (byte*) divMEMbyFAC::mem#2 +(label) divMEMbyFAC::prepareMEM1 +(byte~) divMEMbyFAC::prepareMEM1_$0 +(byte~) divMEMbyFAC::prepareMEM1_$0#0 +(byte~) divMEMbyFAC::prepareMEM1_$1 +(byte~) divMEMbyFAC::prepareMEM1_$1#0 +(word) divMEMbyFAC::prepareMEM1_mem +(word) divMEMbyFAC::prepareMEM1_mem#0 +(word) divMEMbyFAC::prepareMEM1_mem#1 (void()) gen_chargen_sprite((byte) gen_chargen_sprite::ch , (byte*) gen_chargen_sprite::sprite) (word~) gen_chargen_sprite::$0 (number~) gen_chargen_sprite::$1 @@ -1424,12 +1479,21 @@ SYMBOL TABLE SSA (byte*) memLo (byte*) memLo#0 (void()) mulFACbyMEM((byte*) mulFACbyMEM::mem) +(word~) mulFACbyMEM::$0 (label) mulFACbyMEM::@1 (label) mulFACbyMEM::@return (byte*) mulFACbyMEM::mem (byte*) mulFACbyMEM::mem#0 (byte*) mulFACbyMEM::mem#1 (byte*) mulFACbyMEM::mem#2 +(label) mulFACbyMEM::prepareMEM1 +(byte~) mulFACbyMEM::prepareMEM1_$0 +(byte~) mulFACbyMEM::prepareMEM1_$0#0 +(byte~) mulFACbyMEM::prepareMEM1_$1 +(byte~) mulFACbyMEM::prepareMEM1_$1#0 +(word) mulFACbyMEM::prepareMEM1_mem +(word) mulFACbyMEM::prepareMEM1_mem#0 +(word) mulFACbyMEM::prepareMEM1_mem#1 (void()) place_sprites() (byte*~) place_sprites::$0 (word~) place_sprites::$1 @@ -1464,17 +1528,6 @@ SYMBOL TABLE SSA (byte*) place_sprites::sprites_ptr (byte*) place_sprites::sprites_ptr#0 (byte*) place_sprites::sprites_ptr#1 -(void()) prepareMEM((byte*) prepareMEM::mem) -(byte~) prepareMEM::$0 -(byte~) prepareMEM::$1 -(label) prepareMEM::@return -(byte*) prepareMEM::mem -(byte*) prepareMEM::mem#0 -(byte*) prepareMEM::mem#1 -(byte*) prepareMEM::mem#2 -(byte*) prepareMEM::mem#3 -(byte*) prepareMEM::mem#4 -(byte*) prepareMEM::mem#5 (byte*) progress_cursor (byte*) progress_cursor#0 (byte*) progress_cursor#1 @@ -1626,9 +1679,16 @@ SYMBOL TABLE SSA (void()) setARGtoFAC() (label) setARGtoFAC::@return (void()) setFAC((word) setFAC::w) -(byte*~) setFAC::$0 (label) setFAC::@1 (label) setFAC::@return +(label) setFAC::prepareMEM1 +(byte~) setFAC::prepareMEM1_$0 +(byte~) setFAC::prepareMEM1_$0#0 +(byte~) setFAC::prepareMEM1_$1 +(byte~) setFAC::prepareMEM1_$1#0 +(word) setFAC::prepareMEM1_mem +(word) setFAC::prepareMEM1_mem#0 +(word) setFAC::prepareMEM1_mem#1 (word) setFAC::w (word) setFAC::w#0 (word) setFAC::w#1 @@ -1637,6 +1697,7 @@ SYMBOL TABLE SSA (word) setFAC::w#4 (word) setFAC::w#5 (void()) setMEMtoFAC((byte*) setMEMtoFAC::mem) +(word~) setMEMtoFAC::$0 (label) setMEMtoFAC::@1 (label) setMEMtoFAC::@return (byte*) setMEMtoFAC::mem @@ -1646,6 +1707,14 @@ SYMBOL TABLE SSA (byte*) setMEMtoFAC::mem#3 (byte*) setMEMtoFAC::mem#4 (byte*) setMEMtoFAC::mem#5 +(label) setMEMtoFAC::prepareMEM1 +(byte~) setMEMtoFAC::prepareMEM1_$0 +(byte~) setMEMtoFAC::prepareMEM1_$0#0 +(byte~) setMEMtoFAC::prepareMEM1_$1 +(byte~) setMEMtoFAC::prepareMEM1_$1#0 +(word) setMEMtoFAC::prepareMEM1_mem +(word) setMEMtoFAC::prepareMEM1_mem#0 +(word) setMEMtoFAC::prepareMEM1_mem#1 (void()) sinFAC() (label) sinFAC::@return (byte) sin_idx_x @@ -1810,7 +1879,10 @@ Inlining cast (byte*) SPRITES_COLS#0 ← (byte*)(number) $d027 Inlining cast (byte*) COLS#0 ← (byte*)(number) $d800 Inlining cast (byte*) memLo#0 ← (byte*)(number) $fe Inlining cast (byte*) memHi#0 ← (byte*)(number) $ff -Inlining cast (byte*~) setFAC::$0 ← (byte*)(word) setFAC::w#5 +Inlining cast (word~) setMEMtoFAC::$0 ← (word)(byte*) setMEMtoFAC::mem#5 +Inlining cast (word~) addMEMtoFAC::$0 ← (word)(byte*) addMEMtoFAC::mem#2 +Inlining cast (word~) divMEMbyFAC::$0 ← (word)(byte*) divMEMbyFAC::mem#2 +Inlining cast (word~) mulFACbyMEM::$0 ← (word)(byte*) mulFACbyMEM::mem#2 Inlining cast (byte) sinlen_x#0 ← (unumber)(number) $dd Inlining cast (byte) sinlen_y#0 ← (unumber)(number) $c5 Inlining cast (byte*) sprites#0 ← (byte*)(number) $2000 @@ -2034,16 +2106,20 @@ Inferred type updated to byte in (unumber~) gen_chargen_sprite::$3 ← (byte) ge Inferred type updated to byte in (unumber~) gen_chargen_sprite::$6 ← (byte) gen_chargen_sprite::s_gen#3 * (byte) 2 Inferred type updated to byte in (unumber~) gen_chargen_sprite::$7 ← (byte~) gen_chargen_sprite::$6 | (byte) gen_chargen_sprite::c#2 Inferred type updated to byte in (unumber~) gen_chargen_sprite::$11 ← (byte) gen_chargen_sprite::bits#3 * (byte) 2 -Inversing boolean not [156] (bool~) progress_inc::$1 ← (byte) progress_idx#10 != (byte) 8 from [155] (bool~) progress_inc::$0 ← (byte) progress_idx#10 == (byte) 8 -Inversing boolean not [192] (bool~) anim::$12 ← (byte) anim::xidx#1 < (byte) sinlen_x#0 from [191] (bool~) anim::$11 ← (byte) anim::xidx#1 >= (byte) sinlen_x#0 -Inversing boolean not [198] (bool~) anim::$16 ← (byte) anim::yidx#1 < (byte) sinlen_y#0 from [197] (bool~) anim::$15 ← (byte) anim::yidx#1 >= (byte) sinlen_y#0 -Inversing boolean not [216] (bool~) anim::$1 ← (byte) sin_idx_x#3 < (byte) sinlen_x#0 from [215] (bool~) anim::$0 ← (byte) sin_idx_x#3 >= (byte) sinlen_x#0 -Inversing boolean not [221] (bool~) anim::$3 ← (byte) sin_idx_y#3 < (byte) sinlen_y#0 from [220] (bool~) anim::$2 ← (byte) sin_idx_y#3 >= (byte) sinlen_y#0 -Inversing boolean not [293] (bool~) gen_chargen_sprite::$5 ← (byte~) gen_chargen_sprite::$3 == (byte) 0 from [292] (bool~) gen_chargen_sprite::$4 ← (byte~) gen_chargen_sprite::$3 != (byte) 0 -Inversing boolean not [305] (bool~) gen_chargen_sprite::$9 ← (byte) gen_chargen_sprite::s_gen_cnt#1 != (byte) 8 from [304] (bool~) gen_chargen_sprite::$8 ← (byte) gen_chargen_sprite::s_gen_cnt#1 == (byte) 8 +Inversing boolean not [173] (bool~) progress_inc::$1 ← (byte) progress_idx#10 != (byte) 8 from [172] (bool~) progress_inc::$0 ← (byte) progress_idx#10 == (byte) 8 +Inversing boolean not [209] (bool~) anim::$12 ← (byte) anim::xidx#1 < (byte) sinlen_x#0 from [208] (bool~) anim::$11 ← (byte) anim::xidx#1 >= (byte) sinlen_x#0 +Inversing boolean not [215] (bool~) anim::$16 ← (byte) anim::yidx#1 < (byte) sinlen_y#0 from [214] (bool~) anim::$15 ← (byte) anim::yidx#1 >= (byte) sinlen_y#0 +Inversing boolean not [233] (bool~) anim::$1 ← (byte) sin_idx_x#3 < (byte) sinlen_x#0 from [232] (bool~) anim::$0 ← (byte) sin_idx_x#3 >= (byte) sinlen_x#0 +Inversing boolean not [238] (bool~) anim::$3 ← (byte) sin_idx_y#3 < (byte) sinlen_y#0 from [237] (bool~) anim::$2 ← (byte) sin_idx_y#3 >= (byte) sinlen_y#0 +Inversing boolean not [310] (bool~) gen_chargen_sprite::$5 ← (byte~) gen_chargen_sprite::$3 == (byte) 0 from [309] (bool~) gen_chargen_sprite::$4 ← (byte~) gen_chargen_sprite::$3 != (byte) 0 +Inversing boolean not [322] (bool~) gen_chargen_sprite::$9 ← (byte) gen_chargen_sprite::s_gen_cnt#1 != (byte) 8 from [321] (bool~) gen_chargen_sprite::$8 ← (byte) gen_chargen_sprite::s_gen_cnt#1 == (byte) 8 Successful SSA optimization Pass2UnaryNotSimplification -Alias (byte*) prepareMEM::mem#0 = (byte*~) setFAC::$0 +Alias (word) setFAC::prepareMEM1_mem#0 = (word) setFAC::w#5 (word) setFAC::prepareMEM1_mem#1 Alias (word) getFAC::return#0 = (word) getFAC::w#0 (word~) getFAC::$0 (word) getFAC::return#3 (word) getFAC::return#1 +Alias (word) setMEMtoFAC::prepareMEM1_mem#0 = (word~) setMEMtoFAC::$0 (word) setMEMtoFAC::prepareMEM1_mem#1 +Alias (word) addMEMtoFAC::prepareMEM1_mem#0 = (word~) addMEMtoFAC::$0 (word) addMEMtoFAC::prepareMEM1_mem#1 +Alias (word) divMEMbyFAC::prepareMEM1_mem#0 = (word~) divMEMbyFAC::$0 (word) divMEMbyFAC::prepareMEM1_mem#1 +Alias (word) mulFACbyMEM::prepareMEM1_mem#0 = (word~) mulFACbyMEM::$0 (word) mulFACbyMEM::prepareMEM1_mem#1 Alias (byte) sin_idx_x#22 = (byte) sin_idx_x#25 Alias (byte) sin_idx_y#20 = (byte) sin_idx_y#23 Alias (byte*) progress_cursor#0 = (byte*) progress_cursor#15 @@ -2229,26 +2305,26 @@ Identical Phi Values (byte*) progress_cursor#39 (byte*) progress_cursor#22 Successful SSA optimization Pass2IdenticalPhiElimination Identical Phi Values (byte*) gen_chargen_sprite::chargen#1 (byte*) gen_chargen_sprite::chargen#0 Successful SSA optimization Pass2IdenticalPhiElimination -Simple Condition (bool~) main::$1 [72] if(*((byte*) RASTER#0)!=(byte) $ff) goto main::@2 -Simple Condition (bool~) init::$10 [95] if((byte) init::i#1!=rangelast(0,$27)) goto init::@1 -Simple Condition (bool~) clear_screen::$1 [138] if((byte*) clear_screen::sc#2<(byte*~) clear_screen::$0) goto clear_screen::@2 -Simple Condition (bool~) progress_inc::$1 [157] if((byte) progress_idx#10!=(byte) 8) goto progress_inc::@1 -Simple Condition (bool~) anim::$12 [193] if((byte) anim::xidx#1<(byte) sinlen_x#0) goto anim::@5 -Simple Condition (bool~) anim::$16 [199] if((byte) anim::yidx#1<(byte) sinlen_y#0) goto anim::@6 -Simple Condition (bool~) anim::$19 [208] if((byte) anim::j#1!=rangelast(0,6)) goto anim::@4 -Simple Condition (bool~) anim::$1 [217] if((byte) sin_idx_x#3<(byte) sinlen_x#0) goto anim::@1 -Simple Condition (bool~) anim::$3 [222] if((byte) sin_idx_y#3<(byte) sinlen_y#0) goto anim::@2 -Simple Condition (bool~) place_sprites::$6 [260] if((byte) place_sprites::j#1!=rangelast(0,6)) goto place_sprites::@1 -Simple Condition (bool~) gen_sprites::$2 [274] if((byte) gen_sprites::i#1!=rangelast(0,6)) goto gen_sprites::@1 -Simple Condition (bool~) gen_chargen_sprite::$5 [294] if((byte~) gen_chargen_sprite::$3==(byte) 0) goto gen_chargen_sprite::@3 -Simple Condition (bool~) gen_chargen_sprite::$9 [306] if((byte) gen_chargen_sprite::s_gen_cnt#1!=(byte) 8) goto gen_chargen_sprite::@5 -Simple Condition (bool~) gen_chargen_sprite::$10 [310] if((byte) gen_chargen_sprite::b#1!=rangelast(0,2)) goto gen_chargen_sprite::@4 -Simple Condition (bool~) gen_chargen_sprite::$12 [323] if((byte) gen_chargen_sprite::x#1!=rangelast(0,7)) goto gen_chargen_sprite::@2 -Simple Condition (bool~) gen_chargen_sprite::$14 [329] if((byte) gen_chargen_sprite::y#1!=rangelast(0,7)) goto gen_chargen_sprite::@1 -Simple Condition (bool~) gen_sintab::$13 [374] if((byte) gen_sintab::i#10<(byte) gen_sintab::length#10) goto gen_sintab::@2 +Simple Condition (bool~) main::$1 [89] if(*((byte*) RASTER#0)!=(byte) $ff) goto main::@2 +Simple Condition (bool~) init::$10 [112] if((byte) init::i#1!=rangelast(0,$27)) goto init::@1 +Simple Condition (bool~) clear_screen::$1 [155] if((byte*) clear_screen::sc#2<(byte*~) clear_screen::$0) goto clear_screen::@2 +Simple Condition (bool~) progress_inc::$1 [174] if((byte) progress_idx#10!=(byte) 8) goto progress_inc::@1 +Simple Condition (bool~) anim::$12 [210] if((byte) anim::xidx#1<(byte) sinlen_x#0) goto anim::@5 +Simple Condition (bool~) anim::$16 [216] if((byte) anim::yidx#1<(byte) sinlen_y#0) goto anim::@6 +Simple Condition (bool~) anim::$19 [225] if((byte) anim::j#1!=rangelast(0,6)) goto anim::@4 +Simple Condition (bool~) anim::$1 [234] if((byte) sin_idx_x#3<(byte) sinlen_x#0) goto anim::@1 +Simple Condition (bool~) anim::$3 [239] if((byte) sin_idx_y#3<(byte) sinlen_y#0) goto anim::@2 +Simple Condition (bool~) place_sprites::$6 [277] if((byte) place_sprites::j#1!=rangelast(0,6)) goto place_sprites::@1 +Simple Condition (bool~) gen_sprites::$2 [291] if((byte) gen_sprites::i#1!=rangelast(0,6)) goto gen_sprites::@1 +Simple Condition (bool~) gen_chargen_sprite::$5 [311] if((byte~) gen_chargen_sprite::$3==(byte) 0) goto gen_chargen_sprite::@3 +Simple Condition (bool~) gen_chargen_sprite::$9 [323] if((byte) gen_chargen_sprite::s_gen_cnt#1!=(byte) 8) goto gen_chargen_sprite::@5 +Simple Condition (bool~) gen_chargen_sprite::$10 [327] if((byte) gen_chargen_sprite::b#1!=rangelast(0,2)) goto gen_chargen_sprite::@4 +Simple Condition (bool~) gen_chargen_sprite::$12 [340] if((byte) gen_chargen_sprite::x#1!=rangelast(0,7)) goto gen_chargen_sprite::@2 +Simple Condition (bool~) gen_chargen_sprite::$14 [346] if((byte) gen_chargen_sprite::y#1!=rangelast(0,7)) goto gen_chargen_sprite::@1 +Simple Condition (bool~) gen_sintab::$13 [391] if((byte) gen_sintab::i#10<(byte) gen_sintab::length#10) goto gen_sintab::@2 Successful SSA optimization Pass2ConditionalJumpSimplification -Constant right-side identified [60] (byte[$dd]) sintab_x#0 ← { fill( $dd, 0) } -Constant right-side identified [62] (byte[$c5]) sintab_y#0 ← { fill( $c5, 0) } +Constant right-side identified [77] (byte[$dd]) sintab_x#0 ← { fill( $dd, 0) } +Constant right-side identified [79] (byte[$c5]) sintab_y#0 ← { fill( $c5, 0) } Successful SSA optimization Pass2ConstantRValueConsolidation Identified constant from value list (byte[]) { (byte) $20, (byte) $65, (byte) $74, (byte) $75, (byte) $61, (byte) $f6, (byte) $e7, (byte) $ea, (byte) $e0 } Identified constant from value list (byte[]) { (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 } @@ -2333,25 +2409,25 @@ Constant (const byte*) divMEMbyFAC::mem#1 = gen_sintab::f_i#0 Constant (const byte*) mulFACbyMEM::mem#1 = gen_sintab::f_amp#0 Constant (const byte*) addMEMtoFAC::mem#1 = gen_sintab::f_min#0 Successful SSA optimization Pass2ConstantIdentification -Constant value identified (word)sprites#0 in [238] (word~) place_sprites::$1 ← (word)(const byte*) sprites#0 +Constant value identified (word)sprites#0 in [255] (word~) place_sprites::$1 ← (word)(const byte*) sprites#0 Successful SSA optimization Pass2ConstantValues -if() condition always true - replacing block destination [78] if(true) goto main::@2 +if() condition always true - replacing block destination [95] if(true) goto main::@2 Successful SSA optimization Pass2ConstantIfs -Resolved ranged next value [93] init::i#1 ← ++ init::i#2 to ++ -Resolved ranged comparison value [95] if(init::i#1!=rangelast(0,$27)) goto init::@1 to (number) $28 -Resolved ranged next value [206] anim::j#1 ← ++ anim::j#2 to ++ -Resolved ranged comparison value [208] if(anim::j#1!=rangelast(0,6)) goto anim::@4 to (number) 7 -Resolved ranged next value [258] place_sprites::j#1 ← ++ place_sprites::j#2 to ++ -Resolved ranged comparison value [260] if(place_sprites::j#1!=rangelast(0,6)) goto place_sprites::@1 to (number) 7 -Resolved ranged next value [272] gen_sprites::i#1 ← ++ gen_sprites::i#2 to ++ -Resolved ranged comparison value [274] if(gen_sprites::i#1!=rangelast(0,6)) goto gen_sprites::@1 to (number) 7 -Resolved ranged next value [308] gen_chargen_sprite::b#1 ← ++ gen_chargen_sprite::b#2 to ++ -Resolved ranged comparison value [310] if(gen_chargen_sprite::b#1!=rangelast(0,2)) goto gen_chargen_sprite::@4 to (number) 3 -Resolved ranged next value [321] gen_chargen_sprite::x#1 ← ++ gen_chargen_sprite::x#6 to ++ -Resolved ranged comparison value [323] if(gen_chargen_sprite::x#1!=rangelast(0,7)) goto gen_chargen_sprite::@2 to (number) 8 -Resolved ranged next value [327] gen_chargen_sprite::y#1 ← ++ gen_chargen_sprite::y#2 to ++ -Resolved ranged comparison value [329] if(gen_chargen_sprite::y#1!=rangelast(0,7)) goto gen_chargen_sprite::@1 to (number) 8 -Simplifying expression containing zero gen_chargen_sprite::sprite#3 in [312] *((byte*) gen_chargen_sprite::sprite#3 + (byte) 0) ← (byte) gen_chargen_sprite::s_gen#1 +Resolved ranged next value [110] init::i#1 ← ++ init::i#2 to ++ +Resolved ranged comparison value [112] if(init::i#1!=rangelast(0,$27)) goto init::@1 to (number) $28 +Resolved ranged next value [223] anim::j#1 ← ++ anim::j#2 to ++ +Resolved ranged comparison value [225] if(anim::j#1!=rangelast(0,6)) goto anim::@4 to (number) 7 +Resolved ranged next value [275] place_sprites::j#1 ← ++ place_sprites::j#2 to ++ +Resolved ranged comparison value [277] if(place_sprites::j#1!=rangelast(0,6)) goto place_sprites::@1 to (number) 7 +Resolved ranged next value [289] gen_sprites::i#1 ← ++ gen_sprites::i#2 to ++ +Resolved ranged comparison value [291] if(gen_sprites::i#1!=rangelast(0,6)) goto gen_sprites::@1 to (number) 7 +Resolved ranged next value [325] gen_chargen_sprite::b#1 ← ++ gen_chargen_sprite::b#2 to ++ +Resolved ranged comparison value [327] if(gen_chargen_sprite::b#1!=rangelast(0,2)) goto gen_chargen_sprite::@4 to (number) 3 +Resolved ranged next value [338] gen_chargen_sprite::x#1 ← ++ gen_chargen_sprite::x#6 to ++ +Resolved ranged comparison value [340] if(gen_chargen_sprite::x#1!=rangelast(0,7)) goto gen_chargen_sprite::@2 to (number) 8 +Resolved ranged next value [344] gen_chargen_sprite::y#1 ← ++ gen_chargen_sprite::y#2 to ++ +Resolved ranged comparison value [346] if(gen_chargen_sprite::y#1!=rangelast(0,7)) goto gen_chargen_sprite::@1 to (number) 8 +Simplifying expression containing zero gen_chargen_sprite::sprite#3 in [329] *((byte*) gen_chargen_sprite::sprite#3 + (byte) 0) ← (byte) gen_chargen_sprite::s_gen#1 Successful SSA optimization PassNSimplifyExpressionWithZero Eliminating unused constant (const byte) progress_idx#36 Successful SSA optimization PassNEliminateUnusedVars @@ -2381,9 +2457,9 @@ Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) 8 Successful SSA optimization PassNFinalizeNumberTypeConversions -Constant right-side identified [55] (byte*) progress_init::line#1 ← (const byte*) SCREEN#0 + (byte) $28 -Constant right-side identified [61] (byte*~) clear_screen::$0 ← (const byte*) SCREEN#0 + (word) $3e8 -Constant right-side identified [110] (byte*) place_sprites::sprites_ptr#0 ← (const byte*) SCREEN#0 + (word) $3f8 +Constant right-side identified [63] (byte*) progress_init::line#1 ← (const byte*) SCREEN#0 + (byte) $28 +Constant right-side identified [69] (byte*~) clear_screen::$0 ← (const byte*) SCREEN#0 + (word) $3e8 +Constant right-side identified [118] (byte*) place_sprites::sprites_ptr#0 ← (const byte*) SCREEN#0 + (word) $3f8 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte*) progress_init::line#1 = SCREEN#0+$28 Constant (const byte*) clear_screen::$0 = SCREEN#0+$3e8 @@ -2395,20 +2471,25 @@ Alias (byte*) clear_screen::sc#1 = (byte*) clear_screen::sc#2 Successful SSA optimization Pass2AliasElimination Identical Phi Values (byte*) clear_screen::sc#5 (const byte*) clear_screen::sc#0 Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [110] (word~) place_sprites::$2 ← (const word) place_sprites::$1 / (byte) $40 +Constant right-side identified [118] (word~) place_sprites::$2 ← (const word) place_sprites::$1 / (byte) $40 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const word) place_sprites::$2 = place_sprites::$1/$40 Successful SSA optimization Pass2ConstantIdentification -Constant value identified (byte)place_sprites::$2 in [111] (byte) place_sprites::spr_id#0 ← (byte)(const word) place_sprites::$2 +Constant value identified (byte)place_sprites::$2 in [119] (byte) place_sprites::spr_id#0 ← (byte)(const word) place_sprites::$2 Successful SSA optimization Pass2ConstantValues -if() condition always true - replacing block destination [201] if((const byte*) clear_screen::sc#0<(const byte*) clear_screen::$0) goto clear_screen::@2 +if() condition always true - replacing block destination [209] if((const byte*) clear_screen::sc#0<(const byte*) clear_screen::$0) goto clear_screen::@2 Successful SSA optimization Pass2ConstantIfs Constant (const byte) place_sprites::spr_id#0 = (byte)place_sprites::$2 Successful SSA optimization Pass2ConstantIdentification -Rewriting multiplication to use shift [79] (byte~) anim::$6 ← (byte) anim::x_msb#2 * (byte) 2 -Rewriting multiplication to use shift [130] (word~) gen_chargen_sprite::$1 ← (word~) gen_chargen_sprite::$0 * (byte) 8 -Rewriting multiplication to use shift [141] (byte~) gen_chargen_sprite::$6 ← (byte) gen_chargen_sprite::s_gen#3 * (byte) 2 -Rewriting multiplication to use shift [152] (byte) gen_chargen_sprite::bits#1 ← (byte) gen_chargen_sprite::bits#2 * (byte) 2 +Inlining Noop Cast [13] (word) setMEMtoFAC::prepareMEM1_mem#0 ← (word)(byte*) setMEMtoFAC::mem#5 keeping setMEMtoFAC::mem#5 +Inlining Noop Cast [21] (word) addMEMtoFAC::prepareMEM1_mem#0 ← (word)(byte*) addMEMtoFAC::mem#2 keeping addMEMtoFAC::mem#2 +Inlining Noop Cast [31] (word) divMEMbyFAC::prepareMEM1_mem#0 ← (word)(byte*) divMEMbyFAC::mem#2 keeping divMEMbyFAC::mem#2 +Inlining Noop Cast [39] (word) mulFACbyMEM::prepareMEM1_mem#0 ← (word)(byte*) mulFACbyMEM::mem#2 keeping mulFACbyMEM::mem#2 +Successful SSA optimization Pass2NopCastInlining +Rewriting multiplication to use shift [87] (byte~) anim::$6 ← (byte) anim::x_msb#2 * (byte) 2 +Rewriting multiplication to use shift [138] (word~) gen_chargen_sprite::$1 ← (word~) gen_chargen_sprite::$0 * (byte) 8 +Rewriting multiplication to use shift [149] (byte~) gen_chargen_sprite::$6 ← (byte) gen_chargen_sprite::s_gen#3 * (byte) 2 +Rewriting multiplication to use shift [160] (byte) gen_chargen_sprite::bits#1 ← (byte) gen_chargen_sprite::bits#2 * (byte) 2 Successful SSA optimization Pass2MultiplyToShiftRewriting Inlining constant with var siblings (const word) setFAC::w#2 Inlining constant with var siblings (const byte*) setMEMtoFAC::mem#0 @@ -2523,10 +2604,14 @@ Alias (byte) init::i#2 = (byte~) init::$9 Successful SSA optimization Pass2AliasElimination Identical Phi Values (byte*) addMEMtoFAC::mem#2 (const byte[]) gen_sintab::f_min#0 Successful SSA optimization Pass2IdenticalPhiElimination -Constant (const byte*) prepareMEM::mem#2 = gen_sintab::f_min#0 +Constant right-side identified [20] (byte~) addMEMtoFAC::prepareMEM1_$0#0 ← < (word)(const byte[]) gen_sintab::f_min#0 +Constant right-side identified [22] (byte~) addMEMtoFAC::prepareMEM1_$1#0 ← > (word)(const byte[]) gen_sintab::f_min#0 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant (const byte) addMEMtoFAC::prepareMEM1_$0#0 = <(word)gen_sintab::f_min#0 +Constant (const byte) addMEMtoFAC::prepareMEM1_$1#0 = >(word)gen_sintab::f_min#0 Successful SSA optimization Pass2ConstantIdentification -Inlining constant with var siblings (const byte*) prepareMEM::mem#2 -Constant inlined prepareMEM::mem#2 = (const byte[]) gen_sintab::f_min#0 +Constant inlined addMEMtoFAC::prepareMEM1_$1#0 = >(word)(const byte[]) gen_sintab::f_min#0 +Constant inlined addMEMtoFAC::prepareMEM1_$0#0 = <(word)(const byte[]) gen_sintab::f_min#0 Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@7(between main::@2 and main::@2) Added new block during phi lifting init::@11(between init::@1 and init::@1) @@ -2592,14 +2677,9 @@ Calls in [] to main:6 Calls in [main] to init:10 anim:15 Calls in [init] to clear_screen:67 place_sprites:75 gen_sprites:77 progress_init:79 gen_sintab:81 progress_init:83 gen_sintab:85 clear_screen:87 Calls in [gen_sintab] to setFAC:102 setARGtoFAC:104 setFAC:107 setMEMtoFAC:109 subFACfromARG:111 setMEMtoFAC:113 setFAC:115 divMEMbyFAC:117 setMEMtoFAC:119 addMEMtoFAC:121 setMEMtoFAC:123 setFAC:130 mulFACbyMEM:132 setMEMtoFAC:134 setFAC:137 divMEMbyFAC:139 sinFAC:141 mulFACbyMEM:143 addMEMtoFAC:145 getFAC:147 progress_inc:152 -Calls in [addMEMtoFAC] to prepareMEM:171 -Calls in [mulFACbyMEM] to prepareMEM:183 -Calls in [divMEMbyFAC] to prepareMEM:191 -Calls in [setFAC] to prepareMEM:197 -Calls in [setMEMtoFAC] to prepareMEM:203 -Calls in [gen_sprites] to gen_chargen_sprite:217 +Calls in [gen_sprites] to gen_chargen_sprite:216 -Created 50 initial phi equivalence classes +Created 49 initial phi equivalence classes Coalesced [16] sin_idx_x#27 ← sin_idx_x#11 Coalesced [17] sin_idx_y#27 ← sin_idx_y#11 Coalesced (already) [18] sin_idx_x#26 ← sin_idx_x#13 @@ -2619,51 +2699,47 @@ Coalesced [64] anim::yidx#10 ← anim::yidx#1 Coalesced [65] anim::xidx#10 ← anim::xidx#1 Coalesced [90] init::i#3 ← init::i#1 Coalesced [98] clear_screen::sc#6 ← clear_screen::sc#1 -Coalesced [101] setFAC::w#6 ← setFAC::w#0 -Coalesced [106] setFAC::w#9 ← setFAC::w#1 +Coalesced [101] setFAC::prepareMEM1_mem#2 ← setFAC::w#0 +Coalesced [106] setFAC::prepareMEM1_mem#5 ← setFAC::w#1 Coalesced [124] progress_cursor#68 ← progress_cursor#22 -Coalesced [129] setFAC::w#7 ← setFAC::w#3 -Coalesced [136] setFAC::w#8 ← setFAC::w#4 +Coalesced [129] setFAC::prepareMEM1_mem#3 ← setFAC::w#3 +Coalesced [136] setFAC::prepareMEM1_mem#4 ← setFAC::w#4 Coalesced [154] gen_sintab::i#14 ← gen_sintab::i#1 Coalesced [155] progress_idx#67 ← progress_idx#12 Coalesced [156] progress_cursor#69 ← progress_cursor#11 Coalesced [161] progress_cursor#67 ← progress_cursor#10 Coalesced [165] progress_idx#66 ← progress_idx#10 Coalesced (already) [166] progress_cursor#66 ← progress_cursor#13 -Coalesced [182] prepareMEM::mem#7 ← prepareMEM::mem#4 -Coalesced [190] prepareMEM::mem#6 ← prepareMEM::mem#3 -Coalesced [196] prepareMEM::mem#8 ← prepareMEM::mem#0 -Coalesced [202] prepareMEM::mem#9 ← prepareMEM::mem#1 -Coalesced [211] progress_cursor#22 ← progress_init::line#2 -Coalesced [222] gen_sprites::i#4 ← gen_sprites::i#1 -Coalesced [223] gen_sprites::spr#4 ← gen_sprites::spr#1 -Coalesced [229] gen_chargen_sprite::sprite#13 ← gen_chargen_sprite::sprite#0 -Coalesced [232] gen_chargen_sprite::bits#9 ← gen_chargen_sprite::bits#0 -Coalesced [233] gen_chargen_sprite::sprite#15 ← gen_chargen_sprite::sprite#11 -Coalesced [239] gen_chargen_sprite::s_gen#11 ← gen_chargen_sprite::s_gen#5 -Coalesced [240] gen_chargen_sprite::s_gen_cnt#10 ← gen_chargen_sprite::s_gen_cnt#4 -Coalesced [241] gen_chargen_sprite::sprite#17 ← gen_chargen_sprite::sprite#10 -Coalesced [251] gen_chargen_sprite::sprite#20 ← gen_chargen_sprite::sprite#1 -Coalesced [264] gen_chargen_sprite::y#11 ← gen_chargen_sprite::y#1 -Coalesced [265] gen_chargen_sprite::sprite#14 ← gen_chargen_sprite::sprite#2 -Coalesced [266] gen_chargen_sprite::bits#10 ← gen_chargen_sprite::bits#1 -Coalesced [267] gen_chargen_sprite::s_gen#10 ← gen_chargen_sprite::s_gen#6 -Coalesced [268] gen_chargen_sprite::s_gen_cnt#9 ← gen_chargen_sprite::s_gen_cnt#5 -Coalesced [269] gen_chargen_sprite::sprite#16 ← gen_chargen_sprite::sprite#4 -Coalesced [270] gen_chargen_sprite::x#9 ← gen_chargen_sprite::x#1 -Coalesced (already) [271] gen_chargen_sprite::s_gen#12 ← gen_chargen_sprite::s_gen#6 -Coalesced (already) [272] gen_chargen_sprite::s_gen_cnt#11 ← gen_chargen_sprite::s_gen_cnt#5 -Coalesced [273] gen_chargen_sprite::b#5 ← gen_chargen_sprite::b#1 -Coalesced (already) [274] gen_chargen_sprite::sprite#18 ← gen_chargen_sprite::sprite#4 -Coalesced [275] gen_chargen_sprite::s_gen#13 ← gen_chargen_sprite::s_gen#1 -Coalesced [276] gen_chargen_sprite::s_gen_cnt#12 ← gen_chargen_sprite::s_gen_cnt#1 -Coalesced (already) [277] gen_chargen_sprite::sprite#19 ← gen_chargen_sprite::sprite#3 -Coalesced [294] place_sprites::spr_id#3 ← place_sprites::spr_id#1 -Coalesced [295] place_sprites::j#3 ← place_sprites::j#1 -Coalesced [296] place_sprites::spr_x#3 ← place_sprites::spr_x#1 -Coalesced [297] place_sprites::j2#4 ← place_sprites::j2#2 -Coalesced [298] place_sprites::col#3 ← place_sprites::col#1 -Coalesced down to 36 phi equivalence classes +Coalesced [210] progress_cursor#22 ← progress_init::line#2 +Coalesced [221] gen_sprites::i#4 ← gen_sprites::i#1 +Coalesced [222] gen_sprites::spr#4 ← gen_sprites::spr#1 +Coalesced [228] gen_chargen_sprite::sprite#13 ← gen_chargen_sprite::sprite#0 +Coalesced [231] gen_chargen_sprite::bits#9 ← gen_chargen_sprite::bits#0 +Coalesced [232] gen_chargen_sprite::sprite#15 ← gen_chargen_sprite::sprite#11 +Coalesced [238] gen_chargen_sprite::s_gen#11 ← gen_chargen_sprite::s_gen#5 +Coalesced [239] gen_chargen_sprite::s_gen_cnt#10 ← gen_chargen_sprite::s_gen_cnt#4 +Coalesced [240] gen_chargen_sprite::sprite#17 ← gen_chargen_sprite::sprite#10 +Coalesced [250] gen_chargen_sprite::sprite#20 ← gen_chargen_sprite::sprite#1 +Coalesced [263] gen_chargen_sprite::y#11 ← gen_chargen_sprite::y#1 +Coalesced [264] gen_chargen_sprite::sprite#14 ← gen_chargen_sprite::sprite#2 +Coalesced [265] gen_chargen_sprite::bits#10 ← gen_chargen_sprite::bits#1 +Coalesced [266] gen_chargen_sprite::s_gen#10 ← gen_chargen_sprite::s_gen#6 +Coalesced [267] gen_chargen_sprite::s_gen_cnt#9 ← gen_chargen_sprite::s_gen_cnt#5 +Coalesced [268] gen_chargen_sprite::sprite#16 ← gen_chargen_sprite::sprite#4 +Coalesced [269] gen_chargen_sprite::x#9 ← gen_chargen_sprite::x#1 +Coalesced (already) [270] gen_chargen_sprite::s_gen#12 ← gen_chargen_sprite::s_gen#6 +Coalesced (already) [271] gen_chargen_sprite::s_gen_cnt#11 ← gen_chargen_sprite::s_gen_cnt#5 +Coalesced [272] gen_chargen_sprite::b#5 ← gen_chargen_sprite::b#1 +Coalesced (already) [273] gen_chargen_sprite::sprite#18 ← gen_chargen_sprite::sprite#4 +Coalesced [274] gen_chargen_sprite::s_gen#13 ← gen_chargen_sprite::s_gen#1 +Coalesced [275] gen_chargen_sprite::s_gen_cnt#12 ← gen_chargen_sprite::s_gen_cnt#1 +Coalesced (already) [276] gen_chargen_sprite::sprite#19 ← gen_chargen_sprite::sprite#3 +Coalesced [293] place_sprites::spr_id#3 ← place_sprites::spr_id#1 +Coalesced [294] place_sprites::j#3 ← place_sprites::j#1 +Coalesced [295] place_sprites::spr_x#3 ← place_sprites::spr_x#1 +Coalesced [296] place_sprites::j2#4 ← place_sprites::j2#2 +Coalesced [297] place_sprites::col#3 ← place_sprites::col#1 +Coalesced down to 35 phi equivalence classes Culled Empty Block (label) @4 Culled Empty Block (label) @67 Culled Empty Block (label) @70 @@ -3024,7 +3100,7 @@ progress_inc::@return: scope:[progress_inc] from progress_inc::@1 [127] return to:@return getFAC: scope:[getFAC] from gen_sintab::@20 - asm { jsr$b1aa sty$fe sta$ff } + asm { jsr$b1aa stymemLo stamemHi } [129] (word) getFAC::return#0 ← *((const byte*) memHi#0) w= *((const byte*) memLo#0) to:getFAC::@return getFAC::@return: scope:[getFAC] from getFAC @@ -3032,202 +3108,211 @@ getFAC::@return: scope:[getFAC] from getFAC to:@return addMEMtoFAC: scope:[addMEMtoFAC] from gen_sintab::@11 gen_sintab::@19 [131] phi() - [132] call prepareMEM + to:addMEMtoFAC::prepareMEM1 +addMEMtoFAC::prepareMEM1: scope:[addMEMtoFAC] from addMEMtoFAC + [132] *((const byte*) memLo#0) ← <(word)(const byte[]) gen_sintab::f_min#0 + [133] *((const byte*) memHi#0) ← >(word)(const byte[]) gen_sintab::f_min#0 to:addMEMtoFAC::@1 -addMEMtoFAC::@1: scope:[addMEMtoFAC] from addMEMtoFAC - asm { lda$fe ldy$ff jsr$b867 } +addMEMtoFAC::@1: scope:[addMEMtoFAC] from addMEMtoFAC::prepareMEM1 + asm { ldamemLo ldymemHi jsr$b867 } to:addMEMtoFAC::@return addMEMtoFAC::@return: scope:[addMEMtoFAC] from addMEMtoFAC::@1 - [134] return - to:@return -prepareMEM: scope:[prepareMEM] from addMEMtoFAC divMEMbyFAC mulFACbyMEM setFAC setMEMtoFAC - [135] (byte*) prepareMEM::mem#5 ← phi( addMEMtoFAC/(const byte[]) gen_sintab::f_min#0 divMEMbyFAC/(byte*) prepareMEM::mem#3 mulFACbyMEM/(byte*) prepareMEM::mem#4 setFAC/(byte*) prepareMEM::mem#0 setMEMtoFAC/(byte*) prepareMEM::mem#1 ) - [136] (byte~) prepareMEM::$0 ← < (byte*) prepareMEM::mem#5 - [137] *((const byte*) memLo#0) ← (byte~) prepareMEM::$0 - [138] (byte~) prepareMEM::$1 ← > (byte*) prepareMEM::mem#5 - [139] *((const byte*) memHi#0) ← (byte~) prepareMEM::$1 - to:prepareMEM::@return -prepareMEM::@return: scope:[prepareMEM] from prepareMEM - [140] return + [135] return to:@return mulFACbyMEM: scope:[mulFACbyMEM] from gen_sintab::@13 gen_sintab::@18 - [141] (byte*) mulFACbyMEM::mem#2 ← phi( gen_sintab::@13/(const byte*) gen_sintab::f_2pi#0 gen_sintab::@18/(const byte[]) gen_sintab::f_amp#0 ) - [142] (byte*) prepareMEM::mem#4 ← (byte*) mulFACbyMEM::mem#2 - [143] call prepareMEM + [136] (byte*) mulFACbyMEM::mem#2 ← phi( gen_sintab::@13/(const byte*) gen_sintab::f_2pi#0 gen_sintab::@18/(const byte[]) gen_sintab::f_amp#0 ) + to:mulFACbyMEM::prepareMEM1 +mulFACbyMEM::prepareMEM1: scope:[mulFACbyMEM] from mulFACbyMEM + [137] (byte~) mulFACbyMEM::prepareMEM1_$0#0 ← < (word)(byte*) mulFACbyMEM::mem#2 + [138] *((const byte*) memLo#0) ← (byte~) mulFACbyMEM::prepareMEM1_$0#0 + [139] (byte~) mulFACbyMEM::prepareMEM1_$1#0 ← > (word)(byte*) mulFACbyMEM::mem#2 + [140] *((const byte*) memHi#0) ← (byte~) mulFACbyMEM::prepareMEM1_$1#0 to:mulFACbyMEM::@1 -mulFACbyMEM::@1: scope:[mulFACbyMEM] from mulFACbyMEM - asm { lda$fe ldy$ff jsr$ba28 } +mulFACbyMEM::@1: scope:[mulFACbyMEM] from mulFACbyMEM::prepareMEM1 + asm { ldamemLo ldymemHi jsr$ba28 } to:mulFACbyMEM::@return mulFACbyMEM::@return: scope:[mulFACbyMEM] from mulFACbyMEM::@1 - [145] return + [142] return to:@return sinFAC: scope:[sinFAC] from gen_sintab::@17 asm { jsr$e26b } to:sinFAC::@return sinFAC::@return: scope:[sinFAC] from sinFAC - [147] return + [144] return to:@return divMEMbyFAC: scope:[divMEMbyFAC] from gen_sintab::@16 gen_sintab::@9 - [148] (byte*) divMEMbyFAC::mem#2 ← phi( gen_sintab::@9/(const byte[]) gen_sintab::f_amp#0 gen_sintab::@16/(const byte[]) gen_sintab::f_i#0 ) - [149] (byte*) prepareMEM::mem#3 ← (byte*) divMEMbyFAC::mem#2 - [150] call prepareMEM + [145] (byte*) divMEMbyFAC::mem#2 ← phi( gen_sintab::@9/(const byte[]) gen_sintab::f_amp#0 gen_sintab::@16/(const byte[]) gen_sintab::f_i#0 ) + to:divMEMbyFAC::prepareMEM1 +divMEMbyFAC::prepareMEM1: scope:[divMEMbyFAC] from divMEMbyFAC + [146] (byte~) divMEMbyFAC::prepareMEM1_$0#0 ← < (word)(byte*) divMEMbyFAC::mem#2 + [147] *((const byte*) memLo#0) ← (byte~) divMEMbyFAC::prepareMEM1_$0#0 + [148] (byte~) divMEMbyFAC::prepareMEM1_$1#0 ← > (word)(byte*) divMEMbyFAC::mem#2 + [149] *((const byte*) memHi#0) ← (byte~) divMEMbyFAC::prepareMEM1_$1#0 to:divMEMbyFAC::@1 -divMEMbyFAC::@1: scope:[divMEMbyFAC] from divMEMbyFAC - asm { lda$fe ldy$ff jsr$bb0f } +divMEMbyFAC::@1: scope:[divMEMbyFAC] from divMEMbyFAC::prepareMEM1 + asm { ldamemLo ldymemHi jsr$bb0f } to:divMEMbyFAC::@return divMEMbyFAC::@return: scope:[divMEMbyFAC] from divMEMbyFAC::@1 - [152] return + [151] return to:@return setFAC: scope:[setFAC] from gen_sintab gen_sintab::@15 gen_sintab::@2 gen_sintab::@4 gen_sintab::@8 - [153] (word) setFAC::w#5 ← phi( gen_sintab/(word) setFAC::w#0 gen_sintab::@8/(byte) 2 gen_sintab::@2/(word) setFAC::w#3 gen_sintab::@15/(word) setFAC::w#4 gen_sintab::@4/(word) setFAC::w#1 ) - [154] (byte*) prepareMEM::mem#0 ← (byte*)(word) setFAC::w#5 - [155] call prepareMEM + [152] (word) setFAC::prepareMEM1_mem#0 ← phi( gen_sintab/(word) setFAC::w#0 gen_sintab::@8/(byte) 2 gen_sintab::@2/(word) setFAC::w#3 gen_sintab::@15/(word) setFAC::w#4 gen_sintab::@4/(word) setFAC::w#1 ) + to:setFAC::prepareMEM1 +setFAC::prepareMEM1: scope:[setFAC] from setFAC + [153] (byte~) setFAC::prepareMEM1_$0#0 ← < (word) setFAC::prepareMEM1_mem#0 + [154] *((const byte*) memLo#0) ← (byte~) setFAC::prepareMEM1_$0#0 + [155] (byte~) setFAC::prepareMEM1_$1#0 ← > (word) setFAC::prepareMEM1_mem#0 + [156] *((const byte*) memHi#0) ← (byte~) setFAC::prepareMEM1_$1#0 to:setFAC::@1 -setFAC::@1: scope:[setFAC] from setFAC - asm { ldy$fe lda$ff jsr$b391 } +setFAC::@1: scope:[setFAC] from setFAC::prepareMEM1 + asm { ldymemLo ldamemHi jsr$b391 } to:setFAC::@return setFAC::@return: scope:[setFAC] from setFAC::@1 - [157] return + [158] return to:@return setMEMtoFAC: scope:[setMEMtoFAC] from gen_sintab::@10 gen_sintab::@12 gen_sintab::@14 gen_sintab::@5 gen_sintab::@7 - [158] (byte*) setMEMtoFAC::mem#5 ← phi( gen_sintab::@7/(const byte[]) gen_sintab::f_amp#0 gen_sintab::@10/(const byte[]) gen_sintab::f_amp#0 gen_sintab::@12/(const byte[]) gen_sintab::f_min#0 gen_sintab::@14/(const byte[]) gen_sintab::f_i#0 gen_sintab::@5/(const byte[]) gen_sintab::f_min#0 ) - [159] (byte*) prepareMEM::mem#1 ← (byte*) setMEMtoFAC::mem#5 - [160] call prepareMEM + [159] (byte*) setMEMtoFAC::mem#5 ← phi( gen_sintab::@7/(const byte[]) gen_sintab::f_amp#0 gen_sintab::@10/(const byte[]) gen_sintab::f_amp#0 gen_sintab::@12/(const byte[]) gen_sintab::f_min#0 gen_sintab::@14/(const byte[]) gen_sintab::f_i#0 gen_sintab::@5/(const byte[]) gen_sintab::f_min#0 ) + to:setMEMtoFAC::prepareMEM1 +setMEMtoFAC::prepareMEM1: scope:[setMEMtoFAC] from setMEMtoFAC + [160] (byte~) setMEMtoFAC::prepareMEM1_$0#0 ← < (word)(byte*) setMEMtoFAC::mem#5 + [161] *((const byte*) memLo#0) ← (byte~) setMEMtoFAC::prepareMEM1_$0#0 + [162] (byte~) setMEMtoFAC::prepareMEM1_$1#0 ← > (word)(byte*) setMEMtoFAC::mem#5 + [163] *((const byte*) memHi#0) ← (byte~) setMEMtoFAC::prepareMEM1_$1#0 to:setMEMtoFAC::@1 -setMEMtoFAC::@1: scope:[setMEMtoFAC] from setMEMtoFAC - asm { ldx$fe ldy$ff jsr$bbd4 } +setMEMtoFAC::@1: scope:[setMEMtoFAC] from setMEMtoFAC::prepareMEM1 + asm { ldxmemLo ldymemHi jsr$bbd4 } to:setMEMtoFAC::@return setMEMtoFAC::@return: scope:[setMEMtoFAC] from setMEMtoFAC::@1 - [162] return + [165] return to:@return subFACfromARG: scope:[subFACfromARG] from gen_sintab::@6 asm { jsr$b853 } to:subFACfromARG::@return subFACfromARG::@return: scope:[subFACfromARG] from subFACfromARG - [164] return + [167] return to:@return setARGtoFAC: scope:[setARGtoFAC] from gen_sintab::@3 asm { jsr$bc0f } to:setARGtoFAC::@return setARGtoFAC::@return: scope:[setARGtoFAC] from setARGtoFAC - [166] return + [169] return to:@return progress_init: scope:[progress_init] from init::@4 init::@6 - [167] (byte*) progress_init::line#2 ← phi( init::@4/(const byte*) SCREEN#0 init::@6/(const byte*) SCREEN#0+(byte) $28 ) + [170] (byte*) progress_init::line#2 ← phi( init::@4/(const byte*) SCREEN#0 init::@6/(const byte*) SCREEN#0+(byte) $28 ) to:progress_init::@return progress_init::@return: scope:[progress_init] from progress_init - [168] return + [171] return to:@return gen_sprites: scope:[gen_sprites] from init::@3 - [169] phi() + [172] phi() to:gen_sprites::@1 gen_sprites::@1: scope:[gen_sprites] from gen_sprites gen_sprites::@2 - [170] (byte*) gen_sprites::spr#2 ← phi( gen_sprites/(const byte*) sprites#0 gen_sprites::@2/(byte*) gen_sprites::spr#1 ) - [170] (byte) gen_sprites::i#2 ← phi( gen_sprites/(byte) 0 gen_sprites::@2/(byte) gen_sprites::i#1 ) - [171] (byte) gen_chargen_sprite::ch#0 ← *((const byte[]) gen_sprites::cml#0 + (byte) gen_sprites::i#2) - [172] (byte*) gen_chargen_sprite::sprite#0 ← (byte*) gen_sprites::spr#2 - [173] call gen_chargen_sprite + [173] (byte*) gen_sprites::spr#2 ← phi( gen_sprites/(const byte*) sprites#0 gen_sprites::@2/(byte*) gen_sprites::spr#1 ) + [173] (byte) gen_sprites::i#2 ← phi( gen_sprites/(byte) 0 gen_sprites::@2/(byte) gen_sprites::i#1 ) + [174] (byte) gen_chargen_sprite::ch#0 ← *((const byte[]) gen_sprites::cml#0 + (byte) gen_sprites::i#2) + [175] (byte*) gen_chargen_sprite::sprite#0 ← (byte*) gen_sprites::spr#2 + [176] call gen_chargen_sprite to:gen_sprites::@2 gen_sprites::@2: scope:[gen_sprites] from gen_sprites::@1 - [174] (byte*) gen_sprites::spr#1 ← (byte*) gen_sprites::spr#2 + (byte) $40 - [175] (byte) gen_sprites::i#1 ← ++ (byte) gen_sprites::i#2 - [176] if((byte) gen_sprites::i#1!=(byte) 7) goto gen_sprites::@1 + [177] (byte*) gen_sprites::spr#1 ← (byte*) gen_sprites::spr#2 + (byte) $40 + [178] (byte) gen_sprites::i#1 ← ++ (byte) gen_sprites::i#2 + [179] if((byte) gen_sprites::i#1!=(byte) 7) goto gen_sprites::@1 to:gen_sprites::@return gen_sprites::@return: scope:[gen_sprites] from gen_sprites::@2 - [177] return + [180] return to:@return gen_chargen_sprite: scope:[gen_chargen_sprite] from gen_sprites::@1 - [178] (word~) gen_chargen_sprite::$0 ← (word)(byte) gen_chargen_sprite::ch#0 - [179] (word~) gen_chargen_sprite::$1 ← (word~) gen_chargen_sprite::$0 << (byte) 3 - [180] (byte*) gen_chargen_sprite::chargen#0 ← (const byte*) CHARGEN#0 + (word~) gen_chargen_sprite::$1 + [181] (word~) gen_chargen_sprite::$0 ← (word)(byte) gen_chargen_sprite::ch#0 + [182] (word~) gen_chargen_sprite::$1 ← (word~) gen_chargen_sprite::$0 << (byte) 3 + [183] (byte*) gen_chargen_sprite::chargen#0 ← (const byte*) CHARGEN#0 + (word~) gen_chargen_sprite::$1 asm { sei } - [182] *((const byte*) PROCPORT#0) ← (byte) $32 + [185] *((const byte*) PROCPORT#0) ← (byte) $32 to:gen_chargen_sprite::@1 gen_chargen_sprite::@1: scope:[gen_chargen_sprite] from gen_chargen_sprite gen_chargen_sprite::@8 - [183] (byte*) gen_chargen_sprite::sprite#11 ← phi( gen_chargen_sprite/(byte*) gen_chargen_sprite::sprite#0 gen_chargen_sprite::@8/(byte*) gen_chargen_sprite::sprite#2 ) - [183] (byte) gen_chargen_sprite::y#2 ← phi( gen_chargen_sprite/(byte) 0 gen_chargen_sprite::@8/(byte) gen_chargen_sprite::y#1 ) - [184] (byte) gen_chargen_sprite::bits#0 ← *((byte*) gen_chargen_sprite::chargen#0 + (byte) gen_chargen_sprite::y#2) + [186] (byte*) gen_chargen_sprite::sprite#11 ← phi( gen_chargen_sprite/(byte*) gen_chargen_sprite::sprite#0 gen_chargen_sprite::@8/(byte*) gen_chargen_sprite::sprite#2 ) + [186] (byte) gen_chargen_sprite::y#2 ← phi( gen_chargen_sprite/(byte) 0 gen_chargen_sprite::@8/(byte) gen_chargen_sprite::y#1 ) + [187] (byte) gen_chargen_sprite::bits#0 ← *((byte*) gen_chargen_sprite::chargen#0 + (byte) gen_chargen_sprite::y#2) to:gen_chargen_sprite::@2 gen_chargen_sprite::@2: scope:[gen_chargen_sprite] from gen_chargen_sprite::@1 gen_chargen_sprite::@7 - [185] (byte) gen_chargen_sprite::x#6 ← phi( gen_chargen_sprite::@1/(byte) 0 gen_chargen_sprite::@7/(byte) gen_chargen_sprite::x#1 ) - [185] (byte*) gen_chargen_sprite::sprite#10 ← phi( gen_chargen_sprite::@1/(byte*) gen_chargen_sprite::sprite#11 gen_chargen_sprite::@7/(byte*) gen_chargen_sprite::sprite#4 ) - [185] (byte) gen_chargen_sprite::s_gen_cnt#4 ← phi( gen_chargen_sprite::@1/(byte) 0 gen_chargen_sprite::@7/(byte) gen_chargen_sprite::s_gen_cnt#5 ) - [185] (byte) gen_chargen_sprite::s_gen#5 ← phi( gen_chargen_sprite::@1/(byte) 0 gen_chargen_sprite::@7/(byte) gen_chargen_sprite::s_gen#6 ) - [185] (byte) gen_chargen_sprite::bits#2 ← phi( gen_chargen_sprite::@1/(byte) gen_chargen_sprite::bits#0 gen_chargen_sprite::@7/(byte) gen_chargen_sprite::bits#1 ) - [186] (byte~) gen_chargen_sprite::$3 ← (byte) gen_chargen_sprite::bits#2 & (byte) $80 - [187] if((byte~) gen_chargen_sprite::$3==(byte) 0) goto gen_chargen_sprite::@3 + [188] (byte) gen_chargen_sprite::x#6 ← phi( gen_chargen_sprite::@1/(byte) 0 gen_chargen_sprite::@7/(byte) gen_chargen_sprite::x#1 ) + [188] (byte*) gen_chargen_sprite::sprite#10 ← phi( gen_chargen_sprite::@1/(byte*) gen_chargen_sprite::sprite#11 gen_chargen_sprite::@7/(byte*) gen_chargen_sprite::sprite#4 ) + [188] (byte) gen_chargen_sprite::s_gen_cnt#4 ← phi( gen_chargen_sprite::@1/(byte) 0 gen_chargen_sprite::@7/(byte) gen_chargen_sprite::s_gen_cnt#5 ) + [188] (byte) gen_chargen_sprite::s_gen#5 ← phi( gen_chargen_sprite::@1/(byte) 0 gen_chargen_sprite::@7/(byte) gen_chargen_sprite::s_gen#6 ) + [188] (byte) gen_chargen_sprite::bits#2 ← phi( gen_chargen_sprite::@1/(byte) gen_chargen_sprite::bits#0 gen_chargen_sprite::@7/(byte) gen_chargen_sprite::bits#1 ) + [189] (byte~) gen_chargen_sprite::$3 ← (byte) gen_chargen_sprite::bits#2 & (byte) $80 + [190] if((byte~) gen_chargen_sprite::$3==(byte) 0) goto gen_chargen_sprite::@3 to:gen_chargen_sprite::@10 gen_chargen_sprite::@10: scope:[gen_chargen_sprite] from gen_chargen_sprite::@2 - [188] phi() + [191] phi() to:gen_chargen_sprite::@3 gen_chargen_sprite::@3: scope:[gen_chargen_sprite] from gen_chargen_sprite::@10 gen_chargen_sprite::@2 - [189] (byte) gen_chargen_sprite::c#3 ← phi( gen_chargen_sprite::@10/(byte) 1 gen_chargen_sprite::@2/(byte) 0 ) + [192] (byte) gen_chargen_sprite::c#3 ← phi( gen_chargen_sprite::@10/(byte) 1 gen_chargen_sprite::@2/(byte) 0 ) to:gen_chargen_sprite::@4 gen_chargen_sprite::@4: scope:[gen_chargen_sprite] from gen_chargen_sprite::@3 gen_chargen_sprite::@5 - [190] (byte*) gen_chargen_sprite::sprite#3 ← phi( gen_chargen_sprite::@3/(byte*) gen_chargen_sprite::sprite#10 gen_chargen_sprite::@5/(byte*) gen_chargen_sprite::sprite#4 ) - [190] (byte) gen_chargen_sprite::b#2 ← phi( gen_chargen_sprite::@3/(byte) 0 gen_chargen_sprite::@5/(byte) gen_chargen_sprite::b#1 ) - [190] (byte) gen_chargen_sprite::s_gen_cnt#3 ← phi( gen_chargen_sprite::@3/(byte) gen_chargen_sprite::s_gen_cnt#4 gen_chargen_sprite::@5/(byte) gen_chargen_sprite::s_gen_cnt#5 ) - [190] (byte) gen_chargen_sprite::s_gen#3 ← phi( gen_chargen_sprite::@3/(byte) gen_chargen_sprite::s_gen#5 gen_chargen_sprite::@5/(byte) gen_chargen_sprite::s_gen#6 ) - [191] (byte~) gen_chargen_sprite::$6 ← (byte) gen_chargen_sprite::s_gen#3 << (byte) 1 - [192] (byte) gen_chargen_sprite::s_gen#1 ← (byte~) gen_chargen_sprite::$6 | (byte) gen_chargen_sprite::c#3 - [193] (byte) gen_chargen_sprite::s_gen_cnt#1 ← ++ (byte) gen_chargen_sprite::s_gen_cnt#3 - [194] if((byte) gen_chargen_sprite::s_gen_cnt#1!=(byte) 8) goto gen_chargen_sprite::@5 + [193] (byte*) gen_chargen_sprite::sprite#3 ← phi( gen_chargen_sprite::@3/(byte*) gen_chargen_sprite::sprite#10 gen_chargen_sprite::@5/(byte*) gen_chargen_sprite::sprite#4 ) + [193] (byte) gen_chargen_sprite::b#2 ← phi( gen_chargen_sprite::@3/(byte) 0 gen_chargen_sprite::@5/(byte) gen_chargen_sprite::b#1 ) + [193] (byte) gen_chargen_sprite::s_gen_cnt#3 ← phi( gen_chargen_sprite::@3/(byte) gen_chargen_sprite::s_gen_cnt#4 gen_chargen_sprite::@5/(byte) gen_chargen_sprite::s_gen_cnt#5 ) + [193] (byte) gen_chargen_sprite::s_gen#3 ← phi( gen_chargen_sprite::@3/(byte) gen_chargen_sprite::s_gen#5 gen_chargen_sprite::@5/(byte) gen_chargen_sprite::s_gen#6 ) + [194] (byte~) gen_chargen_sprite::$6 ← (byte) gen_chargen_sprite::s_gen#3 << (byte) 1 + [195] (byte) gen_chargen_sprite::s_gen#1 ← (byte~) gen_chargen_sprite::$6 | (byte) gen_chargen_sprite::c#3 + [196] (byte) gen_chargen_sprite::s_gen_cnt#1 ← ++ (byte) gen_chargen_sprite::s_gen_cnt#3 + [197] if((byte) gen_chargen_sprite::s_gen_cnt#1!=(byte) 8) goto gen_chargen_sprite::@5 to:gen_chargen_sprite::@6 gen_chargen_sprite::@6: scope:[gen_chargen_sprite] from gen_chargen_sprite::@4 - [195] *((byte*) gen_chargen_sprite::sprite#3) ← (byte) gen_chargen_sprite::s_gen#1 - [196] *((byte*) gen_chargen_sprite::sprite#3 + (byte) 3) ← (byte) gen_chargen_sprite::s_gen#1 - [197] *((byte*) gen_chargen_sprite::sprite#3 + (byte) 6) ← (byte) gen_chargen_sprite::s_gen#1 - [198] (byte*) gen_chargen_sprite::sprite#1 ← ++ (byte*) gen_chargen_sprite::sprite#3 + [198] *((byte*) gen_chargen_sprite::sprite#3) ← (byte) gen_chargen_sprite::s_gen#1 + [199] *((byte*) gen_chargen_sprite::sprite#3 + (byte) 3) ← (byte) gen_chargen_sprite::s_gen#1 + [200] *((byte*) gen_chargen_sprite::sprite#3 + (byte) 6) ← (byte) gen_chargen_sprite::s_gen#1 + [201] (byte*) gen_chargen_sprite::sprite#1 ← ++ (byte*) gen_chargen_sprite::sprite#3 to:gen_chargen_sprite::@5 gen_chargen_sprite::@5: scope:[gen_chargen_sprite] from gen_chargen_sprite::@4 gen_chargen_sprite::@6 - [199] (byte*) gen_chargen_sprite::sprite#4 ← phi( gen_chargen_sprite::@4/(byte*) gen_chargen_sprite::sprite#3 gen_chargen_sprite::@6/(byte*) gen_chargen_sprite::sprite#1 ) - [199] (byte) gen_chargen_sprite::s_gen_cnt#5 ← phi( gen_chargen_sprite::@4/(byte) gen_chargen_sprite::s_gen_cnt#1 gen_chargen_sprite::@6/(byte) 0 ) - [199] (byte) gen_chargen_sprite::s_gen#6 ← phi( gen_chargen_sprite::@4/(byte) gen_chargen_sprite::s_gen#1 gen_chargen_sprite::@6/(byte) 0 ) - [200] (byte) gen_chargen_sprite::b#1 ← ++ (byte) gen_chargen_sprite::b#2 - [201] if((byte) gen_chargen_sprite::b#1!=(byte) 3) goto gen_chargen_sprite::@4 + [202] (byte*) gen_chargen_sprite::sprite#4 ← phi( gen_chargen_sprite::@4/(byte*) gen_chargen_sprite::sprite#3 gen_chargen_sprite::@6/(byte*) gen_chargen_sprite::sprite#1 ) + [202] (byte) gen_chargen_sprite::s_gen_cnt#5 ← phi( gen_chargen_sprite::@4/(byte) gen_chargen_sprite::s_gen_cnt#1 gen_chargen_sprite::@6/(byte) 0 ) + [202] (byte) gen_chargen_sprite::s_gen#6 ← phi( gen_chargen_sprite::@4/(byte) gen_chargen_sprite::s_gen#1 gen_chargen_sprite::@6/(byte) 0 ) + [203] (byte) gen_chargen_sprite::b#1 ← ++ (byte) gen_chargen_sprite::b#2 + [204] if((byte) gen_chargen_sprite::b#1!=(byte) 3) goto gen_chargen_sprite::@4 to:gen_chargen_sprite::@7 gen_chargen_sprite::@7: scope:[gen_chargen_sprite] from gen_chargen_sprite::@5 - [202] (byte) gen_chargen_sprite::bits#1 ← (byte) gen_chargen_sprite::bits#2 << (byte) 1 - [203] (byte) gen_chargen_sprite::x#1 ← ++ (byte) gen_chargen_sprite::x#6 - [204] if((byte) gen_chargen_sprite::x#1!=(byte) 8) goto gen_chargen_sprite::@2 + [205] (byte) gen_chargen_sprite::bits#1 ← (byte) gen_chargen_sprite::bits#2 << (byte) 1 + [206] (byte) gen_chargen_sprite::x#1 ← ++ (byte) gen_chargen_sprite::x#6 + [207] if((byte) gen_chargen_sprite::x#1!=(byte) 8) goto gen_chargen_sprite::@2 to:gen_chargen_sprite::@8 gen_chargen_sprite::@8: scope:[gen_chargen_sprite] from gen_chargen_sprite::@7 - [205] (byte*) gen_chargen_sprite::sprite#2 ← (byte*) gen_chargen_sprite::sprite#4 + (byte) 6 - [206] (byte) gen_chargen_sprite::y#1 ← ++ (byte) gen_chargen_sprite::y#2 - [207] if((byte) gen_chargen_sprite::y#1!=(byte) 8) goto gen_chargen_sprite::@1 + [208] (byte*) gen_chargen_sprite::sprite#2 ← (byte*) gen_chargen_sprite::sprite#4 + (byte) 6 + [209] (byte) gen_chargen_sprite::y#1 ← ++ (byte) gen_chargen_sprite::y#2 + [210] if((byte) gen_chargen_sprite::y#1!=(byte) 8) goto gen_chargen_sprite::@1 to:gen_chargen_sprite::@9 gen_chargen_sprite::@9: scope:[gen_chargen_sprite] from gen_chargen_sprite::@8 - [208] *((const byte*) PROCPORT#0) ← (byte) $37 + [211] *((const byte*) PROCPORT#0) ← (byte) $37 asm { cli } to:gen_chargen_sprite::@return gen_chargen_sprite::@return: scope:[gen_chargen_sprite] from gen_chargen_sprite::@9 - [210] return + [213] return to:@return place_sprites: scope:[place_sprites] from init::@2 - [211] *((const byte*) SPRITES_ENABLE#0) ← (byte) $7f - [212] *((const byte*) SPRITES_EXPAND_X#0) ← (byte) $7f - [213] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte) $7f + [214] *((const byte*) SPRITES_ENABLE#0) ← (byte) $7f + [215] *((const byte*) SPRITES_EXPAND_X#0) ← (byte) $7f + [216] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte) $7f to:place_sprites::@1 place_sprites::@1: scope:[place_sprites] from place_sprites place_sprites::@1 - [214] (byte) place_sprites::col#2 ← phi( place_sprites/(byte) 5 place_sprites::@1/(byte) place_sprites::col#1 ) - [214] (byte) place_sprites::j2#3 ← phi( place_sprites/(byte) 0 place_sprites::@1/(byte) place_sprites::j2#2 ) - [214] (byte) place_sprites::spr_x#2 ← phi( place_sprites/(byte) $3c place_sprites::@1/(byte) place_sprites::spr_x#1 ) - [214] (byte) place_sprites::j#2 ← phi( place_sprites/(byte) 0 place_sprites::@1/(byte) place_sprites::j#1 ) - [214] (byte) place_sprites::spr_id#2 ← phi( place_sprites/(byte)(word)(const byte*) sprites#0/(byte) $40 place_sprites::@1/(byte) place_sprites::spr_id#1 ) - [215] *((const byte*) place_sprites::sprites_ptr#0 + (byte) place_sprites::j#2) ← (byte) place_sprites::spr_id#2 - [216] (byte) place_sprites::spr_id#1 ← ++ (byte) place_sprites::spr_id#2 - [217] *((const byte*) SPRITES_XPOS#0 + (byte) place_sprites::j2#3) ← (byte) place_sprites::spr_x#2 - [218] *((const byte*) SPRITES_YPOS#0 + (byte) place_sprites::j2#3) ← (byte) $50 - [219] *((const byte*) SPRITES_COLS#0 + (byte) place_sprites::j#2) ← (byte) place_sprites::col#2 - [220] (byte) place_sprites::spr_x#1 ← (byte) place_sprites::spr_x#2 + (byte) $20 - [221] (byte) place_sprites::col#1 ← (byte) place_sprites::col#2 ^ (byte)(number) 7^(number) 5 - [222] (byte) place_sprites::j2#1 ← ++ (byte) place_sprites::j2#3 - [223] (byte) place_sprites::j2#2 ← ++ (byte) place_sprites::j2#1 - [224] (byte) place_sprites::j#1 ← ++ (byte) place_sprites::j#2 - [225] if((byte) place_sprites::j#1!=(byte) 7) goto place_sprites::@1 + [217] (byte) place_sprites::col#2 ← phi( place_sprites/(byte) 5 place_sprites::@1/(byte) place_sprites::col#1 ) + [217] (byte) place_sprites::j2#3 ← phi( place_sprites/(byte) 0 place_sprites::@1/(byte) place_sprites::j2#2 ) + [217] (byte) place_sprites::spr_x#2 ← phi( place_sprites/(byte) $3c place_sprites::@1/(byte) place_sprites::spr_x#1 ) + [217] (byte) place_sprites::j#2 ← phi( place_sprites/(byte) 0 place_sprites::@1/(byte) place_sprites::j#1 ) + [217] (byte) place_sprites::spr_id#2 ← phi( place_sprites/(byte)(word)(const byte*) sprites#0/(byte) $40 place_sprites::@1/(byte) place_sprites::spr_id#1 ) + [218] *((const byte*) place_sprites::sprites_ptr#0 + (byte) place_sprites::j#2) ← (byte) place_sprites::spr_id#2 + [219] (byte) place_sprites::spr_id#1 ← ++ (byte) place_sprites::spr_id#2 + [220] *((const byte*) SPRITES_XPOS#0 + (byte) place_sprites::j2#3) ← (byte) place_sprites::spr_x#2 + [221] *((const byte*) SPRITES_YPOS#0 + (byte) place_sprites::j2#3) ← (byte) $50 + [222] *((const byte*) SPRITES_COLS#0 + (byte) place_sprites::j#2) ← (byte) place_sprites::col#2 + [223] (byte) place_sprites::spr_x#1 ← (byte) place_sprites::spr_x#2 + (byte) $20 + [224] (byte) place_sprites::col#1 ← (byte) place_sprites::col#2 ^ (byte)(number) 7^(number) 5 + [225] (byte) place_sprites::j2#1 ← ++ (byte) place_sprites::j2#3 + [226] (byte) place_sprites::j2#2 ← ++ (byte) place_sprites::j2#1 + [227] (byte) place_sprites::j#1 ← ++ (byte) place_sprites::j#2 + [228] if((byte) place_sprites::j#1!=(byte) 7) goto place_sprites::@1 to:place_sprites::@return place_sprites::@return: scope:[place_sprites] from place_sprites::@1 - [226] return + [229] return to:@return @@ -3247,6 +3332,9 @@ VARIABLE REGISTER WEIGHTS (byte*) SPRITES_YPOS (void()) addMEMtoFAC((byte*) addMEMtoFAC::mem) (byte*) addMEMtoFAC::mem +(byte~) addMEMtoFAC::prepareMEM1_$0 +(byte~) addMEMtoFAC::prepareMEM1_$1 +(word) addMEMtoFAC::prepareMEM1_mem (void()) anim() (byte~) anim::$6 101.0 (byte~) anim::$7 202.0 @@ -3280,7 +3368,12 @@ VARIABLE REGISTER WEIGHTS (byte*) clear_screen::sc#4 16.5 (void()) divMEMbyFAC((byte*) divMEMbyFAC::mem) (byte*) divMEMbyFAC::mem -(byte*) divMEMbyFAC::mem#2 2.0 +(byte*) divMEMbyFAC::mem#2 +(byte~) divMEMbyFAC::prepareMEM1_$0 +(byte~) divMEMbyFAC::prepareMEM1_$0#0 4.0 +(byte~) divMEMbyFAC::prepareMEM1_$1 +(byte~) divMEMbyFAC::prepareMEM1_$1#0 4.0 +(word) divMEMbyFAC::prepareMEM1_mem (void()) gen_chargen_sprite((byte) gen_chargen_sprite::ch , (byte*) gen_chargen_sprite::sprite) (word~) gen_chargen_sprite::$0 4.0 (word~) gen_chargen_sprite::$1 4.0 @@ -3363,7 +3456,12 @@ VARIABLE REGISTER WEIGHTS (byte*) memLo (void()) mulFACbyMEM((byte*) mulFACbyMEM::mem) (byte*) mulFACbyMEM::mem -(byte*) mulFACbyMEM::mem#2 2.0 +(byte*) mulFACbyMEM::mem#2 +(byte~) mulFACbyMEM::prepareMEM1_$0 +(byte~) mulFACbyMEM::prepareMEM1_$0#0 4.0 +(byte~) mulFACbyMEM::prepareMEM1_$1 +(byte~) mulFACbyMEM::prepareMEM1_$1#0 4.0 +(word) mulFACbyMEM::prepareMEM1_mem (void()) place_sprites() (byte) place_sprites::col (byte) place_sprites::col#1 4.4 @@ -3382,15 +3480,6 @@ VARIABLE REGISTER WEIGHTS (byte) place_sprites::spr_x#1 3.6666666666666665 (byte) place_sprites::spr_x#2 5.5 (byte*) place_sprites::sprites_ptr -(void()) prepareMEM((byte*) prepareMEM::mem) -(byte~) prepareMEM::$0 4.0 -(byte~) prepareMEM::$1 4.0 -(byte*) prepareMEM::mem -(byte*) prepareMEM::mem#0 4.0 -(byte*) prepareMEM::mem#1 4.0 -(byte*) prepareMEM::mem#3 4.0 -(byte*) prepareMEM::mem#4 4.0 -(byte*) prepareMEM::mem#5 3.9999999999999996 (byte*) progress_cursor (byte*) progress_cursor#10 4.0 (byte*) progress_cursor#11 3.4 @@ -3406,15 +3495,25 @@ VARIABLE REGISTER WEIGHTS (byte*) progress_init::line#2 0.06896551724137931 (void()) setARGtoFAC() (void()) setFAC((word) setFAC::w) +(byte~) setFAC::prepareMEM1_$0 +(byte~) setFAC::prepareMEM1_$0#0 4.0 +(byte~) setFAC::prepareMEM1_$1 +(byte~) setFAC::prepareMEM1_$1#0 4.0 +(word) setFAC::prepareMEM1_mem +(word) setFAC::prepareMEM1_mem#0 9.999999999999998 (word) setFAC::w (word) setFAC::w#0 4.0 (word) setFAC::w#1 4.0 (word) setFAC::w#3 22.0 (word) setFAC::w#4 22.0 -(word) setFAC::w#5 26.0 (void()) setMEMtoFAC((byte*) setMEMtoFAC::mem) (byte*) setMEMtoFAC::mem -(byte*) setMEMtoFAC::mem#5 2.0 +(byte*) setMEMtoFAC::mem#5 +(byte~) setMEMtoFAC::prepareMEM1_$0 +(byte~) setMEMtoFAC::prepareMEM1_$0#0 4.0 +(byte~) setMEMtoFAC::prepareMEM1_$1 +(byte~) setMEMtoFAC::prepareMEM1_$1#0 4.0 +(word) setMEMtoFAC::prepareMEM1_mem (void()) sinFAC() (byte) sin_idx_x (byte) sin_idx_x#11 1.625 @@ -3448,10 +3547,9 @@ Initial phi equivalence classes [ gen_sintab::i#10 gen_sintab::i#1 ] [ progress_idx#14 progress_idx#12 progress_idx#10 ] [ progress_cursor#13 progress_init::line#2 progress_cursor#11 progress_cursor#10 ] -[ prepareMEM::mem#5 prepareMEM::mem#3 prepareMEM::mem#4 prepareMEM::mem#0 prepareMEM::mem#1 ] [ mulFACbyMEM::mem#2 ] [ divMEMbyFAC::mem#2 ] -[ setFAC::w#5 setFAC::w#0 setFAC::w#3 setFAC::w#4 setFAC::w#1 ] +[ setFAC::prepareMEM1_mem#0 setFAC::w#0 setFAC::w#3 setFAC::w#4 setFAC::w#1 ] [ setMEMtoFAC::mem#5 ] [ gen_sprites::i#2 gen_sprites::i#1 ] [ gen_sprites::spr#2 gen_sprites::spr#1 ] @@ -3476,8 +3574,14 @@ Added variable getFAC::return#2 to zero page equivalence class [ getFAC::return# Added variable gen_sintab::$24 to zero page equivalence class [ gen_sintab::$24 ] Added variable gen_sintab::$25 to zero page equivalence class [ gen_sintab::$25 ] Added variable getFAC::return#0 to zero page equivalence class [ getFAC::return#0 ] -Added variable prepareMEM::$0 to zero page equivalence class [ prepareMEM::$0 ] -Added variable prepareMEM::$1 to zero page equivalence class [ prepareMEM::$1 ] +Added variable mulFACbyMEM::prepareMEM1_$0#0 to zero page equivalence class [ mulFACbyMEM::prepareMEM1_$0#0 ] +Added variable mulFACbyMEM::prepareMEM1_$1#0 to zero page equivalence class [ mulFACbyMEM::prepareMEM1_$1#0 ] +Added variable divMEMbyFAC::prepareMEM1_$0#0 to zero page equivalence class [ divMEMbyFAC::prepareMEM1_$0#0 ] +Added variable divMEMbyFAC::prepareMEM1_$1#0 to zero page equivalence class [ divMEMbyFAC::prepareMEM1_$1#0 ] +Added variable setFAC::prepareMEM1_$0#0 to zero page equivalence class [ setFAC::prepareMEM1_$0#0 ] +Added variable setFAC::prepareMEM1_$1#0 to zero page equivalence class [ setFAC::prepareMEM1_$1#0 ] +Added variable setMEMtoFAC::prepareMEM1_$0#0 to zero page equivalence class [ setMEMtoFAC::prepareMEM1_$0#0 ] +Added variable setMEMtoFAC::prepareMEM1_$1#0 to zero page equivalence class [ setMEMtoFAC::prepareMEM1_$1#0 ] Added variable gen_chargen_sprite::ch#0 to zero page equivalence class [ gen_chargen_sprite::ch#0 ] Added variable gen_chargen_sprite::$0 to zero page equivalence class [ gen_chargen_sprite::$0 ] Added variable gen_chargen_sprite::$1 to zero page equivalence class [ gen_chargen_sprite::$1 ] @@ -3502,10 +3606,9 @@ Complete equivalence classes [ gen_sintab::i#10 gen_sintab::i#1 ] [ progress_idx#14 progress_idx#12 progress_idx#10 ] [ progress_cursor#13 progress_init::line#2 progress_cursor#11 progress_cursor#10 ] -[ prepareMEM::mem#5 prepareMEM::mem#3 prepareMEM::mem#4 prepareMEM::mem#0 prepareMEM::mem#1 ] [ mulFACbyMEM::mem#2 ] [ divMEMbyFAC::mem#2 ] -[ setFAC::w#5 setFAC::w#0 setFAC::w#3 setFAC::w#4 setFAC::w#1 ] +[ setFAC::prepareMEM1_mem#0 setFAC::w#0 setFAC::w#3 setFAC::w#4 setFAC::w#1 ] [ setMEMtoFAC::mem#5 ] [ gen_sprites::i#2 gen_sprites::i#1 ] [ gen_sprites::spr#2 gen_sprites::spr#1 ] @@ -3530,8 +3633,14 @@ Complete equivalence classes [ gen_sintab::$24 ] [ gen_sintab::$25 ] [ getFAC::return#0 ] -[ prepareMEM::$0 ] -[ prepareMEM::$1 ] +[ mulFACbyMEM::prepareMEM1_$0#0 ] +[ mulFACbyMEM::prepareMEM1_$1#0 ] +[ divMEMbyFAC::prepareMEM1_$0#0 ] +[ divMEMbyFAC::prepareMEM1_$1#0 ] +[ setFAC::prepareMEM1_$0#0 ] +[ setFAC::prepareMEM1_$1#0 ] +[ setMEMtoFAC::prepareMEM1_$0#0 ] +[ setMEMtoFAC::prepareMEM1_$1#0 ] [ gen_chargen_sprite::ch#0 ] [ gen_chargen_sprite::$0 ] [ gen_chargen_sprite::$1 ] @@ -3555,43 +3664,48 @@ Allocated zp ZP_WORD:19 [ gen_sintab::sintab#13 ] Allocated zp ZP_BYTE:21 [ gen_sintab::i#10 gen_sintab::i#1 ] Allocated zp ZP_BYTE:22 [ progress_idx#14 progress_idx#12 progress_idx#10 ] Allocated zp ZP_WORD:23 [ progress_cursor#13 progress_init::line#2 progress_cursor#11 progress_cursor#10 ] -Allocated zp ZP_WORD:25 [ prepareMEM::mem#5 prepareMEM::mem#3 prepareMEM::mem#4 prepareMEM::mem#0 prepareMEM::mem#1 ] -Allocated zp ZP_WORD:27 [ mulFACbyMEM::mem#2 ] -Allocated zp ZP_WORD:29 [ divMEMbyFAC::mem#2 ] -Allocated zp ZP_WORD:31 [ setFAC::w#5 setFAC::w#0 setFAC::w#3 setFAC::w#4 setFAC::w#1 ] -Allocated zp ZP_WORD:33 [ setMEMtoFAC::mem#5 ] -Allocated zp ZP_BYTE:35 [ gen_sprites::i#2 gen_sprites::i#1 ] -Allocated zp ZP_WORD:36 [ gen_sprites::spr#2 gen_sprites::spr#1 ] -Allocated zp ZP_BYTE:38 [ gen_chargen_sprite::y#2 gen_chargen_sprite::y#1 ] -Allocated zp ZP_BYTE:39 [ gen_chargen_sprite::bits#2 gen_chargen_sprite::bits#0 gen_chargen_sprite::bits#1 ] -Allocated zp ZP_BYTE:40 [ gen_chargen_sprite::x#6 gen_chargen_sprite::x#1 ] -Allocated zp ZP_BYTE:41 [ gen_chargen_sprite::c#3 ] -Allocated zp ZP_BYTE:42 [ gen_chargen_sprite::s_gen#3 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen#6 gen_chargen_sprite::s_gen#1 ] -Allocated zp ZP_BYTE:43 [ gen_chargen_sprite::s_gen_cnt#3 gen_chargen_sprite::s_gen_cnt#4 gen_chargen_sprite::s_gen_cnt#5 gen_chargen_sprite::s_gen_cnt#1 ] -Allocated zp ZP_BYTE:44 [ gen_chargen_sprite::b#2 gen_chargen_sprite::b#1 ] -Allocated zp ZP_WORD:45 [ gen_chargen_sprite::sprite#3 gen_chargen_sprite::sprite#10 gen_chargen_sprite::sprite#11 gen_chargen_sprite::sprite#0 gen_chargen_sprite::sprite#2 gen_chargen_sprite::sprite#4 gen_chargen_sprite::sprite#1 ] -Allocated zp ZP_BYTE:47 [ place_sprites::spr_id#2 place_sprites::spr_id#1 ] -Allocated zp ZP_BYTE:48 [ place_sprites::j#2 place_sprites::j#1 ] -Allocated zp ZP_BYTE:49 [ place_sprites::spr_x#2 place_sprites::spr_x#1 ] -Allocated zp ZP_BYTE:50 [ place_sprites::j2#3 place_sprites::j2#2 ] -Allocated zp ZP_BYTE:51 [ place_sprites::col#2 place_sprites::col#1 ] -Allocated zp ZP_WORD:52 [ anim::x#0 ] -Allocated zp ZP_BYTE:54 [ anim::$6 ] -Allocated zp ZP_BYTE:55 [ anim::$7 ] -Allocated zp ZP_BYTE:56 [ anim::$9 ] -Allocated zp ZP_WORD:57 [ getFAC::return#2 ] -Allocated zp ZP_WORD:59 [ gen_sintab::$24 ] -Allocated zp ZP_BYTE:61 [ gen_sintab::$25 ] -Allocated zp ZP_WORD:62 [ getFAC::return#0 ] -Allocated zp ZP_BYTE:64 [ prepareMEM::$0 ] -Allocated zp ZP_BYTE:65 [ prepareMEM::$1 ] -Allocated zp ZP_BYTE:66 [ gen_chargen_sprite::ch#0 ] -Allocated zp ZP_WORD:67 [ gen_chargen_sprite::$0 ] -Allocated zp ZP_WORD:69 [ gen_chargen_sprite::$1 ] -Allocated zp ZP_WORD:71 [ gen_chargen_sprite::chargen#0 ] -Allocated zp ZP_BYTE:73 [ gen_chargen_sprite::$3 ] -Allocated zp ZP_BYTE:74 [ gen_chargen_sprite::$6 ] -Allocated zp ZP_BYTE:75 [ place_sprites::j2#1 ] +Allocated zp ZP_WORD:25 [ mulFACbyMEM::mem#2 ] +Allocated zp ZP_WORD:27 [ divMEMbyFAC::mem#2 ] +Allocated zp ZP_WORD:29 [ setFAC::prepareMEM1_mem#0 setFAC::w#0 setFAC::w#3 setFAC::w#4 setFAC::w#1 ] +Allocated zp ZP_WORD:31 [ setMEMtoFAC::mem#5 ] +Allocated zp ZP_BYTE:33 [ gen_sprites::i#2 gen_sprites::i#1 ] +Allocated zp ZP_WORD:34 [ gen_sprites::spr#2 gen_sprites::spr#1 ] +Allocated zp ZP_BYTE:36 [ gen_chargen_sprite::y#2 gen_chargen_sprite::y#1 ] +Allocated zp ZP_BYTE:37 [ gen_chargen_sprite::bits#2 gen_chargen_sprite::bits#0 gen_chargen_sprite::bits#1 ] +Allocated zp ZP_BYTE:38 [ gen_chargen_sprite::x#6 gen_chargen_sprite::x#1 ] +Allocated zp ZP_BYTE:39 [ gen_chargen_sprite::c#3 ] +Allocated zp ZP_BYTE:40 [ gen_chargen_sprite::s_gen#3 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen#6 gen_chargen_sprite::s_gen#1 ] +Allocated zp ZP_BYTE:41 [ gen_chargen_sprite::s_gen_cnt#3 gen_chargen_sprite::s_gen_cnt#4 gen_chargen_sprite::s_gen_cnt#5 gen_chargen_sprite::s_gen_cnt#1 ] +Allocated zp ZP_BYTE:42 [ gen_chargen_sprite::b#2 gen_chargen_sprite::b#1 ] +Allocated zp ZP_WORD:43 [ gen_chargen_sprite::sprite#3 gen_chargen_sprite::sprite#10 gen_chargen_sprite::sprite#11 gen_chargen_sprite::sprite#0 gen_chargen_sprite::sprite#2 gen_chargen_sprite::sprite#4 gen_chargen_sprite::sprite#1 ] +Allocated zp ZP_BYTE:45 [ place_sprites::spr_id#2 place_sprites::spr_id#1 ] +Allocated zp ZP_BYTE:46 [ place_sprites::j#2 place_sprites::j#1 ] +Allocated zp ZP_BYTE:47 [ place_sprites::spr_x#2 place_sprites::spr_x#1 ] +Allocated zp ZP_BYTE:48 [ place_sprites::j2#3 place_sprites::j2#2 ] +Allocated zp ZP_BYTE:49 [ place_sprites::col#2 place_sprites::col#1 ] +Allocated zp ZP_WORD:50 [ anim::x#0 ] +Allocated zp ZP_BYTE:52 [ anim::$6 ] +Allocated zp ZP_BYTE:53 [ anim::$7 ] +Allocated zp ZP_BYTE:54 [ anim::$9 ] +Allocated zp ZP_WORD:55 [ getFAC::return#2 ] +Allocated zp ZP_WORD:57 [ gen_sintab::$24 ] +Allocated zp ZP_BYTE:59 [ gen_sintab::$25 ] +Allocated zp ZP_WORD:60 [ getFAC::return#0 ] +Allocated zp ZP_BYTE:62 [ mulFACbyMEM::prepareMEM1_$0#0 ] +Allocated zp ZP_BYTE:63 [ mulFACbyMEM::prepareMEM1_$1#0 ] +Allocated zp ZP_BYTE:64 [ divMEMbyFAC::prepareMEM1_$0#0 ] +Allocated zp ZP_BYTE:65 [ divMEMbyFAC::prepareMEM1_$1#0 ] +Allocated zp ZP_BYTE:66 [ setFAC::prepareMEM1_$0#0 ] +Allocated zp ZP_BYTE:67 [ setFAC::prepareMEM1_$1#0 ] +Allocated zp ZP_BYTE:68 [ setMEMtoFAC::prepareMEM1_$0#0 ] +Allocated zp ZP_BYTE:69 [ setMEMtoFAC::prepareMEM1_$1#0 ] +Allocated zp ZP_BYTE:70 [ gen_chargen_sprite::ch#0 ] +Allocated zp ZP_WORD:71 [ gen_chargen_sprite::$0 ] +Allocated zp ZP_WORD:73 [ gen_chargen_sprite::$1 ] +Allocated zp ZP_WORD:75 [ gen_chargen_sprite::chargen#0 ] +Allocated zp ZP_BYTE:77 [ gen_chargen_sprite::$3 ] +Allocated zp ZP_BYTE:78 [ gen_chargen_sprite::$6 ] +Allocated zp ZP_BYTE:79 [ place_sprites::j2#1 ] INITIAL ASM Target platform is c64basic @@ -3681,12 +3795,12 @@ main: { } // anim anim: { - .label _6 = $36 - .label _7 = $37 - .label _9 = $38 + .label _6 = $34 + .label _7 = $35 + .label _9 = $36 .label xidx = 4 .label yidx = 8 - .label x = $34 + .label x = $32 .label x_msb = 5 .label j2 = 6 .label j = 9 @@ -3913,7 +4027,7 @@ init: { // init::@3 b3: // [53] call gen_sprites - // [169] phi from init::@3 to gen_sprites [phi:init::@3->gen_sprites] + // [172] phi from init::@3 to gen_sprites [phi:init::@3->gen_sprites] gen_sprites_from_b3: jsr gen_sprites // [54] phi from init::@3 to init::@4 [phi:init::@3->init::@4] @@ -3922,9 +4036,9 @@ init: { // init::@4 b4: // [55] call progress_init - // [167] phi from init::@4 to progress_init [phi:init::@4->progress_init] + // [170] phi from init::@4 to progress_init [phi:init::@4->progress_init] progress_init_from_b4: - // [167] phi (byte*) progress_init::line#2 = (const byte*) SCREEN#0 [phi:init::@4->progress_init#0] -- pbuz1=pbuc1 + // [170] phi (byte*) progress_init::line#2 = (const byte*) SCREEN#0 [phi:init::@4->progress_init#0] -- pbuz1=pbuc1 lda #SCREEN @@ -3959,9 +4073,9 @@ init: { // init::@6 b6: // [59] call progress_init - // [167] phi from init::@6 to progress_init [phi:init::@6->progress_init] + // [170] phi from init::@6 to progress_init [phi:init::@6->progress_init] progress_init_from_b6: - // [167] phi (byte*) progress_init::line#2 = (const byte*) SCREEN#0+(byte) $28 [phi:init::@6->progress_init#0] -- pbuz1=pbuc1 + // [170] phi (byte*) progress_init::line#2 = (const byte*) SCREEN#0+(byte) $28 [phi:init::@6->progress_init#0] -- pbuz1=pbuc1 lda #SCREEN+$28 @@ -4059,8 +4173,8 @@ clear_screen: { gen_sintab: { // amplitude/2 .label f_2pi = $e2e5 - .label _24 = $3b - .label _25 = $3d + .label _24 = $39 + .label _25 = $3b .label i = $15 .label max = $f .label min = $10 @@ -4072,9 +4186,9 @@ gen_sintab: { lda #0 sta.z setFAC.w+1 // [73] call setFAC - // [153] phi from gen_sintab to setFAC [phi:gen_sintab->setFAC] + // [152] phi from gen_sintab to setFAC [phi:gen_sintab->setFAC] setFAC_from_gen_sintab: - // [153] phi (word) setFAC::w#5 = (word) setFAC::w#0 [phi:gen_sintab->setFAC#0] -- register_copy + // [152] phi (word) setFAC::prepareMEM1_mem#0 = (word) setFAC::w#0 [phi:gen_sintab->setFAC#0] -- register_copy jsr setFAC // [74] phi from gen_sintab to gen_sintab::@3 [phi:gen_sintab->gen_sintab::@3] b3_from_gen_sintab: @@ -4092,9 +4206,9 @@ gen_sintab: { lda #0 sta.z setFAC.w+1 // [77] call setFAC - // [153] phi from gen_sintab::@4 to setFAC [phi:gen_sintab::@4->setFAC] + // [152] phi from gen_sintab::@4 to setFAC [phi:gen_sintab::@4->setFAC] setFAC_from_b4: - // [153] phi (word) setFAC::w#5 = (word) setFAC::w#1 [phi:gen_sintab::@4->setFAC#0] -- register_copy + // [152] phi (word) setFAC::prepareMEM1_mem#0 = (word) setFAC::w#1 [phi:gen_sintab::@4->setFAC#0] -- register_copy jsr setFAC // [78] phi from gen_sintab::@4 to gen_sintab::@5 [phi:gen_sintab::@4->gen_sintab::@5] b5_from_b4: @@ -4102,9 +4216,9 @@ gen_sintab: { // gen_sintab::@5 b5: // [79] call setMEMtoFAC - // [158] phi from gen_sintab::@5 to setMEMtoFAC [phi:gen_sintab::@5->setMEMtoFAC] + // [159] phi from gen_sintab::@5 to setMEMtoFAC [phi:gen_sintab::@5->setMEMtoFAC] setMEMtoFAC_from_b5: - // [158] phi (byte*) setMEMtoFAC::mem#5 = (const byte[]) gen_sintab::f_min#0 [phi:gen_sintab::@5->setMEMtoFAC#0] -- pbuz1=pbuc1 + // [159] phi (byte*) setMEMtoFAC::mem#5 = (const byte[]) gen_sintab::f_min#0 [phi:gen_sintab::@5->setMEMtoFAC#0] -- pbuz1=pbuc1 lda #f_min @@ -4123,9 +4237,9 @@ gen_sintab: { // gen_sintab::@7 b7: // [83] call setMEMtoFAC - // [158] phi from gen_sintab::@7 to setMEMtoFAC [phi:gen_sintab::@7->setMEMtoFAC] + // [159] phi from gen_sintab::@7 to setMEMtoFAC [phi:gen_sintab::@7->setMEMtoFAC] setMEMtoFAC_from_b7: - // [158] phi (byte*) setMEMtoFAC::mem#5 = (const byte[]) gen_sintab::f_amp#0 [phi:gen_sintab::@7->setMEMtoFAC#0] -- pbuz1=pbuc1 + // [159] phi (byte*) setMEMtoFAC::mem#5 = (const byte[]) gen_sintab::f_amp#0 [phi:gen_sintab::@7->setMEMtoFAC#0] -- pbuz1=pbuc1 lda #f_amp @@ -4137,13 +4251,13 @@ gen_sintab: { // gen_sintab::@8 b8: // [85] call setFAC - // [153] phi from gen_sintab::@8 to setFAC [phi:gen_sintab::@8->setFAC] + // [152] phi from gen_sintab::@8 to setFAC [phi:gen_sintab::@8->setFAC] setFAC_from_b8: - // [153] phi (word) setFAC::w#5 = (byte) 2 [phi:gen_sintab::@8->setFAC#0] -- vwuz1=vbuc1 + // [152] phi (word) setFAC::prepareMEM1_mem#0 = (byte) 2 [phi:gen_sintab::@8->setFAC#0] -- vwuz1=vbuc1 lda #<2 - sta.z setFAC.w + sta.z setFAC.prepareMEM1_mem lda #>2 - sta.z setFAC.w+1 + sta.z setFAC.prepareMEM1_mem+1 jsr setFAC // [86] phi from gen_sintab::@8 to gen_sintab::@9 [phi:gen_sintab::@8->gen_sintab::@9] b9_from_b8: @@ -4151,9 +4265,9 @@ gen_sintab: { // gen_sintab::@9 b9: // [87] call divMEMbyFAC - // [148] phi from gen_sintab::@9 to divMEMbyFAC [phi:gen_sintab::@9->divMEMbyFAC] + // [145] phi from gen_sintab::@9 to divMEMbyFAC [phi:gen_sintab::@9->divMEMbyFAC] divMEMbyFAC_from_b9: - // [148] phi (byte*) divMEMbyFAC::mem#2 = (const byte[]) gen_sintab::f_amp#0 [phi:gen_sintab::@9->divMEMbyFAC#0] -- pbuz1=pbuc1 + // [145] phi (byte*) divMEMbyFAC::mem#2 = (const byte[]) gen_sintab::f_amp#0 [phi:gen_sintab::@9->divMEMbyFAC#0] -- pbuz1=pbuc1 lda #f_amp @@ -4165,9 +4279,9 @@ gen_sintab: { // gen_sintab::@10 b10: // [89] call setMEMtoFAC - // [158] phi from gen_sintab::@10 to setMEMtoFAC [phi:gen_sintab::@10->setMEMtoFAC] + // [159] phi from gen_sintab::@10 to setMEMtoFAC [phi:gen_sintab::@10->setMEMtoFAC] setMEMtoFAC_from_b10: - // [158] phi (byte*) setMEMtoFAC::mem#5 = (const byte[]) gen_sintab::f_amp#0 [phi:gen_sintab::@10->setMEMtoFAC#0] -- pbuz1=pbuc1 + // [159] phi (byte*) setMEMtoFAC::mem#5 = (const byte[]) gen_sintab::f_amp#0 [phi:gen_sintab::@10->setMEMtoFAC#0] -- pbuz1=pbuc1 lda #f_amp @@ -4188,9 +4302,9 @@ gen_sintab: { // gen_sintab::@12 b12: // [93] call setMEMtoFAC - // [158] phi from gen_sintab::@12 to setMEMtoFAC [phi:gen_sintab::@12->setMEMtoFAC] + // [159] phi from gen_sintab::@12 to setMEMtoFAC [phi:gen_sintab::@12->setMEMtoFAC] setMEMtoFAC_from_b12: - // [158] phi (byte*) setMEMtoFAC::mem#5 = (const byte[]) gen_sintab::f_min#0 [phi:gen_sintab::@12->setMEMtoFAC#0] -- pbuz1=pbuc1 + // [159] phi (byte*) setMEMtoFAC::mem#5 = (const byte[]) gen_sintab::f_min#0 [phi:gen_sintab::@12->setMEMtoFAC#0] -- pbuz1=pbuc1 lda #f_min @@ -4226,9 +4340,9 @@ gen_sintab: { lda #0 sta.z setFAC.w+1 // [98] call setFAC - // [153] phi from gen_sintab::@2 to setFAC [phi:gen_sintab::@2->setFAC] + // [152] phi from gen_sintab::@2 to setFAC [phi:gen_sintab::@2->setFAC] setFAC_from_b2: - // [153] phi (word) setFAC::w#5 = (word) setFAC::w#3 [phi:gen_sintab::@2->setFAC#0] -- register_copy + // [152] phi (word) setFAC::prepareMEM1_mem#0 = (word) setFAC::w#3 [phi:gen_sintab::@2->setFAC#0] -- register_copy jsr setFAC // [99] phi from gen_sintab::@2 to gen_sintab::@13 [phi:gen_sintab::@2->gen_sintab::@13] b13_from_b2: @@ -4236,9 +4350,9 @@ gen_sintab: { // gen_sintab::@13 b13: // [100] call mulFACbyMEM - // [141] phi from gen_sintab::@13 to mulFACbyMEM [phi:gen_sintab::@13->mulFACbyMEM] + // [136] phi from gen_sintab::@13 to mulFACbyMEM [phi:gen_sintab::@13->mulFACbyMEM] mulFACbyMEM_from_b13: - // [141] phi (byte*) mulFACbyMEM::mem#2 = (const byte*) gen_sintab::f_2pi#0 [phi:gen_sintab::@13->mulFACbyMEM#0] -- pbuz1=pbuc1 + // [136] phi (byte*) mulFACbyMEM::mem#2 = (const byte*) gen_sintab::f_2pi#0 [phi:gen_sintab::@13->mulFACbyMEM#0] -- pbuz1=pbuc1 lda #f_2pi @@ -4250,9 +4364,9 @@ gen_sintab: { // gen_sintab::@14 b14: // [102] call setMEMtoFAC - // [158] phi from gen_sintab::@14 to setMEMtoFAC [phi:gen_sintab::@14->setMEMtoFAC] + // [159] phi from gen_sintab::@14 to setMEMtoFAC [phi:gen_sintab::@14->setMEMtoFAC] setMEMtoFAC_from_b14: - // [158] phi (byte*) setMEMtoFAC::mem#5 = (const byte[]) gen_sintab::f_i#0 [phi:gen_sintab::@14->setMEMtoFAC#0] -- pbuz1=pbuc1 + // [159] phi (byte*) setMEMtoFAC::mem#5 = (const byte[]) gen_sintab::f_i#0 [phi:gen_sintab::@14->setMEMtoFAC#0] -- pbuz1=pbuc1 lda #f_i @@ -4267,9 +4381,9 @@ gen_sintab: { lda #0 sta.z setFAC.w+1 // [104] call setFAC - // [153] phi from gen_sintab::@15 to setFAC [phi:gen_sintab::@15->setFAC] + // [152] phi from gen_sintab::@15 to setFAC [phi:gen_sintab::@15->setFAC] setFAC_from_b15: - // [153] phi (word) setFAC::w#5 = (word) setFAC::w#4 [phi:gen_sintab::@15->setFAC#0] -- register_copy + // [152] phi (word) setFAC::prepareMEM1_mem#0 = (word) setFAC::w#4 [phi:gen_sintab::@15->setFAC#0] -- register_copy jsr setFAC // [105] phi from gen_sintab::@15 to gen_sintab::@16 [phi:gen_sintab::@15->gen_sintab::@16] b16_from_b15: @@ -4277,9 +4391,9 @@ gen_sintab: { // gen_sintab::@16 b16: // [106] call divMEMbyFAC - // [148] phi from gen_sintab::@16 to divMEMbyFAC [phi:gen_sintab::@16->divMEMbyFAC] + // [145] phi from gen_sintab::@16 to divMEMbyFAC [phi:gen_sintab::@16->divMEMbyFAC] divMEMbyFAC_from_b16: - // [148] phi (byte*) divMEMbyFAC::mem#2 = (const byte[]) gen_sintab::f_i#0 [phi:gen_sintab::@16->divMEMbyFAC#0] -- pbuz1=pbuc1 + // [145] phi (byte*) divMEMbyFAC::mem#2 = (const byte[]) gen_sintab::f_i#0 [phi:gen_sintab::@16->divMEMbyFAC#0] -- pbuz1=pbuc1 lda #f_i @@ -4298,9 +4412,9 @@ gen_sintab: { // gen_sintab::@18 b18: // [110] call mulFACbyMEM - // [141] phi from gen_sintab::@18 to mulFACbyMEM [phi:gen_sintab::@18->mulFACbyMEM] + // [136] phi from gen_sintab::@18 to mulFACbyMEM [phi:gen_sintab::@18->mulFACbyMEM] mulFACbyMEM_from_b18: - // [141] phi (byte*) mulFACbyMEM::mem#2 = (const byte[]) gen_sintab::f_amp#0 [phi:gen_sintab::@18->mulFACbyMEM#0] -- pbuz1=pbuc1 + // [136] phi (byte*) mulFACbyMEM::mem#2 = (const byte[]) gen_sintab::f_amp#0 [phi:gen_sintab::@18->mulFACbyMEM#0] -- pbuz1=pbuc1 lda #f_amp @@ -4416,13 +4530,13 @@ progress_inc: { // Get the value of the FAC (floating point accumulator) as an integer 16bit word // Destroys the value in the FAC in the process getFAC: { - .label return = $3e - .label return_2 = $39 - // asm { jsr$b1aa sty$fe sta$ff } + .label return = $3c + .label return_2 = $37 + // asm { jsr$b1aa stymemLo stamemHi } // Load FAC (floating point accumulator) integer part into word register Y,A jsr $b1aa - sty.z $fe - sta.z $ff + sty memLo + sta memHi // [129] (word) getFAC::return#0 ← *((const byte*) memHi#0) w= *((const byte*) memLo#0) -- vwuz1=_deref_pbuc1_word__deref_pbuc2 lda memLo sta.z return @@ -4439,81 +4553,63 @@ getFAC: { // Set FAC to MEM (float saved in memory) plus FAC (float accumulator) // Reads 5 bytes from memory addMEMtoFAC: { - // [132] call prepareMEM - // [135] phi from addMEMtoFAC to prepareMEM [phi:addMEMtoFAC->prepareMEM] - prepareMEM_from_addMEMtoFAC: - // [135] phi (byte*) prepareMEM::mem#5 = (const byte[]) gen_sintab::f_min#0 [phi:addMEMtoFAC->prepareMEM#0] -- pbuz1=pbuc1 + jmp prepareMEM1 + // addMEMtoFAC::prepareMEM1 + prepareMEM1: + // [132] *((const byte*) memLo#0) ← <(word)(const byte[]) gen_sintab::f_min#0 -- _deref_pbuc1=vbuc2 lda #(word)(const byte[]) gen_sintab::f_min#0 -- _deref_pbuc1=vbuc2 lda #>gen_sintab.f_min - sta.z prepareMEM.mem+1 - jsr prepareMEM + sta memHi jmp b1 // addMEMtoFAC::@1 b1: - // asm { lda$fe ldy$ff jsr$b867 } - lda.z $fe - ldy.z $ff + // asm { ldamemLo ldymemHi jsr$b867 } + lda memLo + ldy memHi jsr $b867 jmp breturn // addMEMtoFAC::@return breturn: - // [134] return - rts -} - // prepareMEM -// Prepare MEM pointers for operations using MEM -// prepareMEM(byte* zeropage($19) mem) -prepareMEM: { - .label _0 = $40 - .label _1 = $41 - .label mem = $19 - // [136] (byte~) prepareMEM::$0 ← < (byte*) prepareMEM::mem#5 -- vbuz1=_lo_pbuz2 - lda.z mem - sta.z _0 - // [137] *((const byte*) memLo#0) ← (byte~) prepareMEM::$0 -- _deref_pbuc1=vbuz1 - lda.z _0 - sta memLo - // [138] (byte~) prepareMEM::$1 ← > (byte*) prepareMEM::mem#5 -- vbuz1=_hi_pbuz2 - lda.z mem+1 - sta.z _1 - // [139] *((const byte*) memHi#0) ← (byte~) prepareMEM::$1 -- _deref_pbuc1=vbuz1 - lda.z _1 - sta memHi - jmp breturn - // prepareMEM::@return - breturn: - // [140] return + // [135] return rts } // mulFACbyMEM // FAC = MEM*FAC // Set FAC to MEM (float saved in memory) multiplied by FAC (float accumulator) // Reads 5 bytes from memory -// mulFACbyMEM(byte* zeropage($1b) mem) +// mulFACbyMEM(byte* zeropage($19) mem) mulFACbyMEM: { - .label mem = $1b - // [142] (byte*) prepareMEM::mem#4 ← (byte*) mulFACbyMEM::mem#2 -- pbuz1=pbuz2 + .label prepareMEM1__0 = $3e + .label prepareMEM1__1 = $3f + .label mem = $19 + jmp prepareMEM1 + // mulFACbyMEM::prepareMEM1 + prepareMEM1: + // [137] (byte~) mulFACbyMEM::prepareMEM1_$0#0 ← < (word)(byte*) mulFACbyMEM::mem#2 -- vbuz1=_lo_vwuz2 lda.z mem - sta.z prepareMEM.mem + sta.z prepareMEM1__0 + // [138] *((const byte*) memLo#0) ← (byte~) mulFACbyMEM::prepareMEM1_$0#0 -- _deref_pbuc1=vbuz1 + lda.z prepareMEM1__0 + sta memLo + // [139] (byte~) mulFACbyMEM::prepareMEM1_$1#0 ← > (word)(byte*) mulFACbyMEM::mem#2 -- vbuz1=_hi_vwuz2 lda.z mem+1 - sta.z prepareMEM.mem+1 - // [143] call prepareMEM - // [135] phi from mulFACbyMEM to prepareMEM [phi:mulFACbyMEM->prepareMEM] - prepareMEM_from_mulFACbyMEM: - // [135] phi (byte*) prepareMEM::mem#5 = (byte*) prepareMEM::mem#4 [phi:mulFACbyMEM->prepareMEM#0] -- register_copy - jsr prepareMEM + sta.z prepareMEM1__1 + // [140] *((const byte*) memHi#0) ← (byte~) mulFACbyMEM::prepareMEM1_$1#0 -- _deref_pbuc1=vbuz1 + lda.z prepareMEM1__1 + sta memHi jmp b1 // mulFACbyMEM::@1 b1: - // asm { lda$fe ldy$ff jsr$ba28 } - lda.z $fe - ldy.z $ff + // asm { ldamemLo ldymemHi jsr$ba28 } + lda memLo + ldy memHi jsr $ba28 jmp breturn // mulFACbyMEM::@return breturn: - // [145] return + // [142] return rts } // sinFAC @@ -4526,97 +4622,119 @@ sinFAC: { jmp breturn // sinFAC::@return breturn: - // [147] return + // [144] return rts } // divMEMbyFAC // FAC = MEM/FAC // Set FAC to MEM (float saved in memory) divided by FAC (float accumulator) // Reads 5 bytes from memory -// divMEMbyFAC(byte* zeropage($1d) mem) +// divMEMbyFAC(byte* zeropage($1b) mem) divMEMbyFAC: { - .label mem = $1d - // [149] (byte*) prepareMEM::mem#3 ← (byte*) divMEMbyFAC::mem#2 -- pbuz1=pbuz2 + .label prepareMEM1__0 = $40 + .label prepareMEM1__1 = $41 + .label mem = $1b + jmp prepareMEM1 + // divMEMbyFAC::prepareMEM1 + prepareMEM1: + // [146] (byte~) divMEMbyFAC::prepareMEM1_$0#0 ← < (word)(byte*) divMEMbyFAC::mem#2 -- vbuz1=_lo_vwuz2 lda.z mem - sta.z prepareMEM.mem + sta.z prepareMEM1__0 + // [147] *((const byte*) memLo#0) ← (byte~) divMEMbyFAC::prepareMEM1_$0#0 -- _deref_pbuc1=vbuz1 + lda.z prepareMEM1__0 + sta memLo + // [148] (byte~) divMEMbyFAC::prepareMEM1_$1#0 ← > (word)(byte*) divMEMbyFAC::mem#2 -- vbuz1=_hi_vwuz2 lda.z mem+1 - sta.z prepareMEM.mem+1 - // [150] call prepareMEM - // [135] phi from divMEMbyFAC to prepareMEM [phi:divMEMbyFAC->prepareMEM] - prepareMEM_from_divMEMbyFAC: - // [135] phi (byte*) prepareMEM::mem#5 = (byte*) prepareMEM::mem#3 [phi:divMEMbyFAC->prepareMEM#0] -- register_copy - jsr prepareMEM + sta.z prepareMEM1__1 + // [149] *((const byte*) memHi#0) ← (byte~) divMEMbyFAC::prepareMEM1_$1#0 -- _deref_pbuc1=vbuz1 + lda.z prepareMEM1__1 + sta memHi jmp b1 // divMEMbyFAC::@1 b1: - // asm { lda$fe ldy$ff jsr$bb0f } - lda.z $fe - ldy.z $ff + // asm { ldamemLo ldymemHi jsr$bb0f } + lda memLo + ldy memHi jsr $bb0f jmp breturn // divMEMbyFAC::@return breturn: - // [152] return + // [151] return rts } // setFAC // FAC = word // Set the FAC (floating point accumulator) to the integer value of a 16bit word -// setFAC(word zeropage($1f) w) +// setFAC(word zeropage($1d) w) setFAC: { - .label w = $1f - // [154] (byte*) prepareMEM::mem#0 ← (byte*)(word) setFAC::w#5 -- pbuz1=pbuz2 - lda.z w - sta.z prepareMEM.mem - lda.z w+1 - sta.z prepareMEM.mem+1 - // [155] call prepareMEM - // [135] phi from setFAC to prepareMEM [phi:setFAC->prepareMEM] - prepareMEM_from_setFAC: - // [135] phi (byte*) prepareMEM::mem#5 = (byte*) prepareMEM::mem#0 [phi:setFAC->prepareMEM#0] -- register_copy - jsr prepareMEM + .label prepareMEM1_mem = $1d + .label prepareMEM1__0 = $42 + .label prepareMEM1__1 = $43 + .label w = $1d + jmp prepareMEM1 + // setFAC::prepareMEM1 + prepareMEM1: + // [153] (byte~) setFAC::prepareMEM1_$0#0 ← < (word) setFAC::prepareMEM1_mem#0 -- vbuz1=_lo_vwuz2 + lda.z prepareMEM1_mem + sta.z prepareMEM1__0 + // [154] *((const byte*) memLo#0) ← (byte~) setFAC::prepareMEM1_$0#0 -- _deref_pbuc1=vbuz1 + lda.z prepareMEM1__0 + sta memLo + // [155] (byte~) setFAC::prepareMEM1_$1#0 ← > (word) setFAC::prepareMEM1_mem#0 -- vbuz1=_hi_vwuz2 + lda.z prepareMEM1_mem+1 + sta.z prepareMEM1__1 + // [156] *((const byte*) memHi#0) ← (byte~) setFAC::prepareMEM1_$1#0 -- _deref_pbuc1=vbuz1 + lda.z prepareMEM1__1 + sta memHi jmp b1 // setFAC::@1 b1: - // asm { ldy$fe lda$ff jsr$b391 } + // asm { ldymemLo ldamemHi jsr$b391 } // Load word register Y,A into FAC (floating point accumulator) - ldy.z $fe - lda.z $ff + ldy memLo + lda memHi jsr $b391 jmp breturn // setFAC::@return breturn: - // [157] return + // [158] return rts } // setMEMtoFAC // MEM = FAC // Stores the value of the FAC to memory // Stores 5 bytes (means it is necessary to allocate 5 bytes to avoid clobbering other data using eg. byte[] mem = {0, 0, 0, 0, 0};) -// setMEMtoFAC(byte* zeropage($21) mem) +// setMEMtoFAC(byte* zeropage($1f) mem) setMEMtoFAC: { - .label mem = $21 - // [159] (byte*) prepareMEM::mem#1 ← (byte*) setMEMtoFAC::mem#5 -- pbuz1=pbuz2 + .label prepareMEM1__0 = $44 + .label prepareMEM1__1 = $45 + .label mem = $1f + jmp prepareMEM1 + // setMEMtoFAC::prepareMEM1 + prepareMEM1: + // [160] (byte~) setMEMtoFAC::prepareMEM1_$0#0 ← < (word)(byte*) setMEMtoFAC::mem#5 -- vbuz1=_lo_vwuz2 lda.z mem - sta.z prepareMEM.mem + sta.z prepareMEM1__0 + // [161] *((const byte*) memLo#0) ← (byte~) setMEMtoFAC::prepareMEM1_$0#0 -- _deref_pbuc1=vbuz1 + lda.z prepareMEM1__0 + sta memLo + // [162] (byte~) setMEMtoFAC::prepareMEM1_$1#0 ← > (word)(byte*) setMEMtoFAC::mem#5 -- vbuz1=_hi_vwuz2 lda.z mem+1 - sta.z prepareMEM.mem+1 - // [160] call prepareMEM - // [135] phi from setMEMtoFAC to prepareMEM [phi:setMEMtoFAC->prepareMEM] - prepareMEM_from_setMEMtoFAC: - // [135] phi (byte*) prepareMEM::mem#5 = (byte*) prepareMEM::mem#1 [phi:setMEMtoFAC->prepareMEM#0] -- register_copy - jsr prepareMEM + sta.z prepareMEM1__1 + // [163] *((const byte*) memHi#0) ← (byte~) setMEMtoFAC::prepareMEM1_$1#0 -- _deref_pbuc1=vbuz1 + lda.z prepareMEM1__1 + sta memHi jmp b1 // setMEMtoFAC::@1 b1: - // asm { ldx$fe ldy$ff jsr$bbd4 } - ldx.z $fe - ldy.z $ff + // asm { ldxmemLo ldymemHi jsr$bbd4 } + ldx memLo + ldy memHi jsr $bbd4 jmp breturn // setMEMtoFAC::@return breturn: - // [162] return + // [165] return rts } // subFACfromARG @@ -4628,7 +4746,7 @@ subFACfromARG: { jmp breturn // subFACfromARG::@return breturn: - // [164] return + // [167] return rts } // setARGtoFAC @@ -4640,7 +4758,7 @@ setARGtoFAC: { jmp breturn // setARGtoFAC::@return breturn: - // [166] return + // [169] return rts } // progress_init @@ -4651,46 +4769,46 @@ progress_init: { jmp breturn // progress_init::@return breturn: - // [168] return + // [171] return rts } // gen_sprites gen_sprites: { - .label spr = $24 - .label i = $23 - // [170] phi from gen_sprites to gen_sprites::@1 [phi:gen_sprites->gen_sprites::@1] + .label spr = $22 + .label i = $21 + // [173] phi from gen_sprites to gen_sprites::@1 [phi:gen_sprites->gen_sprites::@1] b1_from_gen_sprites: - // [170] phi (byte*) gen_sprites::spr#2 = (const byte*) sprites#0 [phi:gen_sprites->gen_sprites::@1#0] -- pbuz1=pbuc1 + // [173] phi (byte*) gen_sprites::spr#2 = (const byte*) sprites#0 [phi:gen_sprites->gen_sprites::@1#0] -- pbuz1=pbuc1 lda #sprites sta.z spr+1 - // [170] phi (byte) gen_sprites::i#2 = (byte) 0 [phi:gen_sprites->gen_sprites::@1#1] -- vbuz1=vbuc1 + // [173] phi (byte) gen_sprites::i#2 = (byte) 0 [phi:gen_sprites->gen_sprites::@1#1] -- vbuz1=vbuc1 lda #0 sta.z i jmp b1 - // [170] phi from gen_sprites::@2 to gen_sprites::@1 [phi:gen_sprites::@2->gen_sprites::@1] + // [173] phi from gen_sprites::@2 to gen_sprites::@1 [phi:gen_sprites::@2->gen_sprites::@1] b1_from_b2: - // [170] phi (byte*) gen_sprites::spr#2 = (byte*) gen_sprites::spr#1 [phi:gen_sprites::@2->gen_sprites::@1#0] -- register_copy - // [170] phi (byte) gen_sprites::i#2 = (byte) gen_sprites::i#1 [phi:gen_sprites::@2->gen_sprites::@1#1] -- register_copy + // [173] phi (byte*) gen_sprites::spr#2 = (byte*) gen_sprites::spr#1 [phi:gen_sprites::@2->gen_sprites::@1#0] -- register_copy + // [173] phi (byte) gen_sprites::i#2 = (byte) gen_sprites::i#1 [phi:gen_sprites::@2->gen_sprites::@1#1] -- register_copy jmp b1 // gen_sprites::@1 b1: - // [171] (byte) gen_chargen_sprite::ch#0 ← *((const byte[]) gen_sprites::cml#0 + (byte) gen_sprites::i#2) -- vbuz1=pbuc1_derefidx_vbuz2 + // [174] (byte) gen_chargen_sprite::ch#0 ← *((const byte[]) gen_sprites::cml#0 + (byte) gen_sprites::i#2) -- vbuz1=pbuc1_derefidx_vbuz2 ldy.z i lda cml,y sta.z gen_chargen_sprite.ch - // [172] (byte*) gen_chargen_sprite::sprite#0 ← (byte*) gen_sprites::spr#2 -- pbuz1=pbuz2 + // [175] (byte*) gen_chargen_sprite::sprite#0 ← (byte*) gen_sprites::spr#2 -- pbuz1=pbuz2 lda.z spr sta.z gen_chargen_sprite.sprite lda.z spr+1 sta.z gen_chargen_sprite.sprite+1 - // [173] call gen_chargen_sprite + // [176] call gen_chargen_sprite jsr gen_chargen_sprite jmp b2 // gen_sprites::@2 b2: - // [174] (byte*) gen_sprites::spr#1 ← (byte*) gen_sprites::spr#2 + (byte) $40 -- pbuz1=pbuz1_plus_vbuc1 + // [177] (byte*) gen_sprites::spr#1 ← (byte*) gen_sprites::spr#2 + (byte) $40 -- pbuz1=pbuz1_plus_vbuc1 lda #$40 clc adc.z spr @@ -4698,16 +4816,16 @@ gen_sprites: { bcc !+ inc.z spr+1 !: - // [175] (byte) gen_sprites::i#1 ← ++ (byte) gen_sprites::i#2 -- vbuz1=_inc_vbuz1 + // [178] (byte) gen_sprites::i#1 ← ++ (byte) gen_sprites::i#2 -- vbuz1=_inc_vbuz1 inc.z i - // [176] if((byte) gen_sprites::i#1!=(byte) 7) goto gen_sprites::@1 -- vbuz1_neq_vbuc1_then_la1 + // [179] if((byte) gen_sprites::i#1!=(byte) 7) goto gen_sprites::@1 -- vbuz1_neq_vbuc1_then_la1 lda #7 cmp.z i bne b1_from_b2 jmp breturn // gen_sprites::@return breturn: - // [177] return + // [180] return rts cml: .text "camelot" } @@ -4715,28 +4833,28 @@ gen_sprites: { // Generate a sprite from a C64 CHARGEN character (by making each pixel 3x3 pixels large) // - c is the character to generate // - sprite is a pointer to the position of the sprite to generate -// gen_chargen_sprite(byte zeropage($42) ch, byte* zeropage($2d) sprite) +// gen_chargen_sprite(byte zeropage($46) ch, byte* zeropage($2b) sprite) gen_chargen_sprite: { - .label _0 = $43 - .label _1 = $45 - .label _3 = $49 - .label _6 = $4a - .label ch = $42 - .label sprite = $2d - .label chargen = $47 - .label bits = $27 - .label s_gen = $2a - .label s_gen_cnt = $2b - .label b = $2c - .label x = $28 - .label y = $26 - .label c = $29 - // [178] (word~) gen_chargen_sprite::$0 ← (word)(byte) gen_chargen_sprite::ch#0 -- vwuz1=_word_vbuz2 + .label _0 = $47 + .label _1 = $49 + .label _3 = $4d + .label _6 = $4e + .label ch = $46 + .label sprite = $2b + .label chargen = $4b + .label bits = $25 + .label s_gen = $28 + .label s_gen_cnt = $29 + .label b = $2a + .label x = $26 + .label y = $24 + .label c = $27 + // [181] (word~) gen_chargen_sprite::$0 ← (word)(byte) gen_chargen_sprite::ch#0 -- vwuz1=_word_vbuz2 lda.z ch sta.z _0 lda #0 sta.z _0+1 - // [179] (word~) gen_chargen_sprite::$1 ← (word~) gen_chargen_sprite::$0 << (byte) 3 -- vwuz1=vwuz2_rol_3 + // [182] (word~) gen_chargen_sprite::$1 ← (word~) gen_chargen_sprite::$0 << (byte) 3 -- vwuz1=vwuz2_rol_3 lda.z _0 asl sta.z _1 @@ -4747,7 +4865,7 @@ gen_chargen_sprite: { rol.z _1+1 asl.z _1 rol.z _1+1 - // [180] (byte*) gen_chargen_sprite::chargen#0 ← (const byte*) CHARGEN#0 + (word~) gen_chargen_sprite::$1 -- pbuz1=pbuc1_plus_vwuz2 + // [183] (byte*) gen_chargen_sprite::chargen#0 ← (const byte*) CHARGEN#0 + (word~) gen_chargen_sprite::$1 -- pbuz1=pbuc1_plus_vwuz2 lda.z _1 clc adc #gen_chargen_sprite::@1] + // [186] phi from gen_chargen_sprite to gen_chargen_sprite::@1 [phi:gen_chargen_sprite->gen_chargen_sprite::@1] b1_from_gen_chargen_sprite: - // [183] phi (byte*) gen_chargen_sprite::sprite#11 = (byte*) gen_chargen_sprite::sprite#0 [phi:gen_chargen_sprite->gen_chargen_sprite::@1#0] -- register_copy - // [183] phi (byte) gen_chargen_sprite::y#2 = (byte) 0 [phi:gen_chargen_sprite->gen_chargen_sprite::@1#1] -- vbuz1=vbuc1 + // [186] phi (byte*) gen_chargen_sprite::sprite#11 = (byte*) gen_chargen_sprite::sprite#0 [phi:gen_chargen_sprite->gen_chargen_sprite::@1#0] -- register_copy + // [186] phi (byte) gen_chargen_sprite::y#2 = (byte) 0 [phi:gen_chargen_sprite->gen_chargen_sprite::@1#1] -- vbuz1=vbuc1 lda #0 sta.z y jmp b1 - // [183] phi from gen_chargen_sprite::@8 to gen_chargen_sprite::@1 [phi:gen_chargen_sprite::@8->gen_chargen_sprite::@1] + // [186] phi from gen_chargen_sprite::@8 to gen_chargen_sprite::@1 [phi:gen_chargen_sprite::@8->gen_chargen_sprite::@1] b1_from_b8: - // [183] phi (byte*) gen_chargen_sprite::sprite#11 = (byte*) gen_chargen_sprite::sprite#2 [phi:gen_chargen_sprite::@8->gen_chargen_sprite::@1#0] -- register_copy - // [183] phi (byte) gen_chargen_sprite::y#2 = (byte) gen_chargen_sprite::y#1 [phi:gen_chargen_sprite::@8->gen_chargen_sprite::@1#1] -- register_copy + // [186] phi (byte*) gen_chargen_sprite::sprite#11 = (byte*) gen_chargen_sprite::sprite#2 [phi:gen_chargen_sprite::@8->gen_chargen_sprite::@1#0] -- register_copy + // [186] phi (byte) gen_chargen_sprite::y#2 = (byte) gen_chargen_sprite::y#1 [phi:gen_chargen_sprite::@8->gen_chargen_sprite::@1#1] -- register_copy jmp b1 // gen_chargen_sprite::@1 b1: - // [184] (byte) gen_chargen_sprite::bits#0 ← *((byte*) gen_chargen_sprite::chargen#0 + (byte) gen_chargen_sprite::y#2) -- vbuz1=pbuz2_derefidx_vbuz3 + // [187] (byte) gen_chargen_sprite::bits#0 ← *((byte*) gen_chargen_sprite::chargen#0 + (byte) gen_chargen_sprite::y#2) -- vbuz1=pbuz2_derefidx_vbuz3 // current chargen line ldy.z y lda (chargen),y sta.z bits - // [185] phi from gen_chargen_sprite::@1 to gen_chargen_sprite::@2 [phi:gen_chargen_sprite::@1->gen_chargen_sprite::@2] + // [188] phi from gen_chargen_sprite::@1 to gen_chargen_sprite::@2 [phi:gen_chargen_sprite::@1->gen_chargen_sprite::@2] b2_from_b1: - // [185] phi (byte) gen_chargen_sprite::x#6 = (byte) 0 [phi:gen_chargen_sprite::@1->gen_chargen_sprite::@2#0] -- vbuz1=vbuc1 + // [188] phi (byte) gen_chargen_sprite::x#6 = (byte) 0 [phi:gen_chargen_sprite::@1->gen_chargen_sprite::@2#0] -- vbuz1=vbuc1 lda #0 sta.z x - // [185] phi (byte*) gen_chargen_sprite::sprite#10 = (byte*) gen_chargen_sprite::sprite#11 [phi:gen_chargen_sprite::@1->gen_chargen_sprite::@2#1] -- register_copy - // [185] phi (byte) gen_chargen_sprite::s_gen_cnt#4 = (byte) 0 [phi:gen_chargen_sprite::@1->gen_chargen_sprite::@2#2] -- vbuz1=vbuc1 + // [188] phi (byte*) gen_chargen_sprite::sprite#10 = (byte*) gen_chargen_sprite::sprite#11 [phi:gen_chargen_sprite::@1->gen_chargen_sprite::@2#1] -- register_copy + // [188] phi (byte) gen_chargen_sprite::s_gen_cnt#4 = (byte) 0 [phi:gen_chargen_sprite::@1->gen_chargen_sprite::@2#2] -- vbuz1=vbuc1 lda #0 sta.z s_gen_cnt - // [185] phi (byte) gen_chargen_sprite::s_gen#5 = (byte) 0 [phi:gen_chargen_sprite::@1->gen_chargen_sprite::@2#3] -- vbuz1=vbuc1 + // [188] phi (byte) gen_chargen_sprite::s_gen#5 = (byte) 0 [phi:gen_chargen_sprite::@1->gen_chargen_sprite::@2#3] -- vbuz1=vbuc1 lda #0 sta.z s_gen - // [185] phi (byte) gen_chargen_sprite::bits#2 = (byte) gen_chargen_sprite::bits#0 [phi:gen_chargen_sprite::@1->gen_chargen_sprite::@2#4] -- register_copy + // [188] phi (byte) gen_chargen_sprite::bits#2 = (byte) gen_chargen_sprite::bits#0 [phi:gen_chargen_sprite::@1->gen_chargen_sprite::@2#4] -- register_copy jmp b2 - // [185] phi from gen_chargen_sprite::@7 to gen_chargen_sprite::@2 [phi:gen_chargen_sprite::@7->gen_chargen_sprite::@2] + // [188] phi from gen_chargen_sprite::@7 to gen_chargen_sprite::@2 [phi:gen_chargen_sprite::@7->gen_chargen_sprite::@2] b2_from_b7: - // [185] phi (byte) gen_chargen_sprite::x#6 = (byte) gen_chargen_sprite::x#1 [phi:gen_chargen_sprite::@7->gen_chargen_sprite::@2#0] -- register_copy - // [185] phi (byte*) gen_chargen_sprite::sprite#10 = (byte*) gen_chargen_sprite::sprite#4 [phi:gen_chargen_sprite::@7->gen_chargen_sprite::@2#1] -- register_copy - // [185] phi (byte) gen_chargen_sprite::s_gen_cnt#4 = (byte) gen_chargen_sprite::s_gen_cnt#5 [phi:gen_chargen_sprite::@7->gen_chargen_sprite::@2#2] -- register_copy - // [185] phi (byte) gen_chargen_sprite::s_gen#5 = (byte) gen_chargen_sprite::s_gen#6 [phi:gen_chargen_sprite::@7->gen_chargen_sprite::@2#3] -- register_copy - // [185] phi (byte) gen_chargen_sprite::bits#2 = (byte) gen_chargen_sprite::bits#1 [phi:gen_chargen_sprite::@7->gen_chargen_sprite::@2#4] -- register_copy + // [188] phi (byte) gen_chargen_sprite::x#6 = (byte) gen_chargen_sprite::x#1 [phi:gen_chargen_sprite::@7->gen_chargen_sprite::@2#0] -- register_copy + // [188] phi (byte*) gen_chargen_sprite::sprite#10 = (byte*) gen_chargen_sprite::sprite#4 [phi:gen_chargen_sprite::@7->gen_chargen_sprite::@2#1] -- register_copy + // [188] phi (byte) gen_chargen_sprite::s_gen_cnt#4 = (byte) gen_chargen_sprite::s_gen_cnt#5 [phi:gen_chargen_sprite::@7->gen_chargen_sprite::@2#2] -- register_copy + // [188] phi (byte) gen_chargen_sprite::s_gen#5 = (byte) gen_chargen_sprite::s_gen#6 [phi:gen_chargen_sprite::@7->gen_chargen_sprite::@2#3] -- register_copy + // [188] phi (byte) gen_chargen_sprite::bits#2 = (byte) gen_chargen_sprite::bits#1 [phi:gen_chargen_sprite::@7->gen_chargen_sprite::@2#4] -- register_copy jmp b2 // gen_chargen_sprite::@2 b2: - // [186] (byte~) gen_chargen_sprite::$3 ← (byte) gen_chargen_sprite::bits#2 & (byte) $80 -- vbuz1=vbuz2_band_vbuc1 + // [189] (byte~) gen_chargen_sprite::$3 ← (byte) gen_chargen_sprite::bits#2 & (byte) $80 -- vbuz1=vbuz2_band_vbuc1 lda #$80 and.z bits sta.z _3 - // [187] if((byte~) gen_chargen_sprite::$3==(byte) 0) goto gen_chargen_sprite::@3 -- vbuz1_eq_0_then_la1 + // [190] if((byte~) gen_chargen_sprite::$3==(byte) 0) goto gen_chargen_sprite::@3 -- vbuz1_eq_0_then_la1 lda.z _3 cmp #0 beq b3_from_b2 - // [188] phi from gen_chargen_sprite::@2 to gen_chargen_sprite::@10 [phi:gen_chargen_sprite::@2->gen_chargen_sprite::@10] + // [191] phi from gen_chargen_sprite::@2 to gen_chargen_sprite::@10 [phi:gen_chargen_sprite::@2->gen_chargen_sprite::@10] b10_from_b2: jmp b10 // gen_chargen_sprite::@10 b10: - // [189] phi from gen_chargen_sprite::@10 to gen_chargen_sprite::@3 [phi:gen_chargen_sprite::@10->gen_chargen_sprite::@3] + // [192] phi from gen_chargen_sprite::@10 to gen_chargen_sprite::@3 [phi:gen_chargen_sprite::@10->gen_chargen_sprite::@3] b3_from_b10: - // [189] phi (byte) gen_chargen_sprite::c#3 = (byte) 1 [phi:gen_chargen_sprite::@10->gen_chargen_sprite::@3#0] -- vbuz1=vbuc1 + // [192] phi (byte) gen_chargen_sprite::c#3 = (byte) 1 [phi:gen_chargen_sprite::@10->gen_chargen_sprite::@3#0] -- vbuz1=vbuc1 lda #1 sta.z c jmp b3 - // [189] phi from gen_chargen_sprite::@2 to gen_chargen_sprite::@3 [phi:gen_chargen_sprite::@2->gen_chargen_sprite::@3] + // [192] phi from gen_chargen_sprite::@2 to gen_chargen_sprite::@3 [phi:gen_chargen_sprite::@2->gen_chargen_sprite::@3] b3_from_b2: - // [189] phi (byte) gen_chargen_sprite::c#3 = (byte) 0 [phi:gen_chargen_sprite::@2->gen_chargen_sprite::@3#0] -- vbuz1=vbuc1 + // [192] phi (byte) gen_chargen_sprite::c#3 = (byte) 0 [phi:gen_chargen_sprite::@2->gen_chargen_sprite::@3#0] -- vbuz1=vbuc1 lda #0 sta.z c jmp b3 // gen_chargen_sprite::@3 b3: - // [190] phi from gen_chargen_sprite::@3 to gen_chargen_sprite::@4 [phi:gen_chargen_sprite::@3->gen_chargen_sprite::@4] + // [193] phi from gen_chargen_sprite::@3 to gen_chargen_sprite::@4 [phi:gen_chargen_sprite::@3->gen_chargen_sprite::@4] b4_from_b3: - // [190] phi (byte*) gen_chargen_sprite::sprite#3 = (byte*) gen_chargen_sprite::sprite#10 [phi:gen_chargen_sprite::@3->gen_chargen_sprite::@4#0] -- register_copy - // [190] phi (byte) gen_chargen_sprite::b#2 = (byte) 0 [phi:gen_chargen_sprite::@3->gen_chargen_sprite::@4#1] -- vbuz1=vbuc1 + // [193] phi (byte*) gen_chargen_sprite::sprite#3 = (byte*) gen_chargen_sprite::sprite#10 [phi:gen_chargen_sprite::@3->gen_chargen_sprite::@4#0] -- register_copy + // [193] phi (byte) gen_chargen_sprite::b#2 = (byte) 0 [phi:gen_chargen_sprite::@3->gen_chargen_sprite::@4#1] -- vbuz1=vbuc1 lda #0 sta.z b - // [190] phi (byte) gen_chargen_sprite::s_gen_cnt#3 = (byte) gen_chargen_sprite::s_gen_cnt#4 [phi:gen_chargen_sprite::@3->gen_chargen_sprite::@4#2] -- register_copy - // [190] phi (byte) gen_chargen_sprite::s_gen#3 = (byte) gen_chargen_sprite::s_gen#5 [phi:gen_chargen_sprite::@3->gen_chargen_sprite::@4#3] -- register_copy + // [193] phi (byte) gen_chargen_sprite::s_gen_cnt#3 = (byte) gen_chargen_sprite::s_gen_cnt#4 [phi:gen_chargen_sprite::@3->gen_chargen_sprite::@4#2] -- register_copy + // [193] phi (byte) gen_chargen_sprite::s_gen#3 = (byte) gen_chargen_sprite::s_gen#5 [phi:gen_chargen_sprite::@3->gen_chargen_sprite::@4#3] -- register_copy jmp b4 // generate 3 pixels in the sprite byte (s_gen) - // [190] phi from gen_chargen_sprite::@5 to gen_chargen_sprite::@4 [phi:gen_chargen_sprite::@5->gen_chargen_sprite::@4] + // [193] phi from gen_chargen_sprite::@5 to gen_chargen_sprite::@4 [phi:gen_chargen_sprite::@5->gen_chargen_sprite::@4] b4_from_b5: - // [190] phi (byte*) gen_chargen_sprite::sprite#3 = (byte*) gen_chargen_sprite::sprite#4 [phi:gen_chargen_sprite::@5->gen_chargen_sprite::@4#0] -- register_copy - // [190] phi (byte) gen_chargen_sprite::b#2 = (byte) gen_chargen_sprite::b#1 [phi:gen_chargen_sprite::@5->gen_chargen_sprite::@4#1] -- register_copy - // [190] phi (byte) gen_chargen_sprite::s_gen_cnt#3 = (byte) gen_chargen_sprite::s_gen_cnt#5 [phi:gen_chargen_sprite::@5->gen_chargen_sprite::@4#2] -- register_copy - // [190] phi (byte) gen_chargen_sprite::s_gen#3 = (byte) gen_chargen_sprite::s_gen#6 [phi:gen_chargen_sprite::@5->gen_chargen_sprite::@4#3] -- register_copy + // [193] phi (byte*) gen_chargen_sprite::sprite#3 = (byte*) gen_chargen_sprite::sprite#4 [phi:gen_chargen_sprite::@5->gen_chargen_sprite::@4#0] -- register_copy + // [193] phi (byte) gen_chargen_sprite::b#2 = (byte) gen_chargen_sprite::b#1 [phi:gen_chargen_sprite::@5->gen_chargen_sprite::@4#1] -- register_copy + // [193] phi (byte) gen_chargen_sprite::s_gen_cnt#3 = (byte) gen_chargen_sprite::s_gen_cnt#5 [phi:gen_chargen_sprite::@5->gen_chargen_sprite::@4#2] -- register_copy + // [193] phi (byte) gen_chargen_sprite::s_gen#3 = (byte) gen_chargen_sprite::s_gen#6 [phi:gen_chargen_sprite::@5->gen_chargen_sprite::@4#3] -- register_copy jmp b4 // gen_chargen_sprite::@4 b4: - // [191] (byte~) gen_chargen_sprite::$6 ← (byte) gen_chargen_sprite::s_gen#3 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [194] (byte~) gen_chargen_sprite::$6 ← (byte) gen_chargen_sprite::s_gen#3 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda.z s_gen asl sta.z _6 - // [192] (byte) gen_chargen_sprite::s_gen#1 ← (byte~) gen_chargen_sprite::$6 | (byte) gen_chargen_sprite::c#3 -- vbuz1=vbuz2_bor_vbuz3 + // [195] (byte) gen_chargen_sprite::s_gen#1 ← (byte~) gen_chargen_sprite::$6 | (byte) gen_chargen_sprite::c#3 -- vbuz1=vbuz2_bor_vbuz3 lda.z _6 ora.z c sta.z s_gen - // [193] (byte) gen_chargen_sprite::s_gen_cnt#1 ← ++ (byte) gen_chargen_sprite::s_gen_cnt#3 -- vbuz1=_inc_vbuz1 + // [196] (byte) gen_chargen_sprite::s_gen_cnt#1 ← ++ (byte) gen_chargen_sprite::s_gen_cnt#3 -- vbuz1=_inc_vbuz1 inc.z s_gen_cnt - // [194] if((byte) gen_chargen_sprite::s_gen_cnt#1!=(byte) 8) goto gen_chargen_sprite::@5 -- vbuz1_neq_vbuc1_then_la1 + // [197] if((byte) gen_chargen_sprite::s_gen_cnt#1!=(byte) 8) goto gen_chargen_sprite::@5 -- vbuz1_neq_vbuc1_then_la1 lda #8 cmp.z s_gen_cnt bne b5_from_b4 jmp b6 // gen_chargen_sprite::@6 b6: - // [195] *((byte*) gen_chargen_sprite::sprite#3) ← (byte) gen_chargen_sprite::s_gen#1 -- _deref_pbuz1=vbuz2 + // [198] *((byte*) gen_chargen_sprite::sprite#3) ← (byte) gen_chargen_sprite::s_gen#1 -- _deref_pbuz1=vbuz2 // sprite byte filled - store and move to next byte lda.z s_gen ldy #0 sta (sprite),y - // [196] *((byte*) gen_chargen_sprite::sprite#3 + (byte) 3) ← (byte) gen_chargen_sprite::s_gen#1 -- pbuz1_derefidx_vbuc1=vbuz2 + // [199] *((byte*) gen_chargen_sprite::sprite#3 + (byte) 3) ← (byte) gen_chargen_sprite::s_gen#1 -- pbuz1_derefidx_vbuc1=vbuz2 lda.z s_gen ldy #3 sta (sprite),y - // [197] *((byte*) gen_chargen_sprite::sprite#3 + (byte) 6) ← (byte) gen_chargen_sprite::s_gen#1 -- pbuz1_derefidx_vbuc1=vbuz2 + // [200] *((byte*) gen_chargen_sprite::sprite#3 + (byte) 6) ← (byte) gen_chargen_sprite::s_gen#1 -- pbuz1_derefidx_vbuc1=vbuz2 lda.z s_gen ldy #6 sta (sprite),y - // [198] (byte*) gen_chargen_sprite::sprite#1 ← ++ (byte*) gen_chargen_sprite::sprite#3 -- pbuz1=_inc_pbuz1 + // [201] (byte*) gen_chargen_sprite::sprite#1 ← ++ (byte*) gen_chargen_sprite::sprite#3 -- pbuz1=_inc_pbuz1 inc.z sprite bne !+ inc.z sprite+1 !: - // [199] phi from gen_chargen_sprite::@6 to gen_chargen_sprite::@5 [phi:gen_chargen_sprite::@6->gen_chargen_sprite::@5] + // [202] phi from gen_chargen_sprite::@6 to gen_chargen_sprite::@5 [phi:gen_chargen_sprite::@6->gen_chargen_sprite::@5] b5_from_b6: - // [199] phi (byte*) gen_chargen_sprite::sprite#4 = (byte*) gen_chargen_sprite::sprite#1 [phi:gen_chargen_sprite::@6->gen_chargen_sprite::@5#0] -- register_copy - // [199] phi (byte) gen_chargen_sprite::s_gen_cnt#5 = (byte) 0 [phi:gen_chargen_sprite::@6->gen_chargen_sprite::@5#1] -- vbuz1=vbuc1 + // [202] phi (byte*) gen_chargen_sprite::sprite#4 = (byte*) gen_chargen_sprite::sprite#1 [phi:gen_chargen_sprite::@6->gen_chargen_sprite::@5#0] -- register_copy + // [202] phi (byte) gen_chargen_sprite::s_gen_cnt#5 = (byte) 0 [phi:gen_chargen_sprite::@6->gen_chargen_sprite::@5#1] -- vbuz1=vbuc1 lda #0 sta.z s_gen_cnt - // [199] phi (byte) gen_chargen_sprite::s_gen#6 = (byte) 0 [phi:gen_chargen_sprite::@6->gen_chargen_sprite::@5#2] -- vbuz1=vbuc1 + // [202] phi (byte) gen_chargen_sprite::s_gen#6 = (byte) 0 [phi:gen_chargen_sprite::@6->gen_chargen_sprite::@5#2] -- vbuz1=vbuc1 lda #0 sta.z s_gen jmp b5 - // [199] phi from gen_chargen_sprite::@4 to gen_chargen_sprite::@5 [phi:gen_chargen_sprite::@4->gen_chargen_sprite::@5] + // [202] phi from gen_chargen_sprite::@4 to gen_chargen_sprite::@5 [phi:gen_chargen_sprite::@4->gen_chargen_sprite::@5] b5_from_b4: - // [199] phi (byte*) gen_chargen_sprite::sprite#4 = (byte*) gen_chargen_sprite::sprite#3 [phi:gen_chargen_sprite::@4->gen_chargen_sprite::@5#0] -- register_copy - // [199] phi (byte) gen_chargen_sprite::s_gen_cnt#5 = (byte) gen_chargen_sprite::s_gen_cnt#1 [phi:gen_chargen_sprite::@4->gen_chargen_sprite::@5#1] -- register_copy - // [199] phi (byte) gen_chargen_sprite::s_gen#6 = (byte) gen_chargen_sprite::s_gen#1 [phi:gen_chargen_sprite::@4->gen_chargen_sprite::@5#2] -- register_copy + // [202] phi (byte*) gen_chargen_sprite::sprite#4 = (byte*) gen_chargen_sprite::sprite#3 [phi:gen_chargen_sprite::@4->gen_chargen_sprite::@5#0] -- register_copy + // [202] phi (byte) gen_chargen_sprite::s_gen_cnt#5 = (byte) gen_chargen_sprite::s_gen_cnt#1 [phi:gen_chargen_sprite::@4->gen_chargen_sprite::@5#1] -- register_copy + // [202] phi (byte) gen_chargen_sprite::s_gen#6 = (byte) gen_chargen_sprite::s_gen#1 [phi:gen_chargen_sprite::@4->gen_chargen_sprite::@5#2] -- register_copy jmp b5 // gen_chargen_sprite::@5 b5: - // [200] (byte) gen_chargen_sprite::b#1 ← ++ (byte) gen_chargen_sprite::b#2 -- vbuz1=_inc_vbuz1 + // [203] (byte) gen_chargen_sprite::b#1 ← ++ (byte) gen_chargen_sprite::b#2 -- vbuz1=_inc_vbuz1 inc.z b - // [201] if((byte) gen_chargen_sprite::b#1!=(byte) 3) goto gen_chargen_sprite::@4 -- vbuz1_neq_vbuc1_then_la1 + // [204] if((byte) gen_chargen_sprite::b#1!=(byte) 3) goto gen_chargen_sprite::@4 -- vbuz1_neq_vbuc1_then_la1 lda #3 cmp.z b bne b4_from_b5 jmp b7 // gen_chargen_sprite::@7 b7: - // [202] (byte) gen_chargen_sprite::bits#1 ← (byte) gen_chargen_sprite::bits#2 << (byte) 1 -- vbuz1=vbuz1_rol_1 + // [205] (byte) gen_chargen_sprite::bits#1 ← (byte) gen_chargen_sprite::bits#2 << (byte) 1 -- vbuz1=vbuz1_rol_1 asl.z bits - // [203] (byte) gen_chargen_sprite::x#1 ← ++ (byte) gen_chargen_sprite::x#6 -- vbuz1=_inc_vbuz1 + // [206] (byte) gen_chargen_sprite::x#1 ← ++ (byte) gen_chargen_sprite::x#6 -- vbuz1=_inc_vbuz1 inc.z x - // [204] if((byte) gen_chargen_sprite::x#1!=(byte) 8) goto gen_chargen_sprite::@2 -- vbuz1_neq_vbuc1_then_la1 + // [207] if((byte) gen_chargen_sprite::x#1!=(byte) 8) goto gen_chargen_sprite::@2 -- vbuz1_neq_vbuc1_then_la1 lda #8 cmp.z x bne b2_from_b7 jmp b8 // gen_chargen_sprite::@8 b8: - // [205] (byte*) gen_chargen_sprite::sprite#2 ← (byte*) gen_chargen_sprite::sprite#4 + (byte) 6 -- pbuz1=pbuz1_plus_vbuc1 + // [208] (byte*) gen_chargen_sprite::sprite#2 ← (byte*) gen_chargen_sprite::sprite#4 + (byte) 6 -- pbuz1=pbuz1_plus_vbuc1 lda #6 clc adc.z sprite @@ -4930,16 +5048,16 @@ gen_chargen_sprite: { bcc !+ inc.z sprite+1 !: - // [206] (byte) gen_chargen_sprite::y#1 ← ++ (byte) gen_chargen_sprite::y#2 -- vbuz1=_inc_vbuz1 + // [209] (byte) gen_chargen_sprite::y#1 ← ++ (byte) gen_chargen_sprite::y#2 -- vbuz1=_inc_vbuz1 inc.z y - // [207] if((byte) gen_chargen_sprite::y#1!=(byte) 8) goto gen_chargen_sprite::@1 -- vbuz1_neq_vbuc1_then_la1 + // [210] if((byte) gen_chargen_sprite::y#1!=(byte) 8) goto gen_chargen_sprite::@1 -- vbuz1_neq_vbuc1_then_la1 lda #8 cmp.z y bne b1_from_b8 jmp b9 // gen_chargen_sprite::@9 b9: - // [208] *((const byte*) PROCPORT#0) ← (byte) $37 -- _deref_pbuc1=vbuc2 + // [211] *((const byte*) PROCPORT#0) ← (byte) $37 -- _deref_pbuc1=vbuc2 lda #$37 sta PROCPORT // asm { cli } @@ -4947,100 +5065,100 @@ gen_chargen_sprite: { jmp breturn // gen_chargen_sprite::@return breturn: - // [210] return + // [213] return rts } // place_sprites place_sprites: { .label sprites_ptr = SCREEN+$3f8 - .label spr_id = $2f - .label spr_x = $31 - .label col = $33 - .label j2 = $4b - .label j2_2 = $32 - .label j = $30 - .label j2_3 = $32 - // [211] *((const byte*) SPRITES_ENABLE#0) ← (byte) $7f -- _deref_pbuc1=vbuc2 + .label spr_id = $2d + .label spr_x = $2f + .label col = $31 + .label j2 = $4f + .label j2_2 = $30 + .label j = $2e + .label j2_3 = $30 + // [214] *((const byte*) SPRITES_ENABLE#0) ← (byte) $7f -- _deref_pbuc1=vbuc2 lda #$7f sta SPRITES_ENABLE - // [212] *((const byte*) SPRITES_EXPAND_X#0) ← (byte) $7f -- _deref_pbuc1=vbuc2 + // [215] *((const byte*) SPRITES_EXPAND_X#0) ← (byte) $7f -- _deref_pbuc1=vbuc2 lda #$7f sta SPRITES_EXPAND_X - // [213] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte) $7f -- _deref_pbuc1=vbuc2 + // [216] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte) $7f -- _deref_pbuc1=vbuc2 lda #$7f sta SPRITES_EXPAND_Y - // [214] phi from place_sprites to place_sprites::@1 [phi:place_sprites->place_sprites::@1] + // [217] phi from place_sprites to place_sprites::@1 [phi:place_sprites->place_sprites::@1] b1_from_place_sprites: - // [214] phi (byte) place_sprites::col#2 = (byte) 5 [phi:place_sprites->place_sprites::@1#0] -- vbuz1=vbuc1 + // [217] phi (byte) place_sprites::col#2 = (byte) 5 [phi:place_sprites->place_sprites::@1#0] -- vbuz1=vbuc1 lda #5 sta.z col - // [214] phi (byte) place_sprites::j2#3 = (byte) 0 [phi:place_sprites->place_sprites::@1#1] -- vbuz1=vbuc1 + // [217] phi (byte) place_sprites::j2#3 = (byte) 0 [phi:place_sprites->place_sprites::@1#1] -- vbuz1=vbuc1 lda #0 sta.z j2_3 - // [214] phi (byte) place_sprites::spr_x#2 = (byte) $3c [phi:place_sprites->place_sprites::@1#2] -- vbuz1=vbuc1 + // [217] phi (byte) place_sprites::spr_x#2 = (byte) $3c [phi:place_sprites->place_sprites::@1#2] -- vbuz1=vbuc1 lda #$3c sta.z spr_x - // [214] phi (byte) place_sprites::j#2 = (byte) 0 [phi:place_sprites->place_sprites::@1#3] -- vbuz1=vbuc1 + // [217] phi (byte) place_sprites::j#2 = (byte) 0 [phi:place_sprites->place_sprites::@1#3] -- vbuz1=vbuc1 lda #0 sta.z j - // [214] phi (byte) place_sprites::spr_id#2 = (byte)(word)(const byte*) sprites#0/(byte) $40 [phi:place_sprites->place_sprites::@1#4] -- vbuz1=vbuc1 + // [217] phi (byte) place_sprites::spr_id#2 = (byte)(word)(const byte*) sprites#0/(byte) $40 [phi:place_sprites->place_sprites::@1#4] -- vbuz1=vbuc1 lda #sprites/$40 sta.z spr_id jmp b1 - // [214] phi from place_sprites::@1 to place_sprites::@1 [phi:place_sprites::@1->place_sprites::@1] + // [217] phi from place_sprites::@1 to place_sprites::@1 [phi:place_sprites::@1->place_sprites::@1] b1_from_b1: - // [214] phi (byte) place_sprites::col#2 = (byte) place_sprites::col#1 [phi:place_sprites::@1->place_sprites::@1#0] -- register_copy - // [214] phi (byte) place_sprites::j2#3 = (byte) place_sprites::j2#2 [phi:place_sprites::@1->place_sprites::@1#1] -- register_copy - // [214] phi (byte) place_sprites::spr_x#2 = (byte) place_sprites::spr_x#1 [phi:place_sprites::@1->place_sprites::@1#2] -- register_copy - // [214] phi (byte) place_sprites::j#2 = (byte) place_sprites::j#1 [phi:place_sprites::@1->place_sprites::@1#3] -- register_copy - // [214] phi (byte) place_sprites::spr_id#2 = (byte) place_sprites::spr_id#1 [phi:place_sprites::@1->place_sprites::@1#4] -- register_copy + // [217] phi (byte) place_sprites::col#2 = (byte) place_sprites::col#1 [phi:place_sprites::@1->place_sprites::@1#0] -- register_copy + // [217] phi (byte) place_sprites::j2#3 = (byte) place_sprites::j2#2 [phi:place_sprites::@1->place_sprites::@1#1] -- register_copy + // [217] phi (byte) place_sprites::spr_x#2 = (byte) place_sprites::spr_x#1 [phi:place_sprites::@1->place_sprites::@1#2] -- register_copy + // [217] phi (byte) place_sprites::j#2 = (byte) place_sprites::j#1 [phi:place_sprites::@1->place_sprites::@1#3] -- register_copy + // [217] phi (byte) place_sprites::spr_id#2 = (byte) place_sprites::spr_id#1 [phi:place_sprites::@1->place_sprites::@1#4] -- register_copy jmp b1 // place_sprites::@1 b1: - // [215] *((const byte*) place_sprites::sprites_ptr#0 + (byte) place_sprites::j#2) ← (byte) place_sprites::spr_id#2 -- pbuc1_derefidx_vbuz1=vbuz2 + // [218] *((const byte*) place_sprites::sprites_ptr#0 + (byte) place_sprites::j#2) ← (byte) place_sprites::spr_id#2 -- pbuc1_derefidx_vbuz1=vbuz2 lda.z spr_id ldy.z j sta sprites_ptr,y - // [216] (byte) place_sprites::spr_id#1 ← ++ (byte) place_sprites::spr_id#2 -- vbuz1=_inc_vbuz1 + // [219] (byte) place_sprites::spr_id#1 ← ++ (byte) place_sprites::spr_id#2 -- vbuz1=_inc_vbuz1 inc.z spr_id - // [217] *((const byte*) SPRITES_XPOS#0 + (byte) place_sprites::j2#3) ← (byte) place_sprites::spr_x#2 -- pbuc1_derefidx_vbuz1=vbuz2 + // [220] *((const byte*) SPRITES_XPOS#0 + (byte) place_sprites::j2#3) ← (byte) place_sprites::spr_x#2 -- pbuc1_derefidx_vbuz1=vbuz2 lda.z spr_x ldy.z j2_3 sta SPRITES_XPOS,y - // [218] *((const byte*) SPRITES_YPOS#0 + (byte) place_sprites::j2#3) ← (byte) $50 -- pbuc1_derefidx_vbuz1=vbuc2 + // [221] *((const byte*) SPRITES_YPOS#0 + (byte) place_sprites::j2#3) ← (byte) $50 -- pbuc1_derefidx_vbuz1=vbuc2 lda #$50 ldy.z j2_3 sta SPRITES_YPOS,y - // [219] *((const byte*) SPRITES_COLS#0 + (byte) place_sprites::j#2) ← (byte) place_sprites::col#2 -- pbuc1_derefidx_vbuz1=vbuz2 + // [222] *((const byte*) SPRITES_COLS#0 + (byte) place_sprites::j#2) ← (byte) place_sprites::col#2 -- pbuc1_derefidx_vbuz1=vbuz2 lda.z col ldy.z j sta SPRITES_COLS,y - // [220] (byte) place_sprites::spr_x#1 ← (byte) place_sprites::spr_x#2 + (byte) $20 -- vbuz1=vbuz1_plus_vbuc1 + // [223] (byte) place_sprites::spr_x#1 ← (byte) place_sprites::spr_x#2 + (byte) $20 -- vbuz1=vbuz1_plus_vbuc1 lax.z spr_x axs #-[$20] stx.z spr_x - // [221] (byte) place_sprites::col#1 ← (byte) place_sprites::col#2 ^ (byte)(number) 7^(number) 5 -- vbuz1=vbuz1_bxor_vbuc1 + // [224] (byte) place_sprites::col#1 ← (byte) place_sprites::col#2 ^ (byte)(number) 7^(number) 5 -- vbuz1=vbuz1_bxor_vbuc1 lda #7^5 eor.z col sta.z col - // [222] (byte) place_sprites::j2#1 ← ++ (byte) place_sprites::j2#3 -- vbuz1=_inc_vbuz2 + // [225] (byte) place_sprites::j2#1 ← ++ (byte) place_sprites::j2#3 -- vbuz1=_inc_vbuz2 ldy.z j2_3 iny sty.z j2 - // [223] (byte) place_sprites::j2#2 ← ++ (byte) place_sprites::j2#1 -- vbuz1=_inc_vbuz2 + // [226] (byte) place_sprites::j2#2 ← ++ (byte) place_sprites::j2#1 -- vbuz1=_inc_vbuz2 ldy.z j2 iny sty.z j2_2 - // [224] (byte) place_sprites::j#1 ← ++ (byte) place_sprites::j#2 -- vbuz1=_inc_vbuz1 + // [227] (byte) place_sprites::j#1 ← ++ (byte) place_sprites::j#2 -- vbuz1=_inc_vbuz1 inc.z j - // [225] if((byte) place_sprites::j#1!=(byte) 7) goto place_sprites::@1 -- vbuz1_neq_vbuc1_then_la1 + // [228] if((byte) place_sprites::j#1!=(byte) 7) goto place_sprites::@1 -- vbuz1_neq_vbuc1_then_la1 lda #7 cmp.z j bne b1_from_b1 jmp breturn // place_sprites::@return breturn: - // [226] return + // [229] return rts } // File Data @@ -5048,7 +5166,7 @@ place_sprites: { sintab_y: .fill $c5, 0 REGISTER UPLIFT POTENTIAL REGISTERS -Equivalence Class zp ZP_BYTE:55 [ anim::$7 ] has ALU potential. +Equivalence Class zp ZP_BYTE:53 [ anim::$7 ] has ALU potential. Statement [7] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@1 [ sin_idx_x#13 sin_idx_y#13 ] ( main:2 [ sin_idx_x#13 sin_idx_y#13 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ sin_idx_x#13 sin_idx_x#11 sin_idx_x#3 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ sin_idx_y#13 sin_idx_y#11 sin_idx_y#3 ] @@ -5086,65 +5204,71 @@ Removing always clobbered register reg byte y as potential for zp ZP_BYTE:17 [ g Removing always clobbered register reg byte y as potential for zp ZP_BYTE:21 [ gen_sintab::i#10 gen_sintab::i#1 ] Statement [126] *((byte*) progress_cursor#11) ← *((const byte[]) progress_inc::progress_chars#0 + (byte) progress_idx#12) [ progress_idx#12 progress_cursor#11 ] ( main:2::init:5::gen_sintab:57::progress_inc:119 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#12 progress_cursor#11 ] main:2::init:5::gen_sintab:61::progress_inc:119 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#12 progress_cursor#11 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:22 [ progress_idx#14 progress_idx#12 progress_idx#10 ] -Statement asm { jsr$b1aa sty$fe sta$ff } always clobbers reg byte a reg byte x reg byte y +Statement asm { jsr$b1aa stymemLo stamemHi } always clobbers reg byte a reg byte x reg byte y Removing always clobbered register reg byte x as potential for zp ZP_BYTE:17 [ gen_sintab::length#10 ] Removing always clobbered register reg byte x as potential for zp ZP_BYTE:21 [ gen_sintab::i#10 gen_sintab::i#1 ] Removing always clobbered register reg byte x as potential for zp ZP_BYTE:22 [ progress_idx#14 progress_idx#12 progress_idx#10 ] Statement [129] (word) getFAC::return#0 ← *((const byte*) memHi#0) w= *((const byte*) memLo#0) [ getFAC::return#0 ] ( main:2::init:5::gen_sintab:57::getFAC:114 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 getFAC::return#0 ] main:2::init:5::gen_sintab:61::getFAC:114 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 getFAC::return#0 ] ) always clobbers reg byte a -Statement asm { lda$fe ldy$ff jsr$b867 } always clobbers reg byte a reg byte x reg byte y -Statement [142] (byte*) prepareMEM::mem#4 ← (byte*) mulFACbyMEM::mem#2 [ prepareMEM::mem#4 ] ( main:2::init:5::gen_sintab:57::mulFACbyMEM:100 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 prepareMEM::mem#4 ] main:2::init:5::gen_sintab:61::mulFACbyMEM:100 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 prepareMEM::mem#4 ] main:2::init:5::gen_sintab:57::mulFACbyMEM:110 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 prepareMEM::mem#4 ] main:2::init:5::gen_sintab:61::mulFACbyMEM:110 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 prepareMEM::mem#4 ] ) always clobbers reg byte a -Statement asm { lda$fe ldy$ff jsr$ba28 } always clobbers reg byte a reg byte x reg byte y +Statement [132] *((const byte*) memLo#0) ← <(word)(const byte[]) gen_sintab::f_min#0 [ ] ( main:2::init:5::gen_sintab:57::addMEMtoFAC:91 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 ] main:2::init:5::gen_sintab:61::addMEMtoFAC:91 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 ] main:2::init:5::gen_sintab:57::addMEMtoFAC:112 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 ] main:2::init:5::gen_sintab:61::addMEMtoFAC:112 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 ] ) always clobbers reg byte a +Statement [133] *((const byte*) memHi#0) ← >(word)(const byte[]) gen_sintab::f_min#0 [ ] ( main:2::init:5::gen_sintab:57::addMEMtoFAC:91 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 ] main:2::init:5::gen_sintab:61::addMEMtoFAC:91 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 ] main:2::init:5::gen_sintab:57::addMEMtoFAC:112 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 ] main:2::init:5::gen_sintab:61::addMEMtoFAC:112 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 ] ) always clobbers reg byte a +Statement asm { ldamemLo ldymemHi jsr$b867 } always clobbers reg byte a reg byte x reg byte y +Statement [137] (byte~) mulFACbyMEM::prepareMEM1_$0#0 ← < (word)(byte*) mulFACbyMEM::mem#2 [ mulFACbyMEM::mem#2 mulFACbyMEM::prepareMEM1_$0#0 ] ( main:2::init:5::gen_sintab:57::mulFACbyMEM:100 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 mulFACbyMEM::mem#2 mulFACbyMEM::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:61::mulFACbyMEM:100 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 mulFACbyMEM::mem#2 mulFACbyMEM::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:57::mulFACbyMEM:110 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 mulFACbyMEM::mem#2 mulFACbyMEM::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:61::mulFACbyMEM:110 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 mulFACbyMEM::mem#2 mulFACbyMEM::prepareMEM1_$0#0 ] ) always clobbers reg byte a +Statement [139] (byte~) mulFACbyMEM::prepareMEM1_$1#0 ← > (word)(byte*) mulFACbyMEM::mem#2 [ mulFACbyMEM::prepareMEM1_$1#0 ] ( main:2::init:5::gen_sintab:57::mulFACbyMEM:100 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 mulFACbyMEM::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:61::mulFACbyMEM:100 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 mulFACbyMEM::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:57::mulFACbyMEM:110 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 mulFACbyMEM::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:61::mulFACbyMEM:110 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 mulFACbyMEM::prepareMEM1_$1#0 ] ) always clobbers reg byte a +Statement asm { ldamemLo ldymemHi jsr$ba28 } always clobbers reg byte a reg byte x reg byte y Statement asm { jsr$e26b } always clobbers reg byte a reg byte x reg byte y -Statement [149] (byte*) prepareMEM::mem#3 ← (byte*) divMEMbyFAC::mem#2 [ prepareMEM::mem#3 ] ( main:2::init:5::gen_sintab:57::divMEMbyFAC:87 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 prepareMEM::mem#3 ] main:2::init:5::gen_sintab:61::divMEMbyFAC:87 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 prepareMEM::mem#3 ] main:2::init:5::gen_sintab:57::divMEMbyFAC:106 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 prepareMEM::mem#3 ] main:2::init:5::gen_sintab:61::divMEMbyFAC:106 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 prepareMEM::mem#3 ] ) always clobbers reg byte a -Statement asm { lda$fe ldy$ff jsr$bb0f } always clobbers reg byte a reg byte x reg byte y -Statement [154] (byte*) prepareMEM::mem#0 ← (byte*)(word) setFAC::w#5 [ prepareMEM::mem#0 ] ( main:2::init:5::gen_sintab:57::setFAC:73 [ gen_sintab::min#2 gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 prepareMEM::mem#0 ] main:2::init:5::gen_sintab:61::setFAC:73 [ gen_sintab::min#2 gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 prepareMEM::mem#0 ] main:2::init:5::gen_sintab:57::setFAC:77 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 prepareMEM::mem#0 ] main:2::init:5::gen_sintab:61::setFAC:77 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 prepareMEM::mem#0 ] main:2::init:5::gen_sintab:57::setFAC:85 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 prepareMEM::mem#0 ] main:2::init:5::gen_sintab:61::setFAC:85 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 prepareMEM::mem#0 ] main:2::init:5::gen_sintab:57::setFAC:98 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 prepareMEM::mem#0 ] main:2::init:5::gen_sintab:61::setFAC:98 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 prepareMEM::mem#0 ] main:2::init:5::gen_sintab:57::setFAC:104 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 prepareMEM::mem#0 ] main:2::init:5::gen_sintab:61::setFAC:104 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 prepareMEM::mem#0 ] ) always clobbers reg byte a -Statement asm { ldy$fe lda$ff jsr$b391 } always clobbers reg byte a reg byte x reg byte y +Statement [146] (byte~) divMEMbyFAC::prepareMEM1_$0#0 ← < (word)(byte*) divMEMbyFAC::mem#2 [ divMEMbyFAC::mem#2 divMEMbyFAC::prepareMEM1_$0#0 ] ( main:2::init:5::gen_sintab:57::divMEMbyFAC:87 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 divMEMbyFAC::mem#2 divMEMbyFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:61::divMEMbyFAC:87 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 divMEMbyFAC::mem#2 divMEMbyFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:57::divMEMbyFAC:106 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 divMEMbyFAC::mem#2 divMEMbyFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:61::divMEMbyFAC:106 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 divMEMbyFAC::mem#2 divMEMbyFAC::prepareMEM1_$0#0 ] ) always clobbers reg byte a +Statement [148] (byte~) divMEMbyFAC::prepareMEM1_$1#0 ← > (word)(byte*) divMEMbyFAC::mem#2 [ divMEMbyFAC::prepareMEM1_$1#0 ] ( main:2::init:5::gen_sintab:57::divMEMbyFAC:87 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 divMEMbyFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:61::divMEMbyFAC:87 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 divMEMbyFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:57::divMEMbyFAC:106 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 divMEMbyFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:61::divMEMbyFAC:106 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 divMEMbyFAC::prepareMEM1_$1#0 ] ) always clobbers reg byte a +Statement asm { ldamemLo ldymemHi jsr$bb0f } always clobbers reg byte a reg byte x reg byte y +Statement [153] (byte~) setFAC::prepareMEM1_$0#0 ← < (word) setFAC::prepareMEM1_mem#0 [ setFAC::prepareMEM1_mem#0 setFAC::prepareMEM1_$0#0 ] ( main:2::init:5::gen_sintab:57::setFAC:73 [ gen_sintab::min#2 gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setFAC::prepareMEM1_mem#0 setFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:61::setFAC:73 [ gen_sintab::min#2 gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setFAC::prepareMEM1_mem#0 setFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:57::setFAC:77 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setFAC::prepareMEM1_mem#0 setFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:61::setFAC:77 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setFAC::prepareMEM1_mem#0 setFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:57::setFAC:85 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setFAC::prepareMEM1_mem#0 setFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:61::setFAC:85 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setFAC::prepareMEM1_mem#0 setFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:57::setFAC:98 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 setFAC::prepareMEM1_mem#0 setFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:61::setFAC:98 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 setFAC::prepareMEM1_mem#0 setFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:57::setFAC:104 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 setFAC::prepareMEM1_mem#0 setFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:61::setFAC:104 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 setFAC::prepareMEM1_mem#0 setFAC::prepareMEM1_$0#0 ] ) always clobbers reg byte a +Statement [155] (byte~) setFAC::prepareMEM1_$1#0 ← > (word) setFAC::prepareMEM1_mem#0 [ setFAC::prepareMEM1_$1#0 ] ( main:2::init:5::gen_sintab:57::setFAC:73 [ gen_sintab::min#2 gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:61::setFAC:73 [ gen_sintab::min#2 gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:57::setFAC:77 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:61::setFAC:77 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:57::setFAC:85 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:61::setFAC:85 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:57::setFAC:98 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 setFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:61::setFAC:98 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 setFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:57::setFAC:104 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 setFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:61::setFAC:104 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 setFAC::prepareMEM1_$1#0 ] ) always clobbers reg byte a +Statement asm { ldymemLo ldamemHi jsr$b391 } always clobbers reg byte a reg byte x reg byte y Removing always clobbered register reg byte x as potential for zp ZP_BYTE:16 [ gen_sintab::min#2 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:16 [ gen_sintab::min#2 ] -Statement [159] (byte*) prepareMEM::mem#1 ← (byte*) setMEMtoFAC::mem#5 [ prepareMEM::mem#1 ] ( main:2::init:5::gen_sintab:57::setMEMtoFAC:79 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 prepareMEM::mem#1 ] main:2::init:5::gen_sintab:61::setMEMtoFAC:79 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 prepareMEM::mem#1 ] main:2::init:5::gen_sintab:57::setMEMtoFAC:83 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 prepareMEM::mem#1 ] main:2::init:5::gen_sintab:61::setMEMtoFAC:83 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 prepareMEM::mem#1 ] main:2::init:5::gen_sintab:57::setMEMtoFAC:89 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 prepareMEM::mem#1 ] main:2::init:5::gen_sintab:61::setMEMtoFAC:89 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 prepareMEM::mem#1 ] main:2::init:5::gen_sintab:57::setMEMtoFAC:93 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 prepareMEM::mem#1 ] main:2::init:5::gen_sintab:61::setMEMtoFAC:93 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 prepareMEM::mem#1 ] main:2::init:5::gen_sintab:57::setMEMtoFAC:102 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 prepareMEM::mem#1 ] main:2::init:5::gen_sintab:61::setMEMtoFAC:102 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 prepareMEM::mem#1 ] ) always clobbers reg byte a -Statement asm { ldx$fe ldy$ff jsr$bbd4 } always clobbers reg byte a reg byte x reg byte y +Statement [160] (byte~) setMEMtoFAC::prepareMEM1_$0#0 ← < (word)(byte*) setMEMtoFAC::mem#5 [ setMEMtoFAC::mem#5 setMEMtoFAC::prepareMEM1_$0#0 ] ( main:2::init:5::gen_sintab:57::setMEMtoFAC:79 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setMEMtoFAC::mem#5 setMEMtoFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:61::setMEMtoFAC:79 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setMEMtoFAC::mem#5 setMEMtoFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:57::setMEMtoFAC:83 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setMEMtoFAC::mem#5 setMEMtoFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:61::setMEMtoFAC:83 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setMEMtoFAC::mem#5 setMEMtoFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:57::setMEMtoFAC:89 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setMEMtoFAC::mem#5 setMEMtoFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:61::setMEMtoFAC:89 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setMEMtoFAC::mem#5 setMEMtoFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:57::setMEMtoFAC:93 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setMEMtoFAC::mem#5 setMEMtoFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:61::setMEMtoFAC:93 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setMEMtoFAC::mem#5 setMEMtoFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:57::setMEMtoFAC:102 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 setMEMtoFAC::mem#5 setMEMtoFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:61::setMEMtoFAC:102 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 setMEMtoFAC::mem#5 setMEMtoFAC::prepareMEM1_$0#0 ] ) always clobbers reg byte a +Statement [162] (byte~) setMEMtoFAC::prepareMEM1_$1#0 ← > (word)(byte*) setMEMtoFAC::mem#5 [ setMEMtoFAC::prepareMEM1_$1#0 ] ( main:2::init:5::gen_sintab:57::setMEMtoFAC:79 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setMEMtoFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:61::setMEMtoFAC:79 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setMEMtoFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:57::setMEMtoFAC:83 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setMEMtoFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:61::setMEMtoFAC:83 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setMEMtoFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:57::setMEMtoFAC:89 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setMEMtoFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:61::setMEMtoFAC:89 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setMEMtoFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:57::setMEMtoFAC:93 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setMEMtoFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:61::setMEMtoFAC:93 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setMEMtoFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:57::setMEMtoFAC:102 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 setMEMtoFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:61::setMEMtoFAC:102 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 setMEMtoFAC::prepareMEM1_$1#0 ] ) always clobbers reg byte a +Statement asm { ldxmemLo ldymemHi jsr$bbd4 } always clobbers reg byte a reg byte x reg byte y Statement asm { jsr$b853 } always clobbers reg byte a reg byte x reg byte y Statement asm { jsr$bc0f } always clobbers reg byte a reg byte x -Statement [172] (byte*) gen_chargen_sprite::sprite#0 ← (byte*) gen_sprites::spr#2 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::ch#0 gen_chargen_sprite::sprite#0 ] ( main:2::init:5::gen_sprites:53 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::ch#0 gen_chargen_sprite::sprite#0 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:35 [ gen_sprites::i#2 gen_sprites::i#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:66 [ gen_chargen_sprite::ch#0 ] -Statement [174] (byte*) gen_sprites::spr#1 ← (byte*) gen_sprites::spr#2 + (byte) $40 [ gen_sprites::i#2 gen_sprites::spr#1 ] ( main:2::init:5::gen_sprites:53 [ gen_sprites::i#2 gen_sprites::spr#1 ] ) always clobbers reg byte a -Statement [178] (word~) gen_chargen_sprite::$0 ← (word)(byte) gen_chargen_sprite::ch#0 [ gen_chargen_sprite::sprite#0 gen_chargen_sprite::$0 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:173 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::sprite#0 gen_chargen_sprite::$0 ] ) always clobbers reg byte a -Statement [179] (word~) gen_chargen_sprite::$1 ← (word~) gen_chargen_sprite::$0 << (byte) 3 [ gen_chargen_sprite::sprite#0 gen_chargen_sprite::$1 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:173 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::sprite#0 gen_chargen_sprite::$1 ] ) always clobbers reg byte a -Statement [180] (byte*) gen_chargen_sprite::chargen#0 ← (const byte*) CHARGEN#0 + (word~) gen_chargen_sprite::$1 [ gen_chargen_sprite::sprite#0 gen_chargen_sprite::chargen#0 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:173 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::sprite#0 gen_chargen_sprite::chargen#0 ] ) always clobbers reg byte a -Statement [182] *((const byte*) PROCPORT#0) ← (byte) $32 [ gen_chargen_sprite::sprite#0 gen_chargen_sprite::chargen#0 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:173 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::sprite#0 gen_chargen_sprite::chargen#0 ] ) always clobbers reg byte a -Statement [184] (byte) gen_chargen_sprite::bits#0 ← *((byte*) gen_chargen_sprite::chargen#0 + (byte) gen_chargen_sprite::y#2) [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::sprite#11 gen_chargen_sprite::bits#0 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:173 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::sprite#11 gen_chargen_sprite::bits#0 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:38 [ gen_chargen_sprite::y#2 gen_chargen_sprite::y#1 ] -Statement [191] (byte~) gen_chargen_sprite::$6 ← (byte) gen_chargen_sprite::s_gen#3 << (byte) 1 [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::s_gen_cnt#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 gen_chargen_sprite::$6 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:173 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::s_gen_cnt#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 gen_chargen_sprite::$6 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:39 [ gen_chargen_sprite::bits#2 gen_chargen_sprite::bits#0 gen_chargen_sprite::bits#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:40 [ gen_chargen_sprite::x#6 gen_chargen_sprite::x#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:41 [ gen_chargen_sprite::c#3 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:43 [ gen_chargen_sprite::s_gen_cnt#3 gen_chargen_sprite::s_gen_cnt#4 gen_chargen_sprite::s_gen_cnt#5 gen_chargen_sprite::s_gen_cnt#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:44 [ gen_chargen_sprite::b#2 gen_chargen_sprite::b#1 ] -Statement [195] *((byte*) gen_chargen_sprite::sprite#3) ← (byte) gen_chargen_sprite::s_gen#1 [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 gen_chargen_sprite::s_gen#1 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:173 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 gen_chargen_sprite::s_gen#1 ] ) always clobbers reg byte y -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:35 [ gen_sprites::i#2 gen_sprites::i#1 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:38 [ gen_chargen_sprite::y#2 gen_chargen_sprite::y#1 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:39 [ gen_chargen_sprite::bits#2 gen_chargen_sprite::bits#0 gen_chargen_sprite::bits#1 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:40 [ gen_chargen_sprite::x#6 gen_chargen_sprite::x#1 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:41 [ gen_chargen_sprite::c#3 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:44 [ gen_chargen_sprite::b#2 gen_chargen_sprite::b#1 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:42 [ gen_chargen_sprite::s_gen#3 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen#6 gen_chargen_sprite::s_gen#1 ] -Statement [196] *((byte*) gen_chargen_sprite::sprite#3 + (byte) 3) ← (byte) gen_chargen_sprite::s_gen#1 [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 gen_chargen_sprite::s_gen#1 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:173 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 gen_chargen_sprite::s_gen#1 ] ) always clobbers reg byte y -Statement [197] *((byte*) gen_chargen_sprite::sprite#3 + (byte) 6) ← (byte) gen_chargen_sprite::s_gen#1 [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:173 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 ] ) always clobbers reg byte y -Statement [205] (byte*) gen_chargen_sprite::sprite#2 ← (byte*) gen_chargen_sprite::sprite#4 + (byte) 6 [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::sprite#2 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:173 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::sprite#2 ] ) always clobbers reg byte a -Statement [208] *((const byte*) PROCPORT#0) ← (byte) $37 [ ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:173 [ gen_sprites::i#2 gen_sprites::spr#2 ] ) always clobbers reg byte a -Statement [211] *((const byte*) SPRITES_ENABLE#0) ← (byte) $7f [ ] ( main:2::init:5::place_sprites:51 [ ] ) always clobbers reg byte a -Statement [212] *((const byte*) SPRITES_EXPAND_X#0) ← (byte) $7f [ ] ( main:2::init:5::place_sprites:51 [ ] ) always clobbers reg byte a -Statement [213] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte) $7f [ ] ( main:2::init:5::place_sprites:51 [ ] ) always clobbers reg byte a -Statement [218] *((const byte*) SPRITES_YPOS#0 + (byte) place_sprites::j2#3) ← (byte) $50 [ place_sprites::j#2 place_sprites::spr_x#2 place_sprites::j2#3 place_sprites::col#2 place_sprites::spr_id#1 ] ( main:2::init:5::place_sprites:51 [ place_sprites::j#2 place_sprites::spr_x#2 place_sprites::j2#3 place_sprites::col#2 place_sprites::spr_id#1 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:48 [ place_sprites::j#2 place_sprites::j#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:49 [ place_sprites::spr_x#2 place_sprites::spr_x#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:50 [ place_sprites::j2#3 place_sprites::j2#2 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:51 [ place_sprites::col#2 place_sprites::col#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:47 [ place_sprites::spr_id#2 place_sprites::spr_id#1 ] -Statement [219] *((const byte*) SPRITES_COLS#0 + (byte) place_sprites::j#2) ← (byte) place_sprites::col#2 [ place_sprites::j#2 place_sprites::spr_x#2 place_sprites::j2#3 place_sprites::col#2 place_sprites::spr_id#1 ] ( main:2::init:5::place_sprites:51 [ place_sprites::j#2 place_sprites::spr_x#2 place_sprites::j2#3 place_sprites::col#2 place_sprites::spr_id#1 ] ) always clobbers reg byte a -Statement [220] (byte) place_sprites::spr_x#1 ← (byte) place_sprites::spr_x#2 + (byte) $20 [ place_sprites::j#2 place_sprites::j2#3 place_sprites::col#2 place_sprites::spr_id#1 place_sprites::spr_x#1 ] ( main:2::init:5::place_sprites:51 [ place_sprites::j#2 place_sprites::j2#3 place_sprites::col#2 place_sprites::spr_id#1 place_sprites::spr_x#1 ] ) always clobbers reg byte a -Statement [221] (byte) place_sprites::col#1 ← (byte) place_sprites::col#2 ^ (byte)(number) 7^(number) 5 [ place_sprites::j#2 place_sprites::j2#3 place_sprites::spr_id#1 place_sprites::spr_x#1 place_sprites::col#1 ] ( main:2::init:5::place_sprites:51 [ place_sprites::j#2 place_sprites::j2#3 place_sprites::spr_id#1 place_sprites::spr_x#1 place_sprites::col#1 ] ) always clobbers reg byte a +Statement [175] (byte*) gen_chargen_sprite::sprite#0 ← (byte*) gen_sprites::spr#2 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::ch#0 gen_chargen_sprite::sprite#0 ] ( main:2::init:5::gen_sprites:53 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::ch#0 gen_chargen_sprite::sprite#0 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:33 [ gen_sprites::i#2 gen_sprites::i#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:70 [ gen_chargen_sprite::ch#0 ] +Statement [177] (byte*) gen_sprites::spr#1 ← (byte*) gen_sprites::spr#2 + (byte) $40 [ gen_sprites::i#2 gen_sprites::spr#1 ] ( main:2::init:5::gen_sprites:53 [ gen_sprites::i#2 gen_sprites::spr#1 ] ) always clobbers reg byte a +Statement [181] (word~) gen_chargen_sprite::$0 ← (word)(byte) gen_chargen_sprite::ch#0 [ gen_chargen_sprite::sprite#0 gen_chargen_sprite::$0 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:176 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::sprite#0 gen_chargen_sprite::$0 ] ) always clobbers reg byte a +Statement [182] (word~) gen_chargen_sprite::$1 ← (word~) gen_chargen_sprite::$0 << (byte) 3 [ gen_chargen_sprite::sprite#0 gen_chargen_sprite::$1 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:176 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::sprite#0 gen_chargen_sprite::$1 ] ) always clobbers reg byte a +Statement [183] (byte*) gen_chargen_sprite::chargen#0 ← (const byte*) CHARGEN#0 + (word~) gen_chargen_sprite::$1 [ gen_chargen_sprite::sprite#0 gen_chargen_sprite::chargen#0 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:176 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::sprite#0 gen_chargen_sprite::chargen#0 ] ) always clobbers reg byte a +Statement [185] *((const byte*) PROCPORT#0) ← (byte) $32 [ gen_chargen_sprite::sprite#0 gen_chargen_sprite::chargen#0 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:176 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::sprite#0 gen_chargen_sprite::chargen#0 ] ) always clobbers reg byte a +Statement [187] (byte) gen_chargen_sprite::bits#0 ← *((byte*) gen_chargen_sprite::chargen#0 + (byte) gen_chargen_sprite::y#2) [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::sprite#11 gen_chargen_sprite::bits#0 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:176 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::sprite#11 gen_chargen_sprite::bits#0 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:36 [ gen_chargen_sprite::y#2 gen_chargen_sprite::y#1 ] +Statement [194] (byte~) gen_chargen_sprite::$6 ← (byte) gen_chargen_sprite::s_gen#3 << (byte) 1 [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::s_gen_cnt#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 gen_chargen_sprite::$6 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:176 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::s_gen_cnt#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 gen_chargen_sprite::$6 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:37 [ gen_chargen_sprite::bits#2 gen_chargen_sprite::bits#0 gen_chargen_sprite::bits#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:38 [ gen_chargen_sprite::x#6 gen_chargen_sprite::x#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:39 [ gen_chargen_sprite::c#3 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:41 [ gen_chargen_sprite::s_gen_cnt#3 gen_chargen_sprite::s_gen_cnt#4 gen_chargen_sprite::s_gen_cnt#5 gen_chargen_sprite::s_gen_cnt#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:42 [ gen_chargen_sprite::b#2 gen_chargen_sprite::b#1 ] +Statement [198] *((byte*) gen_chargen_sprite::sprite#3) ← (byte) gen_chargen_sprite::s_gen#1 [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 gen_chargen_sprite::s_gen#1 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:176 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 gen_chargen_sprite::s_gen#1 ] ) always clobbers reg byte y +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:33 [ gen_sprites::i#2 gen_sprites::i#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:36 [ gen_chargen_sprite::y#2 gen_chargen_sprite::y#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:37 [ gen_chargen_sprite::bits#2 gen_chargen_sprite::bits#0 gen_chargen_sprite::bits#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:38 [ gen_chargen_sprite::x#6 gen_chargen_sprite::x#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:39 [ gen_chargen_sprite::c#3 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:42 [ gen_chargen_sprite::b#2 gen_chargen_sprite::b#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:40 [ gen_chargen_sprite::s_gen#3 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen#6 gen_chargen_sprite::s_gen#1 ] +Statement [199] *((byte*) gen_chargen_sprite::sprite#3 + (byte) 3) ← (byte) gen_chargen_sprite::s_gen#1 [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 gen_chargen_sprite::s_gen#1 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:176 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 gen_chargen_sprite::s_gen#1 ] ) always clobbers reg byte y +Statement [200] *((byte*) gen_chargen_sprite::sprite#3 + (byte) 6) ← (byte) gen_chargen_sprite::s_gen#1 [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:176 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 ] ) always clobbers reg byte y +Statement [208] (byte*) gen_chargen_sprite::sprite#2 ← (byte*) gen_chargen_sprite::sprite#4 + (byte) 6 [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::sprite#2 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:176 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::sprite#2 ] ) always clobbers reg byte a +Statement [211] *((const byte*) PROCPORT#0) ← (byte) $37 [ ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:176 [ gen_sprites::i#2 gen_sprites::spr#2 ] ) always clobbers reg byte a +Statement [214] *((const byte*) SPRITES_ENABLE#0) ← (byte) $7f [ ] ( main:2::init:5::place_sprites:51 [ ] ) always clobbers reg byte a +Statement [215] *((const byte*) SPRITES_EXPAND_X#0) ← (byte) $7f [ ] ( main:2::init:5::place_sprites:51 [ ] ) always clobbers reg byte a +Statement [216] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte) $7f [ ] ( main:2::init:5::place_sprites:51 [ ] ) always clobbers reg byte a +Statement [221] *((const byte*) SPRITES_YPOS#0 + (byte) place_sprites::j2#3) ← (byte) $50 [ place_sprites::j#2 place_sprites::spr_x#2 place_sprites::j2#3 place_sprites::col#2 place_sprites::spr_id#1 ] ( main:2::init:5::place_sprites:51 [ place_sprites::j#2 place_sprites::spr_x#2 place_sprites::j2#3 place_sprites::col#2 place_sprites::spr_id#1 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:46 [ place_sprites::j#2 place_sprites::j#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:47 [ place_sprites::spr_x#2 place_sprites::spr_x#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:48 [ place_sprites::j2#3 place_sprites::j2#2 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:49 [ place_sprites::col#2 place_sprites::col#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:45 [ place_sprites::spr_id#2 place_sprites::spr_id#1 ] +Statement [222] *((const byte*) SPRITES_COLS#0 + (byte) place_sprites::j#2) ← (byte) place_sprites::col#2 [ place_sprites::j#2 place_sprites::spr_x#2 place_sprites::j2#3 place_sprites::col#2 place_sprites::spr_id#1 ] ( main:2::init:5::place_sprites:51 [ place_sprites::j#2 place_sprites::spr_x#2 place_sprites::j2#3 place_sprites::col#2 place_sprites::spr_id#1 ] ) always clobbers reg byte a +Statement [223] (byte) place_sprites::spr_x#1 ← (byte) place_sprites::spr_x#2 + (byte) $20 [ place_sprites::j#2 place_sprites::j2#3 place_sprites::col#2 place_sprites::spr_id#1 place_sprites::spr_x#1 ] ( main:2::init:5::place_sprites:51 [ place_sprites::j#2 place_sprites::j2#3 place_sprites::col#2 place_sprites::spr_id#1 place_sprites::spr_x#1 ] ) always clobbers reg byte a +Statement [224] (byte) place_sprites::col#1 ← (byte) place_sprites::col#2 ^ (byte)(number) 7^(number) 5 [ place_sprites::j#2 place_sprites::j2#3 place_sprites::spr_id#1 place_sprites::spr_x#1 place_sprites::col#1 ] ( main:2::init:5::place_sprites:51 [ place_sprites::j#2 place_sprites::j2#3 place_sprites::spr_id#1 place_sprites::spr_x#1 place_sprites::col#1 ] ) always clobbers reg byte a Statement [7] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@1 [ sin_idx_x#13 sin_idx_y#13 ] ( main:2 [ sin_idx_x#13 sin_idx_y#13 ] ) always clobbers reg byte a Statement [14] (word) anim::x#0 ← (word) $1e + *((const byte[$dd]) sintab_x#0 + (byte) anim::xidx#3) [ sin_idx_x#13 sin_idx_y#13 anim::xidx#3 anim::x_msb#2 anim::j2#2 anim::yidx#3 anim::j#2 anim::x#0 ] ( main:2::anim:9 [ sin_idx_x#13 sin_idx_y#13 anim::xidx#3 anim::x_msb#2 anim::j2#2 anim::yidx#3 anim::j#2 anim::x#0 ] ) always clobbers reg byte a Statement [15] (byte~) anim::$6 ← (byte) anim::x_msb#2 << (byte) 1 [ sin_idx_x#13 sin_idx_y#13 anim::xidx#3 anim::j2#2 anim::yidx#3 anim::j#2 anim::x#0 anim::$6 ] ( main:2::anim:9 [ sin_idx_x#13 sin_idx_y#13 anim::xidx#3 anim::j2#2 anim::yidx#3 anim::j#2 anim::x#0 anim::$6 ] ) always clobbers reg byte a @@ -5170,44 +5294,50 @@ Statement [118] *((byte*) gen_sintab::sintab#13 + (byte) gen_sintab::i#10) ← ( Statement [122] if((byte) progress_idx#10!=(byte) 8) goto progress_inc::@1 [ progress_cursor#13 progress_idx#10 ] ( main:2::init:5::gen_sintab:57::progress_inc:119 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_cursor#13 progress_idx#10 ] main:2::init:5::gen_sintab:61::progress_inc:119 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_cursor#13 progress_idx#10 ] ) always clobbers reg byte a Statement [123] *((byte*) progress_cursor#13) ← *((const byte[]) progress_inc::progress_chars#0+(byte) 8) [ progress_cursor#13 ] ( main:2::init:5::gen_sintab:57::progress_inc:119 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_cursor#13 ] main:2::init:5::gen_sintab:61::progress_inc:119 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_cursor#13 ] ) always clobbers reg byte a reg byte y Statement [126] *((byte*) progress_cursor#11) ← *((const byte[]) progress_inc::progress_chars#0 + (byte) progress_idx#12) [ progress_idx#12 progress_cursor#11 ] ( main:2::init:5::gen_sintab:57::progress_inc:119 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#12 progress_cursor#11 ] main:2::init:5::gen_sintab:61::progress_inc:119 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#12 progress_cursor#11 ] ) always clobbers reg byte a reg byte y -Statement asm { jsr$b1aa sty$fe sta$ff } always clobbers reg byte a reg byte x reg byte y +Statement asm { jsr$b1aa stymemLo stamemHi } always clobbers reg byte a reg byte x reg byte y Statement [129] (word) getFAC::return#0 ← *((const byte*) memHi#0) w= *((const byte*) memLo#0) [ getFAC::return#0 ] ( main:2::init:5::gen_sintab:57::getFAC:114 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 getFAC::return#0 ] main:2::init:5::gen_sintab:61::getFAC:114 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 getFAC::return#0 ] ) always clobbers reg byte a -Statement asm { lda$fe ldy$ff jsr$b867 } always clobbers reg byte a reg byte x reg byte y -Statement [142] (byte*) prepareMEM::mem#4 ← (byte*) mulFACbyMEM::mem#2 [ prepareMEM::mem#4 ] ( main:2::init:5::gen_sintab:57::mulFACbyMEM:100 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 prepareMEM::mem#4 ] main:2::init:5::gen_sintab:61::mulFACbyMEM:100 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 prepareMEM::mem#4 ] main:2::init:5::gen_sintab:57::mulFACbyMEM:110 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 prepareMEM::mem#4 ] main:2::init:5::gen_sintab:61::mulFACbyMEM:110 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 prepareMEM::mem#4 ] ) always clobbers reg byte a -Statement asm { lda$fe ldy$ff jsr$ba28 } always clobbers reg byte a reg byte x reg byte y +Statement [132] *((const byte*) memLo#0) ← <(word)(const byte[]) gen_sintab::f_min#0 [ ] ( main:2::init:5::gen_sintab:57::addMEMtoFAC:91 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 ] main:2::init:5::gen_sintab:61::addMEMtoFAC:91 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 ] main:2::init:5::gen_sintab:57::addMEMtoFAC:112 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 ] main:2::init:5::gen_sintab:61::addMEMtoFAC:112 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 ] ) always clobbers reg byte a +Statement [133] *((const byte*) memHi#0) ← >(word)(const byte[]) gen_sintab::f_min#0 [ ] ( main:2::init:5::gen_sintab:57::addMEMtoFAC:91 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 ] main:2::init:5::gen_sintab:61::addMEMtoFAC:91 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 ] main:2::init:5::gen_sintab:57::addMEMtoFAC:112 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 ] main:2::init:5::gen_sintab:61::addMEMtoFAC:112 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 ] ) always clobbers reg byte a +Statement asm { ldamemLo ldymemHi jsr$b867 } always clobbers reg byte a reg byte x reg byte y +Statement [137] (byte~) mulFACbyMEM::prepareMEM1_$0#0 ← < (word)(byte*) mulFACbyMEM::mem#2 [ mulFACbyMEM::mem#2 mulFACbyMEM::prepareMEM1_$0#0 ] ( main:2::init:5::gen_sintab:57::mulFACbyMEM:100 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 mulFACbyMEM::mem#2 mulFACbyMEM::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:61::mulFACbyMEM:100 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 mulFACbyMEM::mem#2 mulFACbyMEM::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:57::mulFACbyMEM:110 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 mulFACbyMEM::mem#2 mulFACbyMEM::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:61::mulFACbyMEM:110 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 mulFACbyMEM::mem#2 mulFACbyMEM::prepareMEM1_$0#0 ] ) always clobbers reg byte a +Statement [139] (byte~) mulFACbyMEM::prepareMEM1_$1#0 ← > (word)(byte*) mulFACbyMEM::mem#2 [ mulFACbyMEM::prepareMEM1_$1#0 ] ( main:2::init:5::gen_sintab:57::mulFACbyMEM:100 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 mulFACbyMEM::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:61::mulFACbyMEM:100 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 mulFACbyMEM::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:57::mulFACbyMEM:110 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 mulFACbyMEM::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:61::mulFACbyMEM:110 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 mulFACbyMEM::prepareMEM1_$1#0 ] ) always clobbers reg byte a +Statement asm { ldamemLo ldymemHi jsr$ba28 } always clobbers reg byte a reg byte x reg byte y Statement asm { jsr$e26b } always clobbers reg byte a reg byte x reg byte y -Statement [149] (byte*) prepareMEM::mem#3 ← (byte*) divMEMbyFAC::mem#2 [ prepareMEM::mem#3 ] ( main:2::init:5::gen_sintab:57::divMEMbyFAC:87 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 prepareMEM::mem#3 ] main:2::init:5::gen_sintab:61::divMEMbyFAC:87 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 prepareMEM::mem#3 ] main:2::init:5::gen_sintab:57::divMEMbyFAC:106 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 prepareMEM::mem#3 ] main:2::init:5::gen_sintab:61::divMEMbyFAC:106 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 prepareMEM::mem#3 ] ) always clobbers reg byte a -Statement asm { lda$fe ldy$ff jsr$bb0f } always clobbers reg byte a reg byte x reg byte y -Statement [154] (byte*) prepareMEM::mem#0 ← (byte*)(word) setFAC::w#5 [ prepareMEM::mem#0 ] ( main:2::init:5::gen_sintab:57::setFAC:73 [ gen_sintab::min#2 gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 prepareMEM::mem#0 ] main:2::init:5::gen_sintab:61::setFAC:73 [ gen_sintab::min#2 gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 prepareMEM::mem#0 ] main:2::init:5::gen_sintab:57::setFAC:77 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 prepareMEM::mem#0 ] main:2::init:5::gen_sintab:61::setFAC:77 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 prepareMEM::mem#0 ] main:2::init:5::gen_sintab:57::setFAC:85 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 prepareMEM::mem#0 ] main:2::init:5::gen_sintab:61::setFAC:85 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 prepareMEM::mem#0 ] main:2::init:5::gen_sintab:57::setFAC:98 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 prepareMEM::mem#0 ] main:2::init:5::gen_sintab:61::setFAC:98 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 prepareMEM::mem#0 ] main:2::init:5::gen_sintab:57::setFAC:104 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 prepareMEM::mem#0 ] main:2::init:5::gen_sintab:61::setFAC:104 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 prepareMEM::mem#0 ] ) always clobbers reg byte a -Statement asm { ldy$fe lda$ff jsr$b391 } always clobbers reg byte a reg byte x reg byte y -Statement [159] (byte*) prepareMEM::mem#1 ← (byte*) setMEMtoFAC::mem#5 [ prepareMEM::mem#1 ] ( main:2::init:5::gen_sintab:57::setMEMtoFAC:79 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 prepareMEM::mem#1 ] main:2::init:5::gen_sintab:61::setMEMtoFAC:79 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 prepareMEM::mem#1 ] main:2::init:5::gen_sintab:57::setMEMtoFAC:83 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 prepareMEM::mem#1 ] main:2::init:5::gen_sintab:61::setMEMtoFAC:83 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 prepareMEM::mem#1 ] main:2::init:5::gen_sintab:57::setMEMtoFAC:89 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 prepareMEM::mem#1 ] main:2::init:5::gen_sintab:61::setMEMtoFAC:89 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 prepareMEM::mem#1 ] main:2::init:5::gen_sintab:57::setMEMtoFAC:93 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 prepareMEM::mem#1 ] main:2::init:5::gen_sintab:61::setMEMtoFAC:93 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 prepareMEM::mem#1 ] main:2::init:5::gen_sintab:57::setMEMtoFAC:102 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 prepareMEM::mem#1 ] main:2::init:5::gen_sintab:61::setMEMtoFAC:102 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 prepareMEM::mem#1 ] ) always clobbers reg byte a -Statement asm { ldx$fe ldy$ff jsr$bbd4 } always clobbers reg byte a reg byte x reg byte y +Statement [146] (byte~) divMEMbyFAC::prepareMEM1_$0#0 ← < (word)(byte*) divMEMbyFAC::mem#2 [ divMEMbyFAC::mem#2 divMEMbyFAC::prepareMEM1_$0#0 ] ( main:2::init:5::gen_sintab:57::divMEMbyFAC:87 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 divMEMbyFAC::mem#2 divMEMbyFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:61::divMEMbyFAC:87 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 divMEMbyFAC::mem#2 divMEMbyFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:57::divMEMbyFAC:106 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 divMEMbyFAC::mem#2 divMEMbyFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:61::divMEMbyFAC:106 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 divMEMbyFAC::mem#2 divMEMbyFAC::prepareMEM1_$0#0 ] ) always clobbers reg byte a +Statement [148] (byte~) divMEMbyFAC::prepareMEM1_$1#0 ← > (word)(byte*) divMEMbyFAC::mem#2 [ divMEMbyFAC::prepareMEM1_$1#0 ] ( main:2::init:5::gen_sintab:57::divMEMbyFAC:87 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 divMEMbyFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:61::divMEMbyFAC:87 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 divMEMbyFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:57::divMEMbyFAC:106 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 divMEMbyFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:61::divMEMbyFAC:106 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 divMEMbyFAC::prepareMEM1_$1#0 ] ) always clobbers reg byte a +Statement asm { ldamemLo ldymemHi jsr$bb0f } always clobbers reg byte a reg byte x reg byte y +Statement [153] (byte~) setFAC::prepareMEM1_$0#0 ← < (word) setFAC::prepareMEM1_mem#0 [ setFAC::prepareMEM1_mem#0 setFAC::prepareMEM1_$0#0 ] ( main:2::init:5::gen_sintab:57::setFAC:73 [ gen_sintab::min#2 gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setFAC::prepareMEM1_mem#0 setFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:61::setFAC:73 [ gen_sintab::min#2 gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setFAC::prepareMEM1_mem#0 setFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:57::setFAC:77 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setFAC::prepareMEM1_mem#0 setFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:61::setFAC:77 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setFAC::prepareMEM1_mem#0 setFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:57::setFAC:85 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setFAC::prepareMEM1_mem#0 setFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:61::setFAC:85 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setFAC::prepareMEM1_mem#0 setFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:57::setFAC:98 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 setFAC::prepareMEM1_mem#0 setFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:61::setFAC:98 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 setFAC::prepareMEM1_mem#0 setFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:57::setFAC:104 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 setFAC::prepareMEM1_mem#0 setFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:61::setFAC:104 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 setFAC::prepareMEM1_mem#0 setFAC::prepareMEM1_$0#0 ] ) always clobbers reg byte a +Statement [155] (byte~) setFAC::prepareMEM1_$1#0 ← > (word) setFAC::prepareMEM1_mem#0 [ setFAC::prepareMEM1_$1#0 ] ( main:2::init:5::gen_sintab:57::setFAC:73 [ gen_sintab::min#2 gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:61::setFAC:73 [ gen_sintab::min#2 gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:57::setFAC:77 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:61::setFAC:77 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:57::setFAC:85 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:61::setFAC:85 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:57::setFAC:98 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 setFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:61::setFAC:98 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 setFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:57::setFAC:104 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 setFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:61::setFAC:104 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 setFAC::prepareMEM1_$1#0 ] ) always clobbers reg byte a +Statement asm { ldymemLo ldamemHi jsr$b391 } always clobbers reg byte a reg byte x reg byte y +Statement [160] (byte~) setMEMtoFAC::prepareMEM1_$0#0 ← < (word)(byte*) setMEMtoFAC::mem#5 [ setMEMtoFAC::mem#5 setMEMtoFAC::prepareMEM1_$0#0 ] ( main:2::init:5::gen_sintab:57::setMEMtoFAC:79 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setMEMtoFAC::mem#5 setMEMtoFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:61::setMEMtoFAC:79 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setMEMtoFAC::mem#5 setMEMtoFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:57::setMEMtoFAC:83 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setMEMtoFAC::mem#5 setMEMtoFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:61::setMEMtoFAC:83 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setMEMtoFAC::mem#5 setMEMtoFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:57::setMEMtoFAC:89 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setMEMtoFAC::mem#5 setMEMtoFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:61::setMEMtoFAC:89 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setMEMtoFAC::mem#5 setMEMtoFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:57::setMEMtoFAC:93 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setMEMtoFAC::mem#5 setMEMtoFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:61::setMEMtoFAC:93 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setMEMtoFAC::mem#5 setMEMtoFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:57::setMEMtoFAC:102 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 setMEMtoFAC::mem#5 setMEMtoFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:61::setMEMtoFAC:102 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 setMEMtoFAC::mem#5 setMEMtoFAC::prepareMEM1_$0#0 ] ) always clobbers reg byte a +Statement [162] (byte~) setMEMtoFAC::prepareMEM1_$1#0 ← > (word)(byte*) setMEMtoFAC::mem#5 [ setMEMtoFAC::prepareMEM1_$1#0 ] ( main:2::init:5::gen_sintab:57::setMEMtoFAC:79 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setMEMtoFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:61::setMEMtoFAC:79 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setMEMtoFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:57::setMEMtoFAC:83 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setMEMtoFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:61::setMEMtoFAC:83 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setMEMtoFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:57::setMEMtoFAC:89 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setMEMtoFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:61::setMEMtoFAC:89 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setMEMtoFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:57::setMEMtoFAC:93 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setMEMtoFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:61::setMEMtoFAC:93 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setMEMtoFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:57::setMEMtoFAC:102 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 setMEMtoFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:61::setMEMtoFAC:102 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 setMEMtoFAC::prepareMEM1_$1#0 ] ) always clobbers reg byte a +Statement asm { ldxmemLo ldymemHi jsr$bbd4 } always clobbers reg byte a reg byte x reg byte y Statement asm { jsr$b853 } always clobbers reg byte a reg byte x reg byte y Statement asm { jsr$bc0f } always clobbers reg byte a reg byte x -Statement [172] (byte*) gen_chargen_sprite::sprite#0 ← (byte*) gen_sprites::spr#2 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::ch#0 gen_chargen_sprite::sprite#0 ] ( main:2::init:5::gen_sprites:53 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::ch#0 gen_chargen_sprite::sprite#0 ] ) always clobbers reg byte a -Statement [174] (byte*) gen_sprites::spr#1 ← (byte*) gen_sprites::spr#2 + (byte) $40 [ gen_sprites::i#2 gen_sprites::spr#1 ] ( main:2::init:5::gen_sprites:53 [ gen_sprites::i#2 gen_sprites::spr#1 ] ) always clobbers reg byte a -Statement [178] (word~) gen_chargen_sprite::$0 ← (word)(byte) gen_chargen_sprite::ch#0 [ gen_chargen_sprite::sprite#0 gen_chargen_sprite::$0 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:173 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::sprite#0 gen_chargen_sprite::$0 ] ) always clobbers reg byte a -Statement [179] (word~) gen_chargen_sprite::$1 ← (word~) gen_chargen_sprite::$0 << (byte) 3 [ gen_chargen_sprite::sprite#0 gen_chargen_sprite::$1 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:173 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::sprite#0 gen_chargen_sprite::$1 ] ) always clobbers reg byte a -Statement [180] (byte*) gen_chargen_sprite::chargen#0 ← (const byte*) CHARGEN#0 + (word~) gen_chargen_sprite::$1 [ gen_chargen_sprite::sprite#0 gen_chargen_sprite::chargen#0 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:173 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::sprite#0 gen_chargen_sprite::chargen#0 ] ) always clobbers reg byte a -Statement [182] *((const byte*) PROCPORT#0) ← (byte) $32 [ gen_chargen_sprite::sprite#0 gen_chargen_sprite::chargen#0 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:173 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::sprite#0 gen_chargen_sprite::chargen#0 ] ) always clobbers reg byte a -Statement [184] (byte) gen_chargen_sprite::bits#0 ← *((byte*) gen_chargen_sprite::chargen#0 + (byte) gen_chargen_sprite::y#2) [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::sprite#11 gen_chargen_sprite::bits#0 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:173 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::sprite#11 gen_chargen_sprite::bits#0 ] ) always clobbers reg byte a reg byte y -Statement [186] (byte~) gen_chargen_sprite::$3 ← (byte) gen_chargen_sprite::bits#2 & (byte) $80 [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen_cnt#4 gen_chargen_sprite::sprite#10 gen_chargen_sprite::x#6 gen_chargen_sprite::$3 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:173 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen_cnt#4 gen_chargen_sprite::sprite#10 gen_chargen_sprite::x#6 gen_chargen_sprite::$3 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:42 [ gen_chargen_sprite::s_gen#3 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen#6 gen_chargen_sprite::s_gen#1 ] -Statement [191] (byte~) gen_chargen_sprite::$6 ← (byte) gen_chargen_sprite::s_gen#3 << (byte) 1 [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::s_gen_cnt#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 gen_chargen_sprite::$6 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:173 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::s_gen_cnt#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 gen_chargen_sprite::$6 ] ) always clobbers reg byte a -Statement [195] *((byte*) gen_chargen_sprite::sprite#3) ← (byte) gen_chargen_sprite::s_gen#1 [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 gen_chargen_sprite::s_gen#1 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:173 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 gen_chargen_sprite::s_gen#1 ] ) always clobbers reg byte a reg byte y -Statement [196] *((byte*) gen_chargen_sprite::sprite#3 + (byte) 3) ← (byte) gen_chargen_sprite::s_gen#1 [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 gen_chargen_sprite::s_gen#1 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:173 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 gen_chargen_sprite::s_gen#1 ] ) always clobbers reg byte a reg byte y -Statement [197] *((byte*) gen_chargen_sprite::sprite#3 + (byte) 6) ← (byte) gen_chargen_sprite::s_gen#1 [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:173 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 ] ) always clobbers reg byte a reg byte y -Statement [205] (byte*) gen_chargen_sprite::sprite#2 ← (byte*) gen_chargen_sprite::sprite#4 + (byte) 6 [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::sprite#2 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:173 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::sprite#2 ] ) always clobbers reg byte a -Statement [208] *((const byte*) PROCPORT#0) ← (byte) $37 [ ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:173 [ gen_sprites::i#2 gen_sprites::spr#2 ] ) always clobbers reg byte a -Statement [211] *((const byte*) SPRITES_ENABLE#0) ← (byte) $7f [ ] ( main:2::init:5::place_sprites:51 [ ] ) always clobbers reg byte a -Statement [212] *((const byte*) SPRITES_EXPAND_X#0) ← (byte) $7f [ ] ( main:2::init:5::place_sprites:51 [ ] ) always clobbers reg byte a -Statement [213] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte) $7f [ ] ( main:2::init:5::place_sprites:51 [ ] ) always clobbers reg byte a -Statement [215] *((const byte*) place_sprites::sprites_ptr#0 + (byte) place_sprites::j#2) ← (byte) place_sprites::spr_id#2 [ place_sprites::spr_id#2 place_sprites::j#2 place_sprites::spr_x#2 place_sprites::j2#3 place_sprites::col#2 ] ( main:2::init:5::place_sprites:51 [ place_sprites::spr_id#2 place_sprites::j#2 place_sprites::spr_x#2 place_sprites::j2#3 place_sprites::col#2 ] ) always clobbers reg byte a -Statement [217] *((const byte*) SPRITES_XPOS#0 + (byte) place_sprites::j2#3) ← (byte) place_sprites::spr_x#2 [ place_sprites::j#2 place_sprites::spr_x#2 place_sprites::j2#3 place_sprites::col#2 place_sprites::spr_id#1 ] ( main:2::init:5::place_sprites:51 [ place_sprites::j#2 place_sprites::spr_x#2 place_sprites::j2#3 place_sprites::col#2 place_sprites::spr_id#1 ] ) always clobbers reg byte a -Statement [218] *((const byte*) SPRITES_YPOS#0 + (byte) place_sprites::j2#3) ← (byte) $50 [ place_sprites::j#2 place_sprites::spr_x#2 place_sprites::j2#3 place_sprites::col#2 place_sprites::spr_id#1 ] ( main:2::init:5::place_sprites:51 [ place_sprites::j#2 place_sprites::spr_x#2 place_sprites::j2#3 place_sprites::col#2 place_sprites::spr_id#1 ] ) always clobbers reg byte a -Statement [219] *((const byte*) SPRITES_COLS#0 + (byte) place_sprites::j#2) ← (byte) place_sprites::col#2 [ place_sprites::j#2 place_sprites::spr_x#2 place_sprites::j2#3 place_sprites::col#2 place_sprites::spr_id#1 ] ( main:2::init:5::place_sprites:51 [ place_sprites::j#2 place_sprites::spr_x#2 place_sprites::j2#3 place_sprites::col#2 place_sprites::spr_id#1 ] ) always clobbers reg byte a -Statement [220] (byte) place_sprites::spr_x#1 ← (byte) place_sprites::spr_x#2 + (byte) $20 [ place_sprites::j#2 place_sprites::j2#3 place_sprites::col#2 place_sprites::spr_id#1 place_sprites::spr_x#1 ] ( main:2::init:5::place_sprites:51 [ place_sprites::j#2 place_sprites::j2#3 place_sprites::col#2 place_sprites::spr_id#1 place_sprites::spr_x#1 ] ) always clobbers reg byte a -Statement [221] (byte) place_sprites::col#1 ← (byte) place_sprites::col#2 ^ (byte)(number) 7^(number) 5 [ place_sprites::j#2 place_sprites::j2#3 place_sprites::spr_id#1 place_sprites::spr_x#1 place_sprites::col#1 ] ( main:2::init:5::place_sprites:51 [ place_sprites::j#2 place_sprites::j2#3 place_sprites::spr_id#1 place_sprites::spr_x#1 place_sprites::col#1 ] ) always clobbers reg byte a +Statement [175] (byte*) gen_chargen_sprite::sprite#0 ← (byte*) gen_sprites::spr#2 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::ch#0 gen_chargen_sprite::sprite#0 ] ( main:2::init:5::gen_sprites:53 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::ch#0 gen_chargen_sprite::sprite#0 ] ) always clobbers reg byte a +Statement [177] (byte*) gen_sprites::spr#1 ← (byte*) gen_sprites::spr#2 + (byte) $40 [ gen_sprites::i#2 gen_sprites::spr#1 ] ( main:2::init:5::gen_sprites:53 [ gen_sprites::i#2 gen_sprites::spr#1 ] ) always clobbers reg byte a +Statement [181] (word~) gen_chargen_sprite::$0 ← (word)(byte) gen_chargen_sprite::ch#0 [ gen_chargen_sprite::sprite#0 gen_chargen_sprite::$0 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:176 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::sprite#0 gen_chargen_sprite::$0 ] ) always clobbers reg byte a +Statement [182] (word~) gen_chargen_sprite::$1 ← (word~) gen_chargen_sprite::$0 << (byte) 3 [ gen_chargen_sprite::sprite#0 gen_chargen_sprite::$1 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:176 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::sprite#0 gen_chargen_sprite::$1 ] ) always clobbers reg byte a +Statement [183] (byte*) gen_chargen_sprite::chargen#0 ← (const byte*) CHARGEN#0 + (word~) gen_chargen_sprite::$1 [ gen_chargen_sprite::sprite#0 gen_chargen_sprite::chargen#0 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:176 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::sprite#0 gen_chargen_sprite::chargen#0 ] ) always clobbers reg byte a +Statement [185] *((const byte*) PROCPORT#0) ← (byte) $32 [ gen_chargen_sprite::sprite#0 gen_chargen_sprite::chargen#0 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:176 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::sprite#0 gen_chargen_sprite::chargen#0 ] ) always clobbers reg byte a +Statement [187] (byte) gen_chargen_sprite::bits#0 ← *((byte*) gen_chargen_sprite::chargen#0 + (byte) gen_chargen_sprite::y#2) [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::sprite#11 gen_chargen_sprite::bits#0 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:176 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::sprite#11 gen_chargen_sprite::bits#0 ] ) always clobbers reg byte a reg byte y +Statement [189] (byte~) gen_chargen_sprite::$3 ← (byte) gen_chargen_sprite::bits#2 & (byte) $80 [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen_cnt#4 gen_chargen_sprite::sprite#10 gen_chargen_sprite::x#6 gen_chargen_sprite::$3 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:176 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen_cnt#4 gen_chargen_sprite::sprite#10 gen_chargen_sprite::x#6 gen_chargen_sprite::$3 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:40 [ gen_chargen_sprite::s_gen#3 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen#6 gen_chargen_sprite::s_gen#1 ] +Statement [194] (byte~) gen_chargen_sprite::$6 ← (byte) gen_chargen_sprite::s_gen#3 << (byte) 1 [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::s_gen_cnt#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 gen_chargen_sprite::$6 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:176 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::s_gen_cnt#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 gen_chargen_sprite::$6 ] ) always clobbers reg byte a +Statement [198] *((byte*) gen_chargen_sprite::sprite#3) ← (byte) gen_chargen_sprite::s_gen#1 [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 gen_chargen_sprite::s_gen#1 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:176 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 gen_chargen_sprite::s_gen#1 ] ) always clobbers reg byte a reg byte y +Statement [199] *((byte*) gen_chargen_sprite::sprite#3 + (byte) 3) ← (byte) gen_chargen_sprite::s_gen#1 [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 gen_chargen_sprite::s_gen#1 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:176 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 gen_chargen_sprite::s_gen#1 ] ) always clobbers reg byte a reg byte y +Statement [200] *((byte*) gen_chargen_sprite::sprite#3 + (byte) 6) ← (byte) gen_chargen_sprite::s_gen#1 [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:176 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 ] ) always clobbers reg byte a reg byte y +Statement [208] (byte*) gen_chargen_sprite::sprite#2 ← (byte*) gen_chargen_sprite::sprite#4 + (byte) 6 [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::sprite#2 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:176 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::sprite#2 ] ) always clobbers reg byte a +Statement [211] *((const byte*) PROCPORT#0) ← (byte) $37 [ ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:176 [ gen_sprites::i#2 gen_sprites::spr#2 ] ) always clobbers reg byte a +Statement [214] *((const byte*) SPRITES_ENABLE#0) ← (byte) $7f [ ] ( main:2::init:5::place_sprites:51 [ ] ) always clobbers reg byte a +Statement [215] *((const byte*) SPRITES_EXPAND_X#0) ← (byte) $7f [ ] ( main:2::init:5::place_sprites:51 [ ] ) always clobbers reg byte a +Statement [216] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte) $7f [ ] ( main:2::init:5::place_sprites:51 [ ] ) always clobbers reg byte a +Statement [218] *((const byte*) place_sprites::sprites_ptr#0 + (byte) place_sprites::j#2) ← (byte) place_sprites::spr_id#2 [ place_sprites::spr_id#2 place_sprites::j#2 place_sprites::spr_x#2 place_sprites::j2#3 place_sprites::col#2 ] ( main:2::init:5::place_sprites:51 [ place_sprites::spr_id#2 place_sprites::j#2 place_sprites::spr_x#2 place_sprites::j2#3 place_sprites::col#2 ] ) always clobbers reg byte a +Statement [220] *((const byte*) SPRITES_XPOS#0 + (byte) place_sprites::j2#3) ← (byte) place_sprites::spr_x#2 [ place_sprites::j#2 place_sprites::spr_x#2 place_sprites::j2#3 place_sprites::col#2 place_sprites::spr_id#1 ] ( main:2::init:5::place_sprites:51 [ place_sprites::j#2 place_sprites::spr_x#2 place_sprites::j2#3 place_sprites::col#2 place_sprites::spr_id#1 ] ) always clobbers reg byte a +Statement [221] *((const byte*) SPRITES_YPOS#0 + (byte) place_sprites::j2#3) ← (byte) $50 [ place_sprites::j#2 place_sprites::spr_x#2 place_sprites::j2#3 place_sprites::col#2 place_sprites::spr_id#1 ] ( main:2::init:5::place_sprites:51 [ place_sprites::j#2 place_sprites::spr_x#2 place_sprites::j2#3 place_sprites::col#2 place_sprites::spr_id#1 ] ) always clobbers reg byte a +Statement [222] *((const byte*) SPRITES_COLS#0 + (byte) place_sprites::j#2) ← (byte) place_sprites::col#2 [ place_sprites::j#2 place_sprites::spr_x#2 place_sprites::j2#3 place_sprites::col#2 place_sprites::spr_id#1 ] ( main:2::init:5::place_sprites:51 [ place_sprites::j#2 place_sprites::spr_x#2 place_sprites::j2#3 place_sprites::col#2 place_sprites::spr_id#1 ] ) always clobbers reg byte a +Statement [223] (byte) place_sprites::spr_x#1 ← (byte) place_sprites::spr_x#2 + (byte) $20 [ place_sprites::j#2 place_sprites::j2#3 place_sprites::col#2 place_sprites::spr_id#1 place_sprites::spr_x#1 ] ( main:2::init:5::place_sprites:51 [ place_sprites::j#2 place_sprites::j2#3 place_sprites::col#2 place_sprites::spr_id#1 place_sprites::spr_x#1 ] ) always clobbers reg byte a +Statement [224] (byte) place_sprites::col#1 ← (byte) place_sprites::col#2 ^ (byte)(number) 7^(number) 5 [ place_sprites::j#2 place_sprites::j2#3 place_sprites::spr_id#1 place_sprites::spr_x#1 place_sprites::col#1 ] ( main:2::init:5::place_sprites:51 [ place_sprites::j#2 place_sprites::j2#3 place_sprites::spr_id#1 place_sprites::spr_x#1 place_sprites::col#1 ] ) always clobbers reg byte a Statement [7] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@1 [ sin_idx_x#13 sin_idx_y#13 ] ( main:2 [ sin_idx_x#13 sin_idx_y#13 ] ) always clobbers reg byte a Statement [14] (word) anim::x#0 ← (word) $1e + *((const byte[$dd]) sintab_x#0 + (byte) anim::xidx#3) [ sin_idx_x#13 sin_idx_y#13 anim::xidx#3 anim::x_msb#2 anim::j2#2 anim::yidx#3 anim::j#2 anim::x#0 ] ( main:2::anim:9 [ sin_idx_x#13 sin_idx_y#13 anim::xidx#3 anim::x_msb#2 anim::j2#2 anim::yidx#3 anim::j#2 anim::x#0 ] ) always clobbers reg byte a Statement [15] (byte~) anim::$6 ← (byte) anim::x_msb#2 << (byte) 1 [ sin_idx_x#13 sin_idx_y#13 anim::xidx#3 anim::j2#2 anim::yidx#3 anim::j#2 anim::x#0 anim::$6 ] ( main:2::anim:9 [ sin_idx_x#13 sin_idx_y#13 anim::xidx#3 anim::j2#2 anim::yidx#3 anim::j#2 anim::x#0 anim::$6 ] ) always clobbers reg byte a @@ -5233,43 +5363,49 @@ Statement [118] *((byte*) gen_sintab::sintab#13 + (byte) gen_sintab::i#10) ← ( Statement [122] if((byte) progress_idx#10!=(byte) 8) goto progress_inc::@1 [ progress_cursor#13 progress_idx#10 ] ( main:2::init:5::gen_sintab:57::progress_inc:119 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_cursor#13 progress_idx#10 ] main:2::init:5::gen_sintab:61::progress_inc:119 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_cursor#13 progress_idx#10 ] ) always clobbers reg byte a Statement [123] *((byte*) progress_cursor#13) ← *((const byte[]) progress_inc::progress_chars#0+(byte) 8) [ progress_cursor#13 ] ( main:2::init:5::gen_sintab:57::progress_inc:119 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_cursor#13 ] main:2::init:5::gen_sintab:61::progress_inc:119 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_cursor#13 ] ) always clobbers reg byte a reg byte y Statement [126] *((byte*) progress_cursor#11) ← *((const byte[]) progress_inc::progress_chars#0 + (byte) progress_idx#12) [ progress_idx#12 progress_cursor#11 ] ( main:2::init:5::gen_sintab:57::progress_inc:119 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#12 progress_cursor#11 ] main:2::init:5::gen_sintab:61::progress_inc:119 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#12 progress_cursor#11 ] ) always clobbers reg byte a reg byte y -Statement asm { jsr$b1aa sty$fe sta$ff } always clobbers reg byte a reg byte x reg byte y +Statement asm { jsr$b1aa stymemLo stamemHi } always clobbers reg byte a reg byte x reg byte y Statement [129] (word) getFAC::return#0 ← *((const byte*) memHi#0) w= *((const byte*) memLo#0) [ getFAC::return#0 ] ( main:2::init:5::gen_sintab:57::getFAC:114 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 getFAC::return#0 ] main:2::init:5::gen_sintab:61::getFAC:114 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 getFAC::return#0 ] ) always clobbers reg byte a -Statement asm { lda$fe ldy$ff jsr$b867 } always clobbers reg byte a reg byte x reg byte y -Statement [142] (byte*) prepareMEM::mem#4 ← (byte*) mulFACbyMEM::mem#2 [ prepareMEM::mem#4 ] ( main:2::init:5::gen_sintab:57::mulFACbyMEM:100 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 prepareMEM::mem#4 ] main:2::init:5::gen_sintab:61::mulFACbyMEM:100 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 prepareMEM::mem#4 ] main:2::init:5::gen_sintab:57::mulFACbyMEM:110 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 prepareMEM::mem#4 ] main:2::init:5::gen_sintab:61::mulFACbyMEM:110 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 prepareMEM::mem#4 ] ) always clobbers reg byte a -Statement asm { lda$fe ldy$ff jsr$ba28 } always clobbers reg byte a reg byte x reg byte y +Statement [132] *((const byte*) memLo#0) ← <(word)(const byte[]) gen_sintab::f_min#0 [ ] ( main:2::init:5::gen_sintab:57::addMEMtoFAC:91 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 ] main:2::init:5::gen_sintab:61::addMEMtoFAC:91 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 ] main:2::init:5::gen_sintab:57::addMEMtoFAC:112 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 ] main:2::init:5::gen_sintab:61::addMEMtoFAC:112 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 ] ) always clobbers reg byte a +Statement [133] *((const byte*) memHi#0) ← >(word)(const byte[]) gen_sintab::f_min#0 [ ] ( main:2::init:5::gen_sintab:57::addMEMtoFAC:91 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 ] main:2::init:5::gen_sintab:61::addMEMtoFAC:91 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 ] main:2::init:5::gen_sintab:57::addMEMtoFAC:112 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 ] main:2::init:5::gen_sintab:61::addMEMtoFAC:112 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 ] ) always clobbers reg byte a +Statement asm { ldamemLo ldymemHi jsr$b867 } always clobbers reg byte a reg byte x reg byte y +Statement [137] (byte~) mulFACbyMEM::prepareMEM1_$0#0 ← < (word)(byte*) mulFACbyMEM::mem#2 [ mulFACbyMEM::mem#2 mulFACbyMEM::prepareMEM1_$0#0 ] ( main:2::init:5::gen_sintab:57::mulFACbyMEM:100 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 mulFACbyMEM::mem#2 mulFACbyMEM::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:61::mulFACbyMEM:100 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 mulFACbyMEM::mem#2 mulFACbyMEM::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:57::mulFACbyMEM:110 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 mulFACbyMEM::mem#2 mulFACbyMEM::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:61::mulFACbyMEM:110 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 mulFACbyMEM::mem#2 mulFACbyMEM::prepareMEM1_$0#0 ] ) always clobbers reg byte a +Statement [139] (byte~) mulFACbyMEM::prepareMEM1_$1#0 ← > (word)(byte*) mulFACbyMEM::mem#2 [ mulFACbyMEM::prepareMEM1_$1#0 ] ( main:2::init:5::gen_sintab:57::mulFACbyMEM:100 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 mulFACbyMEM::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:61::mulFACbyMEM:100 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 mulFACbyMEM::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:57::mulFACbyMEM:110 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 mulFACbyMEM::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:61::mulFACbyMEM:110 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 mulFACbyMEM::prepareMEM1_$1#0 ] ) always clobbers reg byte a +Statement asm { ldamemLo ldymemHi jsr$ba28 } always clobbers reg byte a reg byte x reg byte y Statement asm { jsr$e26b } always clobbers reg byte a reg byte x reg byte y -Statement [149] (byte*) prepareMEM::mem#3 ← (byte*) divMEMbyFAC::mem#2 [ prepareMEM::mem#3 ] ( main:2::init:5::gen_sintab:57::divMEMbyFAC:87 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 prepareMEM::mem#3 ] main:2::init:5::gen_sintab:61::divMEMbyFAC:87 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 prepareMEM::mem#3 ] main:2::init:5::gen_sintab:57::divMEMbyFAC:106 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 prepareMEM::mem#3 ] main:2::init:5::gen_sintab:61::divMEMbyFAC:106 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 prepareMEM::mem#3 ] ) always clobbers reg byte a -Statement asm { lda$fe ldy$ff jsr$bb0f } always clobbers reg byte a reg byte x reg byte y -Statement [154] (byte*) prepareMEM::mem#0 ← (byte*)(word) setFAC::w#5 [ prepareMEM::mem#0 ] ( main:2::init:5::gen_sintab:57::setFAC:73 [ gen_sintab::min#2 gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 prepareMEM::mem#0 ] main:2::init:5::gen_sintab:61::setFAC:73 [ gen_sintab::min#2 gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 prepareMEM::mem#0 ] main:2::init:5::gen_sintab:57::setFAC:77 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 prepareMEM::mem#0 ] main:2::init:5::gen_sintab:61::setFAC:77 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 prepareMEM::mem#0 ] main:2::init:5::gen_sintab:57::setFAC:85 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 prepareMEM::mem#0 ] main:2::init:5::gen_sintab:61::setFAC:85 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 prepareMEM::mem#0 ] main:2::init:5::gen_sintab:57::setFAC:98 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 prepareMEM::mem#0 ] main:2::init:5::gen_sintab:61::setFAC:98 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 prepareMEM::mem#0 ] main:2::init:5::gen_sintab:57::setFAC:104 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 prepareMEM::mem#0 ] main:2::init:5::gen_sintab:61::setFAC:104 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 prepareMEM::mem#0 ] ) always clobbers reg byte a -Statement asm { ldy$fe lda$ff jsr$b391 } always clobbers reg byte a reg byte x reg byte y -Statement [159] (byte*) prepareMEM::mem#1 ← (byte*) setMEMtoFAC::mem#5 [ prepareMEM::mem#1 ] ( main:2::init:5::gen_sintab:57::setMEMtoFAC:79 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 prepareMEM::mem#1 ] main:2::init:5::gen_sintab:61::setMEMtoFAC:79 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 prepareMEM::mem#1 ] main:2::init:5::gen_sintab:57::setMEMtoFAC:83 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 prepareMEM::mem#1 ] main:2::init:5::gen_sintab:61::setMEMtoFAC:83 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 prepareMEM::mem#1 ] main:2::init:5::gen_sintab:57::setMEMtoFAC:89 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 prepareMEM::mem#1 ] main:2::init:5::gen_sintab:61::setMEMtoFAC:89 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 prepareMEM::mem#1 ] main:2::init:5::gen_sintab:57::setMEMtoFAC:93 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 prepareMEM::mem#1 ] main:2::init:5::gen_sintab:61::setMEMtoFAC:93 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 prepareMEM::mem#1 ] main:2::init:5::gen_sintab:57::setMEMtoFAC:102 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 prepareMEM::mem#1 ] main:2::init:5::gen_sintab:61::setMEMtoFAC:102 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 prepareMEM::mem#1 ] ) always clobbers reg byte a -Statement asm { ldx$fe ldy$ff jsr$bbd4 } always clobbers reg byte a reg byte x reg byte y +Statement [146] (byte~) divMEMbyFAC::prepareMEM1_$0#0 ← < (word)(byte*) divMEMbyFAC::mem#2 [ divMEMbyFAC::mem#2 divMEMbyFAC::prepareMEM1_$0#0 ] ( main:2::init:5::gen_sintab:57::divMEMbyFAC:87 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 divMEMbyFAC::mem#2 divMEMbyFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:61::divMEMbyFAC:87 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 divMEMbyFAC::mem#2 divMEMbyFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:57::divMEMbyFAC:106 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 divMEMbyFAC::mem#2 divMEMbyFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:61::divMEMbyFAC:106 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 divMEMbyFAC::mem#2 divMEMbyFAC::prepareMEM1_$0#0 ] ) always clobbers reg byte a +Statement [148] (byte~) divMEMbyFAC::prepareMEM1_$1#0 ← > (word)(byte*) divMEMbyFAC::mem#2 [ divMEMbyFAC::prepareMEM1_$1#0 ] ( main:2::init:5::gen_sintab:57::divMEMbyFAC:87 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 divMEMbyFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:61::divMEMbyFAC:87 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 divMEMbyFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:57::divMEMbyFAC:106 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 divMEMbyFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:61::divMEMbyFAC:106 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 divMEMbyFAC::prepareMEM1_$1#0 ] ) always clobbers reg byte a +Statement asm { ldamemLo ldymemHi jsr$bb0f } always clobbers reg byte a reg byte x reg byte y +Statement [153] (byte~) setFAC::prepareMEM1_$0#0 ← < (word) setFAC::prepareMEM1_mem#0 [ setFAC::prepareMEM1_mem#0 setFAC::prepareMEM1_$0#0 ] ( main:2::init:5::gen_sintab:57::setFAC:73 [ gen_sintab::min#2 gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setFAC::prepareMEM1_mem#0 setFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:61::setFAC:73 [ gen_sintab::min#2 gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setFAC::prepareMEM1_mem#0 setFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:57::setFAC:77 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setFAC::prepareMEM1_mem#0 setFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:61::setFAC:77 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setFAC::prepareMEM1_mem#0 setFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:57::setFAC:85 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setFAC::prepareMEM1_mem#0 setFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:61::setFAC:85 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setFAC::prepareMEM1_mem#0 setFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:57::setFAC:98 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 setFAC::prepareMEM1_mem#0 setFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:61::setFAC:98 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 setFAC::prepareMEM1_mem#0 setFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:57::setFAC:104 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 setFAC::prepareMEM1_mem#0 setFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:61::setFAC:104 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 setFAC::prepareMEM1_mem#0 setFAC::prepareMEM1_$0#0 ] ) always clobbers reg byte a +Statement [155] (byte~) setFAC::prepareMEM1_$1#0 ← > (word) setFAC::prepareMEM1_mem#0 [ setFAC::prepareMEM1_$1#0 ] ( main:2::init:5::gen_sintab:57::setFAC:73 [ gen_sintab::min#2 gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:61::setFAC:73 [ gen_sintab::min#2 gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:57::setFAC:77 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:61::setFAC:77 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:57::setFAC:85 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:61::setFAC:85 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:57::setFAC:98 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 setFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:61::setFAC:98 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 setFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:57::setFAC:104 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 setFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:61::setFAC:104 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 setFAC::prepareMEM1_$1#0 ] ) always clobbers reg byte a +Statement asm { ldymemLo ldamemHi jsr$b391 } always clobbers reg byte a reg byte x reg byte y +Statement [160] (byte~) setMEMtoFAC::prepareMEM1_$0#0 ← < (word)(byte*) setMEMtoFAC::mem#5 [ setMEMtoFAC::mem#5 setMEMtoFAC::prepareMEM1_$0#0 ] ( main:2::init:5::gen_sintab:57::setMEMtoFAC:79 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setMEMtoFAC::mem#5 setMEMtoFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:61::setMEMtoFAC:79 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setMEMtoFAC::mem#5 setMEMtoFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:57::setMEMtoFAC:83 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setMEMtoFAC::mem#5 setMEMtoFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:61::setMEMtoFAC:83 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setMEMtoFAC::mem#5 setMEMtoFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:57::setMEMtoFAC:89 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setMEMtoFAC::mem#5 setMEMtoFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:61::setMEMtoFAC:89 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setMEMtoFAC::mem#5 setMEMtoFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:57::setMEMtoFAC:93 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setMEMtoFAC::mem#5 setMEMtoFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:61::setMEMtoFAC:93 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setMEMtoFAC::mem#5 setMEMtoFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:57::setMEMtoFAC:102 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 setMEMtoFAC::mem#5 setMEMtoFAC::prepareMEM1_$0#0 ] main:2::init:5::gen_sintab:61::setMEMtoFAC:102 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 setMEMtoFAC::mem#5 setMEMtoFAC::prepareMEM1_$0#0 ] ) always clobbers reg byte a +Statement [162] (byte~) setMEMtoFAC::prepareMEM1_$1#0 ← > (word)(byte*) setMEMtoFAC::mem#5 [ setMEMtoFAC::prepareMEM1_$1#0 ] ( main:2::init:5::gen_sintab:57::setMEMtoFAC:79 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setMEMtoFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:61::setMEMtoFAC:79 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setMEMtoFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:57::setMEMtoFAC:83 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setMEMtoFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:61::setMEMtoFAC:83 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setMEMtoFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:57::setMEMtoFAC:89 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setMEMtoFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:61::setMEMtoFAC:89 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setMEMtoFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:57::setMEMtoFAC:93 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setMEMtoFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:61::setMEMtoFAC:93 [ gen_sintab::length#10 gen_sintab::sintab#13 progress_init::line#2 setMEMtoFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:57::setMEMtoFAC:102 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 setMEMtoFAC::prepareMEM1_$1#0 ] main:2::init:5::gen_sintab:61::setMEMtoFAC:102 [ gen_sintab::length#10 gen_sintab::sintab#13 gen_sintab::i#10 progress_idx#14 progress_cursor#13 setMEMtoFAC::prepareMEM1_$1#0 ] ) always clobbers reg byte a +Statement asm { ldxmemLo ldymemHi jsr$bbd4 } always clobbers reg byte a reg byte x reg byte y Statement asm { jsr$b853 } always clobbers reg byte a reg byte x reg byte y Statement asm { jsr$bc0f } always clobbers reg byte a reg byte x -Statement [172] (byte*) gen_chargen_sprite::sprite#0 ← (byte*) gen_sprites::spr#2 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::ch#0 gen_chargen_sprite::sprite#0 ] ( main:2::init:5::gen_sprites:53 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::ch#0 gen_chargen_sprite::sprite#0 ] ) always clobbers reg byte a -Statement [174] (byte*) gen_sprites::spr#1 ← (byte*) gen_sprites::spr#2 + (byte) $40 [ gen_sprites::i#2 gen_sprites::spr#1 ] ( main:2::init:5::gen_sprites:53 [ gen_sprites::i#2 gen_sprites::spr#1 ] ) always clobbers reg byte a -Statement [178] (word~) gen_chargen_sprite::$0 ← (word)(byte) gen_chargen_sprite::ch#0 [ gen_chargen_sprite::sprite#0 gen_chargen_sprite::$0 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:173 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::sprite#0 gen_chargen_sprite::$0 ] ) always clobbers reg byte a -Statement [179] (word~) gen_chargen_sprite::$1 ← (word~) gen_chargen_sprite::$0 << (byte) 3 [ gen_chargen_sprite::sprite#0 gen_chargen_sprite::$1 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:173 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::sprite#0 gen_chargen_sprite::$1 ] ) always clobbers reg byte a -Statement [180] (byte*) gen_chargen_sprite::chargen#0 ← (const byte*) CHARGEN#0 + (word~) gen_chargen_sprite::$1 [ gen_chargen_sprite::sprite#0 gen_chargen_sprite::chargen#0 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:173 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::sprite#0 gen_chargen_sprite::chargen#0 ] ) always clobbers reg byte a -Statement [182] *((const byte*) PROCPORT#0) ← (byte) $32 [ gen_chargen_sprite::sprite#0 gen_chargen_sprite::chargen#0 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:173 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::sprite#0 gen_chargen_sprite::chargen#0 ] ) always clobbers reg byte a -Statement [184] (byte) gen_chargen_sprite::bits#0 ← *((byte*) gen_chargen_sprite::chargen#0 + (byte) gen_chargen_sprite::y#2) [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::sprite#11 gen_chargen_sprite::bits#0 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:173 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::sprite#11 gen_chargen_sprite::bits#0 ] ) always clobbers reg byte a reg byte y -Statement [186] (byte~) gen_chargen_sprite::$3 ← (byte) gen_chargen_sprite::bits#2 & (byte) $80 [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen_cnt#4 gen_chargen_sprite::sprite#10 gen_chargen_sprite::x#6 gen_chargen_sprite::$3 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:173 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen_cnt#4 gen_chargen_sprite::sprite#10 gen_chargen_sprite::x#6 gen_chargen_sprite::$3 ] ) always clobbers reg byte a -Statement [191] (byte~) gen_chargen_sprite::$6 ← (byte) gen_chargen_sprite::s_gen#3 << (byte) 1 [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::s_gen_cnt#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 gen_chargen_sprite::$6 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:173 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::s_gen_cnt#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 gen_chargen_sprite::$6 ] ) always clobbers reg byte a -Statement [195] *((byte*) gen_chargen_sprite::sprite#3) ← (byte) gen_chargen_sprite::s_gen#1 [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 gen_chargen_sprite::s_gen#1 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:173 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 gen_chargen_sprite::s_gen#1 ] ) always clobbers reg byte a reg byte y -Statement [196] *((byte*) gen_chargen_sprite::sprite#3 + (byte) 3) ← (byte) gen_chargen_sprite::s_gen#1 [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 gen_chargen_sprite::s_gen#1 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:173 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 gen_chargen_sprite::s_gen#1 ] ) always clobbers reg byte a reg byte y -Statement [197] *((byte*) gen_chargen_sprite::sprite#3 + (byte) 6) ← (byte) gen_chargen_sprite::s_gen#1 [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:173 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 ] ) always clobbers reg byte a reg byte y -Statement [205] (byte*) gen_chargen_sprite::sprite#2 ← (byte*) gen_chargen_sprite::sprite#4 + (byte) 6 [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::sprite#2 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:173 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::sprite#2 ] ) always clobbers reg byte a -Statement [208] *((const byte*) PROCPORT#0) ← (byte) $37 [ ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:173 [ gen_sprites::i#2 gen_sprites::spr#2 ] ) always clobbers reg byte a -Statement [211] *((const byte*) SPRITES_ENABLE#0) ← (byte) $7f [ ] ( main:2::init:5::place_sprites:51 [ ] ) always clobbers reg byte a -Statement [212] *((const byte*) SPRITES_EXPAND_X#0) ← (byte) $7f [ ] ( main:2::init:5::place_sprites:51 [ ] ) always clobbers reg byte a -Statement [213] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte) $7f [ ] ( main:2::init:5::place_sprites:51 [ ] ) always clobbers reg byte a -Statement [215] *((const byte*) place_sprites::sprites_ptr#0 + (byte) place_sprites::j#2) ← (byte) place_sprites::spr_id#2 [ place_sprites::spr_id#2 place_sprites::j#2 place_sprites::spr_x#2 place_sprites::j2#3 place_sprites::col#2 ] ( main:2::init:5::place_sprites:51 [ place_sprites::spr_id#2 place_sprites::j#2 place_sprites::spr_x#2 place_sprites::j2#3 place_sprites::col#2 ] ) always clobbers reg byte a -Statement [217] *((const byte*) SPRITES_XPOS#0 + (byte) place_sprites::j2#3) ← (byte) place_sprites::spr_x#2 [ place_sprites::j#2 place_sprites::spr_x#2 place_sprites::j2#3 place_sprites::col#2 place_sprites::spr_id#1 ] ( main:2::init:5::place_sprites:51 [ place_sprites::j#2 place_sprites::spr_x#2 place_sprites::j2#3 place_sprites::col#2 place_sprites::spr_id#1 ] ) always clobbers reg byte a -Statement [218] *((const byte*) SPRITES_YPOS#0 + (byte) place_sprites::j2#3) ← (byte) $50 [ place_sprites::j#2 place_sprites::spr_x#2 place_sprites::j2#3 place_sprites::col#2 place_sprites::spr_id#1 ] ( main:2::init:5::place_sprites:51 [ place_sprites::j#2 place_sprites::spr_x#2 place_sprites::j2#3 place_sprites::col#2 place_sprites::spr_id#1 ] ) always clobbers reg byte a -Statement [219] *((const byte*) SPRITES_COLS#0 + (byte) place_sprites::j#2) ← (byte) place_sprites::col#2 [ place_sprites::j#2 place_sprites::spr_x#2 place_sprites::j2#3 place_sprites::col#2 place_sprites::spr_id#1 ] ( main:2::init:5::place_sprites:51 [ place_sprites::j#2 place_sprites::spr_x#2 place_sprites::j2#3 place_sprites::col#2 place_sprites::spr_id#1 ] ) always clobbers reg byte a -Statement [220] (byte) place_sprites::spr_x#1 ← (byte) place_sprites::spr_x#2 + (byte) $20 [ place_sprites::j#2 place_sprites::j2#3 place_sprites::col#2 place_sprites::spr_id#1 place_sprites::spr_x#1 ] ( main:2::init:5::place_sprites:51 [ place_sprites::j#2 place_sprites::j2#3 place_sprites::col#2 place_sprites::spr_id#1 place_sprites::spr_x#1 ] ) always clobbers reg byte a -Statement [221] (byte) place_sprites::col#1 ← (byte) place_sprites::col#2 ^ (byte)(number) 7^(number) 5 [ place_sprites::j#2 place_sprites::j2#3 place_sprites::spr_id#1 place_sprites::spr_x#1 place_sprites::col#1 ] ( main:2::init:5::place_sprites:51 [ place_sprites::j#2 place_sprites::j2#3 place_sprites::spr_id#1 place_sprites::spr_x#1 place_sprites::col#1 ] ) always clobbers reg byte a +Statement [175] (byte*) gen_chargen_sprite::sprite#0 ← (byte*) gen_sprites::spr#2 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::ch#0 gen_chargen_sprite::sprite#0 ] ( main:2::init:5::gen_sprites:53 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::ch#0 gen_chargen_sprite::sprite#0 ] ) always clobbers reg byte a +Statement [177] (byte*) gen_sprites::spr#1 ← (byte*) gen_sprites::spr#2 + (byte) $40 [ gen_sprites::i#2 gen_sprites::spr#1 ] ( main:2::init:5::gen_sprites:53 [ gen_sprites::i#2 gen_sprites::spr#1 ] ) always clobbers reg byte a +Statement [181] (word~) gen_chargen_sprite::$0 ← (word)(byte) gen_chargen_sprite::ch#0 [ gen_chargen_sprite::sprite#0 gen_chargen_sprite::$0 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:176 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::sprite#0 gen_chargen_sprite::$0 ] ) always clobbers reg byte a +Statement [182] (word~) gen_chargen_sprite::$1 ← (word~) gen_chargen_sprite::$0 << (byte) 3 [ gen_chargen_sprite::sprite#0 gen_chargen_sprite::$1 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:176 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::sprite#0 gen_chargen_sprite::$1 ] ) always clobbers reg byte a +Statement [183] (byte*) gen_chargen_sprite::chargen#0 ← (const byte*) CHARGEN#0 + (word~) gen_chargen_sprite::$1 [ gen_chargen_sprite::sprite#0 gen_chargen_sprite::chargen#0 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:176 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::sprite#0 gen_chargen_sprite::chargen#0 ] ) always clobbers reg byte a +Statement [185] *((const byte*) PROCPORT#0) ← (byte) $32 [ gen_chargen_sprite::sprite#0 gen_chargen_sprite::chargen#0 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:176 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::sprite#0 gen_chargen_sprite::chargen#0 ] ) always clobbers reg byte a +Statement [187] (byte) gen_chargen_sprite::bits#0 ← *((byte*) gen_chargen_sprite::chargen#0 + (byte) gen_chargen_sprite::y#2) [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::sprite#11 gen_chargen_sprite::bits#0 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:176 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::sprite#11 gen_chargen_sprite::bits#0 ] ) always clobbers reg byte a reg byte y +Statement [189] (byte~) gen_chargen_sprite::$3 ← (byte) gen_chargen_sprite::bits#2 & (byte) $80 [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen_cnt#4 gen_chargen_sprite::sprite#10 gen_chargen_sprite::x#6 gen_chargen_sprite::$3 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:176 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen_cnt#4 gen_chargen_sprite::sprite#10 gen_chargen_sprite::x#6 gen_chargen_sprite::$3 ] ) always clobbers reg byte a +Statement [194] (byte~) gen_chargen_sprite::$6 ← (byte) gen_chargen_sprite::s_gen#3 << (byte) 1 [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::s_gen_cnt#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 gen_chargen_sprite::$6 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:176 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::s_gen_cnt#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 gen_chargen_sprite::$6 ] ) always clobbers reg byte a +Statement [198] *((byte*) gen_chargen_sprite::sprite#3) ← (byte) gen_chargen_sprite::s_gen#1 [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 gen_chargen_sprite::s_gen#1 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:176 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 gen_chargen_sprite::s_gen#1 ] ) always clobbers reg byte a reg byte y +Statement [199] *((byte*) gen_chargen_sprite::sprite#3 + (byte) 3) ← (byte) gen_chargen_sprite::s_gen#1 [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 gen_chargen_sprite::s_gen#1 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:176 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 gen_chargen_sprite::s_gen#1 ] ) always clobbers reg byte a reg byte y +Statement [200] *((byte*) gen_chargen_sprite::sprite#3 + (byte) 6) ← (byte) gen_chargen_sprite::s_gen#1 [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:176 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::bits#2 gen_chargen_sprite::x#6 gen_chargen_sprite::c#3 gen_chargen_sprite::b#2 gen_chargen_sprite::sprite#3 ] ) always clobbers reg byte a reg byte y +Statement [208] (byte*) gen_chargen_sprite::sprite#2 ← (byte*) gen_chargen_sprite::sprite#4 + (byte) 6 [ gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::sprite#2 ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:176 [ gen_sprites::i#2 gen_sprites::spr#2 gen_chargen_sprite::chargen#0 gen_chargen_sprite::y#2 gen_chargen_sprite::sprite#2 ] ) always clobbers reg byte a +Statement [211] *((const byte*) PROCPORT#0) ← (byte) $37 [ ] ( main:2::init:5::gen_sprites:53::gen_chargen_sprite:176 [ gen_sprites::i#2 gen_sprites::spr#2 ] ) always clobbers reg byte a +Statement [214] *((const byte*) SPRITES_ENABLE#0) ← (byte) $7f [ ] ( main:2::init:5::place_sprites:51 [ ] ) always clobbers reg byte a +Statement [215] *((const byte*) SPRITES_EXPAND_X#0) ← (byte) $7f [ ] ( main:2::init:5::place_sprites:51 [ ] ) always clobbers reg byte a +Statement [216] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte) $7f [ ] ( main:2::init:5::place_sprites:51 [ ] ) always clobbers reg byte a +Statement [218] *((const byte*) place_sprites::sprites_ptr#0 + (byte) place_sprites::j#2) ← (byte) place_sprites::spr_id#2 [ place_sprites::spr_id#2 place_sprites::j#2 place_sprites::spr_x#2 place_sprites::j2#3 place_sprites::col#2 ] ( main:2::init:5::place_sprites:51 [ place_sprites::spr_id#2 place_sprites::j#2 place_sprites::spr_x#2 place_sprites::j2#3 place_sprites::col#2 ] ) always clobbers reg byte a +Statement [220] *((const byte*) SPRITES_XPOS#0 + (byte) place_sprites::j2#3) ← (byte) place_sprites::spr_x#2 [ place_sprites::j#2 place_sprites::spr_x#2 place_sprites::j2#3 place_sprites::col#2 place_sprites::spr_id#1 ] ( main:2::init:5::place_sprites:51 [ place_sprites::j#2 place_sprites::spr_x#2 place_sprites::j2#3 place_sprites::col#2 place_sprites::spr_id#1 ] ) always clobbers reg byte a +Statement [221] *((const byte*) SPRITES_YPOS#0 + (byte) place_sprites::j2#3) ← (byte) $50 [ place_sprites::j#2 place_sprites::spr_x#2 place_sprites::j2#3 place_sprites::col#2 place_sprites::spr_id#1 ] ( main:2::init:5::place_sprites:51 [ place_sprites::j#2 place_sprites::spr_x#2 place_sprites::j2#3 place_sprites::col#2 place_sprites::spr_id#1 ] ) always clobbers reg byte a +Statement [222] *((const byte*) SPRITES_COLS#0 + (byte) place_sprites::j#2) ← (byte) place_sprites::col#2 [ place_sprites::j#2 place_sprites::spr_x#2 place_sprites::j2#3 place_sprites::col#2 place_sprites::spr_id#1 ] ( main:2::init:5::place_sprites:51 [ place_sprites::j#2 place_sprites::spr_x#2 place_sprites::j2#3 place_sprites::col#2 place_sprites::spr_id#1 ] ) always clobbers reg byte a +Statement [223] (byte) place_sprites::spr_x#1 ← (byte) place_sprites::spr_x#2 + (byte) $20 [ place_sprites::j#2 place_sprites::j2#3 place_sprites::col#2 place_sprites::spr_id#1 place_sprites::spr_x#1 ] ( main:2::init:5::place_sprites:51 [ place_sprites::j#2 place_sprites::j2#3 place_sprites::col#2 place_sprites::spr_id#1 place_sprites::spr_x#1 ] ) always clobbers reg byte a +Statement [224] (byte) place_sprites::col#1 ← (byte) place_sprites::col#2 ^ (byte)(number) 7^(number) 5 [ place_sprites::j#2 place_sprites::j2#3 place_sprites::spr_id#1 place_sprites::spr_x#1 place_sprites::col#1 ] ( main:2::init:5::place_sprites:51 [ place_sprites::j#2 place_sprites::j2#3 place_sprites::spr_id#1 place_sprites::spr_x#1 place_sprites::col#1 ] ) always clobbers reg byte a Potential registers zp ZP_BYTE:2 [ sin_idx_x#13 sin_idx_x#11 sin_idx_x#3 ] : zp ZP_BYTE:2 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:3 [ sin_idx_y#13 sin_idx_y#11 sin_idx_y#3 ] : zp ZP_BYTE:3 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:4 [ anim::xidx#3 anim::xidx#0 anim::xidx#5 anim::xidx#1 anim::xidx#2 ] : zp ZP_BYTE:4 , reg byte x , reg byte y , @@ -5286,59 +5422,63 @@ Potential registers zp ZP_WORD:19 [ gen_sintab::sintab#13 ] : zp ZP_WORD:19 , Potential registers zp ZP_BYTE:21 [ gen_sintab::i#10 gen_sintab::i#1 ] : zp ZP_BYTE:21 , Potential registers zp ZP_BYTE:22 [ progress_idx#14 progress_idx#12 progress_idx#10 ] : zp ZP_BYTE:22 , Potential registers zp ZP_WORD:23 [ progress_cursor#13 progress_init::line#2 progress_cursor#11 progress_cursor#10 ] : zp ZP_WORD:23 , -Potential registers zp ZP_WORD:25 [ prepareMEM::mem#5 prepareMEM::mem#3 prepareMEM::mem#4 prepareMEM::mem#0 prepareMEM::mem#1 ] : zp ZP_WORD:25 , -Potential registers zp ZP_WORD:27 [ mulFACbyMEM::mem#2 ] : zp ZP_WORD:27 , -Potential registers zp ZP_WORD:29 [ divMEMbyFAC::mem#2 ] : zp ZP_WORD:29 , -Potential registers zp ZP_WORD:31 [ setFAC::w#5 setFAC::w#0 setFAC::w#3 setFAC::w#4 setFAC::w#1 ] : zp ZP_WORD:31 , -Potential registers zp ZP_WORD:33 [ setMEMtoFAC::mem#5 ] : zp ZP_WORD:33 , -Potential registers zp ZP_BYTE:35 [ gen_sprites::i#2 gen_sprites::i#1 ] : zp ZP_BYTE:35 , reg byte x , -Potential registers zp ZP_WORD:36 [ gen_sprites::spr#2 gen_sprites::spr#1 ] : zp ZP_WORD:36 , -Potential registers zp ZP_BYTE:38 [ gen_chargen_sprite::y#2 gen_chargen_sprite::y#1 ] : zp ZP_BYTE:38 , reg byte x , -Potential registers zp ZP_BYTE:39 [ gen_chargen_sprite::bits#2 gen_chargen_sprite::bits#0 gen_chargen_sprite::bits#1 ] : zp ZP_BYTE:39 , reg byte x , -Potential registers zp ZP_BYTE:40 [ gen_chargen_sprite::x#6 gen_chargen_sprite::x#1 ] : zp ZP_BYTE:40 , reg byte x , -Potential registers zp ZP_BYTE:41 [ gen_chargen_sprite::c#3 ] : zp ZP_BYTE:41 , reg byte x , -Potential registers zp ZP_BYTE:42 [ gen_chargen_sprite::s_gen#3 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen#6 gen_chargen_sprite::s_gen#1 ] : zp ZP_BYTE:42 , reg byte x , -Potential registers zp ZP_BYTE:43 [ gen_chargen_sprite::s_gen_cnt#3 gen_chargen_sprite::s_gen_cnt#4 gen_chargen_sprite::s_gen_cnt#5 gen_chargen_sprite::s_gen_cnt#1 ] : zp ZP_BYTE:43 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:44 [ gen_chargen_sprite::b#2 gen_chargen_sprite::b#1 ] : zp ZP_BYTE:44 , reg byte x , -Potential registers zp ZP_WORD:45 [ gen_chargen_sprite::sprite#3 gen_chargen_sprite::sprite#10 gen_chargen_sprite::sprite#11 gen_chargen_sprite::sprite#0 gen_chargen_sprite::sprite#2 gen_chargen_sprite::sprite#4 gen_chargen_sprite::sprite#1 ] : zp ZP_WORD:45 , -Potential registers zp ZP_BYTE:47 [ place_sprites::spr_id#2 place_sprites::spr_id#1 ] : zp ZP_BYTE:47 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:48 [ place_sprites::j#2 place_sprites::j#1 ] : zp ZP_BYTE:48 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:49 [ place_sprites::spr_x#2 place_sprites::spr_x#1 ] : zp ZP_BYTE:49 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:50 [ place_sprites::j2#3 place_sprites::j2#2 ] : zp ZP_BYTE:50 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:51 [ place_sprites::col#2 place_sprites::col#1 ] : zp ZP_BYTE:51 , reg byte x , reg byte y , -Potential registers zp ZP_WORD:52 [ anim::x#0 ] : zp ZP_WORD:52 , -Potential registers zp ZP_BYTE:54 [ anim::$6 ] : zp ZP_BYTE:54 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:55 [ anim::$7 ] : zp ZP_BYTE:55 , reg byte a , reg byte x , reg byte y , reg byte alu , -Potential registers zp ZP_BYTE:56 [ anim::$9 ] : zp ZP_BYTE:56 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:57 [ getFAC::return#2 ] : zp ZP_WORD:57 , -Potential registers zp ZP_WORD:59 [ gen_sintab::$24 ] : zp ZP_WORD:59 , -Potential registers zp ZP_BYTE:61 [ gen_sintab::$25 ] : zp ZP_BYTE:61 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:62 [ getFAC::return#0 ] : zp ZP_WORD:62 , -Potential registers zp ZP_BYTE:64 [ prepareMEM::$0 ] : zp ZP_BYTE:64 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:65 [ prepareMEM::$1 ] : zp ZP_BYTE:65 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:66 [ gen_chargen_sprite::ch#0 ] : zp ZP_BYTE:66 , reg byte x , reg byte y , -Potential registers zp ZP_WORD:67 [ gen_chargen_sprite::$0 ] : zp ZP_WORD:67 , -Potential registers zp ZP_WORD:69 [ gen_chargen_sprite::$1 ] : zp ZP_WORD:69 , -Potential registers zp ZP_WORD:71 [ gen_chargen_sprite::chargen#0 ] : zp ZP_WORD:71 , -Potential registers zp ZP_BYTE:73 [ gen_chargen_sprite::$3 ] : zp ZP_BYTE:73 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:74 [ gen_chargen_sprite::$6 ] : zp ZP_BYTE:74 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:75 [ place_sprites::j2#1 ] : zp ZP_BYTE:75 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:25 [ mulFACbyMEM::mem#2 ] : zp ZP_WORD:25 , +Potential registers zp ZP_WORD:27 [ divMEMbyFAC::mem#2 ] : zp ZP_WORD:27 , +Potential registers zp ZP_WORD:29 [ setFAC::prepareMEM1_mem#0 setFAC::w#0 setFAC::w#3 setFAC::w#4 setFAC::w#1 ] : zp ZP_WORD:29 , +Potential registers zp ZP_WORD:31 [ setMEMtoFAC::mem#5 ] : zp ZP_WORD:31 , +Potential registers zp ZP_BYTE:33 [ gen_sprites::i#2 gen_sprites::i#1 ] : zp ZP_BYTE:33 , reg byte x , +Potential registers zp ZP_WORD:34 [ gen_sprites::spr#2 gen_sprites::spr#1 ] : zp ZP_WORD:34 , +Potential registers zp ZP_BYTE:36 [ gen_chargen_sprite::y#2 gen_chargen_sprite::y#1 ] : zp ZP_BYTE:36 , reg byte x , +Potential registers zp ZP_BYTE:37 [ gen_chargen_sprite::bits#2 gen_chargen_sprite::bits#0 gen_chargen_sprite::bits#1 ] : zp ZP_BYTE:37 , reg byte x , +Potential registers zp ZP_BYTE:38 [ gen_chargen_sprite::x#6 gen_chargen_sprite::x#1 ] : zp ZP_BYTE:38 , reg byte x , +Potential registers zp ZP_BYTE:39 [ gen_chargen_sprite::c#3 ] : zp ZP_BYTE:39 , reg byte x , +Potential registers zp ZP_BYTE:40 [ gen_chargen_sprite::s_gen#3 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen#6 gen_chargen_sprite::s_gen#1 ] : zp ZP_BYTE:40 , reg byte x , +Potential registers zp ZP_BYTE:41 [ gen_chargen_sprite::s_gen_cnt#3 gen_chargen_sprite::s_gen_cnt#4 gen_chargen_sprite::s_gen_cnt#5 gen_chargen_sprite::s_gen_cnt#1 ] : zp ZP_BYTE:41 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:42 [ gen_chargen_sprite::b#2 gen_chargen_sprite::b#1 ] : zp ZP_BYTE:42 , reg byte x , +Potential registers zp ZP_WORD:43 [ gen_chargen_sprite::sprite#3 gen_chargen_sprite::sprite#10 gen_chargen_sprite::sprite#11 gen_chargen_sprite::sprite#0 gen_chargen_sprite::sprite#2 gen_chargen_sprite::sprite#4 gen_chargen_sprite::sprite#1 ] : zp ZP_WORD:43 , +Potential registers zp ZP_BYTE:45 [ place_sprites::spr_id#2 place_sprites::spr_id#1 ] : zp ZP_BYTE:45 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:46 [ place_sprites::j#2 place_sprites::j#1 ] : zp ZP_BYTE:46 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:47 [ place_sprites::spr_x#2 place_sprites::spr_x#1 ] : zp ZP_BYTE:47 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:48 [ place_sprites::j2#3 place_sprites::j2#2 ] : zp ZP_BYTE:48 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:49 [ place_sprites::col#2 place_sprites::col#1 ] : zp ZP_BYTE:49 , reg byte x , reg byte y , +Potential registers zp ZP_WORD:50 [ anim::x#0 ] : zp ZP_WORD:50 , +Potential registers zp ZP_BYTE:52 [ anim::$6 ] : zp ZP_BYTE:52 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:53 [ anim::$7 ] : zp ZP_BYTE:53 , reg byte a , reg byte x , reg byte y , reg byte alu , +Potential registers zp ZP_BYTE:54 [ anim::$9 ] : zp ZP_BYTE:54 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:55 [ getFAC::return#2 ] : zp ZP_WORD:55 , +Potential registers zp ZP_WORD:57 [ gen_sintab::$24 ] : zp ZP_WORD:57 , +Potential registers zp ZP_BYTE:59 [ gen_sintab::$25 ] : zp ZP_BYTE:59 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:60 [ getFAC::return#0 ] : zp ZP_WORD:60 , +Potential registers zp ZP_BYTE:62 [ mulFACbyMEM::prepareMEM1_$0#0 ] : zp ZP_BYTE:62 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:63 [ mulFACbyMEM::prepareMEM1_$1#0 ] : zp ZP_BYTE:63 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:64 [ divMEMbyFAC::prepareMEM1_$0#0 ] : zp ZP_BYTE:64 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:65 [ divMEMbyFAC::prepareMEM1_$1#0 ] : zp ZP_BYTE:65 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:66 [ setFAC::prepareMEM1_$0#0 ] : zp ZP_BYTE:66 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:67 [ setFAC::prepareMEM1_$1#0 ] : zp ZP_BYTE:67 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:68 [ setMEMtoFAC::prepareMEM1_$0#0 ] : zp ZP_BYTE:68 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:69 [ setMEMtoFAC::prepareMEM1_$1#0 ] : zp ZP_BYTE:69 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:70 [ gen_chargen_sprite::ch#0 ] : zp ZP_BYTE:70 , reg byte x , reg byte y , +Potential registers zp ZP_WORD:71 [ gen_chargen_sprite::$0 ] : zp ZP_WORD:71 , +Potential registers zp ZP_WORD:73 [ gen_chargen_sprite::$1 ] : zp ZP_WORD:73 , +Potential registers zp ZP_WORD:75 [ gen_chargen_sprite::chargen#0 ] : zp ZP_WORD:75 , +Potential registers zp ZP_BYTE:77 [ gen_chargen_sprite::$3 ] : zp ZP_BYTE:77 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:78 [ gen_chargen_sprite::$6 ] : zp ZP_BYTE:78 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:79 [ place_sprites::j2#1 ] : zp ZP_BYTE:79 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [gen_chargen_sprite] 34,904.9: zp ZP_BYTE:42 [ gen_chargen_sprite::s_gen#3 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen#6 gen_chargen_sprite::s_gen#1 ] 33,404.14: zp ZP_WORD:45 [ gen_chargen_sprite::sprite#3 gen_chargen_sprite::sprite#10 gen_chargen_sprite::sprite#11 gen_chargen_sprite::sprite#0 gen_chargen_sprite::sprite#2 gen_chargen_sprite::sprite#4 gen_chargen_sprite::sprite#1 ] 25,903.4: zp ZP_BYTE:43 [ gen_chargen_sprite::s_gen_cnt#3 gen_chargen_sprite::s_gen_cnt#4 gen_chargen_sprite::s_gen_cnt#5 gen_chargen_sprite::s_gen_cnt#1 ] 20,002: zp ZP_BYTE:74 [ gen_chargen_sprite::$6 ] 17,001.7: zp ZP_BYTE:44 [ gen_chargen_sprite::b#2 gen_chargen_sprite::b#1 ] 2,002: zp ZP_BYTE:73 [ gen_chargen_sprite::$3 ] 1,612.72: zp ZP_BYTE:40 [ gen_chargen_sprite::x#6 gen_chargen_sprite::x#1 ] 1,051.92: zp ZP_BYTE:39 [ gen_chargen_sprite::bits#2 gen_chargen_sprite::bits#0 gen_chargen_sprite::bits#1 ] 769.31: zp ZP_BYTE:41 [ gen_chargen_sprite::c#3 ] 164.67: zp ZP_BYTE:38 [ gen_chargen_sprite::y#2 gen_chargen_sprite::y#1 ] 5.5: zp ZP_BYTE:66 [ gen_chargen_sprite::ch#0 ] 4: zp ZP_WORD:67 [ gen_chargen_sprite::$0 ] 4: zp ZP_WORD:69 [ gen_chargen_sprite::$1 ] 3.68: zp ZP_WORD:71 [ gen_chargen_sprite::chargen#0 ] -Uplift Scope [anim] 509.17: zp ZP_BYTE:8 [ anim::yidx#3 anim::yidx#0 anim::yidx#6 anim::yidx#1 anim::yidx#2 ] 482: zp ZP_BYTE:4 [ anim::xidx#3 anim::xidx#0 anim::xidx#5 anim::xidx#1 anim::xidx#2 ] 202: zp ZP_BYTE:55 [ anim::$7 ] 202: zp ZP_BYTE:56 [ anim::$9 ] 163.38: zp ZP_BYTE:9 [ anim::j#2 anim::j#1 ] 114.6: zp ZP_BYTE:5 [ anim::x_msb#2 anim::x_msb#1 ] 101: zp ZP_BYTE:54 [ anim::$6 ] 92.58: zp ZP_BYTE:6 [ anim::j2#2 anim::j2#1 ] 75.75: zp ZP_WORD:52 [ anim::x#0 ] -Uplift Scope [place_sprites] 22: zp ZP_BYTE:75 [ place_sprites::j2#1 ] 20.9: zp ZP_BYTE:48 [ place_sprites::j#2 place_sprites::j#1 ] 18.7: zp ZP_BYTE:47 [ place_sprites::spr_id#2 place_sprites::spr_id#1 ] 12.83: zp ZP_BYTE:50 [ place_sprites::j2#3 place_sprites::j2#2 ] 9.17: zp ZP_BYTE:49 [ place_sprites::spr_x#2 place_sprites::spr_x#1 ] 9.11: zp ZP_BYTE:51 [ place_sprites::col#2 place_sprites::col#1 ] -Uplift Scope [setFAC] 78: zp ZP_WORD:31 [ setFAC::w#5 setFAC::w#0 setFAC::w#3 setFAC::w#4 setFAC::w#1 ] -Uplift Scope [gen_sintab] 23.76: zp ZP_BYTE:21 [ gen_sintab::i#10 gen_sintab::i#1 ] 22: zp ZP_BYTE:61 [ gen_sintab::$25 ] 11: zp ZP_WORD:59 [ gen_sintab::$24 ] 0.22: zp ZP_BYTE:17 [ gen_sintab::length#10 ] 0.22: zp ZP_WORD:19 [ gen_sintab::sintab#13 ] 0: zp ZP_BYTE:15 [ gen_sintab::max#2 ] 0: zp ZP_BYTE:16 [ gen_sintab::min#2 ] +Uplift Scope [gen_chargen_sprite] 34,904.9: zp ZP_BYTE:40 [ gen_chargen_sprite::s_gen#3 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen#6 gen_chargen_sprite::s_gen#1 ] 33,404.14: zp ZP_WORD:43 [ gen_chargen_sprite::sprite#3 gen_chargen_sprite::sprite#10 gen_chargen_sprite::sprite#11 gen_chargen_sprite::sprite#0 gen_chargen_sprite::sprite#2 gen_chargen_sprite::sprite#4 gen_chargen_sprite::sprite#1 ] 25,903.4: zp ZP_BYTE:41 [ gen_chargen_sprite::s_gen_cnt#3 gen_chargen_sprite::s_gen_cnt#4 gen_chargen_sprite::s_gen_cnt#5 gen_chargen_sprite::s_gen_cnt#1 ] 20,002: zp ZP_BYTE:78 [ gen_chargen_sprite::$6 ] 17,001.7: zp ZP_BYTE:42 [ gen_chargen_sprite::b#2 gen_chargen_sprite::b#1 ] 2,002: zp ZP_BYTE:77 [ gen_chargen_sprite::$3 ] 1,612.72: zp ZP_BYTE:38 [ gen_chargen_sprite::x#6 gen_chargen_sprite::x#1 ] 1,051.92: zp ZP_BYTE:37 [ gen_chargen_sprite::bits#2 gen_chargen_sprite::bits#0 gen_chargen_sprite::bits#1 ] 769.31: zp ZP_BYTE:39 [ gen_chargen_sprite::c#3 ] 164.67: zp ZP_BYTE:36 [ gen_chargen_sprite::y#2 gen_chargen_sprite::y#1 ] 5.5: zp ZP_BYTE:70 [ gen_chargen_sprite::ch#0 ] 4: zp ZP_WORD:71 [ gen_chargen_sprite::$0 ] 4: zp ZP_WORD:73 [ gen_chargen_sprite::$1 ] 3.68: zp ZP_WORD:75 [ gen_chargen_sprite::chargen#0 ] +Uplift Scope [anim] 509.17: zp ZP_BYTE:8 [ anim::yidx#3 anim::yidx#0 anim::yidx#6 anim::yidx#1 anim::yidx#2 ] 482: zp ZP_BYTE:4 [ anim::xidx#3 anim::xidx#0 anim::xidx#5 anim::xidx#1 anim::xidx#2 ] 202: zp ZP_BYTE:53 [ anim::$7 ] 202: zp ZP_BYTE:54 [ anim::$9 ] 163.38: zp ZP_BYTE:9 [ anim::j#2 anim::j#1 ] 114.6: zp ZP_BYTE:5 [ anim::x_msb#2 anim::x_msb#1 ] 101: zp ZP_BYTE:52 [ anim::$6 ] 92.58: zp ZP_BYTE:6 [ anim::j2#2 anim::j2#1 ] 75.75: zp ZP_WORD:50 [ anim::x#0 ] +Uplift Scope [place_sprites] 22: zp ZP_BYTE:79 [ place_sprites::j2#1 ] 20.9: zp ZP_BYTE:46 [ place_sprites::j#2 place_sprites::j#1 ] 18.7: zp ZP_BYTE:45 [ place_sprites::spr_id#2 place_sprites::spr_id#1 ] 12.83: zp ZP_BYTE:48 [ place_sprites::j2#3 place_sprites::j2#2 ] 9.17: zp ZP_BYTE:47 [ place_sprites::spr_x#2 place_sprites::spr_x#1 ] 9.11: zp ZP_BYTE:49 [ place_sprites::col#2 place_sprites::col#1 ] +Uplift Scope [setFAC] 62: zp ZP_WORD:29 [ setFAC::prepareMEM1_mem#0 setFAC::w#0 setFAC::w#3 setFAC::w#4 setFAC::w#1 ] 4: zp ZP_BYTE:66 [ setFAC::prepareMEM1_$0#0 ] 4: zp ZP_BYTE:67 [ setFAC::prepareMEM1_$1#0 ] +Uplift Scope [gen_sintab] 23.76: zp ZP_BYTE:21 [ gen_sintab::i#10 gen_sintab::i#1 ] 22: zp ZP_BYTE:59 [ gen_sintab::$25 ] 11: zp ZP_WORD:57 [ gen_sintab::$24 ] 0.22: zp ZP_BYTE:17 [ gen_sintab::length#10 ] 0.22: zp ZP_WORD:19 [ gen_sintab::sintab#13 ] 0: zp ZP_BYTE:15 [ gen_sintab::max#2 ] 0: zp ZP_BYTE:16 [ gen_sintab::min#2 ] Uplift Scope [] 12.48: zp ZP_BYTE:3 [ sin_idx_y#13 sin_idx_y#11 sin_idx_y#3 ] 11.97: zp ZP_BYTE:2 [ sin_idx_x#13 sin_idx_x#11 sin_idx_x#3 ] 8.17: zp ZP_WORD:23 [ progress_cursor#13 progress_init::line#2 progress_cursor#11 progress_cursor#10 ] 6.54: zp ZP_BYTE:22 [ progress_idx#14 progress_idx#12 progress_idx#10 ] -Uplift Scope [gen_sprites] 23.1: zp ZP_BYTE:35 [ gen_sprites::i#2 gen_sprites::i#1 ] 15.58: zp ZP_WORD:36 [ gen_sprites::spr#2 gen_sprites::spr#1 ] +Uplift Scope [gen_sprites] 23.1: zp ZP_BYTE:33 [ gen_sprites::i#2 gen_sprites::i#1 ] 15.58: zp ZP_WORD:34 [ gen_sprites::spr#2 gen_sprites::spr#1 ] Uplift Scope [clear_screen] 33: zp ZP_WORD:11 [ clear_screen::sc#4 clear_screen::sc#1 ] Uplift Scope [init] 31.17: zp ZP_BYTE:10 [ init::i#2 init::i#1 ] -Uplift Scope [prepareMEM] 20: zp ZP_WORD:25 [ prepareMEM::mem#5 prepareMEM::mem#3 prepareMEM::mem#4 prepareMEM::mem#0 prepareMEM::mem#1 ] 4: zp ZP_BYTE:64 [ prepareMEM::$0 ] 4: zp ZP_BYTE:65 [ prepareMEM::$1 ] -Uplift Scope [getFAC] 22: zp ZP_WORD:57 [ getFAC::return#2 ] 4.33: zp ZP_WORD:62 [ getFAC::return#0 ] -Uplift Scope [setMEMtoFAC] 2: zp ZP_WORD:33 [ setMEMtoFAC::mem#5 ] -Uplift Scope [divMEMbyFAC] 2: zp ZP_WORD:29 [ divMEMbyFAC::mem#2 ] -Uplift Scope [mulFACbyMEM] 2: zp ZP_WORD:27 [ mulFACbyMEM::mem#2 ] +Uplift Scope [getFAC] 22: zp ZP_WORD:55 [ getFAC::return#2 ] 4.33: zp ZP_WORD:60 [ getFAC::return#0 ] +Uplift Scope [setMEMtoFAC] 4: zp ZP_BYTE:68 [ setMEMtoFAC::prepareMEM1_$0#0 ] 4: zp ZP_BYTE:69 [ setMEMtoFAC::prepareMEM1_$1#0 ] 0: zp ZP_WORD:31 [ setMEMtoFAC::mem#5 ] +Uplift Scope [divMEMbyFAC] 4: zp ZP_BYTE:64 [ divMEMbyFAC::prepareMEM1_$0#0 ] 4: zp ZP_BYTE:65 [ divMEMbyFAC::prepareMEM1_$1#0 ] 0: zp ZP_WORD:27 [ divMEMbyFAC::mem#2 ] +Uplift Scope [mulFACbyMEM] 4: zp ZP_BYTE:62 [ mulFACbyMEM::prepareMEM1_$0#0 ] 4: zp ZP_BYTE:63 [ mulFACbyMEM::prepareMEM1_$1#0 ] 0: zp ZP_WORD:25 [ mulFACbyMEM::mem#2 ] Uplift Scope [setARGtoFAC] Uplift Scope [addMEMtoFAC] Uplift Scope [subFACfromARG] @@ -5348,119 +5488,117 @@ Uplift Scope [main] Uplift Scope [progress_init] Uplift Scope [progress_inc] -Uplifting [gen_chargen_sprite] best 1064046 combination zp ZP_BYTE:42 [ gen_chargen_sprite::s_gen#3 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen#6 gen_chargen_sprite::s_gen#1 ] zp ZP_WORD:45 [ gen_chargen_sprite::sprite#3 gen_chargen_sprite::sprite#10 gen_chargen_sprite::sprite#11 gen_chargen_sprite::sprite#0 gen_chargen_sprite::sprite#2 gen_chargen_sprite::sprite#4 gen_chargen_sprite::sprite#1 ] reg byte y [ gen_chargen_sprite::s_gen_cnt#3 gen_chargen_sprite::s_gen_cnt#4 gen_chargen_sprite::s_gen_cnt#5 gen_chargen_sprite::s_gen_cnt#1 ] reg byte a [ gen_chargen_sprite::$6 ] reg byte x [ gen_chargen_sprite::b#2 gen_chargen_sprite::b#1 ] reg byte a [ gen_chargen_sprite::$3 ] zp ZP_BYTE:40 [ gen_chargen_sprite::x#6 gen_chargen_sprite::x#1 ] zp ZP_BYTE:39 [ gen_chargen_sprite::bits#2 gen_chargen_sprite::bits#0 gen_chargen_sprite::bits#1 ] zp ZP_BYTE:41 [ gen_chargen_sprite::c#3 ] zp ZP_BYTE:38 [ gen_chargen_sprite::y#2 gen_chargen_sprite::y#1 ] zp ZP_BYTE:66 [ gen_chargen_sprite::ch#0 ] zp ZP_WORD:67 [ gen_chargen_sprite::$0 ] zp ZP_WORD:69 [ gen_chargen_sprite::$1 ] zp ZP_WORD:71 [ gen_chargen_sprite::chargen#0 ] +Uplifting [gen_chargen_sprite] best 1064201 combination zp ZP_BYTE:40 [ gen_chargen_sprite::s_gen#3 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen#6 gen_chargen_sprite::s_gen#1 ] zp ZP_WORD:43 [ gen_chargen_sprite::sprite#3 gen_chargen_sprite::sprite#10 gen_chargen_sprite::sprite#11 gen_chargen_sprite::sprite#0 gen_chargen_sprite::sprite#2 gen_chargen_sprite::sprite#4 gen_chargen_sprite::sprite#1 ] reg byte y [ gen_chargen_sprite::s_gen_cnt#3 gen_chargen_sprite::s_gen_cnt#4 gen_chargen_sprite::s_gen_cnt#5 gen_chargen_sprite::s_gen_cnt#1 ] reg byte a [ gen_chargen_sprite::$6 ] reg byte x [ gen_chargen_sprite::b#2 gen_chargen_sprite::b#1 ] reg byte a [ gen_chargen_sprite::$3 ] zp ZP_BYTE:38 [ gen_chargen_sprite::x#6 gen_chargen_sprite::x#1 ] zp ZP_BYTE:37 [ gen_chargen_sprite::bits#2 gen_chargen_sprite::bits#0 gen_chargen_sprite::bits#1 ] zp ZP_BYTE:39 [ gen_chargen_sprite::c#3 ] zp ZP_BYTE:36 [ gen_chargen_sprite::y#2 gen_chargen_sprite::y#1 ] zp ZP_BYTE:70 [ gen_chargen_sprite::ch#0 ] zp ZP_WORD:71 [ gen_chargen_sprite::$0 ] zp ZP_WORD:73 [ gen_chargen_sprite::$1 ] zp ZP_WORD:75 [ gen_chargen_sprite::chargen#0 ] Limited combination testing to 100 combinations of 9216 possible. -Uplifting [anim] best 1062846 combination zp ZP_BYTE:8 [ anim::yidx#3 anim::yidx#0 anim::yidx#6 anim::yidx#1 anim::yidx#2 ] zp ZP_BYTE:4 [ anim::xidx#3 anim::xidx#0 anim::xidx#5 anim::xidx#1 anim::xidx#2 ] reg byte a [ anim::$7 ] reg byte a [ anim::$9 ] zp ZP_BYTE:9 [ anim::j#2 anim::j#1 ] zp ZP_BYTE:5 [ anim::x_msb#2 anim::x_msb#1 ] zp ZP_BYTE:54 [ anim::$6 ] zp ZP_BYTE:6 [ anim::j2#2 anim::j2#1 ] zp ZP_WORD:52 [ anim::x#0 ] +Uplifting [anim] best 1063001 combination zp ZP_BYTE:8 [ anim::yidx#3 anim::yidx#0 anim::yidx#6 anim::yidx#1 anim::yidx#2 ] zp ZP_BYTE:4 [ anim::xidx#3 anim::xidx#0 anim::xidx#5 anim::xidx#1 anim::xidx#2 ] reg byte a [ anim::$7 ] reg byte a [ anim::$9 ] zp ZP_BYTE:9 [ anim::j#2 anim::j#1 ] zp ZP_BYTE:5 [ anim::x_msb#2 anim::x_msb#1 ] zp ZP_BYTE:52 [ anim::$6 ] zp ZP_BYTE:6 [ anim::j2#2 anim::j2#1 ] zp ZP_WORD:50 [ anim::x#0 ] Limited combination testing to 100 combinations of 19440 possible. -Uplifting [place_sprites] best 1062786 combination reg byte x [ place_sprites::j2#1 ] zp ZP_BYTE:48 [ place_sprites::j#2 place_sprites::j#1 ] zp ZP_BYTE:47 [ place_sprites::spr_id#2 place_sprites::spr_id#1 ] zp ZP_BYTE:50 [ place_sprites::j2#3 place_sprites::j2#2 ] zp ZP_BYTE:49 [ place_sprites::spr_x#2 place_sprites::spr_x#1 ] zp ZP_BYTE:51 [ place_sprites::col#2 place_sprites::col#1 ] +Uplifting [place_sprites] best 1062941 combination reg byte x [ place_sprites::j2#1 ] zp ZP_BYTE:46 [ place_sprites::j#2 place_sprites::j#1 ] zp ZP_BYTE:45 [ place_sprites::spr_id#2 place_sprites::spr_id#1 ] zp ZP_BYTE:48 [ place_sprites::j2#3 place_sprites::j2#2 ] zp ZP_BYTE:47 [ place_sprites::spr_x#2 place_sprites::spr_x#1 ] zp ZP_BYTE:49 [ place_sprites::col#2 place_sprites::col#1 ] Limited combination testing to 100 combinations of 972 possible. -Uplifting [setFAC] best 1062786 combination zp ZP_WORD:31 [ setFAC::w#5 setFAC::w#0 setFAC::w#3 setFAC::w#4 setFAC::w#1 ] -Uplifting [gen_sintab] best 1062719 combination zp ZP_BYTE:21 [ gen_sintab::i#10 gen_sintab::i#1 ] reg byte a [ gen_sintab::$25 ] zp ZP_WORD:59 [ gen_sintab::$24 ] zp ZP_BYTE:17 [ gen_sintab::length#10 ] zp ZP_WORD:19 [ gen_sintab::sintab#13 ] reg byte x [ gen_sintab::max#2 ] zp ZP_BYTE:16 [ gen_sintab::min#2 ] -Uplifting [] best 1062719 combination zp ZP_BYTE:3 [ sin_idx_y#13 sin_idx_y#11 sin_idx_y#3 ] zp ZP_BYTE:2 [ sin_idx_x#13 sin_idx_x#11 sin_idx_x#3 ] zp ZP_WORD:23 [ progress_cursor#13 progress_init::line#2 progress_cursor#11 progress_cursor#10 ] zp ZP_BYTE:22 [ progress_idx#14 progress_idx#12 progress_idx#10 ] -Uplifting [gen_sprites] best 1062719 combination zp ZP_BYTE:35 [ gen_sprites::i#2 gen_sprites::i#1 ] zp ZP_WORD:36 [ gen_sprites::spr#2 gen_sprites::spr#1 ] -Uplifting [clear_screen] best 1062719 combination zp ZP_WORD:11 [ clear_screen::sc#4 clear_screen::sc#1 ] -Uplifting [init] best 1062569 combination reg byte x [ init::i#2 init::i#1 ] -Uplifting [prepareMEM] best 1062557 combination zp ZP_WORD:25 [ prepareMEM::mem#5 prepareMEM::mem#3 prepareMEM::mem#4 prepareMEM::mem#0 prepareMEM::mem#1 ] reg byte a [ prepareMEM::$0 ] reg byte a [ prepareMEM::$1 ] -Uplifting [getFAC] best 1062557 combination zp ZP_WORD:57 [ getFAC::return#2 ] zp ZP_WORD:62 [ getFAC::return#0 ] -Uplifting [setMEMtoFAC] best 1062557 combination zp ZP_WORD:33 [ setMEMtoFAC::mem#5 ] -Uplifting [divMEMbyFAC] best 1062557 combination zp ZP_WORD:29 [ divMEMbyFAC::mem#2 ] -Uplifting [mulFACbyMEM] best 1062557 combination zp ZP_WORD:27 [ mulFACbyMEM::mem#2 ] -Uplifting [setARGtoFAC] best 1062557 combination -Uplifting [addMEMtoFAC] best 1062557 combination -Uplifting [subFACfromARG] best 1062557 combination -Uplifting [sinFAC] best 1062557 combination -Uplifting [RADIX] best 1062557 combination -Uplifting [main] best 1062557 combination -Uplifting [progress_init] best 1062557 combination -Uplifting [progress_inc] best 1062557 combination -Attempting to uplift remaining variables inzp ZP_BYTE:42 [ gen_chargen_sprite::s_gen#3 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen#6 gen_chargen_sprite::s_gen#1 ] -Uplifting [gen_chargen_sprite] best 1062557 combination zp ZP_BYTE:42 [ gen_chargen_sprite::s_gen#3 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen#6 gen_chargen_sprite::s_gen#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:40 [ gen_chargen_sprite::x#6 gen_chargen_sprite::x#1 ] -Uplifting [gen_chargen_sprite] best 1062557 combination zp ZP_BYTE:40 [ gen_chargen_sprite::x#6 gen_chargen_sprite::x#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:39 [ gen_chargen_sprite::bits#2 gen_chargen_sprite::bits#0 gen_chargen_sprite::bits#1 ] -Uplifting [gen_chargen_sprite] best 1062557 combination zp ZP_BYTE:39 [ gen_chargen_sprite::bits#2 gen_chargen_sprite::bits#0 gen_chargen_sprite::bits#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:41 [ gen_chargen_sprite::c#3 ] -Uplifting [gen_chargen_sprite] best 1062557 combination zp ZP_BYTE:41 [ gen_chargen_sprite::c#3 ] +Uplifting [setFAC] best 1062929 combination zp ZP_WORD:29 [ setFAC::prepareMEM1_mem#0 setFAC::w#0 setFAC::w#3 setFAC::w#4 setFAC::w#1 ] reg byte a [ setFAC::prepareMEM1_$0#0 ] reg byte a [ setFAC::prepareMEM1_$1#0 ] +Uplifting [gen_sintab] best 1062862 combination zp ZP_BYTE:21 [ gen_sintab::i#10 gen_sintab::i#1 ] reg byte a [ gen_sintab::$25 ] zp ZP_WORD:57 [ gen_sintab::$24 ] zp ZP_BYTE:17 [ gen_sintab::length#10 ] zp ZP_WORD:19 [ gen_sintab::sintab#13 ] reg byte x [ gen_sintab::max#2 ] zp ZP_BYTE:16 [ gen_sintab::min#2 ] +Uplifting [] best 1062862 combination zp ZP_BYTE:3 [ sin_idx_y#13 sin_idx_y#11 sin_idx_y#3 ] zp ZP_BYTE:2 [ sin_idx_x#13 sin_idx_x#11 sin_idx_x#3 ] zp ZP_WORD:23 [ progress_cursor#13 progress_init::line#2 progress_cursor#11 progress_cursor#10 ] zp ZP_BYTE:22 [ progress_idx#14 progress_idx#12 progress_idx#10 ] +Uplifting [gen_sprites] best 1062862 combination zp ZP_BYTE:33 [ gen_sprites::i#2 gen_sprites::i#1 ] zp ZP_WORD:34 [ gen_sprites::spr#2 gen_sprites::spr#1 ] +Uplifting [clear_screen] best 1062862 combination zp ZP_WORD:11 [ clear_screen::sc#4 clear_screen::sc#1 ] +Uplifting [init] best 1062712 combination reg byte x [ init::i#2 init::i#1 ] +Uplifting [getFAC] best 1062712 combination zp ZP_WORD:55 [ getFAC::return#2 ] zp ZP_WORD:60 [ getFAC::return#0 ] +Uplifting [setMEMtoFAC] best 1062700 combination reg byte a [ setMEMtoFAC::prepareMEM1_$0#0 ] reg byte a [ setMEMtoFAC::prepareMEM1_$1#0 ] zp ZP_WORD:31 [ setMEMtoFAC::mem#5 ] +Uplifting [divMEMbyFAC] best 1062688 combination reg byte a [ divMEMbyFAC::prepareMEM1_$0#0 ] reg byte a [ divMEMbyFAC::prepareMEM1_$1#0 ] zp ZP_WORD:27 [ divMEMbyFAC::mem#2 ] +Uplifting [mulFACbyMEM] best 1062676 combination reg byte a [ mulFACbyMEM::prepareMEM1_$0#0 ] reg byte a [ mulFACbyMEM::prepareMEM1_$1#0 ] zp ZP_WORD:25 [ mulFACbyMEM::mem#2 ] +Uplifting [setARGtoFAC] best 1062676 combination +Uplifting [addMEMtoFAC] best 1062676 combination +Uplifting [subFACfromARG] best 1062676 combination +Uplifting [sinFAC] best 1062676 combination +Uplifting [RADIX] best 1062676 combination +Uplifting [main] best 1062676 combination +Uplifting [progress_init] best 1062676 combination +Uplifting [progress_inc] best 1062676 combination +Attempting to uplift remaining variables inzp ZP_BYTE:40 [ gen_chargen_sprite::s_gen#3 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen#6 gen_chargen_sprite::s_gen#1 ] +Uplifting [gen_chargen_sprite] best 1062676 combination zp ZP_BYTE:40 [ gen_chargen_sprite::s_gen#3 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen#6 gen_chargen_sprite::s_gen#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:38 [ gen_chargen_sprite::x#6 gen_chargen_sprite::x#1 ] +Uplifting [gen_chargen_sprite] best 1062676 combination zp ZP_BYTE:38 [ gen_chargen_sprite::x#6 gen_chargen_sprite::x#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:37 [ gen_chargen_sprite::bits#2 gen_chargen_sprite::bits#0 gen_chargen_sprite::bits#1 ] +Uplifting [gen_chargen_sprite] best 1062676 combination zp ZP_BYTE:37 [ gen_chargen_sprite::bits#2 gen_chargen_sprite::bits#0 gen_chargen_sprite::bits#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:39 [ gen_chargen_sprite::c#3 ] +Uplifting [gen_chargen_sprite] best 1062676 combination zp ZP_BYTE:39 [ gen_chargen_sprite::c#3 ] Attempting to uplift remaining variables inzp ZP_BYTE:8 [ anim::yidx#3 anim::yidx#0 anim::yidx#6 anim::yidx#1 anim::yidx#2 ] -Uplifting [anim] best 1062557 combination zp ZP_BYTE:8 [ anim::yidx#3 anim::yidx#0 anim::yidx#6 anim::yidx#1 anim::yidx#2 ] +Uplifting [anim] best 1062676 combination zp ZP_BYTE:8 [ anim::yidx#3 anim::yidx#0 anim::yidx#6 anim::yidx#1 anim::yidx#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:4 [ anim::xidx#3 anim::xidx#0 anim::xidx#5 anim::xidx#1 anim::xidx#2 ] -Uplifting [anim] best 1062557 combination zp ZP_BYTE:4 [ anim::xidx#3 anim::xidx#0 anim::xidx#5 anim::xidx#1 anim::xidx#2 ] -Attempting to uplift remaining variables inzp ZP_BYTE:38 [ gen_chargen_sprite::y#2 gen_chargen_sprite::y#1 ] -Uplifting [gen_chargen_sprite] best 1062557 combination zp ZP_BYTE:38 [ gen_chargen_sprite::y#2 gen_chargen_sprite::y#1 ] +Uplifting [anim] best 1062676 combination zp ZP_BYTE:4 [ anim::xidx#3 anim::xidx#0 anim::xidx#5 anim::xidx#1 anim::xidx#2 ] +Attempting to uplift remaining variables inzp ZP_BYTE:36 [ gen_chargen_sprite::y#2 gen_chargen_sprite::y#1 ] +Uplifting [gen_chargen_sprite] best 1062676 combination zp ZP_BYTE:36 [ gen_chargen_sprite::y#2 gen_chargen_sprite::y#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:9 [ anim::j#2 anim::j#1 ] -Uplifting [anim] best 1062557 combination zp ZP_BYTE:9 [ anim::j#2 anim::j#1 ] +Uplifting [anim] best 1062676 combination zp ZP_BYTE:9 [ anim::j#2 anim::j#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:5 [ anim::x_msb#2 anim::x_msb#1 ] -Uplifting [anim] best 1062557 combination zp ZP_BYTE:5 [ anim::x_msb#2 anim::x_msb#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:54 [ anim::$6 ] -Uplifting [anim] best 1062557 combination zp ZP_BYTE:54 [ anim::$6 ] +Uplifting [anim] best 1062676 combination zp ZP_BYTE:5 [ anim::x_msb#2 anim::x_msb#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:52 [ anim::$6 ] +Uplifting [anim] best 1062676 combination zp ZP_BYTE:52 [ anim::$6 ] Attempting to uplift remaining variables inzp ZP_BYTE:6 [ anim::j2#2 anim::j2#1 ] -Uplifting [anim] best 1062557 combination zp ZP_BYTE:6 [ anim::j2#2 anim::j2#1 ] +Uplifting [anim] best 1062676 combination zp ZP_BYTE:6 [ anim::j2#2 anim::j2#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:21 [ gen_sintab::i#10 gen_sintab::i#1 ] -Uplifting [gen_sintab] best 1062557 combination zp ZP_BYTE:21 [ gen_sintab::i#10 gen_sintab::i#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:35 [ gen_sprites::i#2 gen_sprites::i#1 ] -Uplifting [gen_sprites] best 1062557 combination zp ZP_BYTE:35 [ gen_sprites::i#2 gen_sprites::i#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:48 [ place_sprites::j#2 place_sprites::j#1 ] -Uplifting [place_sprites] best 1062557 combination zp ZP_BYTE:48 [ place_sprites::j#2 place_sprites::j#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:47 [ place_sprites::spr_id#2 place_sprites::spr_id#1 ] -Uplifting [place_sprites] best 1062557 combination zp ZP_BYTE:47 [ place_sprites::spr_id#2 place_sprites::spr_id#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:50 [ place_sprites::j2#3 place_sprites::j2#2 ] -Uplifting [place_sprites] best 1062557 combination zp ZP_BYTE:50 [ place_sprites::j2#3 place_sprites::j2#2 ] +Uplifting [gen_sintab] best 1062676 combination zp ZP_BYTE:21 [ gen_sintab::i#10 gen_sintab::i#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:33 [ gen_sprites::i#2 gen_sprites::i#1 ] +Uplifting [gen_sprites] best 1062676 combination zp ZP_BYTE:33 [ gen_sprites::i#2 gen_sprites::i#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:46 [ place_sprites::j#2 place_sprites::j#1 ] +Uplifting [place_sprites] best 1062676 combination zp ZP_BYTE:46 [ place_sprites::j#2 place_sprites::j#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:45 [ place_sprites::spr_id#2 place_sprites::spr_id#1 ] +Uplifting [place_sprites] best 1062676 combination zp ZP_BYTE:45 [ place_sprites::spr_id#2 place_sprites::spr_id#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:48 [ place_sprites::j2#3 place_sprites::j2#2 ] +Uplifting [place_sprites] best 1062676 combination zp ZP_BYTE:48 [ place_sprites::j2#3 place_sprites::j2#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:3 [ sin_idx_y#13 sin_idx_y#11 sin_idx_y#3 ] -Uplifting [] best 1062557 combination zp ZP_BYTE:3 [ sin_idx_y#13 sin_idx_y#11 sin_idx_y#3 ] +Uplifting [] best 1062676 combination zp ZP_BYTE:3 [ sin_idx_y#13 sin_idx_y#11 sin_idx_y#3 ] Attempting to uplift remaining variables inzp ZP_BYTE:2 [ sin_idx_x#13 sin_idx_x#11 sin_idx_x#3 ] -Uplifting [] best 1062557 combination zp ZP_BYTE:2 [ sin_idx_x#13 sin_idx_x#11 sin_idx_x#3 ] -Attempting to uplift remaining variables inzp ZP_BYTE:49 [ place_sprites::spr_x#2 place_sprites::spr_x#1 ] -Uplifting [place_sprites] best 1062557 combination zp ZP_BYTE:49 [ place_sprites::spr_x#2 place_sprites::spr_x#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:51 [ place_sprites::col#2 place_sprites::col#1 ] -Uplifting [place_sprites] best 1062557 combination zp ZP_BYTE:51 [ place_sprites::col#2 place_sprites::col#1 ] +Uplifting [] best 1062676 combination zp ZP_BYTE:2 [ sin_idx_x#13 sin_idx_x#11 sin_idx_x#3 ] +Attempting to uplift remaining variables inzp ZP_BYTE:47 [ place_sprites::spr_x#2 place_sprites::spr_x#1 ] +Uplifting [place_sprites] best 1062676 combination zp ZP_BYTE:47 [ place_sprites::spr_x#2 place_sprites::spr_x#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:49 [ place_sprites::col#2 place_sprites::col#1 ] +Uplifting [place_sprites] best 1062676 combination zp ZP_BYTE:49 [ place_sprites::col#2 place_sprites::col#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:22 [ progress_idx#14 progress_idx#12 progress_idx#10 ] -Uplifting [] best 1062557 combination zp ZP_BYTE:22 [ progress_idx#14 progress_idx#12 progress_idx#10 ] -Attempting to uplift remaining variables inzp ZP_BYTE:66 [ gen_chargen_sprite::ch#0 ] -Uplifting [gen_chargen_sprite] best 1062526 combination reg byte x [ gen_chargen_sprite::ch#0 ] +Uplifting [] best 1062676 combination zp ZP_BYTE:22 [ progress_idx#14 progress_idx#12 progress_idx#10 ] +Attempting to uplift remaining variables inzp ZP_BYTE:70 [ gen_chargen_sprite::ch#0 ] +Uplifting [gen_chargen_sprite] best 1062645 combination reg byte x [ gen_chargen_sprite::ch#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:17 [ gen_sintab::length#10 ] -Uplifting [gen_sintab] best 1062526 combination zp ZP_BYTE:17 [ gen_sintab::length#10 ] +Uplifting [gen_sintab] best 1062645 combination zp ZP_BYTE:17 [ gen_sintab::length#10 ] Attempting to uplift remaining variables inzp ZP_BYTE:16 [ gen_sintab::min#2 ] -Uplifting [gen_sintab] best 1062526 combination zp ZP_BYTE:16 [ gen_sintab::min#2 ] -Coalescing zero page register [ zp ZP_BYTE:5 [ anim::x_msb#2 anim::x_msb#1 ] ] with [ zp ZP_BYTE:54 [ anim::$6 ] ] - score: 2 -Coalescing zero page register [ zp ZP_WORD:25 [ prepareMEM::mem#5 prepareMEM::mem#3 prepareMEM::mem#4 prepareMEM::mem#0 prepareMEM::mem#1 ] ] with [ zp ZP_WORD:27 [ mulFACbyMEM::mem#2 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:25 [ prepareMEM::mem#5 prepareMEM::mem#3 prepareMEM::mem#4 prepareMEM::mem#0 prepareMEM::mem#1 mulFACbyMEM::mem#2 ] ] with [ zp ZP_WORD:29 [ divMEMbyFAC::mem#2 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:25 [ prepareMEM::mem#5 prepareMEM::mem#3 prepareMEM::mem#4 prepareMEM::mem#0 prepareMEM::mem#1 mulFACbyMEM::mem#2 divMEMbyFAC::mem#2 ] ] with [ zp ZP_WORD:31 [ setFAC::w#5 setFAC::w#0 setFAC::w#3 setFAC::w#4 setFAC::w#1 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:25 [ prepareMEM::mem#5 prepareMEM::mem#3 prepareMEM::mem#4 prepareMEM::mem#0 prepareMEM::mem#1 mulFACbyMEM::mem#2 divMEMbyFAC::mem#2 setFAC::w#5 setFAC::w#0 setFAC::w#3 setFAC::w#4 setFAC::w#1 ] ] with [ zp ZP_WORD:33 [ setMEMtoFAC::mem#5 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:57 [ getFAC::return#2 ] ] with [ zp ZP_WORD:59 [ gen_sintab::$24 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:57 [ getFAC::return#2 gen_sintab::$24 ] ] with [ zp ZP_WORD:62 [ getFAC::return#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:67 [ gen_chargen_sprite::$0 ] ] with [ zp ZP_WORD:69 [ gen_chargen_sprite::$1 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:67 [ gen_chargen_sprite::$0 gen_chargen_sprite::$1 ] ] with [ zp ZP_WORD:71 [ gen_chargen_sprite::chargen#0 ] ] - score: 1 +Uplifting [gen_sintab] best 1062645 combination zp ZP_BYTE:16 [ gen_sintab::min#2 ] +Coalescing zero page register [ zp ZP_BYTE:5 [ anim::x_msb#2 anim::x_msb#1 ] ] with [ zp ZP_BYTE:52 [ anim::$6 ] ] - score: 2 +Coalescing zero page register [ zp ZP_WORD:55 [ getFAC::return#2 ] ] with [ zp ZP_WORD:57 [ gen_sintab::$24 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:55 [ getFAC::return#2 gen_sintab::$24 ] ] with [ zp ZP_WORD:60 [ getFAC::return#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:71 [ gen_chargen_sprite::$0 ] ] with [ zp ZP_WORD:73 [ gen_chargen_sprite::$1 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:71 [ gen_chargen_sprite::$0 gen_chargen_sprite::$1 ] ] with [ zp ZP_WORD:75 [ gen_chargen_sprite::chargen#0 ] ] - score: 1 Coalescing zero page register [ zp ZP_BYTE:16 [ gen_sintab::min#2 ] ] with [ zp ZP_BYTE:2 [ sin_idx_x#13 sin_idx_x#11 sin_idx_x#3 ] ] Coalescing zero page register [ zp ZP_BYTE:17 [ gen_sintab::length#10 ] ] with [ zp ZP_BYTE:3 [ sin_idx_y#13 sin_idx_y#11 sin_idx_y#3 ] ] Coalescing zero page register [ zp ZP_WORD:19 [ gen_sintab::sintab#13 ] ] with [ zp ZP_WORD:11 [ clear_screen::sc#4 clear_screen::sc#1 ] ] Coalescing zero page register [ zp ZP_BYTE:21 [ gen_sintab::i#10 gen_sintab::i#1 ] ] with [ zp ZP_BYTE:4 [ anim::xidx#3 anim::xidx#0 anim::xidx#5 anim::xidx#1 anim::xidx#2 ] ] Coalescing zero page register [ zp ZP_BYTE:22 [ progress_idx#14 progress_idx#12 progress_idx#10 ] ] with [ zp ZP_BYTE:5 [ anim::x_msb#2 anim::x_msb#1 anim::$6 ] ] -Coalescing zero page register [ zp ZP_BYTE:35 [ gen_sprites::i#2 gen_sprites::i#1 ] ] with [ zp ZP_BYTE:6 [ anim::j2#2 anim::j2#1 ] ] -Coalescing zero page register [ zp ZP_WORD:36 [ gen_sprites::spr#2 gen_sprites::spr#1 ] ] with [ zp ZP_WORD:23 [ progress_cursor#13 progress_init::line#2 progress_cursor#11 progress_cursor#10 ] ] -Coalescing zero page register [ zp ZP_BYTE:38 [ gen_chargen_sprite::y#2 gen_chargen_sprite::y#1 ] ] with [ zp ZP_BYTE:8 [ anim::yidx#3 anim::yidx#0 anim::yidx#6 anim::yidx#1 anim::yidx#2 ] ] -Coalescing zero page register [ zp ZP_BYTE:39 [ gen_chargen_sprite::bits#2 gen_chargen_sprite::bits#0 gen_chargen_sprite::bits#1 ] ] with [ zp ZP_BYTE:9 [ anim::j#2 anim::j#1 ] ] -Coalescing zero page register [ zp ZP_WORD:45 [ gen_chargen_sprite::sprite#3 gen_chargen_sprite::sprite#10 gen_chargen_sprite::sprite#11 gen_chargen_sprite::sprite#0 gen_chargen_sprite::sprite#2 gen_chargen_sprite::sprite#4 gen_chargen_sprite::sprite#1 ] ] with [ zp ZP_WORD:25 [ prepareMEM::mem#5 prepareMEM::mem#3 prepareMEM::mem#4 prepareMEM::mem#0 prepareMEM::mem#1 mulFACbyMEM::mem#2 divMEMbyFAC::mem#2 setFAC::w#5 setFAC::w#0 setFAC::w#3 setFAC::w#4 setFAC::w#1 setMEMtoFAC::mem#5 ] ] -Coalescing zero page register [ zp ZP_BYTE:47 [ place_sprites::spr_id#2 place_sprites::spr_id#1 ] ] with [ zp ZP_BYTE:40 [ gen_chargen_sprite::x#6 gen_chargen_sprite::x#1 ] ] -Coalescing zero page register [ zp ZP_BYTE:48 [ place_sprites::j#2 place_sprites::j#1 ] ] with [ zp ZP_BYTE:41 [ gen_chargen_sprite::c#3 ] ] -Coalescing zero page register [ zp ZP_BYTE:49 [ place_sprites::spr_x#2 place_sprites::spr_x#1 ] ] with [ zp ZP_BYTE:42 [ gen_chargen_sprite::s_gen#3 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen#6 gen_chargen_sprite::s_gen#1 ] ] -Coalescing zero page register [ zp ZP_WORD:57 [ getFAC::return#2 gen_sintab::$24 getFAC::return#0 ] ] with [ zp ZP_WORD:52 [ anim::x#0 ] ] -Coalescing zero page register [ zp ZP_BYTE:47 [ place_sprites::spr_id#2 place_sprites::spr_id#1 gen_chargen_sprite::x#6 gen_chargen_sprite::x#1 ] ] with [ zp ZP_BYTE:16 [ gen_sintab::min#2 sin_idx_x#13 sin_idx_x#11 sin_idx_x#3 ] ] -Coalescing zero page register [ zp ZP_BYTE:48 [ place_sprites::j#2 place_sprites::j#1 gen_chargen_sprite::c#3 ] ] with [ zp ZP_BYTE:17 [ gen_sintab::length#10 sin_idx_y#13 sin_idx_y#11 sin_idx_y#3 ] ] -Coalescing zero page register [ zp ZP_BYTE:49 [ place_sprites::spr_x#2 place_sprites::spr_x#1 gen_chargen_sprite::s_gen#3 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen#6 gen_chargen_sprite::s_gen#1 ] ] with [ zp ZP_BYTE:21 [ gen_sintab::i#10 gen_sintab::i#1 anim::xidx#3 anim::xidx#0 anim::xidx#5 anim::xidx#1 anim::xidx#2 ] ] -Coalescing zero page register [ zp ZP_BYTE:50 [ place_sprites::j2#3 place_sprites::j2#2 ] ] with [ zp ZP_BYTE:22 [ progress_idx#14 progress_idx#12 progress_idx#10 anim::x_msb#2 anim::x_msb#1 anim::$6 ] ] -Coalescing zero page register [ zp ZP_BYTE:51 [ place_sprites::col#2 place_sprites::col#1 ] ] with [ zp ZP_BYTE:35 [ gen_sprites::i#2 gen_sprites::i#1 anim::j2#2 anim::j2#1 ] ] -Coalescing zero page register [ zp ZP_WORD:57 [ getFAC::return#2 gen_sintab::$24 getFAC::return#0 anim::x#0 ] ] with [ zp ZP_WORD:45 [ gen_chargen_sprite::sprite#3 gen_chargen_sprite::sprite#10 gen_chargen_sprite::sprite#11 gen_chargen_sprite::sprite#0 gen_chargen_sprite::sprite#2 gen_chargen_sprite::sprite#4 gen_chargen_sprite::sprite#1 prepareMEM::mem#5 prepareMEM::mem#3 prepareMEM::mem#4 prepareMEM::mem#0 prepareMEM::mem#1 mulFACbyMEM::mem#2 divMEMbyFAC::mem#2 setFAC::w#5 setFAC::w#0 setFAC::w#3 setFAC::w#4 setFAC::w#1 setMEMtoFAC::mem#5 ] ] -Coalescing zero page register [ zp ZP_WORD:67 [ gen_chargen_sprite::$0 gen_chargen_sprite::$1 gen_chargen_sprite::chargen#0 ] ] with [ zp ZP_WORD:19 [ gen_sintab::sintab#13 clear_screen::sc#4 clear_screen::sc#1 ] ] -Allocated (was zp ZP_WORD:36) zp ZP_WORD:2 [ gen_sprites::spr#2 gen_sprites::spr#1 progress_cursor#13 progress_init::line#2 progress_cursor#11 progress_cursor#10 ] -Allocated (was zp ZP_BYTE:38) zp ZP_BYTE:4 [ gen_chargen_sprite::y#2 gen_chargen_sprite::y#1 anim::yidx#3 anim::yidx#0 anim::yidx#6 anim::yidx#1 anim::yidx#2 ] -Allocated (was zp ZP_BYTE:39) zp ZP_BYTE:5 [ gen_chargen_sprite::bits#2 gen_chargen_sprite::bits#0 gen_chargen_sprite::bits#1 anim::j#2 anim::j#1 ] -Allocated (was zp ZP_BYTE:47) zp ZP_BYTE:6 [ place_sprites::spr_id#2 place_sprites::spr_id#1 gen_chargen_sprite::x#6 gen_chargen_sprite::x#1 gen_sintab::min#2 sin_idx_x#13 sin_idx_x#11 sin_idx_x#3 ] -Allocated (was zp ZP_BYTE:48) zp ZP_BYTE:8 [ place_sprites::j#2 place_sprites::j#1 gen_chargen_sprite::c#3 gen_sintab::length#10 sin_idx_y#13 sin_idx_y#11 sin_idx_y#3 ] -Allocated (was zp ZP_BYTE:49) zp ZP_BYTE:9 [ place_sprites::spr_x#2 place_sprites::spr_x#1 gen_chargen_sprite::s_gen#3 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen#6 gen_chargen_sprite::s_gen#1 gen_sintab::i#10 gen_sintab::i#1 anim::xidx#3 anim::xidx#0 anim::xidx#5 anim::xidx#1 anim::xidx#2 ] -Allocated (was zp ZP_BYTE:50) zp ZP_BYTE:10 [ place_sprites::j2#3 place_sprites::j2#2 progress_idx#14 progress_idx#12 progress_idx#10 anim::x_msb#2 anim::x_msb#1 anim::$6 ] -Allocated (was zp ZP_BYTE:51) zp ZP_BYTE:11 [ place_sprites::col#2 place_sprites::col#1 gen_sprites::i#2 gen_sprites::i#1 anim::j2#2 anim::j2#1 ] -Allocated (was zp ZP_WORD:57) zp ZP_WORD:15 [ getFAC::return#2 gen_sintab::$24 getFAC::return#0 anim::x#0 gen_chargen_sprite::sprite#3 gen_chargen_sprite::sprite#10 gen_chargen_sprite::sprite#11 gen_chargen_sprite::sprite#0 gen_chargen_sprite::sprite#2 gen_chargen_sprite::sprite#4 gen_chargen_sprite::sprite#1 prepareMEM::mem#5 prepareMEM::mem#3 prepareMEM::mem#4 prepareMEM::mem#0 prepareMEM::mem#1 mulFACbyMEM::mem#2 divMEMbyFAC::mem#2 setFAC::w#5 setFAC::w#0 setFAC::w#3 setFAC::w#4 setFAC::w#1 setMEMtoFAC::mem#5 ] -Allocated (was zp ZP_WORD:67) zp ZP_WORD:19 [ gen_chargen_sprite::$0 gen_chargen_sprite::$1 gen_chargen_sprite::chargen#0 gen_sintab::sintab#13 clear_screen::sc#4 clear_screen::sc#1 ] +Coalescing zero page register [ zp ZP_WORD:27 [ divMEMbyFAC::mem#2 ] ] with [ zp ZP_WORD:25 [ mulFACbyMEM::mem#2 ] ] +Coalescing zero page register [ zp ZP_WORD:31 [ setMEMtoFAC::mem#5 ] ] with [ zp ZP_WORD:29 [ setFAC::prepareMEM1_mem#0 setFAC::w#0 setFAC::w#3 setFAC::w#4 setFAC::w#1 ] ] +Coalescing zero page register [ zp ZP_BYTE:33 [ gen_sprites::i#2 gen_sprites::i#1 ] ] with [ zp ZP_BYTE:6 [ anim::j2#2 anim::j2#1 ] ] +Coalescing zero page register [ zp ZP_WORD:34 [ gen_sprites::spr#2 gen_sprites::spr#1 ] ] with [ zp ZP_WORD:23 [ progress_cursor#13 progress_init::line#2 progress_cursor#11 progress_cursor#10 ] ] +Coalescing zero page register [ zp ZP_BYTE:36 [ gen_chargen_sprite::y#2 gen_chargen_sprite::y#1 ] ] with [ zp ZP_BYTE:8 [ anim::yidx#3 anim::yidx#0 anim::yidx#6 anim::yidx#1 anim::yidx#2 ] ] +Coalescing zero page register [ zp ZP_BYTE:37 [ gen_chargen_sprite::bits#2 gen_chargen_sprite::bits#0 gen_chargen_sprite::bits#1 ] ] with [ zp ZP_BYTE:9 [ anim::j#2 anim::j#1 ] ] +Coalescing zero page register [ zp ZP_BYTE:45 [ place_sprites::spr_id#2 place_sprites::spr_id#1 ] ] with [ zp ZP_BYTE:38 [ gen_chargen_sprite::x#6 gen_chargen_sprite::x#1 ] ] +Coalescing zero page register [ zp ZP_BYTE:46 [ place_sprites::j#2 place_sprites::j#1 ] ] with [ zp ZP_BYTE:39 [ gen_chargen_sprite::c#3 ] ] +Coalescing zero page register [ zp ZP_BYTE:47 [ place_sprites::spr_x#2 place_sprites::spr_x#1 ] ] with [ zp ZP_BYTE:40 [ gen_chargen_sprite::s_gen#3 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen#6 gen_chargen_sprite::s_gen#1 ] ] +Coalescing zero page register [ zp ZP_WORD:50 [ anim::x#0 ] ] with [ zp ZP_WORD:43 [ gen_chargen_sprite::sprite#3 gen_chargen_sprite::sprite#10 gen_chargen_sprite::sprite#11 gen_chargen_sprite::sprite#0 gen_chargen_sprite::sprite#2 gen_chargen_sprite::sprite#4 gen_chargen_sprite::sprite#1 ] ] +Coalescing zero page register [ zp ZP_WORD:71 [ gen_chargen_sprite::$0 gen_chargen_sprite::$1 gen_chargen_sprite::chargen#0 ] ] with [ zp ZP_WORD:55 [ getFAC::return#2 gen_sintab::$24 getFAC::return#0 ] ] +Coalescing zero page register [ zp ZP_WORD:31 [ setMEMtoFAC::mem#5 setFAC::prepareMEM1_mem#0 setFAC::w#0 setFAC::w#3 setFAC::w#4 setFAC::w#1 ] ] with [ zp ZP_WORD:27 [ divMEMbyFAC::mem#2 mulFACbyMEM::mem#2 ] ] +Coalescing zero page register [ zp ZP_BYTE:45 [ place_sprites::spr_id#2 place_sprites::spr_id#1 gen_chargen_sprite::x#6 gen_chargen_sprite::x#1 ] ] with [ zp ZP_BYTE:16 [ gen_sintab::min#2 sin_idx_x#13 sin_idx_x#11 sin_idx_x#3 ] ] +Coalescing zero page register [ zp ZP_BYTE:46 [ place_sprites::j#2 place_sprites::j#1 gen_chargen_sprite::c#3 ] ] with [ zp ZP_BYTE:17 [ gen_sintab::length#10 sin_idx_y#13 sin_idx_y#11 sin_idx_y#3 ] ] +Coalescing zero page register [ zp ZP_BYTE:47 [ place_sprites::spr_x#2 place_sprites::spr_x#1 gen_chargen_sprite::s_gen#3 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen#6 gen_chargen_sprite::s_gen#1 ] ] with [ zp ZP_BYTE:21 [ gen_sintab::i#10 gen_sintab::i#1 anim::xidx#3 anim::xidx#0 anim::xidx#5 anim::xidx#1 anim::xidx#2 ] ] +Coalescing zero page register [ zp ZP_BYTE:48 [ place_sprites::j2#3 place_sprites::j2#2 ] ] with [ zp ZP_BYTE:22 [ progress_idx#14 progress_idx#12 progress_idx#10 anim::x_msb#2 anim::x_msb#1 anim::$6 ] ] +Coalescing zero page register [ zp ZP_BYTE:49 [ place_sprites::col#2 place_sprites::col#1 ] ] with [ zp ZP_BYTE:33 [ gen_sprites::i#2 gen_sprites::i#1 anim::j2#2 anim::j2#1 ] ] +Coalescing zero page register [ zp ZP_WORD:50 [ anim::x#0 gen_chargen_sprite::sprite#3 gen_chargen_sprite::sprite#10 gen_chargen_sprite::sprite#11 gen_chargen_sprite::sprite#0 gen_chargen_sprite::sprite#2 gen_chargen_sprite::sprite#4 gen_chargen_sprite::sprite#1 ] ] with [ zp ZP_WORD:19 [ gen_sintab::sintab#13 clear_screen::sc#4 clear_screen::sc#1 ] ] +Coalescing zero page register [ zp ZP_WORD:71 [ gen_chargen_sprite::$0 gen_chargen_sprite::$1 gen_chargen_sprite::chargen#0 getFAC::return#2 gen_sintab::$24 getFAC::return#0 ] ] with [ zp ZP_WORD:31 [ setMEMtoFAC::mem#5 setFAC::prepareMEM1_mem#0 setFAC::w#0 setFAC::w#3 setFAC::w#4 setFAC::w#1 divMEMbyFAC::mem#2 mulFACbyMEM::mem#2 ] ] +Allocated (was zp ZP_WORD:34) zp ZP_WORD:2 [ gen_sprites::spr#2 gen_sprites::spr#1 progress_cursor#13 progress_init::line#2 progress_cursor#11 progress_cursor#10 ] +Allocated (was zp ZP_BYTE:36) zp ZP_BYTE:4 [ gen_chargen_sprite::y#2 gen_chargen_sprite::y#1 anim::yidx#3 anim::yidx#0 anim::yidx#6 anim::yidx#1 anim::yidx#2 ] +Allocated (was zp ZP_BYTE:37) zp ZP_BYTE:5 [ gen_chargen_sprite::bits#2 gen_chargen_sprite::bits#0 gen_chargen_sprite::bits#1 anim::j#2 anim::j#1 ] +Allocated (was zp ZP_BYTE:45) zp ZP_BYTE:6 [ place_sprites::spr_id#2 place_sprites::spr_id#1 gen_chargen_sprite::x#6 gen_chargen_sprite::x#1 gen_sintab::min#2 sin_idx_x#13 sin_idx_x#11 sin_idx_x#3 ] +Allocated (was zp ZP_BYTE:46) zp ZP_BYTE:8 [ place_sprites::j#2 place_sprites::j#1 gen_chargen_sprite::c#3 gen_sintab::length#10 sin_idx_y#13 sin_idx_y#11 sin_idx_y#3 ] +Allocated (was zp ZP_BYTE:47) zp ZP_BYTE:9 [ place_sprites::spr_x#2 place_sprites::spr_x#1 gen_chargen_sprite::s_gen#3 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen#6 gen_chargen_sprite::s_gen#1 gen_sintab::i#10 gen_sintab::i#1 anim::xidx#3 anim::xidx#0 anim::xidx#5 anim::xidx#1 anim::xidx#2 ] +Allocated (was zp ZP_BYTE:48) zp ZP_BYTE:10 [ place_sprites::j2#3 place_sprites::j2#2 progress_idx#14 progress_idx#12 progress_idx#10 anim::x_msb#2 anim::x_msb#1 anim::$6 ] +Allocated (was zp ZP_BYTE:49) zp ZP_BYTE:11 [ place_sprites::col#2 place_sprites::col#1 gen_sprites::i#2 gen_sprites::i#1 anim::j2#2 anim::j2#1 ] +Allocated (was zp ZP_WORD:50) zp ZP_WORD:15 [ anim::x#0 gen_chargen_sprite::sprite#3 gen_chargen_sprite::sprite#10 gen_chargen_sprite::sprite#11 gen_chargen_sprite::sprite#0 gen_chargen_sprite::sprite#2 gen_chargen_sprite::sprite#4 gen_chargen_sprite::sprite#1 gen_sintab::sintab#13 clear_screen::sc#4 clear_screen::sc#1 ] +Allocated (was zp ZP_WORD:71) zp ZP_WORD:19 [ gen_chargen_sprite::$0 gen_chargen_sprite::$1 gen_chargen_sprite::chargen#0 getFAC::return#2 gen_sintab::$24 getFAC::return#0 setMEMtoFAC::mem#5 setFAC::prepareMEM1_mem#0 setFAC::w#0 setFAC::w#3 setFAC::w#4 setFAC::w#1 divMEMbyFAC::mem#2 mulFACbyMEM::mem#2 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -5768,7 +5906,7 @@ init: { // init::@3 b3: // [53] call gen_sprites - // [169] phi from init::@3 to gen_sprites [phi:init::@3->gen_sprites] + // [172] phi from init::@3 to gen_sprites [phi:init::@3->gen_sprites] gen_sprites_from_b3: jsr gen_sprites // [54] phi from init::@3 to init::@4 [phi:init::@3->init::@4] @@ -5777,9 +5915,9 @@ init: { // init::@4 b4: // [55] call progress_init - // [167] phi from init::@4 to progress_init [phi:init::@4->progress_init] + // [170] phi from init::@4 to progress_init [phi:init::@4->progress_init] progress_init_from_b4: - // [167] phi (byte*) progress_init::line#2 = (const byte*) SCREEN#0 [phi:init::@4->progress_init#0] -- pbuz1=pbuc1 + // [170] phi (byte*) progress_init::line#2 = (const byte*) SCREEN#0 [phi:init::@4->progress_init#0] -- pbuz1=pbuc1 lda #SCREEN @@ -5813,9 +5951,9 @@ init: { // init::@6 b6: // [59] call progress_init - // [167] phi from init::@6 to progress_init [phi:init::@6->progress_init] + // [170] phi from init::@6 to progress_init [phi:init::@6->progress_init] progress_init_from_b6: - // [167] phi (byte*) progress_init::line#2 = (const byte*) SCREEN#0+(byte) $28 [phi:init::@6->progress_init#0] -- pbuz1=pbuc1 + // [170] phi (byte*) progress_init::line#2 = (const byte*) SCREEN#0+(byte) $28 [phi:init::@6->progress_init#0] -- pbuz1=pbuc1 lda #SCREEN+$28 @@ -5860,7 +5998,7 @@ init: { } // clear_screen clear_screen: { - .label sc = $13 + .label sc = $f // [66] phi from clear_screen to clear_screen::@2 [phi:clear_screen->clear_screen::@2] b2_from_clear_screen: // [66] phi (byte*) clear_screen::sc#4 = (const byte*) SCREEN#0 [phi:clear_screen->clear_screen::@2#0] -- pbuz1=pbuc1 @@ -5908,24 +6046,24 @@ clear_screen: { // - length is the length of the sine table // - min is the minimum value of the generated sinus // - max is the maximum value of the generated sinus -// gen_sintab(byte* zeropage($13) sintab, byte zeropage(8) length, byte zeropage(6) min, byte register(X) max) +// gen_sintab(byte* zeropage($f) sintab, byte zeropage(8) length, byte zeropage(6) min, byte register(X) max) gen_sintab: { // amplitude/2 .label f_2pi = $e2e5 - .label _24 = $f + .label _24 = $13 .label i = 9 .label min = 6 .label length = 8 - .label sintab = $13 + .label sintab = $f // [72] (word) setFAC::w#0 ← (word)(byte) gen_sintab::max#2 -- vwuz1=_word_vbuxx txa sta.z setFAC.w lda #0 sta.z setFAC.w+1 // [73] call setFAC - // [153] phi from gen_sintab to setFAC [phi:gen_sintab->setFAC] + // [152] phi from gen_sintab to setFAC [phi:gen_sintab->setFAC] setFAC_from_gen_sintab: - // [153] phi (word) setFAC::w#5 = (word) setFAC::w#0 [phi:gen_sintab->setFAC#0] -- register_copy + // [152] phi (word) setFAC::prepareMEM1_mem#0 = (word) setFAC::w#0 [phi:gen_sintab->setFAC#0] -- register_copy jsr setFAC // [74] phi from gen_sintab to gen_sintab::@3 [phi:gen_sintab->gen_sintab::@3] b3_from_gen_sintab: @@ -5943,9 +6081,9 @@ gen_sintab: { lda #0 sta.z setFAC.w+1 // [77] call setFAC - // [153] phi from gen_sintab::@4 to setFAC [phi:gen_sintab::@4->setFAC] + // [152] phi from gen_sintab::@4 to setFAC [phi:gen_sintab::@4->setFAC] setFAC_from_b4: - // [153] phi (word) setFAC::w#5 = (word) setFAC::w#1 [phi:gen_sintab::@4->setFAC#0] -- register_copy + // [152] phi (word) setFAC::prepareMEM1_mem#0 = (word) setFAC::w#1 [phi:gen_sintab::@4->setFAC#0] -- register_copy jsr setFAC // [78] phi from gen_sintab::@4 to gen_sintab::@5 [phi:gen_sintab::@4->gen_sintab::@5] b5_from_b4: @@ -5953,9 +6091,9 @@ gen_sintab: { // gen_sintab::@5 b5: // [79] call setMEMtoFAC - // [158] phi from gen_sintab::@5 to setMEMtoFAC [phi:gen_sintab::@5->setMEMtoFAC] + // [159] phi from gen_sintab::@5 to setMEMtoFAC [phi:gen_sintab::@5->setMEMtoFAC] setMEMtoFAC_from_b5: - // [158] phi (byte*) setMEMtoFAC::mem#5 = (const byte[]) gen_sintab::f_min#0 [phi:gen_sintab::@5->setMEMtoFAC#0] -- pbuz1=pbuc1 + // [159] phi (byte*) setMEMtoFAC::mem#5 = (const byte[]) gen_sintab::f_min#0 [phi:gen_sintab::@5->setMEMtoFAC#0] -- pbuz1=pbuc1 lda #f_min @@ -5974,9 +6112,9 @@ gen_sintab: { // gen_sintab::@7 b7: // [83] call setMEMtoFAC - // [158] phi from gen_sintab::@7 to setMEMtoFAC [phi:gen_sintab::@7->setMEMtoFAC] + // [159] phi from gen_sintab::@7 to setMEMtoFAC [phi:gen_sintab::@7->setMEMtoFAC] setMEMtoFAC_from_b7: - // [158] phi (byte*) setMEMtoFAC::mem#5 = (const byte[]) gen_sintab::f_amp#0 [phi:gen_sintab::@7->setMEMtoFAC#0] -- pbuz1=pbuc1 + // [159] phi (byte*) setMEMtoFAC::mem#5 = (const byte[]) gen_sintab::f_amp#0 [phi:gen_sintab::@7->setMEMtoFAC#0] -- pbuz1=pbuc1 lda #f_amp @@ -5988,13 +6126,13 @@ gen_sintab: { // gen_sintab::@8 b8: // [85] call setFAC - // [153] phi from gen_sintab::@8 to setFAC [phi:gen_sintab::@8->setFAC] + // [152] phi from gen_sintab::@8 to setFAC [phi:gen_sintab::@8->setFAC] setFAC_from_b8: - // [153] phi (word) setFAC::w#5 = (byte) 2 [phi:gen_sintab::@8->setFAC#0] -- vwuz1=vbuc1 + // [152] phi (word) setFAC::prepareMEM1_mem#0 = (byte) 2 [phi:gen_sintab::@8->setFAC#0] -- vwuz1=vbuc1 lda #<2 - sta.z setFAC.w + sta.z setFAC.prepareMEM1_mem lda #>2 - sta.z setFAC.w+1 + sta.z setFAC.prepareMEM1_mem+1 jsr setFAC // [86] phi from gen_sintab::@8 to gen_sintab::@9 [phi:gen_sintab::@8->gen_sintab::@9] b9_from_b8: @@ -6002,9 +6140,9 @@ gen_sintab: { // gen_sintab::@9 b9: // [87] call divMEMbyFAC - // [148] phi from gen_sintab::@9 to divMEMbyFAC [phi:gen_sintab::@9->divMEMbyFAC] + // [145] phi from gen_sintab::@9 to divMEMbyFAC [phi:gen_sintab::@9->divMEMbyFAC] divMEMbyFAC_from_b9: - // [148] phi (byte*) divMEMbyFAC::mem#2 = (const byte[]) gen_sintab::f_amp#0 [phi:gen_sintab::@9->divMEMbyFAC#0] -- pbuz1=pbuc1 + // [145] phi (byte*) divMEMbyFAC::mem#2 = (const byte[]) gen_sintab::f_amp#0 [phi:gen_sintab::@9->divMEMbyFAC#0] -- pbuz1=pbuc1 lda #f_amp @@ -6016,9 +6154,9 @@ gen_sintab: { // gen_sintab::@10 b10: // [89] call setMEMtoFAC - // [158] phi from gen_sintab::@10 to setMEMtoFAC [phi:gen_sintab::@10->setMEMtoFAC] + // [159] phi from gen_sintab::@10 to setMEMtoFAC [phi:gen_sintab::@10->setMEMtoFAC] setMEMtoFAC_from_b10: - // [158] phi (byte*) setMEMtoFAC::mem#5 = (const byte[]) gen_sintab::f_amp#0 [phi:gen_sintab::@10->setMEMtoFAC#0] -- pbuz1=pbuc1 + // [159] phi (byte*) setMEMtoFAC::mem#5 = (const byte[]) gen_sintab::f_amp#0 [phi:gen_sintab::@10->setMEMtoFAC#0] -- pbuz1=pbuc1 lda #f_amp @@ -6039,9 +6177,9 @@ gen_sintab: { // gen_sintab::@12 b12: // [93] call setMEMtoFAC - // [158] phi from gen_sintab::@12 to setMEMtoFAC [phi:gen_sintab::@12->setMEMtoFAC] + // [159] phi from gen_sintab::@12 to setMEMtoFAC [phi:gen_sintab::@12->setMEMtoFAC] setMEMtoFAC_from_b12: - // [158] phi (byte*) setMEMtoFAC::mem#5 = (const byte[]) gen_sintab::f_min#0 [phi:gen_sintab::@12->setMEMtoFAC#0] -- pbuz1=pbuc1 + // [159] phi (byte*) setMEMtoFAC::mem#5 = (const byte[]) gen_sintab::f_min#0 [phi:gen_sintab::@12->setMEMtoFAC#0] -- pbuz1=pbuc1 lda #f_min @@ -6077,9 +6215,9 @@ gen_sintab: { lda #0 sta.z setFAC.w+1 // [98] call setFAC - // [153] phi from gen_sintab::@2 to setFAC [phi:gen_sintab::@2->setFAC] + // [152] phi from gen_sintab::@2 to setFAC [phi:gen_sintab::@2->setFAC] setFAC_from_b2: - // [153] phi (word) setFAC::w#5 = (word) setFAC::w#3 [phi:gen_sintab::@2->setFAC#0] -- register_copy + // [152] phi (word) setFAC::prepareMEM1_mem#0 = (word) setFAC::w#3 [phi:gen_sintab::@2->setFAC#0] -- register_copy jsr setFAC // [99] phi from gen_sintab::@2 to gen_sintab::@13 [phi:gen_sintab::@2->gen_sintab::@13] b13_from_b2: @@ -6087,9 +6225,9 @@ gen_sintab: { // gen_sintab::@13 b13: // [100] call mulFACbyMEM - // [141] phi from gen_sintab::@13 to mulFACbyMEM [phi:gen_sintab::@13->mulFACbyMEM] + // [136] phi from gen_sintab::@13 to mulFACbyMEM [phi:gen_sintab::@13->mulFACbyMEM] mulFACbyMEM_from_b13: - // [141] phi (byte*) mulFACbyMEM::mem#2 = (const byte*) gen_sintab::f_2pi#0 [phi:gen_sintab::@13->mulFACbyMEM#0] -- pbuz1=pbuc1 + // [136] phi (byte*) mulFACbyMEM::mem#2 = (const byte*) gen_sintab::f_2pi#0 [phi:gen_sintab::@13->mulFACbyMEM#0] -- pbuz1=pbuc1 lda #f_2pi @@ -6101,9 +6239,9 @@ gen_sintab: { // gen_sintab::@14 b14: // [102] call setMEMtoFAC - // [158] phi from gen_sintab::@14 to setMEMtoFAC [phi:gen_sintab::@14->setMEMtoFAC] + // [159] phi from gen_sintab::@14 to setMEMtoFAC [phi:gen_sintab::@14->setMEMtoFAC] setMEMtoFAC_from_b14: - // [158] phi (byte*) setMEMtoFAC::mem#5 = (const byte[]) gen_sintab::f_i#0 [phi:gen_sintab::@14->setMEMtoFAC#0] -- pbuz1=pbuc1 + // [159] phi (byte*) setMEMtoFAC::mem#5 = (const byte[]) gen_sintab::f_i#0 [phi:gen_sintab::@14->setMEMtoFAC#0] -- pbuz1=pbuc1 lda #f_i @@ -6118,9 +6256,9 @@ gen_sintab: { lda #0 sta.z setFAC.w+1 // [104] call setFAC - // [153] phi from gen_sintab::@15 to setFAC [phi:gen_sintab::@15->setFAC] + // [152] phi from gen_sintab::@15 to setFAC [phi:gen_sintab::@15->setFAC] setFAC_from_b15: - // [153] phi (word) setFAC::w#5 = (word) setFAC::w#4 [phi:gen_sintab::@15->setFAC#0] -- register_copy + // [152] phi (word) setFAC::prepareMEM1_mem#0 = (word) setFAC::w#4 [phi:gen_sintab::@15->setFAC#0] -- register_copy jsr setFAC // [105] phi from gen_sintab::@15 to gen_sintab::@16 [phi:gen_sintab::@15->gen_sintab::@16] b16_from_b15: @@ -6128,9 +6266,9 @@ gen_sintab: { // gen_sintab::@16 b16: // [106] call divMEMbyFAC - // [148] phi from gen_sintab::@16 to divMEMbyFAC [phi:gen_sintab::@16->divMEMbyFAC] + // [145] phi from gen_sintab::@16 to divMEMbyFAC [phi:gen_sintab::@16->divMEMbyFAC] divMEMbyFAC_from_b16: - // [148] phi (byte*) divMEMbyFAC::mem#2 = (const byte[]) gen_sintab::f_i#0 [phi:gen_sintab::@16->divMEMbyFAC#0] -- pbuz1=pbuc1 + // [145] phi (byte*) divMEMbyFAC::mem#2 = (const byte[]) gen_sintab::f_i#0 [phi:gen_sintab::@16->divMEMbyFAC#0] -- pbuz1=pbuc1 lda #f_i @@ -6149,9 +6287,9 @@ gen_sintab: { // gen_sintab::@18 b18: // [110] call mulFACbyMEM - // [141] phi from gen_sintab::@18 to mulFACbyMEM [phi:gen_sintab::@18->mulFACbyMEM] + // [136] phi from gen_sintab::@18 to mulFACbyMEM [phi:gen_sintab::@18->mulFACbyMEM] mulFACbyMEM_from_b18: - // [141] phi (byte*) mulFACbyMEM::mem#2 = (const byte[]) gen_sintab::f_amp#0 [phi:gen_sintab::@18->mulFACbyMEM#0] -- pbuz1=pbuc1 + // [136] phi (byte*) mulFACbyMEM::mem#2 = (const byte[]) gen_sintab::f_amp#0 [phi:gen_sintab::@18->mulFACbyMEM#0] -- pbuz1=pbuc1 lda #f_amp @@ -6257,12 +6395,12 @@ progress_inc: { // Get the value of the FAC (floating point accumulator) as an integer 16bit word // Destroys the value in the FAC in the process getFAC: { - .label return = $f - // asm { jsr$b1aa sty$fe sta$ff } + .label return = $13 + // asm { jsr$b1aa stymemLo stamemHi } // Load FAC (floating point accumulator) integer part into word register Y,A jsr $b1aa - sty.z $fe - sta.z $ff + sty memLo + sta memHi // [129] (word) getFAC::return#0 ← *((const byte*) memHi#0) w= *((const byte*) memLo#0) -- vwuz1=_deref_pbuc1_word__deref_pbuc2 lda memLo sta.z return @@ -6279,71 +6417,57 @@ getFAC: { // Set FAC to MEM (float saved in memory) plus FAC (float accumulator) // Reads 5 bytes from memory addMEMtoFAC: { - // [132] call prepareMEM - // [135] phi from addMEMtoFAC to prepareMEM [phi:addMEMtoFAC->prepareMEM] - prepareMEM_from_addMEMtoFAC: - // [135] phi (byte*) prepareMEM::mem#5 = (const byte[]) gen_sintab::f_min#0 [phi:addMEMtoFAC->prepareMEM#0] -- pbuz1=pbuc1 + jmp prepareMEM1 + // addMEMtoFAC::prepareMEM1 + prepareMEM1: + // [132] *((const byte*) memLo#0) ← <(word)(const byte[]) gen_sintab::f_min#0 -- _deref_pbuc1=vbuc2 lda #(word)(const byte[]) gen_sintab::f_min#0 -- _deref_pbuc1=vbuc2 lda #>gen_sintab.f_min - sta.z prepareMEM.mem+1 - jsr prepareMEM + sta memHi jmp b1 // addMEMtoFAC::@1 b1: - // asm { lda$fe ldy$ff jsr$b867 } - lda.z $fe - ldy.z $ff + // asm { ldamemLo ldymemHi jsr$b867 } + lda memLo + ldy memHi jsr $b867 jmp breturn // addMEMtoFAC::@return breturn: - // [134] return - rts -} - // prepareMEM -// Prepare MEM pointers for operations using MEM -// prepareMEM(byte* zeropage($f) mem) -prepareMEM: { - .label mem = $f - // [136] (byte~) prepareMEM::$0 ← < (byte*) prepareMEM::mem#5 -- vbuaa=_lo_pbuz1 - lda.z mem - // [137] *((const byte*) memLo#0) ← (byte~) prepareMEM::$0 -- _deref_pbuc1=vbuaa - sta memLo - // [138] (byte~) prepareMEM::$1 ← > (byte*) prepareMEM::mem#5 -- vbuaa=_hi_pbuz1 - lda.z mem+1 - // [139] *((const byte*) memHi#0) ← (byte~) prepareMEM::$1 -- _deref_pbuc1=vbuaa - sta memHi - jmp breturn - // prepareMEM::@return - breturn: - // [140] return + // [135] return rts } // mulFACbyMEM // FAC = MEM*FAC // Set FAC to MEM (float saved in memory) multiplied by FAC (float accumulator) // Reads 5 bytes from memory -// mulFACbyMEM(byte* zeropage($f) mem) +// mulFACbyMEM(byte* zeropage($13) mem) mulFACbyMEM: { - .label mem = $f - // [142] (byte*) prepareMEM::mem#4 ← (byte*) mulFACbyMEM::mem#2 - // [143] call prepareMEM - // [135] phi from mulFACbyMEM to prepareMEM [phi:mulFACbyMEM->prepareMEM] - prepareMEM_from_mulFACbyMEM: - // [135] phi (byte*) prepareMEM::mem#5 = (byte*) prepareMEM::mem#4 [phi:mulFACbyMEM->prepareMEM#0] -- register_copy - jsr prepareMEM + .label mem = $13 + jmp prepareMEM1 + // mulFACbyMEM::prepareMEM1 + prepareMEM1: + // [137] (byte~) mulFACbyMEM::prepareMEM1_$0#0 ← < (word)(byte*) mulFACbyMEM::mem#2 -- vbuaa=_lo_vwuz1 + lda.z mem + // [138] *((const byte*) memLo#0) ← (byte~) mulFACbyMEM::prepareMEM1_$0#0 -- _deref_pbuc1=vbuaa + sta memLo + // [139] (byte~) mulFACbyMEM::prepareMEM1_$1#0 ← > (word)(byte*) mulFACbyMEM::mem#2 -- vbuaa=_hi_vwuz1 + lda.z mem+1 + // [140] *((const byte*) memHi#0) ← (byte~) mulFACbyMEM::prepareMEM1_$1#0 -- _deref_pbuc1=vbuaa + sta memHi jmp b1 // mulFACbyMEM::@1 b1: - // asm { lda$fe ldy$ff jsr$ba28 } - lda.z $fe - ldy.z $ff + // asm { ldamemLo ldymemHi jsr$ba28 } + lda memLo + ldy memHi jsr $ba28 jmp breturn // mulFACbyMEM::@return breturn: - // [145] return + // [142] return rts } // sinFAC @@ -6356,85 +6480,101 @@ sinFAC: { jmp breturn // sinFAC::@return breturn: - // [147] return + // [144] return rts } // divMEMbyFAC // FAC = MEM/FAC // Set FAC to MEM (float saved in memory) divided by FAC (float accumulator) // Reads 5 bytes from memory -// divMEMbyFAC(byte* zeropage($f) mem) +// divMEMbyFAC(byte* zeropage($13) mem) divMEMbyFAC: { - .label mem = $f - // [149] (byte*) prepareMEM::mem#3 ← (byte*) divMEMbyFAC::mem#2 - // [150] call prepareMEM - // [135] phi from divMEMbyFAC to prepareMEM [phi:divMEMbyFAC->prepareMEM] - prepareMEM_from_divMEMbyFAC: - // [135] phi (byte*) prepareMEM::mem#5 = (byte*) prepareMEM::mem#3 [phi:divMEMbyFAC->prepareMEM#0] -- register_copy - jsr prepareMEM + .label mem = $13 + jmp prepareMEM1 + // divMEMbyFAC::prepareMEM1 + prepareMEM1: + // [146] (byte~) divMEMbyFAC::prepareMEM1_$0#0 ← < (word)(byte*) divMEMbyFAC::mem#2 -- vbuaa=_lo_vwuz1 + lda.z mem + // [147] *((const byte*) memLo#0) ← (byte~) divMEMbyFAC::prepareMEM1_$0#0 -- _deref_pbuc1=vbuaa + sta memLo + // [148] (byte~) divMEMbyFAC::prepareMEM1_$1#0 ← > (word)(byte*) divMEMbyFAC::mem#2 -- vbuaa=_hi_vwuz1 + lda.z mem+1 + // [149] *((const byte*) memHi#0) ← (byte~) divMEMbyFAC::prepareMEM1_$1#0 -- _deref_pbuc1=vbuaa + sta memHi jmp b1 // divMEMbyFAC::@1 b1: - // asm { lda$fe ldy$ff jsr$bb0f } - lda.z $fe - ldy.z $ff + // asm { ldamemLo ldymemHi jsr$bb0f } + lda memLo + ldy memHi jsr $bb0f jmp breturn // divMEMbyFAC::@return breturn: - // [152] return + // [151] return rts } // setFAC // FAC = word // Set the FAC (floating point accumulator) to the integer value of a 16bit word -// setFAC(word zeropage($f) w) +// setFAC(word zeropage($13) w) setFAC: { - .label w = $f - // [154] (byte*) prepareMEM::mem#0 ← (byte*)(word) setFAC::w#5 - // [155] call prepareMEM - // [135] phi from setFAC to prepareMEM [phi:setFAC->prepareMEM] - prepareMEM_from_setFAC: - // [135] phi (byte*) prepareMEM::mem#5 = (byte*) prepareMEM::mem#0 [phi:setFAC->prepareMEM#0] -- register_copy - jsr prepareMEM + .label prepareMEM1_mem = $13 + .label w = $13 + jmp prepareMEM1 + // setFAC::prepareMEM1 + prepareMEM1: + // [153] (byte~) setFAC::prepareMEM1_$0#0 ← < (word) setFAC::prepareMEM1_mem#0 -- vbuaa=_lo_vwuz1 + lda.z prepareMEM1_mem + // [154] *((const byte*) memLo#0) ← (byte~) setFAC::prepareMEM1_$0#0 -- _deref_pbuc1=vbuaa + sta memLo + // [155] (byte~) setFAC::prepareMEM1_$1#0 ← > (word) setFAC::prepareMEM1_mem#0 -- vbuaa=_hi_vwuz1 + lda.z prepareMEM1_mem+1 + // [156] *((const byte*) memHi#0) ← (byte~) setFAC::prepareMEM1_$1#0 -- _deref_pbuc1=vbuaa + sta memHi jmp b1 // setFAC::@1 b1: - // asm { ldy$fe lda$ff jsr$b391 } + // asm { ldymemLo ldamemHi jsr$b391 } // Load word register Y,A into FAC (floating point accumulator) - ldy.z $fe - lda.z $ff + ldy memLo + lda memHi jsr $b391 jmp breturn // setFAC::@return breturn: - // [157] return + // [158] return rts } // setMEMtoFAC // MEM = FAC // Stores the value of the FAC to memory // Stores 5 bytes (means it is necessary to allocate 5 bytes to avoid clobbering other data using eg. byte[] mem = {0, 0, 0, 0, 0};) -// setMEMtoFAC(byte* zeropage($f) mem) +// setMEMtoFAC(byte* zeropage($13) mem) setMEMtoFAC: { - .label mem = $f - // [159] (byte*) prepareMEM::mem#1 ← (byte*) setMEMtoFAC::mem#5 - // [160] call prepareMEM - // [135] phi from setMEMtoFAC to prepareMEM [phi:setMEMtoFAC->prepareMEM] - prepareMEM_from_setMEMtoFAC: - // [135] phi (byte*) prepareMEM::mem#5 = (byte*) prepareMEM::mem#1 [phi:setMEMtoFAC->prepareMEM#0] -- register_copy - jsr prepareMEM + .label mem = $13 + jmp prepareMEM1 + // setMEMtoFAC::prepareMEM1 + prepareMEM1: + // [160] (byte~) setMEMtoFAC::prepareMEM1_$0#0 ← < (word)(byte*) setMEMtoFAC::mem#5 -- vbuaa=_lo_vwuz1 + lda.z mem + // [161] *((const byte*) memLo#0) ← (byte~) setMEMtoFAC::prepareMEM1_$0#0 -- _deref_pbuc1=vbuaa + sta memLo + // [162] (byte~) setMEMtoFAC::prepareMEM1_$1#0 ← > (word)(byte*) setMEMtoFAC::mem#5 -- vbuaa=_hi_vwuz1 + lda.z mem+1 + // [163] *((const byte*) memHi#0) ← (byte~) setMEMtoFAC::prepareMEM1_$1#0 -- _deref_pbuc1=vbuaa + sta memHi jmp b1 // setMEMtoFAC::@1 b1: - // asm { ldx$fe ldy$ff jsr$bbd4 } - ldx.z $fe - ldy.z $ff + // asm { ldxmemLo ldymemHi jsr$bbd4 } + ldx memLo + ldy memHi jsr $bbd4 jmp breturn // setMEMtoFAC::@return breturn: - // [162] return + // [165] return rts } // subFACfromARG @@ -6446,7 +6586,7 @@ subFACfromARG: { jmp breturn // subFACfromARG::@return breturn: - // [164] return + // [167] return rts } // setARGtoFAC @@ -6458,7 +6598,7 @@ setARGtoFAC: { jmp breturn // setARGtoFAC::@return breturn: - // [166] return + // [169] return rts } // progress_init @@ -6469,45 +6609,45 @@ progress_init: { jmp breturn // progress_init::@return breturn: - // [168] return + // [171] return rts } // gen_sprites gen_sprites: { .label spr = 2 .label i = $b - // [170] phi from gen_sprites to gen_sprites::@1 [phi:gen_sprites->gen_sprites::@1] + // [173] phi from gen_sprites to gen_sprites::@1 [phi:gen_sprites->gen_sprites::@1] b1_from_gen_sprites: - // [170] phi (byte*) gen_sprites::spr#2 = (const byte*) sprites#0 [phi:gen_sprites->gen_sprites::@1#0] -- pbuz1=pbuc1 + // [173] phi (byte*) gen_sprites::spr#2 = (const byte*) sprites#0 [phi:gen_sprites->gen_sprites::@1#0] -- pbuz1=pbuc1 lda #sprites sta.z spr+1 - // [170] phi (byte) gen_sprites::i#2 = (byte) 0 [phi:gen_sprites->gen_sprites::@1#1] -- vbuz1=vbuc1 + // [173] phi (byte) gen_sprites::i#2 = (byte) 0 [phi:gen_sprites->gen_sprites::@1#1] -- vbuz1=vbuc1 lda #0 sta.z i jmp b1 - // [170] phi from gen_sprites::@2 to gen_sprites::@1 [phi:gen_sprites::@2->gen_sprites::@1] + // [173] phi from gen_sprites::@2 to gen_sprites::@1 [phi:gen_sprites::@2->gen_sprites::@1] b1_from_b2: - // [170] phi (byte*) gen_sprites::spr#2 = (byte*) gen_sprites::spr#1 [phi:gen_sprites::@2->gen_sprites::@1#0] -- register_copy - // [170] phi (byte) gen_sprites::i#2 = (byte) gen_sprites::i#1 [phi:gen_sprites::@2->gen_sprites::@1#1] -- register_copy + // [173] phi (byte*) gen_sprites::spr#2 = (byte*) gen_sprites::spr#1 [phi:gen_sprites::@2->gen_sprites::@1#0] -- register_copy + // [173] phi (byte) gen_sprites::i#2 = (byte) gen_sprites::i#1 [phi:gen_sprites::@2->gen_sprites::@1#1] -- register_copy jmp b1 // gen_sprites::@1 b1: - // [171] (byte) gen_chargen_sprite::ch#0 ← *((const byte[]) gen_sprites::cml#0 + (byte) gen_sprites::i#2) -- vbuxx=pbuc1_derefidx_vbuz1 + // [174] (byte) gen_chargen_sprite::ch#0 ← *((const byte[]) gen_sprites::cml#0 + (byte) gen_sprites::i#2) -- vbuxx=pbuc1_derefidx_vbuz1 ldy.z i ldx cml,y - // [172] (byte*) gen_chargen_sprite::sprite#0 ← (byte*) gen_sprites::spr#2 -- pbuz1=pbuz2 + // [175] (byte*) gen_chargen_sprite::sprite#0 ← (byte*) gen_sprites::spr#2 -- pbuz1=pbuz2 lda.z spr sta.z gen_chargen_sprite.sprite lda.z spr+1 sta.z gen_chargen_sprite.sprite+1 - // [173] call gen_chargen_sprite + // [176] call gen_chargen_sprite jsr gen_chargen_sprite jmp b2 // gen_sprites::@2 b2: - // [174] (byte*) gen_sprites::spr#1 ← (byte*) gen_sprites::spr#2 + (byte) $40 -- pbuz1=pbuz1_plus_vbuc1 + // [177] (byte*) gen_sprites::spr#1 ← (byte*) gen_sprites::spr#2 + (byte) $40 -- pbuz1=pbuz1_plus_vbuc1 lda #$40 clc adc.z spr @@ -6515,16 +6655,16 @@ gen_sprites: { bcc !+ inc.z spr+1 !: - // [175] (byte) gen_sprites::i#1 ← ++ (byte) gen_sprites::i#2 -- vbuz1=_inc_vbuz1 + // [178] (byte) gen_sprites::i#1 ← ++ (byte) gen_sprites::i#2 -- vbuz1=_inc_vbuz1 inc.z i - // [176] if((byte) gen_sprites::i#1!=(byte) 7) goto gen_sprites::@1 -- vbuz1_neq_vbuc1_then_la1 + // [179] if((byte) gen_sprites::i#1!=(byte) 7) goto gen_sprites::@1 -- vbuz1_neq_vbuc1_then_la1 lda #7 cmp.z i bne b1_from_b2 jmp breturn // gen_sprites::@return breturn: - // [177] return + // [180] return rts cml: .text "camelot" } @@ -6543,19 +6683,19 @@ gen_chargen_sprite: { .label x = 6 .label y = 4 .label c = 8 - // [178] (word~) gen_chargen_sprite::$0 ← (word)(byte) gen_chargen_sprite::ch#0 -- vwuz1=_word_vbuxx + // [181] (word~) gen_chargen_sprite::$0 ← (word)(byte) gen_chargen_sprite::ch#0 -- vwuz1=_word_vbuxx txa sta.z _0 lda #0 sta.z _0+1 - // [179] (word~) gen_chargen_sprite::$1 ← (word~) gen_chargen_sprite::$0 << (byte) 3 -- vwuz1=vwuz1_rol_3 + // [182] (word~) gen_chargen_sprite::$1 ← (word~) gen_chargen_sprite::$0 << (byte) 3 -- vwuz1=vwuz1_rol_3 asl.z _1 rol.z _1+1 asl.z _1 rol.z _1+1 asl.z _1 rol.z _1+1 - // [180] (byte*) gen_chargen_sprite::chargen#0 ← (const byte*) CHARGEN#0 + (word~) gen_chargen_sprite::$1 -- pbuz1=pbuc1_plus_vwuz1 + // [183] (byte*) gen_chargen_sprite::chargen#0 ← (const byte*) CHARGEN#0 + (word~) gen_chargen_sprite::$1 -- pbuz1=pbuc1_plus_vwuz1 clc lda.z chargen adc #gen_chargen_sprite::@1] + // [186] phi from gen_chargen_sprite to gen_chargen_sprite::@1 [phi:gen_chargen_sprite->gen_chargen_sprite::@1] b1_from_gen_chargen_sprite: - // [183] phi (byte*) gen_chargen_sprite::sprite#11 = (byte*) gen_chargen_sprite::sprite#0 [phi:gen_chargen_sprite->gen_chargen_sprite::@1#0] -- register_copy - // [183] phi (byte) gen_chargen_sprite::y#2 = (byte) 0 [phi:gen_chargen_sprite->gen_chargen_sprite::@1#1] -- vbuz1=vbuc1 + // [186] phi (byte*) gen_chargen_sprite::sprite#11 = (byte*) gen_chargen_sprite::sprite#0 [phi:gen_chargen_sprite->gen_chargen_sprite::@1#0] -- register_copy + // [186] phi (byte) gen_chargen_sprite::y#2 = (byte) 0 [phi:gen_chargen_sprite->gen_chargen_sprite::@1#1] -- vbuz1=vbuc1 lda #0 sta.z y jmp b1 - // [183] phi from gen_chargen_sprite::@8 to gen_chargen_sprite::@1 [phi:gen_chargen_sprite::@8->gen_chargen_sprite::@1] + // [186] phi from gen_chargen_sprite::@8 to gen_chargen_sprite::@1 [phi:gen_chargen_sprite::@8->gen_chargen_sprite::@1] b1_from_b8: - // [183] phi (byte*) gen_chargen_sprite::sprite#11 = (byte*) gen_chargen_sprite::sprite#2 [phi:gen_chargen_sprite::@8->gen_chargen_sprite::@1#0] -- register_copy - // [183] phi (byte) gen_chargen_sprite::y#2 = (byte) gen_chargen_sprite::y#1 [phi:gen_chargen_sprite::@8->gen_chargen_sprite::@1#1] -- register_copy + // [186] phi (byte*) gen_chargen_sprite::sprite#11 = (byte*) gen_chargen_sprite::sprite#2 [phi:gen_chargen_sprite::@8->gen_chargen_sprite::@1#0] -- register_copy + // [186] phi (byte) gen_chargen_sprite::y#2 = (byte) gen_chargen_sprite::y#1 [phi:gen_chargen_sprite::@8->gen_chargen_sprite::@1#1] -- register_copy jmp b1 // gen_chargen_sprite::@1 b1: - // [184] (byte) gen_chargen_sprite::bits#0 ← *((byte*) gen_chargen_sprite::chargen#0 + (byte) gen_chargen_sprite::y#2) -- vbuz1=pbuz2_derefidx_vbuz3 + // [187] (byte) gen_chargen_sprite::bits#0 ← *((byte*) gen_chargen_sprite::chargen#0 + (byte) gen_chargen_sprite::y#2) -- vbuz1=pbuz2_derefidx_vbuz3 // current chargen line ldy.z y lda (chargen),y sta.z bits - // [185] phi from gen_chargen_sprite::@1 to gen_chargen_sprite::@2 [phi:gen_chargen_sprite::@1->gen_chargen_sprite::@2] + // [188] phi from gen_chargen_sprite::@1 to gen_chargen_sprite::@2 [phi:gen_chargen_sprite::@1->gen_chargen_sprite::@2] b2_from_b1: - // [185] phi (byte) gen_chargen_sprite::x#6 = (byte) 0 [phi:gen_chargen_sprite::@1->gen_chargen_sprite::@2#0] -- vbuz1=vbuc1 + // [188] phi (byte) gen_chargen_sprite::x#6 = (byte) 0 [phi:gen_chargen_sprite::@1->gen_chargen_sprite::@2#0] -- vbuz1=vbuc1 lda #0 sta.z x - // [185] phi (byte*) gen_chargen_sprite::sprite#10 = (byte*) gen_chargen_sprite::sprite#11 [phi:gen_chargen_sprite::@1->gen_chargen_sprite::@2#1] -- register_copy - // [185] phi (byte) gen_chargen_sprite::s_gen_cnt#4 = (byte) 0 [phi:gen_chargen_sprite::@1->gen_chargen_sprite::@2#2] -- vbuyy=vbuc1 + // [188] phi (byte*) gen_chargen_sprite::sprite#10 = (byte*) gen_chargen_sprite::sprite#11 [phi:gen_chargen_sprite::@1->gen_chargen_sprite::@2#1] -- register_copy + // [188] phi (byte) gen_chargen_sprite::s_gen_cnt#4 = (byte) 0 [phi:gen_chargen_sprite::@1->gen_chargen_sprite::@2#2] -- vbuyy=vbuc1 ldy #0 - // [185] phi (byte) gen_chargen_sprite::s_gen#5 = (byte) 0 [phi:gen_chargen_sprite::@1->gen_chargen_sprite::@2#3] -- vbuz1=vbuc1 + // [188] phi (byte) gen_chargen_sprite::s_gen#5 = (byte) 0 [phi:gen_chargen_sprite::@1->gen_chargen_sprite::@2#3] -- vbuz1=vbuc1 lda #0 sta.z s_gen - // [185] phi (byte) gen_chargen_sprite::bits#2 = (byte) gen_chargen_sprite::bits#0 [phi:gen_chargen_sprite::@1->gen_chargen_sprite::@2#4] -- register_copy + // [188] phi (byte) gen_chargen_sprite::bits#2 = (byte) gen_chargen_sprite::bits#0 [phi:gen_chargen_sprite::@1->gen_chargen_sprite::@2#4] -- register_copy jmp b2 - // [185] phi from gen_chargen_sprite::@7 to gen_chargen_sprite::@2 [phi:gen_chargen_sprite::@7->gen_chargen_sprite::@2] + // [188] phi from gen_chargen_sprite::@7 to gen_chargen_sprite::@2 [phi:gen_chargen_sprite::@7->gen_chargen_sprite::@2] b2_from_b7: - // [185] phi (byte) gen_chargen_sprite::x#6 = (byte) gen_chargen_sprite::x#1 [phi:gen_chargen_sprite::@7->gen_chargen_sprite::@2#0] -- register_copy - // [185] phi (byte*) gen_chargen_sprite::sprite#10 = (byte*) gen_chargen_sprite::sprite#4 [phi:gen_chargen_sprite::@7->gen_chargen_sprite::@2#1] -- register_copy - // [185] phi (byte) gen_chargen_sprite::s_gen_cnt#4 = (byte) gen_chargen_sprite::s_gen_cnt#5 [phi:gen_chargen_sprite::@7->gen_chargen_sprite::@2#2] -- register_copy - // [185] phi (byte) gen_chargen_sprite::s_gen#5 = (byte) gen_chargen_sprite::s_gen#6 [phi:gen_chargen_sprite::@7->gen_chargen_sprite::@2#3] -- register_copy - // [185] phi (byte) gen_chargen_sprite::bits#2 = (byte) gen_chargen_sprite::bits#1 [phi:gen_chargen_sprite::@7->gen_chargen_sprite::@2#4] -- register_copy + // [188] phi (byte) gen_chargen_sprite::x#6 = (byte) gen_chargen_sprite::x#1 [phi:gen_chargen_sprite::@7->gen_chargen_sprite::@2#0] -- register_copy + // [188] phi (byte*) gen_chargen_sprite::sprite#10 = (byte*) gen_chargen_sprite::sprite#4 [phi:gen_chargen_sprite::@7->gen_chargen_sprite::@2#1] -- register_copy + // [188] phi (byte) gen_chargen_sprite::s_gen_cnt#4 = (byte) gen_chargen_sprite::s_gen_cnt#5 [phi:gen_chargen_sprite::@7->gen_chargen_sprite::@2#2] -- register_copy + // [188] phi (byte) gen_chargen_sprite::s_gen#5 = (byte) gen_chargen_sprite::s_gen#6 [phi:gen_chargen_sprite::@7->gen_chargen_sprite::@2#3] -- register_copy + // [188] phi (byte) gen_chargen_sprite::bits#2 = (byte) gen_chargen_sprite::bits#1 [phi:gen_chargen_sprite::@7->gen_chargen_sprite::@2#4] -- register_copy jmp b2 // gen_chargen_sprite::@2 b2: - // [186] (byte~) gen_chargen_sprite::$3 ← (byte) gen_chargen_sprite::bits#2 & (byte) $80 -- vbuaa=vbuz1_band_vbuc1 + // [189] (byte~) gen_chargen_sprite::$3 ← (byte) gen_chargen_sprite::bits#2 & (byte) $80 -- vbuaa=vbuz1_band_vbuc1 lda #$80 and.z bits - // [187] if((byte~) gen_chargen_sprite::$3==(byte) 0) goto gen_chargen_sprite::@3 -- vbuaa_eq_0_then_la1 + // [190] if((byte~) gen_chargen_sprite::$3==(byte) 0) goto gen_chargen_sprite::@3 -- vbuaa_eq_0_then_la1 cmp #0 beq b3_from_b2 - // [188] phi from gen_chargen_sprite::@2 to gen_chargen_sprite::@10 [phi:gen_chargen_sprite::@2->gen_chargen_sprite::@10] + // [191] phi from gen_chargen_sprite::@2 to gen_chargen_sprite::@10 [phi:gen_chargen_sprite::@2->gen_chargen_sprite::@10] b10_from_b2: jmp b10 // gen_chargen_sprite::@10 b10: - // [189] phi from gen_chargen_sprite::@10 to gen_chargen_sprite::@3 [phi:gen_chargen_sprite::@10->gen_chargen_sprite::@3] + // [192] phi from gen_chargen_sprite::@10 to gen_chargen_sprite::@3 [phi:gen_chargen_sprite::@10->gen_chargen_sprite::@3] b3_from_b10: - // [189] phi (byte) gen_chargen_sprite::c#3 = (byte) 1 [phi:gen_chargen_sprite::@10->gen_chargen_sprite::@3#0] -- vbuz1=vbuc1 + // [192] phi (byte) gen_chargen_sprite::c#3 = (byte) 1 [phi:gen_chargen_sprite::@10->gen_chargen_sprite::@3#0] -- vbuz1=vbuc1 lda #1 sta.z c jmp b3 - // [189] phi from gen_chargen_sprite::@2 to gen_chargen_sprite::@3 [phi:gen_chargen_sprite::@2->gen_chargen_sprite::@3] + // [192] phi from gen_chargen_sprite::@2 to gen_chargen_sprite::@3 [phi:gen_chargen_sprite::@2->gen_chargen_sprite::@3] b3_from_b2: - // [189] phi (byte) gen_chargen_sprite::c#3 = (byte) 0 [phi:gen_chargen_sprite::@2->gen_chargen_sprite::@3#0] -- vbuz1=vbuc1 + // [192] phi (byte) gen_chargen_sprite::c#3 = (byte) 0 [phi:gen_chargen_sprite::@2->gen_chargen_sprite::@3#0] -- vbuz1=vbuc1 lda #0 sta.z c jmp b3 // gen_chargen_sprite::@3 b3: - // [190] phi from gen_chargen_sprite::@3 to gen_chargen_sprite::@4 [phi:gen_chargen_sprite::@3->gen_chargen_sprite::@4] + // [193] phi from gen_chargen_sprite::@3 to gen_chargen_sprite::@4 [phi:gen_chargen_sprite::@3->gen_chargen_sprite::@4] b4_from_b3: - // [190] phi (byte*) gen_chargen_sprite::sprite#3 = (byte*) gen_chargen_sprite::sprite#10 [phi:gen_chargen_sprite::@3->gen_chargen_sprite::@4#0] -- register_copy - // [190] phi (byte) gen_chargen_sprite::b#2 = (byte) 0 [phi:gen_chargen_sprite::@3->gen_chargen_sprite::@4#1] -- vbuxx=vbuc1 + // [193] phi (byte*) gen_chargen_sprite::sprite#3 = (byte*) gen_chargen_sprite::sprite#10 [phi:gen_chargen_sprite::@3->gen_chargen_sprite::@4#0] -- register_copy + // [193] phi (byte) gen_chargen_sprite::b#2 = (byte) 0 [phi:gen_chargen_sprite::@3->gen_chargen_sprite::@4#1] -- vbuxx=vbuc1 ldx #0 - // [190] phi (byte) gen_chargen_sprite::s_gen_cnt#3 = (byte) gen_chargen_sprite::s_gen_cnt#4 [phi:gen_chargen_sprite::@3->gen_chargen_sprite::@4#2] -- register_copy - // [190] phi (byte) gen_chargen_sprite::s_gen#3 = (byte) gen_chargen_sprite::s_gen#5 [phi:gen_chargen_sprite::@3->gen_chargen_sprite::@4#3] -- register_copy + // [193] phi (byte) gen_chargen_sprite::s_gen_cnt#3 = (byte) gen_chargen_sprite::s_gen_cnt#4 [phi:gen_chargen_sprite::@3->gen_chargen_sprite::@4#2] -- register_copy + // [193] phi (byte) gen_chargen_sprite::s_gen#3 = (byte) gen_chargen_sprite::s_gen#5 [phi:gen_chargen_sprite::@3->gen_chargen_sprite::@4#3] -- register_copy jmp b4 // generate 3 pixels in the sprite byte (s_gen) - // [190] phi from gen_chargen_sprite::@5 to gen_chargen_sprite::@4 [phi:gen_chargen_sprite::@5->gen_chargen_sprite::@4] + // [193] phi from gen_chargen_sprite::@5 to gen_chargen_sprite::@4 [phi:gen_chargen_sprite::@5->gen_chargen_sprite::@4] b4_from_b5: - // [190] phi (byte*) gen_chargen_sprite::sprite#3 = (byte*) gen_chargen_sprite::sprite#4 [phi:gen_chargen_sprite::@5->gen_chargen_sprite::@4#0] -- register_copy - // [190] phi (byte) gen_chargen_sprite::b#2 = (byte) gen_chargen_sprite::b#1 [phi:gen_chargen_sprite::@5->gen_chargen_sprite::@4#1] -- register_copy - // [190] phi (byte) gen_chargen_sprite::s_gen_cnt#3 = (byte) gen_chargen_sprite::s_gen_cnt#5 [phi:gen_chargen_sprite::@5->gen_chargen_sprite::@4#2] -- register_copy - // [190] phi (byte) gen_chargen_sprite::s_gen#3 = (byte) gen_chargen_sprite::s_gen#6 [phi:gen_chargen_sprite::@5->gen_chargen_sprite::@4#3] -- register_copy + // [193] phi (byte*) gen_chargen_sprite::sprite#3 = (byte*) gen_chargen_sprite::sprite#4 [phi:gen_chargen_sprite::@5->gen_chargen_sprite::@4#0] -- register_copy + // [193] phi (byte) gen_chargen_sprite::b#2 = (byte) gen_chargen_sprite::b#1 [phi:gen_chargen_sprite::@5->gen_chargen_sprite::@4#1] -- register_copy + // [193] phi (byte) gen_chargen_sprite::s_gen_cnt#3 = (byte) gen_chargen_sprite::s_gen_cnt#5 [phi:gen_chargen_sprite::@5->gen_chargen_sprite::@4#2] -- register_copy + // [193] phi (byte) gen_chargen_sprite::s_gen#3 = (byte) gen_chargen_sprite::s_gen#6 [phi:gen_chargen_sprite::@5->gen_chargen_sprite::@4#3] -- register_copy jmp b4 // gen_chargen_sprite::@4 b4: - // [191] (byte~) gen_chargen_sprite::$6 ← (byte) gen_chargen_sprite::s_gen#3 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [194] (byte~) gen_chargen_sprite::$6 ← (byte) gen_chargen_sprite::s_gen#3 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda.z s_gen asl - // [192] (byte) gen_chargen_sprite::s_gen#1 ← (byte~) gen_chargen_sprite::$6 | (byte) gen_chargen_sprite::c#3 -- vbuz1=vbuaa_bor_vbuz2 + // [195] (byte) gen_chargen_sprite::s_gen#1 ← (byte~) gen_chargen_sprite::$6 | (byte) gen_chargen_sprite::c#3 -- vbuz1=vbuaa_bor_vbuz2 ora.z c sta.z s_gen - // [193] (byte) gen_chargen_sprite::s_gen_cnt#1 ← ++ (byte) gen_chargen_sprite::s_gen_cnt#3 -- vbuyy=_inc_vbuyy + // [196] (byte) gen_chargen_sprite::s_gen_cnt#1 ← ++ (byte) gen_chargen_sprite::s_gen_cnt#3 -- vbuyy=_inc_vbuyy iny - // [194] if((byte) gen_chargen_sprite::s_gen_cnt#1!=(byte) 8) goto gen_chargen_sprite::@5 -- vbuyy_neq_vbuc1_then_la1 + // [197] if((byte) gen_chargen_sprite::s_gen_cnt#1!=(byte) 8) goto gen_chargen_sprite::@5 -- vbuyy_neq_vbuc1_then_la1 cpy #8 bne b5_from_b4 jmp b6 // gen_chargen_sprite::@6 b6: - // [195] *((byte*) gen_chargen_sprite::sprite#3) ← (byte) gen_chargen_sprite::s_gen#1 -- _deref_pbuz1=vbuz2 + // [198] *((byte*) gen_chargen_sprite::sprite#3) ← (byte) gen_chargen_sprite::s_gen#1 -- _deref_pbuz1=vbuz2 // sprite byte filled - store and move to next byte lda.z s_gen ldy #0 sta (sprite),y - // [196] *((byte*) gen_chargen_sprite::sprite#3 + (byte) 3) ← (byte) gen_chargen_sprite::s_gen#1 -- pbuz1_derefidx_vbuc1=vbuz2 + // [199] *((byte*) gen_chargen_sprite::sprite#3 + (byte) 3) ← (byte) gen_chargen_sprite::s_gen#1 -- pbuz1_derefidx_vbuc1=vbuz2 lda.z s_gen ldy #3 sta (sprite),y - // [197] *((byte*) gen_chargen_sprite::sprite#3 + (byte) 6) ← (byte) gen_chargen_sprite::s_gen#1 -- pbuz1_derefidx_vbuc1=vbuz2 + // [200] *((byte*) gen_chargen_sprite::sprite#3 + (byte) 6) ← (byte) gen_chargen_sprite::s_gen#1 -- pbuz1_derefidx_vbuc1=vbuz2 lda.z s_gen ldy #6 sta (sprite),y - // [198] (byte*) gen_chargen_sprite::sprite#1 ← ++ (byte*) gen_chargen_sprite::sprite#3 -- pbuz1=_inc_pbuz1 + // [201] (byte*) gen_chargen_sprite::sprite#1 ← ++ (byte*) gen_chargen_sprite::sprite#3 -- pbuz1=_inc_pbuz1 inc.z sprite bne !+ inc.z sprite+1 !: - // [199] phi from gen_chargen_sprite::@6 to gen_chargen_sprite::@5 [phi:gen_chargen_sprite::@6->gen_chargen_sprite::@5] + // [202] phi from gen_chargen_sprite::@6 to gen_chargen_sprite::@5 [phi:gen_chargen_sprite::@6->gen_chargen_sprite::@5] b5_from_b6: - // [199] phi (byte*) gen_chargen_sprite::sprite#4 = (byte*) gen_chargen_sprite::sprite#1 [phi:gen_chargen_sprite::@6->gen_chargen_sprite::@5#0] -- register_copy - // [199] phi (byte) gen_chargen_sprite::s_gen_cnt#5 = (byte) 0 [phi:gen_chargen_sprite::@6->gen_chargen_sprite::@5#1] -- vbuyy=vbuc1 + // [202] phi (byte*) gen_chargen_sprite::sprite#4 = (byte*) gen_chargen_sprite::sprite#1 [phi:gen_chargen_sprite::@6->gen_chargen_sprite::@5#0] -- register_copy + // [202] phi (byte) gen_chargen_sprite::s_gen_cnt#5 = (byte) 0 [phi:gen_chargen_sprite::@6->gen_chargen_sprite::@5#1] -- vbuyy=vbuc1 ldy #0 - // [199] phi (byte) gen_chargen_sprite::s_gen#6 = (byte) 0 [phi:gen_chargen_sprite::@6->gen_chargen_sprite::@5#2] -- vbuz1=vbuc1 + // [202] phi (byte) gen_chargen_sprite::s_gen#6 = (byte) 0 [phi:gen_chargen_sprite::@6->gen_chargen_sprite::@5#2] -- vbuz1=vbuc1 lda #0 sta.z s_gen jmp b5 - // [199] phi from gen_chargen_sprite::@4 to gen_chargen_sprite::@5 [phi:gen_chargen_sprite::@4->gen_chargen_sprite::@5] + // [202] phi from gen_chargen_sprite::@4 to gen_chargen_sprite::@5 [phi:gen_chargen_sprite::@4->gen_chargen_sprite::@5] b5_from_b4: - // [199] phi (byte*) gen_chargen_sprite::sprite#4 = (byte*) gen_chargen_sprite::sprite#3 [phi:gen_chargen_sprite::@4->gen_chargen_sprite::@5#0] -- register_copy - // [199] phi (byte) gen_chargen_sprite::s_gen_cnt#5 = (byte) gen_chargen_sprite::s_gen_cnt#1 [phi:gen_chargen_sprite::@4->gen_chargen_sprite::@5#1] -- register_copy - // [199] phi (byte) gen_chargen_sprite::s_gen#6 = (byte) gen_chargen_sprite::s_gen#1 [phi:gen_chargen_sprite::@4->gen_chargen_sprite::@5#2] -- register_copy + // [202] phi (byte*) gen_chargen_sprite::sprite#4 = (byte*) gen_chargen_sprite::sprite#3 [phi:gen_chargen_sprite::@4->gen_chargen_sprite::@5#0] -- register_copy + // [202] phi (byte) gen_chargen_sprite::s_gen_cnt#5 = (byte) gen_chargen_sprite::s_gen_cnt#1 [phi:gen_chargen_sprite::@4->gen_chargen_sprite::@5#1] -- register_copy + // [202] phi (byte) gen_chargen_sprite::s_gen#6 = (byte) gen_chargen_sprite::s_gen#1 [phi:gen_chargen_sprite::@4->gen_chargen_sprite::@5#2] -- register_copy jmp b5 // gen_chargen_sprite::@5 b5: - // [200] (byte) gen_chargen_sprite::b#1 ← ++ (byte) gen_chargen_sprite::b#2 -- vbuxx=_inc_vbuxx + // [203] (byte) gen_chargen_sprite::b#1 ← ++ (byte) gen_chargen_sprite::b#2 -- vbuxx=_inc_vbuxx inx - // [201] if((byte) gen_chargen_sprite::b#1!=(byte) 3) goto gen_chargen_sprite::@4 -- vbuxx_neq_vbuc1_then_la1 + // [204] if((byte) gen_chargen_sprite::b#1!=(byte) 3) goto gen_chargen_sprite::@4 -- vbuxx_neq_vbuc1_then_la1 cpx #3 bne b4_from_b5 jmp b7 // gen_chargen_sprite::@7 b7: - // [202] (byte) gen_chargen_sprite::bits#1 ← (byte) gen_chargen_sprite::bits#2 << (byte) 1 -- vbuz1=vbuz1_rol_1 + // [205] (byte) gen_chargen_sprite::bits#1 ← (byte) gen_chargen_sprite::bits#2 << (byte) 1 -- vbuz1=vbuz1_rol_1 asl.z bits - // [203] (byte) gen_chargen_sprite::x#1 ← ++ (byte) gen_chargen_sprite::x#6 -- vbuz1=_inc_vbuz1 + // [206] (byte) gen_chargen_sprite::x#1 ← ++ (byte) gen_chargen_sprite::x#6 -- vbuz1=_inc_vbuz1 inc.z x - // [204] if((byte) gen_chargen_sprite::x#1!=(byte) 8) goto gen_chargen_sprite::@2 -- vbuz1_neq_vbuc1_then_la1 + // [207] if((byte) gen_chargen_sprite::x#1!=(byte) 8) goto gen_chargen_sprite::@2 -- vbuz1_neq_vbuc1_then_la1 lda #8 cmp.z x bne b2_from_b7 jmp b8 // gen_chargen_sprite::@8 b8: - // [205] (byte*) gen_chargen_sprite::sprite#2 ← (byte*) gen_chargen_sprite::sprite#4 + (byte) 6 -- pbuz1=pbuz1_plus_vbuc1 + // [208] (byte*) gen_chargen_sprite::sprite#2 ← (byte*) gen_chargen_sprite::sprite#4 + (byte) 6 -- pbuz1=pbuz1_plus_vbuc1 lda #6 clc adc.z sprite @@ -6729,16 +6869,16 @@ gen_chargen_sprite: { bcc !+ inc.z sprite+1 !: - // [206] (byte) gen_chargen_sprite::y#1 ← ++ (byte) gen_chargen_sprite::y#2 -- vbuz1=_inc_vbuz1 + // [209] (byte) gen_chargen_sprite::y#1 ← ++ (byte) gen_chargen_sprite::y#2 -- vbuz1=_inc_vbuz1 inc.z y - // [207] if((byte) gen_chargen_sprite::y#1!=(byte) 8) goto gen_chargen_sprite::@1 -- vbuz1_neq_vbuc1_then_la1 + // [210] if((byte) gen_chargen_sprite::y#1!=(byte) 8) goto gen_chargen_sprite::@1 -- vbuz1_neq_vbuc1_then_la1 lda #8 cmp.z y bne b1_from_b8 jmp b9 // gen_chargen_sprite::@9 b9: - // [208] *((const byte*) PROCPORT#0) ← (byte) $37 -- _deref_pbuc1=vbuc2 + // [211] *((const byte*) PROCPORT#0) ← (byte) $37 -- _deref_pbuc1=vbuc2 lda #$37 sta PROCPORT // asm { cli } @@ -6746,7 +6886,7 @@ gen_chargen_sprite: { jmp breturn // gen_chargen_sprite::@return breturn: - // [210] return + // [213] return rts } // place_sprites @@ -6757,85 +6897,85 @@ place_sprites: { .label col = $b .label j2 = $a .label j = 8 - // [211] *((const byte*) SPRITES_ENABLE#0) ← (byte) $7f -- _deref_pbuc1=vbuc2 + // [214] *((const byte*) SPRITES_ENABLE#0) ← (byte) $7f -- _deref_pbuc1=vbuc2 lda #$7f sta SPRITES_ENABLE - // [212] *((const byte*) SPRITES_EXPAND_X#0) ← (byte) $7f -- _deref_pbuc1=vbuc2 + // [215] *((const byte*) SPRITES_EXPAND_X#0) ← (byte) $7f -- _deref_pbuc1=vbuc2 lda #$7f sta SPRITES_EXPAND_X - // [213] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte) $7f -- _deref_pbuc1=vbuc2 + // [216] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte) $7f -- _deref_pbuc1=vbuc2 lda #$7f sta SPRITES_EXPAND_Y - // [214] phi from place_sprites to place_sprites::@1 [phi:place_sprites->place_sprites::@1] + // [217] phi from place_sprites to place_sprites::@1 [phi:place_sprites->place_sprites::@1] b1_from_place_sprites: - // [214] phi (byte) place_sprites::col#2 = (byte) 5 [phi:place_sprites->place_sprites::@1#0] -- vbuz1=vbuc1 + // [217] phi (byte) place_sprites::col#2 = (byte) 5 [phi:place_sprites->place_sprites::@1#0] -- vbuz1=vbuc1 lda #5 sta.z col - // [214] phi (byte) place_sprites::j2#3 = (byte) 0 [phi:place_sprites->place_sprites::@1#1] -- vbuz1=vbuc1 + // [217] phi (byte) place_sprites::j2#3 = (byte) 0 [phi:place_sprites->place_sprites::@1#1] -- vbuz1=vbuc1 lda #0 sta.z j2 - // [214] phi (byte) place_sprites::spr_x#2 = (byte) $3c [phi:place_sprites->place_sprites::@1#2] -- vbuz1=vbuc1 + // [217] phi (byte) place_sprites::spr_x#2 = (byte) $3c [phi:place_sprites->place_sprites::@1#2] -- vbuz1=vbuc1 lda #$3c sta.z spr_x - // [214] phi (byte) place_sprites::j#2 = (byte) 0 [phi:place_sprites->place_sprites::@1#3] -- vbuz1=vbuc1 + // [217] phi (byte) place_sprites::j#2 = (byte) 0 [phi:place_sprites->place_sprites::@1#3] -- vbuz1=vbuc1 lda #0 sta.z j - // [214] phi (byte) place_sprites::spr_id#2 = (byte)(word)(const byte*) sprites#0/(byte) $40 [phi:place_sprites->place_sprites::@1#4] -- vbuz1=vbuc1 + // [217] phi (byte) place_sprites::spr_id#2 = (byte)(word)(const byte*) sprites#0/(byte) $40 [phi:place_sprites->place_sprites::@1#4] -- vbuz1=vbuc1 lda #sprites/$40 sta.z spr_id jmp b1 - // [214] phi from place_sprites::@1 to place_sprites::@1 [phi:place_sprites::@1->place_sprites::@1] + // [217] phi from place_sprites::@1 to place_sprites::@1 [phi:place_sprites::@1->place_sprites::@1] b1_from_b1: - // [214] phi (byte) place_sprites::col#2 = (byte) place_sprites::col#1 [phi:place_sprites::@1->place_sprites::@1#0] -- register_copy - // [214] phi (byte) place_sprites::j2#3 = (byte) place_sprites::j2#2 [phi:place_sprites::@1->place_sprites::@1#1] -- register_copy - // [214] phi (byte) place_sprites::spr_x#2 = (byte) place_sprites::spr_x#1 [phi:place_sprites::@1->place_sprites::@1#2] -- register_copy - // [214] phi (byte) place_sprites::j#2 = (byte) place_sprites::j#1 [phi:place_sprites::@1->place_sprites::@1#3] -- register_copy - // [214] phi (byte) place_sprites::spr_id#2 = (byte) place_sprites::spr_id#1 [phi:place_sprites::@1->place_sprites::@1#4] -- register_copy + // [217] phi (byte) place_sprites::col#2 = (byte) place_sprites::col#1 [phi:place_sprites::@1->place_sprites::@1#0] -- register_copy + // [217] phi (byte) place_sprites::j2#3 = (byte) place_sprites::j2#2 [phi:place_sprites::@1->place_sprites::@1#1] -- register_copy + // [217] phi (byte) place_sprites::spr_x#2 = (byte) place_sprites::spr_x#1 [phi:place_sprites::@1->place_sprites::@1#2] -- register_copy + // [217] phi (byte) place_sprites::j#2 = (byte) place_sprites::j#1 [phi:place_sprites::@1->place_sprites::@1#3] -- register_copy + // [217] phi (byte) place_sprites::spr_id#2 = (byte) place_sprites::spr_id#1 [phi:place_sprites::@1->place_sprites::@1#4] -- register_copy jmp b1 // place_sprites::@1 b1: - // [215] *((const byte*) place_sprites::sprites_ptr#0 + (byte) place_sprites::j#2) ← (byte) place_sprites::spr_id#2 -- pbuc1_derefidx_vbuz1=vbuz2 + // [218] *((const byte*) place_sprites::sprites_ptr#0 + (byte) place_sprites::j#2) ← (byte) place_sprites::spr_id#2 -- pbuc1_derefidx_vbuz1=vbuz2 lda.z spr_id ldy.z j sta sprites_ptr,y - // [216] (byte) place_sprites::spr_id#1 ← ++ (byte) place_sprites::spr_id#2 -- vbuz1=_inc_vbuz1 + // [219] (byte) place_sprites::spr_id#1 ← ++ (byte) place_sprites::spr_id#2 -- vbuz1=_inc_vbuz1 inc.z spr_id - // [217] *((const byte*) SPRITES_XPOS#0 + (byte) place_sprites::j2#3) ← (byte) place_sprites::spr_x#2 -- pbuc1_derefidx_vbuz1=vbuz2 + // [220] *((const byte*) SPRITES_XPOS#0 + (byte) place_sprites::j2#3) ← (byte) place_sprites::spr_x#2 -- pbuc1_derefidx_vbuz1=vbuz2 lda.z spr_x ldy.z j2 sta SPRITES_XPOS,y - // [218] *((const byte*) SPRITES_YPOS#0 + (byte) place_sprites::j2#3) ← (byte) $50 -- pbuc1_derefidx_vbuz1=vbuc2 + // [221] *((const byte*) SPRITES_YPOS#0 + (byte) place_sprites::j2#3) ← (byte) $50 -- pbuc1_derefidx_vbuz1=vbuc2 lda #$50 ldy.z j2 sta SPRITES_YPOS,y - // [219] *((const byte*) SPRITES_COLS#0 + (byte) place_sprites::j#2) ← (byte) place_sprites::col#2 -- pbuc1_derefidx_vbuz1=vbuz2 + // [222] *((const byte*) SPRITES_COLS#0 + (byte) place_sprites::j#2) ← (byte) place_sprites::col#2 -- pbuc1_derefidx_vbuz1=vbuz2 lda.z col ldy.z j sta SPRITES_COLS,y - // [220] (byte) place_sprites::spr_x#1 ← (byte) place_sprites::spr_x#2 + (byte) $20 -- vbuz1=vbuz1_plus_vbuc1 + // [223] (byte) place_sprites::spr_x#1 ← (byte) place_sprites::spr_x#2 + (byte) $20 -- vbuz1=vbuz1_plus_vbuc1 lax.z spr_x axs #-[$20] stx.z spr_x - // [221] (byte) place_sprites::col#1 ← (byte) place_sprites::col#2 ^ (byte)(number) 7^(number) 5 -- vbuz1=vbuz1_bxor_vbuc1 + // [224] (byte) place_sprites::col#1 ← (byte) place_sprites::col#2 ^ (byte)(number) 7^(number) 5 -- vbuz1=vbuz1_bxor_vbuc1 lda #7^5 eor.z col sta.z col - // [222] (byte) place_sprites::j2#1 ← ++ (byte) place_sprites::j2#3 -- vbuxx=_inc_vbuz1 + // [225] (byte) place_sprites::j2#1 ← ++ (byte) place_sprites::j2#3 -- vbuxx=_inc_vbuz1 ldx.z j2 inx - // [223] (byte) place_sprites::j2#2 ← ++ (byte) place_sprites::j2#1 -- vbuz1=_inc_vbuxx + // [226] (byte) place_sprites::j2#2 ← ++ (byte) place_sprites::j2#1 -- vbuz1=_inc_vbuxx inx stx.z j2 - // [224] (byte) place_sprites::j#1 ← ++ (byte) place_sprites::j#2 -- vbuz1=_inc_vbuz1 + // [227] (byte) place_sprites::j#1 ← ++ (byte) place_sprites::j#2 -- vbuz1=_inc_vbuz1 inc.z j - // [225] if((byte) place_sprites::j#1!=(byte) 7) goto place_sprites::@1 -- vbuz1_neq_vbuc1_then_la1 + // [228] if((byte) place_sprites::j#1!=(byte) 7) goto place_sprites::@1 -- vbuz1_neq_vbuc1_then_la1 lda #7 cmp.z j bne b1_from_b1 jmp breturn // place_sprites::@return breturn: - // [226] return + // [229] return rts } // File Data @@ -6896,16 +7036,20 @@ Removing instruction jmp b2 Removing instruction jmp b1 Removing instruction jmp breturn Removing instruction jmp breturn +Removing instruction jmp prepareMEM1 +Removing instruction jmp b1 +Removing instruction jmp breturn +Removing instruction jmp prepareMEM1 Removing instruction jmp b1 Removing instruction jmp breturn Removing instruction jmp breturn +Removing instruction jmp prepareMEM1 Removing instruction jmp b1 Removing instruction jmp breturn -Removing instruction jmp breturn -Removing instruction jmp b1 -Removing instruction jmp breturn +Removing instruction jmp prepareMEM1 Removing instruction jmp b1 Removing instruction jmp breturn +Removing instruction jmp prepareMEM1 Removing instruction jmp b1 Removing instruction jmp breturn Removing instruction jmp breturn @@ -6933,6 +7077,7 @@ Removing instruction lda.z x+1 Replacing instruction lda.z xidx with TXA Replacing instruction lda.z yidx with TXA Removing instruction lda #0 +Replacing instruction lda memLo with TYA Replacing instruction ldy #0 with TAY Removing instruction lda #0 Removing instruction lda.z s_gen @@ -7086,21 +7231,20 @@ Removing instruction b2: Removing instruction b1_from_b2: Removing instruction breturn: Removing instruction breturn: -Removing instruction prepareMEM_from_addMEMtoFAC: +Removing instruction prepareMEM1: +Removing instruction b1: +Removing instruction breturn: +Removing instruction prepareMEM1: Removing instruction b1: Removing instruction breturn: Removing instruction breturn: -Removing instruction prepareMEM_from_mulFACbyMEM: +Removing instruction prepareMEM1: Removing instruction b1: Removing instruction breturn: -Removing instruction breturn: -Removing instruction prepareMEM_from_divMEMbyFAC: +Removing instruction prepareMEM1: Removing instruction b1: Removing instruction breturn: -Removing instruction prepareMEM_from_setFAC: -Removing instruction b1: -Removing instruction breturn: -Removing instruction prepareMEM_from_setMEMtoFAC: +Removing instruction prepareMEM1: Removing instruction b1: Removing instruction breturn: Removing instruction breturn: @@ -7140,6 +7284,8 @@ Removing instruction jmp b4 Removing instruction jmp b5 Removing instruction jmp b1 Succesful ASM optimization Pass5NextJumpElimination +Removing instruction lda memHi +Replacing instruction ldy memHi with TAY Removing instruction lda.z s_gen Succesful ASM optimization Pass5UnnecesaryLoadElimination Removing instruction bbegin: @@ -7183,6 +7329,10 @@ FINAL SYMBOL TABLE (label) addMEMtoFAC::@1 (label) addMEMtoFAC::@return (byte*) addMEMtoFAC::mem +(label) addMEMtoFAC::prepareMEM1 +(byte~) addMEMtoFAC::prepareMEM1_$0 +(byte~) addMEMtoFAC::prepareMEM1_$1 +(word) addMEMtoFAC::prepareMEM1_mem (void()) anim() (byte~) anim::$6 $6 zp ZP_BYTE:10 101.0 (byte~) anim::$7 reg byte a 202.0 @@ -7226,13 +7376,19 @@ FINAL SYMBOL TABLE (label) clear_screen::@2 (label) clear_screen::@return (byte*) clear_screen::sc -(byte*) clear_screen::sc#1 sc zp ZP_WORD:19 16.5 -(byte*) clear_screen::sc#4 sc zp ZP_WORD:19 16.5 +(byte*) clear_screen::sc#1 sc zp ZP_WORD:15 16.5 +(byte*) clear_screen::sc#4 sc zp ZP_WORD:15 16.5 (void()) divMEMbyFAC((byte*) divMEMbyFAC::mem) (label) divMEMbyFAC::@1 (label) divMEMbyFAC::@return (byte*) divMEMbyFAC::mem -(byte*) divMEMbyFAC::mem#2 mem zp ZP_WORD:15 2.0 +(byte*) divMEMbyFAC::mem#2 mem zp ZP_WORD:19 +(label) divMEMbyFAC::prepareMEM1 +(byte~) divMEMbyFAC::prepareMEM1_$0 +(byte~) divMEMbyFAC::prepareMEM1_$0#0 reg byte a 4.0 +(byte~) divMEMbyFAC::prepareMEM1_$1 +(byte~) divMEMbyFAC::prepareMEM1_$1#0 reg byte a 4.0 +(word) divMEMbyFAC::prepareMEM1_mem (void()) gen_chargen_sprite((byte) gen_chargen_sprite::ch , (byte*) gen_chargen_sprite::sprite) (word~) gen_chargen_sprite::$0 $0 zp ZP_WORD:19 4.0 (word~) gen_chargen_sprite::$1 $1 zp ZP_WORD:19 4.0 @@ -7287,7 +7443,7 @@ FINAL SYMBOL TABLE (byte) gen_chargen_sprite::y#1 y zp ZP_BYTE:4 151.5 (byte) gen_chargen_sprite::y#2 y zp ZP_BYTE:4 13.173913043478262 (void()) gen_sintab((byte*) gen_sintab::sintab , (byte) gen_sintab::length , (byte) gen_sintab::min , (byte) gen_sintab::max) -(word~) gen_sintab::$24 $24 zp ZP_WORD:15 11.0 +(word~) gen_sintab::$24 $24 zp ZP_WORD:19 11.0 (byte~) gen_sintab::$25 reg byte a 22.0 (label) gen_sintab::@1 (label) gen_sintab::@10 @@ -7330,7 +7486,7 @@ FINAL SYMBOL TABLE (byte) gen_sintab::min (byte) gen_sintab::min#2 min zp ZP_BYTE:6 (byte*) gen_sintab::sintab -(byte*) gen_sintab::sintab#13 sintab zp ZP_WORD:19 0.22448979591836735 +(byte*) gen_sintab::sintab#13 sintab zp ZP_WORD:15 0.22448979591836735 (void()) gen_sprites() (label) gen_sprites::@1 (label) gen_sprites::@2 @@ -7346,8 +7502,8 @@ FINAL SYMBOL TABLE (word()) getFAC() (label) getFAC::@return (word) getFAC::return -(word) getFAC::return#0 return zp ZP_WORD:15 4.333333333333333 -(word) getFAC::return#2 return zp ZP_WORD:15 22.0 +(word) getFAC::return#0 return zp ZP_WORD:19 4.333333333333333 +(word) getFAC::return#2 return zp ZP_WORD:19 22.0 (word) getFAC::w (void()) init() (label) init::@1 @@ -7373,7 +7529,13 @@ FINAL SYMBOL TABLE (label) mulFACbyMEM::@1 (label) mulFACbyMEM::@return (byte*) mulFACbyMEM::mem -(byte*) mulFACbyMEM::mem#2 mem zp ZP_WORD:15 2.0 +(byte*) mulFACbyMEM::mem#2 mem zp ZP_WORD:19 +(label) mulFACbyMEM::prepareMEM1 +(byte~) mulFACbyMEM::prepareMEM1_$0 +(byte~) mulFACbyMEM::prepareMEM1_$0#0 reg byte a 4.0 +(byte~) mulFACbyMEM::prepareMEM1_$1 +(byte~) mulFACbyMEM::prepareMEM1_$1#0 reg byte a 4.0 +(word) mulFACbyMEM::prepareMEM1_mem (void()) place_sprites() (label) place_sprites::@1 (label) place_sprites::@return @@ -7395,16 +7557,6 @@ FINAL SYMBOL TABLE (byte) place_sprites::spr_x#2 spr_x zp ZP_BYTE:9 5.5 (byte*) place_sprites::sprites_ptr (const byte*) place_sprites::sprites_ptr#0 sprites_ptr = (const byte*) SCREEN#0+(word) $3f8 -(void()) prepareMEM((byte*) prepareMEM::mem) -(byte~) prepareMEM::$0 reg byte a 4.0 -(byte~) prepareMEM::$1 reg byte a 4.0 -(label) prepareMEM::@return -(byte*) prepareMEM::mem -(byte*) prepareMEM::mem#0 mem zp ZP_WORD:15 4.0 -(byte*) prepareMEM::mem#1 mem zp ZP_WORD:15 4.0 -(byte*) prepareMEM::mem#3 mem zp ZP_WORD:15 4.0 -(byte*) prepareMEM::mem#4 mem zp ZP_WORD:15 4.0 -(byte*) prepareMEM::mem#5 mem zp ZP_WORD:15 3.9999999999999996 (byte*) progress_cursor (byte*) progress_cursor#10 progress_cursor zp ZP_WORD:2 4.0 (byte*) progress_cursor#11 progress_cursor zp ZP_WORD:2 3.4 @@ -7428,17 +7580,29 @@ FINAL SYMBOL TABLE (void()) setFAC((word) setFAC::w) (label) setFAC::@1 (label) setFAC::@return +(label) setFAC::prepareMEM1 +(byte~) setFAC::prepareMEM1_$0 +(byte~) setFAC::prepareMEM1_$0#0 reg byte a 4.0 +(byte~) setFAC::prepareMEM1_$1 +(byte~) setFAC::prepareMEM1_$1#0 reg byte a 4.0 +(word) setFAC::prepareMEM1_mem +(word) setFAC::prepareMEM1_mem#0 prepareMEM1_mem zp ZP_WORD:19 9.999999999999998 (word) setFAC::w -(word) setFAC::w#0 w zp ZP_WORD:15 4.0 -(word) setFAC::w#1 w zp ZP_WORD:15 4.0 -(word) setFAC::w#3 w zp ZP_WORD:15 22.0 -(word) setFAC::w#4 w zp ZP_WORD:15 22.0 -(word) setFAC::w#5 w zp ZP_WORD:15 26.0 +(word) setFAC::w#0 w zp ZP_WORD:19 4.0 +(word) setFAC::w#1 w zp ZP_WORD:19 4.0 +(word) setFAC::w#3 w zp ZP_WORD:19 22.0 +(word) setFAC::w#4 w zp ZP_WORD:19 22.0 (void()) setMEMtoFAC((byte*) setMEMtoFAC::mem) (label) setMEMtoFAC::@1 (label) setMEMtoFAC::@return (byte*) setMEMtoFAC::mem -(byte*) setMEMtoFAC::mem#5 mem zp ZP_WORD:15 2.0 +(byte*) setMEMtoFAC::mem#5 mem zp ZP_WORD:19 +(label) setMEMtoFAC::prepareMEM1 +(byte~) setMEMtoFAC::prepareMEM1_$0 +(byte~) setMEMtoFAC::prepareMEM1_$0#0 reg byte a 4.0 +(byte~) setMEMtoFAC::prepareMEM1_$1 +(byte~) setMEMtoFAC::prepareMEM1_$1#0 reg byte a 4.0 +(word) setMEMtoFAC::prepareMEM1_mem (void()) sinFAC() (label) sinFAC::@return (byte) sin_idx_x @@ -7474,21 +7638,27 @@ zp ZP_BYTE:8 [ place_sprites::j#2 place_sprites::j#1 gen_chargen_sprite::c#3 gen zp ZP_BYTE:9 [ place_sprites::spr_x#2 place_sprites::spr_x#1 gen_chargen_sprite::s_gen#3 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen#6 gen_chargen_sprite::s_gen#1 gen_sintab::i#10 gen_sintab::i#1 anim::xidx#3 anim::xidx#0 anim::xidx#5 anim::xidx#1 anim::xidx#2 ] zp ZP_BYTE:10 [ place_sprites::j2#3 place_sprites::j2#2 progress_idx#14 progress_idx#12 progress_idx#10 anim::x_msb#2 anim::x_msb#1 anim::$6 ] zp ZP_BYTE:11 [ place_sprites::col#2 place_sprites::col#1 gen_sprites::i#2 gen_sprites::i#1 anim::j2#2 anim::j2#1 ] +zp ZP_WORD:15 [ anim::x#0 gen_chargen_sprite::sprite#3 gen_chargen_sprite::sprite#10 gen_chargen_sprite::sprite#11 gen_chargen_sprite::sprite#0 gen_chargen_sprite::sprite#2 gen_chargen_sprite::sprite#4 gen_chargen_sprite::sprite#1 gen_sintab::sintab#13 clear_screen::sc#4 clear_screen::sc#1 ] reg byte a [ anim::$7 ] reg byte a [ anim::$9 ] -zp ZP_WORD:15 [ getFAC::return#2 gen_sintab::$24 getFAC::return#0 anim::x#0 gen_chargen_sprite::sprite#3 gen_chargen_sprite::sprite#10 gen_chargen_sprite::sprite#11 gen_chargen_sprite::sprite#0 gen_chargen_sprite::sprite#2 gen_chargen_sprite::sprite#4 gen_chargen_sprite::sprite#1 prepareMEM::mem#5 prepareMEM::mem#3 prepareMEM::mem#4 prepareMEM::mem#0 prepareMEM::mem#1 mulFACbyMEM::mem#2 divMEMbyFAC::mem#2 setFAC::w#5 setFAC::w#0 setFAC::w#3 setFAC::w#4 setFAC::w#1 setMEMtoFAC::mem#5 ] reg byte a [ gen_sintab::$25 ] -reg byte a [ prepareMEM::$0 ] -reg byte a [ prepareMEM::$1 ] +reg byte a [ mulFACbyMEM::prepareMEM1_$0#0 ] +reg byte a [ mulFACbyMEM::prepareMEM1_$1#0 ] +reg byte a [ divMEMbyFAC::prepareMEM1_$0#0 ] +reg byte a [ divMEMbyFAC::prepareMEM1_$1#0 ] +reg byte a [ setFAC::prepareMEM1_$0#0 ] +reg byte a [ setFAC::prepareMEM1_$1#0 ] +reg byte a [ setMEMtoFAC::prepareMEM1_$0#0 ] +reg byte a [ setMEMtoFAC::prepareMEM1_$1#0 ] reg byte x [ gen_chargen_sprite::ch#0 ] -zp ZP_WORD:19 [ gen_chargen_sprite::$0 gen_chargen_sprite::$1 gen_chargen_sprite::chargen#0 gen_sintab::sintab#13 clear_screen::sc#4 clear_screen::sc#1 ] +zp ZP_WORD:19 [ gen_chargen_sprite::$0 gen_chargen_sprite::$1 gen_chargen_sprite::chargen#0 getFAC::return#2 gen_sintab::$24 getFAC::return#0 setMEMtoFAC::mem#5 setFAC::prepareMEM1_mem#0 setFAC::w#0 setFAC::w#3 setFAC::w#4 setFAC::w#1 divMEMbyFAC::mem#2 mulFACbyMEM::mem#2 ] reg byte a [ gen_chargen_sprite::$3 ] reg byte a [ gen_chargen_sprite::$6 ] reg byte x [ place_sprites::j2#1 ] FINAL ASSEMBLER -Score: 769648 +Score: 769660 // File Comments // Upstart @@ -7764,14 +7934,14 @@ init: { // init::@3 // gen_sprites() // [53] call gen_sprites - // [169] phi from init::@3 to gen_sprites [phi:init::@3->gen_sprites] + // [172] phi from init::@3 to gen_sprites [phi:init::@3->gen_sprites] jsr gen_sprites // [54] phi from init::@3 to init::@4 [phi:init::@3->init::@4] // init::@4 // progress_init(SCREEN) // [55] call progress_init - // [167] phi from init::@4 to progress_init [phi:init::@4->progress_init] - // [167] phi (byte*) progress_init::line#2 = (const byte*) SCREEN#0 [phi:init::@4->progress_init#0] -- pbuz1=pbuc1 + // [170] phi from init::@4 to progress_init [phi:init::@4->progress_init] + // [170] phi (byte*) progress_init::line#2 = (const byte*) SCREEN#0 [phi:init::@4->progress_init#0] -- pbuz1=pbuc1 lda #SCREEN @@ -7800,8 +7970,8 @@ init: { // init::@6 // progress_init(SCREEN+40) // [59] call progress_init - // [167] phi from init::@6 to progress_init [phi:init::@6->progress_init] - // [167] phi (byte*) progress_init::line#2 = (const byte*) SCREEN#0+(byte) $28 [phi:init::@6->progress_init#0] -- pbuz1=pbuc1 + // [170] phi from init::@6 to progress_init [phi:init::@6->progress_init] + // [170] phi (byte*) progress_init::line#2 = (const byte*) SCREEN#0+(byte) $28 [phi:init::@6->progress_init#0] -- pbuz1=pbuc1 lda #SCREEN+$28 @@ -7839,7 +8009,7 @@ init: { } // clear_screen clear_screen: { - .label sc = $13 + .label sc = $f // [66] phi from clear_screen to clear_screen::@2 [phi:clear_screen->clear_screen::@2] // [66] phi (byte*) clear_screen::sc#4 = (const byte*) SCREEN#0 [phi:clear_screen->clear_screen::@2#0] -- pbuz1=pbuc1 lda #setFAC] - // [153] phi (word) setFAC::w#5 = (word) setFAC::w#0 [phi:gen_sintab->setFAC#0] -- register_copy + // [152] phi from gen_sintab to setFAC [phi:gen_sintab->setFAC] + // [152] phi (word) setFAC::prepareMEM1_mem#0 = (word) setFAC::w#0 [phi:gen_sintab->setFAC#0] -- register_copy jsr setFAC // [74] phi from gen_sintab to gen_sintab::@3 [phi:gen_sintab->gen_sintab::@3] // gen_sintab::@3 @@ -7914,15 +8084,15 @@ gen_sintab: { lda #0 sta.z setFAC.w+1 // [77] call setFAC - // [153] phi from gen_sintab::@4 to setFAC [phi:gen_sintab::@4->setFAC] - // [153] phi (word) setFAC::w#5 = (word) setFAC::w#1 [phi:gen_sintab::@4->setFAC#0] -- register_copy + // [152] phi from gen_sintab::@4 to setFAC [phi:gen_sintab::@4->setFAC] + // [152] phi (word) setFAC::prepareMEM1_mem#0 = (word) setFAC::w#1 [phi:gen_sintab::@4->setFAC#0] -- register_copy jsr setFAC // [78] phi from gen_sintab::@4 to gen_sintab::@5 [phi:gen_sintab::@4->gen_sintab::@5] // gen_sintab::@5 // setMEMtoFAC(f_min) // [79] call setMEMtoFAC - // [158] phi from gen_sintab::@5 to setMEMtoFAC [phi:gen_sintab::@5->setMEMtoFAC] - // [158] phi (byte*) setMEMtoFAC::mem#5 = (const byte[]) gen_sintab::f_min#0 [phi:gen_sintab::@5->setMEMtoFAC#0] -- pbuz1=pbuc1 + // [159] phi from gen_sintab::@5 to setMEMtoFAC [phi:gen_sintab::@5->setMEMtoFAC] + // [159] phi (byte*) setMEMtoFAC::mem#5 = (const byte[]) gen_sintab::f_min#0 [phi:gen_sintab::@5->setMEMtoFAC#0] -- pbuz1=pbuc1 lda #f_min @@ -7937,8 +8107,8 @@ gen_sintab: { // gen_sintab::@7 // setMEMtoFAC(f_amp) // [83] call setMEMtoFAC - // [158] phi from gen_sintab::@7 to setMEMtoFAC [phi:gen_sintab::@7->setMEMtoFAC] - // [158] phi (byte*) setMEMtoFAC::mem#5 = (const byte[]) gen_sintab::f_amp#0 [phi:gen_sintab::@7->setMEMtoFAC#0] -- pbuz1=pbuc1 + // [159] phi from gen_sintab::@7 to setMEMtoFAC [phi:gen_sintab::@7->setMEMtoFAC] + // [159] phi (byte*) setMEMtoFAC::mem#5 = (const byte[]) gen_sintab::f_amp#0 [phi:gen_sintab::@7->setMEMtoFAC#0] -- pbuz1=pbuc1 lda #f_amp @@ -7948,19 +8118,19 @@ gen_sintab: { // gen_sintab::@8 // setFAC(2) // [85] call setFAC - // [153] phi from gen_sintab::@8 to setFAC [phi:gen_sintab::@8->setFAC] - // [153] phi (word) setFAC::w#5 = (byte) 2 [phi:gen_sintab::@8->setFAC#0] -- vwuz1=vbuc1 + // [152] phi from gen_sintab::@8 to setFAC [phi:gen_sintab::@8->setFAC] + // [152] phi (word) setFAC::prepareMEM1_mem#0 = (byte) 2 [phi:gen_sintab::@8->setFAC#0] -- vwuz1=vbuc1 lda #<2 - sta.z setFAC.w + sta.z setFAC.prepareMEM1_mem lda #>2 - sta.z setFAC.w+1 + sta.z setFAC.prepareMEM1_mem+1 jsr setFAC // [86] phi from gen_sintab::@8 to gen_sintab::@9 [phi:gen_sintab::@8->gen_sintab::@9] // gen_sintab::@9 // divMEMbyFAC(f_amp) // [87] call divMEMbyFAC - // [148] phi from gen_sintab::@9 to divMEMbyFAC [phi:gen_sintab::@9->divMEMbyFAC] - // [148] phi (byte*) divMEMbyFAC::mem#2 = (const byte[]) gen_sintab::f_amp#0 [phi:gen_sintab::@9->divMEMbyFAC#0] -- pbuz1=pbuc1 + // [145] phi from gen_sintab::@9 to divMEMbyFAC [phi:gen_sintab::@9->divMEMbyFAC] + // [145] phi (byte*) divMEMbyFAC::mem#2 = (const byte[]) gen_sintab::f_amp#0 [phi:gen_sintab::@9->divMEMbyFAC#0] -- pbuz1=pbuc1 lda #f_amp @@ -7970,8 +8140,8 @@ gen_sintab: { // gen_sintab::@10 // setMEMtoFAC(f_amp) // [89] call setMEMtoFAC - // [158] phi from gen_sintab::@10 to setMEMtoFAC [phi:gen_sintab::@10->setMEMtoFAC] - // [158] phi (byte*) setMEMtoFAC::mem#5 = (const byte[]) gen_sintab::f_amp#0 [phi:gen_sintab::@10->setMEMtoFAC#0] -- pbuz1=pbuc1 + // [159] phi from gen_sintab::@10 to setMEMtoFAC [phi:gen_sintab::@10->setMEMtoFAC] + // [159] phi (byte*) setMEMtoFAC::mem#5 = (const byte[]) gen_sintab::f_amp#0 [phi:gen_sintab::@10->setMEMtoFAC#0] -- pbuz1=pbuc1 lda #f_amp @@ -7987,8 +8157,8 @@ gen_sintab: { // gen_sintab::@12 // setMEMtoFAC(f_min) // [93] call setMEMtoFAC - // [158] phi from gen_sintab::@12 to setMEMtoFAC [phi:gen_sintab::@12->setMEMtoFAC] - // [158] phi (byte*) setMEMtoFAC::mem#5 = (const byte[]) gen_sintab::f_min#0 [phi:gen_sintab::@12->setMEMtoFAC#0] -- pbuz1=pbuc1 + // [159] phi from gen_sintab::@12 to setMEMtoFAC [phi:gen_sintab::@12->setMEMtoFAC] + // [159] phi (byte*) setMEMtoFAC::mem#5 = (const byte[]) gen_sintab::f_min#0 [phi:gen_sintab::@12->setMEMtoFAC#0] -- pbuz1=pbuc1 lda #f_min @@ -8022,15 +8192,15 @@ gen_sintab: { lda #0 sta.z setFAC.w+1 // [98] call setFAC - // [153] phi from gen_sintab::@2 to setFAC [phi:gen_sintab::@2->setFAC] - // [153] phi (word) setFAC::w#5 = (word) setFAC::w#3 [phi:gen_sintab::@2->setFAC#0] -- register_copy + // [152] phi from gen_sintab::@2 to setFAC [phi:gen_sintab::@2->setFAC] + // [152] phi (word) setFAC::prepareMEM1_mem#0 = (word) setFAC::w#3 [phi:gen_sintab::@2->setFAC#0] -- register_copy jsr setFAC // [99] phi from gen_sintab::@2 to gen_sintab::@13 [phi:gen_sintab::@2->gen_sintab::@13] // gen_sintab::@13 // mulFACbyMEM(f_2pi) // [100] call mulFACbyMEM - // [141] phi from gen_sintab::@13 to mulFACbyMEM [phi:gen_sintab::@13->mulFACbyMEM] - // [141] phi (byte*) mulFACbyMEM::mem#2 = (const byte*) gen_sintab::f_2pi#0 [phi:gen_sintab::@13->mulFACbyMEM#0] -- pbuz1=pbuc1 + // [136] phi from gen_sintab::@13 to mulFACbyMEM [phi:gen_sintab::@13->mulFACbyMEM] + // [136] phi (byte*) mulFACbyMEM::mem#2 = (const byte*) gen_sintab::f_2pi#0 [phi:gen_sintab::@13->mulFACbyMEM#0] -- pbuz1=pbuc1 lda #f_2pi @@ -8040,8 +8210,8 @@ gen_sintab: { // gen_sintab::@14 // setMEMtoFAC(f_i) // [102] call setMEMtoFAC - // [158] phi from gen_sintab::@14 to setMEMtoFAC [phi:gen_sintab::@14->setMEMtoFAC] - // [158] phi (byte*) setMEMtoFAC::mem#5 = (const byte[]) gen_sintab::f_i#0 [phi:gen_sintab::@14->setMEMtoFAC#0] -- pbuz1=pbuc1 + // [159] phi from gen_sintab::@14 to setMEMtoFAC [phi:gen_sintab::@14->setMEMtoFAC] + // [159] phi (byte*) setMEMtoFAC::mem#5 = (const byte[]) gen_sintab::f_i#0 [phi:gen_sintab::@14->setMEMtoFAC#0] -- pbuz1=pbuc1 lda #f_i @@ -8055,15 +8225,15 @@ gen_sintab: { lda #0 sta.z setFAC.w+1 // [104] call setFAC - // [153] phi from gen_sintab::@15 to setFAC [phi:gen_sintab::@15->setFAC] - // [153] phi (word) setFAC::w#5 = (word) setFAC::w#4 [phi:gen_sintab::@15->setFAC#0] -- register_copy + // [152] phi from gen_sintab::@15 to setFAC [phi:gen_sintab::@15->setFAC] + // [152] phi (word) setFAC::prepareMEM1_mem#0 = (word) setFAC::w#4 [phi:gen_sintab::@15->setFAC#0] -- register_copy jsr setFAC // [105] phi from gen_sintab::@15 to gen_sintab::@16 [phi:gen_sintab::@15->gen_sintab::@16] // gen_sintab::@16 // divMEMbyFAC(f_i) // [106] call divMEMbyFAC - // [148] phi from gen_sintab::@16 to divMEMbyFAC [phi:gen_sintab::@16->divMEMbyFAC] - // [148] phi (byte*) divMEMbyFAC::mem#2 = (const byte[]) gen_sintab::f_i#0 [phi:gen_sintab::@16->divMEMbyFAC#0] -- pbuz1=pbuc1 + // [145] phi from gen_sintab::@16 to divMEMbyFAC [phi:gen_sintab::@16->divMEMbyFAC] + // [145] phi (byte*) divMEMbyFAC::mem#2 = (const byte[]) gen_sintab::f_i#0 [phi:gen_sintab::@16->divMEMbyFAC#0] -- pbuz1=pbuc1 lda #f_i @@ -8078,8 +8248,8 @@ gen_sintab: { // gen_sintab::@18 // mulFACbyMEM(f_amp) // [110] call mulFACbyMEM - // [141] phi from gen_sintab::@18 to mulFACbyMEM [phi:gen_sintab::@18->mulFACbyMEM] - // [141] phi (byte*) mulFACbyMEM::mem#2 = (const byte[]) gen_sintab::f_amp#0 [phi:gen_sintab::@18->mulFACbyMEM#0] -- pbuz1=pbuc1 + // [136] phi from gen_sintab::@18 to mulFACbyMEM [phi:gen_sintab::@18->mulFACbyMEM] + // [136] phi (byte*) mulFACbyMEM::mem#2 = (const byte[]) gen_sintab::f_amp#0 [phi:gen_sintab::@18->mulFACbyMEM#0] -- pbuz1=pbuc1 lda #f_amp @@ -8176,16 +8346,16 @@ progress_inc: { // Get the value of the FAC (floating point accumulator) as an integer 16bit word // Destroys the value in the FAC in the process getFAC: { - .label return = $f + .label return = $13 // asm - // asm { jsr$b1aa sty$fe sta$ff } + // asm { jsr$b1aa stymemLo stamemHi } // Load FAC (floating point accumulator) integer part into word register Y,A jsr $b1aa - sty.z $fe - sta.z $ff - // w = { *memHi, *memLo} + sty memLo + sta memHi + // w = { *memHi, *memLo } // [129] (word) getFAC::return#0 ← *((const byte*) memHi#0) w= *((const byte*) memLo#0) -- vwuz1=_deref_pbuc1_word__deref_pbuc2 - lda memLo + tya sta.z return lda memHi sta.z return+1 @@ -8199,70 +8369,55 @@ getFAC: { // Set FAC to MEM (float saved in memory) plus FAC (float accumulator) // Reads 5 bytes from memory addMEMtoFAC: { - // prepareMEM(mem) - // [132] call prepareMEM - // [135] phi from addMEMtoFAC to prepareMEM [phi:addMEMtoFAC->prepareMEM] - // [135] phi (byte*) prepareMEM::mem#5 = (const byte[]) gen_sintab::f_min#0 [phi:addMEMtoFAC->prepareMEM#0] -- pbuz1=pbuc1 + // addMEMtoFAC::prepareMEM1 + // *memLo = mem + // [133] *((const byte*) memHi#0) ← >(word)(const byte[]) gen_sintab::f_min#0 -- _deref_pbuc1=vbuc2 lda #>gen_sintab.f_min - sta.z prepareMEM.mem+1 - jsr prepareMEM + sta memHi // addMEMtoFAC::@1 // asm - // asm { lda$fe ldy$ff jsr$b867 } - lda.z $fe - ldy.z $ff + // asm { ldamemLo ldymemHi jsr$b867 } + lda memLo + ldy memHi jsr $b867 // addMEMtoFAC::@return // } - // [134] return - rts -} - // prepareMEM -// Prepare MEM pointers for operations using MEM -// prepareMEM(byte* zeropage($f) mem) -prepareMEM: { - .label mem = $f - // mem - // [138] (byte~) prepareMEM::$1 ← > (byte*) prepareMEM::mem#5 -- vbuaa=_hi_pbuz1 - lda.z mem+1 - // *memHi = >mem - // [139] *((const byte*) memHi#0) ← (byte~) prepareMEM::$1 -- _deref_pbuc1=vbuaa - sta memHi - // prepareMEM::@return - // } - // [140] return + // [135] return rts } // mulFACbyMEM // FAC = MEM*FAC // Set FAC to MEM (float saved in memory) multiplied by FAC (float accumulator) // Reads 5 bytes from memory -// mulFACbyMEM(byte* zeropage($f) mem) +// mulFACbyMEM(byte* zeropage($13) mem) mulFACbyMEM: { - .label mem = $f - // prepareMEM(mem) - // [142] (byte*) prepareMEM::mem#4 ← (byte*) mulFACbyMEM::mem#2 - // [143] call prepareMEM - // [135] phi from mulFACbyMEM to prepareMEM [phi:mulFACbyMEM->prepareMEM] - // [135] phi (byte*) prepareMEM::mem#5 = (byte*) prepareMEM::mem#4 [phi:mulFACbyMEM->prepareMEM#0] -- register_copy - jsr prepareMEM + .label mem = $13 + // mulFACbyMEM::prepareMEM1 + // mem + // [139] (byte~) mulFACbyMEM::prepareMEM1_$1#0 ← > (word)(byte*) mulFACbyMEM::mem#2 -- vbuaa=_hi_vwuz1 + lda.z mem+1 + // *memHi = >mem + // [140] *((const byte*) memHi#0) ← (byte~) mulFACbyMEM::prepareMEM1_$1#0 -- _deref_pbuc1=vbuaa + sta memHi // mulFACbyMEM::@1 // asm - // asm { lda$fe ldy$ff jsr$ba28 } - lda.z $fe - ldy.z $ff + // asm { ldamemLo ldymemHi jsr$ba28 } + lda memLo + ldy memHi jsr $ba28 // mulFACbyMEM::@return // } - // [145] return + // [142] return rts } // sinFAC @@ -8275,79 +8430,100 @@ sinFAC: { jsr $e26b // sinFAC::@return // } - // [147] return + // [144] return rts } // divMEMbyFAC // FAC = MEM/FAC // Set FAC to MEM (float saved in memory) divided by FAC (float accumulator) // Reads 5 bytes from memory -// divMEMbyFAC(byte* zeropage($f) mem) +// divMEMbyFAC(byte* zeropage($13) mem) divMEMbyFAC: { - .label mem = $f - // prepareMEM(mem) - // [149] (byte*) prepareMEM::mem#3 ← (byte*) divMEMbyFAC::mem#2 - // [150] call prepareMEM - // [135] phi from divMEMbyFAC to prepareMEM [phi:divMEMbyFAC->prepareMEM] - // [135] phi (byte*) prepareMEM::mem#5 = (byte*) prepareMEM::mem#3 [phi:divMEMbyFAC->prepareMEM#0] -- register_copy - jsr prepareMEM + .label mem = $13 + // divMEMbyFAC::prepareMEM1 + // mem + // [148] (byte~) divMEMbyFAC::prepareMEM1_$1#0 ← > (word)(byte*) divMEMbyFAC::mem#2 -- vbuaa=_hi_vwuz1 + lda.z mem+1 + // *memHi = >mem + // [149] *((const byte*) memHi#0) ← (byte~) divMEMbyFAC::prepareMEM1_$1#0 -- _deref_pbuc1=vbuaa + sta memHi // divMEMbyFAC::@1 // asm - // asm { lda$fe ldy$ff jsr$bb0f } - lda.z $fe - ldy.z $ff + // asm { ldamemLo ldymemHi jsr$bb0f } + lda memLo + ldy memHi jsr $bb0f // divMEMbyFAC::@return // } - // [152] return + // [151] return rts } // setFAC // FAC = word // Set the FAC (floating point accumulator) to the integer value of a 16bit word -// setFAC(word zeropage($f) w) +// setFAC(word zeropage($13) w) setFAC: { - .label w = $f - // prepareMEM((byte*)w) - // [154] (byte*) prepareMEM::mem#0 ← (byte*)(word) setFAC::w#5 - // [155] call prepareMEM - // [135] phi from setFAC to prepareMEM [phi:setFAC->prepareMEM] - // [135] phi (byte*) prepareMEM::mem#5 = (byte*) prepareMEM::mem#0 [phi:setFAC->prepareMEM#0] -- register_copy - jsr prepareMEM + .label prepareMEM1_mem = $13 + .label w = $13 + // setFAC::prepareMEM1 + // mem + // [155] (byte~) setFAC::prepareMEM1_$1#0 ← > (word) setFAC::prepareMEM1_mem#0 -- vbuaa=_hi_vwuz1 + lda.z prepareMEM1_mem+1 + // *memHi = >mem + // [156] *((const byte*) memHi#0) ← (byte~) setFAC::prepareMEM1_$1#0 -- _deref_pbuc1=vbuaa + sta memHi // setFAC::@1 // asm - // asm { ldy$fe lda$ff jsr$b391 } + // asm { ldymemLo ldamemHi jsr$b391 } // Load word register Y,A into FAC (floating point accumulator) - ldy.z $fe - lda.z $ff + ldy memLo jsr $b391 // setFAC::@return // } - // [157] return + // [158] return rts } // setMEMtoFAC // MEM = FAC // Stores the value of the FAC to memory // Stores 5 bytes (means it is necessary to allocate 5 bytes to avoid clobbering other data using eg. byte[] mem = {0, 0, 0, 0, 0};) -// setMEMtoFAC(byte* zeropage($f) mem) +// setMEMtoFAC(byte* zeropage($13) mem) setMEMtoFAC: { - .label mem = $f - // prepareMEM(mem) - // [159] (byte*) prepareMEM::mem#1 ← (byte*) setMEMtoFAC::mem#5 - // [160] call prepareMEM - // [135] phi from setMEMtoFAC to prepareMEM [phi:setMEMtoFAC->prepareMEM] - // [135] phi (byte*) prepareMEM::mem#5 = (byte*) prepareMEM::mem#1 [phi:setMEMtoFAC->prepareMEM#0] -- register_copy - jsr prepareMEM + .label mem = $13 + // setMEMtoFAC::prepareMEM1 + // mem + // [162] (byte~) setMEMtoFAC::prepareMEM1_$1#0 ← > (word)(byte*) setMEMtoFAC::mem#5 -- vbuaa=_hi_vwuz1 + lda.z mem+1 + // *memHi = >mem + // [163] *((const byte*) memHi#0) ← (byte~) setMEMtoFAC::prepareMEM1_$1#0 -- _deref_pbuc1=vbuaa + sta memHi // setMEMtoFAC::@1 // asm - // asm { ldx$fe ldy$ff jsr$bbd4 } - ldx.z $fe - ldy.z $ff + // asm { ldxmemLo ldymemHi jsr$bbd4 } + ldx memLo + tay jsr $bbd4 // setMEMtoFAC::@return // } - // [162] return + // [165] return rts } // subFACfromARG @@ -8359,7 +8535,7 @@ subFACfromARG: { jsr $b853 // subFACfromARG::@return // } - // [164] return + // [167] return rts } // setARGtoFAC @@ -8371,7 +8547,7 @@ setARGtoFAC: { jsr $bc0f // setARGtoFAC::@return // } - // [166] return + // [169] return rts } // progress_init @@ -8380,41 +8556,41 @@ setARGtoFAC: { progress_init: { .label line = 2 // progress_init::@return - // [168] return + // [171] return rts } // gen_sprites gen_sprites: { .label spr = 2 .label i = $b - // [170] phi from gen_sprites to gen_sprites::@1 [phi:gen_sprites->gen_sprites::@1] - // [170] phi (byte*) gen_sprites::spr#2 = (const byte*) sprites#0 [phi:gen_sprites->gen_sprites::@1#0] -- pbuz1=pbuc1 + // [173] phi from gen_sprites to gen_sprites::@1 [phi:gen_sprites->gen_sprites::@1] + // [173] phi (byte*) gen_sprites::spr#2 = (const byte*) sprites#0 [phi:gen_sprites->gen_sprites::@1#0] -- pbuz1=pbuc1 lda #sprites sta.z spr+1 - // [170] phi (byte) gen_sprites::i#2 = (byte) 0 [phi:gen_sprites->gen_sprites::@1#1] -- vbuz1=vbuc1 + // [173] phi (byte) gen_sprites::i#2 = (byte) 0 [phi:gen_sprites->gen_sprites::@1#1] -- vbuz1=vbuc1 lda #0 sta.z i - // [170] phi from gen_sprites::@2 to gen_sprites::@1 [phi:gen_sprites::@2->gen_sprites::@1] - // [170] phi (byte*) gen_sprites::spr#2 = (byte*) gen_sprites::spr#1 [phi:gen_sprites::@2->gen_sprites::@1#0] -- register_copy - // [170] phi (byte) gen_sprites::i#2 = (byte) gen_sprites::i#1 [phi:gen_sprites::@2->gen_sprites::@1#1] -- register_copy + // [173] phi from gen_sprites::@2 to gen_sprites::@1 [phi:gen_sprites::@2->gen_sprites::@1] + // [173] phi (byte*) gen_sprites::spr#2 = (byte*) gen_sprites::spr#1 [phi:gen_sprites::@2->gen_sprites::@1#0] -- register_copy + // [173] phi (byte) gen_sprites::i#2 = (byte) gen_sprites::i#1 [phi:gen_sprites::@2->gen_sprites::@1#1] -- register_copy // gen_sprites::@1 b1: // gen_chargen_sprite(cml[i], spr) - // [171] (byte) gen_chargen_sprite::ch#0 ← *((const byte[]) gen_sprites::cml#0 + (byte) gen_sprites::i#2) -- vbuxx=pbuc1_derefidx_vbuz1 + // [174] (byte) gen_chargen_sprite::ch#0 ← *((const byte[]) gen_sprites::cml#0 + (byte) gen_sprites::i#2) -- vbuxx=pbuc1_derefidx_vbuz1 ldy.z i ldx cml,y - // [172] (byte*) gen_chargen_sprite::sprite#0 ← (byte*) gen_sprites::spr#2 -- pbuz1=pbuz2 + // [175] (byte*) gen_chargen_sprite::sprite#0 ← (byte*) gen_sprites::spr#2 -- pbuz1=pbuz2 lda.z spr sta.z gen_chargen_sprite.sprite lda.z spr+1 sta.z gen_chargen_sprite.sprite+1 - // [173] call gen_chargen_sprite + // [176] call gen_chargen_sprite jsr gen_chargen_sprite // gen_sprites::@2 // spr = spr + $40 - // [174] (byte*) gen_sprites::spr#1 ← (byte*) gen_sprites::spr#2 + (byte) $40 -- pbuz1=pbuz1_plus_vbuc1 + // [177] (byte*) gen_sprites::spr#1 ← (byte*) gen_sprites::spr#2 + (byte) $40 -- pbuz1=pbuz1_plus_vbuc1 lda #$40 clc adc.z spr @@ -8423,15 +8599,15 @@ gen_sprites: { inc.z spr+1 !: // for( byte i : 0..6 ) - // [175] (byte) gen_sprites::i#1 ← ++ (byte) gen_sprites::i#2 -- vbuz1=_inc_vbuz1 + // [178] (byte) gen_sprites::i#1 ← ++ (byte) gen_sprites::i#2 -- vbuz1=_inc_vbuz1 inc.z i - // [176] if((byte) gen_sprites::i#1!=(byte) 7) goto gen_sprites::@1 -- vbuz1_neq_vbuc1_then_la1 + // [179] if((byte) gen_sprites::i#1!=(byte) 7) goto gen_sprites::@1 -- vbuz1_neq_vbuc1_then_la1 lda #7 cmp.z i bne b1 // gen_sprites::@return // } - // [177] return + // [180] return rts cml: .text "camelot" } @@ -8451,13 +8627,13 @@ gen_chargen_sprite: { .label y = 4 .label c = 8 // (word)ch - // [178] (word~) gen_chargen_sprite::$0 ← (word)(byte) gen_chargen_sprite::ch#0 -- vwuz1=_word_vbuxx + // [181] (word~) gen_chargen_sprite::$0 ← (word)(byte) gen_chargen_sprite::ch#0 -- vwuz1=_word_vbuxx txa sta.z _0 lda #0 sta.z _0+1 // ((word)ch)*8 - // [179] (word~) gen_chargen_sprite::$1 ← (word~) gen_chargen_sprite::$0 << (byte) 3 -- vwuz1=vwuz1_rol_3 + // [182] (word~) gen_chargen_sprite::$1 ← (word~) gen_chargen_sprite::$0 << (byte) 3 -- vwuz1=vwuz1_rol_3 asl.z _1 rol.z _1+1 asl.z _1 @@ -8465,7 +8641,7 @@ gen_chargen_sprite: { asl.z _1 rol.z _1+1 // chargen = CHARGEN+((word)ch)*8 - // [180] (byte*) gen_chargen_sprite::chargen#0 ← (const byte*) CHARGEN#0 + (word~) gen_chargen_sprite::$1 -- pbuz1=pbuc1_plus_vwuz1 + // [183] (byte*) gen_chargen_sprite::chargen#0 ← (const byte*) CHARGEN#0 + (word~) gen_chargen_sprite::$1 -- pbuz1=pbuc1_plus_vwuz1 clc lda.z chargen adc #gen_chargen_sprite::@1] - // [183] phi (byte*) gen_chargen_sprite::sprite#11 = (byte*) gen_chargen_sprite::sprite#0 [phi:gen_chargen_sprite->gen_chargen_sprite::@1#0] -- register_copy - // [183] phi (byte) gen_chargen_sprite::y#2 = (byte) 0 [phi:gen_chargen_sprite->gen_chargen_sprite::@1#1] -- vbuz1=vbuc1 + // [186] phi from gen_chargen_sprite to gen_chargen_sprite::@1 [phi:gen_chargen_sprite->gen_chargen_sprite::@1] + // [186] phi (byte*) gen_chargen_sprite::sprite#11 = (byte*) gen_chargen_sprite::sprite#0 [phi:gen_chargen_sprite->gen_chargen_sprite::@1#0] -- register_copy + // [186] phi (byte) gen_chargen_sprite::y#2 = (byte) 0 [phi:gen_chargen_sprite->gen_chargen_sprite::@1#1] -- vbuz1=vbuc1 lda #0 sta.z y - // [183] phi from gen_chargen_sprite::@8 to gen_chargen_sprite::@1 [phi:gen_chargen_sprite::@8->gen_chargen_sprite::@1] - // [183] phi (byte*) gen_chargen_sprite::sprite#11 = (byte*) gen_chargen_sprite::sprite#2 [phi:gen_chargen_sprite::@8->gen_chargen_sprite::@1#0] -- register_copy - // [183] phi (byte) gen_chargen_sprite::y#2 = (byte) gen_chargen_sprite::y#1 [phi:gen_chargen_sprite::@8->gen_chargen_sprite::@1#1] -- register_copy + // [186] phi from gen_chargen_sprite::@8 to gen_chargen_sprite::@1 [phi:gen_chargen_sprite::@8->gen_chargen_sprite::@1] + // [186] phi (byte*) gen_chargen_sprite::sprite#11 = (byte*) gen_chargen_sprite::sprite#2 [phi:gen_chargen_sprite::@8->gen_chargen_sprite::@1#0] -- register_copy + // [186] phi (byte) gen_chargen_sprite::y#2 = (byte) gen_chargen_sprite::y#1 [phi:gen_chargen_sprite::@8->gen_chargen_sprite::@1#1] -- register_copy // gen_chargen_sprite::@1 b1: // bits = chargen[y] - // [184] (byte) gen_chargen_sprite::bits#0 ← *((byte*) gen_chargen_sprite::chargen#0 + (byte) gen_chargen_sprite::y#2) -- vbuz1=pbuz2_derefidx_vbuz3 + // [187] (byte) gen_chargen_sprite::bits#0 ← *((byte*) gen_chargen_sprite::chargen#0 + (byte) gen_chargen_sprite::y#2) -- vbuz1=pbuz2_derefidx_vbuz3 // current chargen line ldy.z y lda (chargen),y sta.z bits - // [185] phi from gen_chargen_sprite::@1 to gen_chargen_sprite::@2 [phi:gen_chargen_sprite::@1->gen_chargen_sprite::@2] - // [185] phi (byte) gen_chargen_sprite::x#6 = (byte) 0 [phi:gen_chargen_sprite::@1->gen_chargen_sprite::@2#0] -- vbuz1=vbuc1 + // [188] phi from gen_chargen_sprite::@1 to gen_chargen_sprite::@2 [phi:gen_chargen_sprite::@1->gen_chargen_sprite::@2] + // [188] phi (byte) gen_chargen_sprite::x#6 = (byte) 0 [phi:gen_chargen_sprite::@1->gen_chargen_sprite::@2#0] -- vbuz1=vbuc1 lda #0 sta.z x - // [185] phi (byte*) gen_chargen_sprite::sprite#10 = (byte*) gen_chargen_sprite::sprite#11 [phi:gen_chargen_sprite::@1->gen_chargen_sprite::@2#1] -- register_copy - // [185] phi (byte) gen_chargen_sprite::s_gen_cnt#4 = (byte) 0 [phi:gen_chargen_sprite::@1->gen_chargen_sprite::@2#2] -- vbuyy=vbuc1 + // [188] phi (byte*) gen_chargen_sprite::sprite#10 = (byte*) gen_chargen_sprite::sprite#11 [phi:gen_chargen_sprite::@1->gen_chargen_sprite::@2#1] -- register_copy + // [188] phi (byte) gen_chargen_sprite::s_gen_cnt#4 = (byte) 0 [phi:gen_chargen_sprite::@1->gen_chargen_sprite::@2#2] -- vbuyy=vbuc1 tay - // [185] phi (byte) gen_chargen_sprite::s_gen#5 = (byte) 0 [phi:gen_chargen_sprite::@1->gen_chargen_sprite::@2#3] -- vbuz1=vbuc1 + // [188] phi (byte) gen_chargen_sprite::s_gen#5 = (byte) 0 [phi:gen_chargen_sprite::@1->gen_chargen_sprite::@2#3] -- vbuz1=vbuc1 sta.z s_gen - // [185] phi (byte) gen_chargen_sprite::bits#2 = (byte) gen_chargen_sprite::bits#0 [phi:gen_chargen_sprite::@1->gen_chargen_sprite::@2#4] -- register_copy - // [185] phi from gen_chargen_sprite::@7 to gen_chargen_sprite::@2 [phi:gen_chargen_sprite::@7->gen_chargen_sprite::@2] - // [185] phi (byte) gen_chargen_sprite::x#6 = (byte) gen_chargen_sprite::x#1 [phi:gen_chargen_sprite::@7->gen_chargen_sprite::@2#0] -- register_copy - // [185] phi (byte*) gen_chargen_sprite::sprite#10 = (byte*) gen_chargen_sprite::sprite#4 [phi:gen_chargen_sprite::@7->gen_chargen_sprite::@2#1] -- register_copy - // [185] phi (byte) gen_chargen_sprite::s_gen_cnt#4 = (byte) gen_chargen_sprite::s_gen_cnt#5 [phi:gen_chargen_sprite::@7->gen_chargen_sprite::@2#2] -- register_copy - // [185] phi (byte) gen_chargen_sprite::s_gen#5 = (byte) gen_chargen_sprite::s_gen#6 [phi:gen_chargen_sprite::@7->gen_chargen_sprite::@2#3] -- register_copy - // [185] phi (byte) gen_chargen_sprite::bits#2 = (byte) gen_chargen_sprite::bits#1 [phi:gen_chargen_sprite::@7->gen_chargen_sprite::@2#4] -- register_copy + // [188] phi (byte) gen_chargen_sprite::bits#2 = (byte) gen_chargen_sprite::bits#0 [phi:gen_chargen_sprite::@1->gen_chargen_sprite::@2#4] -- register_copy + // [188] phi from gen_chargen_sprite::@7 to gen_chargen_sprite::@2 [phi:gen_chargen_sprite::@7->gen_chargen_sprite::@2] + // [188] phi (byte) gen_chargen_sprite::x#6 = (byte) gen_chargen_sprite::x#1 [phi:gen_chargen_sprite::@7->gen_chargen_sprite::@2#0] -- register_copy + // [188] phi (byte*) gen_chargen_sprite::sprite#10 = (byte*) gen_chargen_sprite::sprite#4 [phi:gen_chargen_sprite::@7->gen_chargen_sprite::@2#1] -- register_copy + // [188] phi (byte) gen_chargen_sprite::s_gen_cnt#4 = (byte) gen_chargen_sprite::s_gen_cnt#5 [phi:gen_chargen_sprite::@7->gen_chargen_sprite::@2#2] -- register_copy + // [188] phi (byte) gen_chargen_sprite::s_gen#5 = (byte) gen_chargen_sprite::s_gen#6 [phi:gen_chargen_sprite::@7->gen_chargen_sprite::@2#3] -- register_copy + // [188] phi (byte) gen_chargen_sprite::bits#2 = (byte) gen_chargen_sprite::bits#1 [phi:gen_chargen_sprite::@7->gen_chargen_sprite::@2#4] -- register_copy // gen_chargen_sprite::@2 b2: // bits & $80 - // [186] (byte~) gen_chargen_sprite::$3 ← (byte) gen_chargen_sprite::bits#2 & (byte) $80 -- vbuaa=vbuz1_band_vbuc1 + // [189] (byte~) gen_chargen_sprite::$3 ← (byte) gen_chargen_sprite::bits#2 & (byte) $80 -- vbuaa=vbuz1_band_vbuc1 lda #$80 and.z bits // if((bits & $80) != 0) - // [187] if((byte~) gen_chargen_sprite::$3==(byte) 0) goto gen_chargen_sprite::@3 -- vbuaa_eq_0_then_la1 + // [190] if((byte~) gen_chargen_sprite::$3==(byte) 0) goto gen_chargen_sprite::@3 -- vbuaa_eq_0_then_la1 cmp #0 beq b6 - // [188] phi from gen_chargen_sprite::@2 to gen_chargen_sprite::@10 [phi:gen_chargen_sprite::@2->gen_chargen_sprite::@10] + // [191] phi from gen_chargen_sprite::@2 to gen_chargen_sprite::@10 [phi:gen_chargen_sprite::@2->gen_chargen_sprite::@10] // gen_chargen_sprite::@10 - // [189] phi from gen_chargen_sprite::@10 to gen_chargen_sprite::@3 [phi:gen_chargen_sprite::@10->gen_chargen_sprite::@3] - // [189] phi (byte) gen_chargen_sprite::c#3 = (byte) 1 [phi:gen_chargen_sprite::@10->gen_chargen_sprite::@3#0] -- vbuz1=vbuc1 + // [192] phi from gen_chargen_sprite::@10 to gen_chargen_sprite::@3 [phi:gen_chargen_sprite::@10->gen_chargen_sprite::@3] + // [192] phi (byte) gen_chargen_sprite::c#3 = (byte) 1 [phi:gen_chargen_sprite::@10->gen_chargen_sprite::@3#0] -- vbuz1=vbuc1 lda #1 sta.z c jmp b3 - // [189] phi from gen_chargen_sprite::@2 to gen_chargen_sprite::@3 [phi:gen_chargen_sprite::@2->gen_chargen_sprite::@3] + // [192] phi from gen_chargen_sprite::@2 to gen_chargen_sprite::@3 [phi:gen_chargen_sprite::@2->gen_chargen_sprite::@3] b6: - // [189] phi (byte) gen_chargen_sprite::c#3 = (byte) 0 [phi:gen_chargen_sprite::@2->gen_chargen_sprite::@3#0] -- vbuz1=vbuc1 + // [192] phi (byte) gen_chargen_sprite::c#3 = (byte) 0 [phi:gen_chargen_sprite::@2->gen_chargen_sprite::@3#0] -- vbuz1=vbuc1 lda #0 sta.z c // gen_chargen_sprite::@3 b3: - // [190] phi from gen_chargen_sprite::@3 to gen_chargen_sprite::@4 [phi:gen_chargen_sprite::@3->gen_chargen_sprite::@4] - // [190] phi (byte*) gen_chargen_sprite::sprite#3 = (byte*) gen_chargen_sprite::sprite#10 [phi:gen_chargen_sprite::@3->gen_chargen_sprite::@4#0] -- register_copy - // [190] phi (byte) gen_chargen_sprite::b#2 = (byte) 0 [phi:gen_chargen_sprite::@3->gen_chargen_sprite::@4#1] -- vbuxx=vbuc1 + // [193] phi from gen_chargen_sprite::@3 to gen_chargen_sprite::@4 [phi:gen_chargen_sprite::@3->gen_chargen_sprite::@4] + // [193] phi (byte*) gen_chargen_sprite::sprite#3 = (byte*) gen_chargen_sprite::sprite#10 [phi:gen_chargen_sprite::@3->gen_chargen_sprite::@4#0] -- register_copy + // [193] phi (byte) gen_chargen_sprite::b#2 = (byte) 0 [phi:gen_chargen_sprite::@3->gen_chargen_sprite::@4#1] -- vbuxx=vbuc1 ldx #0 - // [190] phi (byte) gen_chargen_sprite::s_gen_cnt#3 = (byte) gen_chargen_sprite::s_gen_cnt#4 [phi:gen_chargen_sprite::@3->gen_chargen_sprite::@4#2] -- register_copy - // [190] phi (byte) gen_chargen_sprite::s_gen#3 = (byte) gen_chargen_sprite::s_gen#5 [phi:gen_chargen_sprite::@3->gen_chargen_sprite::@4#3] -- register_copy + // [193] phi (byte) gen_chargen_sprite::s_gen_cnt#3 = (byte) gen_chargen_sprite::s_gen_cnt#4 [phi:gen_chargen_sprite::@3->gen_chargen_sprite::@4#2] -- register_copy + // [193] phi (byte) gen_chargen_sprite::s_gen#3 = (byte) gen_chargen_sprite::s_gen#5 [phi:gen_chargen_sprite::@3->gen_chargen_sprite::@4#3] -- register_copy // generate 3 pixels in the sprite byte (s_gen) - // [190] phi from gen_chargen_sprite::@5 to gen_chargen_sprite::@4 [phi:gen_chargen_sprite::@5->gen_chargen_sprite::@4] - // [190] phi (byte*) gen_chargen_sprite::sprite#3 = (byte*) gen_chargen_sprite::sprite#4 [phi:gen_chargen_sprite::@5->gen_chargen_sprite::@4#0] -- register_copy - // [190] phi (byte) gen_chargen_sprite::b#2 = (byte) gen_chargen_sprite::b#1 [phi:gen_chargen_sprite::@5->gen_chargen_sprite::@4#1] -- register_copy - // [190] phi (byte) gen_chargen_sprite::s_gen_cnt#3 = (byte) gen_chargen_sprite::s_gen_cnt#5 [phi:gen_chargen_sprite::@5->gen_chargen_sprite::@4#2] -- register_copy - // [190] phi (byte) gen_chargen_sprite::s_gen#3 = (byte) gen_chargen_sprite::s_gen#6 [phi:gen_chargen_sprite::@5->gen_chargen_sprite::@4#3] -- register_copy + // [193] phi from gen_chargen_sprite::@5 to gen_chargen_sprite::@4 [phi:gen_chargen_sprite::@5->gen_chargen_sprite::@4] + // [193] phi (byte*) gen_chargen_sprite::sprite#3 = (byte*) gen_chargen_sprite::sprite#4 [phi:gen_chargen_sprite::@5->gen_chargen_sprite::@4#0] -- register_copy + // [193] phi (byte) gen_chargen_sprite::b#2 = (byte) gen_chargen_sprite::b#1 [phi:gen_chargen_sprite::@5->gen_chargen_sprite::@4#1] -- register_copy + // [193] phi (byte) gen_chargen_sprite::s_gen_cnt#3 = (byte) gen_chargen_sprite::s_gen_cnt#5 [phi:gen_chargen_sprite::@5->gen_chargen_sprite::@4#2] -- register_copy + // [193] phi (byte) gen_chargen_sprite::s_gen#3 = (byte) gen_chargen_sprite::s_gen#6 [phi:gen_chargen_sprite::@5->gen_chargen_sprite::@4#3] -- register_copy // gen_chargen_sprite::@4 b4: // s_gen*2 - // [191] (byte~) gen_chargen_sprite::$6 ← (byte) gen_chargen_sprite::s_gen#3 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [194] (byte~) gen_chargen_sprite::$6 ← (byte) gen_chargen_sprite::s_gen#3 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda.z s_gen asl // s_gen = s_gen*2 | c - // [192] (byte) gen_chargen_sprite::s_gen#1 ← (byte~) gen_chargen_sprite::$6 | (byte) gen_chargen_sprite::c#3 -- vbuz1=vbuaa_bor_vbuz2 + // [195] (byte) gen_chargen_sprite::s_gen#1 ← (byte~) gen_chargen_sprite::$6 | (byte) gen_chargen_sprite::c#3 -- vbuz1=vbuaa_bor_vbuz2 ora.z c sta.z s_gen // if(++s_gen_cnt==8) - // [193] (byte) gen_chargen_sprite::s_gen_cnt#1 ← ++ (byte) gen_chargen_sprite::s_gen_cnt#3 -- vbuyy=_inc_vbuyy + // [196] (byte) gen_chargen_sprite::s_gen_cnt#1 ← ++ (byte) gen_chargen_sprite::s_gen_cnt#3 -- vbuyy=_inc_vbuyy iny - // [194] if((byte) gen_chargen_sprite::s_gen_cnt#1!=(byte) 8) goto gen_chargen_sprite::@5 -- vbuyy_neq_vbuc1_then_la1 + // [197] if((byte) gen_chargen_sprite::s_gen_cnt#1!=(byte) 8) goto gen_chargen_sprite::@5 -- vbuyy_neq_vbuc1_then_la1 cpy #8 bne b5 // gen_chargen_sprite::@6 // sprite[0] = s_gen - // [195] *((byte*) gen_chargen_sprite::sprite#3) ← (byte) gen_chargen_sprite::s_gen#1 -- _deref_pbuz1=vbuz2 + // [198] *((byte*) gen_chargen_sprite::sprite#3) ← (byte) gen_chargen_sprite::s_gen#1 -- _deref_pbuz1=vbuz2 // sprite byte filled - store and move to next byte ldy #0 sta (sprite),y // sprite[3] = s_gen - // [196] *((byte*) gen_chargen_sprite::sprite#3 + (byte) 3) ← (byte) gen_chargen_sprite::s_gen#1 -- pbuz1_derefidx_vbuc1=vbuz2 + // [199] *((byte*) gen_chargen_sprite::sprite#3 + (byte) 3) ← (byte) gen_chargen_sprite::s_gen#1 -- pbuz1_derefidx_vbuc1=vbuz2 ldy #3 sta (sprite),y // sprite[6] = s_gen - // [197] *((byte*) gen_chargen_sprite::sprite#3 + (byte) 6) ← (byte) gen_chargen_sprite::s_gen#1 -- pbuz1_derefidx_vbuc1=vbuz2 + // [200] *((byte*) gen_chargen_sprite::sprite#3 + (byte) 6) ← (byte) gen_chargen_sprite::s_gen#1 -- pbuz1_derefidx_vbuc1=vbuz2 ldy #6 sta (sprite),y // sprite++; - // [198] (byte*) gen_chargen_sprite::sprite#1 ← ++ (byte*) gen_chargen_sprite::sprite#3 -- pbuz1=_inc_pbuz1 + // [201] (byte*) gen_chargen_sprite::sprite#1 ← ++ (byte*) gen_chargen_sprite::sprite#3 -- pbuz1=_inc_pbuz1 inc.z sprite bne !+ inc.z sprite+1 !: - // [199] phi from gen_chargen_sprite::@6 to gen_chargen_sprite::@5 [phi:gen_chargen_sprite::@6->gen_chargen_sprite::@5] - // [199] phi (byte*) gen_chargen_sprite::sprite#4 = (byte*) gen_chargen_sprite::sprite#1 [phi:gen_chargen_sprite::@6->gen_chargen_sprite::@5#0] -- register_copy - // [199] phi (byte) gen_chargen_sprite::s_gen_cnt#5 = (byte) 0 [phi:gen_chargen_sprite::@6->gen_chargen_sprite::@5#1] -- vbuyy=vbuc1 + // [202] phi from gen_chargen_sprite::@6 to gen_chargen_sprite::@5 [phi:gen_chargen_sprite::@6->gen_chargen_sprite::@5] + // [202] phi (byte*) gen_chargen_sprite::sprite#4 = (byte*) gen_chargen_sprite::sprite#1 [phi:gen_chargen_sprite::@6->gen_chargen_sprite::@5#0] -- register_copy + // [202] phi (byte) gen_chargen_sprite::s_gen_cnt#5 = (byte) 0 [phi:gen_chargen_sprite::@6->gen_chargen_sprite::@5#1] -- vbuyy=vbuc1 ldy #0 - // [199] phi (byte) gen_chargen_sprite::s_gen#6 = (byte) 0 [phi:gen_chargen_sprite::@6->gen_chargen_sprite::@5#2] -- vbuz1=vbuc1 + // [202] phi (byte) gen_chargen_sprite::s_gen#6 = (byte) 0 [phi:gen_chargen_sprite::@6->gen_chargen_sprite::@5#2] -- vbuz1=vbuc1 tya sta.z s_gen - // [199] phi from gen_chargen_sprite::@4 to gen_chargen_sprite::@5 [phi:gen_chargen_sprite::@4->gen_chargen_sprite::@5] - // [199] phi (byte*) gen_chargen_sprite::sprite#4 = (byte*) gen_chargen_sprite::sprite#3 [phi:gen_chargen_sprite::@4->gen_chargen_sprite::@5#0] -- register_copy - // [199] phi (byte) gen_chargen_sprite::s_gen_cnt#5 = (byte) gen_chargen_sprite::s_gen_cnt#1 [phi:gen_chargen_sprite::@4->gen_chargen_sprite::@5#1] -- register_copy - // [199] phi (byte) gen_chargen_sprite::s_gen#6 = (byte) gen_chargen_sprite::s_gen#1 [phi:gen_chargen_sprite::@4->gen_chargen_sprite::@5#2] -- register_copy + // [202] phi from gen_chargen_sprite::@4 to gen_chargen_sprite::@5 [phi:gen_chargen_sprite::@4->gen_chargen_sprite::@5] + // [202] phi (byte*) gen_chargen_sprite::sprite#4 = (byte*) gen_chargen_sprite::sprite#3 [phi:gen_chargen_sprite::@4->gen_chargen_sprite::@5#0] -- register_copy + // [202] phi (byte) gen_chargen_sprite::s_gen_cnt#5 = (byte) gen_chargen_sprite::s_gen_cnt#1 [phi:gen_chargen_sprite::@4->gen_chargen_sprite::@5#1] -- register_copy + // [202] phi (byte) gen_chargen_sprite::s_gen#6 = (byte) gen_chargen_sprite::s_gen#1 [phi:gen_chargen_sprite::@4->gen_chargen_sprite::@5#2] -- register_copy // gen_chargen_sprite::@5 b5: // for(byte b : 0..2) - // [200] (byte) gen_chargen_sprite::b#1 ← ++ (byte) gen_chargen_sprite::b#2 -- vbuxx=_inc_vbuxx + // [203] (byte) gen_chargen_sprite::b#1 ← ++ (byte) gen_chargen_sprite::b#2 -- vbuxx=_inc_vbuxx inx - // [201] if((byte) gen_chargen_sprite::b#1!=(byte) 3) goto gen_chargen_sprite::@4 -- vbuxx_neq_vbuc1_then_la1 + // [204] if((byte) gen_chargen_sprite::b#1!=(byte) 3) goto gen_chargen_sprite::@4 -- vbuxx_neq_vbuc1_then_la1 cpx #3 bne b4 // gen_chargen_sprite::@7 // bits = bits*2 - // [202] (byte) gen_chargen_sprite::bits#1 ← (byte) gen_chargen_sprite::bits#2 << (byte) 1 -- vbuz1=vbuz1_rol_1 + // [205] (byte) gen_chargen_sprite::bits#1 ← (byte) gen_chargen_sprite::bits#2 << (byte) 1 -- vbuz1=vbuz1_rol_1 asl.z bits // for(byte x:0..7) - // [203] (byte) gen_chargen_sprite::x#1 ← ++ (byte) gen_chargen_sprite::x#6 -- vbuz1=_inc_vbuz1 + // [206] (byte) gen_chargen_sprite::x#1 ← ++ (byte) gen_chargen_sprite::x#6 -- vbuz1=_inc_vbuz1 inc.z x - // [204] if((byte) gen_chargen_sprite::x#1!=(byte) 8) goto gen_chargen_sprite::@2 -- vbuz1_neq_vbuc1_then_la1 + // [207] if((byte) gen_chargen_sprite::x#1!=(byte) 8) goto gen_chargen_sprite::@2 -- vbuz1_neq_vbuc1_then_la1 lda #8 cmp.z x bne b2 // gen_chargen_sprite::@8 // sprite = sprite + 6 - // [205] (byte*) gen_chargen_sprite::sprite#2 ← (byte*) gen_chargen_sprite::sprite#4 + (byte) 6 -- pbuz1=pbuz1_plus_vbuc1 + // [208] (byte*) gen_chargen_sprite::sprite#2 ← (byte*) gen_chargen_sprite::sprite#4 + (byte) 6 -- pbuz1=pbuz1_plus_vbuc1 lda #6 clc adc.z sprite @@ -8625,15 +8801,15 @@ gen_chargen_sprite: { inc.z sprite+1 !: // for(byte y:0..7) - // [206] (byte) gen_chargen_sprite::y#1 ← ++ (byte) gen_chargen_sprite::y#2 -- vbuz1=_inc_vbuz1 + // [209] (byte) gen_chargen_sprite::y#1 ← ++ (byte) gen_chargen_sprite::y#2 -- vbuz1=_inc_vbuz1 inc.z y - // [207] if((byte) gen_chargen_sprite::y#1!=(byte) 8) goto gen_chargen_sprite::@1 -- vbuz1_neq_vbuc1_then_la1 + // [210] if((byte) gen_chargen_sprite::y#1!=(byte) 8) goto gen_chargen_sprite::@1 -- vbuz1_neq_vbuc1_then_la1 lda #8 cmp.z y bne b1 // gen_chargen_sprite::@9 // *PROCPORT = $37 - // [208] *((const byte*) PROCPORT#0) ← (byte) $37 -- _deref_pbuc1=vbuc2 + // [211] *((const byte*) PROCPORT#0) ← (byte) $37 -- _deref_pbuc1=vbuc2 lda #$37 sta PROCPORT // asm @@ -8641,7 +8817,7 @@ gen_chargen_sprite: { cli // gen_chargen_sprite::@return // } - // [210] return + // [213] return rts } // place_sprites @@ -8653,88 +8829,88 @@ place_sprites: { .label j2 = $a .label j = 8 // *SPRITES_ENABLE = %01111111 - // [211] *((const byte*) SPRITES_ENABLE#0) ← (byte) $7f -- _deref_pbuc1=vbuc2 + // [214] *((const byte*) SPRITES_ENABLE#0) ← (byte) $7f -- _deref_pbuc1=vbuc2 lda #$7f sta SPRITES_ENABLE // *SPRITES_EXPAND_X = %01111111 - // [212] *((const byte*) SPRITES_EXPAND_X#0) ← (byte) $7f -- _deref_pbuc1=vbuc2 + // [215] *((const byte*) SPRITES_EXPAND_X#0) ← (byte) $7f -- _deref_pbuc1=vbuc2 sta SPRITES_EXPAND_X // *SPRITES_EXPAND_Y = %01111111 - // [213] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte) $7f -- _deref_pbuc1=vbuc2 + // [216] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte) $7f -- _deref_pbuc1=vbuc2 sta SPRITES_EXPAND_Y - // [214] phi from place_sprites to place_sprites::@1 [phi:place_sprites->place_sprites::@1] - // [214] phi (byte) place_sprites::col#2 = (byte) 5 [phi:place_sprites->place_sprites::@1#0] -- vbuz1=vbuc1 + // [217] phi from place_sprites to place_sprites::@1 [phi:place_sprites->place_sprites::@1] + // [217] phi (byte) place_sprites::col#2 = (byte) 5 [phi:place_sprites->place_sprites::@1#0] -- vbuz1=vbuc1 lda #5 sta.z col - // [214] phi (byte) place_sprites::j2#3 = (byte) 0 [phi:place_sprites->place_sprites::@1#1] -- vbuz1=vbuc1 + // [217] phi (byte) place_sprites::j2#3 = (byte) 0 [phi:place_sprites->place_sprites::@1#1] -- vbuz1=vbuc1 lda #0 sta.z j2 - // [214] phi (byte) place_sprites::spr_x#2 = (byte) $3c [phi:place_sprites->place_sprites::@1#2] -- vbuz1=vbuc1 + // [217] phi (byte) place_sprites::spr_x#2 = (byte) $3c [phi:place_sprites->place_sprites::@1#2] -- vbuz1=vbuc1 lda #$3c sta.z spr_x - // [214] phi (byte) place_sprites::j#2 = (byte) 0 [phi:place_sprites->place_sprites::@1#3] -- vbuz1=vbuc1 + // [217] phi (byte) place_sprites::j#2 = (byte) 0 [phi:place_sprites->place_sprites::@1#3] -- vbuz1=vbuc1 lda #0 sta.z j - // [214] phi (byte) place_sprites::spr_id#2 = (byte)(word)(const byte*) sprites#0/(byte) $40 [phi:place_sprites->place_sprites::@1#4] -- vbuz1=vbuc1 + // [217] phi (byte) place_sprites::spr_id#2 = (byte)(word)(const byte*) sprites#0/(byte) $40 [phi:place_sprites->place_sprites::@1#4] -- vbuz1=vbuc1 lda #sprites/$40 sta.z spr_id - // [214] phi from place_sprites::@1 to place_sprites::@1 [phi:place_sprites::@1->place_sprites::@1] - // [214] phi (byte) place_sprites::col#2 = (byte) place_sprites::col#1 [phi:place_sprites::@1->place_sprites::@1#0] -- register_copy - // [214] phi (byte) place_sprites::j2#3 = (byte) place_sprites::j2#2 [phi:place_sprites::@1->place_sprites::@1#1] -- register_copy - // [214] phi (byte) place_sprites::spr_x#2 = (byte) place_sprites::spr_x#1 [phi:place_sprites::@1->place_sprites::@1#2] -- register_copy - // [214] phi (byte) place_sprites::j#2 = (byte) place_sprites::j#1 [phi:place_sprites::@1->place_sprites::@1#3] -- register_copy - // [214] phi (byte) place_sprites::spr_id#2 = (byte) place_sprites::spr_id#1 [phi:place_sprites::@1->place_sprites::@1#4] -- register_copy + // [217] phi from place_sprites::@1 to place_sprites::@1 [phi:place_sprites::@1->place_sprites::@1] + // [217] phi (byte) place_sprites::col#2 = (byte) place_sprites::col#1 [phi:place_sprites::@1->place_sprites::@1#0] -- register_copy + // [217] phi (byte) place_sprites::j2#3 = (byte) place_sprites::j2#2 [phi:place_sprites::@1->place_sprites::@1#1] -- register_copy + // [217] phi (byte) place_sprites::spr_x#2 = (byte) place_sprites::spr_x#1 [phi:place_sprites::@1->place_sprites::@1#2] -- register_copy + // [217] phi (byte) place_sprites::j#2 = (byte) place_sprites::j#1 [phi:place_sprites::@1->place_sprites::@1#3] -- register_copy + // [217] phi (byte) place_sprites::spr_id#2 = (byte) place_sprites::spr_id#1 [phi:place_sprites::@1->place_sprites::@1#4] -- register_copy // place_sprites::@1 b1: // sprites_ptr[j] = spr_id++ - // [215] *((const byte*) place_sprites::sprites_ptr#0 + (byte) place_sprites::j#2) ← (byte) place_sprites::spr_id#2 -- pbuc1_derefidx_vbuz1=vbuz2 + // [218] *((const byte*) place_sprites::sprites_ptr#0 + (byte) place_sprites::j#2) ← (byte) place_sprites::spr_id#2 -- pbuc1_derefidx_vbuz1=vbuz2 lda.z spr_id ldy.z j sta sprites_ptr,y // sprites_ptr[j] = spr_id++; - // [216] (byte) place_sprites::spr_id#1 ← ++ (byte) place_sprites::spr_id#2 -- vbuz1=_inc_vbuz1 + // [219] (byte) place_sprites::spr_id#1 ← ++ (byte) place_sprites::spr_id#2 -- vbuz1=_inc_vbuz1 inc.z spr_id // SPRITES_XPOS[j2] = spr_x - // [217] *((const byte*) SPRITES_XPOS#0 + (byte) place_sprites::j2#3) ← (byte) place_sprites::spr_x#2 -- pbuc1_derefidx_vbuz1=vbuz2 + // [220] *((const byte*) SPRITES_XPOS#0 + (byte) place_sprites::j2#3) ← (byte) place_sprites::spr_x#2 -- pbuc1_derefidx_vbuz1=vbuz2 lda.z spr_x ldy.z j2 sta SPRITES_XPOS,y // SPRITES_YPOS[j2] = 80 - // [218] *((const byte*) SPRITES_YPOS#0 + (byte) place_sprites::j2#3) ← (byte) $50 -- pbuc1_derefidx_vbuz1=vbuc2 + // [221] *((const byte*) SPRITES_YPOS#0 + (byte) place_sprites::j2#3) ← (byte) $50 -- pbuc1_derefidx_vbuz1=vbuc2 lda #$50 sta SPRITES_YPOS,y // SPRITES_COLS[j] = col - // [219] *((const byte*) SPRITES_COLS#0 + (byte) place_sprites::j#2) ← (byte) place_sprites::col#2 -- pbuc1_derefidx_vbuz1=vbuz2 + // [222] *((const byte*) SPRITES_COLS#0 + (byte) place_sprites::j#2) ← (byte) place_sprites::col#2 -- pbuc1_derefidx_vbuz1=vbuz2 lda.z col ldy.z j sta SPRITES_COLS,y // spr_x = spr_x + 32 - // [220] (byte) place_sprites::spr_x#1 ← (byte) place_sprites::spr_x#2 + (byte) $20 -- vbuz1=vbuz1_plus_vbuc1 + // [223] (byte) place_sprites::spr_x#1 ← (byte) place_sprites::spr_x#2 + (byte) $20 -- vbuz1=vbuz1_plus_vbuc1 lax.z spr_x axs #-[$20] stx.z spr_x // col = col^($7^$5) - // [221] (byte) place_sprites::col#1 ← (byte) place_sprites::col#2 ^ (byte)(number) 7^(number) 5 -- vbuz1=vbuz1_bxor_vbuc1 + // [224] (byte) place_sprites::col#1 ← (byte) place_sprites::col#2 ^ (byte)(number) 7^(number) 5 -- vbuz1=vbuz1_bxor_vbuc1 lda #7^5 eor.z col sta.z col // j2++; - // [222] (byte) place_sprites::j2#1 ← ++ (byte) place_sprites::j2#3 -- vbuxx=_inc_vbuz1 + // [225] (byte) place_sprites::j2#1 ← ++ (byte) place_sprites::j2#3 -- vbuxx=_inc_vbuz1 ldx.z j2 inx - // [223] (byte) place_sprites::j2#2 ← ++ (byte) place_sprites::j2#1 -- vbuz1=_inc_vbuxx + // [226] (byte) place_sprites::j2#2 ← ++ (byte) place_sprites::j2#1 -- vbuz1=_inc_vbuxx inx stx.z j2 // for( byte j : 0..6) - // [224] (byte) place_sprites::j#1 ← ++ (byte) place_sprites::j#2 -- vbuz1=_inc_vbuz1 + // [227] (byte) place_sprites::j#1 ← ++ (byte) place_sprites::j#2 -- vbuz1=_inc_vbuz1 inc.z j - // [225] if((byte) place_sprites::j#1!=(byte) 7) goto place_sprites::@1 -- vbuz1_neq_vbuc1_then_la1 + // [228] if((byte) place_sprites::j#1!=(byte) 7) goto place_sprites::@1 -- vbuz1_neq_vbuc1_then_la1 lda #7 cmp.z j bne b1 // place_sprites::@return // } - // [226] return + // [229] return rts } // File Data diff --git a/src/test/ref/examples/sinsprites/sinus-sprites.sym b/src/test/ref/examples/sinsprites/sinus-sprites.sym index 1ee90f9a8..82dcdaa57 100644 --- a/src/test/ref/examples/sinsprites/sinus-sprites.sym +++ b/src/test/ref/examples/sinsprites/sinus-sprites.sym @@ -35,6 +35,10 @@ (label) addMEMtoFAC::@1 (label) addMEMtoFAC::@return (byte*) addMEMtoFAC::mem +(label) addMEMtoFAC::prepareMEM1 +(byte~) addMEMtoFAC::prepareMEM1_$0 +(byte~) addMEMtoFAC::prepareMEM1_$1 +(word) addMEMtoFAC::prepareMEM1_mem (void()) anim() (byte~) anim::$6 $6 zp ZP_BYTE:10 101.0 (byte~) anim::$7 reg byte a 202.0 @@ -78,13 +82,19 @@ (label) clear_screen::@2 (label) clear_screen::@return (byte*) clear_screen::sc -(byte*) clear_screen::sc#1 sc zp ZP_WORD:19 16.5 -(byte*) clear_screen::sc#4 sc zp ZP_WORD:19 16.5 +(byte*) clear_screen::sc#1 sc zp ZP_WORD:15 16.5 +(byte*) clear_screen::sc#4 sc zp ZP_WORD:15 16.5 (void()) divMEMbyFAC((byte*) divMEMbyFAC::mem) (label) divMEMbyFAC::@1 (label) divMEMbyFAC::@return (byte*) divMEMbyFAC::mem -(byte*) divMEMbyFAC::mem#2 mem zp ZP_WORD:15 2.0 +(byte*) divMEMbyFAC::mem#2 mem zp ZP_WORD:19 +(label) divMEMbyFAC::prepareMEM1 +(byte~) divMEMbyFAC::prepareMEM1_$0 +(byte~) divMEMbyFAC::prepareMEM1_$0#0 reg byte a 4.0 +(byte~) divMEMbyFAC::prepareMEM1_$1 +(byte~) divMEMbyFAC::prepareMEM1_$1#0 reg byte a 4.0 +(word) divMEMbyFAC::prepareMEM1_mem (void()) gen_chargen_sprite((byte) gen_chargen_sprite::ch , (byte*) gen_chargen_sprite::sprite) (word~) gen_chargen_sprite::$0 $0 zp ZP_WORD:19 4.0 (word~) gen_chargen_sprite::$1 $1 zp ZP_WORD:19 4.0 @@ -139,7 +149,7 @@ (byte) gen_chargen_sprite::y#1 y zp ZP_BYTE:4 151.5 (byte) gen_chargen_sprite::y#2 y zp ZP_BYTE:4 13.173913043478262 (void()) gen_sintab((byte*) gen_sintab::sintab , (byte) gen_sintab::length , (byte) gen_sintab::min , (byte) gen_sintab::max) -(word~) gen_sintab::$24 $24 zp ZP_WORD:15 11.0 +(word~) gen_sintab::$24 $24 zp ZP_WORD:19 11.0 (byte~) gen_sintab::$25 reg byte a 22.0 (label) gen_sintab::@1 (label) gen_sintab::@10 @@ -182,7 +192,7 @@ (byte) gen_sintab::min (byte) gen_sintab::min#2 min zp ZP_BYTE:6 (byte*) gen_sintab::sintab -(byte*) gen_sintab::sintab#13 sintab zp ZP_WORD:19 0.22448979591836735 +(byte*) gen_sintab::sintab#13 sintab zp ZP_WORD:15 0.22448979591836735 (void()) gen_sprites() (label) gen_sprites::@1 (label) gen_sprites::@2 @@ -198,8 +208,8 @@ (word()) getFAC() (label) getFAC::@return (word) getFAC::return -(word) getFAC::return#0 return zp ZP_WORD:15 4.333333333333333 -(word) getFAC::return#2 return zp ZP_WORD:15 22.0 +(word) getFAC::return#0 return zp ZP_WORD:19 4.333333333333333 +(word) getFAC::return#2 return zp ZP_WORD:19 22.0 (word) getFAC::w (void()) init() (label) init::@1 @@ -225,7 +235,13 @@ (label) mulFACbyMEM::@1 (label) mulFACbyMEM::@return (byte*) mulFACbyMEM::mem -(byte*) mulFACbyMEM::mem#2 mem zp ZP_WORD:15 2.0 +(byte*) mulFACbyMEM::mem#2 mem zp ZP_WORD:19 +(label) mulFACbyMEM::prepareMEM1 +(byte~) mulFACbyMEM::prepareMEM1_$0 +(byte~) mulFACbyMEM::prepareMEM1_$0#0 reg byte a 4.0 +(byte~) mulFACbyMEM::prepareMEM1_$1 +(byte~) mulFACbyMEM::prepareMEM1_$1#0 reg byte a 4.0 +(word) mulFACbyMEM::prepareMEM1_mem (void()) place_sprites() (label) place_sprites::@1 (label) place_sprites::@return @@ -247,16 +263,6 @@ (byte) place_sprites::spr_x#2 spr_x zp ZP_BYTE:9 5.5 (byte*) place_sprites::sprites_ptr (const byte*) place_sprites::sprites_ptr#0 sprites_ptr = (const byte*) SCREEN#0+(word) $3f8 -(void()) prepareMEM((byte*) prepareMEM::mem) -(byte~) prepareMEM::$0 reg byte a 4.0 -(byte~) prepareMEM::$1 reg byte a 4.0 -(label) prepareMEM::@return -(byte*) prepareMEM::mem -(byte*) prepareMEM::mem#0 mem zp ZP_WORD:15 4.0 -(byte*) prepareMEM::mem#1 mem zp ZP_WORD:15 4.0 -(byte*) prepareMEM::mem#3 mem zp ZP_WORD:15 4.0 -(byte*) prepareMEM::mem#4 mem zp ZP_WORD:15 4.0 -(byte*) prepareMEM::mem#5 mem zp ZP_WORD:15 3.9999999999999996 (byte*) progress_cursor (byte*) progress_cursor#10 progress_cursor zp ZP_WORD:2 4.0 (byte*) progress_cursor#11 progress_cursor zp ZP_WORD:2 3.4 @@ -280,17 +286,29 @@ (void()) setFAC((word) setFAC::w) (label) setFAC::@1 (label) setFAC::@return +(label) setFAC::prepareMEM1 +(byte~) setFAC::prepareMEM1_$0 +(byte~) setFAC::prepareMEM1_$0#0 reg byte a 4.0 +(byte~) setFAC::prepareMEM1_$1 +(byte~) setFAC::prepareMEM1_$1#0 reg byte a 4.0 +(word) setFAC::prepareMEM1_mem +(word) setFAC::prepareMEM1_mem#0 prepareMEM1_mem zp ZP_WORD:19 9.999999999999998 (word) setFAC::w -(word) setFAC::w#0 w zp ZP_WORD:15 4.0 -(word) setFAC::w#1 w zp ZP_WORD:15 4.0 -(word) setFAC::w#3 w zp ZP_WORD:15 22.0 -(word) setFAC::w#4 w zp ZP_WORD:15 22.0 -(word) setFAC::w#5 w zp ZP_WORD:15 26.0 +(word) setFAC::w#0 w zp ZP_WORD:19 4.0 +(word) setFAC::w#1 w zp ZP_WORD:19 4.0 +(word) setFAC::w#3 w zp ZP_WORD:19 22.0 +(word) setFAC::w#4 w zp ZP_WORD:19 22.0 (void()) setMEMtoFAC((byte*) setMEMtoFAC::mem) (label) setMEMtoFAC::@1 (label) setMEMtoFAC::@return (byte*) setMEMtoFAC::mem -(byte*) setMEMtoFAC::mem#5 mem zp ZP_WORD:15 2.0 +(byte*) setMEMtoFAC::mem#5 mem zp ZP_WORD:19 +(label) setMEMtoFAC::prepareMEM1 +(byte~) setMEMtoFAC::prepareMEM1_$0 +(byte~) setMEMtoFAC::prepareMEM1_$0#0 reg byte a 4.0 +(byte~) setMEMtoFAC::prepareMEM1_$1 +(byte~) setMEMtoFAC::prepareMEM1_$1#0 reg byte a 4.0 +(word) setMEMtoFAC::prepareMEM1_mem (void()) sinFAC() (label) sinFAC::@return (byte) sin_idx_x @@ -326,14 +344,20 @@ zp ZP_BYTE:8 [ place_sprites::j#2 place_sprites::j#1 gen_chargen_sprite::c#3 gen zp ZP_BYTE:9 [ place_sprites::spr_x#2 place_sprites::spr_x#1 gen_chargen_sprite::s_gen#3 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen#6 gen_chargen_sprite::s_gen#1 gen_sintab::i#10 gen_sintab::i#1 anim::xidx#3 anim::xidx#0 anim::xidx#5 anim::xidx#1 anim::xidx#2 ] zp ZP_BYTE:10 [ place_sprites::j2#3 place_sprites::j2#2 progress_idx#14 progress_idx#12 progress_idx#10 anim::x_msb#2 anim::x_msb#1 anim::$6 ] zp ZP_BYTE:11 [ place_sprites::col#2 place_sprites::col#1 gen_sprites::i#2 gen_sprites::i#1 anim::j2#2 anim::j2#1 ] +zp ZP_WORD:15 [ anim::x#0 gen_chargen_sprite::sprite#3 gen_chargen_sprite::sprite#10 gen_chargen_sprite::sprite#11 gen_chargen_sprite::sprite#0 gen_chargen_sprite::sprite#2 gen_chargen_sprite::sprite#4 gen_chargen_sprite::sprite#1 gen_sintab::sintab#13 clear_screen::sc#4 clear_screen::sc#1 ] reg byte a [ anim::$7 ] reg byte a [ anim::$9 ] -zp ZP_WORD:15 [ getFAC::return#2 gen_sintab::$24 getFAC::return#0 anim::x#0 gen_chargen_sprite::sprite#3 gen_chargen_sprite::sprite#10 gen_chargen_sprite::sprite#11 gen_chargen_sprite::sprite#0 gen_chargen_sprite::sprite#2 gen_chargen_sprite::sprite#4 gen_chargen_sprite::sprite#1 prepareMEM::mem#5 prepareMEM::mem#3 prepareMEM::mem#4 prepareMEM::mem#0 prepareMEM::mem#1 mulFACbyMEM::mem#2 divMEMbyFAC::mem#2 setFAC::w#5 setFAC::w#0 setFAC::w#3 setFAC::w#4 setFAC::w#1 setMEMtoFAC::mem#5 ] reg byte a [ gen_sintab::$25 ] -reg byte a [ prepareMEM::$0 ] -reg byte a [ prepareMEM::$1 ] +reg byte a [ mulFACbyMEM::prepareMEM1_$0#0 ] +reg byte a [ mulFACbyMEM::prepareMEM1_$1#0 ] +reg byte a [ divMEMbyFAC::prepareMEM1_$0#0 ] +reg byte a [ divMEMbyFAC::prepareMEM1_$1#0 ] +reg byte a [ setFAC::prepareMEM1_$0#0 ] +reg byte a [ setFAC::prepareMEM1_$1#0 ] +reg byte a [ setMEMtoFAC::prepareMEM1_$0#0 ] +reg byte a [ setMEMtoFAC::prepareMEM1_$1#0 ] reg byte x [ gen_chargen_sprite::ch#0 ] -zp ZP_WORD:19 [ gen_chargen_sprite::$0 gen_chargen_sprite::$1 gen_chargen_sprite::chargen#0 gen_sintab::sintab#13 clear_screen::sc#4 clear_screen::sc#1 ] +zp ZP_WORD:19 [ gen_chargen_sprite::$0 gen_chargen_sprite::$1 gen_chargen_sprite::chargen#0 getFAC::return#2 gen_sintab::$24 getFAC::return#0 setMEMtoFAC::mem#5 setFAC::prepareMEM1_mem#0 setFAC::w#0 setFAC::w#3 setFAC::w#4 setFAC::w#1 divMEMbyFAC::mem#2 mulFACbyMEM::mem#2 ] reg byte a [ gen_chargen_sprite::$3 ] reg byte a [ gen_chargen_sprite::$6 ] reg byte x [ place_sprites::j2#1 ] diff --git a/src/test/ref/inline-asm-param.asm b/src/test/ref/inline-asm-param.asm new file mode 100644 index 000000000..f7e177971 --- /dev/null +++ b/src/test/ref/inline-asm-param.asm @@ -0,0 +1,14 @@ +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" + .label SCREEN = $400 +main: { + ldx #0 + b1: + lda #'a' + sta SCREEN + inx + cpx #4 + bne b1 + rts +} diff --git a/src/test/ref/inline-asm-param.cfg b/src/test/ref/inline-asm-param.cfg new file mode 100644 index 000000000..694f4039e --- /dev/null +++ b/src/test/ref/inline-asm-param.cfg @@ -0,0 +1,21 @@ +@begin: scope:[] from + [0] phi() + to:@1 +@1: scope:[] from @begin + [1] phi() + [2] call main + to:@end +@end: scope:[] from @1 + [3] phi() +main: scope:[main] from @1 + [4] phi() + to:main::@1 +main::@1: scope:[main] from main main::@1 + [5] (byte) main::i#2 ← phi( main/(byte) 0 main::@1/(byte) main::i#1 ) + asm { lda#'a' staSCREEN } + [7] (byte) main::i#1 ← ++ (byte) main::i#2 + [8] if((byte) main::i#1!=(byte) 4) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@1 + [9] return + to:@return diff --git a/src/test/ref/inline-asm-param.log b/src/test/ref/inline-asm-param.log new file mode 100644 index 000000000..4eaf2799f --- /dev/null +++ b/src/test/ref/inline-asm-param.log @@ -0,0 +1,326 @@ +Identified constant variable (byte*) SCREEN +Culled Empty Block (label) main::@2 + +CONTROL FLOW GRAPH SSA +@begin: scope:[] from + (byte*) SCREEN#0 ← ((byte*)) (number) $400 + to:@1 +main: scope:[main] from @1 + (byte) main::i#0 ← (byte) 0 + to:main::@1 +main::@1: scope:[main] from main main::@1 + (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) + asm { lda#'a' staSCREEN } + (byte) main::i#1 ← (byte) main::i#2 + rangenext(0,3) + (bool~) main::$0 ← (byte) main::i#1 != rangelast(0,3) + if((bool~) main::$0) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return +@1: scope:[] from @begin + call main + to:@2 +@2: scope:[] from @1 + to:@end +@end: scope:[] from @2 + +SYMBOL TABLE SSA +(label) @1 +(label) @2 +(label) @begin +(label) @end +(byte*) SCREEN +(byte*) SCREEN#0 +(void()) main() +(bool~) main::$0 +(label) main::@1 +(label) main::@return +(byte) main::i +(byte) main::i#0 +(byte) main::i#1 +(byte) main::i#2 + +Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (byte*) 1024 +Successful SSA optimization PassNCastSimplification +Simple Condition (bool~) main::$0 [6] if((byte) main::i#1!=rangelast(0,3)) goto main::@1 +Successful SSA optimization Pass2ConditionalJumpSimplification +Constant (const byte*) SCREEN#0 = (byte*) 1024 +Constant (const byte) main::i#0 = 0 +Successful SSA optimization Pass2ConstantIdentification +Resolved ranged next value [4] main::i#1 ← ++ main::i#2 to ++ +Resolved ranged comparison value [6] if(main::i#1!=rangelast(0,3)) goto main::@1 to (number) 4 +Adding number conversion cast (unumber) 4 in if((byte) main::i#1!=(number) 4) goto main::@1 +Successful SSA optimization PassNAddNumberTypeConversions +Simplifying constant integer cast 4 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (byte) 4 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Inlining constant with var siblings (const byte) main::i#0 +Constant inlined main::i#0 = (byte) 0 +Successful SSA optimization Pass2ConstantInlining +Added new block during phi lifting main::@3(between main::@1 and main::@1) +Adding NOP phi() at start of @begin +Adding NOP phi() at start of @1 +Adding NOP phi() at start of @2 +Adding NOP phi() at start of @end +Adding NOP phi() at start of main +CALL GRAPH +Calls in [] to main:2 + +Created 1 initial phi equivalence classes +Coalesced [11] main::i#3 ← main::i#1 +Coalesced down to 1 phi equivalence classes +Culled Empty Block (label) @2 +Culled Empty Block (label) main::@3 +Adding NOP phi() at start of @begin +Adding NOP phi() at start of @1 +Adding NOP phi() at start of @end +Adding NOP phi() at start of main + +FINAL CONTROL FLOW GRAPH +@begin: scope:[] from + [0] phi() + to:@1 +@1: scope:[] from @begin + [1] phi() + [2] call main + to:@end +@end: scope:[] from @1 + [3] phi() +main: scope:[main] from @1 + [4] phi() + to:main::@1 +main::@1: scope:[main] from main main::@1 + [5] (byte) main::i#2 ← phi( main/(byte) 0 main::@1/(byte) main::i#1 ) + asm { lda#'a' staSCREEN } + [7] (byte) main::i#1 ← ++ (byte) main::i#2 + [8] if((byte) main::i#1!=(byte) 4) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@1 + [9] return + to:@return + + +VARIABLE REGISTER WEIGHTS +(byte*) SCREEN +(void()) main() +(byte) main::i +(byte) main::i#1 16.5 +(byte) main::i#2 11.0 + +Initial phi equivalence classes +[ main::i#2 main::i#1 ] +Complete equivalence classes +[ main::i#2 main::i#1 ] +Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] + +INITIAL ASM +Target platform is c64basic + // File Comments + // Upstart +.pc = $801 "Basic" +:BasicUpstart(bbegin) +.pc = $80d "Program" + // Global Constants & labels + .label SCREEN = $400 + // @begin +bbegin: + // [1] phi from @begin to @1 [phi:@begin->@1] +b1_from_bbegin: + jmp b1 + // @1 +b1: + // [2] call main + // [4] phi from @1 to main [phi:@1->main] +main_from_b1: + jsr main + // [3] phi from @1 to @end [phi:@1->@end] +bend_from_b1: + jmp bend + // @end +bend: + // main +main: { + .label i = 2 + // [5] phi from main to main::@1 [phi:main->main::@1] + b1_from_main: + // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + lda #0 + sta.z i + jmp b1 + // [5] phi from main::@1 to main::@1 [phi:main::@1->main::@1] + b1_from_b1: + // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@1->main::@1#0] -- register_copy + jmp b1 + // main::@1 + b1: + // asm { lda#'a' staSCREEN } + lda #'a' + sta SCREEN + // [7] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 + inc.z i + // [8] if((byte) main::i#1!=(byte) 4) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #4 + cmp.z i + bne b1_from_b1 + jmp breturn + // main::@return + breturn: + // [9] return + rts +} + // File Data + +REGISTER UPLIFT POTENTIAL REGISTERS +Statement asm { lda#'a' staSCREEN } always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ] +Statement asm { lda#'a' staSCREEN } always clobbers reg byte a +Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y , + +REGISTER UPLIFT SCOPES +Uplift Scope [main] 27.5: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] +Uplift Scope [] + +Uplifting [main] best 253 combination reg byte x [ main::i#2 main::i#1 ] +Uplifting [] best 253 combination + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments + // Upstart +.pc = $801 "Basic" +:BasicUpstart(bbegin) +.pc = $80d "Program" + // Global Constants & labels + .label SCREEN = $400 + // @begin +bbegin: + // [1] phi from @begin to @1 [phi:@begin->@1] +b1_from_bbegin: + jmp b1 + // @1 +b1: + // [2] call main + // [4] phi from @1 to main [phi:@1->main] +main_from_b1: + jsr main + // [3] phi from @1 to @end [phi:@1->@end] +bend_from_b1: + jmp bend + // @end +bend: + // main +main: { + // [5] phi from main to main::@1 [phi:main->main::@1] + b1_from_main: + // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 + ldx #0 + jmp b1 + // [5] phi from main::@1 to main::@1 [phi:main::@1->main::@1] + b1_from_b1: + // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@1->main::@1#0] -- register_copy + jmp b1 + // main::@1 + b1: + // asm { lda#'a' staSCREEN } + lda #'a' + sta SCREEN + // [7] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx + inx + // [8] if((byte) main::i#1!=(byte) 4) goto main::@1 -- vbuxx_neq_vbuc1_then_la1 + cpx #4 + bne b1_from_b1 + jmp breturn + // main::@return + breturn: + // [9] return + rts +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp b1 +Removing instruction jmp bend +Removing instruction jmp b1 +Removing instruction jmp breturn +Succesful ASM optimization Pass5NextJumpElimination +Replacing label b1_from_b1 with b1 +Removing instruction b1_from_bbegin: +Removing instruction b1: +Removing instruction main_from_b1: +Removing instruction bend_from_b1: +Removing instruction b1_from_b1: +Succesful ASM optimization Pass5RedundantLabelElimination +Removing instruction bend: +Removing instruction b1_from_main: +Removing instruction breturn: +Succesful ASM optimization Pass5UnusedLabelElimination +Updating BasicUpstart to call main directly +Removing instruction jsr main +Succesful ASM optimization Pass5SkipBegin +Removing instruction jmp b1 +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction bbegin: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +(label) @1 +(label) @begin +(label) @end +(byte*) SCREEN +(const byte*) SCREEN#0 SCREEN = (byte*) 1024 +(void()) main() +(label) main::@1 +(label) main::@return +(byte) main::i +(byte) main::i#1 reg byte x 16.5 +(byte) main::i#2 reg byte x 11.0 + +reg byte x [ main::i#2 main::i#1 ] + + +FINAL ASSEMBLER +Score: 151 + + // File Comments + // Upstart +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" + // Global Constants & labels + .label SCREEN = $400 + // @begin + // [1] phi from @begin to @1 [phi:@begin->@1] + // @1 + // [2] call main + // [4] phi from @1 to main [phi:@1->main] + // [3] phi from @1 to @end [phi:@1->@end] + // @end + // main +main: { + // [5] phi from main to main::@1 [phi:main->main::@1] + // [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 + ldx #0 + // [5] phi from main::@1 to main::@1 [phi:main::@1->main::@1] + // [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@1->main::@1#0] -- register_copy + // main::@1 + b1: + // asm + // asm { lda#'a' staSCREEN } + lda #'a' + sta SCREEN + // for( byte i:0..3) + // [7] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx + inx + // [8] if((byte) main::i#1!=(byte) 4) goto main::@1 -- vbuxx_neq_vbuc1_then_la1 + cpx #4 + bne b1 + // main::@return + // } + // [9] return + rts +} + // File Data + diff --git a/src/test/ref/inline-asm-param.sym b/src/test/ref/inline-asm-param.sym new file mode 100644 index 000000000..1c18669a4 --- /dev/null +++ b/src/test/ref/inline-asm-param.sym @@ -0,0 +1,13 @@ +(label) @1 +(label) @begin +(label) @end +(byte*) SCREEN +(const byte*) SCREEN#0 SCREEN = (byte*) 1024 +(void()) main() +(label) main::@1 +(label) main::@return +(byte) main::i +(byte) main::i#1 reg byte x 16.5 +(byte) main::i#2 reg byte x 11.0 + +reg byte x [ main::i#2 main::i#1 ] diff --git a/src/test/ref/sinus-basic.asm b/src/test/ref/sinus-basic.asm index d13d6dccb..83f512d8d 100644 --- a/src/test/ref/sinus-basic.asm +++ b/src/test/ref/sinus-basic.asm @@ -10,9 +10,9 @@ main: { .label f_2pi = $e2e5 .label i = 2 lda #<$4fb - sta.z setFAC.w + sta.z setFAC.prepareMEM1_mem lda #>$4fb - sta.z setFAC.w+1 + sta.z setFAC.prepareMEM1_mem+1 jsr setFAC jsr divFACby10 lda #$19 - sta.z setFAC.w+1 + sta.z setFAC.prepareMEM1_mem+1 jsr setFAC jsr divMEMbyFAC jsr sinFAC @@ -143,9 +143,9 @@ getFAC: { .label return = 7 // Load FAC (floating point accumulator) integer part into word register Y,A jsr $b1aa - sty.z $fe - sta.z $ff - lda memLo + sty memLo + sta memHi + tya sta.z return lda memHi sta.z return+1 @@ -155,24 +155,14 @@ getFAC: { // Set FAC to MEM (float saved in memory) plus FAC (float accumulator) // Reads 5 bytes from memory addMEMtoFAC: { - lda #main.f_127 - sta.z prepareMEM.mem+1 - jsr prepareMEM - lda.z $fe - ldy.z $ff - jsr $b867 - rts -} -// Prepare MEM pointers for operations using MEM -// prepareMEM(byte* zeropage(7) mem) -prepareMEM: { - .label mem = 7 - lda.z mem + .const prepareMEM1_mem = main.f_127 + lda #prepareMEM1_mem sta memHi + lda memLo + ldy memHi + jsr $b867 rts } // FAC = MEM*FAC @@ -181,9 +171,12 @@ prepareMEM: { // mulFACbyMEM(byte* zeropage(7) mem) mulFACbyMEM: { .label mem = 7 - jsr prepareMEM - lda.z $fe - ldy.z $ff + lda.z mem + sta memLo + lda.z mem+1 + sta memHi + lda memLo + ldy memHi jsr $ba28 rts } @@ -198,13 +191,13 @@ sinFAC: { // Set FAC to MEM (float saved in memory) divided by FAC (float accumulator) // Reads 5 bytes from memory divMEMbyFAC: { - lda #main.f_i - sta.z prepareMEM.mem+1 - jsr prepareMEM - lda.z $fe - ldy.z $ff + .const prepareMEM1_mem = main.f_i + lda #prepareMEM1_mem + sta memHi + lda memLo + ldy memHi jsr $bb0f rts } @@ -212,11 +205,14 @@ divMEMbyFAC: { // Set the FAC (floating point accumulator) to the integer value of a 16bit word // setFAC(word zeropage(7) w) setFAC: { + .label prepareMEM1_mem = 7 .label w = 7 - jsr prepareMEM + lda.z prepareMEM1_mem + sta memLo + lda.z prepareMEM1_mem+1 + sta memHi // Load word register Y,A into FAC (floating point accumulator) - ldy.z $fe - lda.z $ff + ldy memLo jsr $b391 rts } @@ -226,9 +222,12 @@ setFAC: { // setMEMtoFAC(byte* zeropage(7) mem) setMEMtoFAC: { .label mem = 7 - jsr prepareMEM - ldx.z $fe - ldy.z $ff + lda.z mem + sta memLo + lda.z mem+1 + sta memHi + ldx memLo + tay jsr $bbd4 rts } diff --git a/src/test/ref/sinus-basic.cfg b/src/test/ref/sinus-basic.cfg index b6e6eaf38..adde0e513 100644 --- a/src/test/ref/sinus-basic.cfg +++ b/src/test/ref/sinus-basic.cfg @@ -124,7 +124,7 @@ print_char::@return: scope:[print_char] from print_char [59] return to:@return getFAC: scope:[getFAC] from main::@11 - asm { jsr$b1aa sty$fe sta$ff } + asm { jsr$b1aa stymemLo stamemHi } [61] (word) getFAC::return#0 ← *((const byte*) memHi#0) w= *((const byte*) memLo#0) to:getFAC::@return getFAC::@return: scope:[getFAC] from getFAC @@ -132,76 +132,84 @@ getFAC::@return: scope:[getFAC] from getFAC to:@return addMEMtoFAC: scope:[addMEMtoFAC] from main::@10 [63] phi() - [64] call prepareMEM + to:addMEMtoFAC::prepareMEM1 +addMEMtoFAC::prepareMEM1: scope:[addMEMtoFAC] from addMEMtoFAC + [64] *((const byte*) memLo#0) ← <(const word) addMEMtoFAC::prepareMEM1_mem#0 + [65] *((const byte*) memHi#0) ← >(const word) addMEMtoFAC::prepareMEM1_mem#0 to:addMEMtoFAC::@1 -addMEMtoFAC::@1: scope:[addMEMtoFAC] from addMEMtoFAC - asm { lda$fe ldy$ff jsr$b867 } +addMEMtoFAC::@1: scope:[addMEMtoFAC] from addMEMtoFAC::prepareMEM1 + asm { ldamemLo ldymemHi jsr$b867 } to:addMEMtoFAC::@return addMEMtoFAC::@return: scope:[addMEMtoFAC] from addMEMtoFAC::@1 - [66] return - to:@return -prepareMEM: scope:[prepareMEM] from addMEMtoFAC divMEMbyFAC mulFACbyMEM setFAC setMEMtoFAC - [67] (byte*) prepareMEM::mem#5 ← phi( addMEMtoFAC/(const byte[]) main::f_127#0 divMEMbyFAC/(const byte[]) main::f_i#0 mulFACbyMEM/(byte*) prepareMEM::mem#4 setFAC/(byte*) prepareMEM::mem#0 setMEMtoFAC/(byte*) prepareMEM::mem#1 ) - [68] (byte~) prepareMEM::$0 ← < (byte*) prepareMEM::mem#5 - [69] *((const byte*) memLo#0) ← (byte~) prepareMEM::$0 - [70] (byte~) prepareMEM::$1 ← > (byte*) prepareMEM::mem#5 - [71] *((const byte*) memHi#0) ← (byte~) prepareMEM::$1 - to:prepareMEM::@return -prepareMEM::@return: scope:[prepareMEM] from prepareMEM - [72] return + [67] return to:@return mulFACbyMEM: scope:[mulFACbyMEM] from main::@4 main::@9 - [73] (byte*) mulFACbyMEM::mem#2 ← phi( main::@9/(const byte[]) main::f_127#0 main::@4/(const byte*) main::f_2pi#0 ) - [74] (byte*) prepareMEM::mem#4 ← (byte*) mulFACbyMEM::mem#2 - [75] call prepareMEM + [68] (byte*) mulFACbyMEM::mem#2 ← phi( main::@9/(const byte[]) main::f_127#0 main::@4/(const byte*) main::f_2pi#0 ) + to:mulFACbyMEM::prepareMEM1 +mulFACbyMEM::prepareMEM1: scope:[mulFACbyMEM] from mulFACbyMEM + [69] (byte~) mulFACbyMEM::prepareMEM1_$0#0 ← < (word)(byte*) mulFACbyMEM::mem#2 + [70] *((const byte*) memLo#0) ← (byte~) mulFACbyMEM::prepareMEM1_$0#0 + [71] (byte~) mulFACbyMEM::prepareMEM1_$1#0 ← > (word)(byte*) mulFACbyMEM::mem#2 + [72] *((const byte*) memHi#0) ← (byte~) mulFACbyMEM::prepareMEM1_$1#0 to:mulFACbyMEM::@1 -mulFACbyMEM::@1: scope:[mulFACbyMEM] from mulFACbyMEM - asm { lda$fe ldy$ff jsr$ba28 } +mulFACbyMEM::@1: scope:[mulFACbyMEM] from mulFACbyMEM::prepareMEM1 + asm { ldamemLo ldymemHi jsr$ba28 } to:mulFACbyMEM::@return mulFACbyMEM::@return: scope:[mulFACbyMEM] from mulFACbyMEM::@1 - [77] return + [74] return to:@return sinFAC: scope:[sinFAC] from main::@8 asm { jsr$e26b } to:sinFAC::@return sinFAC::@return: scope:[sinFAC] from sinFAC - [79] return + [76] return to:@return divMEMbyFAC: scope:[divMEMbyFAC] from main::@7 - [80] phi() - [81] call prepareMEM + [77] phi() + to:divMEMbyFAC::prepareMEM1 +divMEMbyFAC::prepareMEM1: scope:[divMEMbyFAC] from divMEMbyFAC + [78] *((const byte*) memLo#0) ← <(const word) divMEMbyFAC::prepareMEM1_mem#0 + [79] *((const byte*) memHi#0) ← >(const word) divMEMbyFAC::prepareMEM1_mem#0 to:divMEMbyFAC::@1 -divMEMbyFAC::@1: scope:[divMEMbyFAC] from divMEMbyFAC - asm { lda$fe ldy$ff jsr$bb0f } +divMEMbyFAC::@1: scope:[divMEMbyFAC] from divMEMbyFAC::prepareMEM1 + asm { ldamemLo ldymemHi jsr$bb0f } to:divMEMbyFAC::@return divMEMbyFAC::@return: scope:[divMEMbyFAC] from divMEMbyFAC::@1 - [83] return + [81] return to:@return setFAC: scope:[setFAC] from main main::@1 main::@6 - [84] (word) setFAC::w#3 ← phi( main/(word) $4fb main::@1/(word) setFAC::w#1 main::@6/(byte) $19 ) - [85] (byte*) prepareMEM::mem#0 ← (byte*)(word) setFAC::w#3 - [86] call prepareMEM + [82] (word) setFAC::prepareMEM1_mem#0 ← phi( main/(word) $4fb main::@1/(word) setFAC::w#1 main::@6/(byte) $19 ) + to:setFAC::prepareMEM1 +setFAC::prepareMEM1: scope:[setFAC] from setFAC + [83] (byte~) setFAC::prepareMEM1_$0#0 ← < (word) setFAC::prepareMEM1_mem#0 + [84] *((const byte*) memLo#0) ← (byte~) setFAC::prepareMEM1_$0#0 + [85] (byte~) setFAC::prepareMEM1_$1#0 ← > (word) setFAC::prepareMEM1_mem#0 + [86] *((const byte*) memHi#0) ← (byte~) setFAC::prepareMEM1_$1#0 to:setFAC::@1 -setFAC::@1: scope:[setFAC] from setFAC - asm { ldy$fe lda$ff jsr$b391 } +setFAC::@1: scope:[setFAC] from setFAC::prepareMEM1 + asm { ldymemLo ldamemHi jsr$b391 } to:setFAC::@return setFAC::@return: scope:[setFAC] from setFAC::@1 [88] return to:@return setMEMtoFAC: scope:[setMEMtoFAC] from main::@3 main::@5 [89] (byte*) setMEMtoFAC::mem#2 ← phi( main::@3/(const byte[]) main::f_127#0 main::@5/(const byte[]) main::f_i#0 ) - [90] (byte*) prepareMEM::mem#1 ← (byte*) setMEMtoFAC::mem#2 - [91] call prepareMEM + to:setMEMtoFAC::prepareMEM1 +setMEMtoFAC::prepareMEM1: scope:[setMEMtoFAC] from setMEMtoFAC + [90] (byte~) setMEMtoFAC::prepareMEM1_$0#0 ← < (word)(byte*) setMEMtoFAC::mem#2 + [91] *((const byte*) memLo#0) ← (byte~) setMEMtoFAC::prepareMEM1_$0#0 + [92] (byte~) setMEMtoFAC::prepareMEM1_$1#0 ← > (word)(byte*) setMEMtoFAC::mem#2 + [93] *((const byte*) memHi#0) ← (byte~) setMEMtoFAC::prepareMEM1_$1#0 to:setMEMtoFAC::@1 -setMEMtoFAC::@1: scope:[setMEMtoFAC] from setMEMtoFAC - asm { ldx$fe ldy$ff jsr$bbd4 } +setMEMtoFAC::@1: scope:[setMEMtoFAC] from setMEMtoFAC::prepareMEM1 + asm { ldxmemLo ldymemHi jsr$bbd4 } to:setMEMtoFAC::@return setMEMtoFAC::@return: scope:[setMEMtoFAC] from setMEMtoFAC::@1 - [93] return + [95] return to:@return divFACby10: scope:[divFACby10] from main::@2 asm { jsr$bafe } to:divFACby10::@return divFACby10::@return: scope:[divFACby10] from divFACby10 - [95] return + [97] return to:@return diff --git a/src/test/ref/sinus-basic.log b/src/test/ref/sinus-basic.log index c8ac057d0..ff9aaff11 100644 --- a/src/test/ref/sinus-basic.log +++ b/src/test/ref/sinus-basic.log @@ -10,6 +10,15 @@ Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str) Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str) Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch Identified constant variable (byte*) HEAP_TOP +Inlined call call prepareMEM (word) setFAC::w +Inlined call call prepareMEM (word~) setMEMtoFAC::$0 +Inlined call call prepareMEM (word~) setFACtoMEM::$0 +Inlined call call prepareMEM (word~) setARGtoMEM::$0 +Inlined call call prepareMEM (word~) addMEMtoFAC::$0 +Inlined call call prepareMEM (word~) subFACfromMEM::$0 +Inlined call call prepareMEM (word~) divMEMbyFAC::$0 +Inlined call call prepareMEM (word~) mulFACbyMEM::$0 +Inlined call call prepareMEM (word~) pwrMEMbyFAC::$0 Culled Empty Block (label) @1 Culled Empty Block (label) @2 Culled Empty Block (label) @3 @@ -44,21 +53,26 @@ Culled Empty Block (label) @33 Culled Empty Block (label) @34 Culled Empty Block (label) @35 Culled Empty Block (label) @37 +Culled Empty Block (label) setFAC::prepareMEM1_@return Culled Empty Block (label) @38 Culled Empty Block (label) getFAC::@1 Culled Empty Block (label) @39 Culled Empty Block (label) @40 Culled Empty Block (label) @41 +Culled Empty Block (label) setMEMtoFAC::prepareMEM1_@return Culled Empty Block (label) @42 Culled Empty Block (label) @43 Culled Empty Block (label) @44 Culled Empty Block (label) @45 Culled Empty Block (label) @46 +Culled Empty Block (label) addMEMtoFAC::prepareMEM1_@return Culled Empty Block (label) @47 Culled Empty Block (label) @48 Culled Empty Block (label) @49 Culled Empty Block (label) @50 +Culled Empty Block (label) divMEMbyFAC::prepareMEM1_@return Culled Empty Block (label) @51 +Culled Empty Block (label) mulFACbyMEM::prepareMEM1_@return Culled Empty Block (label) @52 Culled Empty Block (label) @53 Culled Empty Block (label) @54 @@ -174,30 +188,25 @@ print_char::@return: scope:[print_char] from print_char (byte*) memLo#0 ← ((byte*)) (number) $fe (byte*) memHi#0 ← ((byte*)) (number) $ff to:@64 -prepareMEM: scope:[prepareMEM] from addMEMtoFAC divMEMbyFAC mulFACbyMEM setFAC setMEMtoFAC - (byte*) prepareMEM::mem#5 ← phi( addMEMtoFAC/(byte*) prepareMEM::mem#2 divMEMbyFAC/(byte*) prepareMEM::mem#3 mulFACbyMEM/(byte*) prepareMEM::mem#4 setFAC/(byte*) prepareMEM::mem#0 setMEMtoFAC/(byte*) prepareMEM::mem#1 ) - (byte~) prepareMEM::$0 ← < (byte*) prepareMEM::mem#5 - *((byte*) memLo#0) ← (byte~) prepareMEM::$0 - (byte~) prepareMEM::$1 ← > (byte*) prepareMEM::mem#5 - *((byte*) memHi#0) ← (byte~) prepareMEM::$1 - to:prepareMEM::@return -prepareMEM::@return: scope:[prepareMEM] from prepareMEM - return - to:@return setFAC: scope:[setFAC] from main main::@1 main::@8 (word) setFAC::w#3 ← phi( main/(word) setFAC::w#0 main::@1/(word) setFAC::w#1 main::@8/(word) setFAC::w#2 ) - (byte*~) setFAC::$0 ← ((byte*)) (word) setFAC::w#3 - (byte*) prepareMEM::mem#0 ← (byte*~) setFAC::$0 - call prepareMEM + (word) setFAC::prepareMEM1_mem#0 ← (word) setFAC::w#3 + to:setFAC::prepareMEM1 +setFAC::prepareMEM1: scope:[setFAC] from setFAC + (word) setFAC::prepareMEM1_mem#1 ← phi( setFAC/(word) setFAC::prepareMEM1_mem#0 ) + (byte~) setFAC::prepareMEM1_$0#0 ← < (word) setFAC::prepareMEM1_mem#1 + *((byte*) memLo#0) ← (byte~) setFAC::prepareMEM1_$0#0 + (byte~) setFAC::prepareMEM1_$1#0 ← > (word) setFAC::prepareMEM1_mem#1 + *((byte*) memHi#0) ← (byte~) setFAC::prepareMEM1_$1#0 to:setFAC::@1 -setFAC::@1: scope:[setFAC] from setFAC - asm { ldy$fe lda$ff jsr$b391 } +setFAC::@1: scope:[setFAC] from setFAC::prepareMEM1 + asm { ldymemLo ldamemHi jsr$b391 } to:setFAC::@return setFAC::@return: scope:[setFAC] from setFAC::@1 return to:@return getFAC: scope:[getFAC] from main::@13 - asm { jsr$b1aa sty$fe sta$ff } + asm { jsr$b1aa stymemLo stamemHi } (word) getFAC::w#0 ← ((word)) { *((byte*) memHi#0), *((byte*) memLo#0) } (word) getFAC::return#0 ← (word) getFAC::w#0 to:getFAC::@return @@ -208,44 +217,72 @@ getFAC::@return: scope:[getFAC] from getFAC to:@return setMEMtoFAC: scope:[setMEMtoFAC] from main::@4 main::@7 (byte*) setMEMtoFAC::mem#2 ← phi( main::@4/(byte*) setMEMtoFAC::mem#0 main::@7/(byte*) setMEMtoFAC::mem#1 ) - (byte*) prepareMEM::mem#1 ← (byte*) setMEMtoFAC::mem#2 - call prepareMEM + (word~) setMEMtoFAC::$0 ← ((word)) (byte*) setMEMtoFAC::mem#2 + (word) setMEMtoFAC::prepareMEM1_mem#0 ← (word~) setMEMtoFAC::$0 + to:setMEMtoFAC::prepareMEM1 +setMEMtoFAC::prepareMEM1: scope:[setMEMtoFAC] from setMEMtoFAC + (word) setMEMtoFAC::prepareMEM1_mem#1 ← phi( setMEMtoFAC/(word) setMEMtoFAC::prepareMEM1_mem#0 ) + (byte~) setMEMtoFAC::prepareMEM1_$0#0 ← < (word) setMEMtoFAC::prepareMEM1_mem#1 + *((byte*) memLo#0) ← (byte~) setMEMtoFAC::prepareMEM1_$0#0 + (byte~) setMEMtoFAC::prepareMEM1_$1#0 ← > (word) setMEMtoFAC::prepareMEM1_mem#1 + *((byte*) memHi#0) ← (byte~) setMEMtoFAC::prepareMEM1_$1#0 to:setMEMtoFAC::@1 -setMEMtoFAC::@1: scope:[setMEMtoFAC] from setMEMtoFAC - asm { ldx$fe ldy$ff jsr$bbd4 } +setMEMtoFAC::@1: scope:[setMEMtoFAC] from setMEMtoFAC::prepareMEM1 + asm { ldxmemLo ldymemHi jsr$bbd4 } to:setMEMtoFAC::@return setMEMtoFAC::@return: scope:[setMEMtoFAC] from setMEMtoFAC::@1 return to:@return addMEMtoFAC: scope:[addMEMtoFAC] from main::@12 (byte*) addMEMtoFAC::mem#1 ← phi( main::@12/(byte*) addMEMtoFAC::mem#0 ) - (byte*) prepareMEM::mem#2 ← (byte*) addMEMtoFAC::mem#1 - call prepareMEM + (word~) addMEMtoFAC::$0 ← ((word)) (byte*) addMEMtoFAC::mem#1 + (word) addMEMtoFAC::prepareMEM1_mem#0 ← (word~) addMEMtoFAC::$0 + to:addMEMtoFAC::prepareMEM1 +addMEMtoFAC::prepareMEM1: scope:[addMEMtoFAC] from addMEMtoFAC + (word) addMEMtoFAC::prepareMEM1_mem#1 ← phi( addMEMtoFAC/(word) addMEMtoFAC::prepareMEM1_mem#0 ) + (byte~) addMEMtoFAC::prepareMEM1_$0#0 ← < (word) addMEMtoFAC::prepareMEM1_mem#1 + *((byte*) memLo#0) ← (byte~) addMEMtoFAC::prepareMEM1_$0#0 + (byte~) addMEMtoFAC::prepareMEM1_$1#0 ← > (word) addMEMtoFAC::prepareMEM1_mem#1 + *((byte*) memHi#0) ← (byte~) addMEMtoFAC::prepareMEM1_$1#0 to:addMEMtoFAC::@1 -addMEMtoFAC::@1: scope:[addMEMtoFAC] from addMEMtoFAC - asm { lda$fe ldy$ff jsr$b867 } +addMEMtoFAC::@1: scope:[addMEMtoFAC] from addMEMtoFAC::prepareMEM1 + asm { ldamemLo ldymemHi jsr$b867 } to:addMEMtoFAC::@return addMEMtoFAC::@return: scope:[addMEMtoFAC] from addMEMtoFAC::@1 return to:@return divMEMbyFAC: scope:[divMEMbyFAC] from main::@9 (byte*) divMEMbyFAC::mem#1 ← phi( main::@9/(byte*) divMEMbyFAC::mem#0 ) - (byte*) prepareMEM::mem#3 ← (byte*) divMEMbyFAC::mem#1 - call prepareMEM + (word~) divMEMbyFAC::$0 ← ((word)) (byte*) divMEMbyFAC::mem#1 + (word) divMEMbyFAC::prepareMEM1_mem#0 ← (word~) divMEMbyFAC::$0 + to:divMEMbyFAC::prepareMEM1 +divMEMbyFAC::prepareMEM1: scope:[divMEMbyFAC] from divMEMbyFAC + (word) divMEMbyFAC::prepareMEM1_mem#1 ← phi( divMEMbyFAC/(word) divMEMbyFAC::prepareMEM1_mem#0 ) + (byte~) divMEMbyFAC::prepareMEM1_$0#0 ← < (word) divMEMbyFAC::prepareMEM1_mem#1 + *((byte*) memLo#0) ← (byte~) divMEMbyFAC::prepareMEM1_$0#0 + (byte~) divMEMbyFAC::prepareMEM1_$1#0 ← > (word) divMEMbyFAC::prepareMEM1_mem#1 + *((byte*) memHi#0) ← (byte~) divMEMbyFAC::prepareMEM1_$1#0 to:divMEMbyFAC::@1 -divMEMbyFAC::@1: scope:[divMEMbyFAC] from divMEMbyFAC - asm { lda$fe ldy$ff jsr$bb0f } +divMEMbyFAC::@1: scope:[divMEMbyFAC] from divMEMbyFAC::prepareMEM1 + asm { ldamemLo ldymemHi jsr$bb0f } to:divMEMbyFAC::@return divMEMbyFAC::@return: scope:[divMEMbyFAC] from divMEMbyFAC::@1 return to:@return mulFACbyMEM: scope:[mulFACbyMEM] from main::@11 main::@6 (byte*) mulFACbyMEM::mem#2 ← phi( main::@11/(byte*) mulFACbyMEM::mem#1 main::@6/(byte*) mulFACbyMEM::mem#0 ) - (byte*) prepareMEM::mem#4 ← (byte*) mulFACbyMEM::mem#2 - call prepareMEM + (word~) mulFACbyMEM::$0 ← ((word)) (byte*) mulFACbyMEM::mem#2 + (word) mulFACbyMEM::prepareMEM1_mem#0 ← (word~) mulFACbyMEM::$0 + to:mulFACbyMEM::prepareMEM1 +mulFACbyMEM::prepareMEM1: scope:[mulFACbyMEM] from mulFACbyMEM + (word) mulFACbyMEM::prepareMEM1_mem#1 ← phi( mulFACbyMEM/(word) mulFACbyMEM::prepareMEM1_mem#0 ) + (byte~) mulFACbyMEM::prepareMEM1_$0#0 ← < (word) mulFACbyMEM::prepareMEM1_mem#1 + *((byte*) memLo#0) ← (byte~) mulFACbyMEM::prepareMEM1_$0#0 + (byte~) mulFACbyMEM::prepareMEM1_$1#0 ← > (word) mulFACbyMEM::prepareMEM1_mem#1 + *((byte*) memHi#0) ← (byte~) mulFACbyMEM::prepareMEM1_$1#0 to:mulFACbyMEM::@1 -mulFACbyMEM::@1: scope:[mulFACbyMEM] from mulFACbyMEM - asm { lda$fe ldy$ff jsr$ba28 } +mulFACbyMEM::@1: scope:[mulFACbyMEM] from mulFACbyMEM::prepareMEM1 + asm { ldamemLo ldymemHi jsr$ba28 } to:mulFACbyMEM::@return mulFACbyMEM::@return: scope:[mulFACbyMEM] from mulFACbyMEM::@1 return @@ -410,19 +447,37 @@ SYMBOL TABLE SSA (const byte) RADIX::HEXADECIMAL = (number) $10 (const byte) RADIX::OCTAL = (number) 8 (void()) addMEMtoFAC((byte*) addMEMtoFAC::mem) +(word~) addMEMtoFAC::$0 (label) addMEMtoFAC::@1 (label) addMEMtoFAC::@return (byte*) addMEMtoFAC::mem (byte*) addMEMtoFAC::mem#0 (byte*) addMEMtoFAC::mem#1 +(label) addMEMtoFAC::prepareMEM1 +(byte~) addMEMtoFAC::prepareMEM1_$0 +(byte~) addMEMtoFAC::prepareMEM1_$0#0 +(byte~) addMEMtoFAC::prepareMEM1_$1 +(byte~) addMEMtoFAC::prepareMEM1_$1#0 +(word) addMEMtoFAC::prepareMEM1_mem +(word) addMEMtoFAC::prepareMEM1_mem#0 +(word) addMEMtoFAC::prepareMEM1_mem#1 (void()) divFACby10() (label) divFACby10::@return (void()) divMEMbyFAC((byte*) divMEMbyFAC::mem) +(word~) divMEMbyFAC::$0 (label) divMEMbyFAC::@1 (label) divMEMbyFAC::@return (byte*) divMEMbyFAC::mem (byte*) divMEMbyFAC::mem#0 (byte*) divMEMbyFAC::mem#1 +(label) divMEMbyFAC::prepareMEM1 +(byte~) divMEMbyFAC::prepareMEM1_$0 +(byte~) divMEMbyFAC::prepareMEM1_$0#0 +(byte~) divMEMbyFAC::prepareMEM1_$1 +(byte~) divMEMbyFAC::prepareMEM1_$1#0 +(word) divMEMbyFAC::prepareMEM1_mem +(word) divMEMbyFAC::prepareMEM1_mem#0 +(word) divMEMbyFAC::prepareMEM1_mem#1 (word()) getFAC() (label) getFAC::@return (word) getFAC::return @@ -479,23 +534,21 @@ SYMBOL TABLE SSA (byte*) memLo (byte*) memLo#0 (void()) mulFACbyMEM((byte*) mulFACbyMEM::mem) +(word~) mulFACbyMEM::$0 (label) mulFACbyMEM::@1 (label) mulFACbyMEM::@return (byte*) mulFACbyMEM::mem (byte*) mulFACbyMEM::mem#0 (byte*) mulFACbyMEM::mem#1 (byte*) mulFACbyMEM::mem#2 -(void()) prepareMEM((byte*) prepareMEM::mem) -(byte~) prepareMEM::$0 -(byte~) prepareMEM::$1 -(label) prepareMEM::@return -(byte*) prepareMEM::mem -(byte*) prepareMEM::mem#0 -(byte*) prepareMEM::mem#1 -(byte*) prepareMEM::mem#2 -(byte*) prepareMEM::mem#3 -(byte*) prepareMEM::mem#4 -(byte*) prepareMEM::mem#5 +(label) mulFACbyMEM::prepareMEM1 +(byte~) mulFACbyMEM::prepareMEM1_$0 +(byte~) mulFACbyMEM::prepareMEM1_$0#0 +(byte~) mulFACbyMEM::prepareMEM1_$1 +(byte~) mulFACbyMEM::prepareMEM1_$1#0 +(word) mulFACbyMEM::prepareMEM1_mem +(word) mulFACbyMEM::prepareMEM1_mem#0 +(word) mulFACbyMEM::prepareMEM1_mem#1 (void()) print_byte((byte) print_byte::b) (byte~) print_byte::$0 (number~) print_byte::$2 @@ -616,21 +669,37 @@ SYMBOL TABLE SSA (word) print_word::w#1 (word) print_word::w#2 (void()) setFAC((word) setFAC::w) -(byte*~) setFAC::$0 (label) setFAC::@1 (label) setFAC::@return +(label) setFAC::prepareMEM1 +(byte~) setFAC::prepareMEM1_$0 +(byte~) setFAC::prepareMEM1_$0#0 +(byte~) setFAC::prepareMEM1_$1 +(byte~) setFAC::prepareMEM1_$1#0 +(word) setFAC::prepareMEM1_mem +(word) setFAC::prepareMEM1_mem#0 +(word) setFAC::prepareMEM1_mem#1 (word) setFAC::w (word) setFAC::w#0 (word) setFAC::w#1 (word) setFAC::w#2 (word) setFAC::w#3 (void()) setMEMtoFAC((byte*) setMEMtoFAC::mem) +(word~) setMEMtoFAC::$0 (label) setMEMtoFAC::@1 (label) setMEMtoFAC::@return (byte*) setMEMtoFAC::mem (byte*) setMEMtoFAC::mem#0 (byte*) setMEMtoFAC::mem#1 (byte*) setMEMtoFAC::mem#2 +(label) setMEMtoFAC::prepareMEM1 +(byte~) setMEMtoFAC::prepareMEM1_$0 +(byte~) setMEMtoFAC::prepareMEM1_$0#0 +(byte~) setMEMtoFAC::prepareMEM1_$1 +(byte~) setMEMtoFAC::prepareMEM1_$1#0 +(word) setMEMtoFAC::prepareMEM1_mem +(word) setMEMtoFAC::prepareMEM1_mem#0 +(word) setMEMtoFAC::prepareMEM1_mem#1 (void()) sinFAC() (label) sinFAC::@return @@ -649,7 +718,10 @@ Successful SSA optimization PassNAddInitializerValueListTypeCasts Inlining cast (byte*) print_screen#0 ← (byte*)(number) $400 Inlining cast (byte*) memLo#0 ← (byte*)(number) $fe Inlining cast (byte*) memHi#0 ← (byte*)(number) $ff -Inlining cast (byte*~) setFAC::$0 ← (byte*)(word) setFAC::w#3 +Inlining cast (word~) setMEMtoFAC::$0 ← (word)(byte*) setMEMtoFAC::mem#2 +Inlining cast (word~) addMEMtoFAC::$0 ← (word)(byte*) addMEMtoFAC::mem#1 +Inlining cast (word~) divMEMbyFAC::$0 ← (word)(byte*) divMEMbyFAC::mem#1 +Inlining cast (word~) mulFACbyMEM::$0 ← (word)(byte*) mulFACbyMEM::mem#2 Inlining cast (byte*) main::f_2pi#0 ← (byte*)(number) $e2e5 Inlining cast (word) setFAC::w#0 ← (unumber)(number) $4fb Inlining cast (word~) main::$3 ← (word)(byte) main::i#2 @@ -695,8 +767,12 @@ Alias (byte) print_byte::b#2 = (byte) print_byte::b#3 Alias (byte*) print_char_cursor#20 = (byte*) print_char_cursor#6 Alias (byte*) print_char_cursor#21 = (byte*) print_char_cursor#7 (byte*) print_char_cursor#22 (byte*) print_char_cursor#8 Alias (byte*) print_char_cursor#10 = (byte*) print_char_cursor#24 (byte*) print_char_cursor#9 -Alias (byte*) prepareMEM::mem#0 = (byte*~) setFAC::$0 +Alias (word) setFAC::prepareMEM1_mem#0 = (word) setFAC::w#3 (word) setFAC::prepareMEM1_mem#1 Alias (word) getFAC::return#0 = (word) getFAC::w#0 (word~) getFAC::$0 (word) getFAC::return#3 (word) getFAC::return#1 +Alias (word) setMEMtoFAC::prepareMEM1_mem#0 = (word~) setMEMtoFAC::$0 (word) setMEMtoFAC::prepareMEM1_mem#1 +Alias (word) addMEMtoFAC::prepareMEM1_mem#0 = (word~) addMEMtoFAC::$0 (word) addMEMtoFAC::prepareMEM1_mem#1 +Alias (word) divMEMbyFAC::prepareMEM1_mem#0 = (word~) divMEMbyFAC::$0 (word) divMEMbyFAC::prepareMEM1_mem#1 +Alias (word) mulFACbyMEM::prepareMEM1_mem#0 = (word~) mulFACbyMEM::$0 (word) mulFACbyMEM::prepareMEM1_mem#1 Alias (byte*) print_char_cursor#45 = (byte*) print_char_cursor#47 (byte*) print_char_cursor#48 (byte*) print_char_cursor#46 Alias (byte*) print_line_cursor#27 = (byte*) print_line_cursor#29 (byte*) print_line_cursor#30 (byte*) print_line_cursor#28 Alias (word) setFAC::w#1 = (word~) main::$3 @@ -731,7 +807,7 @@ Identical Phi Values (byte*) print_char_cursor#14 (byte*) print_char_cursor#12 Identical Phi Values (byte*) print_line_cursor#11 (byte*) print_line_cursor#10 Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) print_ln::$1 [8] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#10) goto print_ln::@1 -Simple Condition (bool~) main::$15 [149] if((byte) main::i#1!=rangelast(1,$19)) goto main::@1 +Simple Condition (bool~) main::$15 [166] if((byte) main::i#1!=rangelast(1,$19)) goto main::@1 Successful SSA optimization Pass2ConditionalJumpSimplification Identified constant from value list (byte[]) { (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 } Identified constant from value list (byte[]) { (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 } @@ -754,19 +830,33 @@ Constant (const byte*) divMEMbyFAC::mem#0 = main::f_i#0 Constant (const byte*) mulFACbyMEM::mem#1 = main::f_127#0 Constant (const byte*) addMEMtoFAC::mem#0 = main::f_127#0 Successful SSA optimization Pass2ConstantIdentification -Constant (const byte*) prepareMEM::mem#2 = addMEMtoFAC::mem#0 -Constant (const byte*) prepareMEM::mem#3 = divMEMbyFAC::mem#0 -Successful SSA optimization Pass2ConstantIdentification -Resolved ranged next value [147] main::i#1 ← ++ main::i#10 to ++ -Resolved ranged comparison value [149] if(main::i#1!=rangelast(1,$19)) goto main::@1 to (number) $1a +Constant value identified (word)addMEMtoFAC::mem#0 in [81] (word) addMEMtoFAC::prepareMEM1_mem#0 ← (word)(const byte*) addMEMtoFAC::mem#0 +Constant value identified (word)divMEMbyFAC::mem#0 in [91] (word) divMEMbyFAC::prepareMEM1_mem#0 ← (word)(const byte*) divMEMbyFAC::mem#0 +Successful SSA optimization Pass2ConstantValues +Resolved ranged next value [164] main::i#1 ← ++ main::i#10 to ++ +Resolved ranged comparison value [166] if(main::i#1!=rangelast(1,$19)) goto main::@1 to (number) $1a Adding number conversion cast (unumber) $1a in if((byte) main::i#1!=(number) $1a) goto main::@1 Successful SSA optimization PassNAddNumberTypeConversions Simplifying constant integer cast $1a Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $1a Successful SSA optimization PassNFinalizeNumberTypeConversions -Inlining constant with var siblings (const byte*) prepareMEM::mem#2 -Inlining constant with var siblings (const byte*) prepareMEM::mem#3 +Constant (const word) addMEMtoFAC::prepareMEM1_mem#0 = (word)addMEMtoFAC::mem#0 +Constant (const word) divMEMbyFAC::prepareMEM1_mem#0 = (word)divMEMbyFAC::mem#0 +Successful SSA optimization Pass2ConstantIdentification +Constant right-side identified [39] (byte~) addMEMtoFAC::prepareMEM1_$0#0 ← < (const word) addMEMtoFAC::prepareMEM1_mem#0 +Constant right-side identified [41] (byte~) addMEMtoFAC::prepareMEM1_$1#0 ← > (const word) addMEMtoFAC::prepareMEM1_mem#0 +Constant right-side identified [45] (byte~) divMEMbyFAC::prepareMEM1_$0#0 ← < (const word) divMEMbyFAC::prepareMEM1_mem#0 +Constant right-side identified [47] (byte~) divMEMbyFAC::prepareMEM1_$1#0 ← > (const word) divMEMbyFAC::prepareMEM1_mem#0 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant (const byte) addMEMtoFAC::prepareMEM1_$0#0 = addMEMtoFAC::prepareMEM1_mem#0 +Constant (const byte) divMEMbyFAC::prepareMEM1_$0#0 = divMEMbyFAC::prepareMEM1_mem#0 +Successful SSA optimization Pass2ConstantIdentification +Inlining Noop Cast [32] (word) setMEMtoFAC::prepareMEM1_mem#0 ← (word)(byte*) setMEMtoFAC::mem#2 keeping setMEMtoFAC::mem#2 +Inlining Noop Cast [48] (word) mulFACbyMEM::prepareMEM1_mem#0 ← (word)(byte*) mulFACbyMEM::mem#2 keeping mulFACbyMEM::mem#2 +Successful SSA optimization Pass2NopCastInlining Inlining constant with var siblings (const word) setFAC::w#0 Inlining constant with var siblings (const word) setFAC::w#2 Inlining constant with var siblings (const byte*) setMEMtoFAC::mem#0 @@ -777,10 +867,12 @@ Inlining constant with var siblings (const byte) main::i#0 Inlining constant with var siblings (const byte*) print_char_cursor#0 Constant inlined addMEMtoFAC::mem#0 = (const byte[]) main::f_127#0 Constant inlined setFAC::w#2 = (byte) $19 -Constant inlined prepareMEM::mem#2 = (const byte[]) main::f_127#0 -Constant inlined prepareMEM::mem#3 = (const byte[]) main::f_i#0 Constant inlined $0 = (const byte[]) print_hextab#0 Constant inlined print_char_cursor#0 = (byte*) 1024 +Constant inlined addMEMtoFAC::prepareMEM1_$1#0 = >(const word) addMEMtoFAC::prepareMEM1_mem#0 +Constant inlined divMEMbyFAC::prepareMEM1_$1#0 = >(const word) divMEMbyFAC::prepareMEM1_mem#0 +Constant inlined addMEMtoFAC::prepareMEM1_$0#0 = <(const word) addMEMtoFAC::prepareMEM1_mem#0 +Constant inlined divMEMbyFAC::prepareMEM1_$0#0 = <(const word) divMEMbyFAC::prepareMEM1_mem#0 Constant inlined divMEMbyFAC::mem#0 = (const byte[]) main::f_i#0 Constant inlined main::i#0 = (byte) 1 Constant inlined setMEMtoFAC::mem#1 = (const byte[]) main::f_i#0 @@ -821,14 +913,9 @@ Calls in [] to main:5 Calls in [main] to setFAC:9 divFACby10:11 setMEMtoFAC:13 setFAC:18 mulFACbyMEM:20 setMEMtoFAC:22 setFAC:24 divMEMbyFAC:26 sinFAC:28 mulFACbyMEM:30 addMEMtoFAC:32 getFAC:34 print_word:37 print_ln:39 Calls in [print_word] to print_byte:56 print_byte:60 Calls in [print_byte] to print_char:68 print_char:73 -Calls in [addMEMtoFAC] to prepareMEM:84 -Calls in [mulFACbyMEM] to prepareMEM:96 -Calls in [divMEMbyFAC] to prepareMEM:102 -Calls in [setFAC] to prepareMEM:108 -Calls in [setMEMtoFAC] to prepareMEM:114 -Created 12 initial phi equivalence classes -Coalesced [17] setFAC::w#4 ← setFAC::w#1 +Created 11 initial phi equivalence classes +Coalesced [17] setFAC::prepareMEM1_mem#2 ← setFAC::w#1 Coalesced [43] main::i#14 ← main::i#1 Not coalescing [44] print_char_cursor#53 ← print_line_cursor#1 Coalesced [45] print_line_cursor#33 ← print_line_cursor#1 @@ -842,10 +929,7 @@ Coalesced [66] print_char::ch#3 ← print_char::ch#0 Coalesced [67] print_char_cursor#51 ← print_char_cursor#31 Coalesced [71] print_char::ch#4 ← print_char::ch#1 Coalesced (already) [72] print_char_cursor#52 ← print_char_cursor#10 -Coalesced [95] prepareMEM::mem#6 ← prepareMEM::mem#4 -Coalesced [107] prepareMEM::mem#7 ← prepareMEM::mem#0 -Coalesced [113] prepareMEM::mem#8 ← prepareMEM::mem#1 -Coalesced down to 9 phi equivalence classes +Coalesced down to 8 phi equivalence classes Culled Empty Block (label) @12 Culled Empty Block (label) @29 Culled Empty Block (label) @36 @@ -1016,7 +1100,7 @@ print_char::@return: scope:[print_char] from print_char [59] return to:@return getFAC: scope:[getFAC] from main::@11 - asm { jsr$b1aa sty$fe sta$ff } + asm { jsr$b1aa stymemLo stamemHi } [61] (word) getFAC::return#0 ← *((const byte*) memHi#0) w= *((const byte*) memLo#0) to:getFAC::@return getFAC::@return: scope:[getFAC] from getFAC @@ -1024,87 +1108,101 @@ getFAC::@return: scope:[getFAC] from getFAC to:@return addMEMtoFAC: scope:[addMEMtoFAC] from main::@10 [63] phi() - [64] call prepareMEM + to:addMEMtoFAC::prepareMEM1 +addMEMtoFAC::prepareMEM1: scope:[addMEMtoFAC] from addMEMtoFAC + [64] *((const byte*) memLo#0) ← <(const word) addMEMtoFAC::prepareMEM1_mem#0 + [65] *((const byte*) memHi#0) ← >(const word) addMEMtoFAC::prepareMEM1_mem#0 to:addMEMtoFAC::@1 -addMEMtoFAC::@1: scope:[addMEMtoFAC] from addMEMtoFAC - asm { lda$fe ldy$ff jsr$b867 } +addMEMtoFAC::@1: scope:[addMEMtoFAC] from addMEMtoFAC::prepareMEM1 + asm { ldamemLo ldymemHi jsr$b867 } to:addMEMtoFAC::@return addMEMtoFAC::@return: scope:[addMEMtoFAC] from addMEMtoFAC::@1 - [66] return - to:@return -prepareMEM: scope:[prepareMEM] from addMEMtoFAC divMEMbyFAC mulFACbyMEM setFAC setMEMtoFAC - [67] (byte*) prepareMEM::mem#5 ← phi( addMEMtoFAC/(const byte[]) main::f_127#0 divMEMbyFAC/(const byte[]) main::f_i#0 mulFACbyMEM/(byte*) prepareMEM::mem#4 setFAC/(byte*) prepareMEM::mem#0 setMEMtoFAC/(byte*) prepareMEM::mem#1 ) - [68] (byte~) prepareMEM::$0 ← < (byte*) prepareMEM::mem#5 - [69] *((const byte*) memLo#0) ← (byte~) prepareMEM::$0 - [70] (byte~) prepareMEM::$1 ← > (byte*) prepareMEM::mem#5 - [71] *((const byte*) memHi#0) ← (byte~) prepareMEM::$1 - to:prepareMEM::@return -prepareMEM::@return: scope:[prepareMEM] from prepareMEM - [72] return + [67] return to:@return mulFACbyMEM: scope:[mulFACbyMEM] from main::@4 main::@9 - [73] (byte*) mulFACbyMEM::mem#2 ← phi( main::@9/(const byte[]) main::f_127#0 main::@4/(const byte*) main::f_2pi#0 ) - [74] (byte*) prepareMEM::mem#4 ← (byte*) mulFACbyMEM::mem#2 - [75] call prepareMEM + [68] (byte*) mulFACbyMEM::mem#2 ← phi( main::@9/(const byte[]) main::f_127#0 main::@4/(const byte*) main::f_2pi#0 ) + to:mulFACbyMEM::prepareMEM1 +mulFACbyMEM::prepareMEM1: scope:[mulFACbyMEM] from mulFACbyMEM + [69] (byte~) mulFACbyMEM::prepareMEM1_$0#0 ← < (word)(byte*) mulFACbyMEM::mem#2 + [70] *((const byte*) memLo#0) ← (byte~) mulFACbyMEM::prepareMEM1_$0#0 + [71] (byte~) mulFACbyMEM::prepareMEM1_$1#0 ← > (word)(byte*) mulFACbyMEM::mem#2 + [72] *((const byte*) memHi#0) ← (byte~) mulFACbyMEM::prepareMEM1_$1#0 to:mulFACbyMEM::@1 -mulFACbyMEM::@1: scope:[mulFACbyMEM] from mulFACbyMEM - asm { lda$fe ldy$ff jsr$ba28 } +mulFACbyMEM::@1: scope:[mulFACbyMEM] from mulFACbyMEM::prepareMEM1 + asm { ldamemLo ldymemHi jsr$ba28 } to:mulFACbyMEM::@return mulFACbyMEM::@return: scope:[mulFACbyMEM] from mulFACbyMEM::@1 - [77] return + [74] return to:@return sinFAC: scope:[sinFAC] from main::@8 asm { jsr$e26b } to:sinFAC::@return sinFAC::@return: scope:[sinFAC] from sinFAC - [79] return + [76] return to:@return divMEMbyFAC: scope:[divMEMbyFAC] from main::@7 - [80] phi() - [81] call prepareMEM + [77] phi() + to:divMEMbyFAC::prepareMEM1 +divMEMbyFAC::prepareMEM1: scope:[divMEMbyFAC] from divMEMbyFAC + [78] *((const byte*) memLo#0) ← <(const word) divMEMbyFAC::prepareMEM1_mem#0 + [79] *((const byte*) memHi#0) ← >(const word) divMEMbyFAC::prepareMEM1_mem#0 to:divMEMbyFAC::@1 -divMEMbyFAC::@1: scope:[divMEMbyFAC] from divMEMbyFAC - asm { lda$fe ldy$ff jsr$bb0f } +divMEMbyFAC::@1: scope:[divMEMbyFAC] from divMEMbyFAC::prepareMEM1 + asm { ldamemLo ldymemHi jsr$bb0f } to:divMEMbyFAC::@return divMEMbyFAC::@return: scope:[divMEMbyFAC] from divMEMbyFAC::@1 - [83] return + [81] return to:@return setFAC: scope:[setFAC] from main main::@1 main::@6 - [84] (word) setFAC::w#3 ← phi( main/(word) $4fb main::@1/(word) setFAC::w#1 main::@6/(byte) $19 ) - [85] (byte*) prepareMEM::mem#0 ← (byte*)(word) setFAC::w#3 - [86] call prepareMEM + [82] (word) setFAC::prepareMEM1_mem#0 ← phi( main/(word) $4fb main::@1/(word) setFAC::w#1 main::@6/(byte) $19 ) + to:setFAC::prepareMEM1 +setFAC::prepareMEM1: scope:[setFAC] from setFAC + [83] (byte~) setFAC::prepareMEM1_$0#0 ← < (word) setFAC::prepareMEM1_mem#0 + [84] *((const byte*) memLo#0) ← (byte~) setFAC::prepareMEM1_$0#0 + [85] (byte~) setFAC::prepareMEM1_$1#0 ← > (word) setFAC::prepareMEM1_mem#0 + [86] *((const byte*) memHi#0) ← (byte~) setFAC::prepareMEM1_$1#0 to:setFAC::@1 -setFAC::@1: scope:[setFAC] from setFAC - asm { ldy$fe lda$ff jsr$b391 } +setFAC::@1: scope:[setFAC] from setFAC::prepareMEM1 + asm { ldymemLo ldamemHi jsr$b391 } to:setFAC::@return setFAC::@return: scope:[setFAC] from setFAC::@1 [88] return to:@return setMEMtoFAC: scope:[setMEMtoFAC] from main::@3 main::@5 [89] (byte*) setMEMtoFAC::mem#2 ← phi( main::@3/(const byte[]) main::f_127#0 main::@5/(const byte[]) main::f_i#0 ) - [90] (byte*) prepareMEM::mem#1 ← (byte*) setMEMtoFAC::mem#2 - [91] call prepareMEM + to:setMEMtoFAC::prepareMEM1 +setMEMtoFAC::prepareMEM1: scope:[setMEMtoFAC] from setMEMtoFAC + [90] (byte~) setMEMtoFAC::prepareMEM1_$0#0 ← < (word)(byte*) setMEMtoFAC::mem#2 + [91] *((const byte*) memLo#0) ← (byte~) setMEMtoFAC::prepareMEM1_$0#0 + [92] (byte~) setMEMtoFAC::prepareMEM1_$1#0 ← > (word)(byte*) setMEMtoFAC::mem#2 + [93] *((const byte*) memHi#0) ← (byte~) setMEMtoFAC::prepareMEM1_$1#0 to:setMEMtoFAC::@1 -setMEMtoFAC::@1: scope:[setMEMtoFAC] from setMEMtoFAC - asm { ldx$fe ldy$ff jsr$bbd4 } +setMEMtoFAC::@1: scope:[setMEMtoFAC] from setMEMtoFAC::prepareMEM1 + asm { ldxmemLo ldymemHi jsr$bbd4 } to:setMEMtoFAC::@return setMEMtoFAC::@return: scope:[setMEMtoFAC] from setMEMtoFAC::@1 - [93] return + [95] return to:@return divFACby10: scope:[divFACby10] from main::@2 asm { jsr$bafe } to:divFACby10::@return divFACby10::@return: scope:[divFACby10] from divFACby10 - [95] return + [97] return to:@return VARIABLE REGISTER WEIGHTS (void()) addMEMtoFAC((byte*) addMEMtoFAC::mem) (byte*) addMEMtoFAC::mem +(byte~) addMEMtoFAC::prepareMEM1_$0 +(byte~) addMEMtoFAC::prepareMEM1_$1 +(word) addMEMtoFAC::prepareMEM1_mem (void()) divFACby10() (void()) divMEMbyFAC((byte*) divMEMbyFAC::mem) (byte*) divMEMbyFAC::mem +(byte~) divMEMbyFAC::prepareMEM1_$0 +(byte~) divMEMbyFAC::prepareMEM1_$1 +(word) divMEMbyFAC::prepareMEM1_mem (word()) getFAC() (word) getFAC::return (word) getFAC::return#0 4.333333333333333 @@ -1121,15 +1219,12 @@ VARIABLE REGISTER WEIGHTS (byte*) memLo (void()) mulFACbyMEM((byte*) mulFACbyMEM::mem) (byte*) mulFACbyMEM::mem -(byte*) mulFACbyMEM::mem#2 2.0 -(void()) prepareMEM((byte*) prepareMEM::mem) -(byte~) prepareMEM::$0 4.0 -(byte~) prepareMEM::$1 4.0 -(byte*) prepareMEM::mem -(byte*) prepareMEM::mem#0 4.0 -(byte*) prepareMEM::mem#1 4.0 -(byte*) prepareMEM::mem#4 4.0 -(byte*) prepareMEM::mem#5 3.333333333333333 +(byte*) mulFACbyMEM::mem#2 +(byte~) mulFACbyMEM::prepareMEM1_$0 +(byte~) mulFACbyMEM::prepareMEM1_$0#0 4.0 +(byte~) mulFACbyMEM::prepareMEM1_$1 +(byte~) mulFACbyMEM::prepareMEM1_$1#0 4.0 +(word) mulFACbyMEM::prepareMEM1_mem (void()) print_byte((byte) print_byte::b) (byte~) print_byte::$0 4.0 (byte~) print_byte::$2 4.0 @@ -1159,12 +1254,22 @@ VARIABLE REGISTER WEIGHTS (word) print_word::w (word) print_word::w#0 5.0 (void()) setFAC((word) setFAC::w) +(byte~) setFAC::prepareMEM1_$0 +(byte~) setFAC::prepareMEM1_$0#0 4.0 +(byte~) setFAC::prepareMEM1_$1 +(byte~) setFAC::prepareMEM1_$1#0 4.0 +(word) setFAC::prepareMEM1_mem +(word) setFAC::prepareMEM1_mem#0 5.0 (word) setFAC::w (word) setFAC::w#1 22.0 -(word) setFAC::w#3 11.0 (void()) setMEMtoFAC((byte*) setMEMtoFAC::mem) (byte*) setMEMtoFAC::mem -(byte*) setMEMtoFAC::mem#2 2.0 +(byte*) setMEMtoFAC::mem#2 +(byte~) setMEMtoFAC::prepareMEM1_$0 +(byte~) setMEMtoFAC::prepareMEM1_$0#0 4.0 +(byte~) setMEMtoFAC::prepareMEM1_$1 +(byte~) setMEMtoFAC::prepareMEM1_$1#0 4.0 +(word) setMEMtoFAC::prepareMEM1_mem (void()) sinFAC() Initial phi equivalence classes @@ -1173,50 +1278,59 @@ Initial phi equivalence classes [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] [ print_char_cursor#23 print_char_cursor#31 print_char_cursor#32 print_char_cursor#53 print_char_cursor#10 ] -[ prepareMEM::mem#5 prepareMEM::mem#4 prepareMEM::mem#0 prepareMEM::mem#1 ] [ mulFACbyMEM::mem#2 ] -[ setFAC::w#3 setFAC::w#1 ] +[ setFAC::prepareMEM1_mem#0 setFAC::w#1 ] [ setMEMtoFAC::mem#2 ] Added variable getFAC::return#2 to zero page equivalence class [ getFAC::return#2 ] Added variable print_word::w#0 to zero page equivalence class [ print_word::w#0 ] Added variable print_byte::$0 to zero page equivalence class [ print_byte::$0 ] Added variable print_byte::$2 to zero page equivalence class [ print_byte::$2 ] Added variable getFAC::return#0 to zero page equivalence class [ getFAC::return#0 ] -Added variable prepareMEM::$0 to zero page equivalence class [ prepareMEM::$0 ] -Added variable prepareMEM::$1 to zero page equivalence class [ prepareMEM::$1 ] +Added variable mulFACbyMEM::prepareMEM1_$0#0 to zero page equivalence class [ mulFACbyMEM::prepareMEM1_$0#0 ] +Added variable mulFACbyMEM::prepareMEM1_$1#0 to zero page equivalence class [ mulFACbyMEM::prepareMEM1_$1#0 ] +Added variable setFAC::prepareMEM1_$0#0 to zero page equivalence class [ setFAC::prepareMEM1_$0#0 ] +Added variable setFAC::prepareMEM1_$1#0 to zero page equivalence class [ setFAC::prepareMEM1_$1#0 ] +Added variable setMEMtoFAC::prepareMEM1_$0#0 to zero page equivalence class [ setMEMtoFAC::prepareMEM1_$0#0 ] +Added variable setMEMtoFAC::prepareMEM1_$1#0 to zero page equivalence class [ setMEMtoFAC::prepareMEM1_$1#0 ] Complete equivalence classes [ main::i#10 main::i#1 ] [ print_line_cursor#6 print_line_cursor#13 print_line_cursor#1 ] [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] [ print_char_cursor#23 print_char_cursor#31 print_char_cursor#32 print_char_cursor#53 print_char_cursor#10 ] -[ prepareMEM::mem#5 prepareMEM::mem#4 prepareMEM::mem#0 prepareMEM::mem#1 ] [ mulFACbyMEM::mem#2 ] -[ setFAC::w#3 setFAC::w#1 ] +[ setFAC::prepareMEM1_mem#0 setFAC::w#1 ] [ setMEMtoFAC::mem#2 ] [ getFAC::return#2 ] [ print_word::w#0 ] [ print_byte::$0 ] [ print_byte::$2 ] [ getFAC::return#0 ] -[ prepareMEM::$0 ] -[ prepareMEM::$1 ] +[ mulFACbyMEM::prepareMEM1_$0#0 ] +[ mulFACbyMEM::prepareMEM1_$1#0 ] +[ setFAC::prepareMEM1_$0#0 ] +[ setFAC::prepareMEM1_$1#0 ] +[ setMEMtoFAC::prepareMEM1_$0#0 ] +[ setMEMtoFAC::prepareMEM1_$1#0 ] Allocated zp ZP_BYTE:2 [ main::i#10 main::i#1 ] Allocated zp ZP_WORD:3 [ print_line_cursor#6 print_line_cursor#13 print_line_cursor#1 ] Allocated zp ZP_BYTE:5 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] Allocated zp ZP_BYTE:6 [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] Allocated zp ZP_WORD:7 [ print_char_cursor#23 print_char_cursor#31 print_char_cursor#32 print_char_cursor#53 print_char_cursor#10 ] -Allocated zp ZP_WORD:9 [ prepareMEM::mem#5 prepareMEM::mem#4 prepareMEM::mem#0 prepareMEM::mem#1 ] -Allocated zp ZP_WORD:11 [ mulFACbyMEM::mem#2 ] -Allocated zp ZP_WORD:13 [ setFAC::w#3 setFAC::w#1 ] -Allocated zp ZP_WORD:15 [ setMEMtoFAC::mem#2 ] -Allocated zp ZP_WORD:17 [ getFAC::return#2 ] -Allocated zp ZP_WORD:19 [ print_word::w#0 ] -Allocated zp ZP_BYTE:21 [ print_byte::$0 ] -Allocated zp ZP_BYTE:22 [ print_byte::$2 ] -Allocated zp ZP_WORD:23 [ getFAC::return#0 ] -Allocated zp ZP_BYTE:25 [ prepareMEM::$0 ] -Allocated zp ZP_BYTE:26 [ prepareMEM::$1 ] +Allocated zp ZP_WORD:9 [ mulFACbyMEM::mem#2 ] +Allocated zp ZP_WORD:11 [ setFAC::prepareMEM1_mem#0 setFAC::w#1 ] +Allocated zp ZP_WORD:13 [ setMEMtoFAC::mem#2 ] +Allocated zp ZP_WORD:15 [ getFAC::return#2 ] +Allocated zp ZP_WORD:17 [ print_word::w#0 ] +Allocated zp ZP_BYTE:19 [ print_byte::$0 ] +Allocated zp ZP_BYTE:20 [ print_byte::$2 ] +Allocated zp ZP_WORD:21 [ getFAC::return#0 ] +Allocated zp ZP_BYTE:23 [ mulFACbyMEM::prepareMEM1_$0#0 ] +Allocated zp ZP_BYTE:24 [ mulFACbyMEM::prepareMEM1_$1#0 ] +Allocated zp ZP_BYTE:25 [ setFAC::prepareMEM1_$0#0 ] +Allocated zp ZP_BYTE:26 [ setFAC::prepareMEM1_$1#0 ] +Allocated zp ZP_BYTE:27 [ setMEMtoFAC::prepareMEM1_$0#0 ] +Allocated zp ZP_BYTE:28 [ setMEMtoFAC::prepareMEM1_$1#0 ] INITIAL ASM Target platform is c64basic @@ -1252,13 +1366,13 @@ main: { .label f_2pi = $e2e5 .label i = 2 // [5] call setFAC - // [84] phi from main to setFAC [phi:main->setFAC] + // [82] phi from main to setFAC [phi:main->setFAC] setFAC_from_main: - // [84] phi (word) setFAC::w#3 = (word) $4fb [phi:main->setFAC#0] -- vwuz1=vwuc1 + // [82] phi (word) setFAC::prepareMEM1_mem#0 = (word) $4fb [phi:main->setFAC#0] -- vwuz1=vwuc1 lda #<$4fb - sta.z setFAC.w + sta.z setFAC.prepareMEM1_mem lda #>$4fb - sta.z setFAC.w+1 + sta.z setFAC.prepareMEM1_mem+1 jsr setFAC // [6] phi from main to main::@2 [phi:main->main::@2] b2_from_main: @@ -1305,9 +1419,9 @@ main: { lda #0 sta.z setFAC.w+1 // [12] call setFAC - // [84] phi from main::@1 to setFAC [phi:main::@1->setFAC] + // [82] phi from main::@1 to setFAC [phi:main::@1->setFAC] setFAC_from_b1: - // [84] phi (word) setFAC::w#3 = (word) setFAC::w#1 [phi:main::@1->setFAC#0] -- register_copy + // [82] phi (word) setFAC::prepareMEM1_mem#0 = (word) setFAC::w#1 [phi:main::@1->setFAC#0] -- register_copy jsr setFAC // [13] phi from main::@1 to main::@4 [phi:main::@1->main::@4] b4_from_b1: @@ -1315,9 +1429,9 @@ main: { // main::@4 b4: // [14] call mulFACbyMEM - // [73] phi from main::@4 to mulFACbyMEM [phi:main::@4->mulFACbyMEM] + // [68] phi from main::@4 to mulFACbyMEM [phi:main::@4->mulFACbyMEM] mulFACbyMEM_from_b4: - // [73] phi (byte*) mulFACbyMEM::mem#2 = (const byte*) main::f_2pi#0 [phi:main::@4->mulFACbyMEM#0] -- pbuz1=pbuc1 + // [68] phi (byte*) mulFACbyMEM::mem#2 = (const byte*) main::f_2pi#0 [phi:main::@4->mulFACbyMEM#0] -- pbuz1=pbuc1 lda #f_2pi @@ -1343,13 +1457,13 @@ main: { // main::@6 b6: // [18] call setFAC - // [84] phi from main::@6 to setFAC [phi:main::@6->setFAC] + // [82] phi from main::@6 to setFAC [phi:main::@6->setFAC] setFAC_from_b6: - // [84] phi (word) setFAC::w#3 = (byte) $19 [phi:main::@6->setFAC#0] -- vwuz1=vbuc1 + // [82] phi (word) setFAC::prepareMEM1_mem#0 = (byte) $19 [phi:main::@6->setFAC#0] -- vwuz1=vbuc1 lda #<$19 - sta.z setFAC.w + sta.z setFAC.prepareMEM1_mem lda #>$19 - sta.z setFAC.w+1 + sta.z setFAC.prepareMEM1_mem+1 jsr setFAC // [19] phi from main::@6 to main::@7 [phi:main::@6->main::@7] b7_from_b6: @@ -1357,7 +1471,7 @@ main: { // main::@7 b7: // [20] call divMEMbyFAC - // [80] phi from main::@7 to divMEMbyFAC [phi:main::@7->divMEMbyFAC] + // [77] phi from main::@7 to divMEMbyFAC [phi:main::@7->divMEMbyFAC] divMEMbyFAC_from_b7: jsr divMEMbyFAC // [21] phi from main::@7 to main::@8 [phi:main::@7->main::@8] @@ -1373,9 +1487,9 @@ main: { // main::@9 b9: // [24] call mulFACbyMEM - // [73] phi from main::@9 to mulFACbyMEM [phi:main::@9->mulFACbyMEM] + // [68] phi from main::@9 to mulFACbyMEM [phi:main::@9->mulFACbyMEM] mulFACbyMEM_from_b9: - // [73] phi (byte*) mulFACbyMEM::mem#2 = (const byte[]) main::f_127#0 [phi:main::@9->mulFACbyMEM#0] -- pbuz1=pbuc1 + // [68] phi (byte*) mulFACbyMEM::mem#2 = (const byte[]) main::f_127#0 [phi:main::@9->mulFACbyMEM#0] -- pbuz1=pbuc1 lda #f_127 @@ -1486,9 +1600,9 @@ print_ln: { } // print_word // Print a word as HEX -// print_word(word zeropage($13) w) +// print_word(word zeropage($11) w) print_word: { - .label w = $13 + .label w = $11 // [43] (byte) print_byte::b#0 ← > (word) print_word::w#0 -- vbuz1=_hi_vwuz2 lda.z w+1 sta.z print_byte.b @@ -1520,8 +1634,8 @@ print_word: { // Print a byte as HEX // print_byte(byte zeropage(5) b) print_byte: { - .label _0 = $15 - .label _2 = $16 + .label _0 = $13 + .label _2 = $14 .label b = 5 // [49] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte) 4 -- vbuz1=vbuz2_ror_4 lda.z b @@ -1588,13 +1702,13 @@ print_char: { // Get the value of the FAC (floating point accumulator) as an integer 16bit word // Destroys the value in the FAC in the process getFAC: { - .label return = $17 - .label return_2 = $11 - // asm { jsr$b1aa sty$fe sta$ff } + .label return = $15 + .label return_2 = $f + // asm { jsr$b1aa stymemLo stamemHi } // Load FAC (floating point accumulator) integer part into word register Y,A jsr $b1aa - sty.z $fe - sta.z $ff + sty memLo + sta memHi // [61] (word) getFAC::return#0 ← *((const byte*) memHi#0) w= *((const byte*) memLo#0) -- vwuz1=_deref_pbuc1_word__deref_pbuc2 lda memLo sta.z return @@ -1611,81 +1725,64 @@ getFAC: { // Set FAC to MEM (float saved in memory) plus FAC (float accumulator) // Reads 5 bytes from memory addMEMtoFAC: { - // [64] call prepareMEM - // [67] phi from addMEMtoFAC to prepareMEM [phi:addMEMtoFAC->prepareMEM] - prepareMEM_from_addMEMtoFAC: - // [67] phi (byte*) prepareMEM::mem#5 = (const byte[]) main::f_127#0 [phi:addMEMtoFAC->prepareMEM#0] -- pbuz1=pbuc1 - lda #main.f_127 - sta.z prepareMEM.mem+1 - jsr prepareMEM + .const prepareMEM1_mem = main.f_127 + jmp prepareMEM1 + // addMEMtoFAC::prepareMEM1 + prepareMEM1: + // [64] *((const byte*) memLo#0) ← <(const word) addMEMtoFAC::prepareMEM1_mem#0 -- _deref_pbuc1=vbuc2 + lda #(const word) addMEMtoFAC::prepareMEM1_mem#0 -- _deref_pbuc1=vbuc2 + lda #>prepareMEM1_mem + sta memHi jmp b1 // addMEMtoFAC::@1 b1: - // asm { lda$fe ldy$ff jsr$b867 } - lda.z $fe - ldy.z $ff + // asm { ldamemLo ldymemHi jsr$b867 } + lda memLo + ldy memHi jsr $b867 jmp breturn // addMEMtoFAC::@return breturn: - // [66] return - rts -} - // prepareMEM -// Prepare MEM pointers for operations using MEM -// prepareMEM(byte* zeropage(9) mem) -prepareMEM: { - .label _0 = $19 - .label _1 = $1a - .label mem = 9 - // [68] (byte~) prepareMEM::$0 ← < (byte*) prepareMEM::mem#5 -- vbuz1=_lo_pbuz2 - lda.z mem - sta.z _0 - // [69] *((const byte*) memLo#0) ← (byte~) prepareMEM::$0 -- _deref_pbuc1=vbuz1 - lda.z _0 - sta memLo - // [70] (byte~) prepareMEM::$1 ← > (byte*) prepareMEM::mem#5 -- vbuz1=_hi_pbuz2 - lda.z mem+1 - sta.z _1 - // [71] *((const byte*) memHi#0) ← (byte~) prepareMEM::$1 -- _deref_pbuc1=vbuz1 - lda.z _1 - sta memHi - jmp breturn - // prepareMEM::@return - breturn: - // [72] return + // [67] return rts } // mulFACbyMEM // FAC = MEM*FAC // Set FAC to MEM (float saved in memory) multiplied by FAC (float accumulator) // Reads 5 bytes from memory -// mulFACbyMEM(byte* zeropage($b) mem) +// mulFACbyMEM(byte* zeropage(9) mem) mulFACbyMEM: { - .label mem = $b - // [74] (byte*) prepareMEM::mem#4 ← (byte*) mulFACbyMEM::mem#2 -- pbuz1=pbuz2 + .label prepareMEM1__0 = $17 + .label prepareMEM1__1 = $18 + .label mem = 9 + jmp prepareMEM1 + // mulFACbyMEM::prepareMEM1 + prepareMEM1: + // [69] (byte~) mulFACbyMEM::prepareMEM1_$0#0 ← < (word)(byte*) mulFACbyMEM::mem#2 -- vbuz1=_lo_vwuz2 lda.z mem - sta.z prepareMEM.mem + sta.z prepareMEM1__0 + // [70] *((const byte*) memLo#0) ← (byte~) mulFACbyMEM::prepareMEM1_$0#0 -- _deref_pbuc1=vbuz1 + lda.z prepareMEM1__0 + sta memLo + // [71] (byte~) mulFACbyMEM::prepareMEM1_$1#0 ← > (word)(byte*) mulFACbyMEM::mem#2 -- vbuz1=_hi_vwuz2 lda.z mem+1 - sta.z prepareMEM.mem+1 - // [75] call prepareMEM - // [67] phi from mulFACbyMEM to prepareMEM [phi:mulFACbyMEM->prepareMEM] - prepareMEM_from_mulFACbyMEM: - // [67] phi (byte*) prepareMEM::mem#5 = (byte*) prepareMEM::mem#4 [phi:mulFACbyMEM->prepareMEM#0] -- register_copy - jsr prepareMEM + sta.z prepareMEM1__1 + // [72] *((const byte*) memHi#0) ← (byte~) mulFACbyMEM::prepareMEM1_$1#0 -- _deref_pbuc1=vbuz1 + lda.z prepareMEM1__1 + sta memHi jmp b1 // mulFACbyMEM::@1 b1: - // asm { lda$fe ldy$ff jsr$ba28 } - lda.z $fe - ldy.z $ff + // asm { ldamemLo ldymemHi jsr$ba28 } + lda memLo + ldy memHi jsr $ba28 jmp breturn // mulFACbyMEM::@return breturn: - // [77] return + // [74] return rts } // sinFAC @@ -1698,7 +1795,7 @@ sinFAC: { jmp breturn // sinFAC::@return breturn: - // [79] return + // [76] return rts } // divMEMbyFAC @@ -1706,51 +1803,60 @@ sinFAC: { // Set FAC to MEM (float saved in memory) divided by FAC (float accumulator) // Reads 5 bytes from memory divMEMbyFAC: { - // [81] call prepareMEM - // [67] phi from divMEMbyFAC to prepareMEM [phi:divMEMbyFAC->prepareMEM] - prepareMEM_from_divMEMbyFAC: - // [67] phi (byte*) prepareMEM::mem#5 = (const byte[]) main::f_i#0 [phi:divMEMbyFAC->prepareMEM#0] -- pbuz1=pbuc1 - lda #main.f_i - sta.z prepareMEM.mem+1 - jsr prepareMEM + .const prepareMEM1_mem = main.f_i + jmp prepareMEM1 + // divMEMbyFAC::prepareMEM1 + prepareMEM1: + // [78] *((const byte*) memLo#0) ← <(const word) divMEMbyFAC::prepareMEM1_mem#0 -- _deref_pbuc1=vbuc2 + lda #(const word) divMEMbyFAC::prepareMEM1_mem#0 -- _deref_pbuc1=vbuc2 + lda #>prepareMEM1_mem + sta memHi jmp b1 // divMEMbyFAC::@1 b1: - // asm { lda$fe ldy$ff jsr$bb0f } - lda.z $fe - ldy.z $ff + // asm { ldamemLo ldymemHi jsr$bb0f } + lda memLo + ldy memHi jsr $bb0f jmp breturn // divMEMbyFAC::@return breturn: - // [83] return + // [81] return rts } // setFAC // FAC = word // Set the FAC (floating point accumulator) to the integer value of a 16bit word -// setFAC(word zeropage($d) w) +// setFAC(word zeropage($b) w) setFAC: { - .label w = $d - // [85] (byte*) prepareMEM::mem#0 ← (byte*)(word) setFAC::w#3 -- pbuz1=pbuz2 - lda.z w - sta.z prepareMEM.mem - lda.z w+1 - sta.z prepareMEM.mem+1 - // [86] call prepareMEM - // [67] phi from setFAC to prepareMEM [phi:setFAC->prepareMEM] - prepareMEM_from_setFAC: - // [67] phi (byte*) prepareMEM::mem#5 = (byte*) prepareMEM::mem#0 [phi:setFAC->prepareMEM#0] -- register_copy - jsr prepareMEM + .label prepareMEM1_mem = $b + .label prepareMEM1__0 = $19 + .label prepareMEM1__1 = $1a + .label w = $b + jmp prepareMEM1 + // setFAC::prepareMEM1 + prepareMEM1: + // [83] (byte~) setFAC::prepareMEM1_$0#0 ← < (word) setFAC::prepareMEM1_mem#0 -- vbuz1=_lo_vwuz2 + lda.z prepareMEM1_mem + sta.z prepareMEM1__0 + // [84] *((const byte*) memLo#0) ← (byte~) setFAC::prepareMEM1_$0#0 -- _deref_pbuc1=vbuz1 + lda.z prepareMEM1__0 + sta memLo + // [85] (byte~) setFAC::prepareMEM1_$1#0 ← > (word) setFAC::prepareMEM1_mem#0 -- vbuz1=_hi_vwuz2 + lda.z prepareMEM1_mem+1 + sta.z prepareMEM1__1 + // [86] *((const byte*) memHi#0) ← (byte~) setFAC::prepareMEM1_$1#0 -- _deref_pbuc1=vbuz1 + lda.z prepareMEM1__1 + sta memHi jmp b1 // setFAC::@1 b1: - // asm { ldy$fe lda$ff jsr$b391 } + // asm { ldymemLo ldamemHi jsr$b391 } // Load word register Y,A into FAC (floating point accumulator) - ldy.z $fe - lda.z $ff + ldy memLo + lda memHi jsr $b391 jmp breturn // setFAC::@return @@ -1762,30 +1868,37 @@ setFAC: { // MEM = FAC // Stores the value of the FAC to memory // Stores 5 bytes (means it is necessary to allocate 5 bytes to avoid clobbering other data using eg. byte[] mem = {0, 0, 0, 0, 0};) -// setMEMtoFAC(byte* zeropage($f) mem) +// setMEMtoFAC(byte* zeropage($d) mem) setMEMtoFAC: { - .label mem = $f - // [90] (byte*) prepareMEM::mem#1 ← (byte*) setMEMtoFAC::mem#2 -- pbuz1=pbuz2 + .label prepareMEM1__0 = $1b + .label prepareMEM1__1 = $1c + .label mem = $d + jmp prepareMEM1 + // setMEMtoFAC::prepareMEM1 + prepareMEM1: + // [90] (byte~) setMEMtoFAC::prepareMEM1_$0#0 ← < (word)(byte*) setMEMtoFAC::mem#2 -- vbuz1=_lo_vwuz2 lda.z mem - sta.z prepareMEM.mem + sta.z prepareMEM1__0 + // [91] *((const byte*) memLo#0) ← (byte~) setMEMtoFAC::prepareMEM1_$0#0 -- _deref_pbuc1=vbuz1 + lda.z prepareMEM1__0 + sta memLo + // [92] (byte~) setMEMtoFAC::prepareMEM1_$1#0 ← > (word)(byte*) setMEMtoFAC::mem#2 -- vbuz1=_hi_vwuz2 lda.z mem+1 - sta.z prepareMEM.mem+1 - // [91] call prepareMEM - // [67] phi from setMEMtoFAC to prepareMEM [phi:setMEMtoFAC->prepareMEM] - prepareMEM_from_setMEMtoFAC: - // [67] phi (byte*) prepareMEM::mem#5 = (byte*) prepareMEM::mem#1 [phi:setMEMtoFAC->prepareMEM#0] -- register_copy - jsr prepareMEM + sta.z prepareMEM1__1 + // [93] *((const byte*) memHi#0) ← (byte~) setMEMtoFAC::prepareMEM1_$1#0 -- _deref_pbuc1=vbuz1 + lda.z prepareMEM1__1 + sta memHi jmp b1 // setMEMtoFAC::@1 b1: - // asm { ldx$fe ldy$ff jsr$bbd4 } - ldx.z $fe - ldy.z $ff + // asm { ldxmemLo ldymemHi jsr$bbd4 } + ldx memLo + ldy memHi jsr $bbd4 jmp breturn // setMEMtoFAC::@return breturn: - // [93] return + // [95] return rts } // divFACby10 @@ -1797,7 +1910,7 @@ divFACby10: { jmp breturn // divFACby10::@return breturn: - // [95] return + // [97] return rts } // File Data @@ -1819,18 +1932,25 @@ Statement [52] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f [ p Statement [57] *((byte*) print_char_cursor#23) ← (byte) print_char::ch#2 [ print_char_cursor#23 ] ( main:2::print_word:31::print_byte:44::print_char:51 [ main::i#10 print_line_cursor#13 print_word::w#0 print_byte::b#2 print_char_cursor#23 ] main:2::print_word:31::print_byte:46::print_char:51 [ main::i#10 print_line_cursor#13 print_byte::b#2 print_char_cursor#23 ] main:2::print_word:31::print_byte:44::print_char:54 [ main::i#10 print_line_cursor#13 print_word::w#0 print_char_cursor#23 ] main:2::print_word:31::print_byte:46::print_char:54 [ main::i#10 print_line_cursor#13 print_char_cursor#23 ] ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:2 [ main::i#10 main::i#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:5 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] -Statement asm { jsr$b1aa sty$fe sta$ff } always clobbers reg byte a reg byte x reg byte y +Statement asm { jsr$b1aa stymemLo stamemHi } always clobbers reg byte a reg byte x reg byte y Removing always clobbered register reg byte x as potential for zp ZP_BYTE:2 [ main::i#10 main::i#1 ] Statement [61] (word) getFAC::return#0 ← *((const byte*) memHi#0) w= *((const byte*) memLo#0) [ getFAC::return#0 ] ( main:2::getFAC:28 [ main::i#10 print_char_cursor#32 print_line_cursor#13 getFAC::return#0 ] ) always clobbers reg byte a -Statement asm { lda$fe ldy$ff jsr$b867 } always clobbers reg byte a reg byte x reg byte y -Statement [74] (byte*) prepareMEM::mem#4 ← (byte*) mulFACbyMEM::mem#2 [ prepareMEM::mem#4 ] ( main:2::mulFACbyMEM:14 [ main::i#10 print_char_cursor#32 print_line_cursor#13 prepareMEM::mem#4 ] main:2::mulFACbyMEM:24 [ main::i#10 print_char_cursor#32 print_line_cursor#13 prepareMEM::mem#4 ] ) always clobbers reg byte a -Statement asm { lda$fe ldy$ff jsr$ba28 } always clobbers reg byte a reg byte x reg byte y +Statement [64] *((const byte*) memLo#0) ← <(const word) addMEMtoFAC::prepareMEM1_mem#0 [ ] ( main:2::addMEMtoFAC:26 [ main::i#10 print_char_cursor#32 print_line_cursor#13 ] ) always clobbers reg byte a +Statement [65] *((const byte*) memHi#0) ← >(const word) addMEMtoFAC::prepareMEM1_mem#0 [ ] ( main:2::addMEMtoFAC:26 [ main::i#10 print_char_cursor#32 print_line_cursor#13 ] ) always clobbers reg byte a +Statement asm { ldamemLo ldymemHi jsr$b867 } always clobbers reg byte a reg byte x reg byte y +Statement [69] (byte~) mulFACbyMEM::prepareMEM1_$0#0 ← < (word)(byte*) mulFACbyMEM::mem#2 [ mulFACbyMEM::mem#2 mulFACbyMEM::prepareMEM1_$0#0 ] ( main:2::mulFACbyMEM:14 [ main::i#10 print_char_cursor#32 print_line_cursor#13 mulFACbyMEM::mem#2 mulFACbyMEM::prepareMEM1_$0#0 ] main:2::mulFACbyMEM:24 [ main::i#10 print_char_cursor#32 print_line_cursor#13 mulFACbyMEM::mem#2 mulFACbyMEM::prepareMEM1_$0#0 ] ) always clobbers reg byte a +Statement [71] (byte~) mulFACbyMEM::prepareMEM1_$1#0 ← > (word)(byte*) mulFACbyMEM::mem#2 [ mulFACbyMEM::prepareMEM1_$1#0 ] ( main:2::mulFACbyMEM:14 [ main::i#10 print_char_cursor#32 print_line_cursor#13 mulFACbyMEM::prepareMEM1_$1#0 ] main:2::mulFACbyMEM:24 [ main::i#10 print_char_cursor#32 print_line_cursor#13 mulFACbyMEM::prepareMEM1_$1#0 ] ) always clobbers reg byte a +Statement asm { ldamemLo ldymemHi jsr$ba28 } always clobbers reg byte a reg byte x reg byte y Statement asm { jsr$e26b } always clobbers reg byte a reg byte x reg byte y -Statement asm { lda$fe ldy$ff jsr$bb0f } always clobbers reg byte a reg byte x reg byte y -Statement [85] (byte*) prepareMEM::mem#0 ← (byte*)(word) setFAC::w#3 [ prepareMEM::mem#0 ] ( main:2::setFAC:5 [ prepareMEM::mem#0 ] main:2::setFAC:12 [ main::i#10 print_char_cursor#32 print_line_cursor#13 prepareMEM::mem#0 ] main:2::setFAC:18 [ main::i#10 print_char_cursor#32 print_line_cursor#13 prepareMEM::mem#0 ] ) always clobbers reg byte a -Statement asm { ldy$fe lda$ff jsr$b391 } always clobbers reg byte a reg byte x reg byte y -Statement [90] (byte*) prepareMEM::mem#1 ← (byte*) setMEMtoFAC::mem#2 [ prepareMEM::mem#1 ] ( main:2::setMEMtoFAC:9 [ prepareMEM::mem#1 ] main:2::setMEMtoFAC:16 [ main::i#10 print_char_cursor#32 print_line_cursor#13 prepareMEM::mem#1 ] ) always clobbers reg byte a -Statement asm { ldx$fe ldy$ff jsr$bbd4 } always clobbers reg byte a reg byte x reg byte y +Statement [78] *((const byte*) memLo#0) ← <(const word) divMEMbyFAC::prepareMEM1_mem#0 [ ] ( main:2::divMEMbyFAC:20 [ main::i#10 print_char_cursor#32 print_line_cursor#13 ] ) always clobbers reg byte a +Statement [79] *((const byte*) memHi#0) ← >(const word) divMEMbyFAC::prepareMEM1_mem#0 [ ] ( main:2::divMEMbyFAC:20 [ main::i#10 print_char_cursor#32 print_line_cursor#13 ] ) always clobbers reg byte a +Statement asm { ldamemLo ldymemHi jsr$bb0f } always clobbers reg byte a reg byte x reg byte y +Statement [83] (byte~) setFAC::prepareMEM1_$0#0 ← < (word) setFAC::prepareMEM1_mem#0 [ setFAC::prepareMEM1_mem#0 setFAC::prepareMEM1_$0#0 ] ( main:2::setFAC:5 [ setFAC::prepareMEM1_mem#0 setFAC::prepareMEM1_$0#0 ] main:2::setFAC:12 [ main::i#10 print_char_cursor#32 print_line_cursor#13 setFAC::prepareMEM1_mem#0 setFAC::prepareMEM1_$0#0 ] main:2::setFAC:18 [ main::i#10 print_char_cursor#32 print_line_cursor#13 setFAC::prepareMEM1_mem#0 setFAC::prepareMEM1_$0#0 ] ) always clobbers reg byte a +Statement [85] (byte~) setFAC::prepareMEM1_$1#0 ← > (word) setFAC::prepareMEM1_mem#0 [ setFAC::prepareMEM1_$1#0 ] ( main:2::setFAC:5 [ setFAC::prepareMEM1_$1#0 ] main:2::setFAC:12 [ main::i#10 print_char_cursor#32 print_line_cursor#13 setFAC::prepareMEM1_$1#0 ] main:2::setFAC:18 [ main::i#10 print_char_cursor#32 print_line_cursor#13 setFAC::prepareMEM1_$1#0 ] ) always clobbers reg byte a +Statement asm { ldymemLo ldamemHi jsr$b391 } always clobbers reg byte a reg byte x reg byte y +Statement [90] (byte~) setMEMtoFAC::prepareMEM1_$0#0 ← < (word)(byte*) setMEMtoFAC::mem#2 [ setMEMtoFAC::mem#2 setMEMtoFAC::prepareMEM1_$0#0 ] ( main:2::setMEMtoFAC:9 [ setMEMtoFAC::mem#2 setMEMtoFAC::prepareMEM1_$0#0 ] main:2::setMEMtoFAC:16 [ main::i#10 print_char_cursor#32 print_line_cursor#13 setMEMtoFAC::mem#2 setMEMtoFAC::prepareMEM1_$0#0 ] ) always clobbers reg byte a +Statement [92] (byte~) setMEMtoFAC::prepareMEM1_$1#0 ← > (word)(byte*) setMEMtoFAC::mem#2 [ setMEMtoFAC::prepareMEM1_$1#0 ] ( main:2::setMEMtoFAC:9 [ setMEMtoFAC::prepareMEM1_$1#0 ] main:2::setMEMtoFAC:16 [ main::i#10 print_char_cursor#32 print_line_cursor#13 setMEMtoFAC::prepareMEM1_$1#0 ] ) always clobbers reg byte a +Statement asm { ldxmemLo ldymemHi jsr$bbd4 } always clobbers reg byte a reg byte x reg byte y Statement asm { jsr$bafe } always clobbers reg byte a reg byte x reg byte y Statement [11] (word) setFAC::w#1 ← (word)(byte) main::i#10 [ main::i#10 print_char_cursor#32 print_line_cursor#13 setFAC::w#1 ] ( main:2 [ main::i#10 print_char_cursor#32 print_line_cursor#13 setFAC::w#1 ] ) always clobbers reg byte a Statement [29] (word) getFAC::return#2 ← (word) getFAC::return#0 [ main::i#10 print_char_cursor#32 print_line_cursor#13 getFAC::return#2 ] ( main:2 [ main::i#10 print_char_cursor#32 print_line_cursor#13 getFAC::return#2 ] ) always clobbers reg byte a @@ -1844,46 +1964,55 @@ Statement [45] (byte) print_byte::b#1 ← < (word) print_word::w#0 [ print_char_ Statement [49] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte) 4 [ print_byte::b#2 print_char_cursor#31 print_byte::$0 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 print_line_cursor#13 print_word::w#0 print_byte::b#2 print_char_cursor#31 print_byte::$0 ] main:2::print_word:31::print_byte:46 [ main::i#10 print_line_cursor#13 print_byte::b#2 print_char_cursor#31 print_byte::$0 ] ) always clobbers reg byte a Statement [52] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f [ print_char_cursor#10 print_byte::$2 ] ( main:2::print_word:31::print_byte:44 [ main::i#10 print_line_cursor#13 print_word::w#0 print_char_cursor#10 print_byte::$2 ] main:2::print_word:31::print_byte:46 [ main::i#10 print_line_cursor#13 print_char_cursor#10 print_byte::$2 ] ) always clobbers reg byte a Statement [57] *((byte*) print_char_cursor#23) ← (byte) print_char::ch#2 [ print_char_cursor#23 ] ( main:2::print_word:31::print_byte:44::print_char:51 [ main::i#10 print_line_cursor#13 print_word::w#0 print_byte::b#2 print_char_cursor#23 ] main:2::print_word:31::print_byte:46::print_char:51 [ main::i#10 print_line_cursor#13 print_byte::b#2 print_char_cursor#23 ] main:2::print_word:31::print_byte:44::print_char:54 [ main::i#10 print_line_cursor#13 print_word::w#0 print_char_cursor#23 ] main:2::print_word:31::print_byte:46::print_char:54 [ main::i#10 print_line_cursor#13 print_char_cursor#23 ] ) always clobbers reg byte y -Statement asm { jsr$b1aa sty$fe sta$ff } always clobbers reg byte a reg byte x reg byte y +Statement asm { jsr$b1aa stymemLo stamemHi } always clobbers reg byte a reg byte x reg byte y Statement [61] (word) getFAC::return#0 ← *((const byte*) memHi#0) w= *((const byte*) memLo#0) [ getFAC::return#0 ] ( main:2::getFAC:28 [ main::i#10 print_char_cursor#32 print_line_cursor#13 getFAC::return#0 ] ) always clobbers reg byte a -Statement asm { lda$fe ldy$ff jsr$b867 } always clobbers reg byte a reg byte x reg byte y -Statement [74] (byte*) prepareMEM::mem#4 ← (byte*) mulFACbyMEM::mem#2 [ prepareMEM::mem#4 ] ( main:2::mulFACbyMEM:14 [ main::i#10 print_char_cursor#32 print_line_cursor#13 prepareMEM::mem#4 ] main:2::mulFACbyMEM:24 [ main::i#10 print_char_cursor#32 print_line_cursor#13 prepareMEM::mem#4 ] ) always clobbers reg byte a -Statement asm { lda$fe ldy$ff jsr$ba28 } always clobbers reg byte a reg byte x reg byte y +Statement [64] *((const byte*) memLo#0) ← <(const word) addMEMtoFAC::prepareMEM1_mem#0 [ ] ( main:2::addMEMtoFAC:26 [ main::i#10 print_char_cursor#32 print_line_cursor#13 ] ) always clobbers reg byte a +Statement [65] *((const byte*) memHi#0) ← >(const word) addMEMtoFAC::prepareMEM1_mem#0 [ ] ( main:2::addMEMtoFAC:26 [ main::i#10 print_char_cursor#32 print_line_cursor#13 ] ) always clobbers reg byte a +Statement asm { ldamemLo ldymemHi jsr$b867 } always clobbers reg byte a reg byte x reg byte y +Statement [69] (byte~) mulFACbyMEM::prepareMEM1_$0#0 ← < (word)(byte*) mulFACbyMEM::mem#2 [ mulFACbyMEM::mem#2 mulFACbyMEM::prepareMEM1_$0#0 ] ( main:2::mulFACbyMEM:14 [ main::i#10 print_char_cursor#32 print_line_cursor#13 mulFACbyMEM::mem#2 mulFACbyMEM::prepareMEM1_$0#0 ] main:2::mulFACbyMEM:24 [ main::i#10 print_char_cursor#32 print_line_cursor#13 mulFACbyMEM::mem#2 mulFACbyMEM::prepareMEM1_$0#0 ] ) always clobbers reg byte a +Statement [71] (byte~) mulFACbyMEM::prepareMEM1_$1#0 ← > (word)(byte*) mulFACbyMEM::mem#2 [ mulFACbyMEM::prepareMEM1_$1#0 ] ( main:2::mulFACbyMEM:14 [ main::i#10 print_char_cursor#32 print_line_cursor#13 mulFACbyMEM::prepareMEM1_$1#0 ] main:2::mulFACbyMEM:24 [ main::i#10 print_char_cursor#32 print_line_cursor#13 mulFACbyMEM::prepareMEM1_$1#0 ] ) always clobbers reg byte a +Statement asm { ldamemLo ldymemHi jsr$ba28 } always clobbers reg byte a reg byte x reg byte y Statement asm { jsr$e26b } always clobbers reg byte a reg byte x reg byte y -Statement asm { lda$fe ldy$ff jsr$bb0f } always clobbers reg byte a reg byte x reg byte y -Statement [85] (byte*) prepareMEM::mem#0 ← (byte*)(word) setFAC::w#3 [ prepareMEM::mem#0 ] ( main:2::setFAC:5 [ prepareMEM::mem#0 ] main:2::setFAC:12 [ main::i#10 print_char_cursor#32 print_line_cursor#13 prepareMEM::mem#0 ] main:2::setFAC:18 [ main::i#10 print_char_cursor#32 print_line_cursor#13 prepareMEM::mem#0 ] ) always clobbers reg byte a -Statement asm { ldy$fe lda$ff jsr$b391 } always clobbers reg byte a reg byte x reg byte y -Statement [90] (byte*) prepareMEM::mem#1 ← (byte*) setMEMtoFAC::mem#2 [ prepareMEM::mem#1 ] ( main:2::setMEMtoFAC:9 [ prepareMEM::mem#1 ] main:2::setMEMtoFAC:16 [ main::i#10 print_char_cursor#32 print_line_cursor#13 prepareMEM::mem#1 ] ) always clobbers reg byte a -Statement asm { ldx$fe ldy$ff jsr$bbd4 } always clobbers reg byte a reg byte x reg byte y +Statement [78] *((const byte*) memLo#0) ← <(const word) divMEMbyFAC::prepareMEM1_mem#0 [ ] ( main:2::divMEMbyFAC:20 [ main::i#10 print_char_cursor#32 print_line_cursor#13 ] ) always clobbers reg byte a +Statement [79] *((const byte*) memHi#0) ← >(const word) divMEMbyFAC::prepareMEM1_mem#0 [ ] ( main:2::divMEMbyFAC:20 [ main::i#10 print_char_cursor#32 print_line_cursor#13 ] ) always clobbers reg byte a +Statement asm { ldamemLo ldymemHi jsr$bb0f } always clobbers reg byte a reg byte x reg byte y +Statement [83] (byte~) setFAC::prepareMEM1_$0#0 ← < (word) setFAC::prepareMEM1_mem#0 [ setFAC::prepareMEM1_mem#0 setFAC::prepareMEM1_$0#0 ] ( main:2::setFAC:5 [ setFAC::prepareMEM1_mem#0 setFAC::prepareMEM1_$0#0 ] main:2::setFAC:12 [ main::i#10 print_char_cursor#32 print_line_cursor#13 setFAC::prepareMEM1_mem#0 setFAC::prepareMEM1_$0#0 ] main:2::setFAC:18 [ main::i#10 print_char_cursor#32 print_line_cursor#13 setFAC::prepareMEM1_mem#0 setFAC::prepareMEM1_$0#0 ] ) always clobbers reg byte a +Statement [85] (byte~) setFAC::prepareMEM1_$1#0 ← > (word) setFAC::prepareMEM1_mem#0 [ setFAC::prepareMEM1_$1#0 ] ( main:2::setFAC:5 [ setFAC::prepareMEM1_$1#0 ] main:2::setFAC:12 [ main::i#10 print_char_cursor#32 print_line_cursor#13 setFAC::prepareMEM1_$1#0 ] main:2::setFAC:18 [ main::i#10 print_char_cursor#32 print_line_cursor#13 setFAC::prepareMEM1_$1#0 ] ) always clobbers reg byte a +Statement asm { ldymemLo ldamemHi jsr$b391 } always clobbers reg byte a reg byte x reg byte y +Statement [90] (byte~) setMEMtoFAC::prepareMEM1_$0#0 ← < (word)(byte*) setMEMtoFAC::mem#2 [ setMEMtoFAC::mem#2 setMEMtoFAC::prepareMEM1_$0#0 ] ( main:2::setMEMtoFAC:9 [ setMEMtoFAC::mem#2 setMEMtoFAC::prepareMEM1_$0#0 ] main:2::setMEMtoFAC:16 [ main::i#10 print_char_cursor#32 print_line_cursor#13 setMEMtoFAC::mem#2 setMEMtoFAC::prepareMEM1_$0#0 ] ) always clobbers reg byte a +Statement [92] (byte~) setMEMtoFAC::prepareMEM1_$1#0 ← > (word)(byte*) setMEMtoFAC::mem#2 [ setMEMtoFAC::prepareMEM1_$1#0 ] ( main:2::setMEMtoFAC:9 [ setMEMtoFAC::prepareMEM1_$1#0 ] main:2::setMEMtoFAC:16 [ main::i#10 print_char_cursor#32 print_line_cursor#13 setMEMtoFAC::prepareMEM1_$1#0 ] ) always clobbers reg byte a +Statement asm { ldxmemLo ldymemHi jsr$bbd4 } always clobbers reg byte a reg byte x reg byte y Statement asm { jsr$bafe } always clobbers reg byte a reg byte x reg byte y Potential registers zp ZP_BYTE:2 [ main::i#10 main::i#1 ] : zp ZP_BYTE:2 , Potential registers zp ZP_WORD:3 [ print_line_cursor#6 print_line_cursor#13 print_line_cursor#1 ] : zp ZP_WORD:3 , Potential registers zp ZP_BYTE:5 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] : zp ZP_BYTE:5 , reg byte x , Potential registers zp ZP_BYTE:6 [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] : zp ZP_BYTE:6 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_WORD:7 [ print_char_cursor#23 print_char_cursor#31 print_char_cursor#32 print_char_cursor#53 print_char_cursor#10 ] : zp ZP_WORD:7 , -Potential registers zp ZP_WORD:9 [ prepareMEM::mem#5 prepareMEM::mem#4 prepareMEM::mem#0 prepareMEM::mem#1 ] : zp ZP_WORD:9 , -Potential registers zp ZP_WORD:11 [ mulFACbyMEM::mem#2 ] : zp ZP_WORD:11 , -Potential registers zp ZP_WORD:13 [ setFAC::w#3 setFAC::w#1 ] : zp ZP_WORD:13 , -Potential registers zp ZP_WORD:15 [ setMEMtoFAC::mem#2 ] : zp ZP_WORD:15 , -Potential registers zp ZP_WORD:17 [ getFAC::return#2 ] : zp ZP_WORD:17 , -Potential registers zp ZP_WORD:19 [ print_word::w#0 ] : zp ZP_WORD:19 , -Potential registers zp ZP_BYTE:21 [ print_byte::$0 ] : zp ZP_BYTE:21 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:22 [ print_byte::$2 ] : zp ZP_BYTE:22 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:23 [ getFAC::return#0 ] : zp ZP_WORD:23 , -Potential registers zp ZP_BYTE:25 [ prepareMEM::$0 ] : zp ZP_BYTE:25 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:26 [ prepareMEM::$1 ] : zp ZP_BYTE:26 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:9 [ mulFACbyMEM::mem#2 ] : zp ZP_WORD:9 , +Potential registers zp ZP_WORD:11 [ setFAC::prepareMEM1_mem#0 setFAC::w#1 ] : zp ZP_WORD:11 , +Potential registers zp ZP_WORD:13 [ setMEMtoFAC::mem#2 ] : zp ZP_WORD:13 , +Potential registers zp ZP_WORD:15 [ getFAC::return#2 ] : zp ZP_WORD:15 , +Potential registers zp ZP_WORD:17 [ print_word::w#0 ] : zp ZP_WORD:17 , +Potential registers zp ZP_BYTE:19 [ print_byte::$0 ] : zp ZP_BYTE:19 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:20 [ print_byte::$2 ] : zp ZP_BYTE:20 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:21 [ getFAC::return#0 ] : zp ZP_WORD:21 , +Potential registers zp ZP_BYTE:23 [ mulFACbyMEM::prepareMEM1_$0#0 ] : zp ZP_BYTE:23 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:24 [ mulFACbyMEM::prepareMEM1_$1#0 ] : zp ZP_BYTE:24 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:25 [ setFAC::prepareMEM1_$0#0 ] : zp ZP_BYTE:25 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:26 [ setFAC::prepareMEM1_$1#0 ] : zp ZP_BYTE:26 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:27 [ setMEMtoFAC::prepareMEM1_$0#0 ] : zp ZP_BYTE:27 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:28 [ setMEMtoFAC::prepareMEM1_$1#0 ] : zp ZP_BYTE:28 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES Uplift Scope [] 250.97: zp ZP_WORD:3 [ print_line_cursor#6 print_line_cursor#13 print_line_cursor#1 ] 34.89: zp ZP_WORD:7 [ print_char_cursor#23 print_char_cursor#31 print_char_cursor#32 print_char_cursor#53 print_char_cursor#10 ] -Uplift Scope [setFAC] 33: zp ZP_WORD:13 [ setFAC::w#3 setFAC::w#1 ] -Uplift Scope [getFAC] 22: zp ZP_WORD:17 [ getFAC::return#2 ] 4.33: zp ZP_WORD:23 [ getFAC::return#0 ] -Uplift Scope [prepareMEM] 15.33: zp ZP_WORD:9 [ prepareMEM::mem#5 prepareMEM::mem#4 prepareMEM::mem#0 prepareMEM::mem#1 ] 4: zp ZP_BYTE:25 [ prepareMEM::$0 ] 4: zp ZP_BYTE:26 [ prepareMEM::$1 ] -Uplift Scope [print_byte] 10: zp ZP_BYTE:5 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] 4: zp ZP_BYTE:21 [ print_byte::$0 ] 4: zp ZP_BYTE:22 [ print_byte::$2 ] +Uplift Scope [setFAC] 27: zp ZP_WORD:11 [ setFAC::prepareMEM1_mem#0 setFAC::w#1 ] 4: zp ZP_BYTE:25 [ setFAC::prepareMEM1_$0#0 ] 4: zp ZP_BYTE:26 [ setFAC::prepareMEM1_$1#0 ] +Uplift Scope [getFAC] 22: zp ZP_WORD:15 [ getFAC::return#2 ] 4.33: zp ZP_WORD:21 [ getFAC::return#0 ] +Uplift Scope [print_byte] 10: zp ZP_BYTE:5 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] 4: zp ZP_BYTE:19 [ print_byte::$0 ] 4: zp ZP_BYTE:20 [ print_byte::$2 ] Uplift Scope [print_char] 14: zp ZP_BYTE:6 [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] Uplift Scope [main] 11.92: zp ZP_BYTE:2 [ main::i#10 main::i#1 ] -Uplift Scope [print_word] 5: zp ZP_WORD:19 [ print_word::w#0 ] -Uplift Scope [setMEMtoFAC] 2: zp ZP_WORD:15 [ setMEMtoFAC::mem#2 ] -Uplift Scope [mulFACbyMEM] 2: zp ZP_WORD:11 [ mulFACbyMEM::mem#2 ] +Uplift Scope [setMEMtoFAC] 4: zp ZP_BYTE:27 [ setMEMtoFAC::prepareMEM1_$0#0 ] 4: zp ZP_BYTE:28 [ setMEMtoFAC::prepareMEM1_$1#0 ] 0: zp ZP_WORD:13 [ setMEMtoFAC::mem#2 ] +Uplift Scope [mulFACbyMEM] 4: zp ZP_BYTE:23 [ mulFACbyMEM::prepareMEM1_$0#0 ] 4: zp ZP_BYTE:24 [ mulFACbyMEM::prepareMEM1_$1#0 ] 0: zp ZP_WORD:9 [ mulFACbyMEM::mem#2 ] +Uplift Scope [print_word] 5: zp ZP_WORD:17 [ print_word::w#0 ] Uplift Scope [RADIX] Uplift Scope [print_ln] Uplift Scope [addMEMtoFAC] @@ -1891,32 +2020,30 @@ Uplift Scope [divMEMbyFAC] Uplift Scope [sinFAC] Uplift Scope [divFACby10] -Uplifting [] best 6314 combination zp ZP_WORD:3 [ print_line_cursor#6 print_line_cursor#13 print_line_cursor#1 ] zp ZP_WORD:7 [ print_char_cursor#23 print_char_cursor#31 print_char_cursor#32 print_char_cursor#53 print_char_cursor#10 ] -Uplifting [setFAC] best 6314 combination zp ZP_WORD:13 [ setFAC::w#3 setFAC::w#1 ] -Uplifting [getFAC] best 6314 combination zp ZP_WORD:17 [ getFAC::return#2 ] zp ZP_WORD:23 [ getFAC::return#0 ] -Uplifting [prepareMEM] best 6302 combination zp ZP_WORD:9 [ prepareMEM::mem#5 prepareMEM::mem#4 prepareMEM::mem#0 prepareMEM::mem#1 ] reg byte a [ prepareMEM::$0 ] reg byte a [ prepareMEM::$1 ] -Uplifting [print_byte] best 6288 combination reg byte x [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ] -Uplifting [print_char] best 6279 combination reg byte a [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] -Uplifting [main] best 6279 combination zp ZP_BYTE:2 [ main::i#10 main::i#1 ] -Uplifting [print_word] best 6279 combination zp ZP_WORD:19 [ print_word::w#0 ] -Uplifting [setMEMtoFAC] best 6279 combination zp ZP_WORD:15 [ setMEMtoFAC::mem#2 ] -Uplifting [mulFACbyMEM] best 6279 combination zp ZP_WORD:11 [ mulFACbyMEM::mem#2 ] -Uplifting [RADIX] best 6279 combination -Uplifting [print_ln] best 6279 combination -Uplifting [addMEMtoFAC] best 6279 combination -Uplifting [divMEMbyFAC] best 6279 combination -Uplifting [sinFAC] best 6279 combination -Uplifting [divFACby10] best 6279 combination +Uplifting [] best 6457 combination zp ZP_WORD:3 [ print_line_cursor#6 print_line_cursor#13 print_line_cursor#1 ] zp ZP_WORD:7 [ print_char_cursor#23 print_char_cursor#31 print_char_cursor#32 print_char_cursor#53 print_char_cursor#10 ] +Uplifting [setFAC] best 6445 combination zp ZP_WORD:11 [ setFAC::prepareMEM1_mem#0 setFAC::w#1 ] reg byte a [ setFAC::prepareMEM1_$0#0 ] reg byte a [ setFAC::prepareMEM1_$1#0 ] +Uplifting [getFAC] best 6445 combination zp ZP_WORD:15 [ getFAC::return#2 ] zp ZP_WORD:21 [ getFAC::return#0 ] +Uplifting [print_byte] best 6431 combination reg byte x [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ] +Uplifting [print_char] best 6422 combination reg byte a [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] +Uplifting [main] best 6422 combination zp ZP_BYTE:2 [ main::i#10 main::i#1 ] +Uplifting [setMEMtoFAC] best 6410 combination reg byte a [ setMEMtoFAC::prepareMEM1_$0#0 ] reg byte a [ setMEMtoFAC::prepareMEM1_$1#0 ] zp ZP_WORD:13 [ setMEMtoFAC::mem#2 ] +Uplifting [mulFACbyMEM] best 6398 combination reg byte a [ mulFACbyMEM::prepareMEM1_$0#0 ] reg byte a [ mulFACbyMEM::prepareMEM1_$1#0 ] zp ZP_WORD:9 [ mulFACbyMEM::mem#2 ] +Uplifting [print_word] best 6398 combination zp ZP_WORD:17 [ print_word::w#0 ] +Uplifting [RADIX] best 6398 combination +Uplifting [print_ln] best 6398 combination +Uplifting [addMEMtoFAC] best 6398 combination +Uplifting [divMEMbyFAC] best 6398 combination +Uplifting [sinFAC] best 6398 combination +Uplifting [divFACby10] best 6398 combination Attempting to uplift remaining variables inzp ZP_BYTE:2 [ main::i#10 main::i#1 ] -Uplifting [main] best 6279 combination zp ZP_BYTE:2 [ main::i#10 main::i#1 ] -Coalescing zero page register [ zp ZP_WORD:9 [ prepareMEM::mem#5 prepareMEM::mem#4 prepareMEM::mem#0 prepareMEM::mem#1 ] ] with [ zp ZP_WORD:11 [ mulFACbyMEM::mem#2 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:9 [ prepareMEM::mem#5 prepareMEM::mem#4 prepareMEM::mem#0 prepareMEM::mem#1 mulFACbyMEM::mem#2 ] ] with [ zp ZP_WORD:13 [ setFAC::w#3 setFAC::w#1 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:9 [ prepareMEM::mem#5 prepareMEM::mem#4 prepareMEM::mem#0 prepareMEM::mem#1 mulFACbyMEM::mem#2 setFAC::w#3 setFAC::w#1 ] ] with [ zp ZP_WORD:15 [ setMEMtoFAC::mem#2 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:17 [ getFAC::return#2 ] ] with [ zp ZP_WORD:19 [ print_word::w#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:17 [ getFAC::return#2 print_word::w#0 ] ] with [ zp ZP_WORD:23 [ getFAC::return#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:17 [ getFAC::return#2 print_word::w#0 getFAC::return#0 ] ] with [ zp ZP_WORD:9 [ prepareMEM::mem#5 prepareMEM::mem#4 prepareMEM::mem#0 prepareMEM::mem#1 mulFACbyMEM::mem#2 setFAC::w#3 setFAC::w#1 setMEMtoFAC::mem#2 ] ] +Uplifting [main] best 6398 combination zp ZP_BYTE:2 [ main::i#10 main::i#1 ] +Coalescing zero page register [ zp ZP_WORD:15 [ getFAC::return#2 ] ] with [ zp ZP_WORD:17 [ print_word::w#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:15 [ getFAC::return#2 print_word::w#0 ] ] with [ zp ZP_WORD:21 [ getFAC::return#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_WORD:11 [ setFAC::prepareMEM1_mem#0 setFAC::w#1 ] ] with [ zp ZP_WORD:9 [ mulFACbyMEM::mem#2 ] ] +Coalescing zero page register [ zp ZP_WORD:15 [ getFAC::return#2 print_word::w#0 getFAC::return#0 ] ] with [ zp ZP_WORD:13 [ setMEMtoFAC::mem#2 ] ] +Coalescing zero page register [ zp ZP_WORD:15 [ getFAC::return#2 print_word::w#0 getFAC::return#0 setMEMtoFAC::mem#2 ] ] with [ zp ZP_WORD:11 [ setFAC::prepareMEM1_mem#0 setFAC::w#1 mulFACbyMEM::mem#2 ] ] Allocated (was zp ZP_WORD:7) zp ZP_WORD:5 [ print_char_cursor#23 print_char_cursor#31 print_char_cursor#32 print_char_cursor#53 print_char_cursor#10 ] -Allocated (was zp ZP_WORD:17) zp ZP_WORD:7 [ getFAC::return#2 print_word::w#0 getFAC::return#0 prepareMEM::mem#5 prepareMEM::mem#4 prepareMEM::mem#0 prepareMEM::mem#1 mulFACbyMEM::mem#2 setFAC::w#3 setFAC::w#1 setMEMtoFAC::mem#2 ] +Allocated (was zp ZP_WORD:15) zp ZP_WORD:7 [ getFAC::return#2 print_word::w#0 getFAC::return#0 setMEMtoFAC::mem#2 setFAC::prepareMEM1_mem#0 setFAC::w#1 mulFACbyMEM::mem#2 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -1951,13 +2078,13 @@ main: { .label f_2pi = $e2e5 .label i = 2 // [5] call setFAC - // [84] phi from main to setFAC [phi:main->setFAC] + // [82] phi from main to setFAC [phi:main->setFAC] setFAC_from_main: - // [84] phi (word) setFAC::w#3 = (word) $4fb [phi:main->setFAC#0] -- vwuz1=vwuc1 + // [82] phi (word) setFAC::prepareMEM1_mem#0 = (word) $4fb [phi:main->setFAC#0] -- vwuz1=vwuc1 lda #<$4fb - sta.z setFAC.w + sta.z setFAC.prepareMEM1_mem lda #>$4fb - sta.z setFAC.w+1 + sta.z setFAC.prepareMEM1_mem+1 jsr setFAC // [6] phi from main to main::@2 [phi:main->main::@2] b2_from_main: @@ -2004,9 +2131,9 @@ main: { lda #0 sta.z setFAC.w+1 // [12] call setFAC - // [84] phi from main::@1 to setFAC [phi:main::@1->setFAC] + // [82] phi from main::@1 to setFAC [phi:main::@1->setFAC] setFAC_from_b1: - // [84] phi (word) setFAC::w#3 = (word) setFAC::w#1 [phi:main::@1->setFAC#0] -- register_copy + // [82] phi (word) setFAC::prepareMEM1_mem#0 = (word) setFAC::w#1 [phi:main::@1->setFAC#0] -- register_copy jsr setFAC // [13] phi from main::@1 to main::@4 [phi:main::@1->main::@4] b4_from_b1: @@ -2014,9 +2141,9 @@ main: { // main::@4 b4: // [14] call mulFACbyMEM - // [73] phi from main::@4 to mulFACbyMEM [phi:main::@4->mulFACbyMEM] + // [68] phi from main::@4 to mulFACbyMEM [phi:main::@4->mulFACbyMEM] mulFACbyMEM_from_b4: - // [73] phi (byte*) mulFACbyMEM::mem#2 = (const byte*) main::f_2pi#0 [phi:main::@4->mulFACbyMEM#0] -- pbuz1=pbuc1 + // [68] phi (byte*) mulFACbyMEM::mem#2 = (const byte*) main::f_2pi#0 [phi:main::@4->mulFACbyMEM#0] -- pbuz1=pbuc1 lda #f_2pi @@ -2042,13 +2169,13 @@ main: { // main::@6 b6: // [18] call setFAC - // [84] phi from main::@6 to setFAC [phi:main::@6->setFAC] + // [82] phi from main::@6 to setFAC [phi:main::@6->setFAC] setFAC_from_b6: - // [84] phi (word) setFAC::w#3 = (byte) $19 [phi:main::@6->setFAC#0] -- vwuz1=vbuc1 + // [82] phi (word) setFAC::prepareMEM1_mem#0 = (byte) $19 [phi:main::@6->setFAC#0] -- vwuz1=vbuc1 lda #<$19 - sta.z setFAC.w + sta.z setFAC.prepareMEM1_mem lda #>$19 - sta.z setFAC.w+1 + sta.z setFAC.prepareMEM1_mem+1 jsr setFAC // [19] phi from main::@6 to main::@7 [phi:main::@6->main::@7] b7_from_b6: @@ -2056,7 +2183,7 @@ main: { // main::@7 b7: // [20] call divMEMbyFAC - // [80] phi from main::@7 to divMEMbyFAC [phi:main::@7->divMEMbyFAC] + // [77] phi from main::@7 to divMEMbyFAC [phi:main::@7->divMEMbyFAC] divMEMbyFAC_from_b7: jsr divMEMbyFAC // [21] phi from main::@7 to main::@8 [phi:main::@7->main::@8] @@ -2072,9 +2199,9 @@ main: { // main::@9 b9: // [24] call mulFACbyMEM - // [73] phi from main::@9 to mulFACbyMEM [phi:main::@9->mulFACbyMEM] + // [68] phi from main::@9 to mulFACbyMEM [phi:main::@9->mulFACbyMEM] mulFACbyMEM_from_b9: - // [73] phi (byte*) mulFACbyMEM::mem#2 = (const byte[]) main::f_127#0 [phi:main::@9->mulFACbyMEM#0] -- pbuz1=pbuc1 + // [68] phi (byte*) mulFACbyMEM::mem#2 = (const byte[]) main::f_127#0 [phi:main::@9->mulFACbyMEM#0] -- pbuz1=pbuc1 lda #f_127 @@ -2270,11 +2397,11 @@ print_char: { // Destroys the value in the FAC in the process getFAC: { .label return = 7 - // asm { jsr$b1aa sty$fe sta$ff } + // asm { jsr$b1aa stymemLo stamemHi } // Load FAC (floating point accumulator) integer part into word register Y,A jsr $b1aa - sty.z $fe - sta.z $ff + sty memLo + sta memHi // [61] (word) getFAC::return#0 ← *((const byte*) memHi#0) w= *((const byte*) memLo#0) -- vwuz1=_deref_pbuc1_word__deref_pbuc2 lda memLo sta.z return @@ -2291,45 +2418,27 @@ getFAC: { // Set FAC to MEM (float saved in memory) plus FAC (float accumulator) // Reads 5 bytes from memory addMEMtoFAC: { - // [64] call prepareMEM - // [67] phi from addMEMtoFAC to prepareMEM [phi:addMEMtoFAC->prepareMEM] - prepareMEM_from_addMEMtoFAC: - // [67] phi (byte*) prepareMEM::mem#5 = (const byte[]) main::f_127#0 [phi:addMEMtoFAC->prepareMEM#0] -- pbuz1=pbuc1 - lda #main.f_127 - sta.z prepareMEM.mem+1 - jsr prepareMEM + .const prepareMEM1_mem = main.f_127 + jmp prepareMEM1 + // addMEMtoFAC::prepareMEM1 + prepareMEM1: + // [64] *((const byte*) memLo#0) ← <(const word) addMEMtoFAC::prepareMEM1_mem#0 -- _deref_pbuc1=vbuc2 + lda #(const word) addMEMtoFAC::prepareMEM1_mem#0 -- _deref_pbuc1=vbuc2 + lda #>prepareMEM1_mem + sta memHi jmp b1 // addMEMtoFAC::@1 b1: - // asm { lda$fe ldy$ff jsr$b867 } - lda.z $fe - ldy.z $ff + // asm { ldamemLo ldymemHi jsr$b867 } + lda memLo + ldy memHi jsr $b867 jmp breturn // addMEMtoFAC::@return breturn: - // [66] return - rts -} - // prepareMEM -// Prepare MEM pointers for operations using MEM -// prepareMEM(byte* zeropage(7) mem) -prepareMEM: { - .label mem = 7 - // [68] (byte~) prepareMEM::$0 ← < (byte*) prepareMEM::mem#5 -- vbuaa=_lo_pbuz1 - lda.z mem - // [69] *((const byte*) memLo#0) ← (byte~) prepareMEM::$0 -- _deref_pbuc1=vbuaa - sta memLo - // [70] (byte~) prepareMEM::$1 ← > (byte*) prepareMEM::mem#5 -- vbuaa=_hi_pbuz1 - lda.z mem+1 - // [71] *((const byte*) memHi#0) ← (byte~) prepareMEM::$1 -- _deref_pbuc1=vbuaa - sta memHi - jmp breturn - // prepareMEM::@return - breturn: - // [72] return + // [67] return rts } // mulFACbyMEM @@ -2339,23 +2448,28 @@ prepareMEM: { // mulFACbyMEM(byte* zeropage(7) mem) mulFACbyMEM: { .label mem = 7 - // [74] (byte*) prepareMEM::mem#4 ← (byte*) mulFACbyMEM::mem#2 - // [75] call prepareMEM - // [67] phi from mulFACbyMEM to prepareMEM [phi:mulFACbyMEM->prepareMEM] - prepareMEM_from_mulFACbyMEM: - // [67] phi (byte*) prepareMEM::mem#5 = (byte*) prepareMEM::mem#4 [phi:mulFACbyMEM->prepareMEM#0] -- register_copy - jsr prepareMEM + jmp prepareMEM1 + // mulFACbyMEM::prepareMEM1 + prepareMEM1: + // [69] (byte~) mulFACbyMEM::prepareMEM1_$0#0 ← < (word)(byte*) mulFACbyMEM::mem#2 -- vbuaa=_lo_vwuz1 + lda.z mem + // [70] *((const byte*) memLo#0) ← (byte~) mulFACbyMEM::prepareMEM1_$0#0 -- _deref_pbuc1=vbuaa + sta memLo + // [71] (byte~) mulFACbyMEM::prepareMEM1_$1#0 ← > (word)(byte*) mulFACbyMEM::mem#2 -- vbuaa=_hi_vwuz1 + lda.z mem+1 + // [72] *((const byte*) memHi#0) ← (byte~) mulFACbyMEM::prepareMEM1_$1#0 -- _deref_pbuc1=vbuaa + sta memHi jmp b1 // mulFACbyMEM::@1 b1: - // asm { lda$fe ldy$ff jsr$ba28 } - lda.z $fe - ldy.z $ff + // asm { ldamemLo ldymemHi jsr$ba28 } + lda memLo + ldy memHi jsr $ba28 jmp breturn // mulFACbyMEM::@return breturn: - // [77] return + // [74] return rts } // sinFAC @@ -2368,7 +2482,7 @@ sinFAC: { jmp breturn // sinFAC::@return breturn: - // [79] return + // [76] return rts } // divMEMbyFAC @@ -2376,26 +2490,27 @@ sinFAC: { // Set FAC to MEM (float saved in memory) divided by FAC (float accumulator) // Reads 5 bytes from memory divMEMbyFAC: { - // [81] call prepareMEM - // [67] phi from divMEMbyFAC to prepareMEM [phi:divMEMbyFAC->prepareMEM] - prepareMEM_from_divMEMbyFAC: - // [67] phi (byte*) prepareMEM::mem#5 = (const byte[]) main::f_i#0 [phi:divMEMbyFAC->prepareMEM#0] -- pbuz1=pbuc1 - lda #main.f_i - sta.z prepareMEM.mem+1 - jsr prepareMEM + .const prepareMEM1_mem = main.f_i + jmp prepareMEM1 + // divMEMbyFAC::prepareMEM1 + prepareMEM1: + // [78] *((const byte*) memLo#0) ← <(const word) divMEMbyFAC::prepareMEM1_mem#0 -- _deref_pbuc1=vbuc2 + lda #(const word) divMEMbyFAC::prepareMEM1_mem#0 -- _deref_pbuc1=vbuc2 + lda #>prepareMEM1_mem + sta memHi jmp b1 // divMEMbyFAC::@1 b1: - // asm { lda$fe ldy$ff jsr$bb0f } - lda.z $fe - ldy.z $ff + // asm { ldamemLo ldymemHi jsr$bb0f } + lda memLo + ldy memHi jsr $bb0f jmp breturn // divMEMbyFAC::@return breturn: - // [83] return + // [81] return rts } // setFAC @@ -2403,20 +2518,26 @@ divMEMbyFAC: { // Set the FAC (floating point accumulator) to the integer value of a 16bit word // setFAC(word zeropage(7) w) setFAC: { + .label prepareMEM1_mem = 7 .label w = 7 - // [85] (byte*) prepareMEM::mem#0 ← (byte*)(word) setFAC::w#3 - // [86] call prepareMEM - // [67] phi from setFAC to prepareMEM [phi:setFAC->prepareMEM] - prepareMEM_from_setFAC: - // [67] phi (byte*) prepareMEM::mem#5 = (byte*) prepareMEM::mem#0 [phi:setFAC->prepareMEM#0] -- register_copy - jsr prepareMEM + jmp prepareMEM1 + // setFAC::prepareMEM1 + prepareMEM1: + // [83] (byte~) setFAC::prepareMEM1_$0#0 ← < (word) setFAC::prepareMEM1_mem#0 -- vbuaa=_lo_vwuz1 + lda.z prepareMEM1_mem + // [84] *((const byte*) memLo#0) ← (byte~) setFAC::prepareMEM1_$0#0 -- _deref_pbuc1=vbuaa + sta memLo + // [85] (byte~) setFAC::prepareMEM1_$1#0 ← > (word) setFAC::prepareMEM1_mem#0 -- vbuaa=_hi_vwuz1 + lda.z prepareMEM1_mem+1 + // [86] *((const byte*) memHi#0) ← (byte~) setFAC::prepareMEM1_$1#0 -- _deref_pbuc1=vbuaa + sta memHi jmp b1 // setFAC::@1 b1: - // asm { ldy$fe lda$ff jsr$b391 } + // asm { ldymemLo ldamemHi jsr$b391 } // Load word register Y,A into FAC (floating point accumulator) - ldy.z $fe - lda.z $ff + ldy memLo + lda memHi jsr $b391 jmp breturn // setFAC::@return @@ -2431,23 +2552,28 @@ setFAC: { // setMEMtoFAC(byte* zeropage(7) mem) setMEMtoFAC: { .label mem = 7 - // [90] (byte*) prepareMEM::mem#1 ← (byte*) setMEMtoFAC::mem#2 - // [91] call prepareMEM - // [67] phi from setMEMtoFAC to prepareMEM [phi:setMEMtoFAC->prepareMEM] - prepareMEM_from_setMEMtoFAC: - // [67] phi (byte*) prepareMEM::mem#5 = (byte*) prepareMEM::mem#1 [phi:setMEMtoFAC->prepareMEM#0] -- register_copy - jsr prepareMEM + jmp prepareMEM1 + // setMEMtoFAC::prepareMEM1 + prepareMEM1: + // [90] (byte~) setMEMtoFAC::prepareMEM1_$0#0 ← < (word)(byte*) setMEMtoFAC::mem#2 -- vbuaa=_lo_vwuz1 + lda.z mem + // [91] *((const byte*) memLo#0) ← (byte~) setMEMtoFAC::prepareMEM1_$0#0 -- _deref_pbuc1=vbuaa + sta memLo + // [92] (byte~) setMEMtoFAC::prepareMEM1_$1#0 ← > (word)(byte*) setMEMtoFAC::mem#2 -- vbuaa=_hi_vwuz1 + lda.z mem+1 + // [93] *((const byte*) memHi#0) ← (byte~) setMEMtoFAC::prepareMEM1_$1#0 -- _deref_pbuc1=vbuaa + sta memHi jmp b1 // setMEMtoFAC::@1 b1: - // asm { ldx$fe ldy$ff jsr$bbd4 } - ldx.z $fe - ldy.z $ff + // asm { ldxmemLo ldymemHi jsr$bbd4 } + ldx memLo + ldy memHi jsr $bbd4 jmp breturn // setMEMtoFAC::@return breturn: - // [93] return + // [95] return rts } // divFACby10 @@ -2459,7 +2585,7 @@ divFACby10: { jmp breturn // divFACby10::@return breturn: - // [95] return + // [97] return rts } // File Data @@ -2491,20 +2617,25 @@ Removing instruction jmp b1 Removing instruction jmp breturn Removing instruction jmp breturn Removing instruction jmp breturn +Removing instruction jmp prepareMEM1 +Removing instruction jmp b1 +Removing instruction jmp breturn +Removing instruction jmp prepareMEM1 Removing instruction jmp b1 Removing instruction jmp breturn Removing instruction jmp breturn +Removing instruction jmp prepareMEM1 Removing instruction jmp b1 Removing instruction jmp breturn -Removing instruction jmp breturn -Removing instruction jmp b1 -Removing instruction jmp breturn +Removing instruction jmp prepareMEM1 Removing instruction jmp b1 Removing instruction jmp breturn +Removing instruction jmp prepareMEM1 Removing instruction jmp b1 Removing instruction jmp breturn Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination +Replacing instruction lda memLo with TYA Replacing label b1_from_b1 with b1 Replacing label b1_from_b1 with b1 Removing instruction b1_from_bbegin: @@ -2563,21 +2694,20 @@ Removing instruction print_char_from_b1: Removing instruction breturn: Removing instruction breturn: Removing instruction breturn: -Removing instruction prepareMEM_from_addMEMtoFAC: +Removing instruction prepareMEM1: +Removing instruction b1: +Removing instruction breturn: +Removing instruction prepareMEM1: Removing instruction b1: Removing instruction breturn: Removing instruction breturn: -Removing instruction prepareMEM_from_mulFACbyMEM: +Removing instruction prepareMEM1: Removing instruction b1: Removing instruction breturn: -Removing instruction breturn: -Removing instruction prepareMEM_from_divMEMbyFAC: +Removing instruction prepareMEM1: Removing instruction b1: Removing instruction breturn: -Removing instruction prepareMEM_from_setFAC: -Removing instruction b1: -Removing instruction breturn: -Removing instruction prepareMEM_from_setMEMtoFAC: +Removing instruction prepareMEM1: Removing instruction b1: Removing instruction breturn: Removing instruction breturn: @@ -2585,6 +2715,9 @@ Succesful ASM optimization Pass5UnusedLabelElimination Updating BasicUpstart to call main directly Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin +Removing instruction lda memHi +Replacing instruction ldy memHi with TAY +Succesful ASM optimization Pass5UnnecesaryLoadElimination Removing instruction bbegin: Succesful ASM optimization Pass5UnusedLabelElimination @@ -2600,12 +2733,22 @@ FINAL SYMBOL TABLE (label) addMEMtoFAC::@1 (label) addMEMtoFAC::@return (byte*) addMEMtoFAC::mem +(label) addMEMtoFAC::prepareMEM1 +(byte~) addMEMtoFAC::prepareMEM1_$0 +(byte~) addMEMtoFAC::prepareMEM1_$1 +(word) addMEMtoFAC::prepareMEM1_mem +(const word) addMEMtoFAC::prepareMEM1_mem#0 prepareMEM1_mem = (word)(const byte[]) main::f_127#0 (void()) divFACby10() (label) divFACby10::@return (void()) divMEMbyFAC((byte*) divMEMbyFAC::mem) (label) divMEMbyFAC::@1 (label) divMEMbyFAC::@return (byte*) divMEMbyFAC::mem +(label) divMEMbyFAC::prepareMEM1 +(byte~) divMEMbyFAC::prepareMEM1_$0 +(byte~) divMEMbyFAC::prepareMEM1_$1 +(word) divMEMbyFAC::prepareMEM1_mem +(const word) divMEMbyFAC::prepareMEM1_mem#0 prepareMEM1_mem = (word)(const byte[]) main::f_i#0 (word()) getFAC() (label) getFAC::@return (word) getFAC::return @@ -2646,16 +2789,13 @@ FINAL SYMBOL TABLE (label) mulFACbyMEM::@1 (label) mulFACbyMEM::@return (byte*) mulFACbyMEM::mem -(byte*) mulFACbyMEM::mem#2 mem zp ZP_WORD:7 2.0 -(void()) prepareMEM((byte*) prepareMEM::mem) -(byte~) prepareMEM::$0 reg byte a 4.0 -(byte~) prepareMEM::$1 reg byte a 4.0 -(label) prepareMEM::@return -(byte*) prepareMEM::mem -(byte*) prepareMEM::mem#0 mem zp ZP_WORD:7 4.0 -(byte*) prepareMEM::mem#1 mem zp ZP_WORD:7 4.0 -(byte*) prepareMEM::mem#4 mem zp ZP_WORD:7 4.0 -(byte*) prepareMEM::mem#5 mem zp ZP_WORD:7 3.333333333333333 +(byte*) mulFACbyMEM::mem#2 mem zp ZP_WORD:7 +(label) mulFACbyMEM::prepareMEM1 +(byte~) mulFACbyMEM::prepareMEM1_$0 +(byte~) mulFACbyMEM::prepareMEM1_$0#0 reg byte a 4.0 +(byte~) mulFACbyMEM::prepareMEM1_$1 +(byte~) mulFACbyMEM::prepareMEM1_$1#0 reg byte a 4.0 +(word) mulFACbyMEM::prepareMEM1_mem (void()) print_byte((byte) print_byte::b) (byte~) print_byte::$0 reg byte a 4.0 (byte~) print_byte::$2 reg byte x 4.0 @@ -2695,14 +2835,26 @@ FINAL SYMBOL TABLE (void()) setFAC((word) setFAC::w) (label) setFAC::@1 (label) setFAC::@return +(label) setFAC::prepareMEM1 +(byte~) setFAC::prepareMEM1_$0 +(byte~) setFAC::prepareMEM1_$0#0 reg byte a 4.0 +(byte~) setFAC::prepareMEM1_$1 +(byte~) setFAC::prepareMEM1_$1#0 reg byte a 4.0 +(word) setFAC::prepareMEM1_mem +(word) setFAC::prepareMEM1_mem#0 prepareMEM1_mem zp ZP_WORD:7 5.0 (word) setFAC::w (word) setFAC::w#1 w zp ZP_WORD:7 22.0 -(word) setFAC::w#3 w zp ZP_WORD:7 11.0 (void()) setMEMtoFAC((byte*) setMEMtoFAC::mem) (label) setMEMtoFAC::@1 (label) setMEMtoFAC::@return (byte*) setMEMtoFAC::mem -(byte*) setMEMtoFAC::mem#2 mem zp ZP_WORD:7 2.0 +(byte*) setMEMtoFAC::mem#2 mem zp ZP_WORD:7 +(label) setMEMtoFAC::prepareMEM1 +(byte~) setMEMtoFAC::prepareMEM1_$0 +(byte~) setMEMtoFAC::prepareMEM1_$0#0 reg byte a 4.0 +(byte~) setMEMtoFAC::prepareMEM1_$1 +(byte~) setMEMtoFAC::prepareMEM1_$1#0 reg byte a 4.0 +(word) setMEMtoFAC::prepareMEM1_mem (void()) sinFAC() (label) sinFAC::@return @@ -2711,11 +2863,15 @@ zp ZP_WORD:3 [ print_line_cursor#6 print_line_cursor#13 print_line_cursor#1 ] reg byte x [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] zp ZP_WORD:5 [ print_char_cursor#23 print_char_cursor#31 print_char_cursor#32 print_char_cursor#53 print_char_cursor#10 ] -zp ZP_WORD:7 [ getFAC::return#2 print_word::w#0 getFAC::return#0 prepareMEM::mem#5 prepareMEM::mem#4 prepareMEM::mem#0 prepareMEM::mem#1 mulFACbyMEM::mem#2 setFAC::w#3 setFAC::w#1 setMEMtoFAC::mem#2 ] +zp ZP_WORD:7 [ getFAC::return#2 print_word::w#0 getFAC::return#0 setMEMtoFAC::mem#2 setFAC::prepareMEM1_mem#0 setFAC::w#1 mulFACbyMEM::mem#2 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ] -reg byte a [ prepareMEM::$0 ] -reg byte a [ prepareMEM::$1 ] +reg byte a [ mulFACbyMEM::prepareMEM1_$0#0 ] +reg byte a [ mulFACbyMEM::prepareMEM1_$1#0 ] +reg byte a [ setFAC::prepareMEM1_$0#0 ] +reg byte a [ setFAC::prepareMEM1_$1#0 ] +reg byte a [ setMEMtoFAC::prepareMEM1_$0#0 ] +reg byte a [ setMEMtoFAC::prepareMEM1_$1#0 ] FINAL ASSEMBLER @@ -2745,12 +2901,12 @@ main: { .label i = 2 // setFAC(1275) // [5] call setFAC - // [84] phi from main to setFAC [phi:main->setFAC] - // [84] phi (word) setFAC::w#3 = (word) $4fb [phi:main->setFAC#0] -- vwuz1=vwuc1 + // [82] phi from main to setFAC [phi:main->setFAC] + // [82] phi (word) setFAC::prepareMEM1_mem#0 = (word) $4fb [phi:main->setFAC#0] -- vwuz1=vwuc1 lda #<$4fb - sta.z setFAC.w + sta.z setFAC.prepareMEM1_mem lda #>$4fb - sta.z setFAC.w+1 + sta.z setFAC.prepareMEM1_mem+1 jsr setFAC // [6] phi from main to main::@2 [phi:main->main::@2] // main::@2 @@ -2791,15 +2947,15 @@ main: { lda #0 sta.z setFAC.w+1 // [12] call setFAC - // [84] phi from main::@1 to setFAC [phi:main::@1->setFAC] - // [84] phi (word) setFAC::w#3 = (word) setFAC::w#1 [phi:main::@1->setFAC#0] -- register_copy + // [82] phi from main::@1 to setFAC [phi:main::@1->setFAC] + // [82] phi (word) setFAC::prepareMEM1_mem#0 = (word) setFAC::w#1 [phi:main::@1->setFAC#0] -- register_copy jsr setFAC // [13] phi from main::@1 to main::@4 [phi:main::@1->main::@4] // main::@4 // mulFACbyMEM(f_2pi) // [14] call mulFACbyMEM - // [73] phi from main::@4 to mulFACbyMEM [phi:main::@4->mulFACbyMEM] - // [73] phi (byte*) mulFACbyMEM::mem#2 = (const byte*) main::f_2pi#0 [phi:main::@4->mulFACbyMEM#0] -- pbuz1=pbuc1 + // [68] phi from main::@4 to mulFACbyMEM [phi:main::@4->mulFACbyMEM] + // [68] phi (byte*) mulFACbyMEM::mem#2 = (const byte*) main::f_2pi#0 [phi:main::@4->mulFACbyMEM#0] -- pbuz1=pbuc1 lda #f_2pi @@ -2820,18 +2976,18 @@ main: { // main::@6 // setFAC(25) // [18] call setFAC - // [84] phi from main::@6 to setFAC [phi:main::@6->setFAC] - // [84] phi (word) setFAC::w#3 = (byte) $19 [phi:main::@6->setFAC#0] -- vwuz1=vbuc1 + // [82] phi from main::@6 to setFAC [phi:main::@6->setFAC] + // [82] phi (word) setFAC::prepareMEM1_mem#0 = (byte) $19 [phi:main::@6->setFAC#0] -- vwuz1=vbuc1 lda #<$19 - sta.z setFAC.w + sta.z setFAC.prepareMEM1_mem lda #>$19 - sta.z setFAC.w+1 + sta.z setFAC.prepareMEM1_mem+1 jsr setFAC // [19] phi from main::@6 to main::@7 [phi:main::@6->main::@7] // main::@7 // divMEMbyFAC(f_i) // [20] call divMEMbyFAC - // [80] phi from main::@7 to divMEMbyFAC [phi:main::@7->divMEMbyFAC] + // [77] phi from main::@7 to divMEMbyFAC [phi:main::@7->divMEMbyFAC] jsr divMEMbyFAC // [21] phi from main::@7 to main::@8 [phi:main::@7->main::@8] // main::@8 @@ -2842,8 +2998,8 @@ main: { // main::@9 // mulFACbyMEM(f_127) // [24] call mulFACbyMEM - // [73] phi from main::@9 to mulFACbyMEM [phi:main::@9->mulFACbyMEM] - // [73] phi (byte*) mulFACbyMEM::mem#2 = (const byte[]) main::f_127#0 [phi:main::@9->mulFACbyMEM#0] -- pbuz1=pbuc1 + // [68] phi from main::@9 to mulFACbyMEM [phi:main::@9->mulFACbyMEM] + // [68] phi (byte*) mulFACbyMEM::mem#2 = (const byte[]) main::f_127#0 [phi:main::@9->mulFACbyMEM#0] -- pbuz1=pbuc1 lda #f_127 @@ -3023,14 +3179,14 @@ print_char: { getFAC: { .label return = 7 // asm - // asm { jsr$b1aa sty$fe sta$ff } + // asm { jsr$b1aa stymemLo stamemHi } // Load FAC (floating point accumulator) integer part into word register Y,A jsr $b1aa - sty.z $fe - sta.z $ff - // w = { *memHi, *memLo} + sty memLo + sta memHi + // w = { *memHi, *memLo } // [61] (word) getFAC::return#0 ← *((const byte*) memHi#0) w= *((const byte*) memLo#0) -- vwuz1=_deref_pbuc1_word__deref_pbuc2 - lda memLo + tya sta.z return lda memHi sta.z return+1 @@ -3044,46 +3200,25 @@ getFAC: { // Set FAC to MEM (float saved in memory) plus FAC (float accumulator) // Reads 5 bytes from memory addMEMtoFAC: { - // prepareMEM(mem) - // [64] call prepareMEM - // [67] phi from addMEMtoFAC to prepareMEM [phi:addMEMtoFAC->prepareMEM] - // [67] phi (byte*) prepareMEM::mem#5 = (const byte[]) main::f_127#0 [phi:addMEMtoFAC->prepareMEM#0] -- pbuz1=pbuc1 - lda #main.f_127 - sta.z prepareMEM.mem+1 - jsr prepareMEM + .const prepareMEM1_mem = main.f_127 + // addMEMtoFAC::prepareMEM1 + // *memLo = mem + // [65] *((const byte*) memHi#0) ← >(const word) addMEMtoFAC::prepareMEM1_mem#0 -- _deref_pbuc1=vbuc2 + lda #>prepareMEM1_mem + sta memHi // addMEMtoFAC::@1 // asm - // asm { lda$fe ldy$ff jsr$b867 } - lda.z $fe - ldy.z $ff + // asm { ldamemLo ldymemHi jsr$b867 } + lda memLo + ldy memHi jsr $b867 // addMEMtoFAC::@return // } - // [66] return - rts -} - // prepareMEM -// Prepare MEM pointers for operations using MEM -// prepareMEM(byte* zeropage(7) mem) -prepareMEM: { - .label mem = 7 - // mem - // [70] (byte~) prepareMEM::$1 ← > (byte*) prepareMEM::mem#5 -- vbuaa=_hi_pbuz1 - lda.z mem+1 - // *memHi = >mem - // [71] *((const byte*) memHi#0) ← (byte~) prepareMEM::$1 -- _deref_pbuc1=vbuaa - sta memHi - // prepareMEM::@return - // } - // [72] return + // [67] return rts } // mulFACbyMEM @@ -3093,21 +3228,28 @@ prepareMEM: { // mulFACbyMEM(byte* zeropage(7) mem) mulFACbyMEM: { .label mem = 7 - // prepareMEM(mem) - // [74] (byte*) prepareMEM::mem#4 ← (byte*) mulFACbyMEM::mem#2 - // [75] call prepareMEM - // [67] phi from mulFACbyMEM to prepareMEM [phi:mulFACbyMEM->prepareMEM] - // [67] phi (byte*) prepareMEM::mem#5 = (byte*) prepareMEM::mem#4 [phi:mulFACbyMEM->prepareMEM#0] -- register_copy - jsr prepareMEM + // mulFACbyMEM::prepareMEM1 + // mem + // [71] (byte~) mulFACbyMEM::prepareMEM1_$1#0 ← > (word)(byte*) mulFACbyMEM::mem#2 -- vbuaa=_hi_vwuz1 + lda.z mem+1 + // *memHi = >mem + // [72] *((const byte*) memHi#0) ← (byte~) mulFACbyMEM::prepareMEM1_$1#0 -- _deref_pbuc1=vbuaa + sta memHi // mulFACbyMEM::@1 // asm - // asm { lda$fe ldy$ff jsr$ba28 } - lda.z $fe - ldy.z $ff + // asm { ldamemLo ldymemHi jsr$ba28 } + lda memLo + ldy memHi jsr $ba28 // mulFACbyMEM::@return // } - // [77] return + // [74] return rts } // sinFAC @@ -3120,7 +3262,7 @@ sinFAC: { jsr $e26b // sinFAC::@return // } - // [79] return + // [76] return rts } // divMEMbyFAC @@ -3128,24 +3270,25 @@ sinFAC: { // Set FAC to MEM (float saved in memory) divided by FAC (float accumulator) // Reads 5 bytes from memory divMEMbyFAC: { - // prepareMEM(mem) - // [81] call prepareMEM - // [67] phi from divMEMbyFAC to prepareMEM [phi:divMEMbyFAC->prepareMEM] - // [67] phi (byte*) prepareMEM::mem#5 = (const byte[]) main::f_i#0 [phi:divMEMbyFAC->prepareMEM#0] -- pbuz1=pbuc1 - lda #main.f_i - sta.z prepareMEM.mem+1 - jsr prepareMEM + .const prepareMEM1_mem = main.f_i + // divMEMbyFAC::prepareMEM1 + // *memLo = mem + // [79] *((const byte*) memHi#0) ← >(const word) divMEMbyFAC::prepareMEM1_mem#0 -- _deref_pbuc1=vbuc2 + lda #>prepareMEM1_mem + sta memHi // divMEMbyFAC::@1 // asm - // asm { lda$fe ldy$ff jsr$bb0f } - lda.z $fe - ldy.z $ff + // asm { ldamemLo ldymemHi jsr$bb0f } + lda memLo + ldy memHi jsr $bb0f // divMEMbyFAC::@return // } - // [83] return + // [81] return rts } // setFAC @@ -3153,19 +3296,26 @@ divMEMbyFAC: { // Set the FAC (floating point accumulator) to the integer value of a 16bit word // setFAC(word zeropage(7) w) setFAC: { + .label prepareMEM1_mem = 7 .label w = 7 - // prepareMEM((byte*)w) - // [85] (byte*) prepareMEM::mem#0 ← (byte*)(word) setFAC::w#3 - // [86] call prepareMEM - // [67] phi from setFAC to prepareMEM [phi:setFAC->prepareMEM] - // [67] phi (byte*) prepareMEM::mem#5 = (byte*) prepareMEM::mem#0 [phi:setFAC->prepareMEM#0] -- register_copy - jsr prepareMEM + // setFAC::prepareMEM1 + // mem + // [85] (byte~) setFAC::prepareMEM1_$1#0 ← > (word) setFAC::prepareMEM1_mem#0 -- vbuaa=_hi_vwuz1 + lda.z prepareMEM1_mem+1 + // *memHi = >mem + // [86] *((const byte*) memHi#0) ← (byte~) setFAC::prepareMEM1_$1#0 -- _deref_pbuc1=vbuaa + sta memHi // setFAC::@1 // asm - // asm { ldy$fe lda$ff jsr$b391 } + // asm { ldymemLo ldamemHi jsr$b391 } // Load word register Y,A into FAC (floating point accumulator) - ldy.z $fe - lda.z $ff + ldy memLo jsr $b391 // setFAC::@return // } @@ -3179,21 +3329,28 @@ setFAC: { // setMEMtoFAC(byte* zeropage(7) mem) setMEMtoFAC: { .label mem = 7 - // prepareMEM(mem) - // [90] (byte*) prepareMEM::mem#1 ← (byte*) setMEMtoFAC::mem#2 - // [91] call prepareMEM - // [67] phi from setMEMtoFAC to prepareMEM [phi:setMEMtoFAC->prepareMEM] - // [67] phi (byte*) prepareMEM::mem#5 = (byte*) prepareMEM::mem#1 [phi:setMEMtoFAC->prepareMEM#0] -- register_copy - jsr prepareMEM + // setMEMtoFAC::prepareMEM1 + // mem + // [92] (byte~) setMEMtoFAC::prepareMEM1_$1#0 ← > (word)(byte*) setMEMtoFAC::mem#2 -- vbuaa=_hi_vwuz1 + lda.z mem+1 + // *memHi = >mem + // [93] *((const byte*) memHi#0) ← (byte~) setMEMtoFAC::prepareMEM1_$1#0 -- _deref_pbuc1=vbuaa + sta memHi // setMEMtoFAC::@1 // asm - // asm { ldx$fe ldy$ff jsr$bbd4 } - ldx.z $fe - ldy.z $ff + // asm { ldxmemLo ldymemHi jsr$bbd4 } + ldx memLo + tay jsr $bbd4 // setMEMtoFAC::@return // } - // [93] return + // [95] return rts } // divFACby10 @@ -3205,7 +3362,7 @@ divFACby10: { jsr $bafe // divFACby10::@return // } - // [95] return + // [97] return rts } // File Data diff --git a/src/test/ref/sinus-basic.sym b/src/test/ref/sinus-basic.sym index 969b3b217..eab10bae1 100644 --- a/src/test/ref/sinus-basic.sym +++ b/src/test/ref/sinus-basic.sym @@ -9,12 +9,22 @@ (label) addMEMtoFAC::@1 (label) addMEMtoFAC::@return (byte*) addMEMtoFAC::mem +(label) addMEMtoFAC::prepareMEM1 +(byte~) addMEMtoFAC::prepareMEM1_$0 +(byte~) addMEMtoFAC::prepareMEM1_$1 +(word) addMEMtoFAC::prepareMEM1_mem +(const word) addMEMtoFAC::prepareMEM1_mem#0 prepareMEM1_mem = (word)(const byte[]) main::f_127#0 (void()) divFACby10() (label) divFACby10::@return (void()) divMEMbyFAC((byte*) divMEMbyFAC::mem) (label) divMEMbyFAC::@1 (label) divMEMbyFAC::@return (byte*) divMEMbyFAC::mem +(label) divMEMbyFAC::prepareMEM1 +(byte~) divMEMbyFAC::prepareMEM1_$0 +(byte~) divMEMbyFAC::prepareMEM1_$1 +(word) divMEMbyFAC::prepareMEM1_mem +(const word) divMEMbyFAC::prepareMEM1_mem#0 prepareMEM1_mem = (word)(const byte[]) main::f_i#0 (word()) getFAC() (label) getFAC::@return (word) getFAC::return @@ -55,16 +65,13 @@ (label) mulFACbyMEM::@1 (label) mulFACbyMEM::@return (byte*) mulFACbyMEM::mem -(byte*) mulFACbyMEM::mem#2 mem zp ZP_WORD:7 2.0 -(void()) prepareMEM((byte*) prepareMEM::mem) -(byte~) prepareMEM::$0 reg byte a 4.0 -(byte~) prepareMEM::$1 reg byte a 4.0 -(label) prepareMEM::@return -(byte*) prepareMEM::mem -(byte*) prepareMEM::mem#0 mem zp ZP_WORD:7 4.0 -(byte*) prepareMEM::mem#1 mem zp ZP_WORD:7 4.0 -(byte*) prepareMEM::mem#4 mem zp ZP_WORD:7 4.0 -(byte*) prepareMEM::mem#5 mem zp ZP_WORD:7 3.333333333333333 +(byte*) mulFACbyMEM::mem#2 mem zp ZP_WORD:7 +(label) mulFACbyMEM::prepareMEM1 +(byte~) mulFACbyMEM::prepareMEM1_$0 +(byte~) mulFACbyMEM::prepareMEM1_$0#0 reg byte a 4.0 +(byte~) mulFACbyMEM::prepareMEM1_$1 +(byte~) mulFACbyMEM::prepareMEM1_$1#0 reg byte a 4.0 +(word) mulFACbyMEM::prepareMEM1_mem (void()) print_byte((byte) print_byte::b) (byte~) print_byte::$0 reg byte a 4.0 (byte~) print_byte::$2 reg byte x 4.0 @@ -104,14 +111,26 @@ (void()) setFAC((word) setFAC::w) (label) setFAC::@1 (label) setFAC::@return +(label) setFAC::prepareMEM1 +(byte~) setFAC::prepareMEM1_$0 +(byte~) setFAC::prepareMEM1_$0#0 reg byte a 4.0 +(byte~) setFAC::prepareMEM1_$1 +(byte~) setFAC::prepareMEM1_$1#0 reg byte a 4.0 +(word) setFAC::prepareMEM1_mem +(word) setFAC::prepareMEM1_mem#0 prepareMEM1_mem zp ZP_WORD:7 5.0 (word) setFAC::w (word) setFAC::w#1 w zp ZP_WORD:7 22.0 -(word) setFAC::w#3 w zp ZP_WORD:7 11.0 (void()) setMEMtoFAC((byte*) setMEMtoFAC::mem) (label) setMEMtoFAC::@1 (label) setMEMtoFAC::@return (byte*) setMEMtoFAC::mem -(byte*) setMEMtoFAC::mem#2 mem zp ZP_WORD:7 2.0 +(byte*) setMEMtoFAC::mem#2 mem zp ZP_WORD:7 +(label) setMEMtoFAC::prepareMEM1 +(byte~) setMEMtoFAC::prepareMEM1_$0 +(byte~) setMEMtoFAC::prepareMEM1_$0#0 reg byte a 4.0 +(byte~) setMEMtoFAC::prepareMEM1_$1 +(byte~) setMEMtoFAC::prepareMEM1_$1#0 reg byte a 4.0 +(word) setMEMtoFAC::prepareMEM1_mem (void()) sinFAC() (label) sinFAC::@return @@ -120,8 +139,12 @@ zp ZP_WORD:3 [ print_line_cursor#6 print_line_cursor#13 print_line_cursor#1 ] reg byte x [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ] zp ZP_WORD:5 [ print_char_cursor#23 print_char_cursor#31 print_char_cursor#32 print_char_cursor#53 print_char_cursor#10 ] -zp ZP_WORD:7 [ getFAC::return#2 print_word::w#0 getFAC::return#0 prepareMEM::mem#5 prepareMEM::mem#4 prepareMEM::mem#0 prepareMEM::mem#1 mulFACbyMEM::mem#2 setFAC::w#3 setFAC::w#1 setMEMtoFAC::mem#2 ] +zp ZP_WORD:7 [ getFAC::return#2 print_word::w#0 getFAC::return#0 setMEMtoFAC::mem#2 setFAC::prepareMEM1_mem#0 setFAC::w#1 mulFACbyMEM::mem#2 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ] -reg byte a [ prepareMEM::$0 ] -reg byte a [ prepareMEM::$1 ] +reg byte a [ mulFACbyMEM::prepareMEM1_$0#0 ] +reg byte a [ mulFACbyMEM::prepareMEM1_$1#0 ] +reg byte a [ setFAC::prepareMEM1_$0#0 ] +reg byte a [ setFAC::prepareMEM1_$1#0 ] +reg byte a [ setMEMtoFAC::prepareMEM1_$0#0 ] +reg byte a [ setMEMtoFAC::prepareMEM1_$1#0 ]