diff --git a/pom.xml b/pom.xml index 3fb6b446f..a89936d31 100644 --- a/pom.xml +++ b/pom.xml @@ -79,7 +79,7 @@ cml.kickass kickassembler - 5.24-65ce02.a + 5.24-65ce02.b dk.camelot64.kickass.xexplugin diff --git a/repo/cml/kickass/kickassembler/5.24-65ce02.b/kickassembler-5.24-65ce02.b.jar b/repo/cml/kickass/kickassembler/5.24-65ce02.b/kickassembler-5.24-65ce02.b.jar new file mode 100644 index 000000000..af24d1e2b Binary files /dev/null and b/repo/cml/kickass/kickassembler/5.24-65ce02.b/kickassembler-5.24-65ce02.b.jar differ diff --git a/repo/cml/kickass/kickassembler/5.24-65ce02.b/kickassembler-5.24-65ce02.b.jar.md5 b/repo/cml/kickass/kickassembler/5.24-65ce02.b/kickassembler-5.24-65ce02.b.jar.md5 new file mode 100644 index 000000000..a9e37e9d1 --- /dev/null +++ b/repo/cml/kickass/kickassembler/5.24-65ce02.b/kickassembler-5.24-65ce02.b.jar.md5 @@ -0,0 +1 @@ +0c00040f87c87fb73965e1f53afe7dcc \ No newline at end of file diff --git a/repo/cml/kickass/kickassembler/5.24-65ce02.b/kickassembler-5.24-65ce02.b.jar.sha1 b/repo/cml/kickass/kickassembler/5.24-65ce02.b/kickassembler-5.24-65ce02.b.jar.sha1 new file mode 100644 index 000000000..7142f2d4d --- /dev/null +++ b/repo/cml/kickass/kickassembler/5.24-65ce02.b/kickassembler-5.24-65ce02.b.jar.sha1 @@ -0,0 +1 @@ +d51578b4523d90c4d5d5e9e3fe2806b42fd4a2ea \ No newline at end of file diff --git a/repo/cml/kickass/kickassembler/5.24-65ce02.b/kickassembler-5.24-65ce02.b.pom b/repo/cml/kickass/kickassembler/5.24-65ce02.b/kickassembler-5.24-65ce02.b.pom new file mode 100644 index 000000000..296d72ee8 --- /dev/null +++ b/repo/cml/kickass/kickassembler/5.24-65ce02.b/kickassembler-5.24-65ce02.b.pom @@ -0,0 +1,9 @@ + + + 4.0.0 + cml.kickass + kickassembler + 5.24-65ce02.b + POM was created from install:install-file + diff --git a/repo/cml/kickass/kickassembler/5.24-65ce02.b/kickassembler-5.24-65ce02.b.pom.md5 b/repo/cml/kickass/kickassembler/5.24-65ce02.b/kickassembler-5.24-65ce02.b.pom.md5 new file mode 100644 index 000000000..72ac4baac --- /dev/null +++ b/repo/cml/kickass/kickassembler/5.24-65ce02.b/kickassembler-5.24-65ce02.b.pom.md5 @@ -0,0 +1 @@ +a4241896151d8ae9bad33889412751d9 \ No newline at end of file diff --git a/repo/cml/kickass/kickassembler/5.24-65ce02.b/kickassembler-5.24-65ce02.b.pom.sha1 b/repo/cml/kickass/kickassembler/5.24-65ce02.b/kickassembler-5.24-65ce02.b.pom.sha1 new file mode 100644 index 000000000..737168d0a --- /dev/null +++ b/repo/cml/kickass/kickassembler/5.24-65ce02.b/kickassembler-5.24-65ce02.b.pom.sha1 @@ -0,0 +1 @@ +3e36d1dbb157f463b0459185f396ce8da6f93ad9 \ No newline at end of file diff --git a/repo/cml/kickass/kickassembler/maven-metadata.xml b/repo/cml/kickass/kickassembler/maven-metadata.xml index 2bdd8d0f7..5fc56c551 100644 --- a/repo/cml/kickass/kickassembler/maven-metadata.xml +++ b/repo/cml/kickass/kickassembler/maven-metadata.xml @@ -3,7 +3,7 @@ cml.kickass kickassembler - 5.24-65ce02.a + 5.24-65ce02.b 4.19 5.7 @@ -28,7 +28,8 @@ 5.22-65ce02.a 5.23-65ce02.a 5.24-65ce02.a + 5.24-65ce02.b - 20220123234604 + 20220130203320 diff --git a/repo/cml/kickass/kickassembler/maven-metadata.xml.md5 b/repo/cml/kickass/kickassembler/maven-metadata.xml.md5 index 5dc89afe7..e0df63399 100644 --- a/repo/cml/kickass/kickassembler/maven-metadata.xml.md5 +++ b/repo/cml/kickass/kickassembler/maven-metadata.xml.md5 @@ -1 +1 @@ -e21df397cfbdfffab5bdf0710903e415 \ No newline at end of file +0f43678d3dce50a145dd7e42adc79ca1 \ No newline at end of file diff --git a/repo/cml/kickass/kickassembler/maven-metadata.xml.sha1 b/repo/cml/kickass/kickassembler/maven-metadata.xml.sha1 index 47911a051..83fd450ec 100644 --- a/repo/cml/kickass/kickassembler/maven-metadata.xml.sha1 +++ b/repo/cml/kickass/kickassembler/maven-metadata.xml.sha1 @@ -1 +1 @@ -e1786fe7f339b0358623f3109c1e3aa3306c9011 \ No newline at end of file +2b207a0d7add8d7cd4ebc8a58ddbbbd2e6122739 \ No newline at end of file diff --git a/src/main/antlr4/dk/camelot64/kickc/parser/KickCLexer.g4 b/src/main/antlr4/dk/camelot64/kickc/parser/KickCLexer.g4 index 9f89c8e51..afb7dc1ec 100644 --- a/src/main/antlr4/dk/camelot64/kickc/parser/KickCLexer.g4 +++ b/src/main/antlr4/dk/camelot64/kickc/parser/KickCLexer.g4 @@ -165,7 +165,7 @@ ASM_MNEMONIC: 'tsb' | 'wai' | 'cle' | 'see' | 'tsy' | 'lbpl'| 'inz' | 'tys' | 'lbmi'| 'dez' | 'neg' | 'asr' | 'taz' | 'lbvc'| 'tab' | 'map' | 'rtn' | 'lbsr'| 'tza' | 'lbvs'| 'tba' | 'lbra'| 'lbcc'| 'ldz' | 'lbcs'| 'cpz' | 'dew' | 'asw' | 'lbne'| 'phz' | 'inw' | 'row' | 'lbeq'| 'phw' | 'plz' | 'eom' | 'adcq'| 'andq'| 'aslq'| 'asrq'| 'bitq'| 'cpq' | 'deq' | 'eorq'| 'inq' | 'ldq' | 'lsrq'| 'orq' | 'rolq'| 'rorq'| 'sbcq'| 'stq' | 'sxy' | 'st0' | 'st1' | 'st2' | 'say' | - 'tma' | 'bsr' | 'tam' | 'csl' | 'cla' | 'clx' | 'cly' | 'csh' | 'set' + 'tma' | 'bsr' | 'tam' | 'csl' | 'cla' | 'clx' | 'cly' | 'csh' | 'set' | 'tst' ; ASM_IMM : '#' ; diff --git a/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 b/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 index c47ca342e..3ecc3db89 100644 --- a/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 +++ b/src/main/antlr4/dk/camelot64/kickc/parser/KickCParser.g4 @@ -305,6 +305,7 @@ asmParamMode | ASM_PAR_BEGIN asmExpr ASM_COMMA ASM_NAME ASM_PAR_END #asmModeIdxIndXY | ASM_PAR_BEGIN asmExpr ASM_PAR_END #asmModeInd | ASM_PAR_BEGIN ASM_PAR_BEGIN asmExpr ASM_PAR_END ASM_PAR_END #asmModeIndLong + | ASM_IMM asmExpr ASM_COMMA asmExpr #asmModeImmAndAbs ; asmExpr diff --git a/src/main/java/dk/camelot64/cpufamily6502/CpuAddressingMode.java b/src/main/java/dk/camelot64/cpufamily6502/CpuAddressingMode.java index befa6f19b..4eea59b61 100644 --- a/src/main/java/dk/camelot64/cpufamily6502/CpuAddressingMode.java +++ b/src/main/java/dk/camelot64/cpufamily6502/CpuAddressingMode.java @@ -176,7 +176,20 @@ public enum CpuAddressingMode { * test, and one indicating the signed relative PC offset if the branch is taken. This makes BBRi and BBSi the single * instructions with two explicit operands. */ - REZ("zp,rel", "%i %p,%q", 2); + REZ("zp,rel", "%i %p,%q", 2), + + /** + * #imm,zp Immediate, zeropage
+ * IMMEDIATE ADDRESSING, ZEROPAGE — Two parameters, one immediate the other a zeropage address. Only used by HUC6280 TST. + */ + IMMANDZP("#imm,zp", "%i #%p,%q", 3), + + /** + * #imm,abs Immediate, absolute
+ * IMMEDIATE ADDRESSING, ABSOLUTE — Two parameters, one immediate the other an absolute address. Only used by HUC6280 TST. + */ + IMMANDABS("#imm,abs", "%i #%p,%q", 4); + /** The short name of the addressing mode. */ private String name; diff --git a/src/main/java/dk/camelot64/cpufamily6502/cpus/CpuHuc6280.java b/src/main/java/dk/camelot64/cpufamily6502/cpus/CpuHuc6280.java index aec737258..d63a82988 100644 --- a/src/main/java/dk/camelot64/cpufamily6502/cpus/CpuHuc6280.java +++ b/src/main/java/dk/camelot64/cpufamily6502/cpus/CpuHuc6280.java @@ -45,6 +45,8 @@ public class CpuHuc6280 extends Cpu65xx { addOpcode(0xc2,"cly", CpuAddressingMode.NON,2,"Y"); addOpcode(0xd4,"csh", CpuAddressingMode.NON,2,""); addOpcode(0xf4,"set", CpuAddressingMode.NON,2,""); + addOpcode(0x83,"tst", CpuAddressingMode.IMMANDZP,7,"vnz"); + addOpcode(0xA3,"tst", CpuAddressingMode.IMMANDABS,8,"vnz"); } } diff --git a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstance.java b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstance.java index c08125473..364693a92 100644 --- a/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstance.java +++ b/src/main/java/dk/camelot64/kickc/fragment/AsmFragmentInstance.java @@ -286,6 +286,11 @@ public class AsmFragmentInstance { return createAsmInstruction(ctx, ctx.asmExpr(), null, CpuAddressingMode.IMM); } + @Override + public Object visitAsmModeImmAndAbs(KickCParser.AsmModeImmAndAbsContext ctx) { + return createAsmInstruction(ctx, ctx.asmExpr(0), ctx.asmExpr(1), CpuAddressingMode.IMMANDABS); + } + @Override public Object visitAsmModeAbsXY(KickCParser.AsmModeAbsXYContext ctx) { final KickCParser.AsmExprContext indexCtx = ctx.asmExpr(1); diff --git a/src/main/repo/mvn-repo-install-kickass.sh b/src/main/repo/mvn-repo-install-kickass.sh index 88344821f..69c3a3722 100755 --- a/src/main/repo/mvn-repo-install-kickass.sh +++ b/src/main/repo/mvn-repo-install-kickass.sh @@ -4,7 +4,7 @@ cp ./repo/cml/kickass/kickassembler/maven-metadata.xml ./repo/cml/kickass/kickassembler/maven-metadata-local.xml # mvn install:install-file -Dmaven.repo.local=./repo/ -Dfile=/Applications/KickAssembler/KickAss.jar -DgroupId=cml.kickass -DartifactId=kickassembler -Dpackaging=jar -DgeneratePom=true -DcreateChecksum=true -Dversion=5.16 -mvn install:install-file -Dmaven.repo.local=./repo/ -Dfile=/Users/jespergravgaard/c64/kickassembler65ce02/out/KickAss65CE02.jar -DgroupId=cml.kickass -DartifactId=kickassembler -Dpackaging=jar -DgeneratePom=true -DcreateChecksum=true -Dversion=5.24-65ce02.a +mvn install:install-file -Dmaven.repo.local=./repo/ -Dfile=/Users/jespergravgaard/c64/kickassembler65ce02/out/KickAss65CE02.jar -DgroupId=cml.kickass -DartifactId=kickassembler -Dpackaging=jar -DgeneratePom=true -DcreateChecksum=true -Dversion=5.24-65ce02.b # Finalize by making the local metadata official pushd ./repo/cml/kickass/kickassembler diff --git a/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java b/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java index ab5fb7e68..30fc8a4a7 100644 --- a/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java +++ b/src/test/java/dk/camelot64/kickc/test/TestProgramsFast.java @@ -9,6 +9,27 @@ import java.io.IOException; */ public class TestProgramsFast extends TestPrograms { + @Test + public void testPointerSwap() throws IOException { + compileAndCompare("pointer-swap.c", log()); + } + + @Test + public void testDucksTotal() throws IOException { + compileAndCompare("ducks-total.c", log()); + } + + @Test + public void testDucksLoop211() throws IOException { + compileAndCompare("ducks-loop211.c", log()); + } + + @Test + public void testDucksArray() throws IOException { + compileAndCompare("ducks-array.c", log()); + } + + @Test public void testSepaOptimizeProblem1() throws IOException { compileAndCompare("sepa-optimize-problem-1.c"); diff --git a/src/test/kc/cpu-huc6280.c b/src/test/kc/cpu-huc6280.c index 9c880f017..a55591913 100644 --- a/src/test/kc/cpu-huc6280.c +++ b/src/test/kc/cpu-huc6280.c @@ -20,6 +20,8 @@ void main() { cly csh set + tst #1+2,$3+4 + tst #1+2*3,$7654/2 !: rts } diff --git a/src/test/kc/ducks-array.c b/src/test/kc/ducks-array.c new file mode 100644 index 000000000..2a5fb89b4 --- /dev/null +++ b/src/test/kc/ducks-array.c @@ -0,0 +1,14 @@ +#include +unsigned byte points[]={1,2,3,4}; + +void chrout(volatile char register(A) petscii) + { asm { jsr $ffd2 }} + +void main() +{ +chrout(149); +chrout(points[0]); +chrout(points[1]); +chrout(points[2]); +chrout(points[3]); +} diff --git a/src/test/kc/ducks-loop211.c b/src/test/kc/ducks-loop211.c new file mode 100644 index 000000000..c32983b03 --- /dev/null +++ b/src/test/kc/ducks-loop211.c @@ -0,0 +1,22 @@ +#include +#include <6502.h> + +const unsigned byte brick=230; + +void chrout(volatile char petscii) +{ + asm { + lda petscii + jsr $ffd2 + } +} + +void main() +{ + char k=1; + do { + POKE(211,k*4); + chrout(brick); + ++k; + } while (k<5); +} \ No newline at end of file diff --git a/src/test/kc/ducks-total.c b/src/test/kc/ducks-total.c new file mode 100644 index 000000000..fcb4e274e --- /dev/null +++ b/src/test/kc/ducks-total.c @@ -0,0 +1,157 @@ +#include +#include +#include +#include + +unsigned byte j,k,l,m,n=0; // [0..255] 8-bit +unsigned short tu,duck,peephole,y,z,time,score,hiscore=0; // [0..65536] 16-bit +unsigned byte points[]={0,0,0,0}; +unsigned byte buffer[]={0,0,0,0}; + +const unsigned byte down=17,right=29,lock=8,lower=14; +const unsigned byte home=19,reverse_on=18,brick=230; +const unsigned byte green=30,yellow=158,red=28; +const unsigned short c=30720; // for unexpanded. 37888-4096 color for expanded +const unsigned byte ducknumber[]={68,85,67,75,58}; // DUCK: +const unsigned byte chrono[]={84,77,58,57}; // TM:9 +const unsigned byte duck_udg[]={14,27,63,31,15,7,15,31,0,0,0,0,0,192,112,188,31,29,30,15,3,1,1,3,206,30,124,248,224,64,64,224,0,0,0,0,0,0,0,0}; +// POKE CODES = 0,1,2,3,4; CHROUT CODES = 64, 65, 66, 67, 68 (with previous reverse_off "chrout(146)") +const unsigned byte intro[]="\n\n\nDIFFICULTY\n----------\n\n\n"; +const unsigned byte levels[]="1.EASIEST\n\n3.EASY\n\n5.MEDIUM\n\n7.HARD\n\n9.EXPERT\n\n\n\n\n"; +const unsigned byte foot[]="PRESS: 1,3,5,7 or 9\n\n"; +const unsigned byte game_over[]="\n\n\n\nGAME OVER"; +const unsigned byte play_again[]="\n\n\nPlay Again (Y/N)?"; +const unsigned byte your_score[]="\n\n\nYour Score: "; +const unsigned byte high_score[]="\n\nHi-Score: "; + +void clear_screen(byte n, byte m) +{ for (z=0; z<506; ++z) { POKE(7680+z+c,m); POKE(7680+z,n); } // From 0-->505 (506 bytes). ClearScreen with byte 'n' with color 'm' + gotoxy(0,0); chrout(home); } // Return to home position + +void random(byte k, byte n) // Random { k..n } +{ do { m=PEEK(37140); } + while (mn); } + +void chrout(volatile char petscii) + { asm { lda petscii jsr $ffd2 }} + +void write_score(void) { + if (score>65000) score=0; + for (m=0;m<4;m++) { points[m]='0'; } // (!!) Needed. Possibly a bug + utoa(score,buffer,10); + if (score>9) { points[2]=buffer[0];points[3]=buffer[1]; } + if (score>99) { points[1]=buffer[0];points[2]=buffer[1];points[3]=buffer[2]; } + chrout(yellow);chrout(home);POKE(211,4); + for (m=0;m<4;m++) { chrout(points[m]); } +} + +void wait(byte n) +{ for (m=0;m39; + do { + clear_screen(32,0); // Clear Screen with spaces & black ink + textcolor(7); cputs(intro); // Yellow ink + textcolor(1); cputs(levels); // White + textcolor(2); cputs(foot); // Red + do { l=PEEK(197); ++l; } while (l>5); // wait for 1-3-5-7-9 keys only + clear_screen(4,0); // with (4=duser defined). Black ink + POKE(36869,255); // Graphic mode + chrout(reverse_on);chrout(red);chrout(down); + //for (z=1;z<23;z++) { POKE(7680+z*22,230);POKE(c+7680+z*22,2); POKE(7679+z*22,230); POKE(c+7679+z*22,2); } // 23 rows * 22 columns (7680 to 8185). 506 positions. + //k=1; do { chrout(brick); POKE(211,20); chrout(brick); ++k; } while (k<23); + //for (k=1;k<22;k++) { chrout(brick); POKE(211,22); chrout(brick); }; // 23 rows * 22 columns (7680 to 8185). 506 positions. + for (k=1;k<22;k++) { chrout(brick); for(n=2;n<22;++n) { chrout(right); }; chrout(brick); }; // 23 rows * 22 columns (7680 to 8185). 506 positions. + chrout(brick); // first brick from last line (#23) + POKE(8185,brick);POKE(8185+c,2); //last brick from last line (#23) to avoid scrolling + chrout(home); z=1; // First position + if (l>1) { + do { // Write differential random bricks depending on 'l' level choosen + random((7-l),26-(3*l)); // Random number is 'm' (interleaves are level-dependent) + if (z+m>505) break; + for (j=1; j<=m; ++j) chrout(right); + chrout(brick); z=z+m+1; } + while (z<506); + } + peephole=7967; // Initial peephole position + POKE(36878,15); // Volume to max + score=0; + tu=1; // Duck #1 + chrout(home);chrout(yellow);chrout(80);chrout(84);chrout(83);chrout(58); // Write 'PTS:', yellow + POKE(211,18); // jump to Column 18 + for (j=0; j<4; ++j) { chrout(chrono[j]); }; // Write 'TM:9', yellow + write_score(); // Write Score (yellow) + chrout(home);chrout(green);POKE(211,10); // Jump to column 10 + for (j=0; j<5; j++) { chrout(ducknumber[j]); }; // Write 'DUCK', green + do { + chrout(home);chrout(green);chrout(reverse_on); + POKE(211,15); // Jump to column 15 + if (tu<10) { chrout(48+tu) }; else { chrout(49);chrout(48); } // Write duck number + do { random(0,255); duck=m; random(0,255); duck=m+7701+duck; } // Choose randon Duck position (in 2 parts random+random) + while ((duck>8163) || PEEK(duck)==brick || PEEK(duck+1)==brick || PEEK(duck+22)==brick || PEEK(duck+23)==brick); + time=0;chrono_restart(); + while (time<10) // ...until 10 seconds + { read_chrono(); + // Joystick routine + m=PEEK(37151); POKE(37154,127); + n=PEEK(37152); POKE(37154,255); + if ((16&m)==0) y--; // Left + if ((128&n)==0) y++; // Right + if ((4&m)==0) y=y-22; // Up + if ((8&m)==0) y=y+22; // Down + if ((32&m)==0) // FIRE!! + { POKE(36877,130); + if (peephole!=duck) { score=score-10; write_score(); wait(10); } // We hit the duck! + else { score=score+(12-time)*10; wait(10);time=10; } // We fail! + POKE(36877,0); // Stop sounds + } + if (PEEK(y)!=brick && PEEK(y+1)!=brick && PEEK(y+22)!=brick && PEEK(y+23)!=brick && y>7702 && y<8163) + { POKE(peephole+c,0); POKE(peephole+c+1,0); POKE(peephole+c+22,0); POKE(peephole+c+23,0); peephole=y; } // Check if peephole touches some bricks + y=peephole; + POKE(peephole,253);POKE(peephole+c,1);POKE(peephole+1,237);POKE(peephole+1+c,1); + POKE(peephole+22,238);POKE(peephole+22+c,1);POKE(peephole+23,240);POKE(peephole+23+c,1); // Clear peephole if there is not bricks contact + wait(5); + POKE(duck,0);POKE(duck+c,7);POKE(duck+1,1);POKE(duck+1+c,7); // Draw duck (udg) + POKE(duck+22,2);POKE(duck+22+c,7);POKE(duck+23,3);POKE(duck+23+c,7); + wait(5); + } + tu++; // Next duck + score=score-10;write_score(); // Substract 10 points if time finishes + POKE(36877,130);wait(20);POKE(36877,0); // Make some noise + POKE(duck+c,0); POKE(duck+1+c,0); POKE(duck+22+c,0); POKE(duck+23+c,0); // Clear previous duck draw + } + while (tu<11); // 10 ducks + clear_screen(4,0); // Clear screen with user-defined spaces & black ink + POKE(36869,240);chrout(lower); // Return to text mode, lowcase + textcolor(7); cputs(game_over); // Yellow + textcolor(2); cputs(your_score); cputs(buffer); // Red + textcolor(3); cputs(high_score); if (score>hiscore) hiscore=score; utoa(hiscore,buffer,10); cputs(buffer); // Cyan + textcolor(1); cputs(play_again); // white + do { j=PEEK(197); } while (j!= 11 && j!=28 ); // Wait for Y or N + } // Y pressed --> start again +while (j==11); // N pressed. Exit game +asm {jsr $FD22}; // Reset the VIC. +} \ No newline at end of file diff --git a/src/test/kc/pointer-swap.c b/src/test/kc/pointer-swap.c new file mode 100644 index 000000000..f06fbe89e --- /dev/null +++ b/src/test/kc/pointer-swap.c @@ -0,0 +1,31 @@ + +byte buffer1[10]; +byte buffer2[10]; + +byte *newbuffer = buffer1; +byte *oldbuffer = buffer2; +byte *tempbuffer; + +char* screen = (char*)0x0400; +char hextab[] = "0123456789abcdef"z; + +void print() { + screen[0] = hextab[(char)tempbuffer&0x0f]; + screen[2] = hextab[(char)newbuffer&0x0f]; + screen[4] = hextab[(char)oldbuffer&0x0f]; + screen += 40; +} + +void swap() { + tempbuffer = newbuffer; + newbuffer = oldbuffer; + oldbuffer = tempbuffer; + print(); +} + +void main() { + print(); + swap(); + swap(); + swap(); +} diff --git a/src/test/ref/cpu-huc6280.asm b/src/test/ref/cpu-huc6280.asm index d4be5f55e..5849a2370 100644 --- a/src/test/ref/cpu-huc6280.asm +++ b/src/test/ref/cpu-huc6280.asm @@ -26,6 +26,8 @@ main: { cly csh set + tst #1+2,3+4 + tst #1+2*3,$7654/2 !: rts // } diff --git a/src/test/ref/cpu-huc6280.cfg b/src/test/ref/cpu-huc6280.cfg index bb2b4af08..5f4b06765 100644 --- a/src/test/ref/cpu-huc6280.cfg +++ b/src/test/ref/cpu-huc6280.cfg @@ -1,7 +1,7 @@ void main() main: scope:[main] from - asm { sxy st0#$55 st1#$aa sax st2#$be say tma#2 bsr!+ tam#4 csl cla clx cly csh set !: rts } + asm { sxy st0#$55 st1#$aa sax st2#$be say tma#2 bsr!+ tam#4 csl cla clx cly csh set tst#1+2,$3+4 tst#1+2*3,$7654/2 !: rts } to:main::@return main::@return: scope:[main] from main [1] return diff --git a/src/test/ref/cpu-huc6280.log b/src/test/ref/cpu-huc6280.log index c0d14db69..746feb160 100644 --- a/src/test/ref/cpu-huc6280.log +++ b/src/test/ref/cpu-huc6280.log @@ -3,7 +3,7 @@ CONTROL FLOW GRAPH SSA void main() main: scope:[main] from __start - asm { sxy st0#$55 st1#$aa sax st2#$be say tma#2 bsr!+ tam#4 csl cla clx cly csh set !: rts } + asm { sxy st0#$55 st1#$aa sax st2#$be say tma#2 bsr!+ tam#4 csl cla clx cly csh set tst#1+2,$3+4 tst#1+2*3,$7654/2 !: rts } to:main::@return main::@return: scope:[main] from main return @@ -37,7 +37,7 @@ FINAL CONTROL FLOW GRAPH void main() main: scope:[main] from - asm { sxy st0#$55 st1#$aa sax st2#$be say tma#2 bsr!+ tam#4 csl cla clx cly csh set !: rts } + asm { sxy st0#$55 st1#$aa sax st2#$be say tma#2 bsr!+ tam#4 csl cla clx cly csh set tst#1+2,$3+4 tst#1+2*3,$7654/2 !: rts } to:main::@return main::@return: scope:[main] from main [1] return @@ -50,14 +50,14 @@ void main() Initial phi equivalence classes Complete equivalence classes REGISTER UPLIFT POTENTIAL REGISTERS -Statement asm { sxy st0#$55 st1#$aa sax st2#$be say tma#2 bsr!+ tam#4 csl cla clx cly csh set !: rts } always clobbers reg byte a reg byte x reg byte y +Statement asm { sxy st0#$55 st1#$aa sax st2#$be say tma#2 bsr!+ tam#4 csl cla clx cly csh set tst#1+2,$3+4 tst#1+2*3,$7654/2 !: rts } always clobbers reg byte a reg byte x reg byte y REGISTER UPLIFT SCOPES Uplift Scope [main] Uplift Scope [] -Uplifting [main] best 65 combination -Uplifting [] best 65 combination +Uplifting [main] best 81 combination +Uplifting [] best 81 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -76,7 +76,7 @@ ASSEMBLER BEFORE OPTIMIZATION .segment Code // main main: { - // asm { sxy st0#$55 st1#$aa sax st2#$be say tma#2 bsr!+ tam#4 csl cla clx cly csh set !: rts } + // asm { sxy st0#$55 st1#$aa sax st2#$be say tma#2 bsr!+ tam#4 csl cla clx cly csh set tst#1+2,$3+4 tst#1+2*3,$7654/2 !: rts } sxy st0 #$55 st1 #$aa @@ -92,6 +92,8 @@ main: { cly csh set + tst #1+2,3+4 + tst #1+2*3,$7654/2 !: rts jmp __breturn @@ -116,7 +118,7 @@ void main() FINAL ASSEMBLER -Score: 56 +Score: 72 // File Comments // Tests the HUC6280 instructions @@ -135,7 +137,7 @@ Score: 56 // main main: { // asm - // asm { sxy st0#$55 st1#$aa sax st2#$be say tma#2 bsr!+ tam#4 csl cla clx cly csh set !: rts } + // asm { sxy st0#$55 st1#$aa sax st2#$be say tma#2 bsr!+ tam#4 csl cla clx cly csh set tst#1+2,$3+4 tst#1+2*3,$7654/2 !: rts } sxy st0 #$55 st1 #$aa @@ -151,6 +153,8 @@ main: { cly csh set + tst #1+2,3+4 + tst #1+2*3,$7654/2 !: rts // main::@return diff --git a/src/test/ref/ducks-array.asm b/src/test/ref/ducks-array.asm new file mode 100644 index 000000000..fe39f4296 --- /dev/null +++ b/src/test/ref/ducks-array.asm @@ -0,0 +1,45 @@ +/// @file +/// Functions for performing input and output. + // Commodore 64 PRG executable file +.file [name="ducks-array.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) +.segment Code +main: { + // chrout(149) + lda #$95 + sta.z chrout.petscii + jsr chrout + // chrout(points[0]) + lda points + sta.z chrout.petscii + jsr chrout + // chrout(points[1]) + lda points+1 + sta.z chrout.petscii + jsr chrout + // chrout(points[2]) + lda points+2 + sta.z chrout.petscii + jsr chrout + // chrout(points[3]) + lda points+3 + sta.z chrout.petscii + jsr chrout + // } + rts +} +// void chrout(__zp(2) volatile char petscii) +chrout: { + .label petscii = 2 + // asm + jsr $ffd2 + // } + rts +} +.segment Data + points: .byte 1, 2, 3, 4 diff --git a/src/test/ref/ducks-array.cfg b/src/test/ref/ducks-array.cfg new file mode 100644 index 000000000..a829ab50d --- /dev/null +++ b/src/test/ref/ducks-array.cfg @@ -0,0 +1,33 @@ + +void main() +main: scope:[main] from + [0] chrout::petscii = $95 + [1] call chrout + to:main::@1 +main::@1: scope:[main] from main + [2] chrout::petscii = *points + [3] call chrout + to:main::@2 +main::@2: scope:[main] from main::@1 + [4] chrout::petscii = *(points+1) + [5] call chrout + to:main::@3 +main::@3: scope:[main] from main::@2 + [6] chrout::petscii = *(points+2) + [7] call chrout + to:main::@4 +main::@4: scope:[main] from main::@3 + [8] chrout::petscii = *(points+3) + [9] call chrout + to:main::@return +main::@return: scope:[main] from main::@4 + [10] return + to:@return + +void chrout(volatile char petscii) +chrout: scope:[chrout] from main main::@1 main::@2 main::@3 main::@4 + asm { jsr$ffd2 } + to:chrout::@return +chrout::@return: scope:[chrout] from chrout + [12] return + to:@return diff --git a/src/test/ref/ducks-array.log b/src/test/ref/ducks-array.log new file mode 100644 index 000000000..52b0efcee --- /dev/null +++ b/src/test/ref/ducks-array.log @@ -0,0 +1,521 @@ +Fixing struct type size struct printf_buffer_number to 12 +Fixing struct type size struct printf_buffer_number to 12 +Fixing struct type size struct printf_buffer_number to 12 +Fixing struct type SIZE_OF struct printf_buffer_number to 12 +Fixing struct type SIZE_OF struct printf_buffer_number to 12 +Inlined call vicSelectGfxBank::$0 = call toDd00(vicSelectGfxBank::gfx) +Inlined call call __init +Eliminating unused variable with no statement gotoxy::$4 +Eliminating unused variable with no statement printf_buffer + +CONTROL FLOW GRAPH SSA + +void gotoxy(char x , char y) +gotoxy: scope:[gotoxy] from conio_c64_init::@1 + gotoxy::x#3 = phi( conio_c64_init::@1/gotoxy::x#1 ) + gotoxy::y#2 = phi( conio_c64_init::@1/gotoxy::y#1 ) + gotoxy::$0 = gotoxy::y#2 > $19 + gotoxy::$1 = ! gotoxy::$0 + if(gotoxy::$1) goto gotoxy::@1 + to:gotoxy::@2 +gotoxy::@1: scope:[gotoxy] from gotoxy gotoxy::@2 + gotoxy::x#2 = phi( gotoxy/gotoxy::x#3, gotoxy::@2/gotoxy::x#4 ) + gotoxy::$2 = gotoxy::x#2 >= $28 + gotoxy::$3 = ! gotoxy::$2 + if(gotoxy::$3) goto gotoxy::@return + to:gotoxy::@3 +gotoxy::@2: scope:[gotoxy] from gotoxy + gotoxy::x#4 = phi( gotoxy/gotoxy::x#3 ) + gotoxy::y#0 = 0 + to:gotoxy::@1 +gotoxy::@3: scope:[gotoxy] from gotoxy::@1 + gotoxy::x#0 = 0 + to:gotoxy::@return +gotoxy::@return: scope:[gotoxy] from gotoxy::@1 gotoxy::@3 + return + to:@return + +void conio_c64_init() +conio_c64_init: scope:[conio_c64_init] from __start::__init1 + conio_c64_init::line#0 = *conio_c64_init::BASIC_CURSOR_LINE + conio_c64_init::$0 = conio_c64_init::line#0 >= $19 + conio_c64_init::$1 = ! conio_c64_init::$0 + if(conio_c64_init::$1) goto conio_c64_init::@1 + to:conio_c64_init::@2 +conio_c64_init::@1: scope:[conio_c64_init] from conio_c64_init conio_c64_init::@2 + conio_c64_init::line#2 = phi( conio_c64_init/conio_c64_init::line#0, conio_c64_init::@2/conio_c64_init::line#1 ) + gotoxy::x#1 = 0 + gotoxy::y#1 = conio_c64_init::line#2 + call gotoxy + to:conio_c64_init::@3 +conio_c64_init::@3: scope:[conio_c64_init] from conio_c64_init::@1 + to:conio_c64_init::@return +conio_c64_init::@2: scope:[conio_c64_init] from conio_c64_init + conio_c64_init::line#1 = $19-1 + to:conio_c64_init::@1 +conio_c64_init::@return: scope:[conio_c64_init] from conio_c64_init::@3 + return + to:@return + +void chrout(volatile char petscii) +chrout: scope:[chrout] from main main::@1 main::@2 main::@3 main::@4 + asm { jsr$ffd2 } + to:chrout::@return +chrout::@return: scope:[chrout] from chrout + return + to:@return + +void main() +main: scope:[main] from __start::@1 + chrout::petscii = $95 + call chrout + to:main::@1 +main::@1: scope:[main] from main + chrout::petscii = points[0] + call chrout + to:main::@2 +main::@2: scope:[main] from main::@1 + chrout::petscii = points[1] + call chrout + to:main::@3 +main::@3: scope:[main] from main::@2 + chrout::petscii = points[2] + call chrout + to:main::@4 +main::@4: scope:[main] from main::@3 + chrout::petscii = points[3] + call chrout + to:main::@5 +main::@5: scope:[main] from main::@4 + to:main::@return +main::@return: scope:[main] from main::@5 + return + to:@return + +void __start() +__start: scope:[__start] from + to:__start::__init1 +__start::__init1: scope:[__start] from __start + call conio_c64_init + to:__start::@2 +__start::@2: scope:[__start] from __start::__init1 + to:__start::@1 +__start::@1: scope:[__start] from __start::@2 + call main + to:__start::@3 +__start::@3: scope:[__start] from __start::@1 + to:__start::@return +__start::@return: scope:[__start] from __start::@3 + return + to:@return + +SYMBOL TABLE SSA +__constant char RADIX::BINARY = 2 +__constant char RADIX::DECIMAL = $a +__constant char RADIX::HEXADECIMAL = $10 +__constant char RADIX::OCTAL = 8 +void __start() +void chrout(volatile char petscii) +__loadstore volatile char chrout::petscii +void conio_c64_init() +bool conio_c64_init::$0 +bool conio_c64_init::$1 +__constant char * const conio_c64_init::BASIC_CURSOR_LINE = (char *)$d6 +char conio_c64_init::line +char conio_c64_init::line#0 +char conio_c64_init::line#1 +char conio_c64_init::line#2 +void gotoxy(char x , char y) +bool gotoxy::$0 +bool gotoxy::$1 +bool gotoxy::$2 +bool gotoxy::$3 +char gotoxy::x +char gotoxy::x#0 +char gotoxy::x#1 +char gotoxy::x#2 +char gotoxy::x#3 +char gotoxy::x#4 +char gotoxy::y +char gotoxy::y#0 +char gotoxy::y#1 +char gotoxy::y#2 +void main() +__constant char points[] = { 1, 2, 3, 4 } + +Adding number conversion cast (unumber) $19 in gotoxy::$0 = gotoxy::y#2 > $19 +Adding number conversion cast (unumber) $28 in gotoxy::$2 = gotoxy::x#2 >= $28 +Adding number conversion cast (unumber) 0 in gotoxy::y#0 = 0 +Adding number conversion cast (unumber) 0 in gotoxy::x#0 = 0 +Adding number conversion cast (unumber) $19 in conio_c64_init::$0 = conio_c64_init::line#0 >= $19 +Adding number conversion cast (unumber) 0 in gotoxy::x#1 = 0 +Adding number conversion cast (unumber) $19-1 in conio_c64_init::line#1 = $19-1 +Adding number conversion cast (unumber) $95 in chrout::petscii = $95 +Adding number conversion cast (unumber) 0 in chrout::petscii = points[0] +Adding number conversion cast (unumber) 1 in chrout::petscii = points[1] +Adding number conversion cast (unumber) 2 in chrout::petscii = points[2] +Adding number conversion cast (unumber) 3 in chrout::petscii = points[3] +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast gotoxy::y#0 = (unumber)0 +Inlining cast gotoxy::x#0 = (unumber)0 +Inlining cast gotoxy::x#1 = (unumber)0 +Inlining cast conio_c64_init::line#1 = (unumber)$19-1 +Inlining cast chrout::petscii = (unumber)$95 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (char *) 214 +Simplifying constant integer cast $19 +Simplifying constant integer cast $28 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast $19 +Simplifying constant integer cast 0 +Simplifying constant integer cast $95 +Simplifying constant integer cast 0 +Simplifying constant integer cast 1 +Simplifying constant integer cast 2 +Simplifying constant integer cast 3 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) $19 +Finalized unsigned number type (char) $28 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) $19 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) $95 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 1 +Finalized unsigned number type (char) 2 +Finalized unsigned number type (char) 3 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Inversing boolean not [2] gotoxy::$1 = gotoxy::y#2 <= $19 from [1] gotoxy::$0 = gotoxy::y#2 > $19 +Inversing boolean not [6] gotoxy::$3 = gotoxy::x#2 < $28 from [5] gotoxy::$2 = gotoxy::x#2 >= $28 +Inversing boolean not [14] conio_c64_init::$1 = conio_c64_init::line#0 < $19 from [13] conio_c64_init::$0 = conio_c64_init::line#0 >= $19 +Successful SSA optimization Pass2UnaryNotSimplification +Alias gotoxy::x#3 = gotoxy::x#4 +Successful SSA optimization Pass2AliasElimination +Alias gotoxy::x#2 = gotoxy::x#3 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values gotoxy::y#2 gotoxy::y#1 +Identical Phi Values gotoxy::x#2 gotoxy::x#1 +Successful SSA optimization Pass2IdenticalPhiElimination +Simple Condition gotoxy::$1 [2] if(gotoxy::y#1<=$19) goto gotoxy::@1 +Simple Condition gotoxy::$3 [4] if(gotoxy::x#1<$28) goto gotoxy::@return +Simple Condition conio_c64_init::$1 [10] if(conio_c64_init::line#0<$19) goto conio_c64_init::@1 +Successful SSA optimization Pass2ConditionalJumpSimplification +Constant right-side identified [15] conio_c64_init::line#1 = (unumber)$19-1 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant gotoxy::y#0 = 0 +Constant gotoxy::x#0 = 0 +Constant gotoxy::x#1 = 0 +Constant conio_c64_init::line#1 = (unumber)$19-1 +Successful SSA optimization Pass2ConstantIdentification +if() condition always true - replacing block destination [4] if(gotoxy::x#1<$28) goto gotoxy::@return +Successful SSA optimization Pass2ConstantIfs +Rewriting conditional comparison [2] if(gotoxy::y#1<=$19) goto gotoxy::@1 +Simplifying expression containing zero points in [21] chrout::petscii = points[0] +Successful SSA optimization PassNSimplifyExpressionWithZero +Removing call to empty/unused procedure [30] call conio_c64_init +Successful SSA optimization PassNEliminateUnusedConstructors +Eliminating variable conio_c64_init::line#0 from unused block conio_c64_init +Eliminating variable conio_c64_init::line#2 from unused block conio_c64_init::@1 +Eliminating variable gotoxy::y#1 from unused block conio_c64_init::@1 +Removing unused procedure gotoxy +Removing unused procedure block gotoxy +Removing unused procedure block gotoxy::@1 +Removing unused procedure block gotoxy::@2 +Removing unused procedure block gotoxy::@3 +Removing unused procedure block gotoxy::@return +Removing unused procedure conio_c64_init +Removing unused procedure block conio_c64_init +Removing PHI-reference to removed block (conio_c64_init) in block conio_c64_init::@1 +Removing unused procedure block conio_c64_init::@1 +Removing unused procedure block conio_c64_init::@3 +Removing unused procedure block conio_c64_init::@2 +Removing unused procedure block conio_c64_init::@return +Successful SSA optimization Pass2EliminateUnusedBlocks +Removing unused procedure __start +Removing unused procedure block __start +Removing unused procedure block __start::__init1 +Removing unused procedure block __start::@2 +Removing unused procedure block __start::@1 +Removing unused procedure block __start::@3 +Removing unused procedure block __start::@return +Successful SSA optimization PassNEliminateEmptyStart +Consolidated array index constant in *(points+1) +Consolidated array index constant in *(points+2) +Consolidated array index constant in *(points+3) +Successful SSA optimization Pass2ConstantAdditionElimination +Finalized unsigned number type (char) 2 +Finalized unsigned number type (char) 8 +Finalized unsigned number type (char) $a +Finalized unsigned number type (char) $10 +Finalized unsigned number type (char) $b +Finalized unsigned number type (char) $b +Successful SSA optimization PassNFinalizeNumberTypeConversions +Adding NOP phi() at start of main::@5 +CALL GRAPH +Calls in [main] to chrout:1 chrout:3 chrout:5 chrout:7 chrout:9 + +Created 0 initial phi equivalence classes +Coalesced down to 0 phi equivalence classes +Culled Empty Block label main::@5 + +FINAL CONTROL FLOW GRAPH + +void main() +main: scope:[main] from + [0] chrout::petscii = $95 + [1] call chrout + to:main::@1 +main::@1: scope:[main] from main + [2] chrout::petscii = *points + [3] call chrout + to:main::@2 +main::@2: scope:[main] from main::@1 + [4] chrout::petscii = *(points+1) + [5] call chrout + to:main::@3 +main::@3: scope:[main] from main::@2 + [6] chrout::petscii = *(points+2) + [7] call chrout + to:main::@4 +main::@4: scope:[main] from main::@3 + [8] chrout::petscii = *(points+3) + [9] call chrout + to:main::@return +main::@return: scope:[main] from main::@4 + [10] return + to:@return + +void chrout(volatile char petscii) +chrout: scope:[chrout] from main main::@1 main::@2 main::@3 main::@4 + asm { jsr$ffd2 } + to:chrout::@return +chrout::@return: scope:[chrout] from chrout + [12] return + to:@return + + +VARIABLE REGISTER WEIGHTS +void chrout(volatile char petscii) +__loadstore volatile char chrout::petscii // 100.0 +void main() + +Initial phi equivalence classes +Added variable chrout::petscii to live range equivalence class [ chrout::petscii ] +Complete equivalence classes +[ chrout::petscii ] +Allocated zp[1]:2 [ chrout::petscii ] +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [0] chrout::petscii = $95 [ ] ( [ ] { } ) always clobbers reg byte a +Statement [2] chrout::petscii = *points [ ] ( [ ] { } ) always clobbers reg byte a +Statement [4] chrout::petscii = *(points+1) [ ] ( [ ] { } ) always clobbers reg byte a +Statement [6] chrout::petscii = *(points+2) [ ] ( [ ] { } ) always clobbers reg byte a +Statement [8] chrout::petscii = *(points+3) [ ] ( [ ] { } ) always clobbers reg byte a +Statement asm { jsr$ffd2 } always clobbers reg byte a reg byte x reg byte y +Potential registers zp[1]:2 [ chrout::petscii ] : zp[1]:2 , + +REGISTER UPLIFT SCOPES +Uplift Scope [chrout] 100: zp[1]:2 [ chrout::petscii ] +Uplift Scope [RADIX] +Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6569_VICII] +Uplift Scope [MOS6581_SID] +Uplift Scope [printf_format_number] +Uplift Scope [printf_buffer_number] +Uplift Scope [printf_format_string] +Uplift Scope [main] +Uplift Scope [] + +Uplifting [chrout] best 99 combination zp[1]:2 [ chrout::petscii ] +Uplifting [RADIX] best 99 combination +Uplifting [MOS6526_CIA] best 99 combination +Uplifting [MOS6569_VICII] best 99 combination +Uplifting [MOS6581_SID] best 99 combination +Uplifting [printf_format_number] best 99 combination +Uplifting [printf_buffer_number] best 99 combination +Uplifting [printf_format_string] best 99 combination +Uplifting [main] best 99 combination +Uplifting [] best 99 combination +Attempting to uplift remaining variables inzp[1]:2 [ chrout::petscii ] +Uplifting [chrout] best 99 combination zp[1]:2 [ chrout::petscii ] + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +/// @file +/// Functions for performing input and output. + // Upstart + // Commodore 64 PRG executable file +.file [name="ducks-array.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + // Global Constants & labels +.segment Code + // main +main: { + // [0] chrout::petscii = $95 -- vbuz1=vbuc1 + lda #$95 + sta.z chrout.petscii + // [1] call chrout + jsr chrout + jmp __b1 + // main::@1 + __b1: + // [2] chrout::petscii = *points -- vbuz1=_deref_pbuc1 + lda points + sta.z chrout.petscii + // [3] call chrout + jsr chrout + jmp __b2 + // main::@2 + __b2: + // [4] chrout::petscii = *(points+1) -- vbuz1=_deref_pbuc1 + lda points+1 + sta.z chrout.petscii + // [5] call chrout + jsr chrout + jmp __b3 + // main::@3 + __b3: + // [6] chrout::petscii = *(points+2) -- vbuz1=_deref_pbuc1 + lda points+2 + sta.z chrout.petscii + // [7] call chrout + jsr chrout + jmp __b4 + // main::@4 + __b4: + // [8] chrout::petscii = *(points+3) -- vbuz1=_deref_pbuc1 + lda points+3 + sta.z chrout.petscii + // [9] call chrout + jsr chrout + jmp __breturn + // main::@return + __breturn: + // [10] return + rts +} + // chrout +// void chrout(__zp(2) volatile char petscii) +chrout: { + .label petscii = 2 + // asm { jsr$ffd2 } + jsr $ffd2 + jmp __breturn + // chrout::@return + __breturn: + // [12] return + rts +} + // File Data +.segment Data + points: .byte 1, 2, 3, 4 + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __b1 +Removing instruction jmp __b2 +Removing instruction jmp __b3 +Removing instruction jmp __b4 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction __b1: +Removing instruction __b2: +Removing instruction __b3: +Removing instruction __b4: +Removing instruction __breturn: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +__constant char RADIX::BINARY = 2 +__constant char RADIX::DECIMAL = $a +__constant char RADIX::HEXADECIMAL = $10 +__constant char RADIX::OCTAL = 8 +void chrout(volatile char petscii) +__loadstore volatile char chrout::petscii // zp[1]:2 100.0 +void main() +__constant char points[] = { 1, 2, 3, 4 } + +zp[1]:2 [ chrout::petscii ] + + +FINAL ASSEMBLER +Score: 81 + + // File Comments +/// @file +/// Functions for performing input and output. + // Upstart + // Commodore 64 PRG executable file +.file [name="ducks-array.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + // Global Constants & labels +.segment Code + // main +main: { + // chrout(149) + // [0] chrout::petscii = $95 -- vbuz1=vbuc1 + lda #$95 + sta.z chrout.petscii + // [1] call chrout + jsr chrout + // main::@1 + // chrout(points[0]) + // [2] chrout::petscii = *points -- vbuz1=_deref_pbuc1 + lda points + sta.z chrout.petscii + // [3] call chrout + jsr chrout + // main::@2 + // chrout(points[1]) + // [4] chrout::petscii = *(points+1) -- vbuz1=_deref_pbuc1 + lda points+1 + sta.z chrout.petscii + // [5] call chrout + jsr chrout + // main::@3 + // chrout(points[2]) + // [6] chrout::petscii = *(points+2) -- vbuz1=_deref_pbuc1 + lda points+2 + sta.z chrout.petscii + // [7] call chrout + jsr chrout + // main::@4 + // chrout(points[3]) + // [8] chrout::petscii = *(points+3) -- vbuz1=_deref_pbuc1 + lda points+3 + sta.z chrout.petscii + // [9] call chrout + jsr chrout + // main::@return + // } + // [10] return + rts +} + // chrout +// void chrout(__zp(2) volatile char petscii) +chrout: { + .label petscii = 2 + // asm + // asm { jsr$ffd2 } + jsr $ffd2 + // chrout::@return + // } + // [12] return + rts +} + // File Data +.segment Data + points: .byte 1, 2, 3, 4 + diff --git a/src/test/ref/ducks-array.sym b/src/test/ref/ducks-array.sym new file mode 100644 index 000000000..4111ac446 --- /dev/null +++ b/src/test/ref/ducks-array.sym @@ -0,0 +1,10 @@ +__constant char RADIX::BINARY = 2 +__constant char RADIX::DECIMAL = $a +__constant char RADIX::HEXADECIMAL = $10 +__constant char RADIX::OCTAL = 8 +void chrout(volatile char petscii) +__loadstore volatile char chrout::petscii // zp[1]:2 100.0 +void main() +__constant char points[] = { 1, 2, 3, 4 } + +zp[1]:2 [ chrout::petscii ] diff --git a/src/test/ref/ducks-loop211.asm b/src/test/ref/ducks-loop211.asm new file mode 100644 index 000000000..78a214f22 --- /dev/null +++ b/src/test/ref/ducks-loop211.asm @@ -0,0 +1,46 @@ +/// @file +/// PEEK and POKE macros for those who want to write BASIC code in C +/// +/// Based on https://github.com/cc65/cc65/blob/master/include/peekpoke.h + // Commodore 64 PRG executable file +.file [name="ducks-loop211.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + .const brick = $e6 +.segment Code +main: { + .label k = 2 + lda #1 + sta.z k + __b1: + // POKE + lda.z k + asl + asl + sta.z $d3 + // chrout(brick) + lda #brick + sta.z chrout.petscii + jsr chrout + // ++k; + inc.z k + // while (k<5) + lda.z k + cmp #5 + bcc __b1 + // } + rts +} +// void chrout(__zp(3) volatile char petscii) +chrout: { + .label petscii = 3 + // asm + lda petscii + jsr $ffd2 + // } + rts +} diff --git a/src/test/ref/ducks-loop211.cfg b/src/test/ref/ducks-loop211.cfg new file mode 100644 index 000000000..13258ed32 --- /dev/null +++ b/src/test/ref/ducks-loop211.cfg @@ -0,0 +1,27 @@ + +void main() +main: scope:[main] from + [0] phi() + to:main::@1 +main::@1: scope:[main] from main main::@2 + [1] main::k#2 = phi( main/1, main::@2/main::k#1 ) + [2] main::$0 = main::k#2 << 2 + [3] *((char *) 211) = main::$0 + [4] chrout::petscii = brick + [5] call chrout + to:main::@2 +main::@2: scope:[main] from main::@1 + [6] main::k#1 = ++ main::k#2 + [7] if(main::k#1<5) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@2 + [8] return + to:@return + +void chrout(volatile char petscii) +chrout: scope:[chrout] from main::@1 + asm { ldapetscii jsr$ffd2 } + to:chrout::@return +chrout::@return: scope:[chrout] from chrout + [10] return + to:@return diff --git a/src/test/ref/ducks-loop211.log b/src/test/ref/ducks-loop211.log new file mode 100644 index 000000000..66f3d5dd8 --- /dev/null +++ b/src/test/ref/ducks-loop211.log @@ -0,0 +1,353 @@ + +CONTROL FLOW GRAPH SSA + +void chrout(volatile char petscii) +chrout: scope:[chrout] from main::@1 + asm { ldapetscii jsr$ffd2 } + to:chrout::@return +chrout::@return: scope:[chrout] from chrout + return + to:@return + +void main() +main: scope:[main] from __start + main::k#0 = 1 + to:main::@1 +main::@1: scope:[main] from main main::@2 + main::k#2 = phi( main/main::k#0, main::@2/main::k#1 ) + main::$0 = main::k#2 * 4 + *((char *)$d3) = main::$0 + chrout::petscii = brick + call chrout + to:main::@2 +main::@2: scope:[main] from main::@1 + main::k#3 = phi( main::@1/main::k#2 ) + main::k#1 = ++ main::k#3 + main::$2 = main::k#1 < 5 + if(main::$2) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@2 + return + to:@return + +void __start() +__start: scope:[__start] from + call main + to:__start::@1 +__start::@1: scope:[__start] from __start + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + return + to:@return + +SYMBOL TABLE SSA +void __start() +__constant const char brick = $e6 +void chrout(volatile char petscii) +__loadstore volatile char chrout::petscii +void main() +number main::$0 +bool main::$2 +char main::k +char main::k#0 +char main::k#1 +char main::k#2 +char main::k#3 + +Adding number conversion cast (unumber) 4 in main::$0 = main::k#2 * 4 +Adding number conversion cast (unumber) main::$0 in main::$0 = main::k#2 * (unumber)4 +Adding number conversion cast (unumber) 5 in main::$2 = main::k#1 < 5 +Successful SSA optimization PassNAddNumberTypeConversions +Simplifying constant integer cast 4 +Simplifying constant pointer cast (char *) 211 +Simplifying constant integer cast 5 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 4 +Finalized unsigned number type (char) 5 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Inferred type updated to char in main::$0 = main::k#2 * 4 +Alias main::k#2 = main::k#3 +Successful SSA optimization Pass2AliasElimination +Simple Condition main::$2 [10] if(main::k#1<5) goto main::@1 +Successful SSA optimization Pass2ConditionalJumpSimplification +Constant main::k#0 = 1 +Successful SSA optimization Pass2ConstantIdentification +Removing unused procedure __start +Removing unused procedure block __start +Removing unused procedure block __start::@1 +Removing unused procedure block __start::@return +Successful SSA optimization PassNEliminateEmptyStart +Rewriting multiplication to use shift [3] main::$0 = main::k#2 * 4 +Successful SSA optimization Pass2MultiplyToShiftRewriting +Inlining constant with var siblings main::k#0 +Constant inlined main::k#0 = 1 +Successful SSA optimization Pass2ConstantInlining +Added new block during phi lifting main::@3(between main::@2 and main::@1) +Adding NOP phi() at start of main +CALL GRAPH +Calls in [main] to chrout:5 + +Created 1 initial phi equivalence classes +Coalesced [9] main::k#4 = main::k#1 +Coalesced down to 1 phi equivalence classes +Culled Empty Block label main::@3 +Adding NOP phi() at start of main + +FINAL CONTROL FLOW GRAPH + +void main() +main: scope:[main] from + [0] phi() + to:main::@1 +main::@1: scope:[main] from main main::@2 + [1] main::k#2 = phi( main/1, main::@2/main::k#1 ) + [2] main::$0 = main::k#2 << 2 + [3] *((char *) 211) = main::$0 + [4] chrout::petscii = brick + [5] call chrout + to:main::@2 +main::@2: scope:[main] from main::@1 + [6] main::k#1 = ++ main::k#2 + [7] if(main::k#1<5) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@2 + [8] return + to:@return + +void chrout(volatile char petscii) +chrout: scope:[chrout] from main::@1 + asm { ldapetscii jsr$ffd2 } + to:chrout::@return +chrout::@return: scope:[chrout] from chrout + [10] return + to:@return + + +VARIABLE REGISTER WEIGHTS +void chrout(volatile char petscii) +__loadstore volatile char chrout::petscii // 11.0 +void main() +char main::$0 // 22.0 +char main::k +char main::k#1 // 16.5 +char main::k#2 // 6.6000000000000005 + +Initial phi equivalence classes +[ main::k#2 main::k#1 ] +Added variable main::$0 to live range equivalence class [ main::$0 ] +Added variable chrout::petscii to live range equivalence class [ chrout::petscii ] +Complete equivalence classes +[ main::k#2 main::k#1 ] +[ main::$0 ] +[ chrout::petscii ] +Allocated zp[1]:2 [ main::k#2 main::k#1 ] +Allocated zp[1]:3 [ main::$0 ] +Allocated zp[1]:4 [ chrout::petscii ] +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [2] main::$0 = main::k#2 << 2 [ main::k#2 main::$0 ] ( [ main::k#2 main::$0 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::k#2 main::k#1 ] +Statement [4] chrout::petscii = brick [ main::k#2 chrout::petscii ] ( [ main::k#2 chrout::petscii ] { } ) always clobbers reg byte a +Statement asm { ldapetscii jsr$ffd2 } always clobbers reg byte a reg byte x reg byte y +Removing always clobbered register reg byte x as potential for zp[1]:2 [ main::k#2 main::k#1 ] +Removing always clobbered register reg byte y as potential for zp[1]:2 [ main::k#2 main::k#1 ] +Statement [2] main::$0 = main::k#2 << 2 [ main::k#2 main::$0 ] ( [ main::k#2 main::$0 ] { } ) always clobbers reg byte a +Statement [4] chrout::petscii = brick [ main::k#2 chrout::petscii ] ( [ main::k#2 chrout::petscii ] { } ) always clobbers reg byte a +Statement [7] if(main::k#1<5) goto main::@1 [ main::k#1 ] ( [ main::k#1 ] { } ) always clobbers reg byte a +Statement asm { ldapetscii jsr$ffd2 } always clobbers reg byte a reg byte x reg byte y +Potential registers zp[1]:2 [ main::k#2 main::k#1 ] : zp[1]:2 , +Potential registers zp[1]:3 [ main::$0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:4 [ chrout::petscii ] : zp[1]:4 , + +REGISTER UPLIFT SCOPES +Uplift Scope [main] 23.1: zp[1]:2 [ main::k#2 main::k#1 ] 22: zp[1]:3 [ main::$0 ] +Uplift Scope [chrout] 11: zp[1]:4 [ chrout::petscii ] +Uplift Scope [] + +Uplifting [main] best 530 combination zp[1]:2 [ main::k#2 main::k#1 ] reg byte a [ main::$0 ] +Uplifting [chrout] best 530 combination zp[1]:4 [ chrout::petscii ] +Uplifting [] best 530 combination +Attempting to uplift remaining variables inzp[1]:2 [ main::k#2 main::k#1 ] +Uplifting [main] best 530 combination zp[1]:2 [ main::k#2 main::k#1 ] +Attempting to uplift remaining variables inzp[1]:4 [ chrout::petscii ] +Uplifting [chrout] best 530 combination zp[1]:4 [ chrout::petscii ] +Allocated (was zp[1]:4) zp[1]:3 [ chrout::petscii ] + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments +/// @file +/// PEEK and POKE macros for those who want to write BASIC code in C +/// +/// Based on https://github.com/cc65/cc65/blob/master/include/peekpoke.h + // Upstart + // Commodore 64 PRG executable file +.file [name="ducks-loop211.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + // Global Constants & labels + .const brick = $e6 +.segment Code + // main +main: { + .label k = 2 + // [1] phi from main to main::@1 [phi:main->main::@1] + __b1_from_main: + // [1] phi main::k#2 = 1 [phi:main->main::@1#0] -- vbuz1=vbuc1 + lda #1 + sta.z k + jmp __b1 + // [1] phi from main::@2 to main::@1 [phi:main::@2->main::@1] + __b1_from___b2: + // [1] phi main::k#2 = main::k#1 [phi:main::@2->main::@1#0] -- register_copy + jmp __b1 + // main::@1 + __b1: + // [2] main::$0 = main::k#2 << 2 -- vbuaa=vbuz1_rol_2 + lda.z k + asl + asl + // [3] *((char *) 211) = main::$0 -- _deref_pbuc1=vbuaa + sta.z $d3 + // [4] chrout::petscii = brick -- vbuz1=vbuc1 + lda #brick + sta.z chrout.petscii + // [5] call chrout + jsr chrout + jmp __b2 + // main::@2 + __b2: + // [6] main::k#1 = ++ main::k#2 -- vbuz1=_inc_vbuz1 + inc.z k + // [7] if(main::k#1<5) goto main::@1 -- vbuz1_lt_vbuc1_then_la1 + lda.z k + cmp #5 + bcc __b1_from___b2 + jmp __breturn + // main::@return + __breturn: + // [8] return + rts +} + // chrout +// void chrout(__zp(3) volatile char petscii) +chrout: { + .label petscii = 3 + // asm { ldapetscii jsr$ffd2 } + lda petscii + jsr $ffd2 + jmp __breturn + // chrout::@return + __breturn: + // [10] return + rts +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __b1 +Removing instruction jmp __b2 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Replacing label __b1_from___b2 with __b1 +Removing instruction __b1_from___b2: +Succesful ASM optimization Pass5RedundantLabelElimination +Removing instruction __b1_from_main: +Removing instruction __b2: +Removing instruction __breturn: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination +Removing instruction jmp __b1 +Succesful ASM optimization Pass5NextJumpElimination + +FINAL SYMBOL TABLE +__constant const char brick = $e6 +void chrout(volatile char petscii) +__loadstore volatile char chrout::petscii // zp[1]:3 11.0 +void main() +char main::$0 // reg byte a 22.0 +char main::k +char main::k#1 // k zp[1]:2 16.5 +char main::k#2 // k zp[1]:2 6.6000000000000005 + +zp[1]:2 [ main::k#2 main::k#1 ] +reg byte a [ main::$0 ] +zp[1]:3 [ chrout::petscii ] + + +FINAL ASSEMBLER +Score: 407 + + // File Comments +/// @file +/// PEEK and POKE macros for those who want to write BASIC code in C +/// +/// Based on https://github.com/cc65/cc65/blob/master/include/peekpoke.h + // Upstart + // Commodore 64 PRG executable file +.file [name="ducks-loop211.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + // Global Constants & labels + .const brick = $e6 +.segment Code + // main +main: { + .label k = 2 + // [1] phi from main to main::@1 [phi:main->main::@1] + // [1] phi main::k#2 = 1 [phi:main->main::@1#0] -- vbuz1=vbuc1 + lda #1 + sta.z k + // [1] phi from main::@2 to main::@1 [phi:main::@2->main::@1] + // [1] phi main::k#2 = main::k#1 [phi:main::@2->main::@1#0] -- register_copy + // main::@1 + __b1: + // POKE + // [2] main::$0 = main::k#2 << 2 -- vbuaa=vbuz1_rol_2 + lda.z k + asl + asl + // [3] *((char *) 211) = main::$0 -- _deref_pbuc1=vbuaa + sta.z $d3 + // chrout(brick) + // [4] chrout::petscii = brick -- vbuz1=vbuc1 + lda #brick + sta.z chrout.petscii + // [5] call chrout + jsr chrout + // main::@2 + // ++k; + // [6] main::k#1 = ++ main::k#2 -- vbuz1=_inc_vbuz1 + inc.z k + // while (k<5) + // [7] if(main::k#1<5) goto main::@1 -- vbuz1_lt_vbuc1_then_la1 + lda.z k + cmp #5 + bcc __b1 + // main::@return + // } + // [8] return + rts +} + // chrout +// void chrout(__zp(3) volatile char petscii) +chrout: { + .label petscii = 3 + // asm + // asm { ldapetscii jsr$ffd2 } + lda petscii + jsr $ffd2 + // chrout::@return + // } + // [10] return + rts +} + // File Data + diff --git a/src/test/ref/ducks-loop211.sym b/src/test/ref/ducks-loop211.sym new file mode 100644 index 000000000..ece0015ba --- /dev/null +++ b/src/test/ref/ducks-loop211.sym @@ -0,0 +1,12 @@ +__constant const char brick = $e6 +void chrout(volatile char petscii) +__loadstore volatile char chrout::petscii // zp[1]:3 11.0 +void main() +char main::$0 // reg byte a 22.0 +char main::k +char main::k#1 // k zp[1]:2 16.5 +char main::k#2 // k zp[1]:2 6.6000000000000005 + +zp[1]:2 [ main::k#2 main::k#1 ] +reg byte a [ main::$0 ] +zp[1]:3 [ chrout::petscii ] diff --git a/src/test/ref/ducks-total.asm b/src/test/ref/ducks-total.asm new file mode 100644 index 000000000..7e8118595 --- /dev/null +++ b/src/test/ref/ducks-total.asm @@ -0,0 +1,2126 @@ +/// @file +/// Functions for performing input and output. + // Commodore 64 PRG executable file +.file [name="ducks-total.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(__start) + .const LIGHT_BLUE = $e + .const down = $11 + .const right = $1d + .const lock = 8 + .const lower = $e + .const home = $13 + .const reverse_on = $12 + .const brick = $e6 + .const green = $1e + .const yellow = $9e + .const red = $1c + .const c = $7800 + /// Color Ram + .label COLORRAM = $d800 + /// Default address of screen character matrix + .label DEFAULT_SCREEN = $400 + // The number of bytes on the screen + // The current cursor x-position + .label conio_cursor_x = $27 + // The current cursor y-position + .label conio_cursor_y = $1d + // The current text cursor line start + .label conio_line_text = $20 + // The current color cursor line start + .label conio_line_color = $1e + // The current text color + .label conio_textcolor = $22 + .label l = $6b + .label m = 4 + .label z = $25 + .label z_1 = $14 + .label n = $33 + .label k = $63 + .label j = $32 + .label j_1 = $55 + .label j_2 = $56 + .label duck = $16 + // [0..255] 8-bit + .label tu = $6e + // Volume to max + .label score = $2a + .label y = $28 + .label time = $30 + .label j_3 = $68 + // Remainder after signed 8 bit division + .label rem8u = $f + .label peephole = $34 + .label y_1 = $34 + .label hiscore = $2a + .label hiscore_1 = $6c +.segment Code +__start: { + // __ma char conio_cursor_x = 0 + lda #0 + sta.z conio_cursor_x + // __ma char conio_cursor_y = 0 + sta.z conio_cursor_y + // __ma char *conio_line_text = CONIO_SCREEN_TEXT + lda #DEFAULT_SCREEN + sta.z conio_line_text+1 + // __ma char *conio_line_color = CONIO_SCREEN_COLORS + lda #COLORRAM + sta.z conio_line_color+1 + // __ma char conio_textcolor = CONIO_TEXTCOLOR_DEFAULT + lda #LIGHT_BLUE + sta.z conio_textcolor + // j,k,l,m + lda #0 + sta.z l + // j,k,l,m,n=0 + sta.z m + // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) + jsr conio_c64_init + jsr main + rts +} +// Set initial cursor position +conio_c64_init: { + // Position cursor at current line + .label BASIC_CURSOR_LINE = $d6 + .label line = $4c + // char line = *BASIC_CURSOR_LINE + lda.z BASIC_CURSOR_LINE + sta.z line + // if(line>=CONIO_HEIGHT) + cmp #$19 + bcc __b1 + lda #$19-1 + sta.z line + __b1: + // gotoxy(0, line) + jsr gotoxy + // } + rts +} +main: { + .label __3 = $70 + .label __26 = 8 + .label __29 = 5 + .label __35 = $66 + .label __57 = $64 + .label __61 = $d + .label __66 = $b + .label __69 = $19 + .label __72 = $1b + .label __78 = $10 + .label __81 = 7 + .label __84 = 3 + .label __88 = $36 + .label __92 = $37 + .label __96 = $2e + .label __97 = $2e + .label __104 = $5d + .label __107 = $5f + .label __110 = $61 + .label __119 = $4a + .label __120 = $51 + .label __122 = $53 + .label __124 = $4a + .label __125 = $4d + .label __127 = $3a + .label __128 = $3a + .label __130 = $3c + .label __131 = $3c + .label __133 = $3e + .label __134 = $3e + .label __136 = $4f + .label __138 = $40 + .label __139 = $40 + .label __141 = $42 + .label __142 = $42 + .label __144 = $44 + .label __145 = $44 + .label __150 = $69 + .label __151 = $57 + .label __152 = $57 + .label __153 = $59 + .label __154 = $59 + .label __155 = $5b + .label __156 = $5b + .label __177 = 8 + .label __179 = $38 + .label __180 = $2e + // POKE + lda #8 + sta $900f + // chrout(lock) + lda #lock + sta.z chrout.petscii + // border and black paper + jsr chrout + // chrout(lower) + lda #lower + sta.z chrout.petscii + //Lock UpperCase to Lowercase key + jsr chrout + // m=0 + lda #0 + sta.z m + //Put text in Lowercase set + __b1: + // for (m=0; m<40; m++) + lda.z m + cmp #$28 + bcs !__b2+ + jmp __b2 + !__b2: + lda #0 + sta.z n + sta.z hiscore_1 + sta.z hiscore_1+1 + sta.z y + sta.z y+1 + sta.z rem8u + // Load udgs. From 0-->39; + __b3: + // clear_screen(32,0) + lda #$20 + sta.z clear_screen.n + jsr clear_screen + // textcolor(7) + // Clear Screen with spaces & black ink + lda #7 + sta.z textcolor.color + jsr textcolor + // cputs(intro) + lda #intro + sta.z cputs.s+1 + jsr cputs + // textcolor(1) + // Yellow ink + lda #1 + sta.z textcolor.color + jsr textcolor + // cputs(levels) + lda #levels + sta.z cputs.s+1 + jsr cputs + // textcolor(2) + // White + lda #2 + sta.z textcolor.color + jsr textcolor + // cputs(foot) + lda #foot + sta.z cputs.s+1 + jsr cputs + // Red + __b4: + // l=PEEK + lda.z $c5 + sta.z l + // ++l; + inc.z l + // while (l>5) + lda.z l + cmp #5+1 + bcs __b4 + // clear_screen(4,0) + // wait for 1-3-5-7-9 keys only + lda #4 + sta.z clear_screen.n + jsr clear_screen + // POKE + lda #$ff + sta $9005 + // chrout(reverse_on) + lda #reverse_on + sta.z chrout.petscii + // Graphic mode + jsr chrout + // chrout(red) + lda #red + sta.z chrout.petscii + jsr chrout + // chrout(down) + lda #down + sta.z chrout.petscii + jsr chrout + lda #1 + sta.z k + //for (z=1;z<23;z++) { POKE(7680+z*22,230);POKE(c+7680+z*22,2); POKE(7679+z*22,230); POKE(c+7679+z*22,2); } // 23 rows * 22 columns (7680 to 8185). 506 positions. + //k=1; do { chrout(brick); POKE(211,20); chrout(brick); ++k; } while (k<23); + //for (k=1;k<22;k++) { chrout(brick); POKE(211,22); chrout(brick); }; // 23 rows * 22 columns (7680 to 8185). 506 positions. + __b6: + // for (k=1;k<22;k++) + lda.z k + cmp #$16 + bcs !__b7+ + jmp __b7 + !__b7: + // chrout(brick) + lda #brick + sta.z chrout.petscii + // 23 rows * 22 columns (7680 to 8185). 506 positions. + jsr chrout + // POKE + lda #brick + sta $1ff9 + lda #2 + sta $1ff9+c + // chrout(home) + lda #home + sta.z chrout.petscii + //last brick from last line (#23) to avoid scrolling + jsr chrout + // if (l>1) + lda.z l + cmp #1+1 + bcc __b8 + lda #<1 + sta.z z_1 + lda #>1 + sta.z z_1+1 + __b13: + // random((7-l),26-(3*l)) + lda #7 + sec + sbc.z l + sta.z random.k + // 3*l + lda.z l + asl + sta.z __177 + lda.z __26 + clc + adc.z l + sta.z __26 + // random((7-l),26-(3*l)) + lda #$1a + sec + sbc.z random.n + sta.z random.n + // Write differential random bricks depending on 'l' level choosen + jsr random + // z+m + lda.z m + clc + adc.z z_1 + sta.z __29 + lda #0 + adc.z z_1+1 + sta.z __29+1 + // if (z+m>505) + cmp #>$1f9 + bne !+ + lda.z __29 + cmp #<$1f9 + !: + bcs !__b24+ + jmp __b24 + !__b24: + bne !__b24+ + jmp __b24 + !__b24: + jmp __b12 + __b8: + lda #<1 + sta.z z_1 + lda #>1 + sta.z z_1+1 + __b12: + // POKE + lda #$f + sta $900e + // chrout(home) + lda #home + sta.z chrout.petscii + // Duck #1 + jsr chrout + // chrout(yellow) + lda #yellow + sta.z chrout.petscii + jsr chrout + // chrout(80) + lda #$50 + sta.z chrout.petscii + jsr chrout + // chrout(84) + lda #$54 + sta.z chrout.petscii + jsr chrout + // chrout(83) + lda #$53 + sta.z chrout.petscii + jsr chrout + // chrout(58) + lda #$3a + sta.z chrout.petscii + jsr chrout + // POKE + lda #$12 + sta.z $d3 + lda #0 + sta.z j_1 + // jump to Column 18 + __b17: + // for (j=0; j<4; ++j) + lda.z j_1 + cmp #4 + bcs !__b18+ + jmp __b18 + !__b18: + // write_score() + // Write 'TM:9', yellow + lda #<0 + sta.z score + sta.z score+1 + jsr write_score + // chrout(home) + lda #home + sta.z chrout.petscii + // Write Score (yellow) + jsr chrout + // chrout(green) + lda #green + sta.z chrout.petscii + jsr chrout + // POKE + lda #$a + sta.z $d3 + lda #0 + sta.z j_2 + // Jump to column 10 + __b20: + // for (j=0; j<5; j++) + lda.z j_2 + cmp #5 + bcs !__b21+ + jmp __b21 + !__b21: + lda #<$1f1f + sta.z peephole + lda #>$1f1f + sta.z peephole+1 + lda #<1 + sta.z tu + lda #>1 + sta.z tu+1 + // Write 'DUCK', green + __b22: + // chrout(home) + lda #home + sta.z chrout.petscii + jsr chrout + // chrout(green) + lda #green + sta.z chrout.petscii + jsr chrout + // chrout(reverse_on) + lda #reverse_on + sta.z chrout.petscii + jsr chrout + // POKE + lda #$f + sta.z $d3 + // if (tu<10) + // Jump to column 15 + lda.z tu+1 + bne !+ + lda.z tu + cmp #$a + bcs !__b23+ + jmp __b23 + !__b23: + !: + // chrout(49) + lda #$31 + sta.z chrout.petscii + jsr chrout + // chrout(48) + lda #$30 + sta.z chrout.petscii + jsr chrout + __b11: + // Write duck number + // random(0,255) + lda #$ff + sta.z random.n + lda #0 + sta.z random.k + jsr random + // duck=m + lda.z m + sta.z duck + lda #0 + sta.z duck+1 + // random(0,255) + lda #$ff + sta.z random.n + lda #0 + sta.z random.k + jsr random + // m+7701 + lda.z m + clc + adc #<$1e15 + sta.z __61 + lda #>$1e15 + adc #0 + sta.z __61+1 + // duck=m+7701+duck + clc + lda.z duck + adc.z __61 + sta.z duck + lda.z duck+1 + adc.z __61+1 + sta.z duck+1 + // PEEK + clc + lda.z duck + adc #1 + sta.z __66 + lda.z duck+1 + adc #0 + sta.z __66+1 + lda #$16 + clc + adc.z duck + sta.z __69 + lda #0 + adc.z duck+1 + sta.z __69+1 + lda #$17 + clc + adc.z duck + sta.z __72 + lda #0 + adc.z duck+1 + sta.z __72+1 + // while ((duck>8163) || PEEK(duck)==brick || PEEK(duck+1)==brick || PEEK(duck+22)==brick || PEEK(duck+23)==brick) + lda #>$1fe3 + cmp.z duck+1 + bcc __b11 + bne !+ + lda #<$1fe3 + cmp.z duck + bcc __b11 + !: + lda #brick + ldy #0 + cmp (duck),y + beq __b11 + cmp (__66),y + beq __b11 + cmp (__69),y + beq __b11 + cmp (__72),y + bne !__b11+ + jmp __b11 + !__b11: + // chrono_restart() + jsr chrono_restart + lda #<0 + sta.z time + sta.z time+1 + __b26: + // while (time<10) + lda.z time+1 + bne !+ + lda.z time + cmp #$a + bcs !__b27+ + jmp __b27 + !__b27: + !: + // tu++; + inc.z tu + bne !+ + inc.z tu+1 + !: + // score=score-10 + sec + lda.z score + sbc #$a + sta.z score + lda.z score+1 + sbc #0 + sta.z score+1 + // write_score() + jsr write_score + // POKE + lda #$82 + sta $900d + // wait(20) + lda #$14 + sta.z wait.n + jsr wait + // POKE + lda #0 + sta $900d + lda.z duck + clc + adc #c + sta.z __150+1 + lda #0 + tay + sta (__150),y + lda.z duck + sta.z __151 + lda.z duck+1 + sta.z __151+1 + lda.z __152 + clc + adc #<1+c + sta.z __152 + lda.z __152+1 + adc #>1+c + sta.z __152+1 + tya + sta (__152),y + lda.z duck + sta.z __153 + lda.z duck+1 + sta.z __153+1 + lda.z __154 + clc + adc #<$16+c + sta.z __154 + lda.z __154+1 + adc #>$16+c + sta.z __154+1 + tya + sta (__154),y + lda.z duck + sta.z __155 + lda.z duck+1 + sta.z __155+1 + lda.z __156 + clc + adc #<$17+c + sta.z __156 + lda.z __156+1 + adc #>$17+c + sta.z __156+1 + tya + sta (__156),y + // while (tu<11) + lda.z tu+1 + bne !+ + lda.z tu + cmp #$b + bcs !__b22+ + jmp __b22 + !__b22: + !: + // clear_screen(4,0) + // 10 ducks + lda #4 + sta.z clear_screen.n + jsr clear_screen + // POKE + lda #$f0 + sta $9005 + // chrout(lower) + lda #lower + sta.z chrout.petscii + jsr chrout + // textcolor(7) + // Return to text mode, lowcase + lda #7 + sta.z textcolor.color + jsr textcolor + // cputs(game_over) + lda #game_over + sta.z cputs.s+1 + jsr cputs + // textcolor(2) + // Yellow + lda #2 + sta.z textcolor.color + jsr textcolor + // cputs(your_score) + lda #your_score + sta.z cputs.s+1 + jsr cputs + // cputs(buffer) + lda #buffer + sta.z cputs.s+1 + jsr cputs + // textcolor(3) + // Red + lda #3 + sta.z textcolor.color + jsr textcolor + // cputs(high_score) + lda #high_score + sta.z cputs.s+1 + jsr cputs + // if (score>hiscore) + lda.z score+1 + cmp.z hiscore_1+1 + bne !+ + lda.z score + cmp.z hiscore_1 + beq __b114 + !: + bcc __b114 + jmp __b46 + __b114: + lda.z hiscore_1 + sta.z hiscore + lda.z hiscore_1+1 + sta.z hiscore+1 + __b46: + // utoa(hiscore,buffer,10) + lda.z hiscore + sta.z utoa.value + lda.z hiscore+1 + sta.z utoa.value+1 + jsr utoa + // cputs(buffer) + lda #buffer + sta.z cputs.s+1 + jsr cputs + // textcolor(1) + // Cyan + lda #1 + sta.z textcolor.color + jsr textcolor + // cputs(play_again) + lda #play_again + sta.z cputs.s+1 + jsr cputs + // white + __b47: + // j=PEEK + lda.z $c5 + sta.z j_3 + // while (j!= 11 && j!=28 ) + lda #$b + cmp.z j_3 + beq __b48 + lda #$1c + cmp.z j_3 + bne __b47 + __b48: + // while (j==11) + lda #$b + cmp.z j_3 + beq __b113 + // asm + // N pressed. Exit game + jsr $fd22 + // } + rts + __b113: + lda.z hiscore + sta.z hiscore_1 + lda.z hiscore+1 + sta.z hiscore_1+1 + jmp __b3 + __b27: + // read_chrono() + jsr read_chrono + // m=PEEK + // Joystick routine + lda $911f + sta.z m + // POKE + lda #$7f + sta $9122 + // n=PEEK + lda $9120 + sta.z n + // POKE + lda #$ff + sta $9122 + // 16&m + lda #$10 + and.z m + sta.z __78 + // if ((16&m)==0) + bne __b29 + // y--; + lda.z y + bne !+ + dec.z y+1 + !: + dec.z y + __b29: + // 128&n + lda #$80 + and.z n + sta.z __81 + // if ((128&n)==0) + bne __b30 + // y++; + inc.z y + bne !+ + inc.z y+1 + !: + __b30: + // 4&m + lda #4 + and.z m + sta.z __84 + // if ((4&m)==0) + bne __b31 + // y=y-22 + sec + lda.z y + sbc #$16 + sta.z y + lda.z y+1 + sbc #0 + sta.z y+1 + __b31: + // 8&m + lda #8 + and.z m + sta.z __88 + // if ((8&m)==0) + bne __b32 + // y=y+22 + lda #$16 + clc + adc.z y + sta.z y + bcc !+ + inc.z y+1 + !: + __b32: + // 32&m + lda #$20 + and.z m + sta.z __92 + // if ((32&m)==0) + bne __b33 + // POKE + lda #$82 + sta $900d + // if (peephole!=duck) + lda.z peephole+1 + cmp.z duck+1 + beq !__b34+ + jmp __b34 + !__b34: + lda.z peephole + cmp.z duck + beq !__b34+ + jmp __b34 + !__b34: + // 12-time + sec + lda #<$c + sbc.z div16u8u.return_1 + sta.z __96 + lda #>$c + sbc.z div16u8u.return_1+1 + sta.z __96+1 + // (12-time)*10 + lda.z __96 + asl + sta.z __179 + lda.z __96+1 + rol + sta.z __179+1 + asl.z __179 + rol.z __179+1 + clc + lda.z __180 + adc.z __179 + sta.z __180 + lda.z __180+1 + adc.z __179+1 + sta.z __180+1 + asl.z __97 + rol.z __97+1 + // score=score+(12-time)*10 + clc + lda.z score + adc.z __97 + sta.z score + lda.z score+1 + adc.z __97+1 + sta.z score+1 + // wait(10) + lda #$a + sta.z wait.n + jsr wait + lda #<$a + sta.z time + lda #>$a + sta.z time+1 + __b35: + // POKE + lda #0 + sta $900d + __b33: + // PEEK + clc + lda.z y + adc #1 + sta.z __104 + lda.z y+1 + adc #0 + sta.z __104+1 + lda #$16 + clc + adc.z y + sta.z __107 + lda #0 + adc.z y+1 + sta.z __107+1 + lda #$17 + clc + adc.z y + sta.z __110 + lda #0 + adc.z y+1 + sta.z __110+1 + // if (PEEK(y)!=brick && PEEK(y+1)!=brick && PEEK(y+22)!=brick && PEEK(y+23)!=brick && y>7702 && y<8163) + lda #brick + ldy #0 + cmp (y),y + beq __b36 + cmp (__104),y + beq __b36 + lda (__107),y + cmp #brick + beq !__b109+ + jmp __b109 + !__b109: + __b36: + // POKE + lda #$fd + ldy #0 + sta (y_1),y + lda.z y_1 + clc + adc #c + sta.z __125+1 + lda #1 + sta (__125),y + clc + lda.z y_1 + adc #1 + sta.z __127 + lda.z y_1+1 + adc #0 + sta.z __127+1 + lda #$ed + sta (__127),y + lda.z __128 + clc + adc #c + sta.z __128+1 + lda #1 + sta (__128),y + lda #$16 + clc + adc.z y_1 + sta.z __130 + tya + adc.z y_1+1 + sta.z __130+1 + lda #$ee + sta (__130),y + lda.z __131 + clc + adc #c + sta.z __131+1 + lda #1 + sta (__131),y + lda #$17 + clc + adc.z y_1 + sta.z __133 + tya + adc.z y_1+1 + sta.z __133+1 + lda #$f0 + sta (__133),y + lda.z __134 + clc + adc #c + sta.z __134+1 + lda #1 + sta (__134),y + // wait(5) + // Clear peephole if there is not bricks contact + lda #5 + sta.z wait.n + jsr wait + // POKE + lda #0 + tay + sta (duck),y + lda.z duck + clc + adc #c + sta.z __136+1 + lda #7 + sta (__136),y + clc + lda.z duck + adc #1 + sta.z __138 + lda.z duck+1 + adc #0 + sta.z __138+1 + lda #1 + sta (__138),y + lda.z __139 + clc + adc #c + sta.z __139+1 + lda #7 + sta (__139),y + lda #$16 + clc + adc.z duck + sta.z __141 + tya + adc.z duck+1 + sta.z __141+1 + lda #2 + sta (__141),y + lda.z __142 + clc + adc #c + sta.z __142+1 + lda #7 + sta (__142),y + lda #$17 + clc + adc.z duck + sta.z __144 + tya + adc.z duck+1 + sta.z __144+1 + lda #3 + sta (__144),y + lda.z __145 + clc + adc #c + sta.z __145+1 + lda #7 + sta (__145),y + // wait(5) + lda #5 + sta.z wait.n + jsr wait + lda.z y_1 + sta.z y + lda.z y_1+1 + sta.z y+1 + jmp __b26 + __b109: + // if (PEEK(y)!=brick && PEEK(y+1)!=brick && PEEK(y+22)!=brick && PEEK(y+23)!=brick && y>7702 && y<8163) + lda #brick + ldy #0 + cmp (__110),y + bne !__b36+ + jmp __b36 + !__b36: + lda #>$1e16 + cmp.z y+1 + bcc __b107 + bne !+ + lda #<$1e16 + cmp.z y + bcc __b107 + !: + jmp __b36 + __b107: + lda.z y+1 + cmp #>$1fe3 + bcc !+ + beq !__b36+ + jmp __b36 + !__b36: + lda.z y + cmp #<$1fe3 + bcc !__b36+ + jmp __b36 + !__b36: + !: + // POKE + lda.z peephole + clc + adc #c + sta.z __119+1 + lda #0 + tay + sta (__119),y + clc + lda.z __119 + adc #1 + sta.z __120 + lda.z __119+1 + adc #0 + sta.z __120+1 + tya + sta (__120),y + lda #$16 + clc + adc.z __119 + sta.z __122 + tya + adc.z __119+1 + sta.z __122+1 + tya + sta (__122),y + lda #$17 + clc + adc.z __124 + sta.z __124 + bcc !+ + inc.z __124+1 + !: + lda #0 + tay + sta (__124),y + lda.z y + sta.z y_1 + lda.z y+1 + sta.z y_1+1 + jmp __b36 + __b34: + // score=score-10 + sec + lda.z score + sbc #$a + sta.z score + lda.z score+1 + sbc #0 + sta.z score+1 + // write_score() + jsr write_score + // wait(10) + lda #$a + sta.z wait.n + jsr wait + jmp __b35 + __b23: + // 48+tu + lda #$30 + clc + adc.z tu + sta.z __57 + lda #0 + adc.z tu+1 + sta.z __57+1 + // chrout(48+tu) + lda.z __57 + sta.z chrout.petscii + jsr chrout + jmp __b11 + __b21: + // chrout(ducknumber[j]) + ldy.z j_2 + lda ducknumber,y + sta.z chrout.petscii + jsr chrout + // for (j=0; j<5; j++) + inc.z j_2 + jmp __b20 + __b18: + // chrout(chrono[j]) + ldy.z j_1 + lda chrono,y + sta.z chrout.petscii + jsr chrout + // for (j=0; j<4; ++j) + inc.z j_1 + jmp __b17 + __b24: + lda #1 + sta.z j + __b14: + // for (j=1; j<=m; ++j) + lda.z m + cmp.z j + bcs __b15 + // chrout(brick) + lda #brick + sta.z chrout.petscii + jsr chrout + // z+m + lda.z m + clc + adc.z z_1 + sta.z __35 + lda #0 + adc.z z_1+1 + sta.z __35+1 + // z=z+m+1 + clc + lda.z __35 + adc #1 + sta.z z_1 + lda.z __35+1 + adc #0 + sta.z z_1+1 + // while (z<506) + cmp #>$1fa + bcs !__b13+ + jmp __b13 + !__b13: + bne !+ + lda.z z_1 + cmp #<$1fa + bcs !__b13+ + jmp __b13 + !__b13: + !: + jmp __b12 + __b15: + // chrout(right) + lda #right + sta.z chrout.petscii + jsr chrout + // for (j=1; j<=m; ++j) + inc.z j + jmp __b14 + __b7: + // chrout(brick) + lda #brick + sta.z chrout.petscii + jsr chrout + lda #2 + sta.z n + __b9: + // for(n=2;n<22;++n) + lda.z n + cmp #$16 + bcc __b10 + // chrout(brick) + lda #brick + sta.z chrout.petscii + jsr chrout + // for (k=1;k<22;k++) + inc.z k + jmp __b6 + __b10: + // chrout(right) + lda #right + sta.z chrout.petscii + jsr chrout + // for(n=2;n<22;++n) + inc.z n + jmp __b9 + __b2: + // POKE + lda.z m + clc + adc #<$1c00 + sta.z __3 + lda #>$1c00 + adc #0 + sta.z __3+1 + ldy.z m + lda duck_udg,y + ldy #0 + sta (__3),y + // for (m=0; m<40; m++) + inc.z m + jmp __b1 +} +// Set the cursor to the specified position +// void gotoxy(char x, __zp($4c) char y) +gotoxy: { + .label __5 = $48 + .label __6 = $2c + .label __7 = $2c + .label line_offset = $2c + .label y = $4c + .label __8 = $46 + .label __9 = $2c + // if(y>CONIO_HEIGHT) + lda.z y + cmp #$19+1 + bcc __b2 + lda #0 + sta.z y + __b2: + // conio_cursor_x = x + lda #0 + sta.z conio_cursor_x + // conio_cursor_y = y + lda.z y + sta.z conio_cursor_y + // unsigned int line_offset = (unsigned int)y*CONIO_WIDTH + lda.z y + sta.z __7 + lda #0 + sta.z __7+1 + lda.z __7 + asl + sta.z __8 + lda.z __7+1 + rol + sta.z __8+1 + asl.z __8 + rol.z __8+1 + clc + lda.z __9 + adc.z __8 + sta.z __9 + lda.z __9+1 + adc.z __8+1 + sta.z __9+1 + asl.z line_offset + rol.z line_offset+1 + asl.z line_offset + rol.z line_offset+1 + asl.z line_offset + rol.z line_offset+1 + // CONIO_SCREEN_TEXT + line_offset + lda.z line_offset + clc + adc #DEFAULT_SCREEN + sta.z __5+1 + // conio_line_text = CONIO_SCREEN_TEXT + line_offset + lda.z __5 + sta.z conio_line_text + lda.z __5+1 + sta.z conio_line_text+1 + // CONIO_SCREEN_COLORS + line_offset + lda.z __6 + clc + adc #COLORRAM + sta.z __6+1 + // conio_line_color = CONIO_SCREEN_COLORS + line_offset + lda.z __6 + sta.z conio_line_color + lda.z __6+1 + sta.z conio_line_color+1 + // } + rts +} +// void chrout(__zp($18) volatile char petscii) +chrout: { + .label petscii = $18 + // asm + lda petscii + jsr $ffd2 + // } + rts +} +// void clear_screen(__zp(8) char n, char m) +clear_screen: { + .label __4 = $23 + .label __5 = 9 + .label n = 8 + lda #<0 + sta.z z + sta.z z+1 + __b1: + // for (z=0; z<506; ++z) + lda.z z+1 + cmp #>$1fa + bcc __b2 + bne !+ + lda.z z + cmp #<$1fa + bcc __b2 + !: + // gotoxy(0,0) + // From 0-->505 (506 bytes). ClearScreen with byte 'n' with color 'm' + lda #0 + sta.z gotoxy.y + jsr gotoxy + // chrout(home) + lda #home + sta.z chrout.petscii + jsr chrout + // } + rts + __b2: + // POKE + lda.z z + clc + adc #<$1e00 + sta.z __5 + lda.z z+1 + adc #>$1e00 + sta.z __5+1 + lda.z __5 + clc + adc #c + sta.z __4+1 + lda #0 + tay + sta (__4),y + lda.z n + sta (__5),y + // for (z=0; z<506; ++z) + inc.z z + bne !+ + inc.z z+1 + !: + jmp __b1 +} +// Set the color for text output. The old color setting is returned. +// char textcolor(__zp(8) char color) +textcolor: { + .label color = 8 + // conio_textcolor = color + lda.z color + sta.z conio_textcolor + // } + rts +} +// Output a NUL-terminated string at the current cursor position +// void cputs(__zp(5) const char *s) +cputs: { + .label c = 2 + .label s = 5 + __b1: + // while(c=*s++) + ldy #0 + lda (s),y + sta.z c + inc.z s + bne !+ + inc.z s+1 + !: + lda.z c + bne __b2 + // } + rts + __b2: + // cputc(c) + jsr cputc + jmp __b1 +} +// Return to home position +// void random(__zp(3) char k, __zp(8) char n) +random: { + .label k = 3 + .label n = 8 + .label __3 = 2 + __b1: + // m=PEEK + lda $9114 + sta.z m + // m>n + sta.z __3 + // while (mn) + lda.z m + cmp.z k + bcc __b1 + lda.z n + cmp.z __3 + bcc __b1 + // } + rts +} +write_score: { + // if (score>65000) + lda.z score+1 + cmp #>$fde8 + bne !+ + lda.z score + cmp #<$fde8 + !: + bcc __b1 + beq __b1 + lda #<0 + sta.z score + sta.z score+1 + __b1: + // m=0 + lda #0 + sta.z m + __b5: + // for (m=0;m<4;m++) + lda.z m + cmp #4 + bcc __b6 + // utoa(score,buffer,10) + lda.z score + sta.z utoa.value + lda.z score+1 + sta.z utoa.value+1 + // (!!) Needed. Possibly a bug + jsr utoa + // if (score>9) + lda.z score+1 + bne !+ + lda.z score + cmp #9+1 + bcc __b2 + !: + // points[2]=buffer[0] + lda buffer + sta points+2 + // points[3]=buffer[1] + lda buffer+1 + sta points+3 + __b2: + // if (score>99) + lda.z score+1 + bne !+ + lda.z score + cmp #$63+1 + bcc __b3 + !: + // points[1]=buffer[0] + lda buffer + sta points+1 + // points[2]=buffer[1] + lda buffer+1 + sta points+2 + // points[3]=buffer[2] + lda buffer+2 + sta points+3 + __b3: + // chrout(yellow) + lda #yellow + sta.z chrout.petscii + jsr chrout + // chrout(home) + lda #home + sta.z chrout.petscii + jsr chrout + // POKE + lda #4 + sta.z $d3 + // m=0 + lda #0 + sta.z m + __b9: + // for (m=0;m<4;m++) + lda.z m + cmp #4 + bcc __b10 + // } + rts + __b10: + // chrout(points[m]) + ldy.z m + lda points,y + sta.z chrout.petscii + jsr chrout + // for (m=0;m<4;m++) + inc.z m + jmp __b9 + __b6: + // points[m]='0' + lda #'0' + ldy.z m + sta points,y + // for (m=0;m<4;m++) + inc.z m + jmp __b5 +} +chrono_restart: { + // asm + lda #0 + tay + tax + jsr $ffdb + // } + rts +} +// void wait(__zp(3) char n) +wait: { + .label n = 3 + // m=0 + lda #0 + sta.z m + __b1: + // for (m=0;m$21c + bcc __b3 + bne !+ + lda.z z_1 + cmp #<$21c + bcc __b3 + !: + // for (m=0;m@buffer + sta.z buffer+1 + lda #0 + sta.z started + sta.z digit + __b1: + // for( char digit=0; digit= digit_value) + lda.z started + bne __b5 + lda.z digit_value+1 + cmp.z value+1 + bne !+ + lda.z digit_value + cmp.z value + beq __b5 + !: + bcc __b5 + __b4: + // for( char digit=0; digit$b9 + sbc.z div16u8u.return_1+1 + sta.z __5+1 + lda.z __5 + sta $1e15 + __breturn: + // } + rts +} +// Output one character at the current cursor position +// Moves the cursor forward. Scrolls the entire screen if needed +// void cputc(__zp(2) char c) +cputc: { + .label c = 2 + // if(c=='\n') + lda #'\n' + cmp.z c + beq __b1 + // conio_line_text[conio_cursor_x] = c + lda.z c + ldy.z conio_cursor_x + sta (conio_line_text),y + // conio_line_color[conio_cursor_x] = conio_textcolor + lda.z conio_textcolor + sta (conio_line_color),y + // if(++conio_cursor_x==CONIO_WIDTH) + inc.z conio_cursor_x + lda #$28 + cmp.z conio_cursor_x + bne __breturn + // cputln() + jsr cputln + __breturn: + // } + rts + __b1: + // cputln() + jsr cputln + rts +} +// Used to convert a single digit of an unsigned number value to a string representation +// Counts a single digit up from '0' as long as the value is larger than sub. +// Each time the digit is increased sub is subtracted from value. +// - buffer : pointer to the char that receives the digit +// - value : The value where the digit will be derived from +// - sub : the value of a '1' in the digit. Subtracted continually while the digit is increased. +// (For decimal the subs used are 10000, 1000, 100, 10, 1) +// returns : the value reduced by sub * digit so that it is less than sub. +// __zp(5) unsigned int utoa_append(__zp($d) char *buffer, __zp(5) unsigned int value, __zp(9) unsigned int sub) +utoa_append: { + .label buffer = $d + .label value = 5 + .label sub = 9 + .label return = 5 + .label digit = 7 + lda #0 + sta.z digit + __b1: + // while (value >= sub) + lda.z sub+1 + cmp.z value+1 + bne !+ + lda.z sub + cmp.z value + beq __b2 + !: + bcc __b2 + // *buffer = DIGITS[digit] + ldy.z digit + lda DIGITS,y + ldy #0 + sta (buffer),y + // } + rts + __b2: + // digit++; + inc.z digit + // value -= sub + lda.z value + sec + sbc.z sub + sta.z value + lda.z value+1 + sbc.z sub+1 + sta.z value+1 + jmp __b1 +} +// Divide unsigned 16-bit unsigned long dividend with a 8-bit unsigned char divisor +// The 8-bit unsigned char remainder can be found in rem8u after the division +// __zp($30) unsigned int div16u8u(__zp($23) unsigned int dividend, char divisor) +div16u8u: { + .label divisor = $3c + .label quotient_hi = 2 + .label quotient_lo = $10 + .label return = $12 + .label dividend = $23 + .label return_1 = $30 + // unsigned char quotient_hi = divr8u(BYTE1(dividend), divisor, 0) + lda.z dividend+1 + sta.z divr8u.dividend + lda #0 + sta.z divr8u.rem + jsr divr8u + // unsigned char quotient_hi = divr8u(BYTE1(dividend), divisor, 0) + lda.z divr8u.return + sta.z quotient_hi + // unsigned char quotient_lo = divr8u(BYTE0(dividend), divisor, rem8u) + lda.z dividend + sta.z divr8u.dividend + jsr divr8u + // unsigned char quotient_lo = divr8u(BYTE0(dividend), divisor, rem8u) + // unsigned int quotient = MAKEWORD( quotient_hi, quotient_lo ) + lda.z quotient_hi + sta.z return+1 + lda.z quotient_lo + sta.z return + // } + rts +} +// Print a newline +cputln: { + // conio_line_text += CONIO_WIDTH + lda #$28 + clc + adc.z conio_line_text + sta.z conio_line_text + bcc !+ + inc.z conio_line_text+1 + !: + // conio_line_color += CONIO_WIDTH + lda #$28 + clc + adc.z conio_line_color + sta.z conio_line_color + bcc !+ + inc.z conio_line_color+1 + !: + // conio_cursor_x = 0 + lda #0 + sta.z conio_cursor_x + // conio_cursor_y++; + inc.z conio_cursor_y + // cscroll() + jsr cscroll + // } + rts +} +// Performs division on two 8 bit unsigned chars and an initial remainder +// Returns dividend/divisor. +// The final remainder will be set into the global variable rem8u +// Implemented using simple binary division +// __zp($10) char divr8u(__zp(3) char dividend, char divisor, __zp($f) char rem) +divr8u: { + .label __1 = $11 + .label rem = $f + .label dividend = 3 + .label quotient = $10 + .label i = 7 + .label return = $10 + lda #0 + sta.z i + sta.z quotient + __b1: + // rem = rem << 1 + asl.z rem + // dividend & $80 + lda #$80 + and.z dividend + sta.z __1 + // if( (dividend & $80) != 0 ) + beq __b2 + // rem = rem | 1 + lda #1 + ora.z rem + sta.z rem + __b2: + // dividend = dividend << 1 + asl.z dividend + // quotient = quotient << 1 + asl.z quotient + // if(rem>=divisor) + lda.z rem + cmp #div16u8u.divisor + bcc __b3 + // quotient++; + inc.z quotient + // rem = rem - divisor + lax.z rem + axs #div16u8u.divisor + stx.z rem + __b3: + // for( char i : 0..7) + inc.z i + lda #8 + cmp.z i + bne __b1 + // } + rts +} +// Scroll the entire screen if the cursor is beyond the last line +cscroll: { + // if(conio_cursor_y==CONIO_HEIGHT) + lda #$19 + cmp.z conio_cursor_y + bne __breturn + // memcpy(CONIO_SCREEN_TEXT, CONIO_SCREEN_TEXT+CONIO_WIDTH, CONIO_BYTES-CONIO_WIDTH) + lda #DEFAULT_SCREEN + sta.z memcpy.destination+1 + lda #DEFAULT_SCREEN+$28 + sta.z memcpy.source+1 + jsr memcpy + // memcpy(CONIO_SCREEN_COLORS, CONIO_SCREEN_COLORS+CONIO_WIDTH, CONIO_BYTES-CONIO_WIDTH) + lda #COLORRAM + sta.z memcpy.destination+1 + lda #COLORRAM+$28 + sta.z memcpy.source+1 + jsr memcpy + // memset(CONIO_SCREEN_TEXT+CONIO_BYTES-CONIO_WIDTH, ' ', CONIO_WIDTH) + lda #' ' + sta.z memset.c + lda #DEFAULT_SCREEN+$19*$28-$28 + sta.z memset.str+1 + jsr memset + // memset(CONIO_SCREEN_COLORS+CONIO_BYTES-CONIO_WIDTH, conio_textcolor, CONIO_WIDTH) + lda.z conio_textcolor + sta.z memset.c + lda #COLORRAM+$19*$28-$28 + sta.z memset.str+1 + jsr memset + // conio_line_text -= CONIO_WIDTH + sec + lda.z conio_line_text + sbc #$28 + sta.z conio_line_text + lda.z conio_line_text+1 + sbc #0 + sta.z conio_line_text+1 + // conio_line_color -= CONIO_WIDTH + sec + lda.z conio_line_color + sbc #$28 + sta.z conio_line_color + lda.z conio_line_color+1 + sbc #0 + sta.z conio_line_color+1 + // conio_cursor_y--; + dec.z conio_cursor_y + __breturn: + // } + rts +} +// Copy block of memory (forwards) +// Copies the values of num bytes from the location pointed to by source directly to the memory block pointed to by destination. +// void * memcpy(__zp($b) void *destination, __zp($d) void *source, unsigned int num) +memcpy: { + .label src_end = 9 + .label dst = $b + .label src = $d + .label source = $d + .label destination = $b + // char* src_end = (char*)source+num + lda.z source + clc + adc #<$19*$28-$28 + sta.z src_end + lda.z source+1 + adc #>$19*$28-$28 + sta.z src_end+1 + __b1: + // while(src!=src_end) + lda.z src+1 + cmp.z src_end+1 + bne __b2 + lda.z src + cmp.z src_end + bne __b2 + // } + rts + __b2: + // *dst++ = *src++ + ldy #0 + lda (src),y + sta (dst),y + // *dst++ = *src++; + inc.z dst + bne !+ + inc.z dst+1 + !: + inc.z src + bne !+ + inc.z src+1 + !: + jmp __b1 +} +// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. +// void * memset(__zp($b) void *str, __zp($10) char c, unsigned int num) +memset: { + .label end = $12 + .label dst = $b + .label c = $10 + .label str = $b + // char* end = (char*)str + num + lda #$28 + clc + adc.z str + sta.z end + lda #0 + adc.z str+1 + sta.z end+1 + __b2: + // for(char* dst = str; dst!=end; dst++) + lda.z dst+1 + cmp.z end+1 + bne __b3 + lda.z dst + cmp.z end + bne __b3 + // } + rts + __b3: + // *dst = c + lda.z c + ldy #0 + sta (dst),y + // for(char* dst = str; dst!=end; dst++) + inc.z dst + bne !+ + inc.z dst+1 + !: + jmp __b2 +} +.segment Data + // The digits used for numbers + DIGITS: .text "0123456789abcdef" + // Values of decimal digits + RADIX_DECIMAL_VALUES: .word $2710, $3e8, $64, $a + // [0..65536] 16-bit + points: .byte 0, 0, 0, 0 + buffer: .byte 0, 0, 0, 0 + // for unexpanded. 37888-4096 color for expanded + ducknumber: .byte $44, $55, $43, $4b, $3a + // DUCK: + chrono: .byte $54, $4d, $3a, $39 + // TM:9 + duck_udg: .byte $e, $1b, $3f, $1f, $f, 7, $f, $1f, 0, 0, 0, 0, 0, $c0, $70, $bc, $1f, $1d, $1e, $f, 3, 1, 1, 3, $ce, $1e, $7c, $f8, $e0, $40, $40, $e0, 0, 0, 0, 0, 0, 0, 0, 0 + // POKE CODES = 0,1,2,3,4; CHROUT CODES = 64, 65, 66, 67, 68 (with previous reverse_off "chrout(146)") + intro: .text @"\n\n\nDIFFICULTY\n----------\n\n\n" + .byte 0 + levels: .text @"1.EASIEST\n\n3.EASY\n\n5.MEDIUM\n\n7.HARD\n\n9.EXPERT\n\n\n\n\n" + .byte 0 + foot: .text @"PRESS: 1,3,5,7 or 9\n\n" + .byte 0 + game_over: .text @"\n\n\n\nGAME OVER" + .byte 0 + play_again: .text @"\n\n\nPlay Again (Y/N)?" + .byte 0 + your_score: .text @"\n\n\nYour Score: " + .byte 0 + high_score: .text @"\n\nHi-Score: " + .byte 0 diff --git a/src/test/ref/ducks-total.cfg b/src/test/ref/ducks-total.cfg new file mode 100644 index 000000000..52f2f3316 --- /dev/null +++ b/src/test/ref/ducks-total.cfg @@ -0,0 +1,1030 @@ + +void __start() +__start: scope:[__start] from + [0] phi() + to:__start::__init1 +__start::__init1: scope:[__start] from __start + [1] conio_cursor_x = 0 + [2] conio_cursor_y = 0 + [3] conio_line_text = DEFAULT_SCREEN + [4] conio_line_color = COLORRAM + [5] conio_textcolor = LIGHT_BLUE + [6] l = 0 + [7] m = 0 + [8] call conio_c64_init + to:__start::@1 +__start::@1: scope:[__start] from __start::__init1 + [9] phi() + [10] call main + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + [11] return + to:@return + +void conio_c64_init() +conio_c64_init: scope:[conio_c64_init] from __start::__init1 + [12] conio_c64_init::line#0 = *conio_c64_init::BASIC_CURSOR_LINE + [13] if(conio_c64_init::line#0<$19) goto conio_c64_init::@2 + to:conio_c64_init::@1 +conio_c64_init::@2: scope:[conio_c64_init] from conio_c64_init + [14] phi() + to:conio_c64_init::@1 +conio_c64_init::@1: scope:[conio_c64_init] from conio_c64_init conio_c64_init::@2 + [15] conio_c64_init::line#2 = phi( conio_c64_init::@2/conio_c64_init::line#0, conio_c64_init/$19-1 ) + [16] gotoxy::y#2 = conio_c64_init::line#2 + [17] call gotoxy + to:conio_c64_init::@return +conio_c64_init::@return: scope:[conio_c64_init] from conio_c64_init::@1 + [18] return + to:@return + +void main() +main: scope:[main] from __start::@1 + [19] *((char *) 36879) = 8 + [20] chrout::petscii = lock + [21] call chrout + to:main::@50 +main::@50: scope:[main] from main + [22] chrout::petscii = lower + [23] call chrout + to:main::@51 +main::@51: scope:[main] from main::@50 + [24] m = 0 + to:main::@1 +main::@1: scope:[main] from main::@2 main::@51 + [25] if(m<$28) goto main::@2 + to:main::@3 +main::@3: scope:[main] from main::@1 main::@113 + [26] n#109 = phi( main::@1/0, main::@113/n#20 ) + [26] hiscore#110 = phi( main::@1/0, main::@113/hiscore#123 ) + [26] y#114 = phi( main::@1/0, main::@113/y#18 ) + [26] rem8u#127 = phi( main::@1/0, main::@113/rem8u#25 ) + [27] call clear_screen + to:main::@52 +main::@52: scope:[main] from main::@3 + [28] phi() + [29] call textcolor + to:main::@53 +main::@53: scope:[main] from main::@52 + [30] phi() + [31] call cputs + to:main::@54 +main::@54: scope:[main] from main::@53 + [32] phi() + [33] call textcolor + to:main::@55 +main::@55: scope:[main] from main::@54 + [34] phi() + [35] call cputs + to:main::@56 +main::@56: scope:[main] from main::@55 + [36] phi() + [37] call textcolor + to:main::@57 +main::@57: scope:[main] from main::@56 + [38] phi() + [39] call cputs + to:main::@4 +main::@4: scope:[main] from main::@4 main::@57 + [40] l = *((char *) 197) + [41] l = ++ l + [42] if(l>=5+1) goto main::@4 + to:main::@5 +main::@5: scope:[main] from main::@4 + [43] phi() + [44] call clear_screen + to:main::@58 +main::@58: scope:[main] from main::@5 + [45] *((char *) 36869) = $ff + [46] chrout::petscii = reverse_on + [47] call chrout + to:main::@59 +main::@59: scope:[main] from main::@58 + [48] chrout::petscii = red + [49] call chrout + to:main::@60 +main::@60: scope:[main] from main::@59 + [50] chrout::petscii = down + [51] call chrout + to:main::@6 +main::@6: scope:[main] from main::@60 main::@64 + [52] n#89 = phi( main::@60/n#109, main::@64/n#101 ) + [52] k#101 = phi( main::@60/1, main::@64/k#1 ) + [53] if(k#101<$16) goto main::@7 + to:main::@8 +main::@8: scope:[main] from main::@6 + [54] chrout::petscii = brick + [55] call chrout + to:main::@61 +main::@61: scope:[main] from main::@8 + [56] *((char *) 8185) = brick + [57] *((char *)$1ff9+c) = 2 + [58] chrout::petscii = home + [59] call chrout + to:main::@62 +main::@62: scope:[main] from main::@61 + [60] if(l<1+1) goto main::@12 + to:main::@13 +main::@13: scope:[main] from main::@62 main::@73 + [61] z#28 = phi( main::@62/1, main::@73/z#9 ) + [62] random::k#0 = 7 - l + [63] main::$177 = l << 1 + [64] main::$26 = main::$177 + l + [65] random::n#0 = $1a - main::$26 + [66] call random + to:main::@71 +main::@71: scope:[main] from main::@13 + [67] main::$29 = z#28 + m + [68] if(main::$29<=$1f9) goto main::@14 + to:main::@12 +main::@12: scope:[main] from main::@62 main::@71 main::@73 + [69] z#128 = phi( main::@62/1, main::@71/z#28, main::@73/z#9 ) + [70] *((char *) 36878) = $f + [71] chrout::petscii = home + [72] call chrout + to:main::@65 +main::@65: scope:[main] from main::@12 + [73] chrout::petscii = yellow + [74] call chrout + to:main::@66 +main::@66: scope:[main] from main::@65 + [75] chrout::petscii = $50 + [76] call chrout + to:main::@67 +main::@67: scope:[main] from main::@66 + [77] chrout::petscii = $54 + [78] call chrout + to:main::@68 +main::@68: scope:[main] from main::@67 + [79] chrout::petscii = $53 + [80] call chrout + to:main::@69 +main::@69: scope:[main] from main::@68 + [81] chrout::petscii = $3a + [82] call chrout + to:main::@70 +main::@70: scope:[main] from main::@69 + [83] *((char *) 211) = $12 + to:main::@17 +main::@17: scope:[main] from main::@70 main::@74 + [84] j#13 = phi( main::@70/0, main::@74/j#3 ) + [85] if(j#13<4) goto main::@18 + to:main::@19 +main::@19: scope:[main] from main::@17 + [86] phi() + [87] call write_score + to:main::@75 +main::@75: scope:[main] from main::@19 + [88] chrout::petscii = home + [89] call chrout + to:main::@76 +main::@76: scope:[main] from main::@75 + [90] chrout::petscii = green + [91] call chrout + to:main::@77 +main::@77: scope:[main] from main::@76 + [92] *((char *) 211) = $a + to:main::@20 +main::@20: scope:[main] from main::@77 main::@78 + [93] j#16 = phi( main::@77/0, main::@78/j#5 ) + [94] if(j#16<5) goto main::@21 + to:main::@22 +main::@22: scope:[main] from main::@20 main::@87 + [95] n#52 = phi( main::@20/n#89, main::@87/n#20 ) + [95] peephole#52 = phi( main::@20/$1f1f, main::@87/peephole#12 ) + [95] z#102 = phi( main::@20/z#128, main::@87/z#25 ) + [95] y#49 = phi( main::@20/y#114, main::@87/y#18 ) + [95] rem8u#48 = phi( main::@20/rem8u#127, main::@87/rem8u#25 ) + [95] tu#13 = phi( main::@20/1, main::@87/tu#1 ) + [96] chrout::petscii = home + [97] call chrout + to:main::@79 +main::@79: scope:[main] from main::@22 + [98] chrout::petscii = green + [99] call chrout + to:main::@80 +main::@80: scope:[main] from main::@79 + [100] chrout::petscii = reverse_on + [101] call chrout + to:main::@81 +main::@81: scope:[main] from main::@80 + [102] *((char *) 211) = $f + [103] if(tu#13<$a) goto main::@23 + to:main::@45 +main::@45: scope:[main] from main::@81 + [104] chrout::petscii = $31 + [105] call chrout + to:main::@82 +main::@82: scope:[main] from main::@45 + [106] chrout::petscii = $30 + [107] call chrout + to:main::@24 +main::@24: scope:[main] from main::@103 main::@104 main::@105 main::@106 main::@23 main::@82 main::@84 + [108] phi() + [109] call random + to:main::@83 +main::@83: scope:[main] from main::@24 + [110] duck#0 = m + [111] call random + to:main::@84 +main::@84: scope:[main] from main::@83 + [112] main::$61 = m + $1e15 + [113] duck#1 = main::$61 + duck#0 + [114] main::$66 = duck#1 + 1 + [115] main::$69 = duck#1 + $16 + [116] main::$72 = duck#1 + $17 + [117] if(duck#1>$1fe3) goto main::@24 + to:main::@106 +main::@106: scope:[main] from main::@84 + [118] if(*((char *)duck#1)==brick) goto main::@24 + to:main::@105 +main::@105: scope:[main] from main::@106 + [119] if(*((char *)main::$66)==brick) goto main::@24 + to:main::@104 +main::@104: scope:[main] from main::@105 + [120] if(*((char *)main::$69)==brick) goto main::@24 + to:main::@103 +main::@103: scope:[main] from main::@104 + [121] if(*((char *)main::$72)==brick) goto main::@24 + to:main::@25 +main::@25: scope:[main] from main::@103 + [122] phi() + [123] call chrono_restart + to:main::@26 +main::@26: scope:[main] from main::@25 main::@90 + [124] n#20 = phi( main::@90/n#14, main::@25/n#52 ) + [124] peephole#12 = phi( main::@90/y#35, main::@25/peephole#52 ) + [124] z#100 = phi( main::@90/z#25, main::@25/z#102 ) + [124] y#18 = phi( main::@90/y#130, main::@25/y#49 ) + [124] rem8u#25 = phi( main::@90/divr8u::rem#11, main::@25/rem8u#48 ) + [124] score#19 = phi( main::@90/score#43, main::@25/score#38 ) + [124] time#11 = phi( main::@90/time#17, main::@25/0 ) + [125] if(time#11<$a) goto main::@27 + to:main::@28 +main::@28: scope:[main] from main::@26 + [126] tu#1 = ++ tu#13 + [127] score#4 = score#19 - $a + [128] call write_score + to:main::@86 +main::@86: scope:[main] from main::@28 + [129] *((char *) 36877) = $82 + [130] call wait + to:main::@87 +main::@87: scope:[main] from main::@86 + [131] *((char *) 36877) = 0 + [132] main::$150 = duck#1 + c + [133] *((char *)main::$150) = 0 + [134] main::$151 = duck#1 + [135] main::$152 = main::$151 + 1+c + [136] *((char *)main::$152) = 0 + [137] main::$153 = duck#1 + [138] main::$154 = main::$153 + $16+c + [139] *((char *)main::$154) = 0 + [140] main::$155 = duck#1 + [141] main::$156 = main::$155 + $17+c + [142] *((char *)main::$156) = 0 + [143] if(tu#1<$b) goto main::@22 + to:main::@44 +main::@44: scope:[main] from main::@87 + [144] phi() + [145] call clear_screen + to:main::@91 +main::@91: scope:[main] from main::@44 + [146] *((char *) 36869) = $f0 + [147] chrout::petscii = lower + [148] call chrout + to:main::@92 +main::@92: scope:[main] from main::@91 + [149] phi() + [150] call textcolor + to:main::@93 +main::@93: scope:[main] from main::@92 + [151] phi() + [152] call cputs + to:main::@94 +main::@94: scope:[main] from main::@93 + [153] phi() + [154] call textcolor + to:main::@95 +main::@95: scope:[main] from main::@94 + [155] phi() + [156] call cputs + to:main::@96 +main::@96: scope:[main] from main::@95 + [157] phi() + [158] call cputs + to:main::@97 +main::@97: scope:[main] from main::@96 + [159] phi() + [160] call textcolor + to:main::@98 +main::@98: scope:[main] from main::@97 + [161] phi() + [162] call cputs + to:main::@99 +main::@99: scope:[main] from main::@98 + [163] if(score#38<=hiscore#110) goto main::@114 + to:main::@46 +main::@114: scope:[main] from main::@99 + [164] hiscore#124 = hiscore#110 + to:main::@46 +main::@46: scope:[main] from main::@114 main::@99 + [165] hiscore#19 = phi( main::@114/hiscore#124, main::@99/score#38 ) + [166] utoa::value#2 = hiscore#19 + [167] call utoa + to:main::@100 +main::@100: scope:[main] from main::@46 + [168] phi() + [169] call cputs + to:main::@101 +main::@101: scope:[main] from main::@100 + [170] phi() + [171] call textcolor + to:main::@102 +main::@102: scope:[main] from main::@101 + [172] phi() + [173] call cputs + to:main::@47 +main::@47: scope:[main] from main::@102 main::@112 + [174] j#19 = *((char *) 197) + [175] if(j#19==$b) goto main::@48 + to:main::@112 +main::@112: scope:[main] from main::@47 + [176] if(j#19!=$1c) goto main::@47 + to:main::@48 +main::@48: scope:[main] from main::@112 main::@47 + [177] if(j#19==$b) goto main::@113 + to:main::@49 +main::@49: scope:[main] from main::@48 + asm { jsr$FD22 } + to:main::@return +main::@return: scope:[main] from main::@49 + [179] return + to:@return +main::@113: scope:[main] from main::@48 + [180] hiscore#123 = hiscore#19 + to:main::@3 +main::@27: scope:[main] from main::@26 + [181] phi() + [182] call read_chrono + to:main::@85 +main::@85: scope:[main] from main::@27 + [183] m = *((char *) 37151) + [184] *((char *) 37154) = $7f + [185] n#14 = *((char *) 37152) + [186] *((char *) 37154) = $ff + [187] main::$78 = $10 & m + [188] if(main::$78!=0) goto main::@29 + to:main::@37 +main::@37: scope:[main] from main::@85 + [189] y#0 = -- y#18 + to:main::@29 +main::@29: scope:[main] from main::@37 main::@85 + [190] y#10 = phi( main::@37/y#0, main::@85/y#18 ) + [191] main::$81 = $80 & n#14 + [192] if(main::$81!=0) goto main::@30 + to:main::@38 +main::@38: scope:[main] from main::@29 + [193] y#1 = ++ y#10 + to:main::@30 +main::@30: scope:[main] from main::@29 main::@38 + [194] y#11 = phi( main::@29/y#10, main::@38/y#1 ) + [195] main::$84 = 4 & m + [196] if(main::$84!=0) goto main::@31 + to:main::@39 +main::@39: scope:[main] from main::@30 + [197] y#2 = y#11 - $16 + to:main::@31 +main::@31: scope:[main] from main::@30 main::@39 + [198] y#12 = phi( main::@30/y#11, main::@39/y#2 ) + [199] main::$88 = 8 & m + [200] if(main::$88!=0) goto main::@32 + to:main::@40 +main::@40: scope:[main] from main::@31 + [201] y#3 = y#12 + $16 + to:main::@32 +main::@32: scope:[main] from main::@31 main::@40 + [202] y#13 = phi( main::@31/y#12, main::@40/y#3 ) + [203] main::$92 = $20 & m + [204] if(main::$92!=0) goto main::@33 + to:main::@41 +main::@41: scope:[main] from main::@32 + [205] *((char *) 36877) = $82 + [206] if(peephole#12!=duck#1) goto main::@34 + to:main::@42 +main::@42: scope:[main] from main::@41 + [207] main::$96 = $c - div16u8u::return#2 + [208] main::$179 = main::$96 << 2 + [209] main::$180 = main::$179 + main::$96 + [210] main::$97 = main::$180 << 1 + [211] score#8 = score#19 + main::$97 + [212] call wait + to:main::@35 +main::@35: scope:[main] from main::@42 main::@88 + [213] score#81 = phi( main::@88/score#38, main::@42/score#8 ) + [213] time#38 = phi( main::@88/div16u8u::return#2, main::@42/$a ) + [214] *((char *) 36877) = 0 + to:main::@33 +main::@33: scope:[main] from main::@32 main::@35 + [215] score#43 = phi( main::@32/score#19, main::@35/score#81 ) + [215] time#17 = phi( main::@32/div16u8u::return#2, main::@35/time#38 ) + [215] z#48 = phi( main::@32/z#100, main::@35/z#25 ) + [216] main::$104 = y#13 + 1 + [217] main::$107 = y#13 + $16 + [218] main::$110 = y#13 + $17 + [219] if(*((char *)y#13)==brick) goto main::@36 + to:main::@111 +main::@111: scope:[main] from main::@33 + [220] if(*((char *)main::$104)==brick) goto main::@36 + to:main::@110 +main::@110: scope:[main] from main::@111 + [221] if(*((char *)main::$107)!=brick) goto main::@109 + to:main::@36 +main::@36: scope:[main] from main::@107 main::@108 main::@109 main::@110 main::@111 main::@33 main::@43 + [222] y#35 = phi( main::@33/peephole#12, main::@43/y#141 ) + [223] *((char *)y#35) = $fd + [224] main::$125 = y#35 + c + [225] *((char *)main::$125) = 1 + [226] main::$127 = y#35 + 1 + [227] *((char *)main::$127) = $ed + [228] main::$128 = main::$127 + c + [229] *((char *)main::$128) = 1 + [230] main::$130 = y#35 + $16 + [231] *((char *)main::$130) = $ee + [232] main::$131 = main::$130 + c + [233] *((char *)main::$131) = 1 + [234] main::$133 = y#35 + $17 + [235] *((char *)main::$133) = $f0 + [236] main::$134 = main::$133 + c + [237] *((char *)main::$134) = 1 + [238] call wait + to:main::@89 +main::@89: scope:[main] from main::@36 + [239] *((char *)duck#1) = 0 + [240] main::$136 = duck#1 + c + [241] *((char *)main::$136) = 7 + [242] main::$138 = duck#1 + 1 + [243] *((char *)main::$138) = 1 + [244] main::$139 = main::$138 + c + [245] *((char *)main::$139) = 7 + [246] main::$141 = duck#1 + $16 + [247] *((char *)main::$141) = 2 + [248] main::$142 = main::$141 + c + [249] *((char *)main::$142) = 7 + [250] main::$144 = duck#1 + $17 + [251] *((char *)main::$144) = 3 + [252] main::$145 = main::$144 + c + [253] *((char *)main::$145) = 7 + [254] call wait + to:main::@90 +main::@90: scope:[main] from main::@89 + [255] y#130 = y#35 + to:main::@26 +main::@109: scope:[main] from main::@110 + [256] if(*((char *)main::$110)==brick) goto main::@36 + to:main::@108 +main::@108: scope:[main] from main::@109 + [257] if(y#13>$1e16) goto main::@107 + to:main::@36 +main::@107: scope:[main] from main::@108 + [258] if(y#13>=$1fe3) goto main::@36 + to:main::@43 +main::@43: scope:[main] from main::@107 + [259] main::$119 = peephole#12 + c + [260] *((char *)main::$119) = 0 + [261] main::$120 = main::$119 + 1 + [262] *((char *)main::$120) = 0 + [263] main::$122 = main::$119 + $16 + [264] *((char *)main::$122) = 0 + [265] main::$124 = main::$119 + $17 + [266] *((char *)main::$124) = 0 + [267] y#141 = y#13 + to:main::@36 +main::@34: scope:[main] from main::@41 + [268] score#6 = score#19 - $a + [269] call write_score + to:main::@88 +main::@88: scope:[main] from main::@34 + [270] phi() + [271] call wait + to:main::@35 +main::@23: scope:[main] from main::@81 + [272] main::$57 = $30 + tu#13 + [273] chrout::petscii = main::$57 + [274] call chrout + to:main::@24 +main::@21: scope:[main] from main::@20 + [275] chrout::petscii = ducknumber[j#16] + [276] call chrout + to:main::@78 +main::@78: scope:[main] from main::@21 + [277] j#5 = ++ j#16 + to:main::@20 +main::@18: scope:[main] from main::@17 + [278] chrout::petscii = chrono[j#13] + [279] call chrout + to:main::@74 +main::@74: scope:[main] from main::@18 + [280] j#3 = ++ j#13 + to:main::@17 +main::@14: scope:[main] from main::@71 main::@72 + [281] j#11 = phi( main::@71/1, main::@72/j#2 ) + [282] if(j#11<=m) goto main::@15 + to:main::@16 +main::@16: scope:[main] from main::@14 + [283] chrout::petscii = brick + [284] call chrout + to:main::@73 +main::@73: scope:[main] from main::@16 + [285] main::$35 = z#28 + m + [286] z#9 = main::$35 + 1 + [287] if(z#9<$1fa) goto main::@13 + to:main::@12 +main::@15: scope:[main] from main::@14 + [288] chrout::petscii = right + [289] call chrout + to:main::@72 +main::@72: scope:[main] from main::@15 + [290] j#2 = ++ j#11 + to:main::@14 +main::@7: scope:[main] from main::@6 + [291] chrout::petscii = brick + [292] call chrout + to:main::@9 +main::@9: scope:[main] from main::@63 main::@7 + [293] n#101 = phi( main::@7/2, main::@63/n#1 ) + [294] if(n#101<$16) goto main::@10 + to:main::@11 +main::@11: scope:[main] from main::@9 + [295] chrout::petscii = brick + [296] call chrout + to:main::@64 +main::@64: scope:[main] from main::@11 + [297] k#1 = ++ k#101 + to:main::@6 +main::@10: scope:[main] from main::@9 + [298] chrout::petscii = right + [299] call chrout + to:main::@63 +main::@63: scope:[main] from main::@10 + [300] n#1 = ++ n#101 + to:main::@9 +main::@2: scope:[main] from main::@1 + [301] main::$3 = $1c00 + m + [302] *((char *)main::$3) = duck_udg[m] + [303] m = ++ m + to:main::@1 + +void gotoxy(char x , char y) +gotoxy: scope:[gotoxy] from clear_screen::@3 conio_c64_init::@1 + [304] gotoxy::y#4 = phi( clear_screen::@3/0, conio_c64_init::@1/gotoxy::y#2 ) + [305] if(gotoxy::y#4<$19+1) goto gotoxy::@3 + to:gotoxy::@1 +gotoxy::@3: scope:[gotoxy] from gotoxy + [306] phi() + to:gotoxy::@1 +gotoxy::@1: scope:[gotoxy] from gotoxy gotoxy::@3 + [307] gotoxy::y#5 = phi( gotoxy::@3/gotoxy::y#4, gotoxy/0 ) + to:gotoxy::@2 +gotoxy::@2: scope:[gotoxy] from gotoxy::@1 + [308] conio_cursor_x = 0 + [309] conio_cursor_y = gotoxy::y#5 + [310] gotoxy::$7 = (unsigned int)gotoxy::y#5 + [311] gotoxy::$8 = gotoxy::$7 << 2 + [312] gotoxy::$9 = gotoxy::$8 + gotoxy::$7 + [313] gotoxy::line_offset#0 = gotoxy::$9 << 3 + [314] gotoxy::$5 = DEFAULT_SCREEN + gotoxy::line_offset#0 + [315] conio_line_text = gotoxy::$5 + [316] gotoxy::$6 = COLORRAM + gotoxy::line_offset#0 + [317] conio_line_color = gotoxy::$6 + to:gotoxy::@return +gotoxy::@return: scope:[gotoxy] from gotoxy::@2 + [318] return + to:@return + +void chrout(volatile char petscii) +chrout: scope:[chrout] from clear_screen::@4 main main::@10 main::@11 main::@12 main::@15 main::@16 main::@18 main::@21 main::@22 main::@23 main::@45 main::@50 main::@58 main::@59 main::@60 main::@61 main::@65 main::@66 main::@67 main::@68 main::@69 main::@7 main::@75 main::@76 main::@79 main::@8 main::@80 main::@82 main::@91 write_score::@10 write_score::@12 write_score::@3 + asm { ldapetscii jsr$ffd2 } + to:chrout::@return +chrout::@return: scope:[chrout] from chrout + [320] return + to:@return + +void clear_screen(char n , char m) +clear_screen: scope:[clear_screen] from main::@3 main::@44 main::@5 + [321] clear_screen::n#5 = phi( main::@3/$20, main::@44/4, main::@5/4 ) + to:clear_screen::@1 +clear_screen::@1: scope:[clear_screen] from clear_screen clear_screen::@2 + [322] z#2 = phi( clear_screen/0, clear_screen::@2/z#1 ) + [323] if(z#2<$1fa) goto clear_screen::@2 + to:clear_screen::@3 +clear_screen::@3: scope:[clear_screen] from clear_screen::@1 + [324] phi() + [325] call gotoxy + to:clear_screen::@4 +clear_screen::@4: scope:[clear_screen] from clear_screen::@3 + [326] chrout::petscii = home + [327] call chrout + to:clear_screen::@return +clear_screen::@return: scope:[clear_screen] from clear_screen::@4 + [328] return + to:@return +clear_screen::@2: scope:[clear_screen] from clear_screen::@1 + [329] clear_screen::$5 = $1e00 + z#2 + [330] clear_screen::$4 = clear_screen::$5 + c + [331] *((char *)clear_screen::$4) = 0 + [332] *((char *)clear_screen::$5) = clear_screen::n#5 + [333] z#1 = ++ z#2 + to:clear_screen::@1 + +char textcolor(char color) +textcolor: scope:[textcolor] from main::@101 main::@52 main::@54 main::@56 main::@92 main::@94 main::@97 + [334] textcolor::color#7 = phi( main::@92/7, main::@94/2, main::@97/3, main::@101/1, main::@52/7, main::@54/1, main::@56/2 ) + [335] conio_textcolor = textcolor::color#7 + to:textcolor::@return +textcolor::@return: scope:[textcolor] from textcolor + [336] return + to:@return + +void cputs(const char *s) +cputs: scope:[cputs] from main::@100 main::@102 main::@53 main::@55 main::@57 main::@93 main::@95 main::@96 main::@98 + [337] cputs::s#11 = phi( main::@93/game_over, main::@95/your_score, main::@96/buffer, main::@98/high_score, main::@100/buffer, main::@102/play_again, main::@53/intro, main::@55/levels, main::@57/foot ) + to:cputs::@1 +cputs::@1: scope:[cputs] from cputs cputs::@2 + [338] cputs::s#10 = phi( cputs/cputs::s#11, cputs::@2/cputs::s#0 ) + [339] cputs::c#1 = *cputs::s#10 + [340] cputs::s#0 = ++ cputs::s#10 + [341] if(0!=cputs::c#1) goto cputs::@2 + to:cputs::@return +cputs::@return: scope:[cputs] from cputs::@1 + [342] return + to:@return +cputs::@2: scope:[cputs] from cputs::@1 + [343] cputc::c#0 = cputs::c#1 + [344] call cputc + to:cputs::@1 + +void random(char k , char n) +random: scope:[random] from main::@13 main::@24 main::@83 + [345] random::n#4 = phi( main::@13/random::n#0, main::@24/$ff, main::@83/$ff ) + [345] random::k#4 = phi( main::@13/random::k#0, main::@24/0, main::@83/0 ) + to:random::@1 +random::@1: scope:[random] from random random::@1 random::@2 + [346] m = *((char *) 37140) + [347] random::$3 = m + [348] if(mrandom::n#4) goto random::@1 + to:random::@return +random::@return: scope:[random] from random::@2 + [350] return + to:@return + +void write_score() +write_score: scope:[write_score] from main::@19 main::@28 main::@34 + [351] score#13 = phi( main::@19/0, main::@28/score#4, main::@34/score#6 ) + [352] if(score#13<=$fde8) goto write_score::@15 + to:write_score::@1 +write_score::@15: scope:[write_score] from write_score + [353] phi() + to:write_score::@1 +write_score::@1: scope:[write_score] from write_score write_score::@15 + [354] score#38 = phi( write_score::@15/score#13, write_score/0 ) + [355] m = 0 + to:write_score::@5 +write_score::@5: scope:[write_score] from write_score::@1 write_score::@6 + [356] if(m<4) goto write_score::@6 + to:write_score::@7 +write_score::@7: scope:[write_score] from write_score::@5 + [357] utoa::value#1 = score#38 + [358] call utoa + to:write_score::@11 +write_score::@11: scope:[write_score] from write_score::@7 + [359] if(score#38<9+1) goto write_score::@2 + to:write_score::@8 +write_score::@8: scope:[write_score] from write_score::@11 + [360] *(points+2) = *buffer + [361] *(points+3) = *(buffer+1) + to:write_score::@2 +write_score::@2: scope:[write_score] from write_score::@11 write_score::@8 + [362] if(score#38<$63+1) goto write_score::@3 + to:write_score::@4 +write_score::@4: scope:[write_score] from write_score::@2 + [363] *(points+1) = *buffer + [364] *(points+2) = *(buffer+1) + [365] *(points+3) = *(buffer+2) + to:write_score::@3 +write_score::@3: scope:[write_score] from write_score::@2 write_score::@4 + [366] chrout::petscii = yellow + [367] call chrout + to:write_score::@12 +write_score::@12: scope:[write_score] from write_score::@3 + [368] chrout::petscii = home + [369] call chrout + to:write_score::@13 +write_score::@13: scope:[write_score] from write_score::@12 + [370] *((char *) 211) = 4 + [371] m = 0 + to:write_score::@9 +write_score::@9: scope:[write_score] from write_score::@13 write_score::@14 + [372] if(m<4) goto write_score::@10 + to:write_score::@return +write_score::@return: scope:[write_score] from write_score::@9 + [373] return + to:@return +write_score::@10: scope:[write_score] from write_score::@9 + [374] chrout::petscii = points[m] + [375] call chrout + to:write_score::@14 +write_score::@14: scope:[write_score] from write_score::@10 + [376] m = ++ m + to:write_score::@9 +write_score::@6: scope:[write_score] from write_score::@5 + [377] points[m] = '0' + [378] m = ++ m + to:write_score::@5 + +void chrono_restart() +chrono_restart: scope:[chrono_restart] from main::@25 + asm { lda#0 ldy#0 ldx#0 jsr$ffdb } + to:chrono_restart::@return +chrono_restart::@return: scope:[chrono_restart] from chrono_restart + [380] return + to:@return + +void wait(char n) +wait: scope:[wait] from main::@36 main::@42 main::@86 main::@88 main::@89 + [381] z#53 = phi( main::@36/z#48, main::@42/z#100, main::@86/z#100, main::@88/z#100, main::@89/z#25 ) + [381] wait::n#6 = phi( main::@36/5, main::@42/$a, main::@86/$14, main::@88/$a, main::@89/5 ) + [382] m = 0 + to:wait::@1 +wait::@1: scope:[wait] from wait wait::@4 + [383] z#25 = phi( wait/z#53, wait::@4/z#23 ) + [384] if(m=utoa::digit_value#0) goto utoa::@5 + to:utoa::@4 +utoa::@4: scope:[utoa] from utoa::@6 utoa::@7 + [402] utoa::buffer#15 = phi( utoa::@7/utoa::buffer#10, utoa::@6/utoa::buffer#4 ) + [402] utoa::started#4 = phi( utoa::@7/utoa::started#2, utoa::@6/1 ) + [402] utoa::value#7 = phi( utoa::@7/utoa::value#3, utoa::@6/utoa::value#0 ) + [403] utoa::digit#1 = ++ utoa::digit#2 + to:utoa::@1 +utoa::@5: scope:[utoa] from utoa::@2 utoa::@7 + [404] utoa_append::buffer#0 = utoa::buffer#10 + [405] utoa_append::value#0 = utoa::value#3 + [406] utoa_append::sub#0 = utoa::digit_value#0 + [407] call utoa_append + [408] utoa_append::return#0 = utoa_append::value#2 + to:utoa::@6 +utoa::@6: scope:[utoa] from utoa::@5 + [409] utoa::value#0 = utoa_append::return#0 + [410] utoa::buffer#4 = ++ utoa::buffer#10 + to:utoa::@4 + +void read_chrono() +read_chrono: scope:[read_chrono] from main::@27 + asm { jsr$ffde stal stxm } + [412] read_chrono::$0 = m << 8 + [413] div16u8u::dividend#0 = read_chrono::$0 + l + [414] call div16u8u + [415] div16u8u::return#2 = div16u8u::return#0 + to:read_chrono::@2 +read_chrono::@2: scope:[read_chrono] from read_chrono + [416] *((char *)$1e15+c) = 7 + [417] *((char *) 7701) = $b9 + [418] if(div16u8u::return#2>=$a) goto read_chrono::@return + to:read_chrono::@1 +read_chrono::@1: scope:[read_chrono] from read_chrono::@2 + [419] read_chrono::$5 = $b9 - div16u8u::return#2 + [420] *((char *) 7701) = read_chrono::$5 + to:read_chrono::@return +read_chrono::@return: scope:[read_chrono] from read_chrono::@1 read_chrono::@2 + [421] return + to:@return + +void cputc(char c) +cputc: scope:[cputc] from cputs::@2 + [422] if(cputc::c#0==' +') goto cputc::@1 + to:cputc::@2 +cputc::@2: scope:[cputc] from cputc + [423] conio_line_text[conio_cursor_x] = cputc::c#0 + [424] conio_line_color[conio_cursor_x] = conio_textcolor + [425] conio_cursor_x = ++ conio_cursor_x + [426] if(conio_cursor_x!=$28) goto cputc::@return + to:cputc::@3 +cputc::@3: scope:[cputc] from cputc::@2 + [427] phi() + [428] call cputln + to:cputc::@return +cputc::@return: scope:[cputc] from cputc::@1 cputc::@2 cputc::@3 + [429] return + to:@return +cputc::@1: scope:[cputc] from cputc + [430] phi() + [431] call cputln + to:cputc::@return + +unsigned int utoa_append(char *buffer , unsigned int value , unsigned int sub) +utoa_append: scope:[utoa_append] from utoa::@5 + [432] phi() + to:utoa_append::@1 +utoa_append::@1: scope:[utoa_append] from utoa_append utoa_append::@2 + [433] utoa_append::digit#2 = phi( utoa_append/0, utoa_append::@2/utoa_append::digit#1 ) + [433] utoa_append::value#2 = phi( utoa_append/utoa_append::value#0, utoa_append::@2/utoa_append::value#1 ) + [434] if(utoa_append::value#2>=utoa_append::sub#0) goto utoa_append::@2 + to:utoa_append::@3 +utoa_append::@3: scope:[utoa_append] from utoa_append::@1 + [435] *utoa_append::buffer#0 = DIGITS[utoa_append::digit#2] + to:utoa_append::@return +utoa_append::@return: scope:[utoa_append] from utoa_append::@3 + [436] return + to:@return +utoa_append::@2: scope:[utoa_append] from utoa_append::@1 + [437] utoa_append::digit#1 = ++ utoa_append::digit#2 + [438] utoa_append::value#1 = utoa_append::value#2 - utoa_append::sub#0 + to:utoa_append::@1 + +unsigned int div16u8u(unsigned int dividend , char divisor) +div16u8u: scope:[div16u8u] from read_chrono + [439] divr8u::dividend#1 = byte1 div16u8u::dividend#0 + [440] call divr8u + [441] divr8u::return#2 = divr8u::return#0 + to:div16u8u::@1 +div16u8u::@1: scope:[div16u8u] from div16u8u + [442] div16u8u::quotient_hi#0 = divr8u::return#2 + [443] divr8u::dividend#2 = byte0 div16u8u::dividend#0 + [444] divr8u::rem#4 = divr8u::rem#11 + [445] call divr8u + [446] divr8u::return#3 = divr8u::return#0 + to:div16u8u::@2 +div16u8u::@2: scope:[div16u8u] from div16u8u::@1 + [447] div16u8u::quotient_lo#0 = divr8u::return#3 + [448] div16u8u::return#0 = div16u8u::quotient_hi#0 w= div16u8u::quotient_lo#0 + to:div16u8u::@return +div16u8u::@return: scope:[div16u8u] from div16u8u::@2 + [449] return + to:@return + +void cputln() +cputln: scope:[cputln] from cputc::@1 cputc::@3 + [450] conio_line_text = conio_line_text + $28 + [451] conio_line_color = conio_line_color + $28 + [452] conio_cursor_x = 0 + [453] conio_cursor_y = ++ conio_cursor_y + [454] call cscroll + to:cputln::@return +cputln::@return: scope:[cputln] from cputln + [455] return + to:@return + +char divr8u(char dividend , char divisor , char rem) +divr8u: scope:[divr8u] from div16u8u div16u8u::@1 + [456] divr8u::dividend#5 = phi( div16u8u/divr8u::dividend#1, div16u8u::@1/divr8u::dividend#2 ) + [456] divr8u::rem#10 = phi( div16u8u/0, div16u8u::@1/divr8u::rem#4 ) + to:divr8u::@1 +divr8u::@1: scope:[divr8u] from divr8u divr8u::@3 + [457] divr8u::i#2 = phi( divr8u/0, divr8u::@3/divr8u::i#1 ) + [457] divr8u::quotient#3 = phi( divr8u/0, divr8u::@3/divr8u::return#0 ) + [457] divr8u::dividend#3 = phi( divr8u/divr8u::dividend#5, divr8u::@3/divr8u::dividend#0 ) + [457] divr8u::rem#5 = phi( divr8u/divr8u::rem#10, divr8u::@3/divr8u::rem#11 ) + [458] divr8u::rem#0 = divr8u::rem#5 << 1 + [459] divr8u::$1 = divr8u::dividend#3 & $80 + [460] if(divr8u::$1==0) goto divr8u::@2 + to:divr8u::@4 +divr8u::@4: scope:[divr8u] from divr8u::@1 + [461] divr8u::rem#1 = divr8u::rem#0 | 1 + to:divr8u::@2 +divr8u::@2: scope:[divr8u] from divr8u::@1 divr8u::@4 + [462] divr8u::rem#6 = phi( divr8u::@1/divr8u::rem#0, divr8u::@4/divr8u::rem#1 ) + [463] divr8u::dividend#0 = divr8u::dividend#3 << 1 + [464] divr8u::quotient#1 = divr8u::quotient#3 << 1 + [465] if(divr8u::rem#6 0 + memset::$1 = ! memset::$0 + if(memset::$1) goto memset::@1 + to:memset::@2 +memset::@1: scope:[memset] from memset memset::@3 + memset::str#2 = phi( memset/memset::str#4, memset::@3/memset::str#5 ) + memset::return#0 = memset::str#2 + to:memset::@return +memset::@2: scope:[memset] from memset + memset::c#4 = phi( memset/memset::c#5 ) + memset::num#3 = phi( memset/memset::num#2 ) + memset::str#3 = phi( memset/memset::str#4 ) + memset::$4 = (char *)memset::str#3 + memset::end#0 = memset::$4 + memset::num#3 + memset::dst#0 = ((char *)) memset::str#3 + to:memset::@3 +memset::@3: scope:[memset] from memset::@2 memset::@4 + memset::c#3 = phi( memset::@2/memset::c#4, memset::@4/memset::c#2 ) + memset::str#5 = phi( memset::@2/memset::str#3, memset::@4/memset::str#6 ) + memset::end#1 = phi( memset::@2/memset::end#0, memset::@4/memset::end#2 ) + memset::dst#2 = phi( memset::@2/memset::dst#0, memset::@4/memset::dst#1 ) + memset::$3 = memset::dst#2 != memset::end#1 + if(memset::$3) goto memset::@4 + to:memset::@1 +memset::@4: scope:[memset] from memset::@3 + memset::str#6 = phi( memset::@3/memset::str#5 ) + memset::end#2 = phi( memset::@3/memset::end#1 ) + memset::dst#3 = phi( memset::@3/memset::dst#2 ) + memset::c#2 = phi( memset::@3/memset::c#3 ) + *memset::dst#3 = memset::c#2 + memset::dst#1 = ++ memset::dst#3 + to:memset::@3 +memset::@return: scope:[memset] from memset::@1 + memset::return#4 = phi( memset::@1/memset::return#0 ) + memset::return#1 = memset::return#4 + return + to:@return + +void utoa(unsigned int value , char *buffer , char radix) +utoa: scope:[utoa] from main::@48 write_score::@8 + utoa::buffer#22 = phi( main::@48/utoa::buffer#6, write_score::@8/utoa::buffer#5 ) + utoa::value#13 = phi( main::@48/utoa::value#2, write_score::@8/utoa::value#1 ) + utoa::radix#2 = phi( main::@48/utoa::radix#1, write_score::@8/utoa::radix#0 ) + utoa::max_digits#0 = 0 + utoa::digit_values#0 = (unsigned int *) 0 + utoa::$0 = utoa::radix#2 == DECIMAL + if(utoa::$0) goto utoa::@1 + to:utoa::@6 +utoa::@1: scope:[utoa] from utoa + utoa::buffer#18 = phi( utoa/utoa::buffer#22 ) + utoa::value#9 = phi( utoa/utoa::value#13 ) + utoa::max_digits#1 = 5 + utoa::digit_values#1 = RADIX_DECIMAL_VALUES + to:utoa::@5 +utoa::@6: scope:[utoa] from utoa + utoa::value#14 = phi( utoa/utoa::value#13 ) + utoa::buffer#17 = phi( utoa/utoa::buffer#22 ) + utoa::radix#3 = phi( utoa/utoa::radix#2 ) + utoa::$1 = utoa::radix#3 == HEXADECIMAL + if(utoa::$1) goto utoa::@2 + to:utoa::@7 +utoa::@2: scope:[utoa] from utoa::@6 + utoa::buffer#19 = phi( utoa::@6/utoa::buffer#17 ) + utoa::value#10 = phi( utoa::@6/utoa::value#14 ) + utoa::max_digits#2 = 4 + utoa::digit_values#2 = RADIX_HEXADECIMAL_VALUES + to:utoa::@5 +utoa::@7: scope:[utoa] from utoa::@6 + utoa::value#15 = phi( utoa::@6/utoa::value#14 ) + utoa::buffer#14 = phi( utoa::@6/utoa::buffer#17 ) + utoa::radix#4 = phi( utoa::@6/utoa::radix#3 ) + utoa::$2 = utoa::radix#4 == OCTAL + if(utoa::$2) goto utoa::@3 + to:utoa::@8 +utoa::@3: scope:[utoa] from utoa::@7 + utoa::buffer#20 = phi( utoa::@7/utoa::buffer#14 ) + utoa::value#11 = phi( utoa::@7/utoa::value#15 ) + utoa::max_digits#3 = 6 + utoa::digit_values#3 = RADIX_OCTAL_VALUES + to:utoa::@5 +utoa::@8: scope:[utoa] from utoa::@7 + utoa::value#16 = phi( utoa::@7/utoa::value#15 ) + utoa::buffer#11 = phi( utoa::@7/utoa::buffer#14 ) + utoa::radix#5 = phi( utoa::@7/utoa::radix#4 ) + utoa::$3 = utoa::radix#5 == BINARY + if(utoa::$3) goto utoa::@4 + to:utoa::@9 +utoa::@4: scope:[utoa] from utoa::@8 + utoa::buffer#21 = phi( utoa::@8/utoa::buffer#11 ) + utoa::value#12 = phi( utoa::@8/utoa::value#16 ) + utoa::max_digits#4 = $10 + utoa::digit_values#4 = RADIX_BINARY_VALUES + to:utoa::@5 +utoa::@9: scope:[utoa] from utoa::@8 + utoa::buffer#7 = phi( utoa::@8/utoa::buffer#11 ) + *utoa::buffer#7 = 'e' + utoa::buffer#0 = ++ utoa::buffer#7 + *utoa::buffer#0 = 'r' + utoa::buffer#1 = ++ utoa::buffer#0 + *utoa::buffer#1 = 'r' + utoa::buffer#2 = ++ utoa::buffer#1 + *utoa::buffer#2 = 0 + to:utoa::@return +utoa::@return: scope:[utoa] from utoa::@12 utoa::@9 + return + to:@return +utoa::@5: scope:[utoa] from utoa::@1 utoa::@2 utoa::@3 utoa::@4 + utoa::buffer#16 = phi( utoa::@1/utoa::buffer#18, utoa::@2/utoa::buffer#19, utoa::@3/utoa::buffer#20, utoa::@4/utoa::buffer#21 ) + utoa::value#8 = phi( utoa::@1/utoa::value#9, utoa::@2/utoa::value#10, utoa::@3/utoa::value#11, utoa::@4/utoa::value#12 ) + utoa::digit_values#8 = phi( utoa::@1/utoa::digit_values#1, utoa::@2/utoa::digit_values#2, utoa::@3/utoa::digit_values#3, utoa::@4/utoa::digit_values#4 ) + utoa::max_digits#7 = phi( utoa::@1/utoa::max_digits#1, utoa::@2/utoa::max_digits#2, utoa::@3/utoa::max_digits#3, utoa::@4/utoa::max_digits#4 ) + utoa::started#0 = 0 + utoa::digit#0 = 0 + to:utoa::@10 +utoa::@10: scope:[utoa] from utoa::@13 utoa::@5 + utoa::buffer#12 = phi( utoa::@13/utoa::buffer#15, utoa::@5/utoa::buffer#16 ) + utoa::started#3 = phi( utoa::@13/utoa::started#4, utoa::@5/utoa::started#0 ) + utoa::value#6 = phi( utoa::@13/utoa::value#7, utoa::@5/utoa::value#8 ) + utoa::digit_values#6 = phi( utoa::@13/utoa::digit_values#7, utoa::@5/utoa::digit_values#8 ) + utoa::digit#2 = phi( utoa::@13/utoa::digit#1, utoa::@5/utoa::digit#0 ) + utoa::max_digits#5 = phi( utoa::@13/utoa::max_digits#6, utoa::@5/utoa::max_digits#7 ) + utoa::$4 = utoa::max_digits#5 - 1 + utoa::$5 = utoa::digit#2 < utoa::$4 + if(utoa::$5) goto utoa::@11 + to:utoa::@12 +utoa::@11: scope:[utoa] from utoa::@10 + utoa::max_digits#8 = phi( utoa::@10/utoa::max_digits#5 ) + utoa::buffer#13 = phi( utoa::@10/utoa::buffer#12 ) + utoa::started#2 = phi( utoa::@10/utoa::started#3 ) + utoa::value#3 = phi( utoa::@10/utoa::value#6 ) + utoa::digit_values#5 = phi( utoa::@10/utoa::digit_values#6 ) + utoa::digit#3 = phi( utoa::@10/utoa::digit#2 ) + utoa::$10 = utoa::digit#3 * SIZEOF_UNSIGNED_INT + utoa::digit_value#0 = utoa::digit_values#5[utoa::$10] + utoa::$6 = utoa::value#3 >= utoa::digit_value#0 + utoa::$7 = utoa::started#2 || utoa::$6 + utoa::$8 = ! utoa::$7 + if(utoa::$8) goto utoa::@13 + to:utoa::@14 +utoa::@12: scope:[utoa] from utoa::@10 + utoa::buffer#8 = phi( utoa::@10/utoa::buffer#12 ) + utoa::value#4 = phi( utoa::@10/utoa::value#6 ) + utoa::$11 = (char)utoa::value#4 + *utoa::buffer#8 = DIGITS[utoa::$11] + utoa::buffer#3 = ++ utoa::buffer#8 + *utoa::buffer#3 = 0 + to:utoa::@return +utoa::@13: scope:[utoa] from utoa::@11 utoa::@15 + utoa::buffer#15 = phi( utoa::@11/utoa::buffer#13, utoa::@15/utoa::buffer#4 ) + utoa::started#4 = phi( utoa::@11/utoa::started#2, utoa::@15/utoa::started#1 ) + utoa::value#7 = phi( utoa::@11/utoa::value#3, utoa::@15/utoa::value#0 ) + utoa::digit_values#7 = phi( utoa::@11/utoa::digit_values#5, utoa::@15/utoa::digit_values#9 ) + utoa::max_digits#6 = phi( utoa::@11/utoa::max_digits#8, utoa::@15/utoa::max_digits#9 ) + utoa::digit#4 = phi( utoa::@11/utoa::digit#3, utoa::@15/utoa::digit#5 ) + utoa::digit#1 = ++ utoa::digit#4 + to:utoa::@10 +utoa::@14: scope:[utoa] from utoa::@11 + utoa::digit_values#10 = phi( utoa::@11/utoa::digit_values#5 ) + utoa::max_digits#10 = phi( utoa::@11/utoa::max_digits#8 ) + utoa::digit#6 = phi( utoa::@11/utoa::digit#3 ) + utoa::digit_value#1 = phi( utoa::@11/utoa::digit_value#0 ) + utoa::value#5 = phi( utoa::@11/utoa::value#3 ) + utoa::buffer#9 = phi( utoa::@11/utoa::buffer#13 ) + utoa_append::buffer#0 = utoa::buffer#9 + utoa_append::value#0 = utoa::value#5 + utoa_append::sub#0 = utoa::digit_value#1 + call utoa_append + utoa_append::return#0 = utoa_append::return#2 + to:utoa::@15 +utoa::@15: scope:[utoa] from utoa::@14 + utoa::digit_values#9 = phi( utoa::@14/utoa::digit_values#10 ) + utoa::max_digits#9 = phi( utoa::@14/utoa::max_digits#10 ) + utoa::digit#5 = phi( utoa::@14/utoa::digit#6 ) + utoa::buffer#10 = phi( utoa::@14/utoa::buffer#9 ) + utoa_append::return#3 = phi( utoa::@14/utoa_append::return#0 ) + utoa::$9 = utoa_append::return#3 + utoa::value#0 = utoa::$9 + utoa::buffer#4 = ++ utoa::buffer#10 + utoa::started#1 = 1 + to:utoa::@13 + +unsigned int utoa_append(char *buffer , unsigned int value , unsigned int sub) +utoa_append: scope:[utoa_append] from utoa::@14 + utoa_append::buffer#3 = phi( utoa::@14/utoa_append::buffer#0 ) + utoa_append::sub#3 = phi( utoa::@14/utoa_append::sub#0 ) + utoa_append::value#5 = phi( utoa::@14/utoa_append::value#0 ) + utoa_append::digit#0 = 0 + to:utoa_append::@1 +utoa_append::@1: scope:[utoa_append] from utoa_append utoa_append::@2 + utoa_append::buffer#2 = phi( utoa_append/utoa_append::buffer#3, utoa_append::@2/utoa_append::buffer#4 ) + utoa_append::digit#4 = phi( utoa_append/utoa_append::digit#0, utoa_append::@2/utoa_append::digit#1 ) + utoa_append::sub#1 = phi( utoa_append/utoa_append::sub#3, utoa_append::@2/utoa_append::sub#2 ) + utoa_append::value#2 = phi( utoa_append/utoa_append::value#5, utoa_append::@2/utoa_append::value#1 ) + utoa_append::$0 = utoa_append::value#2 >= utoa_append::sub#1 + if(utoa_append::$0) goto utoa_append::@2 + to:utoa_append::@3 +utoa_append::@2: scope:[utoa_append] from utoa_append::@1 + utoa_append::buffer#4 = phi( utoa_append::@1/utoa_append::buffer#2 ) + utoa_append::sub#2 = phi( utoa_append::@1/utoa_append::sub#1 ) + utoa_append::value#3 = phi( utoa_append::@1/utoa_append::value#2 ) + utoa_append::digit#2 = phi( utoa_append::@1/utoa_append::digit#4 ) + utoa_append::digit#1 = ++ utoa_append::digit#2 + utoa_append::value#1 = utoa_append::value#3 - utoa_append::sub#2 + to:utoa_append::@1 +utoa_append::@3: scope:[utoa_append] from utoa_append::@1 + utoa_append::value#4 = phi( utoa_append::@1/utoa_append::value#2 ) + utoa_append::buffer#1 = phi( utoa_append::@1/utoa_append::buffer#2 ) + utoa_append::digit#3 = phi( utoa_append::@1/utoa_append::digit#4 ) + *utoa_append::buffer#1 = DIGITS[utoa_append::digit#3] + utoa_append::return#1 = utoa_append::value#4 + to:utoa_append::@return +utoa_append::@return: scope:[utoa_append] from utoa_append::@3 + utoa_append::return#4 = phi( utoa_append::@3/utoa_append::return#1 ) + utoa_append::return#2 = utoa_append::return#4 + return + to:@return + +void gotoxy(char x , char y) +gotoxy: scope:[gotoxy] from clear_screen::@3 conio_c64_init::@1 cscroll::@2 + gotoxy::x#6 = phi( clear_screen::@3/gotoxy::x#3, conio_c64_init::@1/gotoxy::x#2, cscroll::@2/gotoxy::x#1 ) + gotoxy::y#4 = phi( clear_screen::@3/gotoxy::y#3, conio_c64_init::@1/gotoxy::y#2, cscroll::@2/gotoxy::y#1 ) + gotoxy::$0 = gotoxy::y#4 > $19 + gotoxy::$1 = ! gotoxy::$0 + if(gotoxy::$1) goto gotoxy::@1 + to:gotoxy::@3 +gotoxy::@1: scope:[gotoxy] from gotoxy gotoxy::@3 + gotoxy::y#6 = phi( gotoxy/gotoxy::y#4, gotoxy::@3/gotoxy::y#0 ) + gotoxy::x#4 = phi( gotoxy/gotoxy::x#6, gotoxy::@3/gotoxy::x#7 ) + gotoxy::$2 = gotoxy::x#4 >= $28 + gotoxy::$3 = ! gotoxy::$2 + if(gotoxy::$3) goto gotoxy::@2 + to:gotoxy::@4 +gotoxy::@3: scope:[gotoxy] from gotoxy + gotoxy::x#7 = phi( gotoxy/gotoxy::x#6 ) + gotoxy::y#0 = 0 + to:gotoxy::@1 +gotoxy::@2: scope:[gotoxy] from gotoxy::@1 gotoxy::@4 + gotoxy::y#5 = phi( gotoxy::@1/gotoxy::y#6, gotoxy::@4/gotoxy::y#7 ) + gotoxy::x#5 = phi( gotoxy::@1/gotoxy::x#4, gotoxy::@4/gotoxy::x#0 ) + conio_cursor_x = gotoxy::x#5 + conio_cursor_y = gotoxy::y#5 + gotoxy::$7 = (unsigned int)gotoxy::y#5 + gotoxy::line_offset#0 = gotoxy::$7 * $28 + gotoxy::$5 = DEFAULT_SCREEN + gotoxy::line_offset#0 + conio_line_text = gotoxy::$5 + gotoxy::$6 = COLORRAM + gotoxy::line_offset#0 + conio_line_color = gotoxy::$6 + to:gotoxy::@return +gotoxy::@4: scope:[gotoxy] from gotoxy::@1 + gotoxy::y#7 = phi( gotoxy::@1/gotoxy::y#6 ) + gotoxy::x#0 = 0 + to:gotoxy::@2 +gotoxy::@return: scope:[gotoxy] from gotoxy::@2 + return + to:@return + +void cputc(char c) +cputc: scope:[cputc] from cputs::@2 + cputc::c#1 = phi( cputs::@2/cputc::c#0 ) + cputc::$0 = cputc::c#1 == ' +' + if(cputc::$0) goto cputc::@1 + to:cputc::@2 +cputc::@1: scope:[cputc] from cputc + call cputln + to:cputc::@4 +cputc::@4: scope:[cputc] from cputc::@1 + to:cputc::@return +cputc::@2: scope:[cputc] from cputc + cputc::c#2 = phi( cputc/cputc::c#1 ) + conio_line_text[conio_cursor_x] = cputc::c#2 + conio_line_color[conio_cursor_x] = conio_textcolor + conio_cursor_x = ++ conio_cursor_x + cputc::$1 = conio_cursor_x == $28 + cputc::$2 = ! cputc::$1 + if(cputc::$2) goto cputc::@return + to:cputc::@3 +cputc::@3: scope:[cputc] from cputc::@2 + call cputln + to:cputc::@5 +cputc::@5: scope:[cputc] from cputc::@3 + to:cputc::@return +cputc::@return: scope:[cputc] from cputc::@2 cputc::@4 cputc::@5 + return + to:@return + +void cputln() +cputln: scope:[cputln] from cputc::@1 cputc::@3 + conio_line_text = conio_line_text + $28 + conio_line_color = conio_line_color + $28 + conio_cursor_x = 0 + conio_cursor_y = ++ conio_cursor_y + call cscroll + to:cputln::@1 +cputln::@1: scope:[cputln] from cputln + to:cputln::@return +cputln::@return: scope:[cputln] from cputln::@1 + return + to:@return + +void cputs(const char *s) +cputs: scope:[cputs] from main::@103 main::@105 main::@106 main::@108 main::@110 main::@112 main::@55 main::@57 main::@59 + cputs::s#11 = phi( main::@103/cputs::s#4, main::@105/cputs::s#5, main::@106/cputs::s#6, main::@108/cputs::s#7, main::@110/cputs::s#8, main::@112/cputs::s#9, main::@55/cputs::s#1, main::@57/cputs::s#2, main::@59/cputs::s#3 ) + cputs::c#0 = 0 + to:cputs::@1 +cputs::@1: scope:[cputs] from cputs cputs::@3 + cputs::s#10 = phi( cputs/cputs::s#11, cputs::@3/cputs::s#12 ) + cputs::c#1 = *cputs::s#10 + cputs::$0 = cputs::c#1 + cputs::s#0 = ++ cputs::s#10 + cputs::$2 = 0 != cputs::$0 + if(cputs::$2) goto cputs::@2 + to:cputs::@return +cputs::@2: scope:[cputs] from cputs::@1 + cputs::s#13 = phi( cputs::@1/cputs::s#0 ) + cputs::c#2 = phi( cputs::@1/cputs::c#1 ) + cputc::c#0 = cputs::c#2 + call cputc + to:cputs::@3 +cputs::@3: scope:[cputs] from cputs::@2 + cputs::s#12 = phi( cputs::@2/cputs::s#13 ) + to:cputs::@1 +cputs::@return: scope:[cputs] from cputs::@1 + return + to:@return + +char textcolor(char color) +textcolor: scope:[textcolor] from main::@102 main::@104 main::@107 main::@111 main::@54 main::@56 main::@58 + textcolor::color#7 = phi( main::@102/textcolor::color#3, main::@104/textcolor::color#4, main::@107/textcolor::color#5, main::@111/textcolor::color#6, main::@54/textcolor::color#0, main::@56/textcolor::color#1, main::@58/textcolor::color#2 ) + textcolor::old#0 = conio_textcolor + conio_textcolor = textcolor::color#7 + textcolor::return#0 = textcolor::old#0 + to:textcolor::@return +textcolor::@return: scope:[textcolor] from textcolor + textcolor::return#9 = phi( textcolor/textcolor::return#0 ) + textcolor::return#1 = textcolor::return#9 + return + to:@return + +void cscroll() +cscroll: scope:[cscroll] from cputln + cscroll::$0 = conio_cursor_y == $19 + cscroll::$1 = ! cscroll::$0 + if(cscroll::$1) goto cscroll::@return + to:cscroll::@1 +cscroll::@1: scope:[cscroll] from cscroll + cscroll::$7 = 0 != conio_scroll_enable + if(cscroll::$7) goto cscroll::@3 + to:cscroll::@2 +cscroll::@3: scope:[cscroll] from cscroll::@1 + memcpy::destination#0 = (void *)DEFAULT_SCREEN + memcpy::source#0 = (void *)DEFAULT_SCREEN+$28 + memcpy::num#0 = $19*$28-$28 + call memcpy + memcpy::return#2 = memcpy::return#1 + to:cscroll::@4 +cscroll::@4: scope:[cscroll] from cscroll::@3 + memcpy::destination#1 = (void *)COLORRAM + memcpy::source#1 = (void *)COLORRAM+$28 + memcpy::num#1 = $19*$28-$28 + call memcpy + memcpy::return#3 = memcpy::return#1 + to:cscroll::@5 +cscroll::@5: scope:[cscroll] from cscroll::@4 + memset::str#0 = (void *)DEFAULT_SCREEN+$19*$28-$28 + memset::c#0 = ' ' + memset::num#0 = $28 + call memset + memset::return#2 = memset::return#1 + to:cscroll::@6 +cscroll::@6: scope:[cscroll] from cscroll::@5 + memset::str#1 = (void *)COLORRAM+$19*$28-$28 + memset::c#1 = conio_textcolor + memset::num#1 = $28 + call memset + memset::return#3 = memset::return#1 + to:cscroll::@7 +cscroll::@7: scope:[cscroll] from cscroll::@6 + conio_line_text = conio_line_text - $28 + conio_line_color = conio_line_color - $28 + conio_cursor_y = -- conio_cursor_y + to:cscroll::@return +cscroll::@2: scope:[cscroll] from cscroll::@1 + gotoxy::x#1 = 0 + gotoxy::y#1 = 0 + call gotoxy + to:cscroll::@8 +cscroll::@8: scope:[cscroll] from cscroll::@2 + to:cscroll::@return +cscroll::@return: scope:[cscroll] from cscroll cscroll::@7 cscroll::@8 + return + to:@return + +void conio_c64_init() +conio_c64_init: scope:[conio_c64_init] from __start::__init1 + conio_c64_init::line#0 = *conio_c64_init::BASIC_CURSOR_LINE + conio_c64_init::$0 = conio_c64_init::line#0 >= $19 + conio_c64_init::$1 = ! conio_c64_init::$0 + if(conio_c64_init::$1) goto conio_c64_init::@1 + to:conio_c64_init::@2 +conio_c64_init::@1: scope:[conio_c64_init] from conio_c64_init conio_c64_init::@2 + conio_c64_init::line#2 = phi( conio_c64_init/conio_c64_init::line#0, conio_c64_init::@2/conio_c64_init::line#1 ) + gotoxy::x#2 = 0 + gotoxy::y#2 = conio_c64_init::line#2 + call gotoxy + to:conio_c64_init::@3 +conio_c64_init::@3: scope:[conio_c64_init] from conio_c64_init::@1 + to:conio_c64_init::@return +conio_c64_init::@2: scope:[conio_c64_init] from conio_c64_init + conio_c64_init::line#1 = $19-1 + to:conio_c64_init::@1 +conio_c64_init::@return: scope:[conio_c64_init] from conio_c64_init::@3 + return + to:@return + +char divr8u(char dividend , char divisor , char rem) +divr8u: scope:[divr8u] from div16u8u div16u8u::@1 + divr8u::divisor#6 = phi( div16u8u/divr8u::divisor#0, div16u8u::@1/divr8u::divisor#1 ) + divr8u::dividend#5 = phi( div16u8u/divr8u::dividend#1, div16u8u::@1/divr8u::dividend#2 ) + divr8u::rem#10 = phi( div16u8u/divr8u::rem#3, div16u8u::@1/divr8u::rem#4 ) + divr8u::quotient#0 = 0 + divr8u::i#0 = 0 + to:divr8u::@1 +divr8u::@1: scope:[divr8u] from divr8u divr8u::@3 + divr8u::i#5 = phi( divr8u/divr8u::i#0, divr8u::@3/divr8u::i#1 ) + divr8u::divisor#4 = phi( divr8u/divr8u::divisor#6, divr8u::@3/divr8u::divisor#7 ) + divr8u::quotient#6 = phi( divr8u/divr8u::quotient#0, divr8u::@3/divr8u::quotient#8 ) + divr8u::dividend#3 = phi( divr8u/divr8u::dividend#5, divr8u::@3/divr8u::dividend#6 ) + divr8u::rem#5 = phi( divr8u/divr8u::rem#10, divr8u::@3/divr8u::rem#11 ) + divr8u::$0 = divr8u::rem#5 << 1 + divr8u::rem#0 = divr8u::$0 + divr8u::$1 = divr8u::dividend#3 & $80 + divr8u::$2 = divr8u::$1 != 0 + divr8u::$3 = ! divr8u::$2 + if(divr8u::$3) goto divr8u::@2 + to:divr8u::@4 +divr8u::@2: scope:[divr8u] from divr8u::@1 divr8u::@4 + divr8u::i#3 = phi( divr8u::@1/divr8u::i#5, divr8u::@4/divr8u::i#6 ) + divr8u::divisor#2 = phi( divr8u::@1/divr8u::divisor#4, divr8u::@4/divr8u::divisor#5 ) + divr8u::rem#6 = phi( divr8u::@1/divr8u::rem#0, divr8u::@4/divr8u::rem#1 ) + divr8u::quotient#3 = phi( divr8u::@1/divr8u::quotient#6, divr8u::@4/divr8u::quotient#7 ) + divr8u::dividend#4 = phi( divr8u::@1/divr8u::dividend#3, divr8u::@4/divr8u::dividend#7 ) + divr8u::$5 = divr8u::dividend#4 << 1 + divr8u::dividend#0 = divr8u::$5 + divr8u::$6 = divr8u::quotient#3 << 1 + divr8u::quotient#1 = divr8u::$6 + divr8u::$7 = divr8u::rem#6 >= divr8u::divisor#2 + divr8u::$8 = ! divr8u::$7 + if(divr8u::$8) goto divr8u::@3 + to:divr8u::@5 +divr8u::@4: scope:[divr8u] from divr8u::@1 + divr8u::i#6 = phi( divr8u::@1/divr8u::i#5 ) + divr8u::divisor#5 = phi( divr8u::@1/divr8u::divisor#4 ) + divr8u::quotient#7 = phi( divr8u::@1/divr8u::quotient#6 ) + divr8u::dividend#7 = phi( divr8u::@1/divr8u::dividend#3 ) + divr8u::rem#7 = phi( divr8u::@1/divr8u::rem#0 ) + divr8u::$4 = divr8u::rem#7 | 1 + divr8u::rem#1 = divr8u::$4 + to:divr8u::@2 +divr8u::@3: scope:[divr8u] from divr8u::@2 divr8u::@5 + divr8u::divisor#7 = phi( divr8u::@2/divr8u::divisor#2, divr8u::@5/divr8u::divisor#3 ) + divr8u::quotient#8 = phi( divr8u::@2/divr8u::quotient#1, divr8u::@5/divr8u::quotient#2 ) + divr8u::dividend#6 = phi( divr8u::@2/divr8u::dividend#0, divr8u::@5/divr8u::dividend#8 ) + divr8u::rem#11 = phi( divr8u::@2/divr8u::rem#6, divr8u::@5/divr8u::rem#2 ) + divr8u::i#2 = phi( divr8u::@2/divr8u::i#3, divr8u::@5/divr8u::i#4 ) + divr8u::i#1 = divr8u::i#2 + rangenext(0,7) + divr8u::$10 = divr8u::i#1 != rangelast(0,7) + if(divr8u::$10) goto divr8u::@1 + to:divr8u::@6 +divr8u::@5: scope:[divr8u] from divr8u::@2 + divr8u::dividend#8 = phi( divr8u::@2/divr8u::dividend#0 ) + divr8u::i#4 = phi( divr8u::@2/divr8u::i#3 ) + divr8u::divisor#3 = phi( divr8u::@2/divr8u::divisor#2 ) + divr8u::rem#8 = phi( divr8u::@2/divr8u::rem#6 ) + divr8u::quotient#4 = phi( divr8u::@2/divr8u::quotient#1 ) + divr8u::quotient#2 = ++ divr8u::quotient#4 + divr8u::$9 = divr8u::rem#8 - divr8u::divisor#3 + divr8u::rem#2 = divr8u::$9 + to:divr8u::@3 +divr8u::@6: scope:[divr8u] from divr8u::@3 + divr8u::quotient#5 = phi( divr8u::@3/divr8u::quotient#8 ) + divr8u::rem#9 = phi( divr8u::@3/divr8u::rem#11 ) + rem8u#0 = divr8u::rem#9 + divr8u::return#0 = divr8u::quotient#5 + to:divr8u::@return +divr8u::@return: scope:[divr8u] from divr8u::@6 + rem8u#12 = phi( divr8u::@6/rem8u#0 ) + divr8u::return#4 = phi( divr8u::@6/divr8u::return#0 ) + divr8u::return#1 = divr8u::return#4 + rem8u#1 = rem8u#12 + return + to:@return + +unsigned int div16u8u(unsigned int dividend , char divisor) +div16u8u: scope:[div16u8u] from read_chrono + rem8u#22 = phi( read_chrono/rem8u#23 ) + div16u8u::divisor#1 = phi( read_chrono/div16u8u::divisor#0 ) + div16u8u::dividend#1 = phi( read_chrono/div16u8u::dividend#0 ) + div16u8u::$0 = byte1 div16u8u::dividend#1 + divr8u::dividend#1 = div16u8u::$0 + divr8u::divisor#0 = div16u8u::divisor#1 + divr8u::rem#3 = 0 + call divr8u + divr8u::return#2 = divr8u::return#1 + to:div16u8u::@1 +div16u8u::@1: scope:[div16u8u] from div16u8u + div16u8u::divisor#2 = phi( div16u8u/div16u8u::divisor#1 ) + div16u8u::dividend#2 = phi( div16u8u/div16u8u::dividend#1 ) + rem8u#13 = phi( div16u8u/rem8u#1 ) + divr8u::return#5 = phi( div16u8u/divr8u::return#2 ) + div16u8u::quotient_hi#0 = divr8u::return#5 + rem8u#2 = rem8u#13 + div16u8u::$2 = byte0 div16u8u::dividend#2 + divr8u::dividend#2 = div16u8u::$2 + divr8u::divisor#1 = div16u8u::divisor#2 + divr8u::rem#4 = rem8u#2 + call divr8u + divr8u::return#3 = divr8u::return#1 + to:div16u8u::@2 +div16u8u::@2: scope:[div16u8u] from div16u8u::@1 + div16u8u::quotient_hi#1 = phi( div16u8u::@1/div16u8u::quotient_hi#0 ) + rem8u#14 = phi( div16u8u::@1/rem8u#1 ) + divr8u::return#6 = phi( div16u8u::@1/divr8u::return#3 ) + div16u8u::quotient_lo#0 = divr8u::return#6 + rem8u#3 = rem8u#14 + div16u8u::quotient#0 = div16u8u::quotient_hi#1 w= div16u8u::quotient_lo#0 + div16u8u::return#0 = div16u8u::quotient#0 + to:div16u8u::@return +div16u8u::@return: scope:[div16u8u] from div16u8u::@2 + rem8u#15 = phi( div16u8u::@2/rem8u#3 ) + div16u8u::return#3 = phi( div16u8u::@2/div16u8u::return#0 ) + div16u8u::return#1 = div16u8u::return#3 + rem8u#4 = rem8u#15 + return + to:@return + +void clear_screen(char n , char m) +clear_screen: scope:[clear_screen] from main::@3 main::@45 main::@5 + clear_screen::n#5 = phi( main::@3/clear_screen::n#0, main::@45/clear_screen::n#2, main::@5/clear_screen::n#1 ) + clear_screen::m#5 = phi( main::@3/clear_screen::m#0, main::@45/clear_screen::m#2, main::@5/clear_screen::m#1 ) + z#0 = 0 + to:clear_screen::@1 +clear_screen::@1: scope:[clear_screen] from clear_screen clear_screen::@2 + clear_screen::n#4 = phi( clear_screen/clear_screen::n#5, clear_screen::@2/clear_screen::n#3 ) + clear_screen::m#4 = phi( clear_screen/clear_screen::m#5, clear_screen::@2/clear_screen::m#3 ) + z#20 = phi( clear_screen/z#0, clear_screen::@2/z#1 ) + clear_screen::$2 = z#20 < $1fa + if(clear_screen::$2) goto clear_screen::@2 + to:clear_screen::@3 +clear_screen::@2: scope:[clear_screen] from clear_screen::@1 + clear_screen::n#3 = phi( clear_screen::@1/clear_screen::n#4 ) + clear_screen::m#3 = phi( clear_screen::@1/clear_screen::m#4 ) + z#21 = phi( clear_screen::@1/z#20 ) + clear_screen::$3 = $1e00 + z#21 + clear_screen::$4 = clear_screen::$3 + c + *((char *)clear_screen::$4) = clear_screen::m#3 + clear_screen::$5 = $1e00 + z#21 + *((char *)clear_screen::$5) = clear_screen::n#3 + z#1 = ++ z#21 + to:clear_screen::@1 +clear_screen::@3: scope:[clear_screen] from clear_screen::@1 + z#65 = phi( clear_screen::@1/z#20 ) + gotoxy::x#3 = 0 + gotoxy::y#3 = 0 + call gotoxy + to:clear_screen::@4 +clear_screen::@4: scope:[clear_screen] from clear_screen::@3 + z#52 = phi( clear_screen::@3/z#65 ) + chrout::petscii = home + call chrout + to:clear_screen::@5 +clear_screen::@5: scope:[clear_screen] from clear_screen::@4 + z#39 = phi( clear_screen::@4/z#52 ) + to:clear_screen::@return +clear_screen::@return: scope:[clear_screen] from clear_screen::@5 + z#22 = phi( clear_screen::@5/z#39 ) + z#2 = z#22 + return + to:@return + +void random(char k , char n) +random: scope:[random] from main::@13 main::@25 main::@90 + random::n#4 = phi( main::@13/random::n#0, main::@25/random::n#1, main::@90/random::n#2 ) + random::k#4 = phi( main::@13/random::k#0, main::@25/random::k#1, main::@90/random::k#2 ) + to:random::@1 +random::@1: scope:[random] from random random::@1 + random::n#3 = phi( random/random::n#4, random::@1/random::n#3 ) + random::k#3 = phi( random/random::k#4, random::@1/random::k#3 ) + m = *((char *)$9114) + random::$0 = m < random::k#3 + random::$1 = m > random::n#3 + random::$2 = random::$0 || random::$1 + if(random::$2) goto random::@1 + to:random::@return +random::@return: scope:[random] from random::@1 + return + to:@return + +void chrout(volatile char petscii) +chrout: scope:[chrout] from clear_screen::@4 main main::@10 main::@101 main::@11 main::@12 main::@16 main::@17 main::@19 main::@22 main::@23 main::@24 main::@47 main::@52 main::@61 main::@62 main::@63 main::@66 main::@7 main::@70 main::@71 main::@72 main::@73 main::@74 main::@8 main::@80 main::@81 main::@84 main::@85 main::@88 write_score::@11 write_score::@13 write_score::@3 + asm { ldapetscii jsr$ffd2 } + to:chrout::@return +chrout::@return: scope:[chrout] from chrout + return + to:@return + +void write_score() +write_score: scope:[write_score] from main::@20 main::@29 main::@35 + score#13 = phi( main::@20/score#29, main::@29/score#4, main::@35/score#6 ) + write_score::$0 = score#13 > $fde8 + write_score::$1 = ! write_score::$0 + if(write_score::$1) goto write_score::@1 + to:write_score::@4 +write_score::@1: scope:[write_score] from write_score write_score::@4 + score#38 = phi( write_score/score#13, write_score::@4/score#0 ) + m = 0 + to:write_score::@6 +write_score::@4: scope:[write_score] from write_score + score#0 = 0 + to:write_score::@1 +write_score::@6: scope:[write_score] from write_score::@1 write_score::@7 + score#30 = phi( write_score::@1/score#38, write_score::@7/score#39 ) + write_score::$9 = m < 4 + if(write_score::$9) goto write_score::@7 + to:write_score::@8 +write_score::@7: scope:[write_score] from write_score::@6 + score#39 = phi( write_score::@6/score#30 ) + points[m] = '0' + m = ++ m + to:write_score::@6 +write_score::@8: scope:[write_score] from write_score::@6 + score#14 = phi( write_score::@6/score#30 ) + utoa::value#1 = score#14 + utoa::buffer#5 = buffer + utoa::radix#0 = $a + call utoa + to:write_score::@12 +write_score::@12: scope:[write_score] from write_score::@8 + score#15 = phi( write_score::@8/score#14 ) + write_score::$3 = score#15 > 9 + write_score::$4 = ! write_score::$3 + if(write_score::$4) goto write_score::@2 + to:write_score::@9 +write_score::@2: scope:[write_score] from write_score::@12 write_score::@9 + score#16 = phi( write_score::@12/score#15, write_score::@9/score#31 ) + write_score::$5 = score#16 > $63 + write_score::$6 = ! write_score::$5 + if(write_score::$6) goto write_score::@3 + to:write_score::@5 +write_score::@9: scope:[write_score] from write_score::@12 + score#31 = phi( write_score::@12/score#15 ) + points[2] = buffer[0] + points[3] = buffer[1] + to:write_score::@2 +write_score::@3: scope:[write_score] from write_score::@2 write_score::@5 + score#59 = phi( write_score::@2/score#16, write_score::@5/score#68 ) + chrout::petscii = yellow + call chrout + to:write_score::@13 +write_score::@13: scope:[write_score] from write_score::@3 + score#49 = phi( write_score::@3/score#59 ) + chrout::petscii = home + call chrout + to:write_score::@14 +write_score::@14: scope:[write_score] from write_score::@13 + score#40 = phi( write_score::@13/score#49 ) + *((char *)$d3) = 4 + m = 0 + to:write_score::@10 +write_score::@5: scope:[write_score] from write_score::@2 + score#68 = phi( write_score::@2/score#16 ) + points[1] = buffer[0] + points[2] = buffer[1] + points[3] = buffer[2] + to:write_score::@3 +write_score::@10: scope:[write_score] from write_score::@14 write_score::@15 + score#32 = phi( write_score::@14/score#40, write_score::@15/score#41 ) + write_score::$10 = m < 4 + if(write_score::$10) goto write_score::@11 + to:write_score::@return +write_score::@11: scope:[write_score] from write_score::@10 + score#50 = phi( write_score::@10/score#32 ) + chrout::petscii = points[m] + call chrout + to:write_score::@15 +write_score::@15: scope:[write_score] from write_score::@11 + score#41 = phi( write_score::@11/score#50 ) + m = ++ m + to:write_score::@10 +write_score::@return: scope:[write_score] from write_score::@10 + score#17 = phi( write_score::@10/score#32 ) + score#1 = score#17 + return + to:@return + +void wait(char n) +wait: scope:[wait] from main::@37 main::@43 main::@94 main::@96 main::@99 + z#53 = phi( main::@37/z#48, main::@43/z#47, main::@94/z#45, main::@96/z#46, main::@99/z#13 ) + wait::n#6 = phi( main::@37/wait::n#3, main::@43/wait::n#2, main::@94/wait::n#0, main::@96/wait::n#1, main::@99/wait::n#4 ) + m = 0 + to:wait::@1 +wait::@1: scope:[wait] from wait wait::@5 + z#40 = phi( wait/z#53, wait::@5/z#54 ) + wait::n#5 = phi( wait/wait::n#6, wait::@5/wait::n#7 ) + wait::$0 = m < wait::n#5 + if(wait::$0) goto wait::@2 + to:wait::@return +wait::@2: scope:[wait] from wait::@1 + wait::n#9 = phi( wait::@1/wait::n#5 ) + z#3 = 0 + to:wait::@3 +wait::@3: scope:[wait] from wait::@2 wait::@4 + wait::n#8 = phi( wait::@2/wait::n#9, wait::@4/wait::n#10 ) + z#23 = phi( wait::@2/z#3, wait::@4/z#4 ) + wait::$1 = z#23 < $21c + if(wait::$1) goto wait::@4 + to:wait::@5 +wait::@4: scope:[wait] from wait::@3 + wait::n#10 = phi( wait::@3/wait::n#8 ) + z#24 = phi( wait::@3/z#23 ) + z#4 = ++ z#24 + to:wait::@3 +wait::@5: scope:[wait] from wait::@3 + z#54 = phi( wait::@3/z#23 ) + wait::n#7 = phi( wait::@3/wait::n#8 ) + m = ++ m + to:wait::@1 +wait::@return: scope:[wait] from wait::@1 + z#25 = phi( wait::@1/z#40 ) + z#5 = z#25 + return + to:@return + +void chrono_restart() +chrono_restart: scope:[chrono_restart] from main::@26 + asm { lda#0 ldy#0 ldx#0 jsr$ffdb } + to:chrono_restart::@return +chrono_restart::@return: scope:[chrono_restart] from chrono_restart + return + to:@return + +void read_chrono() +read_chrono: scope:[read_chrono] from main::@28 + rem8u#23 = phi( main::@28/rem8u#25 ) + asm { jsr$ffde stal stxm } + read_chrono::$0 = m * $100 + read_chrono::$1 = read_chrono::$0 + l + div16u8u::dividend#0 = read_chrono::$1 + div16u8u::divisor#0 = $3c + call div16u8u + div16u8u::return#2 = div16u8u::return#1 + to:read_chrono::@2 +read_chrono::@2: scope:[read_chrono] from read_chrono + rem8u#16 = phi( read_chrono/rem8u#4 ) + div16u8u::return#4 = phi( read_chrono/div16u8u::return#2 ) + read_chrono::$2 = div16u8u::return#4 + rem8u#5 = rem8u#16 + time#0 = read_chrono::$2 + *((char *)$1e15+c) = 7 + *((char *)$1e15) = $b9 + read_chrono::$3 = time#0 < $a + read_chrono::$4 = ! read_chrono::$3 + if(read_chrono::$4) goto read_chrono::@return + to:read_chrono::@1 +read_chrono::@1: scope:[read_chrono] from read_chrono::@2 + rem8u#24 = phi( read_chrono::@2/rem8u#5 ) + time#9 = phi( read_chrono::@2/time#0 ) + read_chrono::$5 = $b9 - time#9 + *((char *)$1e15) = read_chrono::$5 + to:read_chrono::@return +read_chrono::@return: scope:[read_chrono] from read_chrono::@1 read_chrono::@2 + time#10 = phi( read_chrono::@1/time#9, read_chrono::@2/time#0 ) + rem8u#17 = phi( read_chrono::@1/rem8u#24, read_chrono::@2/rem8u#5 ) + rem8u#6 = rem8u#17 + time#1 = time#10 + return + to:@return + +void main() +main: scope:[main] from __start::@1 + n#121 = phi( __start::@1/n#16 ) + hiscore#122 = phi( __start::@1/hiscore#12 ) + y#126 = phi( __start::@1/y#25 ) + rem8u#139 = phi( __start::@1/rem8u#27 ) + z#82 = phi( __start::@1/z#51 ) + *((char *)$900f) = 8 + chrout::petscii = lock + call chrout + to:main::@52 +main::@52: scope:[main] from main + n#120 = phi( main/n#121 ) + hiscore#121 = phi( main/hiscore#122 ) + y#125 = phi( main/y#126 ) + rem8u#138 = phi( main/rem8u#139 ) + z#75 = phi( main/z#82 ) + chrout::petscii = lower + call chrout + to:main::@53 +main::@53: scope:[main] from main::@52 + n#119 = phi( main::@52/n#120 ) + hiscore#120 = phi( main::@52/hiscore#121 ) + y#124 = phi( main::@52/y#125 ) + rem8u#137 = phi( main::@52/rem8u#138 ) + z#67 = phi( main::@52/z#75 ) + m = 0 + to:main::@1 +main::@1: scope:[main] from main::@2 main::@53 + n#117 = phi( main::@2/n#118, main::@53/n#119 ) + hiscore#118 = phi( main::@2/hiscore#119, main::@53/hiscore#120 ) + y#122 = phi( main::@2/y#123, main::@53/y#124 ) + rem8u#135 = phi( main::@2/rem8u#136, main::@53/rem8u#137 ) + z#55 = phi( main::@2/z#66, main::@53/z#67 ) + main::$2 = m < $28 + if(main::$2) goto main::@2 + to:main::@3 +main::@2: scope:[main] from main::@1 + n#118 = phi( main::@1/n#117 ) + hiscore#119 = phi( main::@1/hiscore#118 ) + y#123 = phi( main::@1/y#122 ) + rem8u#136 = phi( main::@1/rem8u#135 ) + z#66 = phi( main::@1/z#55 ) + main::$3 = $1c00 + m + *((char *)main::$3) = duck_udg[m] + m = ++ m + to:main::@1 +main::@3: scope:[main] from main::@1 main::@50 + n#116 = phi( main::@1/n#117, main::@50/n#17 ) + hiscore#117 = phi( main::@1/hiscore#118, main::@50/hiscore#14 ) + y#121 = phi( main::@1/y#122, main::@50/y#29 ) + rem8u#134 = phi( main::@1/rem8u#135, main::@50/rem8u#29 ) + z#41 = phi( main::@1/z#55, main::@50/z#56 ) + clear_screen::n#0 = $20 + clear_screen::m#0 = 0 + call clear_screen + to:main::@54 +main::@54: scope:[main] from main::@3 + n#115 = phi( main::@3/n#116 ) + hiscore#116 = phi( main::@3/hiscore#117 ) + y#120 = phi( main::@3/y#121 ) + rem8u#133 = phi( main::@3/rem8u#134 ) + z#26 = phi( main::@3/z#2 ) + z#6 = z#26 + textcolor::color#0 = 7 + call textcolor + textcolor::return#2 = textcolor::return#1 + to:main::@55 +main::@55: scope:[main] from main::@54 + n#114 = phi( main::@54/n#115 ) + hiscore#115 = phi( main::@54/hiscore#116 ) + y#119 = phi( main::@54/y#120 ) + rem8u#132 = phi( main::@54/rem8u#133 ) + z#98 = phi( main::@54/z#6 ) + cputs::s#1 = intro + call cputs + to:main::@56 +main::@56: scope:[main] from main::@55 + n#113 = phi( main::@55/n#114 ) + hiscore#114 = phi( main::@55/hiscore#115 ) + y#118 = phi( main::@55/y#119 ) + rem8u#131 = phi( main::@55/rem8u#132 ) + z#93 = phi( main::@55/z#98 ) + textcolor::color#1 = 1 + call textcolor + textcolor::return#3 = textcolor::return#1 + to:main::@57 +main::@57: scope:[main] from main::@56 + n#112 = phi( main::@56/n#113 ) + hiscore#113 = phi( main::@56/hiscore#114 ) + y#117 = phi( main::@56/y#118 ) + rem8u#130 = phi( main::@56/rem8u#131 ) + z#88 = phi( main::@56/z#93 ) + cputs::s#2 = levels + call cputs + to:main::@58 +main::@58: scope:[main] from main::@57 + n#111 = phi( main::@57/n#112 ) + hiscore#112 = phi( main::@57/hiscore#113 ) + y#116 = phi( main::@57/y#117 ) + rem8u#129 = phi( main::@57/rem8u#130 ) + z#83 = phi( main::@57/z#88 ) + textcolor::color#2 = 2 + call textcolor + textcolor::return#4 = textcolor::return#1 + to:main::@59 +main::@59: scope:[main] from main::@58 + n#110 = phi( main::@58/n#111 ) + hiscore#111 = phi( main::@58/hiscore#112 ) + y#115 = phi( main::@58/y#116 ) + rem8u#128 = phi( main::@58/rem8u#129 ) + z#76 = phi( main::@58/z#83 ) + cputs::s#3 = foot + call cputs + to:main::@60 +main::@60: scope:[main] from main::@59 + n#109 = phi( main::@59/n#110 ) + hiscore#110 = phi( main::@59/hiscore#111 ) + y#114 = phi( main::@59/y#115 ) + rem8u#127 = phi( main::@59/rem8u#128 ) + z#68 = phi( main::@59/z#76 ) + to:main::@4 +main::@4: scope:[main] from main::@4 main::@60 + n#108 = phi( main::@4/n#108, main::@60/n#109 ) + hiscore#109 = phi( main::@4/hiscore#109, main::@60/hiscore#110 ) + y#113 = phi( main::@4/y#113, main::@60/y#114 ) + rem8u#126 = phi( main::@4/rem8u#126, main::@60/rem8u#127 ) + z#57 = phi( main::@4/z#57, main::@60/z#68 ) + l = *((char *)$c5) + l = ++ l + main::$11 = l > 5 + if(main::$11) goto main::@4 + to:main::@5 +main::@5: scope:[main] from main::@4 + n#107 = phi( main::@4/n#108 ) + hiscore#106 = phi( main::@4/hiscore#109 ) + y#110 = phi( main::@4/y#113 ) + rem8u#123 = phi( main::@4/rem8u#126 ) + z#42 = phi( main::@4/z#57 ) + clear_screen::n#1 = 4 + clear_screen::m#1 = 0 + call clear_screen + to:main::@61 +main::@61: scope:[main] from main::@5 + n#106 = phi( main::@5/n#107 ) + hiscore#103 = phi( main::@5/hiscore#106 ) + y#107 = phi( main::@5/y#110 ) + rem8u#120 = phi( main::@5/rem8u#123 ) + z#27 = phi( main::@5/z#2 ) + z#7 = z#27 + *((char *)$9005) = $ff + chrout::petscii = reverse_on + call chrout + to:main::@62 +main::@62: scope:[main] from main::@61 + n#105 = phi( main::@61/n#106 ) + hiscore#101 = phi( main::@61/hiscore#103 ) + y#105 = phi( main::@61/y#107 ) + rem8u#118 = phi( main::@61/rem8u#120 ) + chrout::petscii = red + call chrout + to:main::@63 +main::@63: scope:[main] from main::@62 + n#103 = phi( main::@62/n#105 ) + hiscore#99 = phi( main::@62/hiscore#101 ) + y#103 = phi( main::@62/y#105 ) + rem8u#116 = phi( main::@62/rem8u#118 ) + chrout::petscii = down + call chrout + to:main::@64 +main::@64: scope:[main] from main::@63 + n#100 = phi( main::@63/n#103 ) + hiscore#96 = phi( main::@63/hiscore#99 ) + y#100 = phi( main::@63/y#103 ) + rem8u#113 = phi( main::@63/rem8u#116 ) + k#0 = 1 + to:main::@6 +main::@6: scope:[main] from main::@64 main::@69 + n#97 = phi( main::@64/n#100, main::@69/n#101 ) + hiscore#93 = phi( main::@64/hiscore#96, main::@69/hiscore#97 ) + y#97 = phi( main::@64/y#100, main::@69/y#101 ) + rem8u#110 = phi( main::@64/rem8u#113, main::@69/rem8u#114 ) + k#6 = phi( main::@64/k#0, main::@69/k#1 ) + main::$16 = k#6 < $16 + if(main::$16) goto main::@7 + to:main::@8 +main::@7: scope:[main] from main::@6 + hiscore#107 = phi( main::@6/hiscore#93 ) + y#111 = phi( main::@6/y#97 ) + rem8u#124 = phi( main::@6/rem8u#110 ) + k#20 = phi( main::@6/k#6 ) + chrout::petscii = brick + call chrout + to:main::@65 +main::@65: scope:[main] from main::@7 + hiscore#104 = phi( main::@7/hiscore#107 ) + y#108 = phi( main::@7/y#111 ) + rem8u#121 = phi( main::@7/rem8u#124 ) + k#17 = phi( main::@7/k#20 ) + n#0 = 2 + to:main::@9 +main::@8: scope:[main] from main::@6 + n#95 = phi( main::@6/n#97 ) + k#101 = phi( main::@6/k#6 ) + hiscore#91 = phi( main::@6/hiscore#93 ) + y#95 = phi( main::@6/y#97 ) + rem8u#108 = phi( main::@6/rem8u#110 ) + chrout::petscii = brick + call chrout + to:main::@66 +main::@66: scope:[main] from main::@8 + n#92 = phi( main::@8/n#95 ) + k#98 = phi( main::@8/k#101 ) + hiscore#88 = phi( main::@8/hiscore#91 ) + y#92 = phi( main::@8/y#95 ) + rem8u#105 = phi( main::@8/rem8u#108 ) + *((char *)$1ff9) = brick + *((char *)$1ff9+c) = 2 + chrout::petscii = home + call chrout + to:main::@67 +main::@67: scope:[main] from main::@66 + n#89 = phi( main::@66/n#92 ) + k#95 = phi( main::@66/k#98 ) + hiscore#85 = phi( main::@66/hiscore#88 ) + y#89 = phi( main::@66/y#92 ) + rem8u#102 = phi( main::@66/rem8u#105 ) + z#8 = 1 + main::$23 = l > 1 + main::$24 = ! main::$23 + if(main::$24) goto main::@12 + to:main::@13 +main::@9: scope:[main] from main::@65 main::@68 + hiscore#102 = phi( main::@65/hiscore#104, main::@68/hiscore#105 ) + y#106 = phi( main::@65/y#108, main::@68/y#109 ) + rem8u#119 = phi( main::@65/rem8u#121, main::@68/rem8u#122 ) + k#14 = phi( main::@65/k#17, main::@68/k#18 ) + n#7 = phi( main::@65/n#0, main::@68/n#1 ) + main::$18 = n#7 < $16 + if(main::$18) goto main::@10 + to:main::@11 +main::@10: scope:[main] from main::@9 + hiscore#108 = phi( main::@9/hiscore#102 ) + y#112 = phi( main::@9/y#106 ) + rem8u#125 = phi( main::@9/rem8u#119 ) + k#21 = phi( main::@9/k#14 ) + n#13 = phi( main::@9/n#7 ) + chrout::petscii = right + call chrout + to:main::@68 +main::@68: scope:[main] from main::@10 + hiscore#105 = phi( main::@10/hiscore#108 ) + y#109 = phi( main::@10/y#112 ) + rem8u#122 = phi( main::@10/rem8u#125 ) + k#18 = phi( main::@10/k#21 ) + n#8 = phi( main::@10/n#13 ) + n#1 = ++ n#8 + to:main::@9 +main::@11: scope:[main] from main::@9 + n#104 = phi( main::@9/n#7 ) + hiscore#100 = phi( main::@9/hiscore#102 ) + y#104 = phi( main::@9/y#106 ) + rem8u#117 = phi( main::@9/rem8u#119 ) + k#11 = phi( main::@9/k#14 ) + chrout::petscii = brick + call chrout + to:main::@69 +main::@69: scope:[main] from main::@11 + n#101 = phi( main::@11/n#104 ) + hiscore#97 = phi( main::@11/hiscore#100 ) + y#101 = phi( main::@11/y#104 ) + rem8u#114 = phi( main::@11/rem8u#117 ) + k#7 = phi( main::@11/k#11 ) + k#1 = ++ k#7 + to:main::@6 +main::@12: scope:[main] from main::@67 main::@76 main::@78 + n#88 = phi( main::@67/n#89, main::@76/n#90, main::@78/n#91 ) + k#94 = phi( main::@67/k#95, main::@76/k#96, main::@78/k#97 ) + hiscore#84 = phi( main::@67/hiscore#85, main::@76/hiscore#86, main::@78/hiscore#87 ) + z#136 = phi( main::@67/z#8, main::@76/z#28, main::@78/z#9 ) + y#88 = phi( main::@67/y#89, main::@76/y#90, main::@78/y#91 ) + rem8u#101 = phi( main::@67/rem8u#102, main::@76/rem8u#103, main::@78/rem8u#104 ) + peephole#0 = $1f1f + *((char *)$900e) = $f + score#2 = 0 + tu#0 = 1 + chrout::petscii = home + call chrout + to:main::@70 +main::@70: scope:[main] from main::@12 + n#87 = phi( main::@12/n#88 ) + k#93 = phi( main::@12/k#94 ) + hiscore#83 = phi( main::@12/hiscore#84 ) + peephole#85 = phi( main::@12/peephole#0 ) + z#135 = phi( main::@12/z#136 ) + y#87 = phi( main::@12/y#88 ) + rem8u#100 = phi( main::@12/rem8u#101 ) + tu#81 = phi( main::@12/tu#0 ) + score#92 = phi( main::@12/score#2 ) + chrout::petscii = yellow + call chrout + to:main::@71 +main::@71: scope:[main] from main::@70 + n#86 = phi( main::@70/n#87 ) + k#92 = phi( main::@70/k#93 ) + hiscore#82 = phi( main::@70/hiscore#83 ) + peephole#84 = phi( main::@70/peephole#85 ) + z#134 = phi( main::@70/z#135 ) + y#86 = phi( main::@70/y#87 ) + rem8u#99 = phi( main::@70/rem8u#100 ) + tu#79 = phi( main::@70/tu#81 ) + score#84 = phi( main::@70/score#92 ) + chrout::petscii = $50 + call chrout + to:main::@72 +main::@72: scope:[main] from main::@71 + n#85 = phi( main::@71/n#86 ) + k#91 = phi( main::@71/k#92 ) + hiscore#81 = phi( main::@71/hiscore#82 ) + peephole#83 = phi( main::@71/peephole#84 ) + z#133 = phi( main::@71/z#134 ) + y#85 = phi( main::@71/y#86 ) + rem8u#98 = phi( main::@71/rem8u#99 ) + tu#77 = phi( main::@71/tu#79 ) + score#77 = phi( main::@71/score#84 ) + chrout::petscii = $54 + call chrout + to:main::@73 +main::@73: scope:[main] from main::@72 + n#84 = phi( main::@72/n#85 ) + k#90 = phi( main::@72/k#91 ) + hiscore#80 = phi( main::@72/hiscore#81 ) + peephole#82 = phi( main::@72/peephole#83 ) + z#132 = phi( main::@72/z#133 ) + y#84 = phi( main::@72/y#85 ) + rem8u#97 = phi( main::@72/rem8u#98 ) + tu#75 = phi( main::@72/tu#77 ) + score#69 = phi( main::@72/score#77 ) + chrout::petscii = $53 + call chrout + to:main::@74 +main::@74: scope:[main] from main::@73 + n#82 = phi( main::@73/n#84 ) + k#88 = phi( main::@73/k#90 ) + hiscore#78 = phi( main::@73/hiscore#80 ) + peephole#80 = phi( main::@73/peephole#82 ) + z#130 = phi( main::@73/z#132 ) + y#82 = phi( main::@73/y#84 ) + rem8u#95 = phi( main::@73/rem8u#97 ) + tu#71 = phi( main::@73/tu#75 ) + score#60 = phi( main::@73/score#69 ) + chrout::petscii = $3a + call chrout + to:main::@75 +main::@75: scope:[main] from main::@74 + n#80 = phi( main::@74/n#82 ) + k#86 = phi( main::@74/k#88 ) + hiscore#76 = phi( main::@74/hiscore#78 ) + peephole#78 = phi( main::@74/peephole#80 ) + z#128 = phi( main::@74/z#130 ) + y#80 = phi( main::@74/y#82 ) + rem8u#93 = phi( main::@74/rem8u#95 ) + tu#66 = phi( main::@74/tu#71 ) + score#51 = phi( main::@74/score#60 ) + *((char *)$d3) = $12 + j#0 = 0 + to:main::@18 +main::@13: scope:[main] from main::@67 main::@78 + n#93 = phi( main::@67/n#89, main::@78/n#91 ) + k#99 = phi( main::@67/k#95, main::@78/k#97 ) + hiscore#89 = phi( main::@67/hiscore#85, main::@78/hiscore#87 ) + y#93 = phi( main::@67/y#89, main::@78/y#91 ) + rem8u#106 = phi( main::@67/rem8u#102, main::@78/rem8u#104 ) + z#43 = phi( main::@67/z#8, main::@78/z#9 ) + main::$25 = 7 - l + main::$26 = 3 * l + main::$27 = $1a - main::$26 + random::k#0 = main::$25 + random::n#0 = main::$27 + call random + to:main::@76 +main::@76: scope:[main] from main::@13 + n#90 = phi( main::@13/n#93 ) + k#96 = phi( main::@13/k#99 ) + hiscore#86 = phi( main::@13/hiscore#89 ) + y#90 = phi( main::@13/y#93 ) + rem8u#103 = phi( main::@13/rem8u#106 ) + z#28 = phi( main::@13/z#43 ) + main::$29 = z#28 + m + main::$30 = main::$29 > $1f9 + main::$31 = ! main::$30 + if(main::$31) goto main::@14 + to:main::@12 +main::@14: scope:[main] from main::@76 + n#98 = phi( main::@76/n#90 ) + k#103 = phi( main::@76/k#96 ) + hiscore#94 = phi( main::@76/hiscore#86 ) + y#98 = phi( main::@76/y#90 ) + rem8u#111 = phi( main::@76/rem8u#103 ) + z#69 = phi( main::@76/z#28 ) + j#1 = 1 + to:main::@15 +main::@15: scope:[main] from main::@14 main::@77 + n#96 = phi( main::@14/n#98, main::@77/n#99 ) + k#102 = phi( main::@14/k#103, main::@77/k#104 ) + hiscore#92 = phi( main::@14/hiscore#94, main::@77/hiscore#95 ) + y#96 = phi( main::@14/y#98, main::@77/y#99 ) + rem8u#109 = phi( main::@14/rem8u#111, main::@77/rem8u#112 ) + z#58 = phi( main::@14/z#69, main::@77/z#70 ) + j#11 = phi( main::@14/j#1, main::@77/j#2 ) + main::$32 = j#11 <= m + if(main::$32) goto main::@16 + to:main::@17 +main::@16: scope:[main] from main::@15 + n#102 = phi( main::@15/n#96 ) + k#105 = phi( main::@15/k#102 ) + hiscore#98 = phi( main::@15/hiscore#92 ) + y#102 = phi( main::@15/y#96 ) + rem8u#115 = phi( main::@15/rem8u#109 ) + z#77 = phi( main::@15/z#58 ) + j#23 = phi( main::@15/j#11 ) + chrout::petscii = right + call chrout + to:main::@77 +main::@77: scope:[main] from main::@16 + n#99 = phi( main::@16/n#102 ) + k#104 = phi( main::@16/k#105 ) + hiscore#95 = phi( main::@16/hiscore#98 ) + y#99 = phi( main::@16/y#102 ) + rem8u#112 = phi( main::@16/rem8u#115 ) + z#70 = phi( main::@16/z#77 ) + j#12 = phi( main::@16/j#23 ) + j#2 = ++ j#12 + to:main::@15 +main::@17: scope:[main] from main::@15 + n#94 = phi( main::@15/n#96 ) + k#100 = phi( main::@15/k#102 ) + hiscore#90 = phi( main::@15/hiscore#92 ) + y#94 = phi( main::@15/y#96 ) + rem8u#107 = phi( main::@15/rem8u#109 ) + z#44 = phi( main::@15/z#58 ) + chrout::petscii = brick + call chrout + to:main::@78 +main::@78: scope:[main] from main::@17 + n#91 = phi( main::@17/n#94 ) + k#97 = phi( main::@17/k#100 ) + hiscore#87 = phi( main::@17/hiscore#90 ) + y#91 = phi( main::@17/y#94 ) + rem8u#104 = phi( main::@17/rem8u#107 ) + z#29 = phi( main::@17/z#44 ) + main::$35 = z#29 + m + main::$36 = main::$35 + 1 + z#9 = main::$36 + main::$37 = z#9 < $1fa + if(main::$37) goto main::@13 + to:main::@12 +main::@18: scope:[main] from main::@75 main::@79 + n#79 = phi( main::@75/n#80, main::@79/n#81 ) + k#85 = phi( main::@75/k#86, main::@79/k#87 ) + hiscore#75 = phi( main::@75/hiscore#76, main::@79/hiscore#77 ) + peephole#77 = phi( main::@75/peephole#78, main::@79/peephole#79 ) + z#127 = phi( main::@75/z#128, main::@79/z#129 ) + y#79 = phi( main::@75/y#80, main::@79/y#81 ) + rem8u#92 = phi( main::@75/rem8u#93, main::@79/rem8u#94 ) + tu#58 = phi( main::@75/tu#66, main::@79/tu#67 ) + score#42 = phi( main::@75/score#51, main::@79/score#52 ) + j#13 = phi( main::@75/j#0, main::@79/j#3 ) + main::$44 = j#13 < 4 + if(main::$44) goto main::@19 + to:main::@20 +main::@19: scope:[main] from main::@18 + n#83 = phi( main::@18/n#79 ) + k#89 = phi( main::@18/k#85 ) + hiscore#79 = phi( main::@18/hiscore#75 ) + peephole#81 = phi( main::@18/peephole#77 ) + z#131 = phi( main::@18/z#127 ) + y#83 = phi( main::@18/y#79 ) + rem8u#96 = phi( main::@18/rem8u#92 ) + tu#72 = phi( main::@18/tu#58 ) + score#61 = phi( main::@18/score#42 ) + j#14 = phi( main::@18/j#13 ) + chrout::petscii = chrono[j#14] + call chrout + to:main::@79 +main::@79: scope:[main] from main::@19 + n#81 = phi( main::@19/n#83 ) + k#87 = phi( main::@19/k#89 ) + hiscore#77 = phi( main::@19/hiscore#79 ) + peephole#79 = phi( main::@19/peephole#81 ) + z#129 = phi( main::@19/z#131 ) + y#81 = phi( main::@19/y#83 ) + rem8u#94 = phi( main::@19/rem8u#96 ) + tu#67 = phi( main::@19/tu#72 ) + score#52 = phi( main::@19/score#61 ) + j#15 = phi( main::@19/j#14 ) + j#3 = ++ j#15 + to:main::@18 +main::@20: scope:[main] from main::@18 + n#78 = phi( main::@18/n#79 ) + k#84 = phi( main::@18/k#85 ) + hiscore#74 = phi( main::@18/hiscore#75 ) + peephole#76 = phi( main::@18/peephole#77 ) + z#126 = phi( main::@18/z#127 ) + y#78 = phi( main::@18/y#79 ) + rem8u#90 = phi( main::@18/rem8u#92 ) + tu#51 = phi( main::@18/tu#58 ) + score#29 = phi( main::@18/score#42 ) + call write_score + to:main::@80 +main::@80: scope:[main] from main::@20 + n#77 = phi( main::@20/n#78 ) + k#83 = phi( main::@20/k#84 ) + hiscore#73 = phi( main::@20/hiscore#74 ) + peephole#75 = phi( main::@20/peephole#76 ) + z#125 = phi( main::@20/z#126 ) + y#76 = phi( main::@20/y#78 ) + rem8u#88 = phi( main::@20/rem8u#90 ) + tu#43 = phi( main::@20/tu#51 ) + score#18 = phi( main::@20/score#1 ) + score#3 = score#18 + chrout::petscii = home + call chrout + to:main::@81 +main::@81: scope:[main] from main::@80 + n#75 = phi( main::@80/n#77 ) + k#81 = phi( main::@80/k#83 ) + hiscore#71 = phi( main::@80/hiscore#73 ) + peephole#72 = phi( main::@80/peephole#75 ) + z#123 = phi( main::@80/z#125 ) + y#72 = phi( main::@80/y#76 ) + rem8u#84 = phi( main::@80/rem8u#88 ) + score#107 = phi( main::@80/score#3 ) + tu#37 = phi( main::@80/tu#43 ) + chrout::petscii = green + call chrout + to:main::@82 +main::@82: scope:[main] from main::@81 + n#73 = phi( main::@81/n#75 ) + k#79 = phi( main::@81/k#81 ) + hiscore#69 = phi( main::@81/hiscore#71 ) + peephole#69 = phi( main::@81/peephole#72 ) + z#120 = phi( main::@81/z#123 ) + y#68 = phi( main::@81/y#72 ) + rem8u#80 = phi( main::@81/rem8u#84 ) + score#105 = phi( main::@81/score#107 ) + tu#31 = phi( main::@81/tu#37 ) + *((char *)$d3) = $a + j#4 = 0 + to:main::@21 +main::@21: scope:[main] from main::@82 main::@83 + n#72 = phi( main::@82/n#73, main::@83/n#74 ) + k#78 = phi( main::@82/k#79, main::@83/k#80 ) + hiscore#68 = phi( main::@82/hiscore#69, main::@83/hiscore#70 ) + peephole#67 = phi( main::@82/peephole#69, main::@83/peephole#70 ) + z#118 = phi( main::@82/z#120, main::@83/z#121 ) + y#65 = phi( main::@82/y#68, main::@83/y#69 ) + rem8u#77 = phi( main::@82/rem8u#80, main::@83/rem8u#81 ) + score#104 = phi( main::@82/score#105, main::@83/score#106 ) + tu#27 = phi( main::@82/tu#31, main::@83/tu#32 ) + j#16 = phi( main::@82/j#4, main::@83/j#5 ) + main::$49 = j#16 < 5 + if(main::$49) goto main::@22 + to:main::@23 +main::@22: scope:[main] from main::@21 + n#76 = phi( main::@21/n#72 ) + k#82 = phi( main::@21/k#78 ) + hiscore#72 = phi( main::@21/hiscore#68 ) + peephole#73 = phi( main::@21/peephole#67 ) + z#124 = phi( main::@21/z#118 ) + y#73 = phi( main::@21/y#65 ) + rem8u#85 = phi( main::@21/rem8u#77 ) + score#108 = phi( main::@21/score#104 ) + tu#38 = phi( main::@21/tu#27 ) + j#17 = phi( main::@21/j#16 ) + chrout::petscii = ducknumber[j#17] + call chrout + to:main::@83 +main::@83: scope:[main] from main::@22 + n#74 = phi( main::@22/n#76 ) + k#80 = phi( main::@22/k#82 ) + hiscore#70 = phi( main::@22/hiscore#72 ) + peephole#70 = phi( main::@22/peephole#73 ) + z#121 = phi( main::@22/z#124 ) + y#69 = phi( main::@22/y#73 ) + rem8u#81 = phi( main::@22/rem8u#85 ) + score#106 = phi( main::@22/score#108 ) + tu#32 = phi( main::@22/tu#38 ) + j#18 = phi( main::@22/j#17 ) + j#5 = ++ j#18 + to:main::@21 +main::@23: scope:[main] from main::@21 main::@95 + n#71 = phi( main::@21/n#72, main::@95/n#36 ) + k#77 = phi( main::@21/k#78, main::@95/k#38 ) + hiscore#67 = phi( main::@21/hiscore#68, main::@95/hiscore#28 ) + peephole#65 = phi( main::@21/peephole#67, main::@95/peephole#68 ) + z#116 = phi( main::@21/z#118, main::@95/z#10 ) + y#63 = phi( main::@21/y#65, main::@95/y#66 ) + rem8u#75 = phi( main::@21/rem8u#77, main::@95/rem8u#78 ) + score#103 = phi( main::@21/score#104, main::@95/score#101 ) + tu#23 = phi( main::@21/tu#27, main::@95/tu#9 ) + chrout::petscii = home + call chrout + to:main::@84 +main::@84: scope:[main] from main::@23 + n#70 = phi( main::@23/n#71 ) + k#75 = phi( main::@23/k#77 ) + hiscore#65 = phi( main::@23/hiscore#67 ) + peephole#63 = phi( main::@23/peephole#65 ) + z#114 = phi( main::@23/z#116 ) + y#61 = phi( main::@23/y#63 ) + rem8u#73 = phi( main::@23/rem8u#75 ) + score#102 = phi( main::@23/score#103 ) + tu#18 = phi( main::@23/tu#23 ) + chrout::petscii = green + call chrout + to:main::@85 +main::@85: scope:[main] from main::@84 + n#69 = phi( main::@84/n#70 ) + k#72 = phi( main::@84/k#75 ) + hiscore#62 = phi( main::@84/hiscore#65 ) + peephole#61 = phi( main::@84/peephole#63 ) + z#112 = phi( main::@84/z#114 ) + y#59 = phi( main::@84/y#61 ) + rem8u#70 = phi( main::@84/rem8u#73 ) + score#100 = phi( main::@84/score#102 ) + tu#13 = phi( main::@84/tu#18 ) + chrout::petscii = reverse_on + call chrout + to:main::@86 +main::@86: scope:[main] from main::@85 + n#64 = phi( main::@85/n#69 ) + k#66 = phi( main::@85/k#72 ) + hiscore#56 = phi( main::@85/hiscore#62 ) + peephole#58 = phi( main::@85/peephole#61 ) + z#109 = phi( main::@85/z#112 ) + y#56 = phi( main::@85/y#59 ) + rem8u#63 = phi( main::@85/rem8u#70 ) + score#97 = phi( main::@85/score#100 ) + tu#6 = phi( main::@85/tu#13 ) + *((char *)$d3) = $f + main::$54 = tu#6 < $a + if(main::$54) goto main::@24 + to:main::@47 +main::@24: scope:[main] from main::@86 + n#58 = phi( main::@86/n#64 ) + k#60 = phi( main::@86/k#66 ) + hiscore#50 = phi( main::@86/hiscore#56 ) + peephole#55 = phi( main::@86/peephole#58 ) + z#106 = phi( main::@86/z#109 ) + y#53 = phi( main::@86/y#56 ) + rem8u#55 = phi( main::@86/rem8u#63 ) + score#93 = phi( main::@86/score#97 ) + tu#7 = phi( main::@86/tu#6 ) + main::$57 = $30 + tu#7 + chrout::petscii = main::$57 + call chrout + to:main::@87 +main::@87: scope:[main] from main::@24 + n#52 = phi( main::@24/n#58 ) + k#54 = phi( main::@24/k#60 ) + hiscore#44 = phi( main::@24/hiscore#50 ) + peephole#52 = phi( main::@24/peephole#55 ) + z#102 = phi( main::@24/z#106 ) + y#49 = phi( main::@24/y#53 ) + rem8u#48 = phi( main::@24/rem8u#55 ) + score#85 = phi( main::@24/score#93 ) + tu#44 = phi( main::@24/tu#7 ) + to:main::@25 +main::@47: scope:[main] from main::@86 + n#65 = phi( main::@86/n#64 ) + k#67 = phi( main::@86/k#66 ) + hiscore#57 = phi( main::@86/hiscore#56 ) + peephole#59 = phi( main::@86/peephole#58 ) + z#110 = phi( main::@86/z#109 ) + y#57 = phi( main::@86/y#56 ) + rem8u#64 = phi( main::@86/rem8u#63 ) + score#98 = phi( main::@86/score#97 ) + tu#59 = phi( main::@86/tu#6 ) + chrout::petscii = $31 + call chrout + to:main::@88 +main::@88: scope:[main] from main::@47 + n#59 = phi( main::@47/n#65 ) + k#61 = phi( main::@47/k#67 ) + hiscore#51 = phi( main::@47/hiscore#57 ) + peephole#56 = phi( main::@47/peephole#59 ) + z#107 = phi( main::@47/z#110 ) + y#54 = phi( main::@47/y#57 ) + rem8u#56 = phi( main::@47/rem8u#64 ) + score#94 = phi( main::@47/score#98 ) + tu#52 = phi( main::@47/tu#59 ) + chrout::petscii = $30 + call chrout + to:main::@89 +main::@89: scope:[main] from main::@88 + n#53 = phi( main::@88/n#59 ) + k#55 = phi( main::@88/k#61 ) + hiscore#45 = phi( main::@88/hiscore#51 ) + peephole#53 = phi( main::@88/peephole#56 ) + z#103 = phi( main::@88/z#107 ) + y#50 = phi( main::@88/y#54 ) + rem8u#49 = phi( main::@88/rem8u#56 ) + score#86 = phi( main::@88/score#94 ) + tu#45 = phi( main::@88/tu#52 ) + to:main::@25 +main::@25: scope:[main] from main::@87 main::@89 main::@91 + n#49 = phi( main::@87/n#52, main::@89/n#53, main::@91/n#44 ) + k#51 = phi( main::@87/k#54, main::@89/k#55, main::@91/k#46 ) + hiscore#41 = phi( main::@87/hiscore#44, main::@89/hiscore#45, main::@91/hiscore#36 ) + peephole#50 = phi( main::@87/peephole#52, main::@89/peephole#53, main::@91/peephole#46 ) + z#99 = phi( main::@87/z#102, main::@89/z#103, main::@91/z#89 ) + y#47 = phi( main::@87/y#49, main::@89/y#50, main::@91/y#43 ) + rem8u#44 = phi( main::@87/rem8u#48, main::@89/rem8u#49, main::@91/rem8u#37 ) + score#78 = phi( main::@87/score#85, main::@89/score#86, main::@91/score#62 ) + tu#39 = phi( main::@87/tu#44, main::@89/tu#45, main::@91/tu#28 ) + random::k#1 = 0 + random::n#1 = $ff + call random + to:main::@90 +main::@90: scope:[main] from main::@25 + n#46 = phi( main::@25/n#49 ) + k#48 = phi( main::@25/k#51 ) + hiscore#38 = phi( main::@25/hiscore#41 ) + peephole#48 = phi( main::@25/peephole#50 ) + z#94 = phi( main::@25/z#99 ) + y#45 = phi( main::@25/y#47 ) + rem8u#40 = phi( main::@25/rem8u#44 ) + score#70 = phi( main::@25/score#78 ) + tu#33 = phi( main::@25/tu#39 ) + duck#0 = m + random::k#2 = 0 + random::n#2 = $ff + call random + to:main::@91 +main::@91: scope:[main] from main::@90 + n#44 = phi( main::@90/n#46 ) + k#46 = phi( main::@90/k#48 ) + hiscore#36 = phi( main::@90/hiscore#38 ) + peephole#46 = phi( main::@90/peephole#48 ) + z#89 = phi( main::@90/z#94 ) + y#43 = phi( main::@90/y#45 ) + rem8u#37 = phi( main::@90/rem8u#40 ) + score#62 = phi( main::@90/score#70 ) + tu#28 = phi( main::@90/tu#33 ) + duck#6 = phi( main::@90/duck#0 ) + main::$61 = m + $1e15 + main::$62 = main::$61 + duck#6 + duck#1 = main::$62 + main::$63 = duck#1 > $1fe3 + main::$64 = *((char *)duck#1) == brick + main::$65 = main::$63 || main::$64 + main::$66 = duck#1 + 1 + main::$67 = *((char *)main::$66) == brick + main::$68 = main::$65 || main::$67 + main::$69 = duck#1 + $16 + main::$70 = *((char *)main::$69) == brick + main::$71 = main::$68 || main::$70 + main::$72 = duck#1 + $17 + main::$73 = *((char *)main::$72) == brick + main::$74 = main::$71 || main::$73 + if(main::$74) goto main::@25 + to:main::@26 +main::@26: scope:[main] from main::@91 + n#42 = phi( main::@91/n#44 ) + k#44 = phi( main::@91/k#46 ) + hiscore#34 = phi( main::@91/hiscore#36 ) + peephole#42 = phi( main::@91/peephole#46 ) + duck#37 = phi( main::@91/duck#1 ) + z#84 = phi( main::@91/z#89 ) + y#40 = phi( main::@91/y#43 ) + rem8u#34 = phi( main::@91/rem8u#37 ) + score#53 = phi( main::@91/score#62 ) + tu#24 = phi( main::@91/tu#28 ) + time#2 = 0 + call chrono_restart + to:main::@92 +main::@92: scope:[main] from main::@26 + n#41 = phi( main::@26/n#42 ) + k#43 = phi( main::@26/k#44 ) + hiscore#33 = phi( main::@26/hiscore#34 ) + peephole#40 = phi( main::@26/peephole#42 ) + duck#31 = phi( main::@26/duck#37 ) + z#78 = phi( main::@26/z#84 ) + y#36 = phi( main::@26/y#40 ) + rem8u#32 = phi( main::@26/rem8u#34 ) + score#44 = phi( main::@26/score#53 ) + tu#20 = phi( main::@26/tu#24 ) + time#18 = phi( main::@26/time#2 ) + to:main::@27 +main::@27: scope:[main] from main::@100 main::@92 + n#39 = phi( main::@100/n#40, main::@92/n#41 ) + k#41 = phi( main::@100/k#42, main::@92/k#43 ) + hiscore#31 = phi( main::@100/hiscore#32, main::@92/hiscore#33 ) + peephole#37 = phi( main::@100/peephole#39, main::@92/peephole#40 ) + duck#25 = phi( main::@100/duck#30, main::@92/duck#31 ) + z#71 = phi( main::@100/z#14, main::@92/z#78 ) + y#31 = phi( main::@100/y#35, main::@92/y#36 ) + rem8u#28 = phi( main::@100/rem8u#31, main::@92/rem8u#32 ) + score#33 = phi( main::@100/score#43, main::@92/score#44 ) + tu#14 = phi( main::@100/tu#19, main::@92/tu#20 ) + time#11 = phi( main::@100/time#17, main::@92/time#18 ) + main::$76 = time#11 < $a + if(main::$76) goto main::@28 + to:main::@29 +main::@28: scope:[main] from main::@27 + k#76 = phi( main::@27/k#41 ) + hiscore#66 = phi( main::@27/hiscore#31 ) + tu#73 = phi( main::@27/tu#14 ) + z#100 = phi( main::@27/z#71 ) + score#87 = phi( main::@27/score#33 ) + duck#43 = phi( main::@27/duck#25 ) + peephole#35 = phi( main::@27/peephole#37 ) + y#26 = phi( main::@27/y#31 ) + time#19 = phi( main::@27/time#11 ) + rem8u#25 = phi( main::@27/rem8u#28 ) + call read_chrono + to:main::@93 +main::@93: scope:[main] from main::@28 + k#74 = phi( main::@28/k#76 ) + hiscore#64 = phi( main::@28/hiscore#66 ) + tu#69 = phi( main::@28/tu#73 ) + z#96 = phi( main::@28/z#100 ) + score#80 = phi( main::@28/score#87 ) + duck#39 = phi( main::@28/duck#43 ) + peephole#32 = phi( main::@28/peephole#35 ) + y#18 = phi( main::@28/y#26 ) + time#12 = phi( main::@28/time#1 ) + rem8u#18 = phi( main::@28/rem8u#6 ) + rem8u#7 = rem8u#18 + time#3 = time#12 + m = *((char *)$911f) + *((char *)$9122) = $7f + n#2 = *((char *)$9120) + *((char *)$9122) = $ff + main::$78 = $10 & m + main::$79 = main::$78 == 0 + main::$80 = ! main::$79 + if(main::$80) goto main::@30 + to:main::@38 +main::@29: scope:[main] from main::@27 + time#60 = phi( main::@27/time#11 ) + n#38 = phi( main::@27/n#39 ) + k#40 = phi( main::@27/k#41 ) + peephole#74 = phi( main::@27/peephole#37 ) + y#74 = phi( main::@27/y#31 ) + rem8u#86 = phi( main::@27/rem8u#28 ) + hiscore#30 = phi( main::@27/hiscore#31 ) + duck#18 = phi( main::@27/duck#25 ) + z#59 = phi( main::@27/z#71 ) + score#19 = phi( main::@27/score#33 ) + tu#8 = phi( main::@27/tu#14 ) + tu#1 = ++ tu#8 + main::$147 = score#19 - $a + score#4 = main::$147 + call write_score + to:main::@94 +main::@94: scope:[main] from main::@29 + time#59 = phi( main::@29/time#60 ) + n#37 = phi( main::@29/n#38 ) + k#39 = phi( main::@29/k#40 ) + peephole#71 = phi( main::@29/peephole#74 ) + y#70 = phi( main::@29/y#74 ) + rem8u#82 = phi( main::@29/rem8u#86 ) + hiscore#29 = phi( main::@29/hiscore#30 ) + tu#15 = phi( main::@29/tu#1 ) + duck#13 = phi( main::@29/duck#18 ) + z#45 = phi( main::@29/z#59 ) + score#20 = phi( main::@29/score#1 ) + score#5 = score#20 + *((char *)$900d) = $82 + wait::n#0 = $14 + call wait + to:main::@95 +main::@95: scope:[main] from main::@94 + time#58 = phi( main::@94/time#59 ) + n#36 = phi( main::@94/n#37 ) + k#38 = phi( main::@94/k#39 ) + peephole#68 = phi( main::@94/peephole#71 ) + y#66 = phi( main::@94/y#70 ) + rem8u#78 = phi( main::@94/rem8u#82 ) + hiscore#28 = phi( main::@94/hiscore#29 ) + score#101 = phi( main::@94/score#5 ) + tu#9 = phi( main::@94/tu#15 ) + duck#7 = phi( main::@94/duck#13 ) + z#30 = phi( main::@94/z#5 ) + z#10 = z#30 + *((char *)$900d) = 0 + main::$150 = duck#7 + c + *((char *)main::$150) = 0 + main::$151 = duck#7 + 1 + main::$152 = main::$151 + c + *((char *)main::$152) = 0 + main::$153 = duck#7 + $16 + main::$154 = main::$153 + c + *((char *)main::$154) = 0 + main::$155 = duck#7 + $17 + main::$156 = main::$155 + c + *((char *)main::$156) = 0 + main::$157 = tu#9 < $b + if(main::$157) goto main::@23 + to:main::@45 +main::@30: scope:[main] from main::@38 main::@93 + k#68 = phi( main::@38/k#73, main::@93/k#74 ) + hiscore#58 = phi( main::@38/hiscore#63, main::@93/hiscore#64 ) + rem8u#65 = phi( main::@38/rem8u#71, main::@93/rem8u#7 ) + tu#60 = phi( main::@38/tu#68, main::@93/tu#69 ) + z#90 = phi( main::@38/z#95, main::@93/z#96 ) + time#36 = phi( main::@38/time#40, main::@93/time#3 ) + score#71 = phi( main::@38/score#79, main::@93/score#80 ) + duck#32 = phi( main::@38/duck#38, main::@93/duck#39 ) + peephole#26 = phi( main::@38/peephole#31, main::@93/peephole#32 ) + y#19 = phi( main::@38/y#0, main::@93/y#18 ) + n#9 = phi( main::@38/n#14, main::@93/n#2 ) + main::$81 = $80 & n#9 + main::$82 = main::$81 == 0 + main::$83 = ! main::$82 + if(main::$83) goto main::@31 + to:main::@39 +main::@38: scope:[main] from main::@93 + k#73 = phi( main::@93/k#74 ) + hiscore#63 = phi( main::@93/hiscore#64 ) + rem8u#71 = phi( main::@93/rem8u#7 ) + tu#68 = phi( main::@93/tu#69 ) + z#95 = phi( main::@93/z#96 ) + time#40 = phi( main::@93/time#3 ) + score#79 = phi( main::@93/score#80 ) + duck#38 = phi( main::@93/duck#39 ) + peephole#31 = phi( main::@93/peephole#32 ) + n#14 = phi( main::@93/n#2 ) + y#9 = phi( main::@93/y#18 ) + y#0 = -- y#9 + to:main::@30 +main::@31: scope:[main] from main::@30 main::@39 + n#60 = phi( main::@30/n#9, main::@39/n#66 ) + k#62 = phi( main::@30/k#68, main::@39/k#69 ) + hiscore#52 = phi( main::@30/hiscore#58, main::@39/hiscore#59 ) + rem8u#57 = phi( main::@30/rem8u#65, main::@39/rem8u#66 ) + tu#53 = phi( main::@30/tu#60, main::@39/tu#61 ) + z#85 = phi( main::@30/z#90, main::@39/z#91 ) + time#31 = phi( main::@30/time#36, main::@39/time#37 ) + score#63 = phi( main::@30/score#71, main::@39/score#72 ) + duck#26 = phi( main::@30/duck#32, main::@39/duck#33 ) + peephole#21 = phi( main::@30/peephole#26, main::@39/peephole#27 ) + y#20 = phi( main::@30/y#19, main::@39/y#1 ) + main::$84 = 4 & m + main::$85 = main::$84 == 0 + main::$86 = ! main::$85 + if(main::$86) goto main::@32 + to:main::@40 +main::@39: scope:[main] from main::@30 + n#66 = phi( main::@30/n#9 ) + k#69 = phi( main::@30/k#68 ) + hiscore#59 = phi( main::@30/hiscore#58 ) + rem8u#66 = phi( main::@30/rem8u#65 ) + tu#61 = phi( main::@30/tu#60 ) + z#91 = phi( main::@30/z#90 ) + time#37 = phi( main::@30/time#36 ) + score#72 = phi( main::@30/score#71 ) + duck#33 = phi( main::@30/duck#32 ) + peephole#27 = phi( main::@30/peephole#26 ) + y#10 = phi( main::@30/y#19 ) + y#1 = ++ y#10 + to:main::@31 +main::@32: scope:[main] from main::@31 main::@40 + n#54 = phi( main::@31/n#60, main::@40/n#61 ) + k#56 = phi( main::@31/k#62, main::@40/k#63 ) + hiscore#46 = phi( main::@31/hiscore#52, main::@40/hiscore#53 ) + rem8u#50 = phi( main::@31/rem8u#57, main::@40/rem8u#58 ) + tu#46 = phi( main::@31/tu#53, main::@40/tu#54 ) + z#79 = phi( main::@31/z#85, main::@40/z#86 ) + time#27 = phi( main::@31/time#31, main::@40/time#32 ) + score#54 = phi( main::@31/score#63, main::@40/score#64 ) + duck#19 = phi( main::@31/duck#26, main::@40/duck#27 ) + peephole#16 = phi( main::@31/peephole#21, main::@40/peephole#22 ) + y#21 = phi( main::@31/y#20, main::@40/y#2 ) + main::$88 = 8 & m + main::$89 = main::$88 == 0 + main::$90 = ! main::$89 + if(main::$90) goto main::@33 + to:main::@41 +main::@40: scope:[main] from main::@31 + n#61 = phi( main::@31/n#60 ) + k#63 = phi( main::@31/k#62 ) + hiscore#53 = phi( main::@31/hiscore#52 ) + rem8u#58 = phi( main::@31/rem8u#57 ) + tu#54 = phi( main::@31/tu#53 ) + z#86 = phi( main::@31/z#85 ) + time#32 = phi( main::@31/time#31 ) + score#64 = phi( main::@31/score#63 ) + duck#27 = phi( main::@31/duck#26 ) + peephole#22 = phi( main::@31/peephole#21 ) + y#11 = phi( main::@31/y#20 ) + main::$87 = y#11 - $16 + y#2 = main::$87 + to:main::@32 +main::@33: scope:[main] from main::@32 main::@41 + n#50 = phi( main::@32/n#54, main::@41/n#55 ) + k#52 = phi( main::@32/k#56, main::@41/k#57 ) + hiscore#42 = phi( main::@32/hiscore#46, main::@41/hiscore#47 ) + rem8u#45 = phi( main::@32/rem8u#50, main::@41/rem8u#51 ) + tu#40 = phi( main::@32/tu#46, main::@41/tu#47 ) + z#72 = phi( main::@32/z#79, main::@41/z#80 ) + time#23 = phi( main::@32/time#27, main::@41/time#28 ) + score#45 = phi( main::@32/score#54, main::@41/score#55 ) + duck#14 = phi( main::@32/duck#19, main::@41/duck#20 ) + peephole#12 = phi( main::@32/peephole#16, main::@41/peephole#17 ) + y#22 = phi( main::@32/y#21, main::@41/y#3 ) + main::$92 = $20 & m + main::$93 = main::$92 == 0 + main::$94 = ! main::$93 + if(main::$94) goto main::@34 + to:main::@42 +main::@41: scope:[main] from main::@32 + n#55 = phi( main::@32/n#54 ) + k#57 = phi( main::@32/k#56 ) + hiscore#47 = phi( main::@32/hiscore#46 ) + rem8u#51 = phi( main::@32/rem8u#50 ) + tu#47 = phi( main::@32/tu#46 ) + z#80 = phi( main::@32/z#79 ) + time#28 = phi( main::@32/time#27 ) + score#55 = phi( main::@32/score#54 ) + duck#20 = phi( main::@32/duck#19 ) + peephole#17 = phi( main::@32/peephole#16 ) + y#12 = phi( main::@32/y#21 ) + main::$91 = y#12 + $16 + y#3 = main::$91 + to:main::@33 +main::@34: scope:[main] from main::@33 main::@36 + n#47 = phi( main::@33/n#50, main::@36/n#51 ) + k#49 = phi( main::@33/k#52, main::@36/k#53 ) + hiscore#39 = phi( main::@33/hiscore#42, main::@36/hiscore#43 ) + rem8u#41 = phi( main::@33/rem8u#45, main::@36/rem8u#46 ) + score#73 = phi( main::@33/score#45, main::@36/score#81 ) + tu#34 = phi( main::@33/tu#40, main::@36/tu#41 ) + time#33 = phi( main::@33/time#23, main::@36/time#38 ) + duck#21 = phi( main::@33/duck#14, main::@36/duck#28 ) + z#62 = phi( main::@33/z#72, main::@36/z#73 ) + peephole#13 = phi( main::@33/peephole#12, main::@36/peephole#18 ) + y#13 = phi( main::@33/y#22, main::@36/y#23 ) + main::$103 = *((char *)y#13) != brick + main::$104 = y#13 + 1 + main::$105 = *((char *)main::$104) != brick + main::$106 = main::$103 && main::$105 + main::$107 = y#13 + $16 + main::$108 = *((char *)main::$107) != brick + main::$109 = main::$106 && main::$108 + main::$110 = y#13 + $17 + main::$111 = *((char *)main::$110) != brick + main::$112 = main::$109 && main::$111 + main::$113 = y#13 > $1e16 + main::$114 = main::$112 && main::$113 + main::$115 = y#13 < $1fe3 + main::$116 = main::$114 && main::$115 + main::$117 = ! main::$116 + if(main::$117) goto main::@37 + to:main::@44 +main::@42: scope:[main] from main::@33 + n#68 = phi( main::@33/n#50 ) + k#71 = phi( main::@33/k#52 ) + hiscore#61 = phi( main::@33/hiscore#42 ) + rem8u#68 = phi( main::@33/rem8u#45 ) + tu#63 = phi( main::@33/tu#40 ) + y#38 = phi( main::@33/y#22 ) + z#61 = phi( main::@33/z#72 ) + time#20 = phi( main::@33/time#23 ) + score#34 = phi( main::@33/score#45 ) + duck#8 = phi( main::@33/duck#14 ) + peephole#6 = phi( main::@33/peephole#12 ) + *((char *)$900d) = $82 + main::$95 = peephole#6 != duck#8 + if(main::$95) goto main::@35 + to:main::@43 +main::@35: scope:[main] from main::@42 + n#67 = phi( main::@42/n#68 ) + k#70 = phi( main::@42/k#71 ) + hiscore#60 = phi( main::@42/hiscore#61 ) + rem8u#67 = phi( main::@42/rem8u#68 ) + tu#62 = phi( main::@42/tu#63 ) + time#45 = phi( main::@42/time#20 ) + duck#44 = phi( main::@42/duck#8 ) + peephole#33 = phi( main::@42/peephole#6 ) + y#37 = phi( main::@42/y#38 ) + z#60 = phi( main::@42/z#61 ) + score#21 = phi( main::@42/score#34 ) + main::$100 = score#21 - $a + score#6 = main::$100 + call write_score + to:main::@96 +main::@96: scope:[main] from main::@35 + n#62 = phi( main::@35/n#67 ) + k#64 = phi( main::@35/k#70 ) + hiscore#54 = phi( main::@35/hiscore#60 ) + rem8u#59 = phi( main::@35/rem8u#67 ) + tu#55 = phi( main::@35/tu#62 ) + time#43 = phi( main::@35/time#45 ) + duck#40 = phi( main::@35/duck#44 ) + peephole#28 = phi( main::@35/peephole#33 ) + y#32 = phi( main::@35/y#37 ) + z#46 = phi( main::@35/z#60 ) + score#22 = phi( main::@35/score#1 ) + score#7 = score#22 + wait::n#1 = $a + call wait + to:main::@97 +main::@97: scope:[main] from main::@96 + n#56 = phi( main::@96/n#62 ) + k#58 = phi( main::@96/k#64 ) + hiscore#48 = phi( main::@96/hiscore#54 ) + rem8u#52 = phi( main::@96/rem8u#59 ) + score#88 = phi( main::@96/score#7 ) + tu#48 = phi( main::@96/tu#55 ) + time#41 = phi( main::@96/time#43 ) + duck#34 = phi( main::@96/duck#40 ) + peephole#23 = phi( main::@96/peephole#28 ) + y#27 = phi( main::@96/y#32 ) + z#31 = phi( main::@96/z#5 ) + z#11 = z#31 + to:main::@36 +main::@43: scope:[main] from main::@42 + n#63 = phi( main::@42/n#68 ) + k#65 = phi( main::@42/k#71 ) + hiscore#55 = phi( main::@42/hiscore#61 ) + rem8u#60 = phi( main::@42/rem8u#68 ) + tu#56 = phi( main::@42/tu#63 ) + duck#41 = phi( main::@42/duck#8 ) + peephole#29 = phi( main::@42/peephole#6 ) + y#33 = phi( main::@42/y#38 ) + z#47 = phi( main::@42/z#61 ) + score#23 = phi( main::@42/score#34 ) + time#13 = phi( main::@42/time#20 ) + main::$96 = $c - time#13 + main::$97 = main::$96 * $a + main::$98 = score#23 + main::$97 + score#8 = main::$98 + wait::n#2 = $a + call wait + to:main::@98 +main::@98: scope:[main] from main::@43 + n#57 = phi( main::@43/n#63 ) + k#59 = phi( main::@43/k#65 ) + hiscore#49 = phi( main::@43/hiscore#55 ) + rem8u#53 = phi( main::@43/rem8u#60 ) + score#89 = phi( main::@43/score#8 ) + tu#49 = phi( main::@43/tu#56 ) + duck#35 = phi( main::@43/duck#41 ) + peephole#24 = phi( main::@43/peephole#29 ) + y#28 = phi( main::@43/y#33 ) + z#32 = phi( main::@43/z#5 ) + z#12 = z#32 + time#4 = $a + to:main::@36 +main::@36: scope:[main] from main::@97 main::@98 + n#51 = phi( main::@97/n#56, main::@98/n#57 ) + k#53 = phi( main::@97/k#58, main::@98/k#59 ) + hiscore#43 = phi( main::@97/hiscore#48, main::@98/hiscore#49 ) + rem8u#46 = phi( main::@97/rem8u#52, main::@98/rem8u#53 ) + score#81 = phi( main::@97/score#88, main::@98/score#89 ) + tu#41 = phi( main::@97/tu#48, main::@98/tu#49 ) + time#38 = phi( main::@97/time#41, main::@98/time#4 ) + duck#28 = phi( main::@97/duck#34, main::@98/duck#35 ) + z#73 = phi( main::@97/z#11, main::@98/z#12 ) + peephole#18 = phi( main::@97/peephole#23, main::@98/peephole#24 ) + y#23 = phi( main::@97/y#27, main::@98/y#28 ) + *((char *)$900d) = 0 + to:main::@34 +main::@37: scope:[main] from main::@34 main::@44 + n#45 = phi( main::@34/n#47, main::@44/n#48 ) + k#47 = phi( main::@34/k#49, main::@44/k#50 ) + hiscore#37 = phi( main::@34/hiscore#39, main::@44/hiscore#40 ) + rem8u#38 = phi( main::@34/rem8u#41, main::@44/rem8u#42 ) + score#65 = phi( main::@34/score#73, main::@44/score#74 ) + tu#29 = phi( main::@34/tu#34, main::@44/tu#35 ) + time#29 = phi( main::@34/time#33, main::@44/time#34 ) + duck#15 = phi( main::@34/duck#21, main::@44/duck#22 ) + z#48 = phi( main::@34/z#62, main::@44/z#63 ) + peephole#7 = phi( main::@34/peephole#13, main::@44/peephole#1 ) + y#4 = peephole#7 + *((char *)peephole#7) = $fd + main::$125 = peephole#7 + c + *((char *)main::$125) = 1 + main::$126 = peephole#7 + 1 + *((char *)main::$126) = $ed + main::$127 = peephole#7 + 1 + main::$128 = main::$127 + c + *((char *)main::$128) = 1 + main::$129 = peephole#7 + $16 + *((char *)main::$129) = $ee + main::$130 = peephole#7 + $16 + main::$131 = main::$130 + c + *((char *)main::$131) = 1 + main::$132 = peephole#7 + $17 + *((char *)main::$132) = $f0 + main::$133 = peephole#7 + $17 + main::$134 = main::$133 + c + *((char *)main::$134) = 1 + wait::n#3 = 5 + call wait + to:main::@99 +main::@99: scope:[main] from main::@37 + n#43 = phi( main::@37/n#45 ) + k#45 = phi( main::@37/k#47 ) + hiscore#35 = phi( main::@37/hiscore#37 ) + peephole#43 = phi( main::@37/peephole#7 ) + y#41 = phi( main::@37/y#4 ) + rem8u#35 = phi( main::@37/rem8u#38 ) + score#56 = phi( main::@37/score#65 ) + tu#25 = phi( main::@37/tu#29 ) + time#24 = phi( main::@37/time#29 ) + duck#9 = phi( main::@37/duck#15 ) + z#33 = phi( main::@37/z#5 ) + z#13 = z#33 + *((char *)duck#9) = 0 + main::$136 = duck#9 + c + *((char *)main::$136) = 7 + main::$137 = duck#9 + 1 + *((char *)main::$137) = 1 + main::$138 = duck#9 + 1 + main::$139 = main::$138 + c + *((char *)main::$139) = 7 + main::$140 = duck#9 + $16 + *((char *)main::$140) = 2 + main::$141 = duck#9 + $16 + main::$142 = main::$141 + c + *((char *)main::$142) = 7 + main::$143 = duck#9 + $17 + *((char *)main::$143) = 3 + main::$144 = duck#9 + $17 + main::$145 = main::$144 + c + *((char *)main::$145) = 7 + wait::n#4 = 5 + call wait + to:main::@100 +main::@100: scope:[main] from main::@99 + n#40 = phi( main::@99/n#43 ) + k#42 = phi( main::@99/k#45 ) + hiscore#32 = phi( main::@99/hiscore#35 ) + peephole#39 = phi( main::@99/peephole#43 ) + duck#30 = phi( main::@99/duck#9 ) + y#35 = phi( main::@99/y#41 ) + rem8u#31 = phi( main::@99/rem8u#35 ) + score#43 = phi( main::@99/score#56 ) + tu#19 = phi( main::@99/tu#25 ) + time#17 = phi( main::@99/time#24 ) + z#34 = phi( main::@99/z#5 ) + z#14 = z#34 + to:main::@27 +main::@44: scope:[main] from main::@34 + n#48 = phi( main::@34/n#47 ) + k#50 = phi( main::@34/k#49 ) + hiscore#40 = phi( main::@34/hiscore#39 ) + rem8u#42 = phi( main::@34/rem8u#41 ) + score#74 = phi( main::@34/score#73 ) + tu#35 = phi( main::@34/tu#34 ) + time#34 = phi( main::@34/time#33 ) + duck#22 = phi( main::@34/duck#21 ) + z#63 = phi( main::@34/z#62 ) + y#14 = phi( main::@34/y#13 ) + peephole#8 = phi( main::@34/peephole#13 ) + main::$118 = peephole#8 + c + *((char *)main::$118) = 0 + main::$119 = peephole#8 + c + main::$120 = main::$119 + 1 + *((char *)main::$120) = 0 + main::$121 = peephole#8 + c + main::$122 = main::$121 + $16 + *((char *)main::$122) = 0 + main::$123 = peephole#8 + c + main::$124 = main::$123 + $17 + *((char *)main::$124) = 0 + peephole#1 = y#14 + to:main::@37 +main::@45: scope:[main] from main::@95 + y#77 = phi( main::@95/y#66 ) + rem8u#91 = phi( main::@95/rem8u#78 ) + time#57 = phi( main::@95/time#58 ) + duck#58 = phi( main::@95/duck#7 ) + tu#85 = phi( main::@95/tu#9 ) + peephole#66 = phi( main::@95/peephole#68 ) + n#35 = phi( main::@95/n#36 ) + k#37 = phi( main::@95/k#38 ) + hiscore#27 = phi( main::@95/hiscore#28 ) + score#99 = phi( main::@95/score#101 ) + z#49 = phi( main::@95/z#10 ) + clear_screen::n#2 = 4 + clear_screen::m#2 = 0 + call clear_screen + to:main::@101 +main::@101: scope:[main] from main::@45 + y#75 = phi( main::@45/y#77 ) + rem8u#89 = phi( main::@45/rem8u#91 ) + time#56 = phi( main::@45/time#57 ) + duck#57 = phi( main::@45/duck#58 ) + tu#84 = phi( main::@45/tu#85 ) + peephole#64 = phi( main::@45/peephole#66 ) + n#34 = phi( main::@45/n#35 ) + k#36 = phi( main::@45/k#37 ) + hiscore#26 = phi( main::@45/hiscore#27 ) + score#95 = phi( main::@45/score#99 ) + z#35 = phi( main::@45/z#2 ) + z#15 = z#35 + *((char *)$9005) = $f0 + chrout::petscii = lower + call chrout + to:main::@102 +main::@102: scope:[main] from main::@101 + y#71 = phi( main::@101/y#75 ) + rem8u#87 = phi( main::@101/rem8u#89 ) + time#55 = phi( main::@101/time#56 ) + duck#56 = phi( main::@101/duck#57 ) + tu#83 = phi( main::@101/tu#84 ) + peephole#62 = phi( main::@101/peephole#64 ) + n#33 = phi( main::@101/n#34 ) + k#35 = phi( main::@101/k#36 ) + z#122 = phi( main::@101/z#15 ) + hiscore#24 = phi( main::@101/hiscore#26 ) + score#90 = phi( main::@101/score#95 ) + textcolor::color#3 = 7 + call textcolor + textcolor::return#5 = textcolor::return#1 + to:main::@103 +main::@103: scope:[main] from main::@102 + y#67 = phi( main::@102/y#71 ) + rem8u#83 = phi( main::@102/rem8u#87 ) + time#54 = phi( main::@102/time#55 ) + duck#55 = phi( main::@102/duck#56 ) + tu#82 = phi( main::@102/tu#83 ) + peephole#60 = phi( main::@102/peephole#62 ) + n#32 = phi( main::@102/n#33 ) + k#34 = phi( main::@102/k#35 ) + z#119 = phi( main::@102/z#122 ) + hiscore#22 = phi( main::@102/hiscore#24 ) + score#82 = phi( main::@102/score#90 ) + cputs::s#4 = game_over + call cputs + to:main::@104 +main::@104: scope:[main] from main::@103 + y#64 = phi( main::@103/y#67 ) + rem8u#79 = phi( main::@103/rem8u#83 ) + time#53 = phi( main::@103/time#54 ) + duck#54 = phi( main::@103/duck#55 ) + tu#80 = phi( main::@103/tu#82 ) + peephole#57 = phi( main::@103/peephole#60 ) + n#31 = phi( main::@103/n#32 ) + k#33 = phi( main::@103/k#34 ) + z#117 = phi( main::@103/z#119 ) + hiscore#20 = phi( main::@103/hiscore#22 ) + score#75 = phi( main::@103/score#82 ) + textcolor::color#4 = 2 + call textcolor + textcolor::return#6 = textcolor::return#1 + to:main::@105 +main::@105: scope:[main] from main::@104 + y#62 = phi( main::@104/y#64 ) + rem8u#76 = phi( main::@104/rem8u#79 ) + time#52 = phi( main::@104/time#53 ) + duck#53 = phi( main::@104/duck#54 ) + tu#78 = phi( main::@104/tu#80 ) + peephole#54 = phi( main::@104/peephole#57 ) + n#30 = phi( main::@104/n#31 ) + k#32 = phi( main::@104/k#33 ) + z#115 = phi( main::@104/z#117 ) + hiscore#18 = phi( main::@104/hiscore#20 ) + score#66 = phi( main::@104/score#75 ) + cputs::s#5 = your_score + call cputs + to:main::@106 +main::@106: scope:[main] from main::@105 + y#60 = phi( main::@105/y#62 ) + rem8u#74 = phi( main::@105/rem8u#76 ) + time#51 = phi( main::@105/time#52 ) + duck#52 = phi( main::@105/duck#53 ) + tu#76 = phi( main::@105/tu#78 ) + peephole#51 = phi( main::@105/peephole#54 ) + n#29 = phi( main::@105/n#30 ) + k#31 = phi( main::@105/k#32 ) + z#113 = phi( main::@105/z#115 ) + hiscore#16 = phi( main::@105/hiscore#18 ) + score#57 = phi( main::@105/score#66 ) + cputs::s#6 = buffer + call cputs + to:main::@107 +main::@107: scope:[main] from main::@106 + y#58 = phi( main::@106/y#60 ) + rem8u#72 = phi( main::@106/rem8u#74 ) + time#50 = phi( main::@106/time#51 ) + duck#51 = phi( main::@106/duck#52 ) + tu#74 = phi( main::@106/tu#76 ) + peephole#49 = phi( main::@106/peephole#51 ) + n#28 = phi( main::@106/n#29 ) + k#30 = phi( main::@106/k#31 ) + z#111 = phi( main::@106/z#113 ) + hiscore#13 = phi( main::@106/hiscore#16 ) + score#46 = phi( main::@106/score#57 ) + textcolor::color#5 = 3 + call textcolor + textcolor::return#7 = textcolor::return#1 + to:main::@108 +main::@108: scope:[main] from main::@107 + y#55 = phi( main::@107/y#58 ) + rem8u#69 = phi( main::@107/rem8u#72 ) + time#49 = phi( main::@107/time#50 ) + duck#50 = phi( main::@107/duck#51 ) + tu#70 = phi( main::@107/tu#74 ) + peephole#47 = phi( main::@107/peephole#49 ) + n#27 = phi( main::@107/n#28 ) + k#29 = phi( main::@107/k#30 ) + z#108 = phi( main::@107/z#111 ) + hiscore#10 = phi( main::@107/hiscore#13 ) + score#35 = phi( main::@107/score#46 ) + cputs::s#7 = high_score + call cputs + to:main::@109 +main::@109: scope:[main] from main::@108 + y#51 = phi( main::@108/y#55 ) + rem8u#61 = phi( main::@108/rem8u#69 ) + time#47 = phi( main::@108/time#49 ) + duck#48 = phi( main::@108/duck#50 ) + tu#64 = phi( main::@108/tu#70 ) + peephole#44 = phi( main::@108/peephole#47 ) + n#25 = phi( main::@108/n#27 ) + k#27 = phi( main::@108/k#29 ) + z#104 = phi( main::@108/z#108 ) + hiscore#5 = phi( main::@108/hiscore#10 ) + score#24 = phi( main::@108/score#35 ) + main::$167 = score#24 > hiscore#5 + main::$168 = ! main::$167 + if(main::$168) goto main::@48 + to:main::@46 +main::@48: scope:[main] from main::@109 main::@46 + y#48 = phi( main::@109/y#51, main::@46/y#52 ) + rem8u#54 = phi( main::@109/rem8u#61, main::@46/rem8u#62 ) + time#46 = phi( main::@109/time#47, main::@46/time#48 ) + duck#47 = phi( main::@109/duck#48, main::@46/duck#49 ) + tu#57 = phi( main::@109/tu#64, main::@46/tu#65 ) + score#96 = phi( main::@109/score#24, main::@46/score#25 ) + peephole#41 = phi( main::@109/peephole#44, main::@46/peephole#45 ) + n#24 = phi( main::@109/n#25, main::@46/n#26 ) + k#26 = phi( main::@109/k#27, main::@46/k#28 ) + z#101 = phi( main::@109/z#104, main::@46/z#105 ) + hiscore#6 = phi( main::@109/hiscore#5, main::@46/hiscore#0 ) + utoa::value#2 = hiscore#6 + utoa::buffer#6 = buffer + utoa::radix#1 = $a + call utoa + to:main::@110 +main::@110: scope:[main] from main::@48 + hiscore#25 = phi( main::@48/hiscore#6 ) + y#46 = phi( main::@48/y#48 ) + rem8u#47 = phi( main::@48/rem8u#54 ) + time#44 = phi( main::@48/time#46 ) + duck#46 = phi( main::@48/duck#47 ) + tu#50 = phi( main::@48/tu#57 ) + score#91 = phi( main::@48/score#96 ) + peephole#38 = phi( main::@48/peephole#41 ) + n#23 = phi( main::@48/n#24 ) + k#25 = phi( main::@48/k#26 ) + z#97 = phi( main::@48/z#101 ) + cputs::s#8 = buffer + call cputs + to:main::@111 +main::@111: scope:[main] from main::@110 + hiscore#23 = phi( main::@110/hiscore#25 ) + y#44 = phi( main::@110/y#46 ) + rem8u#43 = phi( main::@110/rem8u#47 ) + time#42 = phi( main::@110/time#44 ) + duck#45 = phi( main::@110/duck#46 ) + tu#42 = phi( main::@110/tu#50 ) + score#83 = phi( main::@110/score#91 ) + peephole#36 = phi( main::@110/peephole#38 ) + n#22 = phi( main::@110/n#23 ) + k#24 = phi( main::@110/k#25 ) + z#92 = phi( main::@110/z#97 ) + textcolor::color#6 = 1 + call textcolor + textcolor::return#8 = textcolor::return#1 + to:main::@112 +main::@112: scope:[main] from main::@111 + hiscore#21 = phi( main::@111/hiscore#23 ) + y#42 = phi( main::@111/y#44 ) + rem8u#39 = phi( main::@111/rem8u#43 ) + time#39 = phi( main::@111/time#42 ) + duck#42 = phi( main::@111/duck#45 ) + tu#36 = phi( main::@111/tu#42 ) + score#76 = phi( main::@111/score#83 ) + peephole#34 = phi( main::@111/peephole#36 ) + n#21 = phi( main::@111/n#22 ) + k#23 = phi( main::@111/k#24 ) + z#87 = phi( main::@111/z#92 ) + cputs::s#9 = play_again + call cputs + to:main::@113 +main::@113: scope:[main] from main::@112 + hiscore#19 = phi( main::@112/hiscore#21 ) + y#39 = phi( main::@112/y#42 ) + rem8u#36 = phi( main::@112/rem8u#39 ) + time#35 = phi( main::@112/time#39 ) + duck#36 = phi( main::@112/duck#42 ) + tu#30 = phi( main::@112/tu#36 ) + score#67 = phi( main::@112/score#76 ) + peephole#30 = phi( main::@112/peephole#34 ) + n#20 = phi( main::@112/n#21 ) + k#22 = phi( main::@112/k#23 ) + z#81 = phi( main::@112/z#87 ) + to:main::@49 +main::@46: scope:[main] from main::@109 + y#52 = phi( main::@109/y#51 ) + rem8u#62 = phi( main::@109/rem8u#61 ) + time#48 = phi( main::@109/time#47 ) + duck#49 = phi( main::@109/duck#48 ) + tu#65 = phi( main::@109/tu#64 ) + peephole#45 = phi( main::@109/peephole#44 ) + n#26 = phi( main::@109/n#25 ) + k#28 = phi( main::@109/k#27 ) + z#105 = phi( main::@109/z#104 ) + score#25 = phi( main::@109/score#24 ) + hiscore#0 = score#25 + to:main::@48 +main::@49: scope:[main] from main::@113 main::@49 + hiscore#17 = phi( main::@113/hiscore#19, main::@49/hiscore#17 ) + y#34 = phi( main::@113/y#39, main::@49/y#34 ) + rem8u#33 = phi( main::@113/rem8u#36, main::@49/rem8u#33 ) + time#30 = phi( main::@113/time#35, main::@49/time#30 ) + duck#29 = phi( main::@113/duck#36, main::@49/duck#29 ) + tu#26 = phi( main::@113/tu#30, main::@49/tu#26 ) + score#58 = phi( main::@113/score#67, main::@49/score#58 ) + peephole#25 = phi( main::@113/peephole#30, main::@49/peephole#25 ) + n#19 = phi( main::@113/n#20, main::@49/n#19 ) + k#19 = phi( main::@113/k#22, main::@49/k#19 ) + z#74 = phi( main::@113/z#81, main::@49/z#74 ) + j#6 = *((char *)$c5) + main::$173 = j#6 != $b + main::$174 = j#6 != $1c + main::$175 = main::$173 && main::$174 + if(main::$175) goto main::@49 + to:main::@50 +main::@50: scope:[main] from main::@49 + hiscore#14 = phi( main::@49/hiscore#17 ) + y#29 = phi( main::@49/y#34 ) + rem8u#29 = phi( main::@49/rem8u#33 ) + time#25 = phi( main::@49/time#30 ) + duck#23 = phi( main::@49/duck#29 ) + tu#21 = phi( main::@49/tu#26 ) + score#47 = phi( main::@49/score#58 ) + peephole#19 = phi( main::@49/peephole#25 ) + n#17 = phi( main::@49/n#19 ) + k#15 = phi( main::@49/k#19 ) + z#56 = phi( main::@49/z#74 ) + j#19 = phi( main::@49/j#6 ) + main::$176 = j#19 == $b + if(main::$176) goto main::@3 + to:main::@51 +main::@51: scope:[main] from main::@50 + hiscore#11 = phi( main::@50/hiscore#14 ) + y#24 = phi( main::@50/y#29 ) + rem8u#26 = phi( main::@50/rem8u#29 ) + time#21 = phi( main::@50/time#25 ) + duck#16 = phi( main::@50/duck#23 ) + j#24 = phi( main::@50/j#19 ) + tu#16 = phi( main::@50/tu#21 ) + score#36 = phi( main::@50/score#47 ) + peephole#14 = phi( main::@50/peephole#19 ) + n#15 = phi( main::@50/n#17 ) + k#12 = phi( main::@50/k#15 ) + z#50 = phi( main::@50/z#56 ) + asm { jsr$FD22 } + to:main::@return +main::@return: scope:[main] from main::@51 + hiscore#7 = phi( main::@51/hiscore#11 ) + y#15 = phi( main::@51/y#24 ) + rem8u#19 = phi( main::@51/rem8u#26 ) + time#14 = phi( main::@51/time#21 ) + duck#10 = phi( main::@51/duck#16 ) + j#20 = phi( main::@51/j#24 ) + tu#10 = phi( main::@51/tu#16 ) + score#26 = phi( main::@51/score#36 ) + peephole#9 = phi( main::@51/peephole#14 ) + n#10 = phi( main::@51/n#15 ) + k#8 = phi( main::@51/k#12 ) + z#36 = phi( main::@51/z#50 ) + z#16 = z#36 + k#2 = k#8 + n#3 = n#10 + peephole#2 = peephole#9 + score#9 = score#26 + tu#2 = tu#10 + j#7 = j#20 + duck#2 = duck#10 + time#5 = time#14 + rem8u#8 = rem8u#19 + y#5 = y#15 + hiscore#1 = hiscore#7 + return + to:@return + +void __start() +__start: scope:[__start] from + to:__start::__init1 +__start::__init1: scope:[__start] from __start + conio_cursor_x = 0 + conio_cursor_y = 0 + conio_line_text = DEFAULT_SCREEN + conio_line_color = COLORRAM + conio_textcolor = LIGHT_BLUE + conio_scroll_enable = 1 + rem8u#9 = 0 + j#8 = 0 + k#3 = 0 + l = 0 + m = 0 + n#4 = 0 + tu#3 = 0 + duck#3 = 0 + peephole#3 = 0 + y#6 = 0 + z#17 = 0 + time#6 = 0 + score#10 = 0 + hiscore#2 = 0 + call conio_c64_init + to:__start::@2 +__start::@2: scope:[__start] from __start::__init1 + hiscore#15 = phi( __start::__init1/hiscore#2 ) + y#30 = phi( __start::__init1/y#6 ) + rem8u#30 = phi( __start::__init1/rem8u#9 ) + time#26 = phi( __start::__init1/time#6 ) + duck#24 = phi( __start::__init1/duck#3 ) + j#26 = phi( __start::__init1/j#8 ) + tu#22 = phi( __start::__init1/tu#3 ) + score#48 = phi( __start::__init1/score#10 ) + peephole#20 = phi( __start::__init1/peephole#3 ) + n#18 = phi( __start::__init1/n#4 ) + k#16 = phi( __start::__init1/k#3 ) + z#64 = phi( __start::__init1/z#17 ) + to:__start::@1 +__start::@1: scope:[__start] from __start::@2 + hiscore#12 = phi( __start::@2/hiscore#15 ) + y#25 = phi( __start::@2/y#30 ) + rem8u#27 = phi( __start::@2/rem8u#30 ) + time#22 = phi( __start::@2/time#26 ) + duck#17 = phi( __start::@2/duck#24 ) + j#25 = phi( __start::@2/j#26 ) + tu#17 = phi( __start::@2/tu#22 ) + score#37 = phi( __start::@2/score#48 ) + peephole#15 = phi( __start::@2/peephole#20 ) + n#16 = phi( __start::@2/n#18 ) + k#13 = phi( __start::@2/k#16 ) + z#51 = phi( __start::@2/z#64 ) + call main + to:__start::@3 +__start::@3: scope:[__start] from __start::@1 + hiscore#8 = phi( __start::@1/hiscore#1 ) + y#16 = phi( __start::@1/y#5 ) + rem8u#20 = phi( __start::@1/rem8u#8 ) + time#15 = phi( __start::@1/time#5 ) + duck#11 = phi( __start::@1/duck#2 ) + j#21 = phi( __start::@1/j#7 ) + tu#11 = phi( __start::@1/tu#2 ) + score#27 = phi( __start::@1/score#9 ) + peephole#10 = phi( __start::@1/peephole#2 ) + n#11 = phi( __start::@1/n#3 ) + k#9 = phi( __start::@1/k#2 ) + z#37 = phi( __start::@1/z#16 ) + z#18 = z#37 + k#4 = k#9 + n#5 = n#11 + peephole#4 = peephole#10 + score#11 = score#27 + tu#4 = tu#11 + j#9 = j#21 + duck#4 = duck#11 + time#7 = time#15 + rem8u#10 = rem8u#20 + y#7 = y#16 + hiscore#3 = hiscore#8 + to:__start::@return +__start::@return: scope:[__start] from __start::@3 + hiscore#9 = phi( __start::@3/hiscore#3 ) + score#28 = phi( __start::@3/score#11 ) + time#16 = phi( __start::@3/time#7 ) + z#38 = phi( __start::@3/z#18 ) + y#17 = phi( __start::@3/y#7 ) + peephole#11 = phi( __start::@3/peephole#4 ) + duck#12 = phi( __start::@3/duck#4 ) + tu#12 = phi( __start::@3/tu#4 ) + n#12 = phi( __start::@3/n#5 ) + k#10 = phi( __start::@3/k#4 ) + j#22 = phi( __start::@3/j#9 ) + rem8u#21 = phi( __start::@3/rem8u#10 ) + rem8u#11 = rem8u#21 + j#10 = j#22 + k#5 = k#10 + n#6 = n#12 + tu#5 = tu#12 + duck#5 = duck#12 + peephole#5 = peephole#11 + y#8 = y#17 + z#19 = z#38 + time#8 = time#16 + score#12 = score#28 + hiscore#4 = hiscore#9 + return + to:@return + +SYMBOL TABLE SSA +__constant char BINARY = 2 +__constant char * const COLORRAM = (char *)$d800 +__constant char DECIMAL = $a +__constant char * const DEFAULT_SCREEN = (char *)$400 +__constant char DIGITS[] = "0123456789abcdef"z +__constant char HEXADECIMAL = $10 +__constant const char LIGHT_BLUE = $e +__constant char OCTAL = 8 +__constant char RADIX::BINARY = 2 +__constant char RADIX::DECIMAL = $a +__constant char RADIX::HEXADECIMAL = $10 +__constant char RADIX::OCTAL = 8 +__constant unsigned int RADIX_BINARY_VALUES[] = { $8000, $4000, $2000, $1000, $800, $400, $200, $100, $80, $40, $20, $10, 8, 4, 2 } +__constant unsigned int RADIX_DECIMAL_VALUES[] = { $2710, $3e8, $64, $a } +__constant unsigned int RADIX_HEXADECIMAL_VALUES[] = { $1000, $100, $10 } +__constant unsigned int RADIX_OCTAL_VALUES[] = { $8000, $1000, $200, $40, 8 } +__constant char SIZEOF_UNSIGNED_INT = 2 +void __start() +__constant const char brick = $e6 +__constant char buffer[] = { 0, 0, 0, 0 } +__constant const unsigned int c = $7800 +__constant const char chrono[] = { $54, $4d, $3a, $39 } +void chrono_restart() +void chrout(volatile char petscii) +__loadstore volatile char chrout::petscii +void clear_screen(char n , char m) +bool clear_screen::$2 +number clear_screen::$3 +number clear_screen::$4 +number clear_screen::$5 +char clear_screen::m +char clear_screen::m#0 +char clear_screen::m#1 +char clear_screen::m#2 +char clear_screen::m#3 +char clear_screen::m#4 +char clear_screen::m#5 +char clear_screen::n +char clear_screen::n#0 +char clear_screen::n#1 +char clear_screen::n#2 +char clear_screen::n#3 +char clear_screen::n#4 +char clear_screen::n#5 +void conio_c64_init() +bool conio_c64_init::$0 +bool conio_c64_init::$1 +__constant char * const conio_c64_init::BASIC_CURSOR_LINE = (char *)$d6 +char conio_c64_init::line +char conio_c64_init::line#0 +char conio_c64_init::line#1 +char conio_c64_init::line#2 +__loadstore char conio_cursor_x +__loadstore char conio_cursor_y +__loadstore char *conio_line_color +__loadstore char *conio_line_text +__loadstore char conio_scroll_enable +__loadstore char conio_textcolor +void cputc(char c) +bool cputc::$0 +bool cputc::$1 +bool cputc::$2 +char cputc::c +char cputc::c#0 +char cputc::c#1 +char cputc::c#2 +void cputln() +void cputs(const char *s) +char cputs::$0 +bool cputs::$2 +char cputs::c +char cputs::c#0 +char cputs::c#1 +char cputs::c#2 +const char *cputs::s +const char *cputs::s#0 +const char *cputs::s#1 +const char *cputs::s#10 +const char *cputs::s#11 +const char *cputs::s#12 +const char *cputs::s#13 +const char *cputs::s#2 +const char *cputs::s#3 +const char *cputs::s#4 +const char *cputs::s#5 +const char *cputs::s#6 +const char *cputs::s#7 +const char *cputs::s#8 +const char *cputs::s#9 +void cscroll() +bool cscroll::$0 +bool cscroll::$1 +bool cscroll::$7 +unsigned int div16u8u(unsigned int dividend , char divisor) +char div16u8u::$0 +char div16u8u::$2 +unsigned int div16u8u::dividend +unsigned int div16u8u::dividend#0 +unsigned int div16u8u::dividend#1 +unsigned int div16u8u::dividend#2 +char div16u8u::divisor +char div16u8u::divisor#0 +char div16u8u::divisor#1 +char div16u8u::divisor#2 +unsigned int div16u8u::quotient +unsigned int div16u8u::quotient#0 +char div16u8u::quotient_hi +char div16u8u::quotient_hi#0 +char div16u8u::quotient_hi#1 +char div16u8u::quotient_lo +char div16u8u::quotient_lo#0 +unsigned int div16u8u::return +unsigned int div16u8u::return#0 +unsigned int div16u8u::return#1 +unsigned int div16u8u::return#2 +unsigned int div16u8u::return#3 +unsigned int div16u8u::return#4 +char divr8u(char dividend , char divisor , char rem) +char divr8u::$0 +number divr8u::$1 +bool divr8u::$10 +bool divr8u::$2 +bool divr8u::$3 +number divr8u::$4 +char divr8u::$5 +char divr8u::$6 +bool divr8u::$7 +bool divr8u::$8 +char divr8u::$9 +char divr8u::dividend +char divr8u::dividend#0 +char divr8u::dividend#1 +char divr8u::dividend#2 +char divr8u::dividend#3 +char divr8u::dividend#4 +char divr8u::dividend#5 +char divr8u::dividend#6 +char divr8u::dividend#7 +char divr8u::dividend#8 +char divr8u::divisor +char divr8u::divisor#0 +char divr8u::divisor#1 +char divr8u::divisor#2 +char divr8u::divisor#3 +char divr8u::divisor#4 +char divr8u::divisor#5 +char divr8u::divisor#6 +char divr8u::divisor#7 +char divr8u::i +char divr8u::i#0 +char divr8u::i#1 +char divr8u::i#2 +char divr8u::i#3 +char divr8u::i#4 +char divr8u::i#5 +char divr8u::i#6 +char divr8u::quotient +char divr8u::quotient#0 +char divr8u::quotient#1 +char divr8u::quotient#2 +char divr8u::quotient#3 +char divr8u::quotient#4 +char divr8u::quotient#5 +char divr8u::quotient#6 +char divr8u::quotient#7 +char divr8u::quotient#8 +char divr8u::rem +char divr8u::rem#0 +char divr8u::rem#1 +char divr8u::rem#10 +char divr8u::rem#11 +char divr8u::rem#2 +char divr8u::rem#3 +char divr8u::rem#4 +char divr8u::rem#5 +char divr8u::rem#6 +char divr8u::rem#7 +char divr8u::rem#8 +char divr8u::rem#9 +char divr8u::return +char divr8u::return#0 +char divr8u::return#1 +char divr8u::return#2 +char divr8u::return#3 +char divr8u::return#4 +char divr8u::return#5 +char divr8u::return#6 +__constant const char down = $11 +unsigned int duck +unsigned int duck#0 +unsigned int duck#1 +unsigned int duck#10 +unsigned int duck#11 +unsigned int duck#12 +unsigned int duck#13 +unsigned int duck#14 +unsigned int duck#15 +unsigned int duck#16 +unsigned int duck#17 +unsigned int duck#18 +unsigned int duck#19 +unsigned int duck#2 +unsigned int duck#20 +unsigned int duck#21 +unsigned int duck#22 +unsigned int duck#23 +unsigned int duck#24 +unsigned int duck#25 +unsigned int duck#26 +unsigned int duck#27 +unsigned int duck#28 +unsigned int duck#29 +unsigned int duck#3 +unsigned int duck#30 +unsigned int duck#31 +unsigned int duck#32 +unsigned int duck#33 +unsigned int duck#34 +unsigned int duck#35 +unsigned int duck#36 +unsigned int duck#37 +unsigned int duck#38 +unsigned int duck#39 +unsigned int duck#4 +unsigned int duck#40 +unsigned int duck#41 +unsigned int duck#42 +unsigned int duck#43 +unsigned int duck#44 +unsigned int duck#45 +unsigned int duck#46 +unsigned int duck#47 +unsigned int duck#48 +unsigned int duck#49 +unsigned int duck#5 +unsigned int duck#50 +unsigned int duck#51 +unsigned int duck#52 +unsigned int duck#53 +unsigned int duck#54 +unsigned int duck#55 +unsigned int duck#56 +unsigned int duck#57 +unsigned int duck#58 +unsigned int duck#6 +unsigned int duck#7 +unsigned int duck#8 +unsigned int duck#9 +__constant const char duck_udg[] = { $e, $1b, $3f, $1f, $f, 7, $f, $1f, 0, 0, 0, 0, 0, $c0, $70, $bc, $1f, $1d, $1e, $f, 3, 1, 1, 3, $ce, $1e, $7c, $f8, $e0, $40, $40, $e0, 0, 0, 0, 0, 0, 0, 0, 0 } +__constant const char ducknumber[] = { $44, $55, $43, $4b, $3a } +__constant const char foot[] = "PRESS: 1,3,5,7 or 9 + +" +__constant const char game_over[] = " + + + +GAME OVER" +void gotoxy(char x , char y) +bool gotoxy::$0 +bool gotoxy::$1 +bool gotoxy::$2 +bool gotoxy::$3 +char *gotoxy::$5 +char *gotoxy::$6 +unsigned int gotoxy::$7 +unsigned int gotoxy::line_offset +unsigned int gotoxy::line_offset#0 +char gotoxy::x +char gotoxy::x#0 +char gotoxy::x#1 +char gotoxy::x#2 +char gotoxy::x#3 +char gotoxy::x#4 +char gotoxy::x#5 +char gotoxy::x#6 +char gotoxy::x#7 +char gotoxy::y +char gotoxy::y#0 +char gotoxy::y#1 +char gotoxy::y#2 +char gotoxy::y#3 +char gotoxy::y#4 +char gotoxy::y#5 +char gotoxy::y#6 +char gotoxy::y#7 +__constant const char green = $1e +__constant const char high_score[] = " + +Hi-Score: " +unsigned int hiscore +unsigned int hiscore#0 +unsigned int hiscore#1 +unsigned int hiscore#10 +unsigned int hiscore#100 +unsigned int hiscore#101 +unsigned int hiscore#102 +unsigned int hiscore#103 +unsigned int hiscore#104 +unsigned int hiscore#105 +unsigned int hiscore#106 +unsigned int hiscore#107 +unsigned int hiscore#108 +unsigned int hiscore#109 +unsigned int hiscore#11 +unsigned int hiscore#110 +unsigned int hiscore#111 +unsigned int hiscore#112 +unsigned int hiscore#113 +unsigned int hiscore#114 +unsigned int hiscore#115 +unsigned int hiscore#116 +unsigned int hiscore#117 +unsigned int hiscore#118 +unsigned int hiscore#119 +unsigned int hiscore#12 +unsigned int hiscore#120 +unsigned int hiscore#121 +unsigned int hiscore#122 +unsigned int hiscore#13 +unsigned int hiscore#14 +unsigned int hiscore#15 +unsigned int hiscore#16 +unsigned int hiscore#17 +unsigned int hiscore#18 +unsigned int hiscore#19 +unsigned int hiscore#2 +unsigned int hiscore#20 +unsigned int hiscore#21 +unsigned int hiscore#22 +unsigned int hiscore#23 +unsigned int hiscore#24 +unsigned int hiscore#25 +unsigned int hiscore#26 +unsigned int hiscore#27 +unsigned int hiscore#28 +unsigned int hiscore#29 +unsigned int hiscore#3 +unsigned int hiscore#30 +unsigned int hiscore#31 +unsigned int hiscore#32 +unsigned int hiscore#33 +unsigned int hiscore#34 +unsigned int hiscore#35 +unsigned int hiscore#36 +unsigned int hiscore#37 +unsigned int hiscore#38 +unsigned int hiscore#39 +unsigned int hiscore#4 +unsigned int hiscore#40 +unsigned int hiscore#41 +unsigned int hiscore#42 +unsigned int hiscore#43 +unsigned int hiscore#44 +unsigned int hiscore#45 +unsigned int hiscore#46 +unsigned int hiscore#47 +unsigned int hiscore#48 +unsigned int hiscore#49 +unsigned int hiscore#5 +unsigned int hiscore#50 +unsigned int hiscore#51 +unsigned int hiscore#52 +unsigned int hiscore#53 +unsigned int hiscore#54 +unsigned int hiscore#55 +unsigned int hiscore#56 +unsigned int hiscore#57 +unsigned int hiscore#58 +unsigned int hiscore#59 +unsigned int hiscore#6 +unsigned int hiscore#60 +unsigned int hiscore#61 +unsigned int hiscore#62 +unsigned int hiscore#63 +unsigned int hiscore#64 +unsigned int hiscore#65 +unsigned int hiscore#66 +unsigned int hiscore#67 +unsigned int hiscore#68 +unsigned int hiscore#69 +unsigned int hiscore#7 +unsigned int hiscore#70 +unsigned int hiscore#71 +unsigned int hiscore#72 +unsigned int hiscore#73 +unsigned int hiscore#74 +unsigned int hiscore#75 +unsigned int hiscore#76 +unsigned int hiscore#77 +unsigned int hiscore#78 +unsigned int hiscore#79 +unsigned int hiscore#8 +unsigned int hiscore#80 +unsigned int hiscore#81 +unsigned int hiscore#82 +unsigned int hiscore#83 +unsigned int hiscore#84 +unsigned int hiscore#85 +unsigned int hiscore#86 +unsigned int hiscore#87 +unsigned int hiscore#88 +unsigned int hiscore#89 +unsigned int hiscore#9 +unsigned int hiscore#90 +unsigned int hiscore#91 +unsigned int hiscore#92 +unsigned int hiscore#93 +unsigned int hiscore#94 +unsigned int hiscore#95 +unsigned int hiscore#96 +unsigned int hiscore#97 +unsigned int hiscore#98 +unsigned int hiscore#99 +__constant const char home = $13 +__constant const char intro[] = " + + +DIFFICULTY +---------- + + +" +char j +char j#0 +char j#1 +char j#10 +char j#11 +char j#12 +char j#13 +char j#14 +char j#15 +char j#16 +char j#17 +char j#18 +char j#19 +char j#2 +char j#20 +char j#21 +char j#22 +char j#23 +char j#24 +char j#25 +char j#26 +char j#3 +char j#4 +char j#5 +char j#6 +char j#7 +char j#8 +char j#9 +char k +char k#0 +char k#1 +char k#10 +char k#100 +char k#101 +char k#102 +char k#103 +char k#104 +char k#105 +char k#11 +char k#12 +char k#13 +char k#14 +char k#15 +char k#16 +char k#17 +char k#18 +char k#19 +char k#2 +char k#20 +char k#21 +char k#22 +char k#23 +char k#24 +char k#25 +char k#26 +char k#27 +char k#28 +char k#29 +char k#3 +char k#30 +char k#31 +char k#32 +char k#33 +char k#34 +char k#35 +char k#36 +char k#37 +char k#38 +char k#39 +char k#4 +char k#40 +char k#41 +char k#42 +char k#43 +char k#44 +char k#45 +char k#46 +char k#47 +char k#48 +char k#49 +char k#5 +char k#50 +char k#51 +char k#52 +char k#53 +char k#54 +char k#55 +char k#56 +char k#57 +char k#58 +char k#59 +char k#6 +char k#60 +char k#61 +char k#62 +char k#63 +char k#64 +char k#65 +char k#66 +char k#67 +char k#68 +char k#69 +char k#7 +char k#70 +char k#71 +char k#72 +char k#73 +char k#74 +char k#75 +char k#76 +char k#77 +char k#78 +char k#79 +char k#8 +char k#80 +char k#81 +char k#82 +char k#83 +char k#84 +char k#85 +char k#86 +char k#87 +char k#88 +char k#89 +char k#9 +char k#90 +char k#91 +char k#92 +char k#93 +char k#94 +char k#95 +char k#96 +char k#97 +char k#98 +char k#99 +__loadstore volatile char l +__constant const char levels[] = "1.EASIEST + +3.EASY + +5.MEDIUM + +7.HARD + +9.EXPERT + + + + +" +__constant const char lock = 8 +__constant const char lower = $e +__loadstore volatile char m +void main() +number main::$100 +bool main::$103 +number main::$104 +bool main::$105 +bool main::$106 +number main::$107 +bool main::$108 +bool main::$109 +bool main::$11 +number main::$110 +bool main::$111 +bool main::$112 +bool main::$113 +bool main::$114 +bool main::$115 +bool main::$116 +bool main::$117 +unsigned int main::$118 +unsigned int main::$119 +number main::$120 +unsigned int main::$121 +number main::$122 +unsigned int main::$123 +number main::$124 +unsigned int main::$125 +number main::$126 +number main::$127 +number main::$128 +number main::$129 +number main::$130 +number main::$131 +number main::$132 +number main::$133 +number main::$134 +unsigned int main::$136 +number main::$137 +number main::$138 +number main::$139 +number main::$140 +number main::$141 +number main::$142 +number main::$143 +number main::$144 +number main::$145 +number main::$147 +unsigned int main::$150 +number main::$151 +number main::$152 +number main::$153 +number main::$154 +number main::$155 +number main::$156 +bool main::$157 +bool main::$16 +bool main::$167 +bool main::$168 +bool main::$173 +bool main::$174 +bool main::$175 +bool main::$176 +bool main::$18 +bool main::$2 +bool main::$23 +bool main::$24 +number main::$25 +number main::$26 +number main::$27 +unsigned int main::$29 +number main::$3 +bool main::$30 +bool main::$31 +bool main::$32 +unsigned int main::$35 +number main::$36 +bool main::$37 +bool main::$44 +bool main::$49 +bool main::$54 +number main::$57 +number main::$61 +number main::$62 +bool main::$63 +bool main::$64 +bool main::$65 +number main::$66 +bool main::$67 +bool main::$68 +number main::$69 +bool main::$70 +bool main::$71 +number main::$72 +bool main::$73 +bool main::$74 +bool main::$76 +number main::$78 +bool main::$79 +bool main::$80 +number main::$81 +bool main::$82 +bool main::$83 +number main::$84 +bool main::$85 +bool main::$86 +number main::$87 +number main::$88 +bool main::$89 +bool main::$90 +number main::$91 +number main::$92 +bool main::$93 +bool main::$94 +bool main::$95 +number main::$96 +number main::$97 +number main::$98 +void * memcpy(void *destination , void *source , unsigned int num) +bool memcpy::$1 +char *memcpy::$2 +void *memcpy::destination +void *memcpy::destination#0 +void *memcpy::destination#1 +void *memcpy::destination#2 +void *memcpy::destination#3 +void *memcpy::destination#4 +void *memcpy::destination#5 +char *memcpy::dst +char *memcpy::dst#0 +char *memcpy::dst#1 +char *memcpy::dst#2 +char *memcpy::dst#3 +unsigned int memcpy::num +unsigned int memcpy::num#0 +unsigned int memcpy::num#1 +unsigned int memcpy::num#2 +void *memcpy::return +void *memcpy::return#0 +void *memcpy::return#1 +void *memcpy::return#2 +void *memcpy::return#3 +void *memcpy::return#4 +void *memcpy::source +void *memcpy::source#0 +void *memcpy::source#1 +void *memcpy::source#2 +char *memcpy::src +char *memcpy::src#0 +char *memcpy::src#1 +char *memcpy::src#2 +char *memcpy::src#3 +char *memcpy::src_end +char *memcpy::src_end#0 +char *memcpy::src_end#1 +char *memcpy::src_end#2 +void * memset(void *str , char c , unsigned int num) +bool memset::$0 +bool memset::$1 +bool memset::$3 +char *memset::$4 +char memset::c +char memset::c#0 +char memset::c#1 +char memset::c#2 +char memset::c#3 +char memset::c#4 +char memset::c#5 +char *memset::dst +char *memset::dst#0 +char *memset::dst#1 +char *memset::dst#2 +char *memset::dst#3 +char *memset::end +char *memset::end#0 +char *memset::end#1 +char *memset::end#2 +unsigned int memset::num +unsigned int memset::num#0 +unsigned int memset::num#1 +unsigned int memset::num#2 +unsigned int memset::num#3 +void *memset::return +void *memset::return#0 +void *memset::return#1 +void *memset::return#2 +void *memset::return#3 +void *memset::return#4 +void *memset::str +void *memset::str#0 +void *memset::str#1 +void *memset::str#2 +void *memset::str#3 +void *memset::str#4 +void *memset::str#5 +void *memset::str#6 +char n +char n#0 +char n#1 +char n#10 +char n#100 +char n#101 +char n#102 +char n#103 +char n#104 +char n#105 +char n#106 +char n#107 +char n#108 +char n#109 +char n#11 +char n#110 +char n#111 +char n#112 +char n#113 +char n#114 +char n#115 +char n#116 +char n#117 +char n#118 +char n#119 +char n#12 +char n#120 +char n#121 +char n#13 +char n#14 +char n#15 +char n#16 +char n#17 +char n#18 +char n#19 +char n#2 +char n#20 +char n#21 +char n#22 +char n#23 +char n#24 +char n#25 +char n#26 +char n#27 +char n#28 +char n#29 +char n#3 +char n#30 +char n#31 +char n#32 +char n#33 +char n#34 +char n#35 +char n#36 +char n#37 +char n#38 +char n#39 +char n#4 +char n#40 +char n#41 +char n#42 +char n#43 +char n#44 +char n#45 +char n#46 +char n#47 +char n#48 +char n#49 +char n#5 +char n#50 +char n#51 +char n#52 +char n#53 +char n#54 +char n#55 +char n#56 +char n#57 +char n#58 +char n#59 +char n#6 +char n#60 +char n#61 +char n#62 +char n#63 +char n#64 +char n#65 +char n#66 +char n#67 +char n#68 +char n#69 +char n#7 +char n#70 +char n#71 +char n#72 +char n#73 +char n#74 +char n#75 +char n#76 +char n#77 +char n#78 +char n#79 +char n#8 +char n#80 +char n#81 +char n#82 +char n#83 +char n#84 +char n#85 +char n#86 +char n#87 +char n#88 +char n#89 +char n#9 +char n#90 +char n#91 +char n#92 +char n#93 +char n#94 +char n#95 +char n#96 +char n#97 +char n#98 +char n#99 +unsigned int peephole +unsigned int peephole#0 +unsigned int peephole#1 +unsigned int peephole#10 +unsigned int peephole#11 +unsigned int peephole#12 +unsigned int peephole#13 +unsigned int peephole#14 +unsigned int peephole#15 +unsigned int peephole#16 +unsigned int peephole#17 +unsigned int peephole#18 +unsigned int peephole#19 +unsigned int peephole#2 +unsigned int peephole#20 +unsigned int peephole#21 +unsigned int peephole#22 +unsigned int peephole#23 +unsigned int peephole#24 +unsigned int peephole#25 +unsigned int peephole#26 +unsigned int peephole#27 +unsigned int peephole#28 +unsigned int peephole#29 +unsigned int peephole#3 +unsigned int peephole#30 +unsigned int peephole#31 +unsigned int peephole#32 +unsigned int peephole#33 +unsigned int peephole#34 +unsigned int peephole#35 +unsigned int peephole#36 +unsigned int peephole#37 +unsigned int peephole#38 +unsigned int peephole#39 +unsigned int peephole#4 +unsigned int peephole#40 +unsigned int peephole#41 +unsigned int peephole#42 +unsigned int peephole#43 +unsigned int peephole#44 +unsigned int peephole#45 +unsigned int peephole#46 +unsigned int peephole#47 +unsigned int peephole#48 +unsigned int peephole#49 +unsigned int peephole#5 +unsigned int peephole#50 +unsigned int peephole#51 +unsigned int peephole#52 +unsigned int peephole#53 +unsigned int peephole#54 +unsigned int peephole#55 +unsigned int peephole#56 +unsigned int peephole#57 +unsigned int peephole#58 +unsigned int peephole#59 +unsigned int peephole#6 +unsigned int peephole#60 +unsigned int peephole#61 +unsigned int peephole#62 +unsigned int peephole#63 +unsigned int peephole#64 +unsigned int peephole#65 +unsigned int peephole#66 +unsigned int peephole#67 +unsigned int peephole#68 +unsigned int peephole#69 +unsigned int peephole#7 +unsigned int peephole#70 +unsigned int peephole#71 +unsigned int peephole#72 +unsigned int peephole#73 +unsigned int peephole#74 +unsigned int peephole#75 +unsigned int peephole#76 +unsigned int peephole#77 +unsigned int peephole#78 +unsigned int peephole#79 +unsigned int peephole#8 +unsigned int peephole#80 +unsigned int peephole#81 +unsigned int peephole#82 +unsigned int peephole#83 +unsigned int peephole#84 +unsigned int peephole#85 +unsigned int peephole#9 +__constant const char play_again[] = " + + +Play Again (Y/N)?" +__constant char points[] = { 0, 0, 0, 0 } +void random(char k , char n) +bool random::$0 +bool random::$1 +bool random::$2 +char random::k +char random::k#0 +char random::k#1 +char random::k#2 +char random::k#3 +char random::k#4 +char random::n +char random::n#0 +char random::n#1 +char random::n#2 +char random::n#3 +char random::n#4 +void read_chrono() +number read_chrono::$0 +number read_chrono::$1 +unsigned int read_chrono::$2 +bool read_chrono::$3 +bool read_chrono::$4 +number read_chrono::$5 +__constant const char red = $1c +char rem8u +char rem8u#0 +char rem8u#1 +char rem8u#10 +char rem8u#100 +char rem8u#101 +char rem8u#102 +char rem8u#103 +char rem8u#104 +char rem8u#105 +char rem8u#106 +char rem8u#107 +char rem8u#108 +char rem8u#109 +char rem8u#11 +char rem8u#110 +char rem8u#111 +char rem8u#112 +char rem8u#113 +char rem8u#114 +char rem8u#115 +char rem8u#116 +char rem8u#117 +char rem8u#118 +char rem8u#119 +char rem8u#12 +char rem8u#120 +char rem8u#121 +char rem8u#122 +char rem8u#123 +char rem8u#124 +char rem8u#125 +char rem8u#126 +char rem8u#127 +char rem8u#128 +char rem8u#129 +char rem8u#13 +char rem8u#130 +char rem8u#131 +char rem8u#132 +char rem8u#133 +char rem8u#134 +char rem8u#135 +char rem8u#136 +char rem8u#137 +char rem8u#138 +char rem8u#139 +char rem8u#14 +char rem8u#15 +char rem8u#16 +char rem8u#17 +char rem8u#18 +char rem8u#19 +char rem8u#2 +char rem8u#20 +char rem8u#21 +char rem8u#22 +char rem8u#23 +char rem8u#24 +char rem8u#25 +char rem8u#26 +char rem8u#27 +char rem8u#28 +char rem8u#29 +char rem8u#3 +char rem8u#30 +char rem8u#31 +char rem8u#32 +char rem8u#33 +char rem8u#34 +char rem8u#35 +char rem8u#36 +char rem8u#37 +char rem8u#38 +char rem8u#39 +char rem8u#4 +char rem8u#40 +char rem8u#41 +char rem8u#42 +char rem8u#43 +char rem8u#44 +char rem8u#45 +char rem8u#46 +char rem8u#47 +char rem8u#48 +char rem8u#49 +char rem8u#5 +char rem8u#50 +char rem8u#51 +char rem8u#52 +char rem8u#53 +char rem8u#54 +char rem8u#55 +char rem8u#56 +char rem8u#57 +char rem8u#58 +char rem8u#59 +char rem8u#6 +char rem8u#60 +char rem8u#61 +char rem8u#62 +char rem8u#63 +char rem8u#64 +char rem8u#65 +char rem8u#66 +char rem8u#67 +char rem8u#68 +char rem8u#69 +char rem8u#7 +char rem8u#70 +char rem8u#71 +char rem8u#72 +char rem8u#73 +char rem8u#74 +char rem8u#75 +char rem8u#76 +char rem8u#77 +char rem8u#78 +char rem8u#79 +char rem8u#8 +char rem8u#80 +char rem8u#81 +char rem8u#82 +char rem8u#83 +char rem8u#84 +char rem8u#85 +char rem8u#86 +char rem8u#87 +char rem8u#88 +char rem8u#89 +char rem8u#9 +char rem8u#90 +char rem8u#91 +char rem8u#92 +char rem8u#93 +char rem8u#94 +char rem8u#95 +char rem8u#96 +char rem8u#97 +char rem8u#98 +char rem8u#99 +__constant const char reverse_on = $12 +__constant const char right = $1d +unsigned int score +unsigned int score#0 +unsigned int score#1 +unsigned int score#10 +unsigned int score#100 +unsigned int score#101 +unsigned int score#102 +unsigned int score#103 +unsigned int score#104 +unsigned int score#105 +unsigned int score#106 +unsigned int score#107 +unsigned int score#108 +unsigned int score#11 +unsigned int score#12 +unsigned int score#13 +unsigned int score#14 +unsigned int score#15 +unsigned int score#16 +unsigned int score#17 +unsigned int score#18 +unsigned int score#19 +unsigned int score#2 +unsigned int score#20 +unsigned int score#21 +unsigned int score#22 +unsigned int score#23 +unsigned int score#24 +unsigned int score#25 +unsigned int score#26 +unsigned int score#27 +unsigned int score#28 +unsigned int score#29 +unsigned int score#3 +unsigned int score#30 +unsigned int score#31 +unsigned int score#32 +unsigned int score#33 +unsigned int score#34 +unsigned int score#35 +unsigned int score#36 +unsigned int score#37 +unsigned int score#38 +unsigned int score#39 +unsigned int score#4 +unsigned int score#40 +unsigned int score#41 +unsigned int score#42 +unsigned int score#43 +unsigned int score#44 +unsigned int score#45 +unsigned int score#46 +unsigned int score#47 +unsigned int score#48 +unsigned int score#49 +unsigned int score#5 +unsigned int score#50 +unsigned int score#51 +unsigned int score#52 +unsigned int score#53 +unsigned int score#54 +unsigned int score#55 +unsigned int score#56 +unsigned int score#57 +unsigned int score#58 +unsigned int score#59 +unsigned int score#6 +unsigned int score#60 +unsigned int score#61 +unsigned int score#62 +unsigned int score#63 +unsigned int score#64 +unsigned int score#65 +unsigned int score#66 +unsigned int score#67 +unsigned int score#68 +unsigned int score#69 +unsigned int score#7 +unsigned int score#70 +unsigned int score#71 +unsigned int score#72 +unsigned int score#73 +unsigned int score#74 +unsigned int score#75 +unsigned int score#76 +unsigned int score#77 +unsigned int score#78 +unsigned int score#79 +unsigned int score#8 +unsigned int score#80 +unsigned int score#81 +unsigned int score#82 +unsigned int score#83 +unsigned int score#84 +unsigned int score#85 +unsigned int score#86 +unsigned int score#87 +unsigned int score#88 +unsigned int score#89 +unsigned int score#9 +unsigned int score#90 +unsigned int score#91 +unsigned int score#92 +unsigned int score#93 +unsigned int score#94 +unsigned int score#95 +unsigned int score#96 +unsigned int score#97 +unsigned int score#98 +unsigned int score#99 +char textcolor(char color) +char textcolor::color +char textcolor::color#0 +char textcolor::color#1 +char textcolor::color#2 +char textcolor::color#3 +char textcolor::color#4 +char textcolor::color#5 +char textcolor::color#6 +char textcolor::color#7 +char textcolor::old +char textcolor::old#0 +char textcolor::return +char textcolor::return#0 +char textcolor::return#1 +char textcolor::return#2 +char textcolor::return#3 +char textcolor::return#4 +char textcolor::return#5 +char textcolor::return#6 +char textcolor::return#7 +char textcolor::return#8 +char textcolor::return#9 +unsigned int time +unsigned int time#0 +unsigned int time#1 +unsigned int time#10 +unsigned int time#11 +unsigned int time#12 +unsigned int time#13 +unsigned int time#14 +unsigned int time#15 +unsigned int time#16 +unsigned int time#17 +unsigned int time#18 +unsigned int time#19 +unsigned int time#2 +unsigned int time#20 +unsigned int time#21 +unsigned int time#22 +unsigned int time#23 +unsigned int time#24 +unsigned int time#25 +unsigned int time#26 +unsigned int time#27 +unsigned int time#28 +unsigned int time#29 +unsigned int time#3 +unsigned int time#30 +unsigned int time#31 +unsigned int time#32 +unsigned int time#33 +unsigned int time#34 +unsigned int time#35 +unsigned int time#36 +unsigned int time#37 +unsigned int time#38 +unsigned int time#39 +unsigned int time#4 +unsigned int time#40 +unsigned int time#41 +unsigned int time#42 +unsigned int time#43 +unsigned int time#44 +unsigned int time#45 +unsigned int time#46 +unsigned int time#47 +unsigned int time#48 +unsigned int time#49 +unsigned int time#5 +unsigned int time#50 +unsigned int time#51 +unsigned int time#52 +unsigned int time#53 +unsigned int time#54 +unsigned int time#55 +unsigned int time#56 +unsigned int time#57 +unsigned int time#58 +unsigned int time#59 +unsigned int time#6 +unsigned int time#60 +unsigned int time#7 +unsigned int time#8 +unsigned int time#9 +unsigned int tu +unsigned int tu#0 +unsigned int tu#1 +unsigned int tu#10 +unsigned int tu#11 +unsigned int tu#12 +unsigned int tu#13 +unsigned int tu#14 +unsigned int tu#15 +unsigned int tu#16 +unsigned int tu#17 +unsigned int tu#18 +unsigned int tu#19 +unsigned int tu#2 +unsigned int tu#20 +unsigned int tu#21 +unsigned int tu#22 +unsigned int tu#23 +unsigned int tu#24 +unsigned int tu#25 +unsigned int tu#26 +unsigned int tu#27 +unsigned int tu#28 +unsigned int tu#29 +unsigned int tu#3 +unsigned int tu#30 +unsigned int tu#31 +unsigned int tu#32 +unsigned int tu#33 +unsigned int tu#34 +unsigned int tu#35 +unsigned int tu#36 +unsigned int tu#37 +unsigned int tu#38 +unsigned int tu#39 +unsigned int tu#4 +unsigned int tu#40 +unsigned int tu#41 +unsigned int tu#42 +unsigned int tu#43 +unsigned int tu#44 +unsigned int tu#45 +unsigned int tu#46 +unsigned int tu#47 +unsigned int tu#48 +unsigned int tu#49 +unsigned int tu#5 +unsigned int tu#50 +unsigned int tu#51 +unsigned int tu#52 +unsigned int tu#53 +unsigned int tu#54 +unsigned int tu#55 +unsigned int tu#56 +unsigned int tu#57 +unsigned int tu#58 +unsigned int tu#59 +unsigned int tu#6 +unsigned int tu#60 +unsigned int tu#61 +unsigned int tu#62 +unsigned int tu#63 +unsigned int tu#64 +unsigned int tu#65 +unsigned int tu#66 +unsigned int tu#67 +unsigned int tu#68 +unsigned int tu#69 +unsigned int tu#7 +unsigned int tu#70 +unsigned int tu#71 +unsigned int tu#72 +unsigned int tu#73 +unsigned int tu#74 +unsigned int tu#75 +unsigned int tu#76 +unsigned int tu#77 +unsigned int tu#78 +unsigned int tu#79 +unsigned int tu#8 +unsigned int tu#80 +unsigned int tu#81 +unsigned int tu#82 +unsigned int tu#83 +unsigned int tu#84 +unsigned int tu#85 +unsigned int tu#9 +void utoa(unsigned int value , char *buffer , char radix) +bool utoa::$0 +bool utoa::$1 +char utoa::$10 +char utoa::$11 +bool utoa::$2 +bool utoa::$3 +number utoa::$4 +bool utoa::$5 +bool utoa::$6 +bool utoa::$7 +bool utoa::$8 +unsigned int utoa::$9 +char *utoa::buffer +char *utoa::buffer#0 +char *utoa::buffer#1 +char *utoa::buffer#10 +char *utoa::buffer#11 +char *utoa::buffer#12 +char *utoa::buffer#13 +char *utoa::buffer#14 +char *utoa::buffer#15 +char *utoa::buffer#16 +char *utoa::buffer#17 +char *utoa::buffer#18 +char *utoa::buffer#19 +char *utoa::buffer#2 +char *utoa::buffer#20 +char *utoa::buffer#21 +char *utoa::buffer#22 +char *utoa::buffer#3 +char *utoa::buffer#4 +char *utoa::buffer#5 +char *utoa::buffer#6 +char *utoa::buffer#7 +char *utoa::buffer#8 +char *utoa::buffer#9 +char utoa::digit +char utoa::digit#0 +char utoa::digit#1 +char utoa::digit#2 +char utoa::digit#3 +char utoa::digit#4 +char utoa::digit#5 +char utoa::digit#6 +unsigned int utoa::digit_value +unsigned int utoa::digit_value#0 +unsigned int utoa::digit_value#1 +unsigned int *utoa::digit_values +unsigned int *utoa::digit_values#0 +unsigned int *utoa::digit_values#1 +unsigned int *utoa::digit_values#10 +unsigned int *utoa::digit_values#2 +unsigned int *utoa::digit_values#3 +unsigned int *utoa::digit_values#4 +unsigned int *utoa::digit_values#5 +unsigned int *utoa::digit_values#6 +unsigned int *utoa::digit_values#7 +unsigned int *utoa::digit_values#8 +unsigned int *utoa::digit_values#9 +char utoa::max_digits +char utoa::max_digits#0 +char utoa::max_digits#1 +char utoa::max_digits#10 +char utoa::max_digits#2 +char utoa::max_digits#3 +char utoa::max_digits#4 +char utoa::max_digits#5 +char utoa::max_digits#6 +char utoa::max_digits#7 +char utoa::max_digits#8 +char utoa::max_digits#9 +char utoa::radix +char utoa::radix#0 +char utoa::radix#1 +char utoa::radix#2 +char utoa::radix#3 +char utoa::radix#4 +char utoa::radix#5 +char utoa::started +char utoa::started#0 +char utoa::started#1 +char utoa::started#2 +char utoa::started#3 +char utoa::started#4 +unsigned int utoa::value +unsigned int utoa::value#0 +unsigned int utoa::value#1 +unsigned int utoa::value#10 +unsigned int utoa::value#11 +unsigned int utoa::value#12 +unsigned int utoa::value#13 +unsigned int utoa::value#14 +unsigned int utoa::value#15 +unsigned int utoa::value#16 +unsigned int utoa::value#2 +unsigned int utoa::value#3 +unsigned int utoa::value#4 +unsigned int utoa::value#5 +unsigned int utoa::value#6 +unsigned int utoa::value#7 +unsigned int utoa::value#8 +unsigned int utoa::value#9 +unsigned int utoa_append(char *buffer , unsigned int value , unsigned int sub) +bool utoa_append::$0 +char *utoa_append::buffer +char *utoa_append::buffer#0 +char *utoa_append::buffer#1 +char *utoa_append::buffer#2 +char *utoa_append::buffer#3 +char *utoa_append::buffer#4 +char utoa_append::digit +char utoa_append::digit#0 +char utoa_append::digit#1 +char utoa_append::digit#2 +char utoa_append::digit#3 +char utoa_append::digit#4 +unsigned int utoa_append::return +unsigned int utoa_append::return#0 +unsigned int utoa_append::return#1 +unsigned int utoa_append::return#2 +unsigned int utoa_append::return#3 +unsigned int utoa_append::return#4 +unsigned int utoa_append::sub +unsigned int utoa_append::sub#0 +unsigned int utoa_append::sub#1 +unsigned int utoa_append::sub#2 +unsigned int utoa_append::sub#3 +unsigned int utoa_append::value +unsigned int utoa_append::value#0 +unsigned int utoa_append::value#1 +unsigned int utoa_append::value#2 +unsigned int utoa_append::value#3 +unsigned int utoa_append::value#4 +unsigned int utoa_append::value#5 +void wait(char n) +bool wait::$0 +bool wait::$1 +char wait::n +char wait::n#0 +char wait::n#1 +char wait::n#10 +char wait::n#2 +char wait::n#3 +char wait::n#4 +char wait::n#5 +char wait::n#6 +char wait::n#7 +char wait::n#8 +char wait::n#9 +void write_score() +bool write_score::$0 +bool write_score::$1 +bool write_score::$10 +bool write_score::$3 +bool write_score::$4 +bool write_score::$5 +bool write_score::$6 +bool write_score::$9 +unsigned int y +unsigned int y#0 +unsigned int y#1 +unsigned int y#10 +unsigned int y#100 +unsigned int y#101 +unsigned int y#102 +unsigned int y#103 +unsigned int y#104 +unsigned int y#105 +unsigned int y#106 +unsigned int y#107 +unsigned int y#108 +unsigned int y#109 +unsigned int y#11 +unsigned int y#110 +unsigned int y#111 +unsigned int y#112 +unsigned int y#113 +unsigned int y#114 +unsigned int y#115 +unsigned int y#116 +unsigned int y#117 +unsigned int y#118 +unsigned int y#119 +unsigned int y#12 +unsigned int y#120 +unsigned int y#121 +unsigned int y#122 +unsigned int y#123 +unsigned int y#124 +unsigned int y#125 +unsigned int y#126 +unsigned int y#13 +unsigned int y#14 +unsigned int y#15 +unsigned int y#16 +unsigned int y#17 +unsigned int y#18 +unsigned int y#19 +unsigned int y#2 +unsigned int y#20 +unsigned int y#21 +unsigned int y#22 +unsigned int y#23 +unsigned int y#24 +unsigned int y#25 +unsigned int y#26 +unsigned int y#27 +unsigned int y#28 +unsigned int y#29 +unsigned int y#3 +unsigned int y#30 +unsigned int y#31 +unsigned int y#32 +unsigned int y#33 +unsigned int y#34 +unsigned int y#35 +unsigned int y#36 +unsigned int y#37 +unsigned int y#38 +unsigned int y#39 +unsigned int y#4 +unsigned int y#40 +unsigned int y#41 +unsigned int y#42 +unsigned int y#43 +unsigned int y#44 +unsigned int y#45 +unsigned int y#46 +unsigned int y#47 +unsigned int y#48 +unsigned int y#49 +unsigned int y#5 +unsigned int y#50 +unsigned int y#51 +unsigned int y#52 +unsigned int y#53 +unsigned int y#54 +unsigned int y#55 +unsigned int y#56 +unsigned int y#57 +unsigned int y#58 +unsigned int y#59 +unsigned int y#6 +unsigned int y#60 +unsigned int y#61 +unsigned int y#62 +unsigned int y#63 +unsigned int y#64 +unsigned int y#65 +unsigned int y#66 +unsigned int y#67 +unsigned int y#68 +unsigned int y#69 +unsigned int y#7 +unsigned int y#70 +unsigned int y#71 +unsigned int y#72 +unsigned int y#73 +unsigned int y#74 +unsigned int y#75 +unsigned int y#76 +unsigned int y#77 +unsigned int y#78 +unsigned int y#79 +unsigned int y#8 +unsigned int y#80 +unsigned int y#81 +unsigned int y#82 +unsigned int y#83 +unsigned int y#84 +unsigned int y#85 +unsigned int y#86 +unsigned int y#87 +unsigned int y#88 +unsigned int y#89 +unsigned int y#9 +unsigned int y#90 +unsigned int y#91 +unsigned int y#92 +unsigned int y#93 +unsigned int y#94 +unsigned int y#95 +unsigned int y#96 +unsigned int y#97 +unsigned int y#98 +unsigned int y#99 +__constant const char yellow = $9e +__constant const char your_score[] = " + + +Your Score: " +unsigned int z +unsigned int z#0 +unsigned int z#1 +unsigned int z#10 +unsigned int z#100 +unsigned int z#101 +unsigned int z#102 +unsigned int z#103 +unsigned int z#104 +unsigned int z#105 +unsigned int z#106 +unsigned int z#107 +unsigned int z#108 +unsigned int z#109 +unsigned int z#11 +unsigned int z#110 +unsigned int z#111 +unsigned int z#112 +unsigned int z#113 +unsigned int z#114 +unsigned int z#115 +unsigned int z#116 +unsigned int z#117 +unsigned int z#118 +unsigned int z#119 +unsigned int z#12 +unsigned int z#120 +unsigned int z#121 +unsigned int z#122 +unsigned int z#123 +unsigned int z#124 +unsigned int z#125 +unsigned int z#126 +unsigned int z#127 +unsigned int z#128 +unsigned int z#129 +unsigned int z#13 +unsigned int z#130 +unsigned int z#131 +unsigned int z#132 +unsigned int z#133 +unsigned int z#134 +unsigned int z#135 +unsigned int z#136 +unsigned int z#14 +unsigned int z#15 +unsigned int z#16 +unsigned int z#17 +unsigned int z#18 +unsigned int z#19 +unsigned int z#2 +unsigned int z#20 +unsigned int z#21 +unsigned int z#22 +unsigned int z#23 +unsigned int z#24 +unsigned int z#25 +unsigned int z#26 +unsigned int z#27 +unsigned int z#28 +unsigned int z#29 +unsigned int z#3 +unsigned int z#30 +unsigned int z#31 +unsigned int z#32 +unsigned int z#33 +unsigned int z#34 +unsigned int z#35 +unsigned int z#36 +unsigned int z#37 +unsigned int z#38 +unsigned int z#39 +unsigned int z#4 +unsigned int z#40 +unsigned int z#41 +unsigned int z#42 +unsigned int z#43 +unsigned int z#44 +unsigned int z#45 +unsigned int z#46 +unsigned int z#47 +unsigned int z#48 +unsigned int z#49 +unsigned int z#5 +unsigned int z#50 +unsigned int z#51 +unsigned int z#52 +unsigned int z#53 +unsigned int z#54 +unsigned int z#55 +unsigned int z#56 +unsigned int z#57 +unsigned int z#58 +unsigned int z#59 +unsigned int z#6 +unsigned int z#60 +unsigned int z#61 +unsigned int z#62 +unsigned int z#63 +unsigned int z#64 +unsigned int z#65 +unsigned int z#66 +unsigned int z#67 +unsigned int z#68 +unsigned int z#69 +unsigned int z#7 +unsigned int z#70 +unsigned int z#71 +unsigned int z#72 +unsigned int z#73 +unsigned int z#74 +unsigned int z#75 +unsigned int z#76 +unsigned int z#77 +unsigned int z#78 +unsigned int z#79 +unsigned int z#8 +unsigned int z#80 +unsigned int z#81 +unsigned int z#82 +unsigned int z#83 +unsigned int z#84 +unsigned int z#85 +unsigned int z#86 +unsigned int z#87 +unsigned int z#88 +unsigned int z#89 +unsigned int z#9 +unsigned int z#90 +unsigned int z#91 +unsigned int z#92 +unsigned int z#93 +unsigned int z#94 +unsigned int z#95 +unsigned int z#96 +unsigned int z#97 +unsigned int z#98 +unsigned int z#99 + +Adding number conversion cast (unumber) 0 in memset::$0 = memset::num#2 > 0 +Adding number conversion cast (unumber) 5 in utoa::max_digits#1 = 5 +Adding number conversion cast (unumber) 4 in utoa::max_digits#2 = 4 +Adding number conversion cast (unumber) 6 in utoa::max_digits#3 = 6 +Adding number conversion cast (unumber) $10 in utoa::max_digits#4 = $10 +Adding number conversion cast (unumber) 0 in *utoa::buffer#2 = 0 +Adding number conversion cast (unumber) 1 in utoa::$4 = utoa::max_digits#5 - 1 +Adding number conversion cast (unumber) utoa::$4 in utoa::$4 = utoa::max_digits#5 - (unumber)1 +Adding number conversion cast (unumber) 0 in *utoa::buffer#3 = 0 +Adding number conversion cast (unumber) 1 in utoa::started#1 = 1 +Adding number conversion cast (unumber) $19 in gotoxy::$0 = gotoxy::y#4 > $19 +Adding number conversion cast (unumber) $28 in gotoxy::$2 = gotoxy::x#4 >= $28 +Adding number conversion cast (unumber) 0 in gotoxy::y#0 = 0 +Adding number conversion cast (unumber) $28 in gotoxy::line_offset#0 = gotoxy::$7 * $28 +Adding number conversion cast (unumber) 0 in gotoxy::x#0 = 0 +Adding number conversion cast (unumber) $28 in cputc::$1 = conio_cursor_x == $28 +Adding number conversion cast (unumber) $28 in conio_line_text = conio_line_text + $28 +Adding number conversion cast (unumber) $28 in conio_line_color = conio_line_color + $28 +Adding number conversion cast (unumber) 0 in conio_cursor_x = 0 +Adding number conversion cast (unumber) 0 in cputs::$2 = 0 != cputs::$0 +Adding number conversion cast (unumber) $19 in cscroll::$0 = conio_cursor_y == $19 +Adding number conversion cast (unumber) 0 in cscroll::$7 = 0 != conio_scroll_enable +Adding number conversion cast (unumber) $28 in memcpy::source#0 = (void *)DEFAULT_SCREEN+$28 +Adding number conversion cast (unumber) $19*$28-$28 in memcpy::num#0 = $19*$28-$28 +Adding number conversion cast (unumber) $28 in memcpy::source#1 = (void *)COLORRAM+$28 +Adding number conversion cast (unumber) $19*$28-$28 in memcpy::num#1 = $19*$28-$28 +Adding number conversion cast (unumber) $28 in memset::str#0 = (void *)DEFAULT_SCREEN+$19*$28-$28 +Adding number conversion cast (unumber) $19*$28 in memset::str#0 = (void *)DEFAULT_SCREEN+$19*$28-(unumber)$28 +Adding number conversion cast (unumber) $28 in memset::num#0 = $28 +Adding number conversion cast (unumber) $28 in memset::str#1 = (void *)COLORRAM+$19*$28-$28 +Adding number conversion cast (unumber) $19*$28 in memset::str#1 = (void *)COLORRAM+$19*$28-(unumber)$28 +Adding number conversion cast (unumber) $28 in memset::num#1 = $28 +Adding number conversion cast (unumber) $28 in conio_line_text = conio_line_text - $28 +Adding number conversion cast (unumber) $28 in conio_line_color = conio_line_color - $28 +Adding number conversion cast (unumber) 0 in gotoxy::x#1 = 0 +Adding number conversion cast (unumber) 0 in gotoxy::y#1 = 0 +Adding number conversion cast (unumber) $19 in conio_c64_init::$0 = conio_c64_init::line#0 >= $19 +Adding number conversion cast (unumber) 0 in gotoxy::x#2 = 0 +Adding number conversion cast (unumber) $19-1 in conio_c64_init::line#1 = $19-1 +Adding number conversion cast (unumber) 1 in divr8u::$0 = divr8u::rem#5 << 1 +Adding number conversion cast (unumber) $80 in divr8u::$1 = divr8u::dividend#3 & $80 +Adding number conversion cast (unumber) divr8u::$1 in divr8u::$1 = divr8u::dividend#3 & (unumber)$80 +Adding number conversion cast (unumber) 0 in divr8u::$2 = divr8u::$1 != 0 +Adding number conversion cast (unumber) 1 in divr8u::$5 = divr8u::dividend#4 << 1 +Adding number conversion cast (unumber) 1 in divr8u::$6 = divr8u::quotient#3 << 1 +Adding number conversion cast (unumber) 1 in divr8u::$4 = divr8u::rem#7 | 1 +Adding number conversion cast (unumber) divr8u::$4 in divr8u::$4 = divr8u::rem#7 | (unumber)1 +Adding number conversion cast (unumber) 0 in divr8u::rem#3 = 0 +Adding number conversion cast (unumber) 0 in z#0 = 0 +Adding number conversion cast (unumber) $1fa in clear_screen::$2 = z#20 < $1fa +Adding number conversion cast (unumber) $1e00 in clear_screen::$3 = $1e00 + z#21 +Adding number conversion cast (unumber) clear_screen::$3 in clear_screen::$3 = (unumber)$1e00 + z#21 +Adding number conversion cast (unumber) clear_screen::$4 in clear_screen::$4 = clear_screen::$3 + c +Adding number conversion cast (unumber) $1e00 in clear_screen::$5 = $1e00 + z#21 +Adding number conversion cast (unumber) clear_screen::$5 in clear_screen::$5 = (unumber)$1e00 + z#21 +Adding number conversion cast (unumber) 0 in gotoxy::x#3 = 0 +Adding number conversion cast (unumber) 0 in gotoxy::y#3 = 0 +Adding number conversion cast (unumber) $fde8 in write_score::$0 = score#13 > $fde8 +Adding number conversion cast (unumber) 0 in m = 0 +Adding number conversion cast (unumber) 0 in score#0 = 0 +Adding number conversion cast (unumber) 4 in write_score::$9 = m < 4 +Adding number conversion cast (unumber) $a in utoa::radix#0 = $a +Adding number conversion cast (unumber) 9 in write_score::$3 = score#15 > 9 +Adding number conversion cast (unumber) $63 in write_score::$5 = score#16 > $63 +Adding number conversion cast (unumber) 0 in points[2] = buffer[0] +Adding number conversion cast (unumber) 2 in points[2] = buffer[(unumber)0] +Adding number conversion cast (unumber) 1 in points[3] = buffer[1] +Adding number conversion cast (unumber) 3 in points[3] = buffer[(unumber)1] +Adding number conversion cast (unumber) 4 in *((char *)$d3) = 4 +Adding number conversion cast (unumber) 0 in m = 0 +Adding number conversion cast (unumber) 0 in points[1] = buffer[0] +Adding number conversion cast (unumber) 1 in points[1] = buffer[(unumber)0] +Adding number conversion cast (unumber) 1 in points[2] = buffer[1] +Adding number conversion cast (unumber) 2 in points[2] = buffer[(unumber)1] +Adding number conversion cast (unumber) 2 in points[3] = buffer[2] +Adding number conversion cast (unumber) 3 in points[3] = buffer[(unumber)2] +Adding number conversion cast (unumber) 4 in write_score::$10 = m < 4 +Adding number conversion cast (unumber) 0 in m = 0 +Adding number conversion cast (unumber) 0 in z#3 = 0 +Adding number conversion cast (unumber) $21c in wait::$1 = z#23 < $21c +Adding number conversion cast (unumber) $100 in read_chrono::$0 = m * $100 +Adding number conversion cast (unumber) read_chrono::$0 in read_chrono::$0 = m * (unumber)$100 +Adding number conversion cast (unumber) read_chrono::$1 in read_chrono::$1 = read_chrono::$0 + l +Adding number conversion cast (unumber) $3c in div16u8u::divisor#0 = $3c +Adding number conversion cast (unumber) 7 in *((char *)$1e15+c) = 7 +Adding number conversion cast (unumber) $1e15 in *((char *)$1e15+c) = ((unumber)) 7 +Adding number conversion cast (unumber) $b9 in *((char *)$1e15) = $b9 +Adding number conversion cast (unumber) $a in read_chrono::$3 = time#0 < $a +Adding number conversion cast (unumber) $b9 in read_chrono::$5 = $b9 - time#9 +Adding number conversion cast (unumber) read_chrono::$5 in read_chrono::$5 = (unumber)$b9 - time#9 +Adding number conversion cast (unumber) 8 in *((char *)$900f) = 8 +Adding number conversion cast (unumber) 0 in m = 0 +Adding number conversion cast (unumber) $28 in main::$2 = m < $28 +Adding number conversion cast (unumber) $1c00 in main::$3 = $1c00 + m +Adding number conversion cast (unumber) main::$3 in main::$3 = (unumber)$1c00 + m +Adding number conversion cast (unumber) $20 in clear_screen::n#0 = $20 +Adding number conversion cast (unumber) 0 in clear_screen::m#0 = 0 +Adding number conversion cast (unumber) 7 in textcolor::color#0 = 7 +Adding number conversion cast (unumber) 1 in textcolor::color#1 = 1 +Adding number conversion cast (unumber) 2 in textcolor::color#2 = 2 +Adding number conversion cast (unumber) 5 in main::$11 = l > 5 +Adding number conversion cast (unumber) 4 in clear_screen::n#1 = 4 +Adding number conversion cast (unumber) 0 in clear_screen::m#1 = 0 +Adding number conversion cast (unumber) $ff in *((char *)$9005) = $ff +Adding number conversion cast (unumber) 1 in k#0 = 1 +Adding number conversion cast (unumber) $16 in main::$16 = k#6 < $16 +Adding number conversion cast (unumber) 2 in n#0 = 2 +Adding number conversion cast (unumber) 2 in *((char *)$1ff9+c) = 2 +Adding number conversion cast (unumber) $1ff9 in *((char *)$1ff9+c) = ((unumber)) 2 +Adding number conversion cast (unumber) 1 in z#8 = 1 +Adding number conversion cast (unumber) 1 in main::$23 = l > 1 +Adding number conversion cast (unumber) $16 in main::$18 = n#7 < $16 +Adding number conversion cast (unumber) $1f1f in peephole#0 = $1f1f +Adding number conversion cast (unumber) $f in *((char *)$900e) = $f +Adding number conversion cast (unumber) 0 in score#2 = 0 +Adding number conversion cast (unumber) 1 in tu#0 = 1 +Adding number conversion cast (unumber) $50 in chrout::petscii = $50 +Adding number conversion cast (unumber) $54 in chrout::petscii = $54 +Adding number conversion cast (unumber) $53 in chrout::petscii = $53 +Adding number conversion cast (unumber) $3a in chrout::petscii = $3a +Adding number conversion cast (unumber) $12 in *((char *)$d3) = $12 +Adding number conversion cast (unumber) 0 in j#0 = 0 +Adding number conversion cast (unumber) 7 in main::$25 = 7 - l +Adding number conversion cast (unumber) main::$25 in main::$25 = (unumber)7 - l +Adding number conversion cast (unumber) 3 in main::$26 = 3 * l +Adding number conversion cast (unumber) main::$26 in main::$26 = (unumber)3 * l +Adding number conversion cast (unumber) $1a in main::$27 = $1a - main::$26 +Adding number conversion cast (unumber) main::$27 in main::$27 = (unumber)$1a - main::$26 +Adding number conversion cast (unumber) $1f9 in main::$30 = main::$29 > $1f9 +Adding number conversion cast (unumber) 1 in j#1 = 1 +Adding number conversion cast (unumber) 1 in main::$36 = main::$35 + 1 +Adding number conversion cast (unumber) main::$36 in main::$36 = main::$35 + (unumber)1 +Adding number conversion cast (unumber) $1fa in main::$37 = z#9 < $1fa +Adding number conversion cast (unumber) 4 in main::$44 = j#13 < 4 +Adding number conversion cast (unumber) $a in *((char *)$d3) = $a +Adding number conversion cast (unumber) 0 in j#4 = 0 +Adding number conversion cast (unumber) 5 in main::$49 = j#16 < 5 +Adding number conversion cast (unumber) $f in *((char *)$d3) = $f +Adding number conversion cast (unumber) $a in main::$54 = tu#6 < $a +Adding number conversion cast (unumber) $30 in main::$57 = $30 + tu#7 +Adding number conversion cast (unumber) main::$57 in main::$57 = (unumber)$30 + tu#7 +Adding number conversion cast (unumber) $31 in chrout::petscii = $31 +Adding number conversion cast (unumber) $30 in chrout::petscii = $30 +Adding number conversion cast (unumber) 0 in random::k#1 = 0 +Adding number conversion cast (unumber) $ff in random::n#1 = $ff +Adding number conversion cast (unumber) 0 in random::k#2 = 0 +Adding number conversion cast (unumber) $ff in random::n#2 = $ff +Adding number conversion cast (unumber) $1e15 in main::$61 = m + $1e15 +Adding number conversion cast (unumber) main::$61 in main::$61 = m + (unumber)$1e15 +Adding number conversion cast (unumber) main::$62 in main::$62 = main::$61 + duck#6 +Adding number conversion cast (unumber) $1fe3 in main::$63 = duck#1 > $1fe3 +Adding number conversion cast (unumber) 1 in main::$66 = duck#1 + 1 +Adding number conversion cast (unumber) main::$66 in main::$66 = duck#1 + (unumber)1 +Adding number conversion cast (unumber) $16 in main::$69 = duck#1 + $16 +Adding number conversion cast (unumber) main::$69 in main::$69 = duck#1 + (unumber)$16 +Adding number conversion cast (unumber) $17 in main::$72 = duck#1 + $17 +Adding number conversion cast (unumber) main::$72 in main::$72 = duck#1 + (unumber)$17 +Adding number conversion cast (unumber) 0 in time#2 = 0 +Adding number conversion cast (unumber) $a in main::$76 = time#11 < $a +Adding number conversion cast (unumber) $7f in *((char *)$9122) = $7f +Adding number conversion cast (unumber) $ff in *((char *)$9122) = $ff +Adding number conversion cast (unumber) $10 in main::$78 = $10 & m +Adding number conversion cast (unumber) main::$78 in main::$78 = (unumber)$10 & m +Adding number conversion cast (unumber) 0 in main::$79 = main::$78 == 0 +Adding number conversion cast (unumber) $a in main::$147 = score#19 - $a +Adding number conversion cast (unumber) main::$147 in main::$147 = score#19 - (unumber)$a +Adding number conversion cast (unumber) $82 in *((char *)$900d) = $82 +Adding number conversion cast (unumber) $14 in wait::n#0 = $14 +Adding number conversion cast (unumber) 0 in *((char *)$900d) = 0 +Adding number conversion cast (unumber) 0 in *((char *)main::$150) = 0 +Adding number conversion cast (unumber) 1 in main::$151 = duck#7 + 1 +Adding number conversion cast (unumber) main::$151 in main::$151 = duck#7 + (unumber)1 +Adding number conversion cast (unumber) main::$152 in main::$152 = main::$151 + c +Adding number conversion cast (unumber) 0 in *((char *)main::$152) = 0 +Adding number conversion cast (unumber) $16 in main::$153 = duck#7 + $16 +Adding number conversion cast (unumber) main::$153 in main::$153 = duck#7 + (unumber)$16 +Adding number conversion cast (unumber) main::$154 in main::$154 = main::$153 + c +Adding number conversion cast (unumber) 0 in *((char *)main::$154) = 0 +Adding number conversion cast (unumber) $17 in main::$155 = duck#7 + $17 +Adding number conversion cast (unumber) main::$155 in main::$155 = duck#7 + (unumber)$17 +Adding number conversion cast (unumber) main::$156 in main::$156 = main::$155 + c +Adding number conversion cast (unumber) 0 in *((char *)main::$156) = 0 +Adding number conversion cast (unumber) $b in main::$157 = tu#9 < $b +Adding number conversion cast (unumber) $80 in main::$81 = $80 & n#9 +Adding number conversion cast (unumber) main::$81 in main::$81 = (unumber)$80 & n#9 +Adding number conversion cast (unumber) 0 in main::$82 = main::$81 == 0 +Adding number conversion cast (unumber) 4 in main::$84 = 4 & m +Adding number conversion cast (unumber) main::$84 in main::$84 = (unumber)4 & m +Adding number conversion cast (unumber) 0 in main::$85 = main::$84 == 0 +Adding number conversion cast (unumber) 8 in main::$88 = 8 & m +Adding number conversion cast (unumber) main::$88 in main::$88 = (unumber)8 & m +Adding number conversion cast (unumber) 0 in main::$89 = main::$88 == 0 +Adding number conversion cast (unumber) $16 in main::$87 = y#11 - $16 +Adding number conversion cast (unumber) main::$87 in main::$87 = y#11 - (unumber)$16 +Adding number conversion cast (unumber) $20 in main::$92 = $20 & m +Adding number conversion cast (unumber) main::$92 in main::$92 = (unumber)$20 & m +Adding number conversion cast (unumber) 0 in main::$93 = main::$92 == 0 +Adding number conversion cast (unumber) $16 in main::$91 = y#12 + $16 +Adding number conversion cast (unumber) main::$91 in main::$91 = y#12 + (unumber)$16 +Adding number conversion cast (unumber) 1 in main::$104 = y#13 + 1 +Adding number conversion cast (unumber) main::$104 in main::$104 = y#13 + (unumber)1 +Adding number conversion cast (unumber) $16 in main::$107 = y#13 + $16 +Adding number conversion cast (unumber) main::$107 in main::$107 = y#13 + (unumber)$16 +Adding number conversion cast (unumber) $17 in main::$110 = y#13 + $17 +Adding number conversion cast (unumber) main::$110 in main::$110 = y#13 + (unumber)$17 +Adding number conversion cast (unumber) $1e16 in main::$113 = y#13 > $1e16 +Adding number conversion cast (unumber) $1fe3 in main::$115 = y#13 < $1fe3 +Adding number conversion cast (unumber) $82 in *((char *)$900d) = $82 +Adding number conversion cast (unumber) $a in main::$100 = score#21 - $a +Adding number conversion cast (unumber) main::$100 in main::$100 = score#21 - (unumber)$a +Adding number conversion cast (unumber) $a in wait::n#1 = $a +Adding number conversion cast (unumber) $c in main::$96 = $c - time#13 +Adding number conversion cast (unumber) main::$96 in main::$96 = (unumber)$c - time#13 +Adding number conversion cast (unumber) $a in main::$97 = main::$96 * $a +Adding number conversion cast (unumber) main::$97 in main::$97 = main::$96 * (unumber)$a +Adding number conversion cast (unumber) main::$98 in main::$98 = score#23 + main::$97 +Adding number conversion cast (unumber) $a in wait::n#2 = $a +Adding number conversion cast (unumber) $a in time#4 = $a +Adding number conversion cast (unumber) 0 in *((char *)$900d) = 0 +Adding number conversion cast (unumber) $fd in *((char *)peephole#7) = $fd +Adding number conversion cast (unumber) 1 in *((char *)main::$125) = 1 +Adding number conversion cast (unumber) 1 in main::$126 = peephole#7 + 1 +Adding number conversion cast (unumber) main::$126 in main::$126 = peephole#7 + (unumber)1 +Adding number conversion cast (unumber) $ed in *((char *)main::$126) = $ed +Adding number conversion cast (unumber) 1 in main::$127 = peephole#7 + 1 +Adding number conversion cast (unumber) main::$127 in main::$127 = peephole#7 + (unumber)1 +Adding number conversion cast (unumber) main::$128 in main::$128 = main::$127 + c +Adding number conversion cast (unumber) 1 in *((char *)main::$128) = 1 +Adding number conversion cast (unumber) $16 in main::$129 = peephole#7 + $16 +Adding number conversion cast (unumber) main::$129 in main::$129 = peephole#7 + (unumber)$16 +Adding number conversion cast (unumber) $ee in *((char *)main::$129) = $ee +Adding number conversion cast (unumber) $16 in main::$130 = peephole#7 + $16 +Adding number conversion cast (unumber) main::$130 in main::$130 = peephole#7 + (unumber)$16 +Adding number conversion cast (unumber) main::$131 in main::$131 = main::$130 + c +Adding number conversion cast (unumber) 1 in *((char *)main::$131) = 1 +Adding number conversion cast (unumber) $17 in main::$132 = peephole#7 + $17 +Adding number conversion cast (unumber) main::$132 in main::$132 = peephole#7 + (unumber)$17 +Adding number conversion cast (unumber) $f0 in *((char *)main::$132) = $f0 +Adding number conversion cast (unumber) $17 in main::$133 = peephole#7 + $17 +Adding number conversion cast (unumber) main::$133 in main::$133 = peephole#7 + (unumber)$17 +Adding number conversion cast (unumber) main::$134 in main::$134 = main::$133 + c +Adding number conversion cast (unumber) 1 in *((char *)main::$134) = 1 +Adding number conversion cast (unumber) 5 in wait::n#3 = 5 +Adding number conversion cast (unumber) 0 in *((char *)duck#9) = 0 +Adding number conversion cast (unumber) 7 in *((char *)main::$136) = 7 +Adding number conversion cast (unumber) 1 in main::$137 = duck#9 + 1 +Adding number conversion cast (unumber) main::$137 in main::$137 = duck#9 + (unumber)1 +Adding number conversion cast (unumber) 1 in *((char *)main::$137) = 1 +Adding number conversion cast (unumber) 1 in main::$138 = duck#9 + 1 +Adding number conversion cast (unumber) main::$138 in main::$138 = duck#9 + (unumber)1 +Adding number conversion cast (unumber) main::$139 in main::$139 = main::$138 + c +Adding number conversion cast (unumber) 7 in *((char *)main::$139) = 7 +Adding number conversion cast (unumber) $16 in main::$140 = duck#9 + $16 +Adding number conversion cast (unumber) main::$140 in main::$140 = duck#9 + (unumber)$16 +Adding number conversion cast (unumber) 2 in *((char *)main::$140) = 2 +Adding number conversion cast (unumber) $16 in main::$141 = duck#9 + $16 +Adding number conversion cast (unumber) main::$141 in main::$141 = duck#9 + (unumber)$16 +Adding number conversion cast (unumber) main::$142 in main::$142 = main::$141 + c +Adding number conversion cast (unumber) 7 in *((char *)main::$142) = 7 +Adding number conversion cast (unumber) $17 in main::$143 = duck#9 + $17 +Adding number conversion cast (unumber) main::$143 in main::$143 = duck#9 + (unumber)$17 +Adding number conversion cast (unumber) 3 in *((char *)main::$143) = 3 +Adding number conversion cast (unumber) $17 in main::$144 = duck#9 + $17 +Adding number conversion cast (unumber) main::$144 in main::$144 = duck#9 + (unumber)$17 +Adding number conversion cast (unumber) main::$145 in main::$145 = main::$144 + c +Adding number conversion cast (unumber) 7 in *((char *)main::$145) = 7 +Adding number conversion cast (unumber) 5 in wait::n#4 = 5 +Adding number conversion cast (unumber) 0 in *((char *)main::$118) = 0 +Adding number conversion cast (unumber) 1 in main::$120 = main::$119 + 1 +Adding number conversion cast (unumber) main::$120 in main::$120 = main::$119 + (unumber)1 +Adding number conversion cast (unumber) 0 in *((char *)main::$120) = 0 +Adding number conversion cast (unumber) $16 in main::$122 = main::$121 + $16 +Adding number conversion cast (unumber) main::$122 in main::$122 = main::$121 + (unumber)$16 +Adding number conversion cast (unumber) 0 in *((char *)main::$122) = 0 +Adding number conversion cast (unumber) $17 in main::$124 = main::$123 + $17 +Adding number conversion cast (unumber) main::$124 in main::$124 = main::$123 + (unumber)$17 +Adding number conversion cast (unumber) 0 in *((char *)main::$124) = 0 +Adding number conversion cast (unumber) 4 in clear_screen::n#2 = 4 +Adding number conversion cast (unumber) 0 in clear_screen::m#2 = 0 +Adding number conversion cast (unumber) $f0 in *((char *)$9005) = $f0 +Adding number conversion cast (unumber) 7 in textcolor::color#3 = 7 +Adding number conversion cast (unumber) 2 in textcolor::color#4 = 2 +Adding number conversion cast (unumber) 3 in textcolor::color#5 = 3 +Adding number conversion cast (unumber) $a in utoa::radix#1 = $a +Adding number conversion cast (unumber) 1 in textcolor::color#6 = 1 +Adding number conversion cast (unumber) $b in main::$173 = j#6 != $b +Adding number conversion cast (unumber) $1c in main::$174 = j#6 != $1c +Adding number conversion cast (unumber) $b in main::$176 = j#19 == $b +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast memcpy::src#0 = (char *)memcpy::source#2 +Inlining cast memcpy::dst#0 = (char *)memcpy::destination#2 +Inlining cast memset::dst#0 = (char *)memset::str#3 +Inlining cast utoa::max_digits#1 = (unumber)5 +Inlining cast utoa::max_digits#2 = (unumber)4 +Inlining cast utoa::max_digits#3 = (unumber)6 +Inlining cast utoa::max_digits#4 = (unumber)$10 +Inlining cast *utoa::buffer#2 = (unumber)0 +Inlining cast *utoa::buffer#3 = (unumber)0 +Inlining cast utoa::started#1 = (unumber)1 +Inlining cast gotoxy::y#0 = (unumber)0 +Inlining cast gotoxy::x#0 = (unumber)0 +Inlining cast conio_cursor_x = (unumber)0 +Inlining cast memcpy::num#0 = (unumber)$19*$28-$28 +Inlining cast memcpy::num#1 = (unumber)$19*$28-$28 +Inlining cast memset::num#0 = (unumber)$28 +Inlining cast memset::num#1 = (unumber)$28 +Inlining cast gotoxy::x#1 = (unumber)0 +Inlining cast gotoxy::y#1 = (unumber)0 +Inlining cast gotoxy::x#2 = (unumber)0 +Inlining cast conio_c64_init::line#1 = (unumber)$19-1 +Inlining cast divr8u::rem#3 = (unumber)0 +Inlining cast z#0 = (unumber)0 +Inlining cast gotoxy::x#3 = (unumber)0 +Inlining cast gotoxy::y#3 = (unumber)0 +Inlining cast m = (unumber)0 +Inlining cast score#0 = (unumber)0 +Inlining cast utoa::radix#0 = (unumber)$a +Inlining cast *((char *)$d3) = (unumber)4 +Inlining cast m = (unumber)0 +Inlining cast m = (unumber)0 +Inlining cast z#3 = (unumber)0 +Inlining cast div16u8u::divisor#0 = (unumber)$3c +Inlining cast *((char *)(unumber)$1e15+c) = (unumber)7 +Inlining cast *((char *)$1e15) = (unumber)$b9 +Inlining cast *((char *)$900f) = (unumber)8 +Inlining cast m = (unumber)0 +Inlining cast clear_screen::n#0 = (unumber)$20 +Inlining cast clear_screen::m#0 = (unumber)0 +Inlining cast textcolor::color#0 = (unumber)7 +Inlining cast textcolor::color#1 = (unumber)1 +Inlining cast textcolor::color#2 = (unumber)2 +Inlining cast clear_screen::n#1 = (unumber)4 +Inlining cast clear_screen::m#1 = (unumber)0 +Inlining cast *((char *)$9005) = (unumber)$ff +Inlining cast k#0 = (unumber)1 +Inlining cast n#0 = (unumber)2 +Inlining cast *((char *)(unumber)$1ff9+c) = (unumber)2 +Inlining cast z#8 = (unumber)1 +Inlining cast peephole#0 = (unumber)$1f1f +Inlining cast *((char *)$900e) = (unumber)$f +Inlining cast score#2 = (unumber)0 +Inlining cast tu#0 = (unumber)1 +Inlining cast chrout::petscii = (unumber)$50 +Inlining cast chrout::petscii = (unumber)$54 +Inlining cast chrout::petscii = (unumber)$53 +Inlining cast chrout::petscii = (unumber)$3a +Inlining cast *((char *)$d3) = (unumber)$12 +Inlining cast j#0 = (unumber)0 +Inlining cast j#1 = (unumber)1 +Inlining cast *((char *)$d3) = (unumber)$a +Inlining cast j#4 = (unumber)0 +Inlining cast *((char *)$d3) = (unumber)$f +Inlining cast chrout::petscii = (unumber)$31 +Inlining cast chrout::petscii = (unumber)$30 +Inlining cast random::k#1 = (unumber)0 +Inlining cast random::n#1 = (unumber)$ff +Inlining cast random::k#2 = (unumber)0 +Inlining cast random::n#2 = (unumber)$ff +Inlining cast time#2 = (unumber)0 +Inlining cast *((char *)$9122) = (unumber)$7f +Inlining cast *((char *)$9122) = (unumber)$ff +Inlining cast *((char *)$900d) = (unumber)$82 +Inlining cast wait::n#0 = (unumber)$14 +Inlining cast *((char *)$900d) = (unumber)0 +Inlining cast *((char *)main::$150) = (unumber)0 +Inlining cast *((char *)main::$152) = (unumber)0 +Inlining cast *((char *)main::$154) = (unumber)0 +Inlining cast *((char *)main::$156) = (unumber)0 +Inlining cast *((char *)$900d) = (unumber)$82 +Inlining cast wait::n#1 = (unumber)$a +Inlining cast wait::n#2 = (unumber)$a +Inlining cast time#4 = (unumber)$a +Inlining cast *((char *)$900d) = (unumber)0 +Inlining cast *((char *)peephole#7) = (unumber)$fd +Inlining cast *((char *)main::$125) = (unumber)1 +Inlining cast *((char *)main::$126) = (unumber)$ed +Inlining cast *((char *)main::$128) = (unumber)1 +Inlining cast *((char *)main::$129) = (unumber)$ee +Inlining cast *((char *)main::$131) = (unumber)1 +Inlining cast *((char *)main::$132) = (unumber)$f0 +Inlining cast *((char *)main::$134) = (unumber)1 +Inlining cast wait::n#3 = (unumber)5 +Inlining cast *((char *)duck#9) = (unumber)0 +Inlining cast *((char *)main::$136) = (unumber)7 +Inlining cast *((char *)main::$137) = (unumber)1 +Inlining cast *((char *)main::$139) = (unumber)7 +Inlining cast *((char *)main::$140) = (unumber)2 +Inlining cast *((char *)main::$142) = (unumber)7 +Inlining cast *((char *)main::$143) = (unumber)3 +Inlining cast *((char *)main::$145) = (unumber)7 +Inlining cast wait::n#4 = (unumber)5 +Inlining cast *((char *)main::$118) = (unumber)0 +Inlining cast *((char *)main::$120) = (unumber)0 +Inlining cast *((char *)main::$122) = (unumber)0 +Inlining cast *((char *)main::$124) = (unumber)0 +Inlining cast clear_screen::n#2 = (unumber)4 +Inlining cast clear_screen::m#2 = (unumber)0 +Inlining cast *((char *)$9005) = (unumber)$f0 +Inlining cast textcolor::color#3 = (unumber)7 +Inlining cast textcolor::color#4 = (unumber)2 +Inlining cast textcolor::color#5 = (unumber)3 +Inlining cast utoa::radix#1 = (unumber)$a +Inlining cast textcolor::color#6 = (unumber)1 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (char *) 55296 +Simplifying constant pointer cast (char *) 1024 +Simplifying constant pointer cast (char *) 214 +Simplifying constant integer cast 0 +Simplifying constant integer cast 5 +Simplifying constant integer cast 4 +Simplifying constant integer cast 6 +Simplifying constant integer cast $10 +Simplifying constant integer cast 0 +Simplifying constant integer cast 1 +Simplifying constant integer cast 0 +Simplifying constant integer cast 1 +Simplifying constant integer cast $19 +Simplifying constant integer cast $28 +Simplifying constant integer cast 0 +Simplifying constant integer cast $28 +Simplifying constant integer cast 0 +Simplifying constant integer cast $28 +Simplifying constant integer cast $28 +Simplifying constant integer cast $28 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast $19 +Simplifying constant integer cast 0 +Simplifying constant integer cast $28 +Simplifying constant integer cast $28 +Simplifying constant integer cast $28 +Simplifying constant integer cast $28 +Simplifying constant integer cast $28 +Simplifying constant integer cast $28 +Simplifying constant integer cast $28 +Simplifying constant integer cast $28 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast $19 +Simplifying constant integer cast 0 +Simplifying constant integer cast 1 +Simplifying constant integer cast $80 +Simplifying constant integer cast 0 +Simplifying constant integer cast 1 +Simplifying constant integer cast 1 +Simplifying constant integer cast 1 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast $1fa +Simplifying constant integer cast $1e00 +Simplifying constant integer cast $1e00 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant pointer cast (char *) 37140 +Simplifying constant integer cast $fde8 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 4 +Simplifying constant integer cast $a +Simplifying constant integer cast 9 +Simplifying constant integer cast $63 +Simplifying constant integer cast 0 +Simplifying constant integer cast 2 +Simplifying constant integer cast 1 +Simplifying constant integer cast 3 +Simplifying constant integer cast 4 +Simplifying constant pointer cast (char *) 211 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 1 +Simplifying constant integer cast 1 +Simplifying constant integer cast 2 +Simplifying constant integer cast 2 +Simplifying constant integer cast 3 +Simplifying constant integer cast 4 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast $21c +Simplifying constant integer cast $100 +Simplifying constant integer cast $3c +Simplifying constant integer cast 7 +Simplifying constant integer cast $1e15 +Simplifying constant integer cast $b9 +Simplifying constant pointer cast (char *) 7701 +Simplifying constant integer cast $a +Simplifying constant integer cast $b9 +Simplifying constant pointer cast (char *) 7701 +Simplifying constant integer cast 8 +Simplifying constant pointer cast (char *) 36879 +Simplifying constant integer cast 0 +Simplifying constant integer cast $28 +Simplifying constant integer cast $1c00 +Simplifying constant integer cast $20 +Simplifying constant integer cast 0 +Simplifying constant integer cast 7 +Simplifying constant integer cast 1 +Simplifying constant integer cast 2 +Simplifying constant pointer cast (char *) 197 +Simplifying constant integer cast 5 +Simplifying constant integer cast 4 +Simplifying constant integer cast 0 +Simplifying constant integer cast $ff +Simplifying constant pointer cast (char *) 36869 +Simplifying constant integer cast 1 +Simplifying constant integer cast $16 +Simplifying constant integer cast 2 +Simplifying constant pointer cast (char *) 8185 +Simplifying constant integer cast 2 +Simplifying constant integer cast $1ff9 +Simplifying constant integer cast 1 +Simplifying constant integer cast 1 +Simplifying constant integer cast $16 +Simplifying constant integer cast $1f1f +Simplifying constant integer cast $f +Simplifying constant pointer cast (char *) 36878 +Simplifying constant integer cast 0 +Simplifying constant integer cast 1 +Simplifying constant integer cast $50 +Simplifying constant integer cast $54 +Simplifying constant integer cast $53 +Simplifying constant integer cast $3a +Simplifying constant integer cast $12 +Simplifying constant pointer cast (char *) 211 +Simplifying constant integer cast 0 +Simplifying constant integer cast 7 +Simplifying constant integer cast 3 +Simplifying constant integer cast $1a +Simplifying constant integer cast $1f9 +Simplifying constant integer cast 1 +Simplifying constant integer cast 1 +Simplifying constant integer cast $1fa +Simplifying constant integer cast 4 +Simplifying constant integer cast $a +Simplifying constant pointer cast (char *) 211 +Simplifying constant integer cast 0 +Simplifying constant integer cast 5 +Simplifying constant integer cast $f +Simplifying constant pointer cast (char *) 211 +Simplifying constant integer cast $a +Simplifying constant integer cast $30 +Simplifying constant integer cast $31 +Simplifying constant integer cast $30 +Simplifying constant integer cast 0 +Simplifying constant integer cast $ff +Simplifying constant integer cast 0 +Simplifying constant integer cast $ff +Simplifying constant integer cast $1e15 +Simplifying constant integer cast $1fe3 +Simplifying constant integer cast 1 +Simplifying constant integer cast $16 +Simplifying constant integer cast $17 +Simplifying constant integer cast 0 +Simplifying constant integer cast $a +Simplifying constant pointer cast (char *) 37151 +Simplifying constant integer cast $7f +Simplifying constant pointer cast (char *) 37154 +Simplifying constant pointer cast (char *) 37152 +Simplifying constant integer cast $ff +Simplifying constant pointer cast (char *) 37154 +Simplifying constant integer cast $10 +Simplifying constant integer cast 0 +Simplifying constant integer cast $a +Simplifying constant integer cast $82 +Simplifying constant pointer cast (char *) 36877 +Simplifying constant integer cast $14 +Simplifying constant integer cast 0 +Simplifying constant pointer cast (char *) 36877 +Simplifying constant integer cast 0 +Simplifying constant integer cast 1 +Simplifying constant integer cast 0 +Simplifying constant integer cast $16 +Simplifying constant integer cast 0 +Simplifying constant integer cast $17 +Simplifying constant integer cast 0 +Simplifying constant integer cast $b +Simplifying constant integer cast $80 +Simplifying constant integer cast 0 +Simplifying constant integer cast 4 +Simplifying constant integer cast 0 +Simplifying constant integer cast 8 +Simplifying constant integer cast 0 +Simplifying constant integer cast $16 +Simplifying constant integer cast $20 +Simplifying constant integer cast 0 +Simplifying constant integer cast $16 +Simplifying constant integer cast 1 +Simplifying constant integer cast $16 +Simplifying constant integer cast $17 +Simplifying constant integer cast $1e16 +Simplifying constant integer cast $1fe3 +Simplifying constant integer cast $82 +Simplifying constant pointer cast (char *) 36877 +Simplifying constant integer cast $a +Simplifying constant integer cast $a +Simplifying constant integer cast $c +Simplifying constant integer cast $a +Simplifying constant integer cast $a +Simplifying constant integer cast $a +Simplifying constant integer cast 0 +Simplifying constant pointer cast (char *) 36877 +Simplifying constant integer cast $fd +Simplifying constant integer cast 1 +Simplifying constant integer cast 1 +Simplifying constant integer cast $ed +Simplifying constant integer cast 1 +Simplifying constant integer cast 1 +Simplifying constant integer cast $16 +Simplifying constant integer cast $ee +Simplifying constant integer cast $16 +Simplifying constant integer cast 1 +Simplifying constant integer cast $17 +Simplifying constant integer cast $f0 +Simplifying constant integer cast $17 +Simplifying constant integer cast 1 +Simplifying constant integer cast 5 +Simplifying constant integer cast 0 +Simplifying constant integer cast 7 +Simplifying constant integer cast 1 +Simplifying constant integer cast 1 +Simplifying constant integer cast 1 +Simplifying constant integer cast 7 +Simplifying constant integer cast $16 +Simplifying constant integer cast 2 +Simplifying constant integer cast $16 +Simplifying constant integer cast 7 +Simplifying constant integer cast $17 +Simplifying constant integer cast 3 +Simplifying constant integer cast $17 +Simplifying constant integer cast 7 +Simplifying constant integer cast 5 +Simplifying constant integer cast 0 +Simplifying constant integer cast 1 +Simplifying constant integer cast 0 +Simplifying constant integer cast $16 +Simplifying constant integer cast 0 +Simplifying constant integer cast $17 +Simplifying constant integer cast 0 +Simplifying constant integer cast 4 +Simplifying constant integer cast 0 +Simplifying constant integer cast $f0 +Simplifying constant pointer cast (char *) 36869 +Simplifying constant integer cast 7 +Simplifying constant integer cast 2 +Simplifying constant integer cast 3 +Simplifying constant integer cast $a +Simplifying constant integer cast 1 +Simplifying constant pointer cast (char *) 197 +Simplifying constant integer cast $b +Simplifying constant integer cast $1c +Simplifying constant integer cast $b +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 5 +Finalized unsigned number type (char) 4 +Finalized unsigned number type (char) 6 +Finalized unsigned number type (char) $10 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 1 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 1 +Finalized unsigned number type (char) $19 +Finalized unsigned number type (char) $28 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) $28 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) $28 +Finalized unsigned number type (char) $28 +Finalized unsigned number type (char) $28 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) $19 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) $28 +Finalized unsigned number type (char) $28 +Finalized unsigned number type (char) $28 +Finalized unsigned number type (char) $28 +Finalized unsigned number type (char) $28 +Finalized unsigned number type (char) $28 +Finalized unsigned number type (char) $28 +Finalized unsigned number type (char) $28 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) $19 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 1 +Finalized unsigned number type (char) $80 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 1 +Finalized unsigned number type (char) 1 +Finalized unsigned number type (char) 1 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (unsigned int) $1fa +Finalized unsigned number type (unsigned int) $1e00 +Finalized unsigned number type (unsigned int) $1e00 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (unsigned int) $fde8 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 4 +Finalized unsigned number type (char) $a +Finalized unsigned number type (char) 9 +Finalized unsigned number type (char) $63 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 2 +Finalized unsigned number type (char) 1 +Finalized unsigned number type (char) 3 +Finalized unsigned number type (char) 4 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 1 +Finalized unsigned number type (char) 1 +Finalized unsigned number type (char) 2 +Finalized unsigned number type (char) 2 +Finalized unsigned number type (char) 3 +Finalized unsigned number type (char) 4 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (unsigned int) $21c +Finalized unsigned number type (unsigned int) $100 +Finalized unsigned number type (char) $3c +Finalized unsigned number type (char) 7 +Finalized unsigned number type (unsigned int) $1e15 +Finalized unsigned number type (char) $b9 +Finalized unsigned number type (char) $a +Finalized unsigned number type (char) $b9 +Finalized unsigned number type (char) 8 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) $28 +Finalized unsigned number type (unsigned int) $1c00 +Finalized unsigned number type (char) $20 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 1 +Finalized unsigned number type (char) 2 +Finalized unsigned number type (char) 5 +Finalized unsigned number type (char) 4 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) $ff +Finalized unsigned number type (char) 1 +Finalized unsigned number type (char) $16 +Finalized unsigned number type (char) 2 +Finalized unsigned number type (char) 2 +Finalized unsigned number type (unsigned int) $1ff9 +Finalized unsigned number type (char) 1 +Finalized unsigned number type (char) 1 +Finalized unsigned number type (char) $16 +Finalized unsigned number type (unsigned int) $1f1f +Finalized unsigned number type (char) $f +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 1 +Finalized unsigned number type (char) $50 +Finalized unsigned number type (char) $54 +Finalized unsigned number type (char) $53 +Finalized unsigned number type (char) $3a +Finalized unsigned number type (char) $12 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 3 +Finalized unsigned number type (char) $1a +Finalized unsigned number type (unsigned int) $1f9 +Finalized unsigned number type (char) 1 +Finalized unsigned number type (char) 1 +Finalized unsigned number type (unsigned int) $1fa +Finalized unsigned number type (char) 4 +Finalized unsigned number type (char) $a +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 5 +Finalized unsigned number type (char) $f +Finalized unsigned number type (char) $a +Finalized unsigned number type (char) $30 +Finalized unsigned number type (char) $31 +Finalized unsigned number type (char) $30 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) $ff +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) $ff +Finalized unsigned number type (unsigned int) $1e15 +Finalized unsigned number type (unsigned int) $1fe3 +Finalized unsigned number type (char) 1 +Finalized unsigned number type (char) $16 +Finalized unsigned number type (char) $17 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) $a +Finalized unsigned number type (char) $7f +Finalized unsigned number type (char) $ff +Finalized unsigned number type (char) $10 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) $a +Finalized unsigned number type (char) $82 +Finalized unsigned number type (char) $14 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 1 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) $16 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) $17 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) $b +Finalized unsigned number type (char) $80 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 4 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 8 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) $16 +Finalized unsigned number type (char) $20 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) $16 +Finalized unsigned number type (char) 1 +Finalized unsigned number type (char) $16 +Finalized unsigned number type (char) $17 +Finalized unsigned number type (unsigned int) $1e16 +Finalized unsigned number type (unsigned int) $1fe3 +Finalized unsigned number type (char) $82 +Finalized unsigned number type (char) $a +Finalized unsigned number type (char) $a +Finalized unsigned number type (char) $c +Finalized unsigned number type (char) $a +Finalized unsigned number type (char) $a +Finalized unsigned number type (char) $a +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) $fd +Finalized unsigned number type (char) 1 +Finalized unsigned number type (char) 1 +Finalized unsigned number type (char) $ed +Finalized unsigned number type (char) 1 +Finalized unsigned number type (char) 1 +Finalized unsigned number type (char) $16 +Finalized unsigned number type (char) $ee +Finalized unsigned number type (char) $16 +Finalized unsigned number type (char) 1 +Finalized unsigned number type (char) $17 +Finalized unsigned number type (char) $f0 +Finalized unsigned number type (char) $17 +Finalized unsigned number type (char) 1 +Finalized unsigned number type (char) 5 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 1 +Finalized unsigned number type (char) 1 +Finalized unsigned number type (char) 1 +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) $16 +Finalized unsigned number type (char) 2 +Finalized unsigned number type (char) $16 +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) $17 +Finalized unsigned number type (char) 3 +Finalized unsigned number type (char) $17 +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 5 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 1 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) $16 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) $17 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 4 +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) $f0 +Finalized unsigned number type (char) 7 +Finalized unsigned number type (char) 2 +Finalized unsigned number type (char) 3 +Finalized unsigned number type (char) $a +Finalized unsigned number type (char) 1 +Finalized unsigned number type (char) $b +Finalized unsigned number type (char) $1c +Finalized unsigned number type (char) $b +Successful SSA optimization PassNFinalizeNumberTypeConversions +Inferred type updated to char in utoa::$4 = utoa::max_digits#5 - 1 +Inferred type updated to char in divr8u::$1 = divr8u::dividend#3 & $80 +Inferred type updated to char in divr8u::$4 = divr8u::rem#7 | 1 +Inferred type updated to unsigned int in clear_screen::$3 = $1e00 + z#21 +Inferred type updated to unsigned int in clear_screen::$4 = clear_screen::$3 + c +Inferred type updated to unsigned int in clear_screen::$5 = $1e00 + z#21 +Inferred type updated to unsigned int in read_chrono::$0 = m * $100 +Inferred type updated to unsigned int in read_chrono::$1 = read_chrono::$0 + l +Inferred type updated to unsigned int in read_chrono::$5 = $b9 - time#9 +Inferred type updated to unsigned int in main::$3 = $1c00 + m +Inferred type updated to char in main::$25 = 7 - l +Inferred type updated to char in main::$26 = 3 * l +Inferred type updated to char in main::$27 = $1a - main::$26 +Inferred type updated to unsigned int in main::$36 = main::$35 + 1 +Inferred type updated to unsigned int in main::$57 = $30 + tu#7 +Inferred type updated to unsigned int in main::$61 = m + $1e15 +Inferred type updated to unsigned int in main::$62 = main::$61 + duck#6 +Inferred type updated to unsigned int in main::$66 = duck#1 + 1 +Inferred type updated to unsigned int in main::$69 = duck#1 + $16 +Inferred type updated to unsigned int in main::$72 = duck#1 + $17 +Inferred type updated to char in main::$78 = $10 & m +Inferred type updated to unsigned int in main::$147 = score#19 - $a +Inferred type updated to unsigned int in main::$151 = duck#7 + 1 +Inferred type updated to unsigned int in main::$152 = main::$151 + c +Inferred type updated to unsigned int in main::$153 = duck#7 + $16 +Inferred type updated to unsigned int in main::$154 = main::$153 + c +Inferred type updated to unsigned int in main::$155 = duck#7 + $17 +Inferred type updated to unsigned int in main::$156 = main::$155 + c +Inferred type updated to char in main::$81 = $80 & n#9 +Inferred type updated to char in main::$84 = 4 & m +Inferred type updated to char in main::$88 = 8 & m +Inferred type updated to unsigned int in main::$87 = y#11 - $16 +Inferred type updated to char in main::$92 = $20 & m +Inferred type updated to unsigned int in main::$91 = y#12 + $16 +Inferred type updated to unsigned int in main::$104 = y#13 + 1 +Inferred type updated to unsigned int in main::$107 = y#13 + $16 +Inferred type updated to unsigned int in main::$110 = y#13 + $17 +Inferred type updated to unsigned int in main::$100 = score#21 - $a +Inferred type updated to unsigned int in main::$96 = $c - time#13 +Inferred type updated to unsigned int in main::$97 = main::$96 * $a +Inferred type updated to unsigned int in main::$98 = score#23 + main::$97 +Inferred type updated to unsigned int in main::$126 = peephole#7 + 1 +Inferred type updated to unsigned int in main::$127 = peephole#7 + 1 +Inferred type updated to unsigned int in main::$128 = main::$127 + c +Inferred type updated to unsigned int in main::$129 = peephole#7 + $16 +Inferred type updated to unsigned int in main::$130 = peephole#7 + $16 +Inferred type updated to unsigned int in main::$131 = main::$130 + c +Inferred type updated to unsigned int in main::$132 = peephole#7 + $17 +Inferred type updated to unsigned int in main::$133 = peephole#7 + $17 +Inferred type updated to unsigned int in main::$134 = main::$133 + c +Inferred type updated to unsigned int in main::$137 = duck#9 + 1 +Inferred type updated to unsigned int in main::$138 = duck#9 + 1 +Inferred type updated to unsigned int in main::$139 = main::$138 + c +Inferred type updated to unsigned int in main::$140 = duck#9 + $16 +Inferred type updated to unsigned int in main::$141 = duck#9 + $16 +Inferred type updated to unsigned int in main::$142 = main::$141 + c +Inferred type updated to unsigned int in main::$143 = duck#9 + $17 +Inferred type updated to unsigned int in main::$144 = duck#9 + $17 +Inferred type updated to unsigned int in main::$145 = main::$144 + c +Inferred type updated to unsigned int in main::$120 = main::$119 + 1 +Inferred type updated to unsigned int in main::$122 = main::$121 + $16 +Inferred type updated to unsigned int in main::$124 = main::$123 + $17 +Inversing boolean not [19] memset::$1 = memset::num#2 <= 0 from [18] memset::$0 = memset::num#2 > 0 +Inversing boolean not [119] gotoxy::$1 = gotoxy::y#4 <= $19 from [118] gotoxy::$0 = gotoxy::y#4 > $19 +Inversing boolean not [123] gotoxy::$3 = gotoxy::x#4 < $28 from [122] gotoxy::$2 = gotoxy::x#4 >= $28 +Inversing boolean not [148] cputc::$2 = conio_cursor_x != $28 from [147] cputc::$1 = conio_cursor_x == $28 +Inversing boolean not [179] cscroll::$1 = conio_cursor_y != $19 from [178] cscroll::$0 = conio_cursor_y == $19 +Inversing boolean not [212] conio_c64_init::$1 = conio_c64_init::line#0 < $19 from [211] conio_c64_init::$0 = conio_c64_init::line#0 >= $19 +Inversing boolean not [228] divr8u::$3 = divr8u::$1 == 0 from [227] divr8u::$2 = divr8u::$1 != 0 +Inversing boolean not [236] divr8u::$8 = divr8u::rem#6 < divr8u::divisor#2 from [235] divr8u::$7 = divr8u::rem#6 >= divr8u::divisor#2 +Inversing boolean not [316] write_score::$1 = score#13 <= $fde8 from [315] write_score::$0 = score#13 > $fde8 +Inversing boolean not [334] write_score::$4 = score#15 <= 9 from [333] write_score::$3 = score#15 > 9 +Inversing boolean not [338] write_score::$6 = score#16 <= $63 from [337] write_score::$5 = score#16 > $63 +Inversing boolean not [401] read_chrono::$4 = time#0 >= $a from [400] read_chrono::$3 = time#0 < $a +Inversing boolean not [494] main::$24 = l <= 1 from [493] main::$23 = l > 1 +Inversing boolean not [544] main::$31 = main::$29 <= $1f9 from [543] main::$30 = main::$29 > $1f9 +Inversing boolean not [662] main::$80 = main::$78 != 0 from [661] main::$79 = main::$78 == 0 +Inversing boolean not [693] main::$83 = main::$81 != 0 from [692] main::$82 = main::$81 == 0 +Inversing boolean not [700] main::$86 = main::$84 != 0 from [699] main::$85 = main::$84 == 0 +Inversing boolean not [707] main::$90 = main::$88 != 0 from [706] main::$89 = main::$88 == 0 +Inversing boolean not [715] main::$94 = main::$92 != 0 from [714] main::$93 = main::$92 == 0 +Inversing boolean not [857] main::$168 = score#24 <= hiscore#5 from [856] main::$167 = score#24 > hiscore#5 +Successful SSA optimization Pass2UnaryNotSimplification +Alias candidate removed (volatile)conio_line_text = gotoxy::$5 +Alias candidate removed (volatile)conio_line_color = gotoxy::$6 +Alias candidate removed (volatile)chrout::petscii = main::$57 +Alias memcpy::src#2 = memcpy::src#3 +Alias memcpy::dst#2 = memcpy::dst#3 +Alias memcpy::src_end#1 = memcpy::src_end#2 +Alias memcpy::destination#3 = memcpy::destination#5 memcpy::destination#4 memcpy::return#0 memcpy::return#4 memcpy::return#1 +Alias memset::return#0 = memset::str#2 memset::return#4 memset::return#1 +Alias memset::str#3 = memset::str#4 +Alias memset::num#2 = memset::num#3 +Alias memset::c#4 = memset::c#5 +Alias memset::c#2 = memset::c#3 +Alias memset::dst#2 = memset::dst#3 +Alias memset::end#1 = memset::end#2 +Alias memset::str#5 = memset::str#6 +Alias utoa::value#10 = utoa::value#9 utoa::value#13 utoa::value#14 utoa::value#15 utoa::value#11 utoa::value#16 utoa::value#12 +Alias utoa::buffer#11 = utoa::buffer#18 utoa::buffer#22 utoa::buffer#17 utoa::buffer#19 utoa::buffer#14 utoa::buffer#20 utoa::buffer#21 utoa::buffer#7 +Alias utoa::radix#2 = utoa::radix#3 utoa::radix#4 utoa::radix#5 +Alias utoa::digit#2 = utoa::digit#3 utoa::digit#6 utoa::digit#5 +Alias utoa::digit_values#10 = utoa::digit_values#5 utoa::digit_values#6 utoa::digit_values#9 +Alias utoa::value#3 = utoa::value#6 utoa::value#4 utoa::value#5 +Alias utoa::started#2 = utoa::started#3 +Alias utoa::buffer#10 = utoa::buffer#13 utoa::buffer#12 utoa::buffer#8 utoa::buffer#9 +Alias utoa::max_digits#10 = utoa::max_digits#8 utoa::max_digits#5 utoa::max_digits#9 +Alias utoa::digit_value#0 = utoa::digit_value#1 +Alias utoa_append::return#0 = utoa_append::return#3 +Alias utoa::value#0 = utoa::$9 +Alias utoa_append::digit#2 = utoa_append::digit#4 utoa_append::digit#3 +Alias utoa_append::value#2 = utoa_append::value#3 utoa_append::value#4 utoa_append::return#1 utoa_append::return#4 utoa_append::return#2 +Alias utoa_append::sub#1 = utoa_append::sub#2 +Alias utoa_append::buffer#1 = utoa_append::buffer#4 utoa_append::buffer#2 +Alias gotoxy::x#6 = gotoxy::x#7 +Alias gotoxy::y#6 = gotoxy::y#7 +Alias cputc::c#1 = cputc::c#2 +Alias cputs::c#1 = cputs::$0 cputs::c#2 +Alias cputs::s#0 = cputs::s#13 cputs::s#12 +Alias textcolor::return#0 = textcolor::old#0 textcolor::return#9 textcolor::return#1 +Alias divr8u::rem#0 = divr8u::$0 divr8u::rem#7 +Alias divr8u::dividend#0 = divr8u::$5 divr8u::dividend#8 +Alias divr8u::quotient#1 = divr8u::$6 divr8u::quotient#4 +Alias divr8u::dividend#3 = divr8u::dividend#7 +Alias divr8u::quotient#6 = divr8u::quotient#7 +Alias divr8u::divisor#4 = divr8u::divisor#5 +Alias divr8u::i#5 = divr8u::i#6 +Alias divr8u::rem#1 = divr8u::$4 +Alias divr8u::rem#6 = divr8u::rem#8 +Alias divr8u::divisor#2 = divr8u::divisor#3 +Alias divr8u::i#3 = divr8u::i#4 +Alias divr8u::rem#2 = divr8u::$9 +Alias divr8u::rem#11 = divr8u::rem#9 +Alias divr8u::return#0 = divr8u::quotient#5 divr8u::quotient#8 divr8u::return#4 divr8u::return#1 +Alias rem8u#0 = rem8u#12 rem8u#1 +Alias divr8u::dividend#1 = div16u8u::$0 +Alias divr8u::return#2 = divr8u::return#5 +Alias div16u8u::dividend#1 = div16u8u::dividend#2 +Alias div16u8u::divisor#1 = div16u8u::divisor#2 +Alias rem8u#13 = rem8u#2 +Alias divr8u::dividend#2 = div16u8u::$2 +Alias divr8u::return#3 = divr8u::return#6 +Alias div16u8u::quotient_hi#0 = div16u8u::quotient_hi#1 +Alias rem8u#14 = rem8u#3 rem8u#15 rem8u#4 +Alias div16u8u::return#0 = div16u8u::quotient#0 div16u8u::return#3 div16u8u::return#1 +Alias z#2 = z#21 z#20 z#65 z#52 z#39 z#22 +Alias clear_screen::m#3 = clear_screen::m#4 +Alias clear_screen::n#3 = clear_screen::n#4 +Alias score#14 = score#39 score#30 score#15 score#31 +Alias score#40 = score#49 score#59 +Alias score#16 = score#68 +Alias score#1 = score#50 score#32 score#41 score#17 +Alias wait::n#5 = wait::n#9 +Alias z#23 = z#24 z#54 +Alias wait::n#10 = wait::n#8 wait::n#7 +Alias z#25 = z#40 z#5 +Alias div16u8u::dividend#0 = read_chrono::$1 +Alias div16u8u::return#2 = div16u8u::return#4 +Alias rem8u#16 = rem8u#5 rem8u#24 +Alias time#0 = read_chrono::$2 time#9 +Alias rem8u#17 = rem8u#6 +Alias time#1 = time#10 +Alias z#67 = z#75 z#82 +Alias rem8u#137 = rem8u#138 rem8u#139 +Alias y#124 = y#125 y#126 +Alias hiscore#120 = hiscore#121 hiscore#122 +Alias n#119 = n#120 n#121 +Alias z#55 = z#66 +Alias rem8u#135 = rem8u#136 +Alias y#122 = y#123 +Alias hiscore#118 = hiscore#119 +Alias n#117 = n#118 +Alias rem8u#127 = rem8u#133 rem8u#134 rem8u#132 rem8u#131 rem8u#130 rem8u#129 rem8u#128 +Alias y#114 = y#120 y#121 y#119 y#118 y#117 y#116 y#115 +Alias hiscore#110 = hiscore#116 hiscore#117 hiscore#115 hiscore#114 hiscore#113 hiscore#112 hiscore#111 +Alias n#109 = n#115 n#116 n#114 n#113 n#112 n#111 n#110 +Alias z#26 = z#6 z#98 z#93 z#88 z#83 z#76 z#68 +Alias z#42 = z#57 +Alias rem8u#113 = rem8u#123 rem8u#126 rem8u#120 rem8u#118 rem8u#116 +Alias y#100 = y#110 y#113 y#107 y#105 y#103 +Alias hiscore#101 = hiscore#106 hiscore#109 hiscore#103 hiscore#99 hiscore#96 +Alias n#100 = n#107 n#108 n#106 n#105 n#103 +Alias z#27 = z#7 +Alias k#101 = k#20 k#6 k#17 k#98 k#95 +Alias rem8u#102 = rem8u#124 rem8u#110 rem8u#121 rem8u#108 rem8u#105 +Alias y#108 = y#111 y#97 y#95 y#92 y#89 +Alias hiscore#104 = hiscore#107 hiscore#93 hiscore#91 hiscore#88 hiscore#85 +Alias n#89 = n#95 n#97 n#92 +Alias n#101 = n#13 n#7 n#8 n#104 +Alias k#11 = k#21 k#14 k#18 k#7 +Alias rem8u#114 = rem8u#125 rem8u#119 rem8u#122 rem8u#117 +Alias y#101 = y#112 y#106 y#109 y#104 +Alias hiscore#100 = hiscore#108 hiscore#102 hiscore#105 hiscore#97 +Alias score#2 = score#92 score#84 score#77 score#69 score#60 score#51 +Alias tu#0 = tu#81 tu#79 tu#77 tu#75 tu#71 tu#66 +Alias rem8u#100 = rem8u#101 rem8u#99 rem8u#98 rem8u#97 rem8u#95 rem8u#93 +Alias y#80 = y#87 y#88 y#86 y#85 y#84 y#82 +Alias z#128 = z#135 z#136 z#134 z#133 z#132 z#130 +Alias peephole#0 = peephole#85 peephole#84 peephole#83 peephole#82 peephole#80 peephole#78 +Alias hiscore#76 = hiscore#83 hiscore#84 hiscore#82 hiscore#81 hiscore#80 hiscore#78 +Alias k#86 = k#93 k#94 k#92 k#91 k#90 k#88 +Alias n#80 = n#87 n#88 n#86 n#85 n#84 n#82 +Alias random::k#0 = main::$25 +Alias random::n#0 = main::$27 +Alias z#28 = z#43 z#69 +Alias rem8u#103 = rem8u#106 rem8u#111 +Alias y#90 = y#93 y#98 +Alias hiscore#86 = hiscore#89 hiscore#94 +Alias k#103 = k#96 k#99 +Alias n#90 = n#93 n#98 +Alias j#11 = j#23 j#12 +Alias z#29 = z#77 z#58 z#70 z#44 +Alias rem8u#104 = rem8u#115 rem8u#109 rem8u#112 rem8u#107 +Alias y#102 = y#96 y#99 y#94 y#91 +Alias hiscore#87 = hiscore#98 hiscore#92 hiscore#95 hiscore#90 +Alias k#100 = k#105 k#102 k#104 k#97 +Alias n#102 = n#96 n#99 n#94 n#91 +Alias z#9 = main::$36 +Alias j#13 = j#14 j#15 +Alias score#29 = score#61 score#42 score#52 +Alias tu#31 = tu#72 tu#58 tu#67 tu#51 tu#43 tu#37 +Alias rem8u#80 = rem8u#96 rem8u#92 rem8u#94 rem8u#90 rem8u#88 rem8u#84 +Alias y#68 = y#83 y#79 y#81 y#78 y#76 y#72 +Alias z#120 = z#131 z#127 z#129 z#126 z#125 z#123 +Alias peephole#69 = peephole#81 peephole#77 peephole#79 peephole#76 peephole#75 peephole#72 +Alias hiscore#69 = hiscore#79 hiscore#75 hiscore#77 hiscore#74 hiscore#73 hiscore#71 +Alias k#79 = k#89 k#85 k#87 k#84 k#83 k#81 +Alias n#73 = n#83 n#79 n#81 n#78 n#77 n#75 +Alias score#105 = score#3 score#18 score#107 +Alias j#16 = j#17 j#18 +Alias tu#27 = tu#38 tu#32 +Alias score#104 = score#108 score#106 +Alias rem8u#77 = rem8u#85 rem8u#81 +Alias y#65 = y#73 y#69 +Alias z#118 = z#124 z#121 +Alias peephole#67 = peephole#73 peephole#70 +Alias hiscore#68 = hiscore#72 hiscore#70 +Alias k#78 = k#82 k#80 +Alias n#72 = n#76 n#74 +Alias tu#13 = tu#18 tu#23 tu#6 tu#7 tu#44 tu#59 tu#52 tu#45 +Alias score#100 = score#102 score#103 score#97 score#93 score#85 score#98 score#94 score#86 +Alias rem8u#48 = rem8u#73 rem8u#75 rem8u#70 rem8u#63 rem8u#55 rem8u#64 rem8u#56 rem8u#49 +Alias y#49 = y#61 y#63 y#59 y#56 y#53 y#57 y#54 y#50 +Alias z#102 = z#114 z#116 z#112 z#109 z#106 z#110 z#107 z#103 +Alias peephole#52 = peephole#63 peephole#65 peephole#61 peephole#58 peephole#55 peephole#59 peephole#56 peephole#53 +Alias hiscore#44 = hiscore#65 hiscore#67 hiscore#62 hiscore#56 hiscore#50 hiscore#57 hiscore#51 hiscore#45 +Alias k#54 = k#75 k#77 k#72 k#66 k#60 k#67 k#61 k#55 +Alias n#52 = n#70 n#71 n#69 n#64 n#58 n#65 n#59 n#53 +Alias tu#20 = tu#33 tu#39 tu#28 tu#24 +Alias score#44 = score#70 score#78 score#62 score#53 +Alias rem8u#32 = rem8u#40 rem8u#44 rem8u#37 rem8u#34 +Alias y#36 = y#45 y#47 y#43 y#40 +Alias z#78 = z#94 z#99 z#89 z#84 +Alias peephole#40 = peephole#48 peephole#50 peephole#46 peephole#42 +Alias hiscore#33 = hiscore#38 hiscore#41 hiscore#36 hiscore#34 +Alias k#43 = k#48 k#51 k#46 k#44 +Alias n#41 = n#46 n#49 n#44 n#42 +Alias duck#0 = duck#6 +Alias duck#1 = main::$62 duck#37 duck#31 +Alias time#18 = time#2 +Alias rem8u#25 = rem8u#28 rem8u#86 rem8u#82 rem8u#78 rem8u#91 rem8u#89 rem8u#87 rem8u#83 rem8u#79 rem8u#76 rem8u#74 rem8u#72 rem8u#69 rem8u#61 rem8u#62 +Alias time#11 = time#19 time#60 time#59 time#58 time#57 time#56 time#55 time#54 time#53 time#52 time#51 time#50 time#49 time#47 time#48 +Alias y#18 = y#26 y#31 y#74 y#70 y#66 y#9 y#77 y#75 y#71 y#67 y#64 y#62 y#60 y#58 y#55 y#51 y#52 +Alias peephole#31 = peephole#35 peephole#37 peephole#32 peephole#74 peephole#71 peephole#68 peephole#66 peephole#64 peephole#62 peephole#60 peephole#57 peephole#54 peephole#51 peephole#49 peephole#47 peephole#44 peephole#45 +Alias duck#13 = duck#43 duck#25 duck#39 duck#18 duck#7 duck#38 duck#58 duck#57 duck#56 duck#55 duck#54 duck#53 duck#52 duck#51 duck#50 duck#48 duck#49 +Alias score#19 = score#87 score#33 score#80 score#79 +Alias z#100 = z#71 z#96 z#59 z#45 z#95 +Alias tu#14 = tu#73 tu#69 tu#8 tu#68 +Alias hiscore#10 = hiscore#66 hiscore#31 hiscore#64 hiscore#30 hiscore#29 hiscore#28 hiscore#63 hiscore#27 hiscore#26 hiscore#24 hiscore#22 hiscore#20 hiscore#18 hiscore#16 hiscore#13 hiscore#5 +Alias k#27 = k#76 k#41 k#74 k#40 k#39 k#38 k#73 k#37 k#36 k#35 k#34 k#33 k#32 k#31 k#30 k#29 k#28 +Alias rem8u#18 = rem8u#7 rem8u#71 +Alias time#12 = time#3 time#40 +Alias n#25 = n#38 n#39 n#37 n#36 n#35 n#34 n#33 n#32 n#31 n#30 n#29 n#28 n#27 n#26 +Alias score#4 = main::$147 +Alias tu#1 = tu#15 tu#9 tu#85 tu#84 tu#83 tu#82 tu#80 tu#78 tu#76 tu#74 tu#70 tu#64 tu#65 +Alias score#101 = score#5 score#20 score#99 score#95 score#90 score#82 score#75 score#66 score#57 score#46 score#35 score#24 score#25 hiscore#0 +Alias z#10 = z#30 z#49 +Alias n#14 = n#2 +Alias y#10 = y#19 +Alias peephole#26 = peephole#27 +Alias duck#32 = duck#33 +Alias score#71 = score#72 +Alias time#36 = time#37 +Alias z#90 = z#91 +Alias tu#60 = tu#61 +Alias rem8u#65 = rem8u#66 +Alias hiscore#58 = hiscore#59 +Alias k#68 = k#69 +Alias n#66 = n#9 +Alias y#11 = y#20 +Alias peephole#21 = peephole#22 +Alias duck#26 = duck#27 +Alias score#63 = score#64 +Alias time#31 = time#32 +Alias z#85 = z#86 +Alias tu#53 = tu#54 +Alias rem8u#57 = rem8u#58 +Alias hiscore#52 = hiscore#53 +Alias k#62 = k#63 +Alias n#60 = n#61 +Alias y#2 = main::$87 +Alias y#12 = y#21 +Alias peephole#16 = peephole#17 +Alias duck#19 = duck#20 +Alias score#54 = score#55 +Alias time#27 = time#28 +Alias z#79 = z#80 +Alias tu#46 = tu#47 +Alias rem8u#50 = rem8u#51 +Alias hiscore#46 = hiscore#47 +Alias k#56 = k#57 +Alias n#54 = n#55 +Alias y#3 = main::$91 +Alias peephole#12 = peephole#6 peephole#33 peephole#28 peephole#23 peephole#29 peephole#24 +Alias duck#14 = duck#8 duck#44 duck#40 duck#34 duck#41 duck#35 +Alias score#21 = score#34 score#45 score#23 +Alias time#13 = time#20 time#23 time#45 time#43 time#41 +Alias z#46 = z#61 z#72 z#60 z#47 +Alias y#22 = y#38 y#37 y#32 y#27 y#33 y#28 +Alias tu#40 = tu#63 tu#62 tu#55 tu#48 tu#56 tu#49 +Alias rem8u#45 = rem8u#68 rem8u#67 rem8u#59 rem8u#52 rem8u#60 rem8u#53 +Alias hiscore#42 = hiscore#61 hiscore#60 hiscore#54 hiscore#48 hiscore#55 hiscore#49 +Alias k#52 = k#71 k#70 k#64 k#58 k#65 k#59 +Alias n#50 = n#68 n#67 n#62 n#56 n#63 n#57 +Alias score#6 = main::$100 +Alias score#22 = score#7 score#88 +Alias z#11 = z#31 +Alias score#8 = main::$98 score#89 +Alias z#12 = z#32 +Alias y#35 = y#4 peephole#7 y#41 peephole#43 peephole#39 +Alias duck#15 = duck#9 duck#30 +Alias time#17 = time#24 time#29 +Alias tu#19 = tu#25 tu#29 +Alias score#43 = score#56 score#65 +Alias rem8u#31 = rem8u#35 rem8u#38 +Alias hiscore#32 = hiscore#35 hiscore#37 +Alias k#42 = k#45 k#47 +Alias n#40 = n#43 n#45 +Alias z#13 = z#33 +Alias z#14 = z#34 +Alias peephole#13 = peephole#8 +Alias y#13 = y#14 peephole#1 +Alias z#62 = z#63 +Alias duck#21 = duck#22 +Alias time#33 = time#34 +Alias tu#34 = tu#35 +Alias score#73 = score#74 +Alias rem8u#41 = rem8u#42 +Alias hiscore#39 = hiscore#40 +Alias k#49 = k#50 +Alias n#47 = n#48 +Alias z#104 = z#15 z#35 z#122 z#119 z#117 z#115 z#113 z#111 z#108 z#105 +Alias z#101 = z#97 z#92 z#87 z#81 +Alias k#22 = k#25 k#26 k#24 k#23 +Alias n#20 = n#23 n#24 n#22 n#21 +Alias peephole#30 = peephole#38 peephole#41 peephole#36 peephole#34 +Alias score#67 = score#91 score#96 score#83 score#76 +Alias tu#30 = tu#50 tu#57 tu#42 tu#36 +Alias duck#36 = duck#46 duck#47 duck#45 duck#42 +Alias time#35 = time#44 time#46 time#42 time#39 +Alias rem8u#36 = rem8u#47 rem8u#54 rem8u#43 rem8u#39 +Alias y#39 = y#46 y#48 y#44 y#42 +Alias hiscore#19 = hiscore#25 hiscore#6 hiscore#23 hiscore#21 +Alias j#19 = j#6 j#24 j#20 j#7 +Alias z#16 = z#56 z#74 z#50 z#36 +Alias k#12 = k#15 k#19 k#8 k#2 +Alias n#10 = n#17 n#19 n#15 n#3 +Alias peephole#14 = peephole#19 peephole#25 peephole#9 peephole#2 +Alias score#26 = score#47 score#58 score#36 score#9 +Alias tu#10 = tu#21 tu#26 tu#16 tu#2 +Alias duck#10 = duck#23 duck#29 duck#16 duck#2 +Alias time#14 = time#25 time#30 time#21 time#5 +Alias rem8u#19 = rem8u#29 rem8u#33 rem8u#26 rem8u#8 +Alias y#15 = y#29 y#34 y#24 y#5 +Alias hiscore#1 = hiscore#14 hiscore#17 hiscore#11 hiscore#7 +Alias z#17 = z#64 z#51 +Alias k#13 = k#16 k#3 +Alias n#16 = n#18 n#4 +Alias peephole#15 = peephole#20 peephole#3 +Alias score#10 = score#48 score#37 +Alias tu#17 = tu#22 tu#3 +Alias j#25 = j#26 j#8 +Alias duck#17 = duck#24 duck#3 +Alias time#22 = time#26 time#6 +Alias rem8u#27 = rem8u#30 rem8u#9 +Alias y#25 = y#30 y#6 +Alias hiscore#12 = hiscore#15 hiscore#2 +Alias z#18 = z#37 z#38 z#19 +Alias k#10 = k#4 k#9 k#5 +Alias n#11 = n#5 n#12 n#6 +Alias peephole#10 = peephole#4 peephole#11 peephole#5 +Alias score#11 = score#27 score#28 score#12 +Alias tu#11 = tu#4 tu#12 tu#5 +Alias j#10 = j#9 j#21 j#22 +Alias duck#11 = duck#4 duck#12 duck#5 +Alias time#15 = time#7 time#16 time#8 +Alias rem8u#10 = rem8u#20 rem8u#21 rem8u#11 +Alias y#16 = y#7 y#17 y#8 +Alias hiscore#3 = hiscore#8 hiscore#9 hiscore#4 +Successful SSA optimization Pass2AliasElimination +Alias candidate removed (volatile)conio_line_text = gotoxy::$5 +Alias candidate removed (volatile)conio_line_color = gotoxy::$6 +Alias candidate removed (volatile)chrout::petscii = main::$57 +Alias utoa::value#10 = utoa::value#8 +Alias utoa::buffer#11 = utoa::buffer#16 +Alias utoa::digit#2 = utoa::digit#4 +Alias utoa::max_digits#10 = utoa::max_digits#6 +Alias utoa::digit_values#10 = utoa::digit_values#7 +Alias gotoxy::x#4 = gotoxy::x#6 +Alias gotoxy::y#5 = gotoxy::y#6 +Alias divr8u::dividend#3 = divr8u::dividend#4 +Alias divr8u::quotient#3 = divr8u::quotient#6 +Alias divr8u::divisor#2 = divr8u::divisor#4 divr8u::divisor#7 +Alias divr8u::i#2 = divr8u::i#3 divr8u::i#5 +Alias divr8u::dividend#0 = divr8u::dividend#6 +Alias score#14 = score#16 score#40 +Alias rem8u#16 = rem8u#17 +Alias time#0 = time#1 +Alias n#14 = n#66 n#60 n#54 n#50 n#51 +Alias peephole#12 = peephole#26 peephole#31 peephole#21 peephole#16 peephole#18 peephole#30 +Alias duck#13 = duck#32 duck#26 duck#19 duck#14 duck#28 duck#36 +Alias score#19 = score#71 score#63 score#54 score#21 +Alias time#12 = time#36 time#31 time#27 time#13 +Alias z#100 = z#90 z#85 z#79 z#46 +Alias tu#14 = tu#60 tu#53 tu#46 tu#40 tu#41 +Alias rem8u#18 = rem8u#65 rem8u#57 rem8u#50 rem8u#45 rem8u#46 +Alias hiscore#10 = hiscore#58 hiscore#52 hiscore#46 hiscore#42 hiscore#43 +Alias k#22 = k#68 k#27 k#62 k#56 k#52 k#53 +Alias y#22 = y#23 +Alias z#48 = z#62 +Alias duck#15 = duck#21 +Alias time#17 = time#33 +Alias tu#19 = tu#34 +Alias score#43 = score#73 +Alias rem8u#31 = rem8u#41 +Alias hiscore#32 = hiscore#39 +Alias k#42 = k#49 +Alias n#40 = n#47 +Alias z#101 = z#104 +Alias n#20 = n#25 +Alias score#101 = score#67 +Alias tu#1 = tu#30 +Alias time#11 = time#35 +Alias rem8u#25 = rem8u#36 +Alias y#18 = y#39 +Successful SSA optimization Pass2AliasElimination +Alias candidate removed (volatile)conio_line_text = gotoxy::$5 +Alias candidate removed (volatile)conio_line_color = gotoxy::$6 +Alias candidate removed (volatile)chrout::petscii = main::$57 +Alias y#13 = y#22 +Alias peephole#12 = peephole#13 +Alias duck#13 = duck#15 +Alias tu#14 = tu#19 +Alias rem8u#18 = rem8u#31 +Alias hiscore#10 = hiscore#32 +Alias k#22 = k#42 +Alias n#14 = n#40 +Successful SSA optimization Pass2AliasElimination +Alias candidate removed (volatile)conio_line_text = gotoxy::$5 +Alias candidate removed (volatile)conio_line_color = gotoxy::$6 +Alias candidate removed (volatile)chrout::petscii = main::$57 +Identical Phi Values memcpy::src_end#1 memcpy::src_end#0 +Identical Phi Values memcpy::destination#3 memcpy::destination#2 +Identical Phi Values memset::end#1 memset::end#0 +Identical Phi Values memset::str#5 memset::str#3 +Identical Phi Values memset::c#2 memset::c#4 +Identical Phi Values utoa::max_digits#10 utoa::max_digits#7 +Identical Phi Values utoa::digit_values#10 utoa::digit_values#8 +Identical Phi Values utoa_append::value#5 utoa_append::value#0 +Identical Phi Values utoa_append::sub#3 utoa_append::sub#0 +Identical Phi Values utoa_append::buffer#3 utoa_append::buffer#0 +Identical Phi Values utoa_append::sub#1 utoa_append::sub#3 +Identical Phi Values utoa_append::buffer#1 utoa_append::buffer#3 +Identical Phi Values cputc::c#1 cputc::c#0 +Identical Phi Values divr8u::divisor#2 divr8u::divisor#6 +Identical Phi Values div16u8u::dividend#1 div16u8u::dividend#0 +Identical Phi Values div16u8u::divisor#1 div16u8u::divisor#0 +Identical Phi Values rem8u#22 rem8u#23 +Identical Phi Values rem8u#13 rem8u#0 +Identical Phi Values rem8u#14 rem8u#0 +Identical Phi Values clear_screen::m#3 clear_screen::m#5 +Identical Phi Values clear_screen::n#3 clear_screen::n#5 +Identical Phi Values random::k#3 random::k#4 +Identical Phi Values random::n#3 random::n#4 +Identical Phi Values score#14 score#38 +Identical Phi Values score#1 score#14 +Identical Phi Values wait::n#10 wait::n#5 +Identical Phi Values rem8u#23 rem8u#25 +Identical Phi Values rem8u#16 rem8u#14 +Identical Phi Values z#67 z#17 +Identical Phi Values rem8u#137 rem8u#27 +Identical Phi Values y#124 y#25 +Identical Phi Values hiscore#120 hiscore#12 +Identical Phi Values n#119 n#16 +Identical Phi Values z#55 z#67 +Identical Phi Values rem8u#135 rem8u#137 +Identical Phi Values y#122 y#124 +Identical Phi Values hiscore#118 hiscore#120 +Identical Phi Values n#117 n#119 +Identical Phi Values z#26 z#2 +Identical Phi Values z#42 z#26 +Identical Phi Values rem8u#113 rem8u#127 +Identical Phi Values y#100 y#114 +Identical Phi Values hiscore#101 hiscore#110 +Identical Phi Values n#100 n#109 +Identical Phi Values z#27 z#2 +Identical Phi Values k#11 k#101 +Identical Phi Values rem8u#114 rem8u#102 +Identical Phi Values y#101 y#108 +Identical Phi Values hiscore#100 hiscore#104 +Identical Phi Values z#29 z#28 +Identical Phi Values rem8u#104 rem8u#103 +Identical Phi Values y#102 y#90 +Identical Phi Values hiscore#87 hiscore#86 +Identical Phi Values k#100 k#103 +Identical Phi Values n#102 n#90 +Identical Phi Values score#29 score#2 +Identical Phi Values tu#31 tu#0 +Identical Phi Values rem8u#80 rem8u#100 +Identical Phi Values y#68 y#80 +Identical Phi Values z#120 z#128 +Identical Phi Values peephole#69 peephole#0 +Identical Phi Values hiscore#69 hiscore#76 +Identical Phi Values k#79 k#86 +Identical Phi Values n#73 n#80 +Identical Phi Values score#105 score#1 +Identical Phi Values tu#27 tu#31 +Identical Phi Values score#104 score#105 +Identical Phi Values rem8u#77 rem8u#80 +Identical Phi Values y#65 y#68 +Identical Phi Values z#118 z#120 +Identical Phi Values peephole#67 peephole#69 +Identical Phi Values hiscore#68 hiscore#69 +Identical Phi Values k#78 k#79 +Identical Phi Values n#72 n#73 +Identical Phi Values tu#20 tu#13 +Identical Phi Values score#44 score#100 +Identical Phi Values rem8u#32 rem8u#48 +Identical Phi Values y#36 y#49 +Identical Phi Values z#78 z#102 +Identical Phi Values peephole#40 peephole#52 +Identical Phi Values hiscore#33 hiscore#44 +Identical Phi Values k#43 k#54 +Identical Phi Values n#41 n#52 +Identical Phi Values tu#14 tu#20 +Identical Phi Values duck#13 duck#1 +Identical Phi Values hiscore#10 hiscore#33 +Identical Phi Values k#22 k#43 +Identical Phi Values rem8u#18 rem8u#16 +Identical Phi Values time#12 time#0 +Identical Phi Values score#101 score#1 +Identical Phi Values z#10 z#25 +Identical Phi Values score#22 score#1 +Identical Phi Values z#11 z#25 +Identical Phi Values z#12 z#25 +Identical Phi Values z#13 z#25 +Identical Phi Values z#14 z#25 +Identical Phi Values z#101 z#2 +Identical Phi Values z#16 z#101 +Identical Phi Values k#12 k#22 +Identical Phi Values n#10 n#20 +Identical Phi Values peephole#14 peephole#12 +Identical Phi Values score#26 score#101 +Identical Phi Values tu#10 tu#1 +Identical Phi Values duck#10 duck#13 +Identical Phi Values time#14 time#11 +Identical Phi Values rem8u#19 rem8u#25 +Identical Phi Values y#15 y#18 +Identical Phi Values hiscore#1 hiscore#19 +Identical Phi Values z#18 z#16 +Identical Phi Values k#10 k#12 +Identical Phi Values n#11 n#10 +Identical Phi Values peephole#10 peephole#14 +Identical Phi Values score#11 score#26 +Identical Phi Values tu#11 tu#10 +Identical Phi Values j#10 j#19 +Identical Phi Values duck#11 duck#10 +Identical Phi Values time#15 time#14 +Identical Phi Values rem8u#10 rem8u#19 +Identical Phi Values y#16 y#15 +Identical Phi Values hiscore#3 hiscore#1 +Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values memset::return#0 memset::str#3 +Identical Phi Values wait::n#5 wait::n#6 +Identical Phi Values rem8u#102 rem8u#127 +Identical Phi Values y#108 y#114 +Identical Phi Values hiscore#104 hiscore#110 +Identical Phi Values rem8u#103 rem8u#102 +Identical Phi Values y#90 y#108 +Identical Phi Values hiscore#86 hiscore#104 +Identical Phi Values k#103 k#101 +Identical Phi Values n#90 n#89 +Identical Phi Values score#100 score#38 +Identical Phi Values hiscore#44 hiscore#76 +Identical Phi Values k#54 k#86 +Identical Phi Values z#73 z#25 +Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values rem8u#100 rem8u#127 +Identical Phi Values y#80 y#114 +Identical Phi Values hiscore#76 hiscore#110 +Identical Phi Values k#86 k#101 +Identical Phi Values n#80 n#89 +Successful SSA optimization Pass2IdenticalPhiElimination +Identified duplicate assignment right side [290] clear_screen::$5 = $1e00 + z#2 +Identified duplicate assignment right side [770] main::$127 = y#35 + 1 +Identified duplicate assignment right side [775] main::$130 = y#35 + $16 +Identified duplicate assignment right side [780] main::$133 = y#35 + $17 +Identified duplicate assignment right side [792] main::$138 = duck#1 + 1 +Identified duplicate assignment right side [797] main::$141 = duck#1 + $16 +Identified duplicate assignment right side [802] main::$144 = duck#1 + $17 +Identified duplicate assignment right side [812] main::$119 = peephole#12 + c +Identified duplicate assignment right side [815] main::$121 = peephole#12 + c +Identified duplicate assignment right side [818] main::$123 = peephole#12 + c +Successful SSA optimization Pass2DuplicateRValueIdentification +Simple Condition memcpy::$1 [7] if(memcpy::src#2!=memcpy::src_end#0) goto memcpy::@2 +Simple Condition memset::$1 [14] if(memset::num#2<=0) goto memset::@1 +Simple Condition memset::$3 [21] if(memset::dst#2!=memset::end#0) goto memset::@4 +Simple Condition utoa::$0 [29] if(utoa::radix#2==DECIMAL) goto utoa::@1 +Simple Condition utoa::$1 [33] if(utoa::radix#2==HEXADECIMAL) goto utoa::@2 +Simple Condition utoa::$2 [37] if(utoa::radix#2==OCTAL) goto utoa::@3 +Simple Condition utoa::$3 [41] if(utoa::radix#2==BINARY) goto utoa::@4 +Simple Condition utoa::$5 [58] if(utoa::digit#2=utoa_append::sub#0) goto utoa_append::@2 +Simple Condition gotoxy::$1 [90] if(gotoxy::y#4<=$19) goto gotoxy::@1 +Simple Condition gotoxy::$3 [93] if(gotoxy::x#4<$28) goto gotoxy::@2 +Simple Condition cputc::$0 [108] if(cputc::c#0==' +') goto cputc::@1 +Simple Condition cputc::$2 [114] if(conio_cursor_x!=$28) goto cputc::@return +Simple Condition cputs::$2 [129] if(0!=cputs::c#1) goto cputs::@2 +Simple Condition cscroll::$1 [138] if(conio_cursor_y!=$19) goto cscroll::@return +Simple Condition cscroll::$7 [140] if(0!=conio_scroll_enable) goto cscroll::@3 +Simple Condition conio_c64_init::$1 [170] if(conio_c64_init::line#0<$19) goto conio_c64_init::@1 +Simple Condition divr8u::$3 [184] if(divr8u::$1==0) goto divr8u::@2 +Simple Condition divr8u::$8 [189] if(divr8u::rem#6=$a) goto read_chrono::@return +Simple Condition main::$2 [319] if(m<$28) goto main::@2 +Simple Condition main::$11 [347] if(l>5) goto main::@4 +Simple Condition main::$16 [362] if(k#101<$16) goto main::@7 +Simple Condition main::$24 [374] if(l<=1) goto main::@12 +Simple Condition main::$18 [377] if(n#101<$16) goto main::@10 +Simple Condition main::$31 [410] if(main::$29<=$1f9) goto main::@14 +Simple Condition main::$32 [414] if(j#11<=m) goto main::@16 +Simple Condition main::$37 [423] if(z#9<$1fa) goto main::@13 +Simple Condition main::$44 [426] if(j#13<4) goto main::@19 +Simple Condition main::$49 [440] if(j#16<5) goto main::@22 +Simple Condition main::$54 [453] if(tu#13<$a) goto main::@24 +Simple Condition main::$76 [488] if(time#11<$a) goto main::@28 +Simple Condition main::$80 [497] if(main::$78!=0) goto main::@30 +Simple Condition main::$157 [519] if(tu#1<$b) goto main::@23 +Simple Condition main::$83 [523] if(main::$81!=0) goto main::@31 +Simple Condition main::$86 [528] if(main::$84!=0) goto main::@32 +Simple Condition main::$90 [533] if(main::$88!=0) goto main::@33 +Simple Condition main::$94 [538] if(main::$92!=0) goto main::@34 +Simple Condition main::$95 [559] if(peephole#12!=duck#1) goto main::@35 +Simple Condition main::$168 [654] if(score#38<=hiscore#110) goto main::@48 +Simple Condition main::$176 [674] if(j#19==$b) goto main::@3 +Successful SSA optimization Pass2ConditionalJumpSimplification +Rewriting ! if()-condition to reversed if() [63] utoa::$8 = ! utoa::$7 +Rewriting || if()-condition to two if()s [62] utoa::$7 = utoa::started#2 || utoa::$6 +Rewriting || if()-condition to two if()s [238] random::$2 = random::$0 || random::$1 +Rewriting || if()-condition to two if()s [482] main::$74 = main::$71 || main::$73 +Rewriting || if()-condition to two if()s [479] main::$71 = main::$68 || main::$70 +Rewriting || if()-condition to two if()s [476] main::$68 = main::$65 || main::$67 +Rewriting || if()-condition to two if()s [473] main::$65 = main::$63 || main::$64 +Rewriting ! if()-condition to reversed if() [555] main::$117 = ! main::$116 +Rewriting && if()-condition to two if()s [554] main::$116 = main::$114 && main::$115 +Rewriting && if()-condition to two if()s [552] main::$114 = main::$112 && main::$113 +Rewriting && if()-condition to two if()s [550] main::$112 = main::$109 && main::$111 +Rewriting && if()-condition to two if()s [547] main::$109 = main::$106 && main::$108 +Rewriting && if()-condition to two if()s [544] main::$106 = main::$103 && main::$105 +Rewriting && if()-condition to two if()s [671] main::$175 = main::$173 && main::$174 +Successful SSA optimization Pass2ConditionalAndOrRewriting +Warning! Adding boolean cast to non-boolean condition utoa::started#2 +Constant right-side identified [143] memcpy::num#0 = (unumber)$19*$28-$28 +Constant right-side identified [148] memcpy::num#1 = (unumber)$19*$28-$28 +Constant right-side identified [175] conio_c64_init::line#1 = (unumber)$19-1 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant utoa::max_digits#0 = 0 +Constant utoa::digit_values#0 = (unsigned int *) 0 +Constant utoa::max_digits#1 = 5 +Constant utoa::digit_values#1 = RADIX_DECIMAL_VALUES +Constant utoa::max_digits#2 = 4 +Constant utoa::digit_values#2 = RADIX_HEXADECIMAL_VALUES +Constant utoa::max_digits#3 = 6 +Constant utoa::digit_values#3 = RADIX_OCTAL_VALUES +Constant utoa::max_digits#4 = $10 +Constant utoa::digit_values#4 = RADIX_BINARY_VALUES +Constant utoa::started#0 = 0 +Constant utoa::digit#0 = 0 +Constant utoa::started#1 = 1 +Constant utoa_append::digit#0 = 0 +Constant gotoxy::y#0 = 0 +Constant gotoxy::x#0 = 0 +Constant cputs::c#0 = 0 +Constant memcpy::destination#0 = (void *)DEFAULT_SCREEN +Constant memcpy::source#0 = (void *)DEFAULT_SCREEN+$28 +Constant memcpy::num#0 = (unumber)$19*$28-$28 +Constant memcpy::destination#1 = (void *)COLORRAM +Constant memcpy::source#1 = (void *)COLORRAM+$28 +Constant memcpy::num#1 = (unumber)$19*$28-$28 +Constant memset::str#0 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 +Constant memset::c#0 = ' ' +Constant memset::num#0 = $28 +Constant memset::str#1 = (void *)COLORRAM+(unsigned int)$19*$28-$28 +Constant memset::num#1 = $28 +Constant gotoxy::x#1 = 0 +Constant gotoxy::y#1 = 0 +Constant gotoxy::x#2 = 0 +Constant conio_c64_init::line#1 = (unumber)$19-1 +Constant divr8u::quotient#0 = 0 +Constant divr8u::i#0 = 0 +Constant divr8u::rem#3 = 0 +Constant z#0 = 0 +Constant gotoxy::x#3 = 0 +Constant gotoxy::y#3 = 0 +Constant score#0 = 0 +Constant utoa::buffer#5 = buffer +Constant utoa::radix#0 = $a +Constant z#3 = 0 +Constant div16u8u::divisor#0 = $3c +Constant clear_screen::n#0 = $20 +Constant clear_screen::m#0 = 0 +Constant textcolor::color#0 = 7 +Constant cputs::s#1 = intro +Constant textcolor::color#1 = 1 +Constant cputs::s#2 = levels +Constant textcolor::color#2 = 2 +Constant cputs::s#3 = foot +Constant clear_screen::n#1 = 4 +Constant clear_screen::m#1 = 0 +Constant k#0 = 1 +Constant n#0 = 2 +Constant z#8 = 1 +Constant peephole#0 = $1f1f +Constant score#2 = 0 +Constant tu#0 = 1 +Constant j#0 = 0 +Constant j#1 = 1 +Constant j#4 = 0 +Constant random::k#1 = 0 +Constant random::n#1 = $ff +Constant random::k#2 = 0 +Constant random::n#2 = $ff +Constant time#18 = 0 +Constant wait::n#0 = $14 +Constant wait::n#1 = $a +Constant wait::n#2 = $a +Constant time#4 = $a +Constant wait::n#3 = 5 +Constant wait::n#4 = 5 +Constant clear_screen::n#2 = 4 +Constant clear_screen::m#2 = 0 +Constant textcolor::color#3 = 7 +Constant cputs::s#4 = game_over +Constant textcolor::color#4 = 2 +Constant cputs::s#5 = your_score +Constant cputs::s#6 = buffer +Constant textcolor::color#5 = 3 +Constant cputs::s#7 = high_score +Constant utoa::buffer#6 = buffer +Constant utoa::radix#1 = $a +Constant cputs::s#8 = buffer +Constant textcolor::color#6 = 1 +Constant cputs::s#9 = play_again +Constant rem8u#27 = 0 +Constant j#25 = 0 +Constant k#13 = 0 +Constant n#16 = 0 +Constant tu#17 = 0 +Constant duck#17 = 0 +Constant peephole#15 = 0 +Constant y#25 = 0 +Constant z#17 = 0 +Constant time#22 = 0 +Constant score#10 = 0 +Constant hiscore#12 = 0 +Constant conio_scroll_enable = 1 +Successful SSA optimization Pass2ConstantIdentification +Constant divr8u::divisor#0 = div16u8u::divisor#0 +Constant divr8u::divisor#1 = div16u8u::divisor#0 +Successful SSA optimization Pass2ConstantIdentification +if() condition always true - replacing block destination [140] if(0!=conio_scroll_enable) goto cscroll::@3 +Successful SSA optimization Pass2ConstantIfs +Resolved ranged next value [192] divr8u::i#1 = ++ divr8u::i#2 to ++ +Resolved ranged comparison value [194] if(divr8u::i#1!=rangelast(0,7)) goto divr8u::@1 to 8 +Rewriting conditional comparison [90] if(gotoxy::y#4<=$19) goto gotoxy::@1 +Rewriting conditional comparison [259] if(score#38<=9) goto write_score::@2 +Rewriting conditional comparison [261] if(score#38<=$63) goto write_score::@3 +Rewriting conditional comparison [347] if(l>5) goto main::@4 +Rewriting conditional comparison [374] if(l<=1) goto main::@12 +Simplifying expression containing zero buffer in [262] points[2] = buffer[0] +Simplifying expression containing zero buffer in [270] points[1] = buffer[0] +Successful SSA optimization PassNSimplifyExpressionWithZero +Removing PHI-reference to removed block (cscroll::@2) in block gotoxy +Removing PHI-reference to removed block (cscroll::@2) in block gotoxy +Removing unused block cscroll::@2 +Removing unused block cscroll::@8 +Successful SSA optimization Pass2EliminateUnusedBlocks +Eliminating unused variable memcpy::return#2 and assignment [104] memcpy::return#2 = memcpy::destination#2 +Eliminating unused variable memcpy::return#3 and assignment [106] memcpy::return#3 = memcpy::destination#2 +Eliminating unused variable memset::return#2 and assignment [108] memset::return#2 = memset::str#3 +Eliminating unused variable memset::return#3 and assignment [111] memset::return#3 = memset::str#3 +Eliminating unused variable - keeping the phi block z#41 +Eliminating unused variable textcolor::return#2 and assignment [234] textcolor::return#2 = textcolor::return#0 +Eliminating unused variable textcolor::return#3 and assignment [237] textcolor::return#3 = textcolor::return#0 +Eliminating unused variable textcolor::return#4 and assignment [240] textcolor::return#4 = textcolor::return#0 +Eliminating unused variable textcolor::return#5 and assignment [471] textcolor::return#5 = textcolor::return#0 +Eliminating unused variable textcolor::return#6 and assignment [474] textcolor::return#6 = textcolor::return#0 +Eliminating unused variable textcolor::return#7 and assignment [478] textcolor::return#7 = textcolor::return#0 +Eliminating unused variable textcolor::return#8 and assignment [486] textcolor::return#8 = textcolor::return#0 +Eliminating unused constant utoa::max_digits#0 +Eliminating unused constant utoa::digit_values#0 +Eliminating unused constant gotoxy::x#1 +Eliminating unused constant gotoxy::y#1 +Eliminating unused constant cputs::c#0 +Eliminating unused constant j#25 +Eliminating unused constant k#13 +Eliminating unused constant tu#17 +Eliminating unused constant duck#17 +Eliminating unused constant peephole#15 +Eliminating unused constant time#22 +Eliminating unused constant score#10 +Eliminating unused constant conio_scroll_enable +Successful SSA optimization PassNEliminateUnusedVars +Eliminating unused variable textcolor::return#0 and assignment [99] textcolor::return#0 = conio_textcolor +Eliminating unused constant z#17 +Successful SSA optimization PassNEliminateUnusedVars +Adding number conversion cast (unumber) 0 in utoa::$12 = 0 != utoa::started#2 +Adding number conversion cast (unumber) $19+1 in if(gotoxy::y#4<$19+1) goto gotoxy::@1 +Adding number conversion cast (unumber) 1 in if(gotoxy::y#4<(unumber)$19+1) goto gotoxy::@1 +Adding number conversion cast (unumber) 8 in if(divr8u::i#1!=8) goto divr8u::@1 +Adding number conversion cast (unumber) 9+1 in if(score#38<9+1) goto write_score::@2 +Adding number conversion cast (unumber) 1 in if(score#38<(unumber)9+1) goto write_score::@2 +Adding number conversion cast (unumber) $63+1 in if(score#38<$63+1) goto write_score::@3 +Adding number conversion cast (unumber) 1 in if(score#38<(unumber)$63+1) goto write_score::@3 +Adding number conversion cast (unumber) 5+1 in if(l>=5+1) goto main::@4 +Adding number conversion cast (unumber) 1 in if(l>=(unumber)5+1) goto main::@4 +Adding number conversion cast (unumber) 1+1 in if(l<1+1) goto main::@12 +Adding number conversion cast (unumber) 1 in if(l<(unumber)1+1) goto main::@12 +Successful SSA optimization PassNAddNumberTypeConversions +Simplifying constant integer cast 0 +Simplifying constant integer cast $19+(unumber)1 +Simplifying constant integer cast 1 +Simplifying constant integer cast 8 +Simplifying constant integer cast 9+(unumber)1 +Simplifying constant integer cast 1 +Simplifying constant integer cast $63+(unumber)1 +Simplifying constant integer cast 1 +Simplifying constant integer cast 5+(unumber)1 +Simplifying constant integer cast 1 +Simplifying constant integer cast 1+(unumber)1 +Simplifying constant integer cast 1 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) 1 +Finalized unsigned number type (char) 8 +Finalized unsigned number type (char) 1 +Finalized unsigned number type (char) 1 +Finalized unsigned number type (char) 1 +Finalized unsigned number type (char) 1 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias candidate removed (volatile)conio_line_text = gotoxy::$5 +Alias candidate removed (volatile)conio_line_color = gotoxy::$6 +Alias candidate removed (volatile)chrout::petscii = main::$57 +Alias clear_screen::$5 = clear_screen::$3 +Alias main::$127 = main::$126 +Alias main::$130 = main::$129 +Alias main::$133 = main::$132 +Alias main::$138 = main::$137 +Alias main::$141 = main::$140 +Alias main::$144 = main::$143 +Alias main::$119 = main::$118 main::$121 main::$123 +Successful SSA optimization Pass2AliasElimination +Alias candidate removed (volatile)conio_line_text = gotoxy::$5 +Alias candidate removed (volatile)conio_line_color = gotoxy::$6 +Alias candidate removed (volatile)chrout::petscii = main::$57 +Simple Condition utoa::$12 [42] if(0!=utoa::started#2) goto utoa::@14 +Simple Condition random::$0 [161] if(m$1fe3) goto main::@25 +Simple Condition main::$103 [395] if(*((char *)y#13)!=brick) goto main::@122 +Simple Condition main::$173 [469] if(j#19!=$b) goto main::@123 +Simple Condition utoa::$6 [483] if(utoa::value#3>=utoa::digit_value#0) goto utoa::@14 +Condition not simple random::$1 [484] if(random::$1) goto random::@1 +Introduced intermediate condition variable random::$3 = m +Simple Condition random::$1 [484] if(random::$3>random::n#4) goto random::@1 +Simple Condition main::$73 [485] if(*((char *)main::$72)==brick) goto main::@25 +Simple Condition main::$70 [486] if(*((char *)main::$69)==brick) goto main::@25 +Simple Condition main::$67 [487] if(*((char *)main::$66)==brick) goto main::@25 +Simple Condition main::$64 [488] if(*((char *)duck#1)==brick) goto main::@25 +Simple Condition main::$115 [489] if(y#13<$1fe3) goto main::@44 +Simple Condition main::$113 [490] if(y#13>$1e16) goto main::@118 +Simple Condition main::$111 [491] if(*((char *)main::$110)!=brick) goto main::@119 +Simple Condition main::$108 [492] if(*((char *)main::$107)!=brick) goto main::@120 +Simple Condition main::$105 [493] if(*((char *)main::$104)!=brick) goto main::@121 +Simple Condition main::$174 [494] if(j#19!=$1c) goto main::@49 +Successful SSA optimization Pass2ConditionalJumpSimplification +Negating conditional jump and destination [395] if(*((char *)y#13)==brick) goto main::@37 +Negating conditional jump and destination [469] if(j#19==$b) goto main::@50 +Negating conditional jump and destination [489] if(y#13>=$1fe3) goto main::@37 +Negating conditional jump and destination [491] if(*((char *)main::$110)==brick) goto main::@37 +Negating conditional jump and destination [493] if(*((char *)main::$104)==brick) goto main::@37 +Successful SSA optimization Pass2ConditionalJumpSequenceImprovement +Alias candidate removed (volatile)conio_line_text = gotoxy::$5 +Alias candidate removed (volatile)conio_line_color = gotoxy::$6 +Alias candidate removed (volatile)chrout::petscii = main::$57 +Inlining Noop Cast [1] memcpy::src#0 = (char *)memcpy::source#2 keeping memcpy::source#2 +Inlining Noop Cast [2] memcpy::dst#0 = (char *)memcpy::destination#2 keeping memcpy::destination#2 +Inlining Noop Cast [3] memcpy::$2 = (char *)memcpy::source#2 keeping memcpy::source#2 +Inlining Noop Cast [13] memset::$4 = (char *)memset::str#3 keeping memset::str#3 +Inlining Noop Cast [15] memset::dst#0 = (char *)memset::str#3 keeping memset::str#3 +Successful SSA optimization Pass2NopCastInlining +Rewriting multiplication to use shift [38] utoa::$10 = utoa::digit#2 * SIZEOF_UNSIGNED_INT +Rewriting multiplication to use shift and addition[68] gotoxy::line_offset#0 = gotoxy::$7 * $28 +Rewriting multiplication to use shift [201] read_chrono::$0 = m * $100 +Rewriting multiplication to use shift and addition[277] main::$26 = 3 * l +Rewriting multiplication to use shift and addition[388] main::$97 = main::$96 * $a +Successful SSA optimization Pass2MultiplyToShiftRewriting +Inlining constant with var siblings memcpy::destination#0 +Inlining constant with var siblings memcpy::source#0 +Inlining constant with var siblings memcpy::num#0 +Inlining constant with var siblings memcpy::destination#1 +Inlining constant with var siblings memcpy::source#1 +Inlining constant with var siblings memcpy::num#1 +Inlining constant with var siblings memset::str#0 +Inlining constant with var siblings memset::c#0 +Inlining constant with var siblings memset::num#0 +Inlining constant with var siblings memset::str#1 +Inlining constant with var siblings memset::num#1 +Inlining constant with var siblings utoa::max_digits#1 +Inlining constant with var siblings utoa::digit_values#1 +Inlining constant with var siblings utoa::max_digits#2 +Inlining constant with var siblings utoa::digit_values#2 +Inlining constant with var siblings utoa::max_digits#3 +Inlining constant with var siblings utoa::digit_values#3 +Inlining constant with var siblings utoa::max_digits#4 +Inlining constant with var siblings utoa::digit_values#4 +Inlining constant with var siblings utoa::started#0 +Inlining constant with var siblings utoa::digit#0 +Inlining constant with var siblings utoa::started#1 +Inlining constant with var siblings utoa::buffer#5 +Inlining constant with var siblings utoa::radix#0 +Inlining constant with var siblings utoa::buffer#6 +Inlining constant with var siblings utoa::radix#1 +Inlining constant with var siblings utoa_append::digit#0 +Inlining constant with var siblings gotoxy::y#0 +Inlining constant with var siblings gotoxy::x#0 +Inlining constant with var siblings gotoxy::x#2 +Inlining constant with var siblings gotoxy::x#3 +Inlining constant with var siblings gotoxy::y#3 +Inlining constant with var siblings cputs::s#1 +Inlining constant with var siblings cputs::s#2 +Inlining constant with var siblings cputs::s#3 +Inlining constant with var siblings cputs::s#4 +Inlining constant with var siblings cputs::s#5 +Inlining constant with var siblings cputs::s#6 +Inlining constant with var siblings cputs::s#7 +Inlining constant with var siblings cputs::s#8 +Inlining constant with var siblings cputs::s#9 +Inlining constant with var siblings textcolor::color#0 +Inlining constant with var siblings textcolor::color#1 +Inlining constant with var siblings textcolor::color#2 +Inlining constant with var siblings textcolor::color#3 +Inlining constant with var siblings textcolor::color#4 +Inlining constant with var siblings textcolor::color#5 +Inlining constant with var siblings textcolor::color#6 +Inlining constant with var siblings conio_c64_init::line#1 +Inlining constant with var siblings divr8u::quotient#0 +Inlining constant with var siblings divr8u::i#0 +Inlining constant with var siblings divr8u::rem#3 +Inlining constant with var siblings divr8u::divisor#0 +Inlining constant with var siblings divr8u::divisor#1 +Inlining constant with var siblings clear_screen::n#0 +Inlining constant with var siblings clear_screen::m#0 +Inlining constant with var siblings clear_screen::n#1 +Inlining constant with var siblings clear_screen::m#1 +Inlining constant with var siblings clear_screen::n#2 +Inlining constant with var siblings clear_screen::m#2 +Inlining constant with var siblings random::k#1 +Inlining constant with var siblings random::n#1 +Inlining constant with var siblings random::k#2 +Inlining constant with var siblings random::n#2 +Inlining constant with var siblings wait::n#0 +Inlining constant with var siblings wait::n#1 +Inlining constant with var siblings wait::n#2 +Inlining constant with var siblings wait::n#3 +Inlining constant with var siblings wait::n#4 +Inlining constant with var siblings z#0 +Inlining constant with var siblings score#0 +Inlining constant with var siblings z#3 +Inlining constant with var siblings k#0 +Inlining constant with var siblings n#0 +Inlining constant with var siblings z#8 +Inlining constant with var siblings peephole#0 +Inlining constant with var siblings score#2 +Inlining constant with var siblings tu#0 +Inlining constant with var siblings j#0 +Inlining constant with var siblings j#1 +Inlining constant with var siblings j#4 +Inlining constant with var siblings time#18 +Inlining constant with var siblings time#4 +Inlining constant with var siblings rem8u#27 +Inlining constant with var siblings n#16 +Inlining constant with var siblings y#25 +Inlining constant with var siblings hiscore#12 +Constant inlined cputs::s#5 = your_score +Constant inlined utoa::digit_values#1 = RADIX_DECIMAL_VALUES +Constant inlined cputs::s#6 = buffer +Constant inlined cputs::s#3 = foot +Constant inlined utoa::radix#0 = $a +Constant inlined cputs::s#4 = game_over +Constant inlined utoa::radix#1 = $a +Constant inlined utoa::digit_values#4 = RADIX_BINARY_VALUES +Constant inlined cputs::s#1 = intro +Constant inlined cputs::s#2 = levels +Constant inlined wait::n#4 = 5 +Constant inlined utoa::digit_values#2 = RADIX_HEXADECIMAL_VALUES +Constant inlined wait::n#3 = 5 +Constant inlined utoa::digit_values#3 = RADIX_OCTAL_VALUES +Constant inlined wait::n#2 = $a +Constant inlined wait::n#1 = $a +Constant inlined wait::n#0 = $14 +Constant inlined memset::num#1 = $28 +Constant inlined memset::num#0 = $28 +Constant inlined divr8u::i#0 = 0 +Constant inlined random::n#1 = $ff +Constant inlined time#4 = $a +Constant inlined random::n#2 = $ff +Constant inlined rem8u#27 = 0 +Constant inlined clear_screen::m#0 = 0 +Constant inlined tu#0 = 1 +Constant inlined clear_screen::m#1 = 0 +Constant inlined k#0 = 1 +Constant inlined clear_screen::m#2 = 0 +Constant inlined divr8u::rem#3 = 0 +Constant inlined memcpy::source#0 = (void *)DEFAULT_SCREEN+$28 +Constant inlined score#2 = 0 +Constant inlined textcolor::color#6 = 1 +Constant inlined gotoxy::x#3 = 0 +Constant inlined utoa::buffer#6 = buffer +Constant inlined time#18 = 0 +Constant inlined utoa::buffer#5 = buffer +Constant inlined gotoxy::x#0 = 0 +Constant inlined gotoxy::x#2 = 0 +Constant inlined utoa::max_digits#1 = 5 +Constant inlined utoa::max_digits#2 = 4 +Constant inlined utoa::max_digits#3 = 6 +Constant inlined y#25 = 0 +Constant inlined memset::c#0 = ' ' +Constant inlined utoa::max_digits#4 = $10 +Constant inlined cputs::s#9 = play_again +Constant inlined cputs::s#7 = high_score +Constant inlined cputs::s#8 = buffer +Constant inlined utoa_append::digit#0 = 0 +Constant inlined divr8u::divisor#1 = div16u8u::divisor#0 +Constant inlined divr8u::divisor#0 = div16u8u::divisor#0 +Constant inlined hiscore#12 = 0 +Constant inlined memcpy::destination#0 = (void *)DEFAULT_SCREEN +Constant inlined memcpy::destination#1 = (void *)COLORRAM +Constant inlined textcolor::color#3 = 7 +Constant inlined textcolor::color#2 = 2 +Constant inlined textcolor::color#5 = 3 +Constant inlined conio_c64_init::line#1 = (char)$19-1 +Constant inlined score#0 = 0 +Constant inlined memcpy::source#1 = (void *)COLORRAM+$28 +Constant inlined textcolor::color#4 = 2 +Constant inlined utoa::digit#0 = 0 +Constant inlined textcolor::color#1 = 1 +Constant inlined j#0 = 0 +Constant inlined textcolor::color#0 = 7 +Constant inlined clear_screen::n#0 = $20 +Constant inlined j#1 = 1 +Constant inlined clear_screen::n#1 = 4 +Constant inlined n#0 = 2 +Constant inlined j#4 = 0 +Constant inlined clear_screen::n#2 = 4 +Constant inlined random::k#2 = 0 +Constant inlined random::k#1 = 0 +Constant inlined memset::str#1 = (void *)COLORRAM+(unsigned int)$19*$28-$28 +Constant inlined memset::str#0 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 +Constant inlined z#0 = 0 +Constant inlined n#16 = 0 +Constant inlined utoa::started#1 = 1 +Constant inlined utoa::started#0 = 0 +Constant inlined z#3 = 0 +Constant inlined z#8 = 1 +Constant inlined memcpy::num#1 = (unsigned int)$19*$28-$28 +Constant inlined divr8u::quotient#0 = 0 +Constant inlined memcpy::num#0 = (unsigned int)$19*$28-$28 +Constant inlined gotoxy::y#3 = 0 +Constant inlined peephole#0 = $1f1f +Constant inlined gotoxy::y#0 = 0 +Successful SSA optimization Pass2ConstantInlining +Consolidated array index constant in *(points+2) +Consolidated array index constant in *(buffer+1) +Consolidated array index constant in *(points+3) +Consolidated array index constant in *(points+1) +Consolidated array index constant in *(buffer+1) +Consolidated array index constant in *(points+2) +Consolidated array index constant in *(buffer+2) +Consolidated array index constant in *(points+3) +Consolidated constant in assignment main::$152 +Consolidated constant in assignment main::$154 +Consolidated constant in assignment main::$156 +Successful SSA optimization Pass2ConstantAdditionElimination +Alias candidate removed (volatile)conio_line_text = gotoxy::$5 +Alias candidate removed (volatile)conio_line_color = gotoxy::$6 +Alias candidate removed (volatile)chrout::petscii = main::$57 +Alias gotoxy::line_offset#0 = gotoxy::$10 +Alias main::$26 = main::$178 +Alias main::$97 = main::$181 +Successful SSA optimization Pass2AliasElimination +Alias candidate removed (volatile)conio_line_text = gotoxy::$5 +Alias candidate removed (volatile)conio_line_color = gotoxy::$6 +Alias candidate removed (volatile)chrout::petscii = main::$57 +Identical Phi Values memcpy::num#2 (unsigned int)$19*$28-$28 +Identical Phi Values memset::num#2 $28 +Identical Phi Values utoa::radix#2 $a +Identical Phi Values utoa::buffer#11 buffer +Identical Phi Values gotoxy::x#4 0 +Identical Phi Values divr8u::divisor#6 div16u8u::divisor#0 +Identical Phi Values clear_screen::m#5 0 +Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values gotoxy::x#5 0 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant right-side identified [22] utoa::buffer#0 = ++ buffer +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant utoa::buffer#0 = ++buffer +Successful SSA optimization Pass2ConstantIdentification +if() condition always false - eliminating [9] if($28<=0) goto memset::@1 +if() condition always true - replacing block destination [17] if($a==DECIMAL) goto utoa::@1 +if() condition always false - eliminating [18] if($a==HEXADECIMAL) goto utoa::@2 +if() condition always false - eliminating [19] if($a==OCTAL) goto utoa::@3 +if() condition always false - eliminating [20] if($a==BINARY) goto utoa::@4 +if() condition always true - replacing block destination [58] if(0<$28) goto gotoxy::@2 +Successful SSA optimization Pass2ConstantIfs +Eliminating variable utoa::buffer#1 from unused block utoa::@9 +Eliminating variable utoa::buffer#2 from unused block utoa::@9 +Removing unused block utoa::@6 +Removing PHI-reference to removed block (utoa::@2) in block utoa::@5 +Removing PHI-reference to removed block (utoa::@2) in block utoa::@5 +Removing unused block utoa::@2 +Removing unused block utoa::@7 +Removing PHI-reference to removed block (utoa::@3) in block utoa::@5 +Removing PHI-reference to removed block (utoa::@3) in block utoa::@5 +Removing unused block utoa::@3 +Removing unused block utoa::@8 +Removing PHI-reference to removed block (utoa::@4) in block utoa::@5 +Removing PHI-reference to removed block (utoa::@4) in block utoa::@5 +Removing unused block utoa::@4 +Removing unused block utoa::@9 +Removing unused block gotoxy::@4 +Successful SSA optimization Pass2EliminateUnusedBlocks +Eliminating unused constant BINARY +Eliminating unused constant OCTAL +Eliminating unused constant DECIMAL +Eliminating unused constant HEXADECIMAL +Eliminating unused constant utoa::buffer#0 +Eliminating unused constant RADIX_BINARY_VALUES +Eliminating unused constant RADIX_OCTAL_VALUES +Eliminating unused constant RADIX_HEXADECIMAL_VALUES +Eliminating unused constant SIZEOF_UNSIGNED_INT +Successful SSA optimization PassNEliminateUnusedVars +Alias candidate removed (volatile)conio_line_text = gotoxy::$5 +Alias candidate removed (volatile)conio_line_color = gotoxy::$6 +Alias candidate removed (volatile)chrout::petscii = main::$57 +Identical Phi Values utoa::max_digits#7 5 +Identical Phi Values utoa::digit_values#8 RADIX_DECIMAL_VALUES +Successful SSA optimization Pass2IdenticalPhiElimination +Constant right-side identified [19] utoa::$4 = 5 - 1 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant utoa::$4 = 5-1 +Successful SSA optimization Pass2ConstantIdentification +Constant inlined utoa::$4 = 5-1 +Successful SSA optimization Pass2ConstantInlining +Alias candidate removed (volatile)conio_line_text = gotoxy::$5 +Alias candidate removed (volatile)conio_line_color = gotoxy::$6 +Alias candidate removed (volatile)chrout::petscii = main::$57 +Alias candidate removed (volatile)conio_line_text = gotoxy::$5 +Alias candidate removed (volatile)conio_line_color = gotoxy::$6 +Alias candidate removed (volatile)chrout::petscii = main::$57 +Finalized unsigned number type (char) 2 +Finalized unsigned number type (char) 8 +Finalized unsigned number type (char) $a +Finalized unsigned number type (char) $10 +Finalized unsigned number type (char) $b +Finalized unsigned number type (char) $b +Finalized unsigned number type (char) $19 +Finalized unsigned number type (char) $28 +Finalized unsigned number type (char) $28 +Finalized unsigned number type (char) $19 +Finalized unsigned number type (char) $28 +Finalized unsigned number type (char) $19 +Finalized unsigned number type (char) $28 +Finalized unsigned number type (char) $19 +Finalized unsigned number type (char) 1 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Simplifying constant integer cast $19-1 +Successful SSA optimization PassNCastSimplification +Alias candidate removed (volatile)conio_line_text = gotoxy::$5 +Alias candidate removed (volatile)conio_line_color = gotoxy::$6 +Alias candidate removed (volatile)chrout::petscii = main::$57 +Alias candidate removed (volatile)conio_line_text = gotoxy::$5 +Alias candidate removed (volatile)conio_line_color = gotoxy::$6 +Alias candidate removed (volatile)chrout::petscii = main::$57 +Added new block during phi lifting utoa::@17(between utoa::@16 and utoa::@13) +Added new block during phi lifting gotoxy::@5(between gotoxy and gotoxy::@1) +Added new block during phi lifting conio_c64_init::@4(between conio_c64_init and conio_c64_init::@1) +Added new block during phi lifting divr8u::@7(between divr8u::@3 and divr8u::@1) +Added new block during phi lifting divr8u::@8(between divr8u::@1 and divr8u::@2) +Added new block during phi lifting divr8u::@9(between divr8u::@2 and divr8u::@3) +Added new block during phi lifting write_score::@16(between write_score and write_score::@1) +Added new block during phi lifting main::@124(between main::@50 and main::@3) +Added new block during phi lifting main::@125(between main::@76 and main::@12) +Added new block during phi lifting main::@126(between main::@78 and main::@12) +Added new block during phi lifting main::@127(between main::@78 and main::@13) +Added new block during phi lifting main::@128(between main::@95 and main::@23) +Added new block during phi lifting main::@129(between main::@21 and main::@23) +Fixing phi predecessor for tu#13 to new block ( main::@21 -> main::@129 ) during phi lifting. +Fixing phi predecessor for peephole#52 to new block ( main::@21 -> main::@129 ) during phi lifting. +Added new block during phi lifting main::@130(between main::@93 and main::@30) +Added new block during phi lifting main::@131(between main::@30 and main::@31) +Added new block during phi lifting main::@132(between main::@31 and main::@32) +Added new block during phi lifting main::@133(between main::@32 and main::@33) +Added new block during phi lifting main::@134(between main::@33 and main::@34) +Added new block during phi lifting main::@135(between main::@34 and main::@37) +Added new block during phi lifting main::@136(between main::@109 and main::@48) +Adding NOP phi() at start of __start +Adding NOP phi() at start of __start::@2 +Adding NOP phi() at start of __start::@1 +Adding NOP phi() at start of __start::@3 +Adding NOP phi() at start of conio_c64_init::@2 +Adding NOP phi() at start of conio_c64_init::@3 +Adding NOP phi() at start of main::@54 +Adding NOP phi() at start of main::@55 +Adding NOP phi() at start of main::@56 +Adding NOP phi() at start of main::@57 +Adding NOP phi() at start of main::@58 +Adding NOP phi() at start of main::@59 +Adding NOP phi() at start of main::@60 +Adding NOP phi() at start of main::@5 +Adding NOP phi() at start of main::@20 +Adding NOP phi() at start of main::@89 +Adding NOP phi() at start of main::@25 +Adding NOP phi() at start of main::@26 +Adding NOP phi() at start of main::@45 +Adding NOP phi() at start of main::@102 +Adding NOP phi() at start of main::@103 +Adding NOP phi() at start of main::@104 +Adding NOP phi() at start of main::@105 +Adding NOP phi() at start of main::@106 +Adding NOP phi() at start of main::@107 +Adding NOP phi() at start of main::@108 +Adding NOP phi() at start of main::@110 +Adding NOP phi() at start of main::@111 +Adding NOP phi() at start of main::@112 +Adding NOP phi() at start of main::@113 +Adding NOP phi() at start of main::@28 +Adding NOP phi() at start of main::@87 +Adding NOP phi() at start of main::@14 +Adding NOP phi() at start of main::@65 +Adding NOP phi() at start of gotoxy::@3 +Adding NOP phi() at start of clear_screen::@3 +Adding NOP phi() at start of clear_screen::@5 +Adding NOP phi() at start of write_score::@4 +Adding NOP phi() at start of wait::@2 +Adding NOP phi() at start of utoa::@1 +Adding NOP phi() at start of cputc::@3 +Adding NOP phi() at start of cputc::@5 +Adding NOP phi() at start of cputc::@1 +Adding NOP phi() at start of cputc::@4 +Adding NOP phi() at start of cputln::@1 +Adding NOP phi() at start of cscroll::@1 +Adding NOP phi() at start of cscroll::@3 +Adding NOP phi() at start of cscroll::@4 +Adding NOP phi() at start of cscroll::@5 +Adding NOP phi() at start of memcpy::@3 +Adding NOP phi() at start of memset::@1 +CALL GRAPH +Calls in [__start] to conio_c64_init:8 main:11 +Calls in [conio_c64_init] to gotoxy:20 +Calls in [main] to chrout:26 chrout:28 clear_screen:32 textcolor:34 cputs:36 textcolor:38 cputs:40 textcolor:42 cputs:44 clear_screen:50 chrout:53 chrout:55 chrout:57 chrout:62 chrout:66 random:75 chrout:82 chrout:84 chrout:86 chrout:88 chrout:90 chrout:92 write_score:97 chrout:99 chrout:101 chrout:111 chrout:113 chrout:115 chrout:119 chrout:121 random:124 random:126 chrono_restart:138 write_score:150 wait:153 clear_screen:168 chrout:171 textcolor:173 cputs:175 textcolor:177 cputs:179 cputs:181 textcolor:183 cputs:185 utoa:191 cputs:193 textcolor:195 cputs:197 read_chrono:217 wait:252 wait:283 wait:300 write_score:323 wait:325 chrout:337 chrout:340 chrout:344 chrout:351 chrout:358 chrout:362 chrout:367 chrout:372 +Calls in [clear_screen] to gotoxy:400 chrout:402 +Calls in [cputs] to cputc:422 +Calls in [write_score] to utoa:438 chrout:447 chrout:449 chrout:455 +Calls in [utoa] to utoa_append:501 +Calls in [read_chrono] to div16u8u:510 +Calls in [cputc] to cputln:525 cputln:529 +Calls in [div16u8u] to divr8u:542 divr8u:549 +Calls in [cputln] to cscroll:558 +Calls in [cscroll] to memcpy:593 memcpy:595 memset:597 memset:600 + +Created 78 initial phi equivalence classes +Coalesced [19] gotoxy::y#8 = gotoxy::y#2 +Coalesced [23] conio_c64_init::line#3 = conio_c64_init::line#0 +Coalesced [58] n#123 = n#109 +Coalesced [73] random::k#5 = random::k#0 +Coalesced [74] random::n#5 = random::n#0 +Coalesced [78] z#146 = z#28 +Coalesced [105] rem8u#141 = rem8u#127 +Coalesced [106] y#128 = y#114 +Coalesced [107] z#149 = z#128 +Coalesced [108] n#126 = n#89 +Coalesced [139] score#113 = score#38 +Coalesced [140] rem8u#144 = rem8u#48 +Coalesced [141] y#131 = y#49 +Coalesced [142] z#152 = z#102 +Coalesced [143] peephole#88 = peephole#52 +Coalesced [144] n#129 = n#52 +Coalesced [149] score#109 = score#4 +Coalesced [152] z#140 = z#100 +Coalesced [187] hiscore#125 = score#38 +Coalesced [190] utoa::value#17 = utoa::value#2 +Coalesced (already) [205] rem8u#140 = rem8u#25 +Coalesced (already) [206] y#127 = y#18 +Not coalescing [207] hiscore#123 = hiscore#19 +Coalesced (already) [208] n#122 = n#20 +Not coalescing [209] hiscore#124 = hiscore#110 +Coalesced [210] tu#86 = tu#1 +Coalesced (already) [211] rem8u#142 = rem8u#25 +Coalesced (already) [212] y#129 = y#18 +Coalesced [213] z#150 = z#25 +Coalesced (already) [214] peephole#86 = peephole#12 +Coalesced (already) [215] n#127 = n#20 +Coalesced [225] y#132 = y#0 +Coalesced [230] y#135 = y#1 +Coalesced [235] y#137 = y#2 +Coalesced [240] y#139 = y#3 +Coalesced (already) [251] z#139 = z#100 +Coalesced [253] score#117 = score#8 +Coalesced [256] z#154 = z#25 +Coalesced [257] time#63 = time#38 +Coalesced [258] score#115 = score#81 +Coalesced (already) [282] z#138 = z#48 +Coalesced (already) [299] z#142 = z#25 +Coalesced [301] time#61 = time#17 +Coalesced [302] score#112 = score#43 +Coalesced [303] rem8u#143 = rem8u#0 +Not coalescing [304] y#130 = y#35 +Coalesced (already) [305] z#151 = z#25 +Coalesced [306] peephole#87 = y#35 +Coalesced [307] n#128 = n#14 +Not coalescing [319] y#141 = y#13 +Coalesced (already) [320] y#140 = peephole#12 +Coalesced [322] score#110 = score#6 +Coalesced (already) [324] z#141 = z#100 +Coalesced [326] time#64 = time#0 +Coalesced (already) [327] score#116 = score#38 +Coalesced (already) [328] z#153 = z#100 +Coalesced (already) [329] time#62 = time#0 +Coalesced (already) [330] score#114 = score#19 +Coalesced [331] y#138 = y#12 +Coalesced [332] y#136 = y#11 +Coalesced [333] y#134 = y#10 +Coalesced [334] y#133 = y#18 +Coalesced [342] j#29 = j#5 +Coalesced [346] j#28 = j#3 +Coalesced [355] z#147 = z#9 +Coalesced (already) [356] z#148 = z#9 +Coalesced [360] j#27 = j#2 +Coalesced [369] k#106 = k#1 +Coalesced [370] n#124 = n#101 +Coalesced [374] n#125 = n#1 +Coalesced [393] gotoxy::y#9 = gotoxy::y#4 +Coalesced [410] z#137 = z#1 +Coalesced [415] cputs::s#14 = cputs::s#11 +Coalesced [423] cputs::s#15 = cputs::s#0 +Coalesced [437] utoa::value#18 = utoa::value#1 +Coalesced [459] score#111 = score#13 +Coalesced (already) [464] z#143 = z#53 +Coalesced [472] z#144 = z#23 +Coalesced [474] z#145 = z#4 +Coalesced [477] utoa::value#20 = utoa::value#10 +Coalesced [489] utoa::value#21 = utoa::value#3 +Coalesced [490] utoa::started#6 = utoa::started#2 +Coalesced [491] utoa::buffer#24 = utoa::buffer#10 +Coalesced [494] utoa::digit#7 = utoa::digit#1 +Coalesced (already) [495] utoa::value#19 = utoa::value#7 +Coalesced (already) [496] utoa::started#5 = utoa::started#4 +Coalesced (already) [497] utoa::buffer#23 = utoa::buffer#15 +Coalesced [505] utoa::value#22 = utoa::value#0 +Coalesced [506] utoa::buffer#25 = utoa::buffer#4 +Coalesced [512] time#0 = div16u8u::return#2 +Coalesced [531] utoa_append::value#6 = utoa_append::value#0 +Coalesced [538] utoa_append::value#7 = utoa_append::value#1 +Coalesced [539] utoa_append::digit#5 = utoa_append::digit#1 +Coalesced [541] divr8u::dividend#9 = divr8u::dividend#1 +Coalesced [547] divr8u::rem#12 = divr8u::rem#4 +Coalesced [548] divr8u::dividend#10 = divr8u::dividend#2 +Coalesced [562] divr8u::rem#13 = divr8u::rem#10 +Coalesced [563] divr8u::dividend#11 = divr8u::dividend#5 +Coalesced [569] divr8u::rem#16 = divr8u::rem#1 +Coalesced [576] divr8u::rem#18 = divr8u::rem#2 +Coalesced [577] divr8u::return#8 = divr8u::quotient#2 +Coalesced [581] rem8u#0 = divr8u::rem#11 +Coalesced [583] divr8u::rem#14 = divr8u::rem#11 +Coalesced [584] divr8u::dividend#12 = divr8u::dividend#0 +Coalesced [585] divr8u::quotient#9 = divr8u::return#0 +Coalesced [586] divr8u::i#7 = divr8u::i#1 +Coalesced [587] divr8u::rem#17 = divr8u::rem#6 +Coalesced [588] divr8u::return#7 = divr8u::quotient#1 +Coalesced [589] divr8u::rem#15 = divr8u::rem#0 +Coalesced [599] memset::c#6 = memset::c#1 +Coalesced [616] memcpy::src#5 = memcpy::src#1 +Coalesced [617] memcpy::dst#5 = memcpy::dst#1 +Coalesced [627] memset::dst#5 = memset::dst#1 +Coalesced down to 38 phi equivalence classes +Culled Empty Block label __start::@2 +Culled Empty Block label __start::@3 +Culled Empty Block label conio_c64_init::@2 +Culled Empty Block label conio_c64_init::@3 +Culled Empty Block label main::@60 +Culled Empty Block label main::@64 +Culled Empty Block label main::@125 +Culled Empty Block label main::@129 +Culled Empty Block label main::@89 +Culled Empty Block label main::@92 +Culled Empty Block label main::@46 +Culled Empty Block label main::@113 +Culled Empty Block label main::@128 +Culled Empty Block label main::@98 +Culled Empty Block label main::@135 +Culled Empty Block label main::@97 +Culled Empty Block label main::@134 +Culled Empty Block label main::@133 +Culled Empty Block label main::@132 +Culled Empty Block label main::@131 +Culled Empty Block label main::@130 +Culled Empty Block label main::@87 +Culled Empty Block label main::@14 +Culled Empty Block label main::@126 +Culled Empty Block label main::@127 +Culled Empty Block label main::@65 +Culled Empty Block label gotoxy::@3 +Culled Empty Block label clear_screen::@5 +Culled Empty Block label cputs::@3 +Culled Empty Block label write_score::@4 +Culled Empty Block label wait::@2 +Culled Empty Block label utoa::@1 +Culled Empty Block label utoa::@5 +Culled Empty Block label utoa::@17 +Culled Empty Block label cputc::@5 +Culled Empty Block label cputc::@4 +Culled Empty Block label cputln::@1 +Culled Empty Block label divr8u::@6 +Culled Empty Block label divr8u::@7 +Culled Empty Block label divr8u::@9 +Culled Empty Block label divr8u::@8 +Culled Empty Block label cscroll::@1 +Culled Empty Block label memcpy::@3 +Culled Empty Block label memset::@1 +Renumbering block memset::@2 to memset::@1 +Renumbering block memset::@3 to memset::@2 +Renumbering block memset::@4 to memset::@3 +Renumbering block utoa::@10 to utoa::@1 +Renumbering block utoa::@11 to utoa::@2 +Renumbering block utoa::@12 to utoa::@3 +Renumbering block utoa::@13 to utoa::@4 +Renumbering block utoa::@14 to utoa::@5 +Renumbering block utoa::@15 to utoa::@6 +Renumbering block utoa::@16 to utoa::@7 +Renumbering block gotoxy::@5 to gotoxy::@3 +Renumbering block cscroll::@3 to cscroll::@1 +Renumbering block cscroll::@4 to cscroll::@2 +Renumbering block cscroll::@5 to cscroll::@3 +Renumbering block cscroll::@6 to cscroll::@4 +Renumbering block cscroll::@7 to cscroll::@5 +Renumbering block conio_c64_init::@4 to conio_c64_init::@2 +Renumbering block write_score::@5 to write_score::@4 +Renumbering block write_score::@6 to write_score::@5 +Renumbering block write_score::@7 to write_score::@6 +Renumbering block write_score::@8 to write_score::@7 +Renumbering block write_score::@9 to write_score::@8 +Renumbering block write_score::@10 to write_score::@9 +Renumbering block write_score::@11 to write_score::@10 +Renumbering block write_score::@12 to write_score::@11 +Renumbering block write_score::@13 to write_score::@12 +Renumbering block write_score::@14 to write_score::@13 +Renumbering block write_score::@15 to write_score::@14 +Renumbering block write_score::@16 to write_score::@15 +Renumbering block wait::@3 to wait::@2 +Renumbering block wait::@4 to wait::@3 +Renumbering block wait::@5 to wait::@4 +Renumbering block main::@15 to main::@14 +Renumbering block main::@16 to main::@15 +Renumbering block main::@17 to main::@16 +Renumbering block main::@18 to main::@17 +Renumbering block main::@19 to main::@18 +Renumbering block main::@20 to main::@19 +Renumbering block main::@21 to main::@20 +Renumbering block main::@22 to main::@21 +Renumbering block main::@23 to main::@22 +Renumbering block main::@24 to main::@23 +Renumbering block main::@25 to main::@24 +Renumbering block main::@26 to main::@25 +Renumbering block main::@27 to main::@26 +Renumbering block main::@28 to main::@27 +Renumbering block main::@29 to main::@28 +Renumbering block main::@30 to main::@29 +Renumbering block main::@31 to main::@30 +Renumbering block main::@32 to main::@31 +Renumbering block main::@33 to main::@32 +Renumbering block main::@34 to main::@33 +Renumbering block main::@35 to main::@34 +Renumbering block main::@36 to main::@35 +Renumbering block main::@37 to main::@36 +Renumbering block main::@38 to main::@37 +Renumbering block main::@39 to main::@38 +Renumbering block main::@40 to main::@39 +Renumbering block main::@41 to main::@40 +Renumbering block main::@42 to main::@41 +Renumbering block main::@43 to main::@42 +Renumbering block main::@44 to main::@43 +Renumbering block main::@45 to main::@44 +Renumbering block main::@47 to main::@45 +Renumbering block main::@48 to main::@46 +Renumbering block main::@49 to main::@47 +Renumbering block main::@50 to main::@48 +Renumbering block main::@51 to main::@49 +Renumbering block main::@52 to main::@50 +Renumbering block main::@53 to main::@51 +Renumbering block main::@54 to main::@52 +Renumbering block main::@55 to main::@53 +Renumbering block main::@56 to main::@54 +Renumbering block main::@57 to main::@55 +Renumbering block main::@58 to main::@56 +Renumbering block main::@59 to main::@57 +Renumbering block main::@61 to main::@58 +Renumbering block main::@62 to main::@59 +Renumbering block main::@63 to main::@60 +Renumbering block main::@66 to main::@61 +Renumbering block main::@67 to main::@62 +Renumbering block main::@68 to main::@63 +Renumbering block main::@69 to main::@64 +Renumbering block main::@70 to main::@65 +Renumbering block main::@71 to main::@66 +Renumbering block main::@72 to main::@67 +Renumbering block main::@73 to main::@68 +Renumbering block main::@74 to main::@69 +Renumbering block main::@75 to main::@70 +Renumbering block main::@76 to main::@71 +Renumbering block main::@77 to main::@72 +Renumbering block main::@78 to main::@73 +Renumbering block main::@79 to main::@74 +Renumbering block main::@80 to main::@75 +Renumbering block main::@81 to main::@76 +Renumbering block main::@82 to main::@77 +Renumbering block main::@83 to main::@78 +Renumbering block main::@84 to main::@79 +Renumbering block main::@85 to main::@80 +Renumbering block main::@86 to main::@81 +Renumbering block main::@88 to main::@82 +Renumbering block main::@90 to main::@83 +Renumbering block main::@91 to main::@84 +Renumbering block main::@93 to main::@85 +Renumbering block main::@94 to main::@86 +Renumbering block main::@95 to main::@87 +Renumbering block main::@96 to main::@88 +Renumbering block main::@99 to main::@89 +Renumbering block main::@100 to main::@90 +Renumbering block main::@101 to main::@91 +Renumbering block main::@102 to main::@92 +Renumbering block main::@103 to main::@93 +Renumbering block main::@104 to main::@94 +Renumbering block main::@105 to main::@95 +Renumbering block main::@106 to main::@96 +Renumbering block main::@107 to main::@97 +Renumbering block main::@108 to main::@98 +Renumbering block main::@109 to main::@99 +Renumbering block main::@110 to main::@100 +Renumbering block main::@111 to main::@101 +Renumbering block main::@112 to main::@102 +Renumbering block main::@114 to main::@103 +Renumbering block main::@115 to main::@104 +Renumbering block main::@116 to main::@105 +Renumbering block main::@117 to main::@106 +Renumbering block main::@118 to main::@107 +Renumbering block main::@119 to main::@108 +Renumbering block main::@120 to main::@109 +Renumbering block main::@121 to main::@110 +Renumbering block main::@122 to main::@111 +Renumbering block main::@123 to main::@112 +Renumbering block main::@124 to main::@113 +Renumbering block main::@136 to main::@114 +Adding NOP phi() at start of __start +Adding NOP phi() at start of __start::@1 +Adding NOP phi() at start of conio_c64_init::@2 +Adding NOP phi() at start of main::@52 +Adding NOP phi() at start of main::@53 +Adding NOP phi() at start of main::@54 +Adding NOP phi() at start of main::@55 +Adding NOP phi() at start of main::@56 +Adding NOP phi() at start of main::@57 +Adding NOP phi() at start of main::@5 +Adding NOP phi() at start of main::@19 +Adding NOP phi() at start of main::@24 +Adding NOP phi() at start of main::@25 +Adding NOP phi() at start of main::@44 +Adding NOP phi() at start of main::@92 +Adding NOP phi() at start of main::@93 +Adding NOP phi() at start of main::@94 +Adding NOP phi() at start of main::@95 +Adding NOP phi() at start of main::@96 +Adding NOP phi() at start of main::@97 +Adding NOP phi() at start of main::@98 +Adding NOP phi() at start of main::@100 +Adding NOP phi() at start of main::@101 +Adding NOP phi() at start of main::@102 +Adding NOP phi() at start of main::@27 +Adding NOP phi() at start of main::@88 +Adding NOP phi() at start of gotoxy::@3 +Adding NOP phi() at start of clear_screen::@3 +Adding NOP phi() at start of write_score::@15 +Adding NOP phi() at start of cputc::@3 +Adding NOP phi() at start of cputc::@1 +Adding NOP phi() at start of utoa_append +Adding NOP phi() at start of cscroll::@1 +Adding NOP phi() at start of cscroll::@2 +Adding NOP phi() at start of cscroll::@3 + +FINAL CONTROL FLOW GRAPH + +void __start() +__start: scope:[__start] from + [0] phi() + to:__start::__init1 +__start::__init1: scope:[__start] from __start + [1] conio_cursor_x = 0 + [2] conio_cursor_y = 0 + [3] conio_line_text = DEFAULT_SCREEN + [4] conio_line_color = COLORRAM + [5] conio_textcolor = LIGHT_BLUE + [6] l = 0 + [7] m = 0 + [8] call conio_c64_init + to:__start::@1 +__start::@1: scope:[__start] from __start::__init1 + [9] phi() + [10] call main + to:__start::@return +__start::@return: scope:[__start] from __start::@1 + [11] return + to:@return + +void conio_c64_init() +conio_c64_init: scope:[conio_c64_init] from __start::__init1 + [12] conio_c64_init::line#0 = *conio_c64_init::BASIC_CURSOR_LINE + [13] if(conio_c64_init::line#0<$19) goto conio_c64_init::@2 + to:conio_c64_init::@1 +conio_c64_init::@2: scope:[conio_c64_init] from conio_c64_init + [14] phi() + to:conio_c64_init::@1 +conio_c64_init::@1: scope:[conio_c64_init] from conio_c64_init conio_c64_init::@2 + [15] conio_c64_init::line#2 = phi( conio_c64_init::@2/conio_c64_init::line#0, conio_c64_init/$19-1 ) + [16] gotoxy::y#2 = conio_c64_init::line#2 + [17] call gotoxy + to:conio_c64_init::@return +conio_c64_init::@return: scope:[conio_c64_init] from conio_c64_init::@1 + [18] return + to:@return + +void main() +main: scope:[main] from __start::@1 + [19] *((char *) 36879) = 8 + [20] chrout::petscii = lock + [21] call chrout + to:main::@50 +main::@50: scope:[main] from main + [22] chrout::petscii = lower + [23] call chrout + to:main::@51 +main::@51: scope:[main] from main::@50 + [24] m = 0 + to:main::@1 +main::@1: scope:[main] from main::@2 main::@51 + [25] if(m<$28) goto main::@2 + to:main::@3 +main::@3: scope:[main] from main::@1 main::@113 + [26] n#109 = phi( main::@1/0, main::@113/n#20 ) + [26] hiscore#110 = phi( main::@1/0, main::@113/hiscore#123 ) + [26] y#114 = phi( main::@1/0, main::@113/y#18 ) + [26] rem8u#127 = phi( main::@1/0, main::@113/rem8u#25 ) + [27] call clear_screen + to:main::@52 +main::@52: scope:[main] from main::@3 + [28] phi() + [29] call textcolor + to:main::@53 +main::@53: scope:[main] from main::@52 + [30] phi() + [31] call cputs + to:main::@54 +main::@54: scope:[main] from main::@53 + [32] phi() + [33] call textcolor + to:main::@55 +main::@55: scope:[main] from main::@54 + [34] phi() + [35] call cputs + to:main::@56 +main::@56: scope:[main] from main::@55 + [36] phi() + [37] call textcolor + to:main::@57 +main::@57: scope:[main] from main::@56 + [38] phi() + [39] call cputs + to:main::@4 +main::@4: scope:[main] from main::@4 main::@57 + [40] l = *((char *) 197) + [41] l = ++ l + [42] if(l>=5+1) goto main::@4 + to:main::@5 +main::@5: scope:[main] from main::@4 + [43] phi() + [44] call clear_screen + to:main::@58 +main::@58: scope:[main] from main::@5 + [45] *((char *) 36869) = $ff + [46] chrout::petscii = reverse_on + [47] call chrout + to:main::@59 +main::@59: scope:[main] from main::@58 + [48] chrout::petscii = red + [49] call chrout + to:main::@60 +main::@60: scope:[main] from main::@59 + [50] chrout::petscii = down + [51] call chrout + to:main::@6 +main::@6: scope:[main] from main::@60 main::@64 + [52] n#89 = phi( main::@60/n#109, main::@64/n#101 ) + [52] k#101 = phi( main::@60/1, main::@64/k#1 ) + [53] if(k#101<$16) goto main::@7 + to:main::@8 +main::@8: scope:[main] from main::@6 + [54] chrout::petscii = brick + [55] call chrout + to:main::@61 +main::@61: scope:[main] from main::@8 + [56] *((char *) 8185) = brick + [57] *((char *)$1ff9+c) = 2 + [58] chrout::petscii = home + [59] call chrout + to:main::@62 +main::@62: scope:[main] from main::@61 + [60] if(l<1+1) goto main::@12 + to:main::@13 +main::@13: scope:[main] from main::@62 main::@73 + [61] z#28 = phi( main::@62/1, main::@73/z#9 ) + [62] random::k#0 = 7 - l + [63] main::$177 = l << 1 + [64] main::$26 = main::$177 + l + [65] random::n#0 = $1a - main::$26 + [66] call random + to:main::@71 +main::@71: scope:[main] from main::@13 + [67] main::$29 = z#28 + m + [68] if(main::$29<=$1f9) goto main::@14 + to:main::@12 +main::@12: scope:[main] from main::@62 main::@71 main::@73 + [69] z#128 = phi( main::@62/1, main::@71/z#28, main::@73/z#9 ) + [70] *((char *) 36878) = $f + [71] chrout::petscii = home + [72] call chrout + to:main::@65 +main::@65: scope:[main] from main::@12 + [73] chrout::petscii = yellow + [74] call chrout + to:main::@66 +main::@66: scope:[main] from main::@65 + [75] chrout::petscii = $50 + [76] call chrout + to:main::@67 +main::@67: scope:[main] from main::@66 + [77] chrout::petscii = $54 + [78] call chrout + to:main::@68 +main::@68: scope:[main] from main::@67 + [79] chrout::petscii = $53 + [80] call chrout + to:main::@69 +main::@69: scope:[main] from main::@68 + [81] chrout::petscii = $3a + [82] call chrout + to:main::@70 +main::@70: scope:[main] from main::@69 + [83] *((char *) 211) = $12 + to:main::@17 +main::@17: scope:[main] from main::@70 main::@74 + [84] j#13 = phi( main::@70/0, main::@74/j#3 ) + [85] if(j#13<4) goto main::@18 + to:main::@19 +main::@19: scope:[main] from main::@17 + [86] phi() + [87] call write_score + to:main::@75 +main::@75: scope:[main] from main::@19 + [88] chrout::petscii = home + [89] call chrout + to:main::@76 +main::@76: scope:[main] from main::@75 + [90] chrout::petscii = green + [91] call chrout + to:main::@77 +main::@77: scope:[main] from main::@76 + [92] *((char *) 211) = $a + to:main::@20 +main::@20: scope:[main] from main::@77 main::@78 + [93] j#16 = phi( main::@77/0, main::@78/j#5 ) + [94] if(j#16<5) goto main::@21 + to:main::@22 +main::@22: scope:[main] from main::@20 main::@87 + [95] n#52 = phi( main::@20/n#89, main::@87/n#20 ) + [95] peephole#52 = phi( main::@20/$1f1f, main::@87/peephole#12 ) + [95] z#102 = phi( main::@20/z#128, main::@87/z#25 ) + [95] y#49 = phi( main::@20/y#114, main::@87/y#18 ) + [95] rem8u#48 = phi( main::@20/rem8u#127, main::@87/rem8u#25 ) + [95] tu#13 = phi( main::@20/1, main::@87/tu#1 ) + [96] chrout::petscii = home + [97] call chrout + to:main::@79 +main::@79: scope:[main] from main::@22 + [98] chrout::petscii = green + [99] call chrout + to:main::@80 +main::@80: scope:[main] from main::@79 + [100] chrout::petscii = reverse_on + [101] call chrout + to:main::@81 +main::@81: scope:[main] from main::@80 + [102] *((char *) 211) = $f + [103] if(tu#13<$a) goto main::@23 + to:main::@45 +main::@45: scope:[main] from main::@81 + [104] chrout::petscii = $31 + [105] call chrout + to:main::@82 +main::@82: scope:[main] from main::@45 + [106] chrout::petscii = $30 + [107] call chrout + to:main::@24 +main::@24: scope:[main] from main::@103 main::@104 main::@105 main::@106 main::@23 main::@82 main::@84 + [108] phi() + [109] call random + to:main::@83 +main::@83: scope:[main] from main::@24 + [110] duck#0 = m + [111] call random + to:main::@84 +main::@84: scope:[main] from main::@83 + [112] main::$61 = m + $1e15 + [113] duck#1 = main::$61 + duck#0 + [114] main::$66 = duck#1 + 1 + [115] main::$69 = duck#1 + $16 + [116] main::$72 = duck#1 + $17 + [117] if(duck#1>$1fe3) goto main::@24 + to:main::@106 +main::@106: scope:[main] from main::@84 + [118] if(*((char *)duck#1)==brick) goto main::@24 + to:main::@105 +main::@105: scope:[main] from main::@106 + [119] if(*((char *)main::$66)==brick) goto main::@24 + to:main::@104 +main::@104: scope:[main] from main::@105 + [120] if(*((char *)main::$69)==brick) goto main::@24 + to:main::@103 +main::@103: scope:[main] from main::@104 + [121] if(*((char *)main::$72)==brick) goto main::@24 + to:main::@25 +main::@25: scope:[main] from main::@103 + [122] phi() + [123] call chrono_restart + to:main::@26 +main::@26: scope:[main] from main::@25 main::@90 + [124] n#20 = phi( main::@90/n#14, main::@25/n#52 ) + [124] peephole#12 = phi( main::@90/y#35, main::@25/peephole#52 ) + [124] z#100 = phi( main::@90/z#25, main::@25/z#102 ) + [124] y#18 = phi( main::@90/y#130, main::@25/y#49 ) + [124] rem8u#25 = phi( main::@90/divr8u::rem#11, main::@25/rem8u#48 ) + [124] score#19 = phi( main::@90/score#43, main::@25/score#38 ) + [124] time#11 = phi( main::@90/time#17, main::@25/0 ) + [125] if(time#11<$a) goto main::@27 + to:main::@28 +main::@28: scope:[main] from main::@26 + [126] tu#1 = ++ tu#13 + [127] score#4 = score#19 - $a + [128] call write_score + to:main::@86 +main::@86: scope:[main] from main::@28 + [129] *((char *) 36877) = $82 + [130] call wait + to:main::@87 +main::@87: scope:[main] from main::@86 + [131] *((char *) 36877) = 0 + [132] main::$150 = duck#1 + c + [133] *((char *)main::$150) = 0 + [134] main::$151 = duck#1 + [135] main::$152 = main::$151 + 1+c + [136] *((char *)main::$152) = 0 + [137] main::$153 = duck#1 + [138] main::$154 = main::$153 + $16+c + [139] *((char *)main::$154) = 0 + [140] main::$155 = duck#1 + [141] main::$156 = main::$155 + $17+c + [142] *((char *)main::$156) = 0 + [143] if(tu#1<$b) goto main::@22 + to:main::@44 +main::@44: scope:[main] from main::@87 + [144] phi() + [145] call clear_screen + to:main::@91 +main::@91: scope:[main] from main::@44 + [146] *((char *) 36869) = $f0 + [147] chrout::petscii = lower + [148] call chrout + to:main::@92 +main::@92: scope:[main] from main::@91 + [149] phi() + [150] call textcolor + to:main::@93 +main::@93: scope:[main] from main::@92 + [151] phi() + [152] call cputs + to:main::@94 +main::@94: scope:[main] from main::@93 + [153] phi() + [154] call textcolor + to:main::@95 +main::@95: scope:[main] from main::@94 + [155] phi() + [156] call cputs + to:main::@96 +main::@96: scope:[main] from main::@95 + [157] phi() + [158] call cputs + to:main::@97 +main::@97: scope:[main] from main::@96 + [159] phi() + [160] call textcolor + to:main::@98 +main::@98: scope:[main] from main::@97 + [161] phi() + [162] call cputs + to:main::@99 +main::@99: scope:[main] from main::@98 + [163] if(score#38<=hiscore#110) goto main::@114 + to:main::@46 +main::@114: scope:[main] from main::@99 + [164] hiscore#124 = hiscore#110 + to:main::@46 +main::@46: scope:[main] from main::@114 main::@99 + [165] hiscore#19 = phi( main::@114/hiscore#124, main::@99/score#38 ) + [166] utoa::value#2 = hiscore#19 + [167] call utoa + to:main::@100 +main::@100: scope:[main] from main::@46 + [168] phi() + [169] call cputs + to:main::@101 +main::@101: scope:[main] from main::@100 + [170] phi() + [171] call textcolor + to:main::@102 +main::@102: scope:[main] from main::@101 + [172] phi() + [173] call cputs + to:main::@47 +main::@47: scope:[main] from main::@102 main::@112 + [174] j#19 = *((char *) 197) + [175] if(j#19==$b) goto main::@48 + to:main::@112 +main::@112: scope:[main] from main::@47 + [176] if(j#19!=$1c) goto main::@47 + to:main::@48 +main::@48: scope:[main] from main::@112 main::@47 + [177] if(j#19==$b) goto main::@113 + to:main::@49 +main::@49: scope:[main] from main::@48 + asm { jsr$FD22 } + to:main::@return +main::@return: scope:[main] from main::@49 + [179] return + to:@return +main::@113: scope:[main] from main::@48 + [180] hiscore#123 = hiscore#19 + to:main::@3 +main::@27: scope:[main] from main::@26 + [181] phi() + [182] call read_chrono + to:main::@85 +main::@85: scope:[main] from main::@27 + [183] m = *((char *) 37151) + [184] *((char *) 37154) = $7f + [185] n#14 = *((char *) 37152) + [186] *((char *) 37154) = $ff + [187] main::$78 = $10 & m + [188] if(main::$78!=0) goto main::@29 + to:main::@37 +main::@37: scope:[main] from main::@85 + [189] y#0 = -- y#18 + to:main::@29 +main::@29: scope:[main] from main::@37 main::@85 + [190] y#10 = phi( main::@37/y#0, main::@85/y#18 ) + [191] main::$81 = $80 & n#14 + [192] if(main::$81!=0) goto main::@30 + to:main::@38 +main::@38: scope:[main] from main::@29 + [193] y#1 = ++ y#10 + to:main::@30 +main::@30: scope:[main] from main::@29 main::@38 + [194] y#11 = phi( main::@29/y#10, main::@38/y#1 ) + [195] main::$84 = 4 & m + [196] if(main::$84!=0) goto main::@31 + to:main::@39 +main::@39: scope:[main] from main::@30 + [197] y#2 = y#11 - $16 + to:main::@31 +main::@31: scope:[main] from main::@30 main::@39 + [198] y#12 = phi( main::@30/y#11, main::@39/y#2 ) + [199] main::$88 = 8 & m + [200] if(main::$88!=0) goto main::@32 + to:main::@40 +main::@40: scope:[main] from main::@31 + [201] y#3 = y#12 + $16 + to:main::@32 +main::@32: scope:[main] from main::@31 main::@40 + [202] y#13 = phi( main::@31/y#12, main::@40/y#3 ) + [203] main::$92 = $20 & m + [204] if(main::$92!=0) goto main::@33 + to:main::@41 +main::@41: scope:[main] from main::@32 + [205] *((char *) 36877) = $82 + [206] if(peephole#12!=duck#1) goto main::@34 + to:main::@42 +main::@42: scope:[main] from main::@41 + [207] main::$96 = $c - div16u8u::return#2 + [208] main::$179 = main::$96 << 2 + [209] main::$180 = main::$179 + main::$96 + [210] main::$97 = main::$180 << 1 + [211] score#8 = score#19 + main::$97 + [212] call wait + to:main::@35 +main::@35: scope:[main] from main::@42 main::@88 + [213] score#81 = phi( main::@88/score#38, main::@42/score#8 ) + [213] time#38 = phi( main::@88/div16u8u::return#2, main::@42/$a ) + [214] *((char *) 36877) = 0 + to:main::@33 +main::@33: scope:[main] from main::@32 main::@35 + [215] score#43 = phi( main::@32/score#19, main::@35/score#81 ) + [215] time#17 = phi( main::@32/div16u8u::return#2, main::@35/time#38 ) + [215] z#48 = phi( main::@32/z#100, main::@35/z#25 ) + [216] main::$104 = y#13 + 1 + [217] main::$107 = y#13 + $16 + [218] main::$110 = y#13 + $17 + [219] if(*((char *)y#13)==brick) goto main::@36 + to:main::@111 +main::@111: scope:[main] from main::@33 + [220] if(*((char *)main::$104)==brick) goto main::@36 + to:main::@110 +main::@110: scope:[main] from main::@111 + [221] if(*((char *)main::$107)!=brick) goto main::@109 + to:main::@36 +main::@36: scope:[main] from main::@107 main::@108 main::@109 main::@110 main::@111 main::@33 main::@43 + [222] y#35 = phi( main::@33/peephole#12, main::@43/y#141 ) + [223] *((char *)y#35) = $fd + [224] main::$125 = y#35 + c + [225] *((char *)main::$125) = 1 + [226] main::$127 = y#35 + 1 + [227] *((char *)main::$127) = $ed + [228] main::$128 = main::$127 + c + [229] *((char *)main::$128) = 1 + [230] main::$130 = y#35 + $16 + [231] *((char *)main::$130) = $ee + [232] main::$131 = main::$130 + c + [233] *((char *)main::$131) = 1 + [234] main::$133 = y#35 + $17 + [235] *((char *)main::$133) = $f0 + [236] main::$134 = main::$133 + c + [237] *((char *)main::$134) = 1 + [238] call wait + to:main::@89 +main::@89: scope:[main] from main::@36 + [239] *((char *)duck#1) = 0 + [240] main::$136 = duck#1 + c + [241] *((char *)main::$136) = 7 + [242] main::$138 = duck#1 + 1 + [243] *((char *)main::$138) = 1 + [244] main::$139 = main::$138 + c + [245] *((char *)main::$139) = 7 + [246] main::$141 = duck#1 + $16 + [247] *((char *)main::$141) = 2 + [248] main::$142 = main::$141 + c + [249] *((char *)main::$142) = 7 + [250] main::$144 = duck#1 + $17 + [251] *((char *)main::$144) = 3 + [252] main::$145 = main::$144 + c + [253] *((char *)main::$145) = 7 + [254] call wait + to:main::@90 +main::@90: scope:[main] from main::@89 + [255] y#130 = y#35 + to:main::@26 +main::@109: scope:[main] from main::@110 + [256] if(*((char *)main::$110)==brick) goto main::@36 + to:main::@108 +main::@108: scope:[main] from main::@109 + [257] if(y#13>$1e16) goto main::@107 + to:main::@36 +main::@107: scope:[main] from main::@108 + [258] if(y#13>=$1fe3) goto main::@36 + to:main::@43 +main::@43: scope:[main] from main::@107 + [259] main::$119 = peephole#12 + c + [260] *((char *)main::$119) = 0 + [261] main::$120 = main::$119 + 1 + [262] *((char *)main::$120) = 0 + [263] main::$122 = main::$119 + $16 + [264] *((char *)main::$122) = 0 + [265] main::$124 = main::$119 + $17 + [266] *((char *)main::$124) = 0 + [267] y#141 = y#13 + to:main::@36 +main::@34: scope:[main] from main::@41 + [268] score#6 = score#19 - $a + [269] call write_score + to:main::@88 +main::@88: scope:[main] from main::@34 + [270] phi() + [271] call wait + to:main::@35 +main::@23: scope:[main] from main::@81 + [272] main::$57 = $30 + tu#13 + [273] chrout::petscii = main::$57 + [274] call chrout + to:main::@24 +main::@21: scope:[main] from main::@20 + [275] chrout::petscii = ducknumber[j#16] + [276] call chrout + to:main::@78 +main::@78: scope:[main] from main::@21 + [277] j#5 = ++ j#16 + to:main::@20 +main::@18: scope:[main] from main::@17 + [278] chrout::petscii = chrono[j#13] + [279] call chrout + to:main::@74 +main::@74: scope:[main] from main::@18 + [280] j#3 = ++ j#13 + to:main::@17 +main::@14: scope:[main] from main::@71 main::@72 + [281] j#11 = phi( main::@71/1, main::@72/j#2 ) + [282] if(j#11<=m) goto main::@15 + to:main::@16 +main::@16: scope:[main] from main::@14 + [283] chrout::petscii = brick + [284] call chrout + to:main::@73 +main::@73: scope:[main] from main::@16 + [285] main::$35 = z#28 + m + [286] z#9 = main::$35 + 1 + [287] if(z#9<$1fa) goto main::@13 + to:main::@12 +main::@15: scope:[main] from main::@14 + [288] chrout::petscii = right + [289] call chrout + to:main::@72 +main::@72: scope:[main] from main::@15 + [290] j#2 = ++ j#11 + to:main::@14 +main::@7: scope:[main] from main::@6 + [291] chrout::petscii = brick + [292] call chrout + to:main::@9 +main::@9: scope:[main] from main::@63 main::@7 + [293] n#101 = phi( main::@7/2, main::@63/n#1 ) + [294] if(n#101<$16) goto main::@10 + to:main::@11 +main::@11: scope:[main] from main::@9 + [295] chrout::petscii = brick + [296] call chrout + to:main::@64 +main::@64: scope:[main] from main::@11 + [297] k#1 = ++ k#101 + to:main::@6 +main::@10: scope:[main] from main::@9 + [298] chrout::petscii = right + [299] call chrout + to:main::@63 +main::@63: scope:[main] from main::@10 + [300] n#1 = ++ n#101 + to:main::@9 +main::@2: scope:[main] from main::@1 + [301] main::$3 = $1c00 + m + [302] *((char *)main::$3) = duck_udg[m] + [303] m = ++ m + to:main::@1 + +void gotoxy(char x , char y) +gotoxy: scope:[gotoxy] from clear_screen::@3 conio_c64_init::@1 + [304] gotoxy::y#4 = phi( clear_screen::@3/0, conio_c64_init::@1/gotoxy::y#2 ) + [305] if(gotoxy::y#4<$19+1) goto gotoxy::@3 + to:gotoxy::@1 +gotoxy::@3: scope:[gotoxy] from gotoxy + [306] phi() + to:gotoxy::@1 +gotoxy::@1: scope:[gotoxy] from gotoxy gotoxy::@3 + [307] gotoxy::y#5 = phi( gotoxy::@3/gotoxy::y#4, gotoxy/0 ) + to:gotoxy::@2 +gotoxy::@2: scope:[gotoxy] from gotoxy::@1 + [308] conio_cursor_x = 0 + [309] conio_cursor_y = gotoxy::y#5 + [310] gotoxy::$7 = (unsigned int)gotoxy::y#5 + [311] gotoxy::$8 = gotoxy::$7 << 2 + [312] gotoxy::$9 = gotoxy::$8 + gotoxy::$7 + [313] gotoxy::line_offset#0 = gotoxy::$9 << 3 + [314] gotoxy::$5 = DEFAULT_SCREEN + gotoxy::line_offset#0 + [315] conio_line_text = gotoxy::$5 + [316] gotoxy::$6 = COLORRAM + gotoxy::line_offset#0 + [317] conio_line_color = gotoxy::$6 + to:gotoxy::@return +gotoxy::@return: scope:[gotoxy] from gotoxy::@2 + [318] return + to:@return + +void chrout(volatile char petscii) +chrout: scope:[chrout] from clear_screen::@4 main main::@10 main::@11 main::@12 main::@15 main::@16 main::@18 main::@21 main::@22 main::@23 main::@45 main::@50 main::@58 main::@59 main::@60 main::@61 main::@65 main::@66 main::@67 main::@68 main::@69 main::@7 main::@75 main::@76 main::@79 main::@8 main::@80 main::@82 main::@91 write_score::@10 write_score::@12 write_score::@3 + asm { ldapetscii jsr$ffd2 } + to:chrout::@return +chrout::@return: scope:[chrout] from chrout + [320] return + to:@return + +void clear_screen(char n , char m) +clear_screen: scope:[clear_screen] from main::@3 main::@44 main::@5 + [321] clear_screen::n#5 = phi( main::@3/$20, main::@44/4, main::@5/4 ) + to:clear_screen::@1 +clear_screen::@1: scope:[clear_screen] from clear_screen clear_screen::@2 + [322] z#2 = phi( clear_screen/0, clear_screen::@2/z#1 ) + [323] if(z#2<$1fa) goto clear_screen::@2 + to:clear_screen::@3 +clear_screen::@3: scope:[clear_screen] from clear_screen::@1 + [324] phi() + [325] call gotoxy + to:clear_screen::@4 +clear_screen::@4: scope:[clear_screen] from clear_screen::@3 + [326] chrout::petscii = home + [327] call chrout + to:clear_screen::@return +clear_screen::@return: scope:[clear_screen] from clear_screen::@4 + [328] return + to:@return +clear_screen::@2: scope:[clear_screen] from clear_screen::@1 + [329] clear_screen::$5 = $1e00 + z#2 + [330] clear_screen::$4 = clear_screen::$5 + c + [331] *((char *)clear_screen::$4) = 0 + [332] *((char *)clear_screen::$5) = clear_screen::n#5 + [333] z#1 = ++ z#2 + to:clear_screen::@1 + +char textcolor(char color) +textcolor: scope:[textcolor] from main::@101 main::@52 main::@54 main::@56 main::@92 main::@94 main::@97 + [334] textcolor::color#7 = phi( main::@92/7, main::@94/2, main::@97/3, main::@101/1, main::@52/7, main::@54/1, main::@56/2 ) + [335] conio_textcolor = textcolor::color#7 + to:textcolor::@return +textcolor::@return: scope:[textcolor] from textcolor + [336] return + to:@return + +void cputs(const char *s) +cputs: scope:[cputs] from main::@100 main::@102 main::@53 main::@55 main::@57 main::@93 main::@95 main::@96 main::@98 + [337] cputs::s#11 = phi( main::@93/game_over, main::@95/your_score, main::@96/buffer, main::@98/high_score, main::@100/buffer, main::@102/play_again, main::@53/intro, main::@55/levels, main::@57/foot ) + to:cputs::@1 +cputs::@1: scope:[cputs] from cputs cputs::@2 + [338] cputs::s#10 = phi( cputs/cputs::s#11, cputs::@2/cputs::s#0 ) + [339] cputs::c#1 = *cputs::s#10 + [340] cputs::s#0 = ++ cputs::s#10 + [341] if(0!=cputs::c#1) goto cputs::@2 + to:cputs::@return +cputs::@return: scope:[cputs] from cputs::@1 + [342] return + to:@return +cputs::@2: scope:[cputs] from cputs::@1 + [343] cputc::c#0 = cputs::c#1 + [344] call cputc + to:cputs::@1 + +void random(char k , char n) +random: scope:[random] from main::@13 main::@24 main::@83 + [345] random::n#4 = phi( main::@13/random::n#0, main::@24/$ff, main::@83/$ff ) + [345] random::k#4 = phi( main::@13/random::k#0, main::@24/0, main::@83/0 ) + to:random::@1 +random::@1: scope:[random] from random random::@1 random::@2 + [346] m = *((char *) 37140) + [347] random::$3 = m + [348] if(mrandom::n#4) goto random::@1 + to:random::@return +random::@return: scope:[random] from random::@2 + [350] return + to:@return + +void write_score() +write_score: scope:[write_score] from main::@19 main::@28 main::@34 + [351] score#13 = phi( main::@19/0, main::@28/score#4, main::@34/score#6 ) + [352] if(score#13<=$fde8) goto write_score::@15 + to:write_score::@1 +write_score::@15: scope:[write_score] from write_score + [353] phi() + to:write_score::@1 +write_score::@1: scope:[write_score] from write_score write_score::@15 + [354] score#38 = phi( write_score::@15/score#13, write_score/0 ) + [355] m = 0 + to:write_score::@5 +write_score::@5: scope:[write_score] from write_score::@1 write_score::@6 + [356] if(m<4) goto write_score::@6 + to:write_score::@7 +write_score::@7: scope:[write_score] from write_score::@5 + [357] utoa::value#1 = score#38 + [358] call utoa + to:write_score::@11 +write_score::@11: scope:[write_score] from write_score::@7 + [359] if(score#38<9+1) goto write_score::@2 + to:write_score::@8 +write_score::@8: scope:[write_score] from write_score::@11 + [360] *(points+2) = *buffer + [361] *(points+3) = *(buffer+1) + to:write_score::@2 +write_score::@2: scope:[write_score] from write_score::@11 write_score::@8 + [362] if(score#38<$63+1) goto write_score::@3 + to:write_score::@4 +write_score::@4: scope:[write_score] from write_score::@2 + [363] *(points+1) = *buffer + [364] *(points+2) = *(buffer+1) + [365] *(points+3) = *(buffer+2) + to:write_score::@3 +write_score::@3: scope:[write_score] from write_score::@2 write_score::@4 + [366] chrout::petscii = yellow + [367] call chrout + to:write_score::@12 +write_score::@12: scope:[write_score] from write_score::@3 + [368] chrout::petscii = home + [369] call chrout + to:write_score::@13 +write_score::@13: scope:[write_score] from write_score::@12 + [370] *((char *) 211) = 4 + [371] m = 0 + to:write_score::@9 +write_score::@9: scope:[write_score] from write_score::@13 write_score::@14 + [372] if(m<4) goto write_score::@10 + to:write_score::@return +write_score::@return: scope:[write_score] from write_score::@9 + [373] return + to:@return +write_score::@10: scope:[write_score] from write_score::@9 + [374] chrout::petscii = points[m] + [375] call chrout + to:write_score::@14 +write_score::@14: scope:[write_score] from write_score::@10 + [376] m = ++ m + to:write_score::@9 +write_score::@6: scope:[write_score] from write_score::@5 + [377] points[m] = '0' + [378] m = ++ m + to:write_score::@5 + +void chrono_restart() +chrono_restart: scope:[chrono_restart] from main::@25 + asm { lda#0 ldy#0 ldx#0 jsr$ffdb } + to:chrono_restart::@return +chrono_restart::@return: scope:[chrono_restart] from chrono_restart + [380] return + to:@return + +void wait(char n) +wait: scope:[wait] from main::@36 main::@42 main::@86 main::@88 main::@89 + [381] z#53 = phi( main::@36/z#48, main::@42/z#100, main::@86/z#100, main::@88/z#100, main::@89/z#25 ) + [381] wait::n#6 = phi( main::@36/5, main::@42/$a, main::@86/$14, main::@88/$a, main::@89/5 ) + [382] m = 0 + to:wait::@1 +wait::@1: scope:[wait] from wait wait::@4 + [383] z#25 = phi( wait/z#53, wait::@4/z#23 ) + [384] if(m=utoa::digit_value#0) goto utoa::@5 + to:utoa::@4 +utoa::@4: scope:[utoa] from utoa::@6 utoa::@7 + [402] utoa::buffer#15 = phi( utoa::@7/utoa::buffer#10, utoa::@6/utoa::buffer#4 ) + [402] utoa::started#4 = phi( utoa::@7/utoa::started#2, utoa::@6/1 ) + [402] utoa::value#7 = phi( utoa::@7/utoa::value#3, utoa::@6/utoa::value#0 ) + [403] utoa::digit#1 = ++ utoa::digit#2 + to:utoa::@1 +utoa::@5: scope:[utoa] from utoa::@2 utoa::@7 + [404] utoa_append::buffer#0 = utoa::buffer#10 + [405] utoa_append::value#0 = utoa::value#3 + [406] utoa_append::sub#0 = utoa::digit_value#0 + [407] call utoa_append + [408] utoa_append::return#0 = utoa_append::value#2 + to:utoa::@6 +utoa::@6: scope:[utoa] from utoa::@5 + [409] utoa::value#0 = utoa_append::return#0 + [410] utoa::buffer#4 = ++ utoa::buffer#10 + to:utoa::@4 + +void read_chrono() +read_chrono: scope:[read_chrono] from main::@27 + asm { jsr$ffde stal stxm } + [412] read_chrono::$0 = m << 8 + [413] div16u8u::dividend#0 = read_chrono::$0 + l + [414] call div16u8u + [415] div16u8u::return#2 = div16u8u::return#0 + to:read_chrono::@2 +read_chrono::@2: scope:[read_chrono] from read_chrono + [416] *((char *)$1e15+c) = 7 + [417] *((char *) 7701) = $b9 + [418] if(div16u8u::return#2>=$a) goto read_chrono::@return + to:read_chrono::@1 +read_chrono::@1: scope:[read_chrono] from read_chrono::@2 + [419] read_chrono::$5 = $b9 - div16u8u::return#2 + [420] *((char *) 7701) = read_chrono::$5 + to:read_chrono::@return +read_chrono::@return: scope:[read_chrono] from read_chrono::@1 read_chrono::@2 + [421] return + to:@return + +void cputc(char c) +cputc: scope:[cputc] from cputs::@2 + [422] if(cputc::c#0==' +') goto cputc::@1 + to:cputc::@2 +cputc::@2: scope:[cputc] from cputc + [423] conio_line_text[conio_cursor_x] = cputc::c#0 + [424] conio_line_color[conio_cursor_x] = conio_textcolor + [425] conio_cursor_x = ++ conio_cursor_x + [426] if(conio_cursor_x!=$28) goto cputc::@return + to:cputc::@3 +cputc::@3: scope:[cputc] from cputc::@2 + [427] phi() + [428] call cputln + to:cputc::@return +cputc::@return: scope:[cputc] from cputc::@1 cputc::@2 cputc::@3 + [429] return + to:@return +cputc::@1: scope:[cputc] from cputc + [430] phi() + [431] call cputln + to:cputc::@return + +unsigned int utoa_append(char *buffer , unsigned int value , unsigned int sub) +utoa_append: scope:[utoa_append] from utoa::@5 + [432] phi() + to:utoa_append::@1 +utoa_append::@1: scope:[utoa_append] from utoa_append utoa_append::@2 + [433] utoa_append::digit#2 = phi( utoa_append/0, utoa_append::@2/utoa_append::digit#1 ) + [433] utoa_append::value#2 = phi( utoa_append/utoa_append::value#0, utoa_append::@2/utoa_append::value#1 ) + [434] if(utoa_append::value#2>=utoa_append::sub#0) goto utoa_append::@2 + to:utoa_append::@3 +utoa_append::@3: scope:[utoa_append] from utoa_append::@1 + [435] *utoa_append::buffer#0 = DIGITS[utoa_append::digit#2] + to:utoa_append::@return +utoa_append::@return: scope:[utoa_append] from utoa_append::@3 + [436] return + to:@return +utoa_append::@2: scope:[utoa_append] from utoa_append::@1 + [437] utoa_append::digit#1 = ++ utoa_append::digit#2 + [438] utoa_append::value#1 = utoa_append::value#2 - utoa_append::sub#0 + to:utoa_append::@1 + +unsigned int div16u8u(unsigned int dividend , char divisor) +div16u8u: scope:[div16u8u] from read_chrono + [439] divr8u::dividend#1 = byte1 div16u8u::dividend#0 + [440] call divr8u + [441] divr8u::return#2 = divr8u::return#0 + to:div16u8u::@1 +div16u8u::@1: scope:[div16u8u] from div16u8u + [442] div16u8u::quotient_hi#0 = divr8u::return#2 + [443] divr8u::dividend#2 = byte0 div16u8u::dividend#0 + [444] divr8u::rem#4 = divr8u::rem#11 + [445] call divr8u + [446] divr8u::return#3 = divr8u::return#0 + to:div16u8u::@2 +div16u8u::@2: scope:[div16u8u] from div16u8u::@1 + [447] div16u8u::quotient_lo#0 = divr8u::return#3 + [448] div16u8u::return#0 = div16u8u::quotient_hi#0 w= div16u8u::quotient_lo#0 + to:div16u8u::@return +div16u8u::@return: scope:[div16u8u] from div16u8u::@2 + [449] return + to:@return + +void cputln() +cputln: scope:[cputln] from cputc::@1 cputc::@3 + [450] conio_line_text = conio_line_text + $28 + [451] conio_line_color = conio_line_color + $28 + [452] conio_cursor_x = 0 + [453] conio_cursor_y = ++ conio_cursor_y + [454] call cscroll + to:cputln::@return +cputln::@return: scope:[cputln] from cputln + [455] return + to:@return + +char divr8u(char dividend , char divisor , char rem) +divr8u: scope:[divr8u] from div16u8u div16u8u::@1 + [456] divr8u::dividend#5 = phi( div16u8u/divr8u::dividend#1, div16u8u::@1/divr8u::dividend#2 ) + [456] divr8u::rem#10 = phi( div16u8u/0, div16u8u::@1/divr8u::rem#4 ) + to:divr8u::@1 +divr8u::@1: scope:[divr8u] from divr8u divr8u::@3 + [457] divr8u::i#2 = phi( divr8u/0, divr8u::@3/divr8u::i#1 ) + [457] divr8u::quotient#3 = phi( divr8u/0, divr8u::@3/divr8u::return#0 ) + [457] divr8u::dividend#3 = phi( divr8u/divr8u::dividend#5, divr8u::@3/divr8u::dividend#0 ) + [457] divr8u::rem#5 = phi( divr8u/divr8u::rem#10, divr8u::@3/divr8u::rem#11 ) + [458] divr8u::rem#0 = divr8u::rem#5 << 1 + [459] divr8u::$1 = divr8u::dividend#3 & $80 + [460] if(divr8u::$1==0) goto divr8u::@2 + to:divr8u::@4 +divr8u::@4: scope:[divr8u] from divr8u::@1 + [461] divr8u::rem#1 = divr8u::rem#0 | 1 + to:divr8u::@2 +divr8u::@2: scope:[divr8u] from divr8u::@1 divr8u::@4 + [462] divr8u::rem#6 = phi( divr8u::@1/divr8u::rem#0, divr8u::@4/divr8u::rem#1 ) + [463] divr8u::dividend#0 = divr8u::dividend#3 << 1 + [464] divr8u::quotient#1 = divr8u::quotient#3 << 1 + [465] if(divr8u::rem#6=5+1) goto main::@4 [ l rem8u#127 y#114 hiscore#110 n#109 ] ( main:10 [ l rem8u#127 y#114 hiscore#110 n#109 ] { } ) always clobbers reg byte a +Statement [45] *((char *) 36869) = $ff [ l rem8u#127 y#114 hiscore#110 n#109 ] ( main:10 [ l rem8u#127 y#114 hiscore#110 n#109 ] { } ) always clobbers reg byte a +Statement [46] chrout::petscii = reverse_on [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#109 ] ( main:10 [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#109 ] { } ) always clobbers reg byte a +Statement [48] chrout::petscii = red [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#109 ] ( main:10 [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#109 ] { } ) always clobbers reg byte a +Statement [50] chrout::petscii = down [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#109 ] ( main:10 [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#109 ] { } ) always clobbers reg byte a +Statement [54] chrout::petscii = brick [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#89 ] ( main:10 [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#89 ] { } ) always clobbers reg byte a +Statement [56] *((char *) 8185) = brick [ l rem8u#127 y#114 hiscore#110 n#89 ] ( main:10 [ l rem8u#127 y#114 hiscore#110 n#89 ] { } ) always clobbers reg byte a +Statement [57] *((char *)$1ff9+c) = 2 [ l rem8u#127 y#114 hiscore#110 n#89 ] ( main:10 [ l rem8u#127 y#114 hiscore#110 n#89 ] { } ) always clobbers reg byte a +Statement [58] chrout::petscii = home [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#89 ] ( main:10 [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#89 ] { } ) always clobbers reg byte a +Statement [60] if(l<1+1) goto main::@12 [ l rem8u#127 y#114 hiscore#110 n#89 ] ( main:10 [ l rem8u#127 y#114 hiscore#110 n#89 ] { } ) always clobbers reg byte a +Statement [62] random::k#0 = 7 - l [ l rem8u#127 y#114 hiscore#110 n#89 z#28 random::k#0 ] ( main:10 [ l rem8u#127 y#114 hiscore#110 n#89 z#28 random::k#0 ] { { random::k#0 = random::k#4 } { random::n#0 = random::n#4 } } ) always clobbers reg byte a +Statement [63] main::$177 = l << 1 [ l rem8u#127 y#114 hiscore#110 n#89 z#28 random::k#0 main::$177 ] ( main:10 [ l rem8u#127 y#114 hiscore#110 n#89 z#28 random::k#0 main::$177 ] { { random::k#0 = random::k#4 } { random::n#0 = random::n#4 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:3 [ random::k#4 random::k#0 ] +Statement [64] main::$26 = main::$177 + l [ l rem8u#127 y#114 hiscore#110 n#89 z#28 random::k#0 main::$26 ] ( main:10 [ l rem8u#127 y#114 hiscore#110 n#89 z#28 random::k#0 main::$26 ] { { random::k#0 = random::k#4 } { random::n#0 = random::n#4 } } ) always clobbers reg byte a +Statement [65] random::n#0 = $1a - main::$26 [ l rem8u#127 y#114 hiscore#110 n#89 z#28 random::k#0 random::n#0 ] ( main:10 [ l rem8u#127 y#114 hiscore#110 n#89 z#28 random::k#0 random::n#0 ] { { random::k#0 = random::k#4 } { random::n#0 = random::n#4 } } ) always clobbers reg byte a +Statement [67] main::$29 = z#28 + m [ l m rem8u#127 y#114 hiscore#110 n#89 z#28 main::$29 ] ( main:10 [ l m rem8u#127 y#114 hiscore#110 n#89 z#28 main::$29 ] { } ) always clobbers reg byte a +Statement [68] if(main::$29<=$1f9) goto main::@14 [ l m rem8u#127 y#114 hiscore#110 n#89 z#28 ] ( main:10 [ l m rem8u#127 y#114 hiscore#110 n#89 z#28 ] { } ) always clobbers reg byte a +Statement [70] *((char *) 36878) = $f [ l rem8u#127 y#114 hiscore#110 n#89 z#128 ] ( main:10 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 ] { } ) always clobbers reg byte a +Statement [71] chrout::petscii = home [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#89 z#128 ] ( main:10 [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#89 z#128 ] { } ) always clobbers reg byte a +Statement [73] chrout::petscii = yellow [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#89 z#128 ] ( main:10 [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#89 z#128 ] { } ) always clobbers reg byte a +Statement [75] chrout::petscii = $50 [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#89 z#128 ] ( main:10 [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#89 z#128 ] { } ) always clobbers reg byte a +Statement [77] chrout::petscii = $54 [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#89 z#128 ] ( main:10 [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#89 z#128 ] { } ) always clobbers reg byte a +Statement [79] chrout::petscii = $53 [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#89 z#128 ] ( main:10 [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#89 z#128 ] { } ) always clobbers reg byte a +Statement [81] chrout::petscii = $3a [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#89 z#128 ] ( main:10 [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#89 z#128 ] { } ) always clobbers reg byte a +Statement [83] *((char *) 211) = $12 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 ] ( main:10 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 ] { } ) always clobbers reg byte a +Statement [88] chrout::petscii = home [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 ] ( main:10 [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 ] { } ) always clobbers reg byte a +Statement [90] chrout::petscii = green [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 ] ( main:10 [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 ] { } ) always clobbers reg byte a +Statement [92] *((char *) 211) = $a [ l rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 ] ( main:10 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 ] { } ) always clobbers reg byte a +Statement [96] chrout::petscii = home [ l chrout::petscii hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 score#38 ] ( main:10 [ l chrout::petscii hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 score#38 ] { } ) always clobbers reg byte a +Statement [98] chrout::petscii = green [ l chrout::petscii hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 score#38 ] ( main:10 [ l chrout::petscii hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 score#38 ] { } ) always clobbers reg byte a +Statement [100] chrout::petscii = reverse_on [ l chrout::petscii hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 score#38 ] ( main:10 [ l chrout::petscii hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 score#38 ] { } ) always clobbers reg byte a +Statement [102] *((char *) 211) = $f [ l hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 score#38 ] ( main:10 [ l hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 score#38 ] { } ) always clobbers reg byte a +Statement [103] if(tu#13<$a) goto main::@23 [ l hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 score#38 ] ( main:10 [ l hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 score#38 ] { } ) always clobbers reg byte a +Statement [104] chrout::petscii = $31 [ l chrout::petscii hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 score#38 ] ( main:10 [ l chrout::petscii hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 score#38 ] { } ) always clobbers reg byte a +Statement [106] chrout::petscii = $30 [ l chrout::petscii hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 score#38 ] ( main:10 [ l chrout::petscii hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 score#38 ] { } ) always clobbers reg byte a +Statement [110] duck#0 = m [ l hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 duck#0 score#38 ] ( main:10 [ l hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 duck#0 score#38 ] { } ) always clobbers reg byte a +Statement [112] main::$61 = m + $1e15 [ l m hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 duck#0 main::$61 score#38 ] ( main:10 [ l m hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 duck#0 main::$61 score#38 ] { } ) always clobbers reg byte a +Statement [113] duck#1 = main::$61 + duck#0 [ l m hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 duck#1 score#38 ] ( main:10 [ l m hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 duck#1 score#38 ] { } ) always clobbers reg byte a +Statement [114] main::$66 = duck#1 + 1 [ l m hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 duck#1 main::$66 score#38 ] ( main:10 [ l m hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 duck#1 main::$66 score#38 ] { } ) always clobbers reg byte a +Statement [115] main::$69 = duck#1 + $16 [ l m hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 duck#1 main::$66 main::$69 score#38 ] ( main:10 [ l m hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 duck#1 main::$66 main::$69 score#38 ] { } ) always clobbers reg byte a +Statement [116] main::$72 = duck#1 + $17 [ l m hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 duck#1 main::$66 main::$69 main::$72 score#38 ] ( main:10 [ l m hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 duck#1 main::$66 main::$69 main::$72 score#38 ] { } ) always clobbers reg byte a +Statement [117] if(duck#1>$1fe3) goto main::@24 [ l m hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 duck#1 main::$66 main::$69 main::$72 score#38 ] ( main:10 [ l m hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 duck#1 main::$66 main::$69 main::$72 score#38 ] { } ) always clobbers reg byte a +Statement [118] if(*((char *)duck#1)==brick) goto main::@24 [ l m hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 duck#1 main::$66 main::$69 main::$72 score#38 ] ( main:10 [ l m hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 duck#1 main::$66 main::$69 main::$72 score#38 ] { } ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp[1]:17 [ divr8u::rem#5 divr8u::rem#10 divr8u::rem#4 rem8u#48 rem8u#127 rem8u#25 divr8u::rem#11 divr8u::rem#6 divr8u::rem#0 divr8u::rem#1 divr8u::rem#2 ] +Removing always clobbered register reg byte y as potential for zp[1]:95 [ n#52 n#89 n#109 n#20 n#101 n#14 n#1 ] +Statement [119] if(*((char *)main::$66)==brick) goto main::@24 [ l m hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 duck#1 main::$69 main::$72 score#38 ] ( main:10 [ l m hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 duck#1 main::$69 main::$72 score#38 ] { } ) always clobbers reg byte a reg byte y +Statement [120] if(*((char *)main::$69)==brick) goto main::@24 [ l m hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 duck#1 main::$72 score#38 ] ( main:10 [ l m hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 duck#1 main::$72 score#38 ] { } ) always clobbers reg byte a reg byte y +Statement [121] if(*((char *)main::$72)==brick) goto main::@24 [ l m hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 duck#1 score#38 ] ( main:10 [ l m hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 duck#1 score#38 ] { } ) always clobbers reg byte a reg byte y +Statement [125] if(time#11<$a) goto main::@27 [ l m hiscore#110 rem8u#25 y#18 n#20 tu#13 peephole#12 duck#1 score#19 z#100 ] ( main:10 [ l m hiscore#110 rem8u#25 y#18 n#20 tu#13 peephole#12 duck#1 score#19 z#100 ] { } ) always clobbers reg byte a +Statement [127] score#4 = score#19 - $a [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#4 ] ( main:10 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#4 ] { { score#13 = score#4 } } ) always clobbers reg byte a +Statement [129] *((char *) 36877) = $82 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#38 ] ( main:10 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#38 ] { { z#100 = z#53 } } ) always clobbers reg byte a +Statement [131] *((char *) 36877) = 0 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 z#25 peephole#12 duck#1 score#38 ] ( main:10 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 z#25 peephole#12 duck#1 score#38 ] { } ) always clobbers reg byte a +Statement [132] main::$150 = duck#1 + c [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 z#25 peephole#12 duck#1 score#38 main::$150 ] ( main:10 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 z#25 peephole#12 duck#1 score#38 main::$150 ] { } ) always clobbers reg byte a +Statement [133] *((char *)main::$150) = 0 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 z#25 peephole#12 duck#1 score#38 ] ( main:10 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 z#25 peephole#12 duck#1 score#38 ] { } ) always clobbers reg byte a reg byte y +Statement [134] main::$151 = duck#1 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 z#25 peephole#12 duck#1 score#38 main::$151 ] ( main:10 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 z#25 peephole#12 duck#1 score#38 main::$151 ] { } ) always clobbers reg byte a +Statement [135] main::$152 = main::$151 + 1+c [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 z#25 peephole#12 duck#1 score#38 main::$152 ] ( main:10 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 z#25 peephole#12 duck#1 score#38 main::$152 ] { } ) always clobbers reg byte a +Statement [136] *((char *)main::$152) = 0 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 z#25 peephole#12 duck#1 score#38 ] ( main:10 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 z#25 peephole#12 duck#1 score#38 ] { } ) always clobbers reg byte a reg byte y +Statement [137] main::$153 = duck#1 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 z#25 peephole#12 duck#1 score#38 main::$153 ] ( main:10 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 z#25 peephole#12 duck#1 score#38 main::$153 ] { } ) always clobbers reg byte a +Statement [138] main::$154 = main::$153 + $16+c [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 z#25 peephole#12 duck#1 score#38 main::$154 ] ( main:10 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 z#25 peephole#12 duck#1 score#38 main::$154 ] { } ) always clobbers reg byte a +Statement [139] *((char *)main::$154) = 0 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 z#25 peephole#12 duck#1 score#38 ] ( main:10 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 z#25 peephole#12 duck#1 score#38 ] { } ) always clobbers reg byte a reg byte y +Statement [140] main::$155 = duck#1 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 z#25 peephole#12 score#38 main::$155 ] ( main:10 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 z#25 peephole#12 score#38 main::$155 ] { } ) always clobbers reg byte a +Statement [141] main::$156 = main::$155 + $17+c [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 z#25 peephole#12 score#38 main::$156 ] ( main:10 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 z#25 peephole#12 score#38 main::$156 ] { } ) always clobbers reg byte a +Statement [142] *((char *)main::$156) = 0 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 z#25 peephole#12 score#38 ] ( main:10 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 z#25 peephole#12 score#38 ] { } ) always clobbers reg byte a reg byte y +Statement [143] if(tu#1<$b) goto main::@22 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 z#25 peephole#12 score#38 ] ( main:10 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 z#25 peephole#12 score#38 ] { } ) always clobbers reg byte a +Statement [146] *((char *) 36869) = $f0 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color hiscore#110 rem8u#25 y#18 n#20 score#38 ] ( main:10 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color hiscore#110 rem8u#25 y#18 n#20 score#38 ] { } ) always clobbers reg byte a +Statement [147] chrout::petscii = lower [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color chrout::petscii hiscore#110 rem8u#25 y#18 n#20 score#38 ] ( main:10 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color chrout::petscii hiscore#110 rem8u#25 y#18 n#20 score#38 ] { } ) always clobbers reg byte a +Statement [163] if(score#38<=hiscore#110) goto main::@114 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor hiscore#110 rem8u#25 y#18 n#20 score#38 ] ( main:10 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor hiscore#110 rem8u#25 y#18 n#20 score#38 ] { } ) always clobbers reg byte a +Statement [164] hiscore#124 = hiscore#110 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor rem8u#25 y#18 n#20 hiscore#124 ] ( main:10 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor rem8u#25 y#18 n#20 hiscore#124 ] { } ) always clobbers reg byte a +Statement [166] utoa::value#2 = hiscore#19 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor rem8u#25 y#18 n#20 hiscore#19 utoa::value#2 ] ( main:10 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor rem8u#25 y#18 n#20 hiscore#19 utoa::value#2 ] { { utoa::value#10 = utoa::value#2 hiscore#19 } } ) always clobbers reg byte a +Statement asm { jsr$FD22 } always clobbers reg byte a reg byte x reg byte y +Statement [180] hiscore#123 = hiscore#19 [ rem8u#25 y#18 hiscore#123 n#20 ] ( main:10 [ rem8u#25 y#18 hiscore#123 n#20 ] { } ) always clobbers reg byte a +Statement [183] m = *((char *) 37151) [ l m hiscore#110 y#18 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 div16u8u::return#2 ] ( main:10 [ l m hiscore#110 y#18 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 div16u8u::return#2 ] { } ) always clobbers reg byte a +Statement [184] *((char *) 37154) = $7f [ l m hiscore#110 y#18 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 div16u8u::return#2 ] ( main:10 [ l m hiscore#110 y#18 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 div16u8u::return#2 ] { } ) always clobbers reg byte a +Statement [186] *((char *) 37154) = $ff [ l m hiscore#110 y#18 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 div16u8u::return#2 ] ( main:10 [ l m hiscore#110 y#18 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 div16u8u::return#2 ] { } ) always clobbers reg byte a +Statement [187] main::$78 = $10 & m [ l m hiscore#110 y#18 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 main::$78 div16u8u::return#2 ] ( main:10 [ l m hiscore#110 y#18 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 main::$78 div16u8u::return#2 ] { } ) always clobbers reg byte a +Statement [189] y#0 = -- y#18 [ l m hiscore#110 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 y#0 div16u8u::return#2 ] ( main:10 [ l m hiscore#110 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 y#0 div16u8u::return#2 ] { } ) always clobbers reg byte a +Statement [191] main::$81 = $80 & n#14 [ l m hiscore#110 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 y#10 main::$81 div16u8u::return#2 ] ( main:10 [ l m hiscore#110 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 y#10 main::$81 div16u8u::return#2 ] { } ) always clobbers reg byte a +Statement [195] main::$84 = 4 & m [ l m hiscore#110 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 y#11 main::$84 div16u8u::return#2 ] ( main:10 [ l m hiscore#110 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 y#11 main::$84 div16u8u::return#2 ] { } ) always clobbers reg byte a +Statement [197] y#2 = y#11 - $16 [ l m hiscore#110 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 y#2 div16u8u::return#2 ] ( main:10 [ l m hiscore#110 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 y#2 div16u8u::return#2 ] { } ) always clobbers reg byte a +Statement [199] main::$88 = 8 & m [ l m hiscore#110 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 y#12 main::$88 div16u8u::return#2 ] ( main:10 [ l m hiscore#110 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 y#12 main::$88 div16u8u::return#2 ] { } ) always clobbers reg byte a +Statement [201] y#3 = y#12 + $16 [ l m hiscore#110 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 y#3 div16u8u::return#2 ] ( main:10 [ l m hiscore#110 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 y#3 div16u8u::return#2 ] { } ) always clobbers reg byte a +Statement [203] main::$92 = $20 & m [ l hiscore#110 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 y#13 main::$92 div16u8u::return#2 ] ( main:10 [ l hiscore#110 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 y#13 main::$92 div16u8u::return#2 ] { } ) always clobbers reg byte a +Statement [205] *((char *) 36877) = $82 [ l hiscore#110 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 ] ( main:10 [ l hiscore#110 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 ] { } ) always clobbers reg byte a +Statement [206] if(peephole#12!=duck#1) goto main::@34 [ l hiscore#110 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 ] ( main:10 [ l hiscore#110 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 ] { } ) always clobbers reg byte a +Statement [207] main::$96 = $c - div16u8u::return#2 [ l hiscore#110 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 y#13 main::$96 ] ( main:10 [ l hiscore#110 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 y#13 main::$96 ] { { z#100 = z#53 } } ) always clobbers reg byte a +Statement [208] main::$179 = main::$96 << 2 [ l hiscore#110 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 y#13 main::$96 main::$179 ] ( main:10 [ l hiscore#110 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 y#13 main::$96 main::$179 ] { { z#100 = z#53 } } ) always clobbers reg byte a +Statement [209] main::$180 = main::$179 + main::$96 [ l hiscore#110 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 y#13 main::$180 ] ( main:10 [ l hiscore#110 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 y#13 main::$180 ] { { z#100 = z#53 } } ) always clobbers reg byte a +Statement [210] main::$97 = main::$180 << 1 [ l hiscore#110 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 y#13 main::$97 ] ( main:10 [ l hiscore#110 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 y#13 main::$97 ] { { z#100 = z#53 } } ) always clobbers reg byte a +Statement [211] score#8 = score#19 + main::$97 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 score#8 ] ( main:10 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 score#8 ] { { z#100 = z#53 } } ) always clobbers reg byte a +Statement [214] *((char *) 36877) = 0 [ l hiscore#110 tu#13 z#25 peephole#12 duck#1 divr8u::rem#11 n#14 y#13 time#38 score#81 ] ( main:10 [ l hiscore#110 tu#13 z#25 peephole#12 duck#1 divr8u::rem#11 n#14 y#13 time#38 score#81 ] { } ) always clobbers reg byte a +Statement [216] main::$104 = y#13 + 1 [ l hiscore#110 tu#13 peephole#12 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 main::$104 ] ( main:10 [ l hiscore#110 tu#13 peephole#12 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 main::$104 ] { } ) always clobbers reg byte a +Statement [217] main::$107 = y#13 + $16 [ l hiscore#110 tu#13 peephole#12 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 main::$104 main::$107 ] ( main:10 [ l hiscore#110 tu#13 peephole#12 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 main::$104 main::$107 ] { } ) always clobbers reg byte a +Statement [218] main::$110 = y#13 + $17 [ l hiscore#110 tu#13 peephole#12 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 main::$104 main::$107 main::$110 ] ( main:10 [ l hiscore#110 tu#13 peephole#12 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 main::$104 main::$107 main::$110 ] { } ) always clobbers reg byte a +Statement [219] if(*((char *)y#13)==brick) goto main::@36 [ l hiscore#110 tu#13 peephole#12 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 main::$104 main::$107 main::$110 ] ( main:10 [ l hiscore#110 tu#13 peephole#12 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 main::$104 main::$107 main::$110 ] { } ) always clobbers reg byte a reg byte y +Statement [220] if(*((char *)main::$104)==brick) goto main::@36 [ l hiscore#110 tu#13 peephole#12 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 main::$107 main::$110 ] ( main:10 [ l hiscore#110 tu#13 peephole#12 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 main::$107 main::$110 ] { } ) always clobbers reg byte a reg byte y +Statement [221] if(*((char *)main::$107)!=brick) goto main::@109 [ l hiscore#110 tu#13 peephole#12 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 main::$110 ] ( main:10 [ l hiscore#110 tu#13 peephole#12 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 main::$110 ] { } ) always clobbers reg byte a reg byte y +Statement [223] *((char *)y#35) = $fd [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 ] ( main:10 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 ] { { z#48 = z#53 } } ) always clobbers reg byte a reg byte y +Statement [224] main::$125 = y#35 + c [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 main::$125 ] ( main:10 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 main::$125 ] { { z#48 = z#53 } } ) always clobbers reg byte a +Statement [225] *((char *)main::$125) = 1 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 ] ( main:10 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 ] { { z#48 = z#53 } } ) always clobbers reg byte a reg byte y +Statement [226] main::$127 = y#35 + 1 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 main::$127 ] ( main:10 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 main::$127 ] { { z#48 = z#53 } } ) always clobbers reg byte a +Statement [227] *((char *)main::$127) = $ed [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 main::$127 ] ( main:10 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 main::$127 ] { { z#48 = z#53 } } ) always clobbers reg byte a reg byte y +Statement [228] main::$128 = main::$127 + c [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 main::$128 ] ( main:10 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 main::$128 ] { { z#48 = z#53 } } ) always clobbers reg byte a +Statement [229] *((char *)main::$128) = 1 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 ] ( main:10 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 ] { { z#48 = z#53 } } ) always clobbers reg byte a reg byte y +Statement [230] main::$130 = y#35 + $16 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 main::$130 ] ( main:10 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 main::$130 ] { { z#48 = z#53 } } ) always clobbers reg byte a +Statement [231] *((char *)main::$130) = $ee [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 main::$130 ] ( main:10 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 main::$130 ] { { z#48 = z#53 } } ) always clobbers reg byte a reg byte y +Statement [232] main::$131 = main::$130 + c [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 main::$131 ] ( main:10 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 main::$131 ] { { z#48 = z#53 } } ) always clobbers reg byte a +Statement [233] *((char *)main::$131) = 1 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 ] ( main:10 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 ] { { z#48 = z#53 } } ) always clobbers reg byte a reg byte y +Statement [234] main::$133 = y#35 + $17 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 main::$133 ] ( main:10 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 main::$133 ] { { z#48 = z#53 } } ) always clobbers reg byte a +Statement [235] *((char *)main::$133) = $f0 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 main::$133 ] ( main:10 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 main::$133 ] { { z#48 = z#53 } } ) always clobbers reg byte a reg byte y +Statement [236] main::$134 = main::$133 + c [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 main::$134 ] ( main:10 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 main::$134 ] { { z#48 = z#53 } } ) always clobbers reg byte a +Statement [237] *((char *)main::$134) = 1 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 ] ( main:10 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 ] { { z#48 = z#53 } } ) always clobbers reg byte a reg byte y +Statement [239] *((char *)duck#1) = 0 [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 ] ( main:10 [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 ] { { z#25 = z#53 } } ) always clobbers reg byte a reg byte y +Statement [240] main::$136 = duck#1 + c [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 main::$136 ] ( main:10 [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 main::$136 ] { { z#25 = z#53 } } ) always clobbers reg byte a +Statement [241] *((char *)main::$136) = 7 [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 ] ( main:10 [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 ] { { z#25 = z#53 } } ) always clobbers reg byte a reg byte y +Statement [242] main::$138 = duck#1 + 1 [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 main::$138 ] ( main:10 [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 main::$138 ] { { z#25 = z#53 } } ) always clobbers reg byte a +Statement [243] *((char *)main::$138) = 1 [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 main::$138 ] ( main:10 [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 main::$138 ] { { z#25 = z#53 } } ) always clobbers reg byte a reg byte y +Statement [244] main::$139 = main::$138 + c [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 main::$139 ] ( main:10 [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 main::$139 ] { { z#25 = z#53 } } ) always clobbers reg byte a +Statement [245] *((char *)main::$139) = 7 [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 ] ( main:10 [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 ] { { z#25 = z#53 } } ) always clobbers reg byte a reg byte y +Statement [246] main::$141 = duck#1 + $16 [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 main::$141 ] ( main:10 [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 main::$141 ] { { z#25 = z#53 } } ) always clobbers reg byte a +Statement [247] *((char *)main::$141) = 2 [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 main::$141 ] ( main:10 [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 main::$141 ] { { z#25 = z#53 } } ) always clobbers reg byte a reg byte y +Statement [248] main::$142 = main::$141 + c [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 main::$142 ] ( main:10 [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 main::$142 ] { { z#25 = z#53 } } ) always clobbers reg byte a +Statement [249] *((char *)main::$142) = 7 [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 ] ( main:10 [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 ] { { z#25 = z#53 } } ) always clobbers reg byte a reg byte y +Statement [250] main::$144 = duck#1 + $17 [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 main::$144 ] ( main:10 [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 main::$144 ] { { z#25 = z#53 } } ) always clobbers reg byte a +Statement [251] *((char *)main::$144) = 3 [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 main::$144 ] ( main:10 [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 main::$144 ] { { z#25 = z#53 } } ) always clobbers reg byte a reg byte y +Statement [252] main::$145 = main::$144 + c [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 main::$145 ] ( main:10 [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 main::$145 ] { { z#25 = z#53 } } ) always clobbers reg byte a +Statement [253] *((char *)main::$145) = 7 [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 ] ( main:10 [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 ] { { z#25 = z#53 } } ) always clobbers reg byte a reg byte y +Statement [255] y#130 = y#35 [ l m hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#130 y#35 n#14 ] ( main:10 [ l m hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#130 y#35 n#14 ] { } ) always clobbers reg byte a +Statement [256] if(*((char *)main::$110)==brick) goto main::@36 [ l hiscore#110 tu#13 peephole#12 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 ] ( main:10 [ l hiscore#110 tu#13 peephole#12 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 ] { } ) always clobbers reg byte a reg byte y +Statement [257] if(y#13>$1e16) goto main::@107 [ l hiscore#110 tu#13 peephole#12 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 ] ( main:10 [ l hiscore#110 tu#13 peephole#12 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 ] { } ) always clobbers reg byte a +Statement [258] if(y#13>=$1fe3) goto main::@36 [ l hiscore#110 tu#13 peephole#12 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 ] ( main:10 [ l hiscore#110 tu#13 peephole#12 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 ] { } ) always clobbers reg byte a +Statement [259] main::$119 = peephole#12 + c [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 main::$119 ] ( main:10 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 main::$119 ] { } ) always clobbers reg byte a +Statement [260] *((char *)main::$119) = 0 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 main::$119 ] ( main:10 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 main::$119 ] { } ) always clobbers reg byte a reg byte y +Statement [261] main::$120 = main::$119 + 1 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 main::$119 main::$120 ] ( main:10 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 main::$119 main::$120 ] { } ) always clobbers reg byte a +Statement [262] *((char *)main::$120) = 0 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 main::$119 ] ( main:10 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 main::$119 ] { } ) always clobbers reg byte a reg byte y +Statement [263] main::$122 = main::$119 + $16 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 main::$119 main::$122 ] ( main:10 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 main::$119 main::$122 ] { } ) always clobbers reg byte a +Statement [264] *((char *)main::$122) = 0 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 main::$119 ] ( main:10 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 main::$119 ] { } ) always clobbers reg byte a reg byte y +Statement [265] main::$124 = main::$119 + $17 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 main::$124 ] ( main:10 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 main::$124 ] { } ) always clobbers reg byte a +Statement [266] *((char *)main::$124) = 0 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 ] ( main:10 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 ] { } ) always clobbers reg byte a reg byte y +Statement [267] y#141 = y#13 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 n#14 z#48 y#141 ] ( main:10 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 n#14 z#48 y#141 ] { } ) always clobbers reg byte a +Statement [268] score#6 = score#19 - $a [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 score#6 ] ( main:10 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 score#6 ] { { score#13 = score#6 } } ) always clobbers reg byte a +Statement [272] main::$57 = $30 + tu#13 [ l hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 score#38 main::$57 ] ( main:10 [ l hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 score#38 main::$57 ] { { chrout::petscii = main::$57 } } ) always clobbers reg byte a +Statement [273] chrout::petscii = main::$57 [ l chrout::petscii hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 score#38 ] ( main:10 [ l chrout::petscii hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 score#38 ] { { chrout::petscii = main::$57 } } ) always clobbers reg byte a +Statement [275] chrout::petscii = ducknumber[j#16] [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#89 z#128 j#16 score#38 ] ( main:10 [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#89 z#128 j#16 score#38 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:162 [ j#16 j#5 ] +Statement [278] chrout::petscii = chrono[j#13] [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#89 z#128 j#13 ] ( main:10 [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#89 z#128 j#13 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:161 [ j#13 j#3 ] +Statement [283] chrout::petscii = brick [ l m chrout::petscii rem8u#127 y#114 hiscore#110 n#89 z#28 ] ( main:10 [ l m chrout::petscii rem8u#127 y#114 hiscore#110 n#89 z#28 ] { } ) always clobbers reg byte a +Statement [285] main::$35 = z#28 + m [ l rem8u#127 y#114 hiscore#110 n#89 main::$35 ] ( main:10 [ l rem8u#127 y#114 hiscore#110 n#89 main::$35 ] { } ) always clobbers reg byte a +Statement [286] z#9 = main::$35 + 1 [ l rem8u#127 y#114 hiscore#110 n#89 z#9 ] ( main:10 [ l rem8u#127 y#114 hiscore#110 n#89 z#9 ] { } ) always clobbers reg byte a +Statement [287] if(z#9<$1fa) goto main::@13 [ l rem8u#127 y#114 hiscore#110 n#89 z#9 ] ( main:10 [ l rem8u#127 y#114 hiscore#110 n#89 z#9 ] { } ) always clobbers reg byte a +Statement [288] chrout::petscii = right [ l m chrout::petscii rem8u#127 y#114 hiscore#110 n#89 z#28 j#11 ] ( main:10 [ l m chrout::petscii rem8u#127 y#114 hiscore#110 n#89 z#28 j#11 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:94 [ j#11 j#2 ] +Statement [291] chrout::petscii = brick [ l chrout::petscii rem8u#127 y#114 hiscore#110 k#101 ] ( main:10 [ l chrout::petscii rem8u#127 y#114 hiscore#110 k#101 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:169 [ k#101 k#1 ] +Statement [295] chrout::petscii = brick [ l chrout::petscii rem8u#127 y#114 hiscore#110 k#101 n#101 ] ( main:10 [ l chrout::petscii rem8u#127 y#114 hiscore#110 k#101 n#101 ] { } ) always clobbers reg byte a +Statement [298] chrout::petscii = right [ l chrout::petscii rem8u#127 y#114 hiscore#110 k#101 n#101 ] ( main:10 [ l chrout::petscii rem8u#127 y#114 hiscore#110 k#101 n#101 ] { } ) always clobbers reg byte a +Statement [301] main::$3 = $1c00 + m [ m main::$3 ] ( main:10 [ m main::$3 ] { } ) always clobbers reg byte a +Statement [302] *((char *)main::$3) = duck_udg[m] [ m ] ( main:10 [ m ] { } ) always clobbers reg byte a reg byte y +Statement [308] conio_cursor_x = 0 [ conio_cursor_x gotoxy::y#5 ] ( gotoxy:17 [ conio_cursor_x gotoxy::y#5 ] { { gotoxy::y#2 = gotoxy::y#4 conio_c64_init::line#2 } } conio_c64_init:8::gotoxy:17 [ conio_cursor_x gotoxy::y#5 ] { { gotoxy::y#2 = gotoxy::y#4 conio_c64_init::line#2 } } main:10::clear_screen:27::gotoxy:325 [ rem8u#127 y#114 hiscore#110 n#109 conio_cursor_x gotoxy::y#5 ] { } main:10::clear_screen:44::gotoxy:325 [ l rem8u#127 y#114 hiscore#110 n#109 conio_cursor_x gotoxy::y#5 ] { } main:10::clear_screen:145::gotoxy:325 [ hiscore#110 rem8u#25 y#18 n#20 score#38 conio_cursor_x gotoxy::y#5 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:121 [ gotoxy::y#5 gotoxy::y#4 gotoxy::y#2 ] +Statement [310] gotoxy::$7 = (unsigned int)gotoxy::y#5 [ conio_cursor_x conio_cursor_y gotoxy::$7 ] ( gotoxy:17 [ conio_cursor_x conio_cursor_y gotoxy::$7 ] { { gotoxy::y#2 = gotoxy::y#4 conio_c64_init::line#2 } } conio_c64_init:8::gotoxy:17 [ conio_cursor_x conio_cursor_y gotoxy::$7 ] { { gotoxy::y#2 = gotoxy::y#4 conio_c64_init::line#2 } } main:10::clear_screen:27::gotoxy:325 [ rem8u#127 y#114 hiscore#110 n#109 conio_cursor_x conio_cursor_y gotoxy::$7 ] { } main:10::clear_screen:44::gotoxy:325 [ l rem8u#127 y#114 hiscore#110 n#109 conio_cursor_x conio_cursor_y gotoxy::$7 ] { } main:10::clear_screen:145::gotoxy:325 [ hiscore#110 rem8u#25 y#18 n#20 score#38 conio_cursor_x conio_cursor_y gotoxy::$7 ] { } ) always clobbers reg byte a +Statement [311] gotoxy::$8 = gotoxy::$7 << 2 [ conio_cursor_x conio_cursor_y gotoxy::$7 gotoxy::$8 ] ( gotoxy:17 [ conio_cursor_x conio_cursor_y gotoxy::$7 gotoxy::$8 ] { { gotoxy::y#2 = gotoxy::y#4 conio_c64_init::line#2 } } conio_c64_init:8::gotoxy:17 [ conio_cursor_x conio_cursor_y gotoxy::$7 gotoxy::$8 ] { { gotoxy::y#2 = gotoxy::y#4 conio_c64_init::line#2 } } main:10::clear_screen:27::gotoxy:325 [ rem8u#127 y#114 hiscore#110 n#109 conio_cursor_x conio_cursor_y gotoxy::$7 gotoxy::$8 ] { } main:10::clear_screen:44::gotoxy:325 [ l rem8u#127 y#114 hiscore#110 n#109 conio_cursor_x conio_cursor_y gotoxy::$7 gotoxy::$8 ] { } main:10::clear_screen:145::gotoxy:325 [ hiscore#110 rem8u#25 y#18 n#20 score#38 conio_cursor_x conio_cursor_y gotoxy::$7 gotoxy::$8 ] { } ) always clobbers reg byte a +Statement [312] gotoxy::$9 = gotoxy::$8 + gotoxy::$7 [ conio_cursor_x conio_cursor_y gotoxy::$9 ] ( gotoxy:17 [ conio_cursor_x conio_cursor_y gotoxy::$9 ] { { gotoxy::y#2 = gotoxy::y#4 conio_c64_init::line#2 } } conio_c64_init:8::gotoxy:17 [ conio_cursor_x conio_cursor_y gotoxy::$9 ] { { gotoxy::y#2 = gotoxy::y#4 conio_c64_init::line#2 } } main:10::clear_screen:27::gotoxy:325 [ rem8u#127 y#114 hiscore#110 n#109 conio_cursor_x conio_cursor_y gotoxy::$9 ] { } main:10::clear_screen:44::gotoxy:325 [ l rem8u#127 y#114 hiscore#110 n#109 conio_cursor_x conio_cursor_y gotoxy::$9 ] { } main:10::clear_screen:145::gotoxy:325 [ hiscore#110 rem8u#25 y#18 n#20 score#38 conio_cursor_x conio_cursor_y gotoxy::$9 ] { } ) always clobbers reg byte a +Statement [313] gotoxy::line_offset#0 = gotoxy::$9 << 3 [ conio_cursor_x conio_cursor_y gotoxy::line_offset#0 ] ( gotoxy:17 [ conio_cursor_x conio_cursor_y gotoxy::line_offset#0 ] { { gotoxy::y#2 = gotoxy::y#4 conio_c64_init::line#2 } } conio_c64_init:8::gotoxy:17 [ conio_cursor_x conio_cursor_y gotoxy::line_offset#0 ] { { gotoxy::y#2 = gotoxy::y#4 conio_c64_init::line#2 } } main:10::clear_screen:27::gotoxy:325 [ rem8u#127 y#114 hiscore#110 n#109 conio_cursor_x conio_cursor_y gotoxy::line_offset#0 ] { } main:10::clear_screen:44::gotoxy:325 [ l rem8u#127 y#114 hiscore#110 n#109 conio_cursor_x conio_cursor_y gotoxy::line_offset#0 ] { } main:10::clear_screen:145::gotoxy:325 [ hiscore#110 rem8u#25 y#18 n#20 score#38 conio_cursor_x conio_cursor_y gotoxy::line_offset#0 ] { } ) always clobbers reg byte a +Statement [314] gotoxy::$5 = DEFAULT_SCREEN + gotoxy::line_offset#0 [ conio_cursor_x conio_cursor_y gotoxy::line_offset#0 gotoxy::$5 ] ( gotoxy:17 [ conio_cursor_x conio_cursor_y gotoxy::line_offset#0 gotoxy::$5 ] { { gotoxy::y#2 = gotoxy::y#4 conio_c64_init::line#2 } } conio_c64_init:8::gotoxy:17 [ conio_cursor_x conio_cursor_y gotoxy::line_offset#0 gotoxy::$5 ] { { gotoxy::y#2 = gotoxy::y#4 conio_c64_init::line#2 } } main:10::clear_screen:27::gotoxy:325 [ rem8u#127 y#114 hiscore#110 n#109 conio_cursor_x conio_cursor_y gotoxy::line_offset#0 gotoxy::$5 ] { } main:10::clear_screen:44::gotoxy:325 [ l rem8u#127 y#114 hiscore#110 n#109 conio_cursor_x conio_cursor_y gotoxy::line_offset#0 gotoxy::$5 ] { } main:10::clear_screen:145::gotoxy:325 [ hiscore#110 rem8u#25 y#18 n#20 score#38 conio_cursor_x conio_cursor_y gotoxy::line_offset#0 gotoxy::$5 ] { } ) always clobbers reg byte a +Statement [315] conio_line_text = gotoxy::$5 [ conio_cursor_x conio_cursor_y conio_line_text gotoxy::line_offset#0 ] ( gotoxy:17 [ conio_cursor_x conio_cursor_y conio_line_text gotoxy::line_offset#0 ] { { gotoxy::y#2 = gotoxy::y#4 conio_c64_init::line#2 } } conio_c64_init:8::gotoxy:17 [ conio_cursor_x conio_cursor_y conio_line_text gotoxy::line_offset#0 ] { { gotoxy::y#2 = gotoxy::y#4 conio_c64_init::line#2 } } main:10::clear_screen:27::gotoxy:325 [ rem8u#127 y#114 hiscore#110 n#109 conio_cursor_x conio_cursor_y conio_line_text gotoxy::line_offset#0 ] { } main:10::clear_screen:44::gotoxy:325 [ l rem8u#127 y#114 hiscore#110 n#109 conio_cursor_x conio_cursor_y conio_line_text gotoxy::line_offset#0 ] { } main:10::clear_screen:145::gotoxy:325 [ hiscore#110 rem8u#25 y#18 n#20 score#38 conio_cursor_x conio_cursor_y conio_line_text gotoxy::line_offset#0 ] { } ) always clobbers reg byte a +Statement [316] gotoxy::$6 = COLORRAM + gotoxy::line_offset#0 [ conio_cursor_x conio_cursor_y conio_line_text gotoxy::$6 ] ( gotoxy:17 [ conio_cursor_x conio_cursor_y conio_line_text gotoxy::$6 ] { { gotoxy::y#2 = gotoxy::y#4 conio_c64_init::line#2 } } conio_c64_init:8::gotoxy:17 [ conio_cursor_x conio_cursor_y conio_line_text gotoxy::$6 ] { { gotoxy::y#2 = gotoxy::y#4 conio_c64_init::line#2 } } main:10::clear_screen:27::gotoxy:325 [ rem8u#127 y#114 hiscore#110 n#109 conio_cursor_x conio_cursor_y conio_line_text gotoxy::$6 ] { } main:10::clear_screen:44::gotoxy:325 [ l rem8u#127 y#114 hiscore#110 n#109 conio_cursor_x conio_cursor_y conio_line_text gotoxy::$6 ] { } main:10::clear_screen:145::gotoxy:325 [ hiscore#110 rem8u#25 y#18 n#20 score#38 conio_cursor_x conio_cursor_y conio_line_text gotoxy::$6 ] { } ) always clobbers reg byte a +Statement [317] conio_line_color = gotoxy::$6 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] ( gotoxy:17 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { gotoxy::y#2 = gotoxy::y#4 conio_c64_init::line#2 } } conio_c64_init:8::gotoxy:17 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { gotoxy::y#2 = gotoxy::y#4 conio_c64_init::line#2 } } main:10::clear_screen:27::gotoxy:325 [ rem8u#127 y#114 hiscore#110 n#109 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { } main:10::clear_screen:44::gotoxy:325 [ l rem8u#127 y#114 hiscore#110 n#109 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { } main:10::clear_screen:145::gotoxy:325 [ hiscore#110 rem8u#25 y#18 n#20 score#38 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { } ) always clobbers reg byte a +Statement asm { ldapetscii jsr$ffd2 } always clobbers reg byte a reg byte x reg byte y +Removing always clobbered register reg byte x as potential for zp[1]:17 [ divr8u::rem#5 divr8u::rem#10 divr8u::rem#4 rem8u#48 rem8u#127 rem8u#25 divr8u::rem#11 divr8u::rem#6 divr8u::rem#0 divr8u::rem#1 divr8u::rem#2 ] +Removing always clobbered register reg byte x as potential for zp[1]:95 [ n#52 n#89 n#109 n#20 n#101 n#14 n#1 ] +Removing always clobbered register reg byte x as potential for zp[1]:162 [ j#16 j#5 ] +Removing always clobbered register reg byte y as potential for zp[1]:162 [ j#16 j#5 ] +Removing always clobbered register reg byte x as potential for zp[1]:161 [ j#13 j#3 ] +Removing always clobbered register reg byte y as potential for zp[1]:161 [ j#13 j#3 ] +Removing always clobbered register reg byte x as potential for zp[1]:94 [ j#11 j#2 ] +Removing always clobbered register reg byte y as potential for zp[1]:94 [ j#11 j#2 ] +Removing always clobbered register reg byte x as potential for zp[1]:169 [ k#101 k#1 ] +Removing always clobbered register reg byte y as potential for zp[1]:169 [ k#101 k#1 ] +Statement [323] if(z#2<$1fa) goto clear_screen::@2 [ clear_screen::n#5 z#2 ] ( main:10::clear_screen:27 [ rem8u#127 y#114 hiscore#110 n#109 clear_screen::n#5 z#2 ] { } main:10::clear_screen:44 [ l rem8u#127 y#114 hiscore#110 n#109 clear_screen::n#5 z#2 ] { } main:10::clear_screen:145 [ hiscore#110 rem8u#25 y#18 n#20 score#38 clear_screen::n#5 z#2 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:122 [ clear_screen::n#5 ] +Statement [326] chrout::petscii = home [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color chrout::petscii ] ( main:10::clear_screen:27 [ rem8u#127 y#114 hiscore#110 n#109 conio_cursor_x conio_cursor_y conio_line_text conio_line_color chrout::petscii ] { } main:10::clear_screen:44 [ l rem8u#127 y#114 hiscore#110 n#109 conio_cursor_x conio_cursor_y conio_line_text conio_line_color chrout::petscii ] { } main:10::clear_screen:145 [ hiscore#110 rem8u#25 y#18 n#20 score#38 conio_cursor_x conio_cursor_y conio_line_text conio_line_color chrout::petscii ] { } ) always clobbers reg byte a +Statement [329] clear_screen::$5 = $1e00 + z#2 [ clear_screen::n#5 z#2 clear_screen::$5 ] ( main:10::clear_screen:27 [ rem8u#127 y#114 hiscore#110 n#109 clear_screen::n#5 z#2 clear_screen::$5 ] { } main:10::clear_screen:44 [ l rem8u#127 y#114 hiscore#110 n#109 clear_screen::n#5 z#2 clear_screen::$5 ] { } main:10::clear_screen:145 [ hiscore#110 rem8u#25 y#18 n#20 score#38 clear_screen::n#5 z#2 clear_screen::$5 ] { } ) always clobbers reg byte a +Statement [330] clear_screen::$4 = clear_screen::$5 + c [ clear_screen::n#5 z#2 clear_screen::$5 clear_screen::$4 ] ( main:10::clear_screen:27 [ rem8u#127 y#114 hiscore#110 n#109 clear_screen::n#5 z#2 clear_screen::$5 clear_screen::$4 ] { } main:10::clear_screen:44 [ l rem8u#127 y#114 hiscore#110 n#109 clear_screen::n#5 z#2 clear_screen::$5 clear_screen::$4 ] { } main:10::clear_screen:145 [ hiscore#110 rem8u#25 y#18 n#20 score#38 clear_screen::n#5 z#2 clear_screen::$5 clear_screen::$4 ] { } ) always clobbers reg byte a +Statement [331] *((char *)clear_screen::$4) = 0 [ clear_screen::n#5 z#2 clear_screen::$5 ] ( main:10::clear_screen:27 [ rem8u#127 y#114 hiscore#110 n#109 clear_screen::n#5 z#2 clear_screen::$5 ] { } main:10::clear_screen:44 [ l rem8u#127 y#114 hiscore#110 n#109 clear_screen::n#5 z#2 clear_screen::$5 ] { } main:10::clear_screen:145 [ hiscore#110 rem8u#25 y#18 n#20 score#38 clear_screen::n#5 z#2 clear_screen::$5 ] { } ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp[1]:122 [ clear_screen::n#5 ] +Statement [332] *((char *)clear_screen::$5) = clear_screen::n#5 [ clear_screen::n#5 z#2 ] ( main:10::clear_screen:27 [ rem8u#127 y#114 hiscore#110 n#109 clear_screen::n#5 z#2 ] { } main:10::clear_screen:44 [ l rem8u#127 y#114 hiscore#110 n#109 clear_screen::n#5 z#2 ] { } main:10::clear_screen:145 [ hiscore#110 rem8u#25 y#18 n#20 score#38 clear_screen::n#5 z#2 ] { } ) always clobbers reg byte a reg byte y +Statement [339] cputs::c#1 = *cputs::s#10 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor cputs::s#10 cputs::c#1 ] ( main:10::cputs:31 [ rem8u#127 y#114 hiscore#110 n#109 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor cputs::s#10 cputs::c#1 ] { } main:10::cputs:35 [ rem8u#127 y#114 hiscore#110 n#109 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor cputs::s#10 cputs::c#1 ] { } main:10::cputs:39 [ rem8u#127 y#114 hiscore#110 n#109 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor cputs::s#10 cputs::c#1 ] { } main:10::cputs:152 [ hiscore#110 rem8u#25 y#18 n#20 score#38 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor cputs::s#10 cputs::c#1 ] { } main:10::cputs:156 [ hiscore#110 rem8u#25 y#18 n#20 score#38 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor cputs::s#10 cputs::c#1 ] { } main:10::cputs:158 [ hiscore#110 rem8u#25 y#18 n#20 score#38 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor cputs::s#10 cputs::c#1 ] { } main:10::cputs:162 [ hiscore#110 rem8u#25 y#18 n#20 score#38 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor cputs::s#10 cputs::c#1 ] { } main:10::cputs:169 [ rem8u#25 y#18 n#20 hiscore#19 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor cputs::s#10 cputs::c#1 ] { } main:10::cputs:173 [ rem8u#25 y#18 n#20 hiscore#19 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor cputs::s#10 cputs::c#1 ] { } ) always clobbers reg byte a reg byte y +Statement [346] m = *((char *) 37140) [ m random::k#4 random::n#4 ] ( main:10::random:66 [ l rem8u#127 y#114 hiscore#110 n#89 z#28 m random::k#4 random::n#4 ] { { random::k#0 = random::k#4 } { random::n#0 = random::n#4 } } main:10::random:109 [ l hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 score#38 m random::k#4 random::n#4 ] { } main:10::random:111 [ l hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 duck#0 score#38 m random::k#4 random::n#4 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:8 [ random::n#4 random::n#0 ] +Statement [352] if(score#13<=$fde8) goto write_score::@15 [ score#13 ] ( main:10::write_score:87 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 score#13 ] { } main:10::write_score:128 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#13 ] { { score#13 = score#4 } } main:10::write_score:269 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 score#13 ] { { score#13 = score#6 } } ) always clobbers reg byte a +Statement [355] m = 0 [ m score#38 ] ( main:10::write_score:87 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 m score#38 ] { } main:10::write_score:128 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 m score#38 ] { { score#13 = score#4 } } main:10::write_score:269 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 m score#38 ] { { score#13 = score#6 } } ) always clobbers reg byte a +Statement [356] if(m<4) goto write_score::@6 [ m score#38 ] ( main:10::write_score:87 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 m score#38 ] { } main:10::write_score:128 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 m score#38 ] { { score#13 = score#4 } } main:10::write_score:269 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 m score#38 ] { { score#13 = score#6 } } ) always clobbers reg byte a +Statement [357] utoa::value#1 = score#38 [ score#38 utoa::value#1 ] ( main:10::write_score:87 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 utoa::value#1 ] { { utoa::value#1 = utoa::value#10 score#38 } } main:10::write_score:128 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#38 utoa::value#1 ] { { score#13 = score#4 } { utoa::value#1 = utoa::value#10 score#38 } } main:10::write_score:269 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 score#38 utoa::value#1 ] { { score#13 = score#6 } { utoa::value#1 = utoa::value#10 score#38 } } ) always clobbers reg byte a +Statement [359] if(score#38<9+1) goto write_score::@2 [ score#38 ] ( main:10::write_score:87 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 ] { } main:10::write_score:128 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#38 ] { { score#13 = score#4 } } main:10::write_score:269 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 score#38 ] { { score#13 = score#6 } } ) always clobbers reg byte a +Statement [360] *(points+2) = *buffer [ score#38 ] ( main:10::write_score:87 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 ] { } main:10::write_score:128 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#38 ] { { score#13 = score#4 } } main:10::write_score:269 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 score#38 ] { { score#13 = score#6 } } ) always clobbers reg byte a +Statement [361] *(points+3) = *(buffer+1) [ score#38 ] ( main:10::write_score:87 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 ] { } main:10::write_score:128 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#38 ] { { score#13 = score#4 } } main:10::write_score:269 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 score#38 ] { { score#13 = score#6 } } ) always clobbers reg byte a +Statement [362] if(score#38<$63+1) goto write_score::@3 [ score#38 ] ( main:10::write_score:87 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 ] { } main:10::write_score:128 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#38 ] { { score#13 = score#4 } } main:10::write_score:269 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 score#38 ] { { score#13 = score#6 } } ) always clobbers reg byte a +Statement [363] *(points+1) = *buffer [ score#38 ] ( main:10::write_score:87 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 ] { } main:10::write_score:128 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#38 ] { { score#13 = score#4 } } main:10::write_score:269 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 score#38 ] { { score#13 = score#6 } } ) always clobbers reg byte a +Statement [364] *(points+2) = *(buffer+1) [ score#38 ] ( main:10::write_score:87 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 ] { } main:10::write_score:128 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#38 ] { { score#13 = score#4 } } main:10::write_score:269 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 score#38 ] { { score#13 = score#6 } } ) always clobbers reg byte a +Statement [365] *(points+3) = *(buffer+2) [ score#38 ] ( main:10::write_score:87 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 ] { } main:10::write_score:128 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#38 ] { { score#13 = score#4 } } main:10::write_score:269 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 score#38 ] { { score#13 = score#6 } } ) always clobbers reg byte a +Statement [366] chrout::petscii = yellow [ chrout::petscii score#38 ] ( main:10::write_score:87 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 chrout::petscii score#38 ] { } main:10::write_score:128 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 chrout::petscii score#38 ] { { score#13 = score#4 } } main:10::write_score:269 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 chrout::petscii score#38 ] { { score#13 = score#6 } } ) always clobbers reg byte a +Statement [368] chrout::petscii = home [ chrout::petscii score#38 ] ( main:10::write_score:87 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 chrout::petscii score#38 ] { } main:10::write_score:128 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 chrout::petscii score#38 ] { { score#13 = score#4 } } main:10::write_score:269 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 chrout::petscii score#38 ] { { score#13 = score#6 } } ) always clobbers reg byte a +Statement [370] *((char *) 211) = 4 [ score#38 ] ( main:10::write_score:87 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 ] { } main:10::write_score:128 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#38 ] { { score#13 = score#4 } } main:10::write_score:269 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 score#38 ] { { score#13 = score#6 } } ) always clobbers reg byte a +Statement [371] m = 0 [ m score#38 ] ( main:10::write_score:87 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 m score#38 ] { } main:10::write_score:128 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 m score#38 ] { { score#13 = score#4 } } main:10::write_score:269 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 m score#38 ] { { score#13 = score#6 } } ) always clobbers reg byte a +Statement [372] if(m<4) goto write_score::@10 [ m score#38 ] ( main:10::write_score:87 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 m score#38 ] { } main:10::write_score:128 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 m score#38 ] { { score#13 = score#4 } } main:10::write_score:269 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 m score#38 ] { { score#13 = score#6 } } ) always clobbers reg byte a +Statement [374] chrout::petscii = points[m] [ m chrout::petscii score#38 ] ( main:10::write_score:87 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 m chrout::petscii score#38 ] { } main:10::write_score:128 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 m chrout::petscii score#38 ] { { score#13 = score#4 } } main:10::write_score:269 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 m chrout::petscii score#38 ] { { score#13 = score#6 } } ) always clobbers reg byte a reg byte y +Statement [377] points[m] = '0' [ m score#38 ] ( main:10::write_score:87 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 m score#38 ] { } main:10::write_score:128 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 m score#38 ] { { score#13 = score#4 } } main:10::write_score:269 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 m score#38 ] { { score#13 = score#6 } } ) always clobbers reg byte a reg byte y +Statement asm { lda#0 ldy#0 ldx#0 jsr$ffdb } always clobbers reg byte a reg byte x reg byte y +Statement [382] m = 0 [ m wait::n#6 z#53 ] ( main:10::wait:130 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 score#38 m wait::n#6 z#53 ] { { z#100 = z#53 } } main:10::wait:212 [ l hiscore#110 tu#13 peephole#12 duck#1 divr8u::rem#11 n#14 y#13 score#8 m wait::n#6 z#53 ] { { z#100 = z#53 } } main:10::wait:238 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 m wait::n#6 z#53 ] { { z#48 = z#53 } } main:10::wait:254 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 m wait::n#6 z#53 ] { { z#25 = z#53 } } main:10::wait:271 [ l hiscore#110 tu#13 peephole#12 duck#1 score#38 divr8u::rem#11 n#14 y#13 div16u8u::return#2 m wait::n#6 z#53 ] { { z#100 = z#53 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:44 [ wait::n#6 ] +Statement [387] if(z#23<$21c) goto wait::@3 [ m wait::n#6 z#23 ] ( main:10::wait:130 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 score#38 m wait::n#6 z#23 ] { { z#100 = z#53 } } main:10::wait:212 [ l hiscore#110 tu#13 peephole#12 duck#1 divr8u::rem#11 n#14 y#13 score#8 m wait::n#6 z#23 ] { { z#100 = z#53 } } main:10::wait:238 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 m wait::n#6 z#23 ] { { z#48 = z#53 } } main:10::wait:254 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 m wait::n#6 z#23 ] { { z#25 = z#53 } } main:10::wait:271 [ l hiscore#110 tu#13 peephole#12 duck#1 score#38 divr8u::rem#11 n#14 y#13 div16u8u::return#2 m wait::n#6 z#23 ] { { z#100 = z#53 } } ) always clobbers reg byte a +Statement [394] *utoa::buffer#10 = DIGITS[utoa::$11] [ utoa::buffer#10 ] ( main:10::utoa:167 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor rem8u#25 y#18 n#20 hiscore#19 utoa::buffer#10 ] { { utoa::value#10 = utoa::value#2 hiscore#19 } } main:10::write_score:87::utoa:358 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 utoa::buffer#10 ] { { utoa::value#1 = utoa::value#10 score#38 } } main:10::write_score:128::utoa:358 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#38 utoa::buffer#10 ] { { score#13 = score#4 } { utoa::value#1 = utoa::value#10 score#38 } } main:10::write_score:269::utoa:358 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 score#38 utoa::buffer#10 ] { { score#13 = score#6 } { utoa::value#1 = utoa::value#10 score#38 } } ) always clobbers reg byte a reg byte y +Statement [395] utoa::buffer#3 = ++ utoa::buffer#10 [ utoa::buffer#3 ] ( main:10::utoa:167 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor rem8u#25 y#18 n#20 hiscore#19 utoa::buffer#3 ] { { utoa::value#10 = utoa::value#2 hiscore#19 } } main:10::write_score:87::utoa:358 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 utoa::buffer#3 ] { { utoa::value#1 = utoa::value#10 score#38 } } main:10::write_score:128::utoa:358 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#38 utoa::buffer#3 ] { { score#13 = score#4 } { utoa::value#1 = utoa::value#10 score#38 } } main:10::write_score:269::utoa:358 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 score#38 utoa::buffer#3 ] { { score#13 = score#6 } { utoa::value#1 = utoa::value#10 score#38 } } ) always clobbers reg byte a +Statement [396] *utoa::buffer#3 = 0 [ ] ( main:10::utoa:167 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor rem8u#25 y#18 n#20 hiscore#19 ] { { utoa::value#10 = utoa::value#2 hiscore#19 } } main:10::write_score:87::utoa:358 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 ] { { utoa::value#1 = utoa::value#10 score#38 } } main:10::write_score:128::utoa:358 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#38 ] { { score#13 = score#4 } { utoa::value#1 = utoa::value#10 score#38 } } main:10::write_score:269::utoa:358 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 score#38 ] { { score#13 = score#6 } { utoa::value#1 = utoa::value#10 score#38 } } ) always clobbers reg byte a reg byte y +Statement [398] utoa::$10 = utoa::digit#2 << 1 [ utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::$10 ] ( main:10::utoa:167 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor rem8u#25 y#18 n#20 hiscore#19 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::$10 ] { { utoa::value#10 = utoa::value#2 hiscore#19 } } main:10::write_score:87::utoa:358 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::$10 ] { { utoa::value#1 = utoa::value#10 score#38 } } main:10::write_score:128::utoa:358 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#38 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::$10 ] { { score#13 = score#4 } { utoa::value#1 = utoa::value#10 score#38 } } main:10::write_score:269::utoa:358 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 score#38 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::$10 ] { { score#13 = score#6 } { utoa::value#1 = utoa::value#10 score#38 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:33 [ utoa::digit#2 utoa::digit#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:37 [ utoa::started#2 utoa::started#4 ] +Statement [399] utoa::digit_value#0 = RADIX_DECIMAL_VALUES[utoa::$10] [ utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] ( main:10::utoa:167 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor rem8u#25 y#18 n#20 hiscore#19 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { { utoa::value#10 = utoa::value#2 hiscore#19 } } main:10::write_score:87::utoa:358 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { { utoa::value#1 = utoa::value#10 score#38 } } main:10::write_score:128::utoa:358 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#38 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { { score#13 = score#4 } { utoa::value#1 = utoa::value#10 score#38 } } main:10::write_score:269::utoa:358 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 score#38 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { { score#13 = score#6 } { utoa::value#1 = utoa::value#10 score#38 } } ) always clobbers reg byte a +Statement [401] if(utoa::value#3>=utoa::digit_value#0) goto utoa::@5 [ utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] ( main:10::utoa:167 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor rem8u#25 y#18 n#20 hiscore#19 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { { utoa::value#10 = utoa::value#2 hiscore#19 } } main:10::write_score:87::utoa:358 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { { utoa::value#1 = utoa::value#10 score#38 } } main:10::write_score:128::utoa:358 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#38 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { { score#13 = score#4 } { utoa::value#1 = utoa::value#10 score#38 } } main:10::write_score:269::utoa:358 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 score#38 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { { score#13 = score#6 } { utoa::value#1 = utoa::value#10 score#38 } } ) always clobbers reg byte a +Statement [404] utoa_append::buffer#0 = utoa::buffer#10 [ utoa::digit#2 utoa::value#3 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 ] ( main:10::utoa:167 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor rem8u#25 y#18 n#20 hiscore#19 utoa::digit#2 utoa::value#3 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 ] { { utoa::value#10 = utoa::value#2 hiscore#19 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:10::write_score:87::utoa:358 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 utoa::digit#2 utoa::value#3 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 ] { { utoa::value#1 = utoa::value#10 score#38 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:10::write_score:128::utoa:358 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#38 utoa::digit#2 utoa::value#3 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 ] { { score#13 = score#4 } { utoa::value#1 = utoa::value#10 score#38 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:10::write_score:269::utoa:358 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 score#38 utoa::digit#2 utoa::value#3 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 ] { { score#13 = score#6 } { utoa::value#1 = utoa::value#10 score#38 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [405] utoa_append::value#0 = utoa::value#3 [ utoa::digit#2 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] ( main:10::utoa:167 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor rem8u#25 y#18 n#20 hiscore#19 utoa::digit#2 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] { { utoa::value#10 = utoa::value#2 hiscore#19 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:10::write_score:87::utoa:358 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 utoa::digit#2 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] { { utoa::value#1 = utoa::value#10 score#38 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:10::write_score:128::utoa:358 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#38 utoa::digit#2 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] { { score#13 = score#4 } { utoa::value#1 = utoa::value#10 score#38 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:10::write_score:269::utoa:358 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 score#38 utoa::digit#2 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] { { score#13 = score#6 } { utoa::value#1 = utoa::value#10 score#38 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [406] utoa_append::sub#0 = utoa::digit_value#0 [ utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] ( main:10::utoa:167 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor rem8u#25 y#18 n#20 hiscore#19 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] { { utoa::value#10 = utoa::value#2 hiscore#19 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:10::write_score:87::utoa:358 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] { { utoa::value#1 = utoa::value#10 score#38 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:10::write_score:128::utoa:358 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#38 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] { { score#13 = score#4 } { utoa::value#1 = utoa::value#10 score#38 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:10::write_score:269::utoa:358 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 score#38 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] { { score#13 = score#6 } { utoa::value#1 = utoa::value#10 score#38 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [408] utoa_append::return#0 = utoa_append::value#2 [ utoa::digit#2 utoa::buffer#10 utoa_append::return#0 ] ( main:10::utoa:167 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor rem8u#25 y#18 n#20 hiscore#19 utoa::digit#2 utoa::buffer#10 utoa_append::return#0 ] { { utoa::value#10 = utoa::value#2 hiscore#19 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:10::write_score:87::utoa:358 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 utoa::digit#2 utoa::buffer#10 utoa_append::return#0 ] { { utoa::value#1 = utoa::value#10 score#38 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:10::write_score:128::utoa:358 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#38 utoa::digit#2 utoa::buffer#10 utoa_append::return#0 ] { { score#13 = score#4 } { utoa::value#1 = utoa::value#10 score#38 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:10::write_score:269::utoa:358 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 score#38 utoa::digit#2 utoa::buffer#10 utoa_append::return#0 ] { { score#13 = score#6 } { utoa::value#1 = utoa::value#10 score#38 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [409] utoa::value#0 = utoa_append::return#0 [ utoa::digit#2 utoa::buffer#10 utoa::value#0 ] ( main:10::utoa:167 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor rem8u#25 y#18 n#20 hiscore#19 utoa::digit#2 utoa::buffer#10 utoa::value#0 ] { { utoa::value#10 = utoa::value#2 hiscore#19 } } main:10::write_score:87::utoa:358 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 utoa::digit#2 utoa::buffer#10 utoa::value#0 ] { { utoa::value#1 = utoa::value#10 score#38 } } main:10::write_score:128::utoa:358 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#38 utoa::digit#2 utoa::buffer#10 utoa::value#0 ] { { score#13 = score#4 } { utoa::value#1 = utoa::value#10 score#38 } } main:10::write_score:269::utoa:358 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 score#38 utoa::digit#2 utoa::buffer#10 utoa::value#0 ] { { score#13 = score#6 } { utoa::value#1 = utoa::value#10 score#38 } } ) always clobbers reg byte a +Statement asm { jsr$ffde stal stxm } always clobbers reg byte a reg byte x reg byte y +Statement [412] read_chrono::$0 = m << 8 [ l read_chrono::$0 ] ( main:10::read_chrono:182 [ hiscore#110 y#18 tu#13 peephole#12 duck#1 score#19 z#100 l read_chrono::$0 ] { { div16u8u::return#0 = div16u8u::return#2 } } ) always clobbers reg byte a +Statement [413] div16u8u::dividend#0 = read_chrono::$0 + l [ l div16u8u::dividend#0 ] ( main:10::read_chrono:182 [ hiscore#110 y#18 tu#13 peephole#12 duck#1 score#19 z#100 l div16u8u::dividend#0 ] { { div16u8u::return#0 = div16u8u::return#2 } } ) always clobbers reg byte a +Statement [415] div16u8u::return#2 = div16u8u::return#0 [ l divr8u::rem#11 div16u8u::return#2 ] ( main:10::read_chrono:182 [ hiscore#110 y#18 tu#13 peephole#12 duck#1 score#19 z#100 l divr8u::rem#11 div16u8u::return#2 ] { { div16u8u::return#0 = div16u8u::return#2 } } ) always clobbers reg byte a +Statement [416] *((char *)$1e15+c) = 7 [ l divr8u::rem#11 div16u8u::return#2 ] ( main:10::read_chrono:182 [ hiscore#110 y#18 tu#13 peephole#12 duck#1 score#19 z#100 l divr8u::rem#11 div16u8u::return#2 ] { } ) always clobbers reg byte a +Statement [417] *((char *) 7701) = $b9 [ l divr8u::rem#11 div16u8u::return#2 ] ( main:10::read_chrono:182 [ hiscore#110 y#18 tu#13 peephole#12 duck#1 score#19 z#100 l divr8u::rem#11 div16u8u::return#2 ] { } ) always clobbers reg byte a +Statement [418] if(div16u8u::return#2>=$a) goto read_chrono::@return [ l divr8u::rem#11 div16u8u::return#2 ] ( main:10::read_chrono:182 [ hiscore#110 y#18 tu#13 peephole#12 duck#1 score#19 z#100 l divr8u::rem#11 div16u8u::return#2 ] { } ) always clobbers reg byte a +Statement [419] read_chrono::$5 = $b9 - div16u8u::return#2 [ l divr8u::rem#11 div16u8u::return#2 read_chrono::$5 ] ( main:10::read_chrono:182 [ hiscore#110 y#18 tu#13 peephole#12 duck#1 score#19 z#100 l divr8u::rem#11 div16u8u::return#2 read_chrono::$5 ] { } ) always clobbers reg byte a +Statement [420] *((char *) 7701) = read_chrono::$5 [ l divr8u::rem#11 div16u8u::return#2 ] ( main:10::read_chrono:182 [ hiscore#110 y#18 tu#13 peephole#12 duck#1 score#19 z#100 l divr8u::rem#11 div16u8u::return#2 ] { } ) always clobbers reg byte a +Statement [423] conio_line_text[conio_cursor_x] = cputc::c#0 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] ( main:10::cputs:31::cputc:344 [ rem8u#127 y#114 hiscore#110 n#109 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:35::cputc:344 [ rem8u#127 y#114 hiscore#110 n#109 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:39::cputc:344 [ rem8u#127 y#114 hiscore#110 n#109 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:152::cputc:344 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:156::cputc:344 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:158::cputc:344 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:162::cputc:344 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:169::cputc:344 [ rem8u#25 y#18 n#20 hiscore#19 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:173::cputc:344 [ rem8u#25 y#18 n#20 hiscore#19 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } ) always clobbers reg byte y +Statement [424] conio_line_color[conio_cursor_x] = conio_textcolor [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] ( main:10::cputs:31::cputc:344 [ rem8u#127 y#114 hiscore#110 n#109 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:35::cputc:344 [ rem8u#127 y#114 hiscore#110 n#109 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:39::cputc:344 [ rem8u#127 y#114 hiscore#110 n#109 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:152::cputc:344 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:156::cputc:344 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:158::cputc:344 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:162::cputc:344 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:169::cputc:344 [ rem8u#25 y#18 n#20 hiscore#19 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:173::cputc:344 [ rem8u#25 y#18 n#20 hiscore#19 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } ) always clobbers reg byte a reg byte y +Statement [426] if(conio_cursor_x!=$28) goto cputc::@return [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] ( main:10::cputs:31::cputc:344 [ rem8u#127 y#114 hiscore#110 n#109 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:35::cputc:344 [ rem8u#127 y#114 hiscore#110 n#109 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:39::cputc:344 [ rem8u#127 y#114 hiscore#110 n#109 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:152::cputc:344 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:156::cputc:344 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:158::cputc:344 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:162::cputc:344 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:169::cputc:344 [ rem8u#25 y#18 n#20 hiscore#19 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:173::cputc:344 [ rem8u#25 y#18 n#20 hiscore#19 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } ) always clobbers reg byte a +Statement [434] if(utoa_append::value#2>=utoa_append::sub#0) goto utoa_append::@2 [ utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] ( main:10::utoa:167::utoa_append:407 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor rem8u#25 y#18 n#20 hiscore#19 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] { { utoa::value#10 = utoa::value#2 hiscore#19 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:10::write_score:87::utoa:358::utoa_append:407 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] { { utoa::value#1 = utoa::value#10 score#38 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:10::write_score:128::utoa:358::utoa_append:407 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#38 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] { { score#13 = score#4 } { utoa::value#1 = utoa::value#10 score#38 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:10::write_score:269::utoa:358::utoa_append:407 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 score#38 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] { { score#13 = score#6 } { utoa::value#1 = utoa::value#10 score#38 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:7 [ utoa_append::digit#2 utoa_append::digit#1 ] +Statement [435] *utoa_append::buffer#0 = DIGITS[utoa_append::digit#2] [ utoa_append::value#2 ] ( main:10::utoa:167::utoa_append:407 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor rem8u#25 y#18 n#20 hiscore#19 utoa::digit#2 utoa::buffer#10 utoa_append::value#2 ] { { utoa::value#10 = utoa::value#2 hiscore#19 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:10::write_score:87::utoa:358::utoa_append:407 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 utoa::digit#2 utoa::buffer#10 utoa_append::value#2 ] { { utoa::value#1 = utoa::value#10 score#38 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:10::write_score:128::utoa:358::utoa_append:407 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#38 utoa::digit#2 utoa::buffer#10 utoa_append::value#2 ] { { score#13 = score#4 } { utoa::value#1 = utoa::value#10 score#38 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:10::write_score:269::utoa:358::utoa_append:407 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 score#38 utoa::digit#2 utoa::buffer#10 utoa_append::value#2 ] { { score#13 = score#6 } { utoa::value#1 = utoa::value#10 score#38 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte y as potential for zp[1]:33 [ utoa::digit#2 utoa::digit#1 ] +Statement [438] utoa_append::value#1 = utoa_append::value#2 - utoa_append::sub#0 [ utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] ( main:10::utoa:167::utoa_append:407 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor rem8u#25 y#18 n#20 hiscore#19 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] { { utoa::value#10 = utoa::value#2 hiscore#19 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:10::write_score:87::utoa:358::utoa_append:407 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] { { utoa::value#1 = utoa::value#10 score#38 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:10::write_score:128::utoa:358::utoa_append:407 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#38 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] { { score#13 = score#4 } { utoa::value#1 = utoa::value#10 score#38 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:10::write_score:269::utoa:358::utoa_append:407 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 score#38 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] { { score#13 = score#6 } { utoa::value#1 = utoa::value#10 score#38 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [450] conio_line_text = conio_line_text + $28 [ conio_cursor_y conio_line_text conio_line_color conio_textcolor ] ( main:10::cputs:31::cputc:344::cputln:428 [ rem8u#127 y#114 hiscore#110 n#109 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:35::cputc:344::cputln:428 [ rem8u#127 y#114 hiscore#110 n#109 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:39::cputc:344::cputln:428 [ rem8u#127 y#114 hiscore#110 n#109 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:152::cputc:344::cputln:428 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:156::cputc:344::cputln:428 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:158::cputc:344::cputln:428 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:162::cputc:344::cputln:428 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:169::cputc:344::cputln:428 [ rem8u#25 y#18 n#20 hiscore#19 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:173::cputc:344::cputln:428 [ rem8u#25 y#18 n#20 hiscore#19 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:31::cputc:344::cputln:431 [ rem8u#127 y#114 hiscore#110 n#109 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:35::cputc:344::cputln:431 [ rem8u#127 y#114 hiscore#110 n#109 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:39::cputc:344::cputln:431 [ rem8u#127 y#114 hiscore#110 n#109 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:152::cputc:344::cputln:431 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:156::cputc:344::cputln:431 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:158::cputc:344::cputln:431 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:162::cputc:344::cputln:431 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:169::cputc:344::cputln:431 [ rem8u#25 y#18 n#20 hiscore#19 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:173::cputc:344::cputln:431 [ rem8u#25 y#18 n#20 hiscore#19 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } ) always clobbers reg byte a +Statement [451] conio_line_color = conio_line_color + $28 [ conio_cursor_y conio_line_text conio_line_color conio_textcolor ] ( main:10::cputs:31::cputc:344::cputln:428 [ rem8u#127 y#114 hiscore#110 n#109 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:35::cputc:344::cputln:428 [ rem8u#127 y#114 hiscore#110 n#109 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:39::cputc:344::cputln:428 [ rem8u#127 y#114 hiscore#110 n#109 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:152::cputc:344::cputln:428 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:156::cputc:344::cputln:428 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:158::cputc:344::cputln:428 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:162::cputc:344::cputln:428 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:169::cputc:344::cputln:428 [ rem8u#25 y#18 n#20 hiscore#19 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:173::cputc:344::cputln:428 [ rem8u#25 y#18 n#20 hiscore#19 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:31::cputc:344::cputln:431 [ rem8u#127 y#114 hiscore#110 n#109 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:35::cputc:344::cputln:431 [ rem8u#127 y#114 hiscore#110 n#109 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:39::cputc:344::cputln:431 [ rem8u#127 y#114 hiscore#110 n#109 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:152::cputc:344::cputln:431 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:156::cputc:344::cputln:431 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:158::cputc:344::cputln:431 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:162::cputc:344::cputln:431 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:169::cputc:344::cputln:431 [ rem8u#25 y#18 n#20 hiscore#19 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:173::cputc:344::cputln:431 [ rem8u#25 y#18 n#20 hiscore#19 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } ) always clobbers reg byte a +Statement [452] conio_cursor_x = 0 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] ( main:10::cputs:31::cputc:344::cputln:428 [ rem8u#127 y#114 hiscore#110 n#109 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:35::cputc:344::cputln:428 [ rem8u#127 y#114 hiscore#110 n#109 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:39::cputc:344::cputln:428 [ rem8u#127 y#114 hiscore#110 n#109 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:152::cputc:344::cputln:428 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:156::cputc:344::cputln:428 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:158::cputc:344::cputln:428 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:162::cputc:344::cputln:428 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:169::cputc:344::cputln:428 [ rem8u#25 y#18 n#20 hiscore#19 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:173::cputc:344::cputln:428 [ rem8u#25 y#18 n#20 hiscore#19 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:31::cputc:344::cputln:431 [ rem8u#127 y#114 hiscore#110 n#109 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:35::cputc:344::cputln:431 [ rem8u#127 y#114 hiscore#110 n#109 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:39::cputc:344::cputln:431 [ rem8u#127 y#114 hiscore#110 n#109 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:152::cputc:344::cputln:431 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:156::cputc:344::cputln:431 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:158::cputc:344::cputln:431 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:162::cputc:344::cputln:431 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:169::cputc:344::cputln:431 [ rem8u#25 y#18 n#20 hiscore#19 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:173::cputc:344::cputln:431 [ rem8u#25 y#18 n#20 hiscore#19 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } ) always clobbers reg byte a +Statement [461] divr8u::rem#1 = divr8u::rem#0 | 1 [ divr8u::dividend#3 divr8u::quotient#3 divr8u::i#2 divr8u::rem#1 ] ( main:10::read_chrono:182::div16u8u:414::divr8u:440 [ hiscore#110 y#18 tu#13 peephole#12 duck#1 score#19 z#100 l div16u8u::dividend#0 divr8u::dividend#3 divr8u::quotient#3 divr8u::i#2 divr8u::rem#1 ] { { div16u8u::return#0 = div16u8u::return#2 } { divr8u::dividend#1 = divr8u::dividend#5 } { divr8u::return#0 = divr8u::return#2 } } main:10::read_chrono:182::div16u8u:414::divr8u:445 [ hiscore#110 y#18 tu#13 peephole#12 duck#1 score#19 z#100 l div16u8u::quotient_hi#0 divr8u::dividend#3 divr8u::quotient#3 divr8u::i#2 divr8u::rem#1 ] { { div16u8u::return#0 = div16u8u::return#2 } { divr8u::rem#10 = divr8u::rem#4 divr8u::rem#11 } { divr8u::dividend#2 = divr8u::dividend#5 } { divr8u::return#0 = divr8u::return#3 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:26 [ divr8u::dividend#3 divr8u::dividend#5 divr8u::dividend#1 divr8u::dividend#2 divr8u::dividend#0 ] +Removing always clobbered register reg byte a as potential for zp[1]:18 [ divr8u::quotient#3 divr8u::return#0 divr8u::quotient#1 divr8u::quotient#2 ] +Removing always clobbered register reg byte a as potential for zp[1]:22 [ divr8u::i#2 divr8u::i#1 ] +Removing always clobbered register reg byte a as potential for zp[1]:73 [ div16u8u::quotient_hi#0 ] +Statement [465] if(divr8u::rem#6=5+1) goto main::@4 [ l rem8u#127 y#114 hiscore#110 n#109 ] ( main:10 [ l rem8u#127 y#114 hiscore#110 n#109 ] { } ) always clobbers reg byte a +Statement [45] *((char *) 36869) = $ff [ l rem8u#127 y#114 hiscore#110 n#109 ] ( main:10 [ l rem8u#127 y#114 hiscore#110 n#109 ] { } ) always clobbers reg byte a +Statement [46] chrout::petscii = reverse_on [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#109 ] ( main:10 [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#109 ] { } ) always clobbers reg byte a +Statement [48] chrout::petscii = red [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#109 ] ( main:10 [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#109 ] { } ) always clobbers reg byte a +Statement [50] chrout::petscii = down [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#109 ] ( main:10 [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#109 ] { } ) always clobbers reg byte a +Statement [53] if(k#101<$16) goto main::@7 [ l rem8u#127 y#114 hiscore#110 k#101 n#89 ] ( main:10 [ l rem8u#127 y#114 hiscore#110 k#101 n#89 ] { } ) always clobbers reg byte a +Statement [54] chrout::petscii = brick [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#89 ] ( main:10 [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#89 ] { } ) always clobbers reg byte a +Statement [56] *((char *) 8185) = brick [ l rem8u#127 y#114 hiscore#110 n#89 ] ( main:10 [ l rem8u#127 y#114 hiscore#110 n#89 ] { } ) always clobbers reg byte a +Statement [57] *((char *)$1ff9+c) = 2 [ l rem8u#127 y#114 hiscore#110 n#89 ] ( main:10 [ l rem8u#127 y#114 hiscore#110 n#89 ] { } ) always clobbers reg byte a +Statement [58] chrout::petscii = home [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#89 ] ( main:10 [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#89 ] { } ) always clobbers reg byte a +Statement [60] if(l<1+1) goto main::@12 [ l rem8u#127 y#114 hiscore#110 n#89 ] ( main:10 [ l rem8u#127 y#114 hiscore#110 n#89 ] { } ) always clobbers reg byte a +Statement [62] random::k#0 = 7 - l [ l rem8u#127 y#114 hiscore#110 n#89 z#28 random::k#0 ] ( main:10 [ l rem8u#127 y#114 hiscore#110 n#89 z#28 random::k#0 ] { { random::k#0 = random::k#4 } { random::n#0 = random::n#4 } } ) always clobbers reg byte a +Statement [63] main::$177 = l << 1 [ l rem8u#127 y#114 hiscore#110 n#89 z#28 random::k#0 main::$177 ] ( main:10 [ l rem8u#127 y#114 hiscore#110 n#89 z#28 random::k#0 main::$177 ] { { random::k#0 = random::k#4 } { random::n#0 = random::n#4 } } ) always clobbers reg byte a +Statement [64] main::$26 = main::$177 + l [ l rem8u#127 y#114 hiscore#110 n#89 z#28 random::k#0 main::$26 ] ( main:10 [ l rem8u#127 y#114 hiscore#110 n#89 z#28 random::k#0 main::$26 ] { { random::k#0 = random::k#4 } { random::n#0 = random::n#4 } } ) always clobbers reg byte a +Statement [65] random::n#0 = $1a - main::$26 [ l rem8u#127 y#114 hiscore#110 n#89 z#28 random::k#0 random::n#0 ] ( main:10 [ l rem8u#127 y#114 hiscore#110 n#89 z#28 random::k#0 random::n#0 ] { { random::k#0 = random::k#4 } { random::n#0 = random::n#4 } } ) always clobbers reg byte a +Statement [67] main::$29 = z#28 + m [ l m rem8u#127 y#114 hiscore#110 n#89 z#28 main::$29 ] ( main:10 [ l m rem8u#127 y#114 hiscore#110 n#89 z#28 main::$29 ] { } ) always clobbers reg byte a +Statement [68] if(main::$29<=$1f9) goto main::@14 [ l m rem8u#127 y#114 hiscore#110 n#89 z#28 ] ( main:10 [ l m rem8u#127 y#114 hiscore#110 n#89 z#28 ] { } ) always clobbers reg byte a +Statement [70] *((char *) 36878) = $f [ l rem8u#127 y#114 hiscore#110 n#89 z#128 ] ( main:10 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 ] { } ) always clobbers reg byte a +Statement [71] chrout::petscii = home [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#89 z#128 ] ( main:10 [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#89 z#128 ] { } ) always clobbers reg byte a +Statement [73] chrout::petscii = yellow [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#89 z#128 ] ( main:10 [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#89 z#128 ] { } ) always clobbers reg byte a +Statement [75] chrout::petscii = $50 [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#89 z#128 ] ( main:10 [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#89 z#128 ] { } ) always clobbers reg byte a +Statement [77] chrout::petscii = $54 [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#89 z#128 ] ( main:10 [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#89 z#128 ] { } ) always clobbers reg byte a +Statement [79] chrout::petscii = $53 [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#89 z#128 ] ( main:10 [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#89 z#128 ] { } ) always clobbers reg byte a +Statement [81] chrout::petscii = $3a [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#89 z#128 ] ( main:10 [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#89 z#128 ] { } ) always clobbers reg byte a +Statement [83] *((char *) 211) = $12 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 ] ( main:10 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 ] { } ) always clobbers reg byte a +Statement [85] if(j#13<4) goto main::@18 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 j#13 ] ( main:10 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 j#13 ] { } ) always clobbers reg byte a +Statement [88] chrout::petscii = home [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 ] ( main:10 [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 ] { } ) always clobbers reg byte a +Statement [90] chrout::petscii = green [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 ] ( main:10 [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 ] { } ) always clobbers reg byte a +Statement [92] *((char *) 211) = $a [ l rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 ] ( main:10 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 ] { } ) always clobbers reg byte a +Statement [94] if(j#16<5) goto main::@21 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 j#16 score#38 ] ( main:10 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 j#16 score#38 ] { } ) always clobbers reg byte a +Statement [96] chrout::petscii = home [ l chrout::petscii hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 score#38 ] ( main:10 [ l chrout::petscii hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 score#38 ] { } ) always clobbers reg byte a +Statement [98] chrout::petscii = green [ l chrout::petscii hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 score#38 ] ( main:10 [ l chrout::petscii hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 score#38 ] { } ) always clobbers reg byte a +Statement [100] chrout::petscii = reverse_on [ l chrout::petscii hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 score#38 ] ( main:10 [ l chrout::petscii hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 score#38 ] { } ) always clobbers reg byte a +Statement [102] *((char *) 211) = $f [ l hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 score#38 ] ( main:10 [ l hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 score#38 ] { } ) always clobbers reg byte a +Statement [103] if(tu#13<$a) goto main::@23 [ l hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 score#38 ] ( main:10 [ l hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 score#38 ] { } ) always clobbers reg byte a +Statement [104] chrout::petscii = $31 [ l chrout::petscii hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 score#38 ] ( main:10 [ l chrout::petscii hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 score#38 ] { } ) always clobbers reg byte a +Statement [106] chrout::petscii = $30 [ l chrout::petscii hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 score#38 ] ( main:10 [ l chrout::petscii hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 score#38 ] { } ) always clobbers reg byte a +Statement [110] duck#0 = m [ l hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 duck#0 score#38 ] ( main:10 [ l hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 duck#0 score#38 ] { } ) always clobbers reg byte a +Statement [112] main::$61 = m + $1e15 [ l m hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 duck#0 main::$61 score#38 ] ( main:10 [ l m hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 duck#0 main::$61 score#38 ] { } ) always clobbers reg byte a +Statement [113] duck#1 = main::$61 + duck#0 [ l m hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 duck#1 score#38 ] ( main:10 [ l m hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 duck#1 score#38 ] { } ) always clobbers reg byte a +Statement [114] main::$66 = duck#1 + 1 [ l m hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 duck#1 main::$66 score#38 ] ( main:10 [ l m hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 duck#1 main::$66 score#38 ] { } ) always clobbers reg byte a +Statement [115] main::$69 = duck#1 + $16 [ l m hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 duck#1 main::$66 main::$69 score#38 ] ( main:10 [ l m hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 duck#1 main::$66 main::$69 score#38 ] { } ) always clobbers reg byte a +Statement [116] main::$72 = duck#1 + $17 [ l m hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 duck#1 main::$66 main::$69 main::$72 score#38 ] ( main:10 [ l m hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 duck#1 main::$66 main::$69 main::$72 score#38 ] { } ) always clobbers reg byte a +Statement [117] if(duck#1>$1fe3) goto main::@24 [ l m hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 duck#1 main::$66 main::$69 main::$72 score#38 ] ( main:10 [ l m hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 duck#1 main::$66 main::$69 main::$72 score#38 ] { } ) always clobbers reg byte a +Statement [118] if(*((char *)duck#1)==brick) goto main::@24 [ l m hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 duck#1 main::$66 main::$69 main::$72 score#38 ] ( main:10 [ l m hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 duck#1 main::$66 main::$69 main::$72 score#38 ] { } ) always clobbers reg byte a reg byte y +Statement [119] if(*((char *)main::$66)==brick) goto main::@24 [ l m hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 duck#1 main::$69 main::$72 score#38 ] ( main:10 [ l m hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 duck#1 main::$69 main::$72 score#38 ] { } ) always clobbers reg byte a reg byte y +Statement [120] if(*((char *)main::$69)==brick) goto main::@24 [ l m hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 duck#1 main::$72 score#38 ] ( main:10 [ l m hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 duck#1 main::$72 score#38 ] { } ) always clobbers reg byte a reg byte y +Statement [121] if(*((char *)main::$72)==brick) goto main::@24 [ l m hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 duck#1 score#38 ] ( main:10 [ l m hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 duck#1 score#38 ] { } ) always clobbers reg byte a reg byte y +Statement [125] if(time#11<$a) goto main::@27 [ l m hiscore#110 rem8u#25 y#18 n#20 tu#13 peephole#12 duck#1 score#19 z#100 ] ( main:10 [ l m hiscore#110 rem8u#25 y#18 n#20 tu#13 peephole#12 duck#1 score#19 z#100 ] { } ) always clobbers reg byte a +Statement [127] score#4 = score#19 - $a [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#4 ] ( main:10 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#4 ] { { score#13 = score#4 } } ) always clobbers reg byte a +Statement [129] *((char *) 36877) = $82 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#38 ] ( main:10 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#38 ] { { z#100 = z#53 } } ) always clobbers reg byte a +Statement [131] *((char *) 36877) = 0 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 z#25 peephole#12 duck#1 score#38 ] ( main:10 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 z#25 peephole#12 duck#1 score#38 ] { } ) always clobbers reg byte a +Statement [132] main::$150 = duck#1 + c [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 z#25 peephole#12 duck#1 score#38 main::$150 ] ( main:10 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 z#25 peephole#12 duck#1 score#38 main::$150 ] { } ) always clobbers reg byte a +Statement [133] *((char *)main::$150) = 0 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 z#25 peephole#12 duck#1 score#38 ] ( main:10 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 z#25 peephole#12 duck#1 score#38 ] { } ) always clobbers reg byte a reg byte y +Statement [134] main::$151 = duck#1 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 z#25 peephole#12 duck#1 score#38 main::$151 ] ( main:10 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 z#25 peephole#12 duck#1 score#38 main::$151 ] { } ) always clobbers reg byte a +Statement [135] main::$152 = main::$151 + 1+c [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 z#25 peephole#12 duck#1 score#38 main::$152 ] ( main:10 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 z#25 peephole#12 duck#1 score#38 main::$152 ] { } ) always clobbers reg byte a +Statement [136] *((char *)main::$152) = 0 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 z#25 peephole#12 duck#1 score#38 ] ( main:10 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 z#25 peephole#12 duck#1 score#38 ] { } ) always clobbers reg byte a reg byte y +Statement [137] main::$153 = duck#1 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 z#25 peephole#12 duck#1 score#38 main::$153 ] ( main:10 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 z#25 peephole#12 duck#1 score#38 main::$153 ] { } ) always clobbers reg byte a +Statement [138] main::$154 = main::$153 + $16+c [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 z#25 peephole#12 duck#1 score#38 main::$154 ] ( main:10 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 z#25 peephole#12 duck#1 score#38 main::$154 ] { } ) always clobbers reg byte a +Statement [139] *((char *)main::$154) = 0 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 z#25 peephole#12 duck#1 score#38 ] ( main:10 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 z#25 peephole#12 duck#1 score#38 ] { } ) always clobbers reg byte a reg byte y +Statement [140] main::$155 = duck#1 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 z#25 peephole#12 score#38 main::$155 ] ( main:10 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 z#25 peephole#12 score#38 main::$155 ] { } ) always clobbers reg byte a +Statement [141] main::$156 = main::$155 + $17+c [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 z#25 peephole#12 score#38 main::$156 ] ( main:10 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 z#25 peephole#12 score#38 main::$156 ] { } ) always clobbers reg byte a +Statement [142] *((char *)main::$156) = 0 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 z#25 peephole#12 score#38 ] ( main:10 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 z#25 peephole#12 score#38 ] { } ) always clobbers reg byte a reg byte y +Statement [143] if(tu#1<$b) goto main::@22 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 z#25 peephole#12 score#38 ] ( main:10 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 z#25 peephole#12 score#38 ] { } ) always clobbers reg byte a +Statement [146] *((char *) 36869) = $f0 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color hiscore#110 rem8u#25 y#18 n#20 score#38 ] ( main:10 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color hiscore#110 rem8u#25 y#18 n#20 score#38 ] { } ) always clobbers reg byte a +Statement [147] chrout::petscii = lower [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color chrout::petscii hiscore#110 rem8u#25 y#18 n#20 score#38 ] ( main:10 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color chrout::petscii hiscore#110 rem8u#25 y#18 n#20 score#38 ] { } ) always clobbers reg byte a +Statement [163] if(score#38<=hiscore#110) goto main::@114 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor hiscore#110 rem8u#25 y#18 n#20 score#38 ] ( main:10 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor hiscore#110 rem8u#25 y#18 n#20 score#38 ] { } ) always clobbers reg byte a +Statement [164] hiscore#124 = hiscore#110 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor rem8u#25 y#18 n#20 hiscore#124 ] ( main:10 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor rem8u#25 y#18 n#20 hiscore#124 ] { } ) always clobbers reg byte a +Statement [166] utoa::value#2 = hiscore#19 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor rem8u#25 y#18 n#20 hiscore#19 utoa::value#2 ] ( main:10 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor rem8u#25 y#18 n#20 hiscore#19 utoa::value#2 ] { { utoa::value#10 = utoa::value#2 hiscore#19 } } ) always clobbers reg byte a +Statement asm { jsr$FD22 } always clobbers reg byte a reg byte x reg byte y +Statement [180] hiscore#123 = hiscore#19 [ rem8u#25 y#18 hiscore#123 n#20 ] ( main:10 [ rem8u#25 y#18 hiscore#123 n#20 ] { } ) always clobbers reg byte a +Statement [183] m = *((char *) 37151) [ l m hiscore#110 y#18 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 div16u8u::return#2 ] ( main:10 [ l m hiscore#110 y#18 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 div16u8u::return#2 ] { } ) always clobbers reg byte a +Statement [184] *((char *) 37154) = $7f [ l m hiscore#110 y#18 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 div16u8u::return#2 ] ( main:10 [ l m hiscore#110 y#18 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 div16u8u::return#2 ] { } ) always clobbers reg byte a +Statement [185] n#14 = *((char *) 37152) [ l m hiscore#110 y#18 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 div16u8u::return#2 ] ( main:10 [ l m hiscore#110 y#18 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 div16u8u::return#2 ] { } ) always clobbers reg byte a +Statement [186] *((char *) 37154) = $ff [ l m hiscore#110 y#18 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 div16u8u::return#2 ] ( main:10 [ l m hiscore#110 y#18 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 div16u8u::return#2 ] { } ) always clobbers reg byte a +Statement [187] main::$78 = $10 & m [ l m hiscore#110 y#18 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 main::$78 div16u8u::return#2 ] ( main:10 [ l m hiscore#110 y#18 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 main::$78 div16u8u::return#2 ] { } ) always clobbers reg byte a +Statement [189] y#0 = -- y#18 [ l m hiscore#110 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 y#0 div16u8u::return#2 ] ( main:10 [ l m hiscore#110 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 y#0 div16u8u::return#2 ] { } ) always clobbers reg byte a +Statement [191] main::$81 = $80 & n#14 [ l m hiscore#110 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 y#10 main::$81 div16u8u::return#2 ] ( main:10 [ l m hiscore#110 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 y#10 main::$81 div16u8u::return#2 ] { } ) always clobbers reg byte a +Statement [195] main::$84 = 4 & m [ l m hiscore#110 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 y#11 main::$84 div16u8u::return#2 ] ( main:10 [ l m hiscore#110 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 y#11 main::$84 div16u8u::return#2 ] { } ) always clobbers reg byte a +Statement [197] y#2 = y#11 - $16 [ l m hiscore#110 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 y#2 div16u8u::return#2 ] ( main:10 [ l m hiscore#110 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 y#2 div16u8u::return#2 ] { } ) always clobbers reg byte a +Statement [199] main::$88 = 8 & m [ l m hiscore#110 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 y#12 main::$88 div16u8u::return#2 ] ( main:10 [ l m hiscore#110 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 y#12 main::$88 div16u8u::return#2 ] { } ) always clobbers reg byte a +Statement [201] y#3 = y#12 + $16 [ l m hiscore#110 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 y#3 div16u8u::return#2 ] ( main:10 [ l m hiscore#110 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 y#3 div16u8u::return#2 ] { } ) always clobbers reg byte a +Statement [203] main::$92 = $20 & m [ l hiscore#110 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 y#13 main::$92 div16u8u::return#2 ] ( main:10 [ l hiscore#110 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 y#13 main::$92 div16u8u::return#2 ] { } ) always clobbers reg byte a +Statement [205] *((char *) 36877) = $82 [ l hiscore#110 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 ] ( main:10 [ l hiscore#110 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 ] { } ) always clobbers reg byte a +Statement [206] if(peephole#12!=duck#1) goto main::@34 [ l hiscore#110 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 ] ( main:10 [ l hiscore#110 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 ] { } ) always clobbers reg byte a +Statement [207] main::$96 = $c - div16u8u::return#2 [ l hiscore#110 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 y#13 main::$96 ] ( main:10 [ l hiscore#110 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 y#13 main::$96 ] { { z#100 = z#53 } } ) always clobbers reg byte a +Statement [208] main::$179 = main::$96 << 2 [ l hiscore#110 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 y#13 main::$96 main::$179 ] ( main:10 [ l hiscore#110 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 y#13 main::$96 main::$179 ] { { z#100 = z#53 } } ) always clobbers reg byte a +Statement [209] main::$180 = main::$179 + main::$96 [ l hiscore#110 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 y#13 main::$180 ] ( main:10 [ l hiscore#110 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 y#13 main::$180 ] { { z#100 = z#53 } } ) always clobbers reg byte a +Statement [210] main::$97 = main::$180 << 1 [ l hiscore#110 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 y#13 main::$97 ] ( main:10 [ l hiscore#110 tu#13 peephole#12 duck#1 score#19 z#100 divr8u::rem#11 n#14 y#13 main::$97 ] { { z#100 = z#53 } } ) always clobbers reg byte a +Statement [211] score#8 = score#19 + main::$97 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 score#8 ] ( main:10 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 score#8 ] { { z#100 = z#53 } } ) always clobbers reg byte a +Statement [214] *((char *) 36877) = 0 [ l hiscore#110 tu#13 z#25 peephole#12 duck#1 divr8u::rem#11 n#14 y#13 time#38 score#81 ] ( main:10 [ l hiscore#110 tu#13 z#25 peephole#12 duck#1 divr8u::rem#11 n#14 y#13 time#38 score#81 ] { } ) always clobbers reg byte a +Statement [216] main::$104 = y#13 + 1 [ l hiscore#110 tu#13 peephole#12 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 main::$104 ] ( main:10 [ l hiscore#110 tu#13 peephole#12 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 main::$104 ] { } ) always clobbers reg byte a +Statement [217] main::$107 = y#13 + $16 [ l hiscore#110 tu#13 peephole#12 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 main::$104 main::$107 ] ( main:10 [ l hiscore#110 tu#13 peephole#12 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 main::$104 main::$107 ] { } ) always clobbers reg byte a +Statement [218] main::$110 = y#13 + $17 [ l hiscore#110 tu#13 peephole#12 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 main::$104 main::$107 main::$110 ] ( main:10 [ l hiscore#110 tu#13 peephole#12 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 main::$104 main::$107 main::$110 ] { } ) always clobbers reg byte a +Statement [219] if(*((char *)y#13)==brick) goto main::@36 [ l hiscore#110 tu#13 peephole#12 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 main::$104 main::$107 main::$110 ] ( main:10 [ l hiscore#110 tu#13 peephole#12 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 main::$104 main::$107 main::$110 ] { } ) always clobbers reg byte a reg byte y +Statement [220] if(*((char *)main::$104)==brick) goto main::@36 [ l hiscore#110 tu#13 peephole#12 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 main::$107 main::$110 ] ( main:10 [ l hiscore#110 tu#13 peephole#12 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 main::$107 main::$110 ] { } ) always clobbers reg byte a reg byte y +Statement [221] if(*((char *)main::$107)!=brick) goto main::@109 [ l hiscore#110 tu#13 peephole#12 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 main::$110 ] ( main:10 [ l hiscore#110 tu#13 peephole#12 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 main::$110 ] { } ) always clobbers reg byte a reg byte y +Statement [223] *((char *)y#35) = $fd [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 ] ( main:10 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 ] { { z#48 = z#53 } } ) always clobbers reg byte a reg byte y +Statement [224] main::$125 = y#35 + c [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 main::$125 ] ( main:10 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 main::$125 ] { { z#48 = z#53 } } ) always clobbers reg byte a +Statement [225] *((char *)main::$125) = 1 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 ] ( main:10 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 ] { { z#48 = z#53 } } ) always clobbers reg byte a reg byte y +Statement [226] main::$127 = y#35 + 1 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 main::$127 ] ( main:10 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 main::$127 ] { { z#48 = z#53 } } ) always clobbers reg byte a +Statement [227] *((char *)main::$127) = $ed [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 main::$127 ] ( main:10 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 main::$127 ] { { z#48 = z#53 } } ) always clobbers reg byte a reg byte y +Statement [228] main::$128 = main::$127 + c [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 main::$128 ] ( main:10 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 main::$128 ] { { z#48 = z#53 } } ) always clobbers reg byte a +Statement [229] *((char *)main::$128) = 1 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 ] ( main:10 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 ] { { z#48 = z#53 } } ) always clobbers reg byte a reg byte y +Statement [230] main::$130 = y#35 + $16 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 main::$130 ] ( main:10 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 main::$130 ] { { z#48 = z#53 } } ) always clobbers reg byte a +Statement [231] *((char *)main::$130) = $ee [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 main::$130 ] ( main:10 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 main::$130 ] { { z#48 = z#53 } } ) always clobbers reg byte a reg byte y +Statement [232] main::$131 = main::$130 + c [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 main::$131 ] ( main:10 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 main::$131 ] { { z#48 = z#53 } } ) always clobbers reg byte a +Statement [233] *((char *)main::$131) = 1 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 ] ( main:10 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 ] { { z#48 = z#53 } } ) always clobbers reg byte a reg byte y +Statement [234] main::$133 = y#35 + $17 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 main::$133 ] ( main:10 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 main::$133 ] { { z#48 = z#53 } } ) always clobbers reg byte a +Statement [235] *((char *)main::$133) = $f0 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 main::$133 ] ( main:10 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 main::$133 ] { { z#48 = z#53 } } ) always clobbers reg byte a reg byte y +Statement [236] main::$134 = main::$133 + c [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 main::$134 ] ( main:10 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 main::$134 ] { { z#48 = z#53 } } ) always clobbers reg byte a +Statement [237] *((char *)main::$134) = 1 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 ] ( main:10 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 z#48 ] { { z#48 = z#53 } } ) always clobbers reg byte a reg byte y +Statement [239] *((char *)duck#1) = 0 [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 ] ( main:10 [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 ] { { z#25 = z#53 } } ) always clobbers reg byte a reg byte y +Statement [240] main::$136 = duck#1 + c [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 main::$136 ] ( main:10 [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 main::$136 ] { { z#25 = z#53 } } ) always clobbers reg byte a +Statement [241] *((char *)main::$136) = 7 [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 ] ( main:10 [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 ] { { z#25 = z#53 } } ) always clobbers reg byte a reg byte y +Statement [242] main::$138 = duck#1 + 1 [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 main::$138 ] ( main:10 [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 main::$138 ] { { z#25 = z#53 } } ) always clobbers reg byte a +Statement [243] *((char *)main::$138) = 1 [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 main::$138 ] ( main:10 [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 main::$138 ] { { z#25 = z#53 } } ) always clobbers reg byte a reg byte y +Statement [244] main::$139 = main::$138 + c [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 main::$139 ] ( main:10 [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 main::$139 ] { { z#25 = z#53 } } ) always clobbers reg byte a +Statement [245] *((char *)main::$139) = 7 [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 ] ( main:10 [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 ] { { z#25 = z#53 } } ) always clobbers reg byte a reg byte y +Statement [246] main::$141 = duck#1 + $16 [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 main::$141 ] ( main:10 [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 main::$141 ] { { z#25 = z#53 } } ) always clobbers reg byte a +Statement [247] *((char *)main::$141) = 2 [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 main::$141 ] ( main:10 [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 main::$141 ] { { z#25 = z#53 } } ) always clobbers reg byte a reg byte y +Statement [248] main::$142 = main::$141 + c [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 main::$142 ] ( main:10 [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 main::$142 ] { { z#25 = z#53 } } ) always clobbers reg byte a +Statement [249] *((char *)main::$142) = 7 [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 ] ( main:10 [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 ] { { z#25 = z#53 } } ) always clobbers reg byte a reg byte y +Statement [250] main::$144 = duck#1 + $17 [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 main::$144 ] ( main:10 [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 main::$144 ] { { z#25 = z#53 } } ) always clobbers reg byte a +Statement [251] *((char *)main::$144) = 3 [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 main::$144 ] ( main:10 [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 main::$144 ] { { z#25 = z#53 } } ) always clobbers reg byte a reg byte y +Statement [252] main::$145 = main::$144 + c [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 main::$145 ] ( main:10 [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 main::$145 ] { { z#25 = z#53 } } ) always clobbers reg byte a +Statement [253] *((char *)main::$145) = 7 [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 ] ( main:10 [ l hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 ] { { z#25 = z#53 } } ) always clobbers reg byte a reg byte y +Statement [255] y#130 = y#35 [ l m hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#130 y#35 n#14 ] ( main:10 [ l m hiscore#110 tu#13 z#25 duck#1 time#17 score#43 divr8u::rem#11 y#130 y#35 n#14 ] { } ) always clobbers reg byte a +Statement [256] if(*((char *)main::$110)==brick) goto main::@36 [ l hiscore#110 tu#13 peephole#12 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 ] ( main:10 [ l hiscore#110 tu#13 peephole#12 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 ] { } ) always clobbers reg byte a reg byte y +Statement [257] if(y#13>$1e16) goto main::@107 [ l hiscore#110 tu#13 peephole#12 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 ] ( main:10 [ l hiscore#110 tu#13 peephole#12 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 ] { } ) always clobbers reg byte a +Statement [258] if(y#13>=$1fe3) goto main::@36 [ l hiscore#110 tu#13 peephole#12 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 ] ( main:10 [ l hiscore#110 tu#13 peephole#12 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 ] { } ) always clobbers reg byte a +Statement [259] main::$119 = peephole#12 + c [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 main::$119 ] ( main:10 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 main::$119 ] { } ) always clobbers reg byte a +Statement [260] *((char *)main::$119) = 0 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 main::$119 ] ( main:10 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 main::$119 ] { } ) always clobbers reg byte a reg byte y +Statement [261] main::$120 = main::$119 + 1 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 main::$119 main::$120 ] ( main:10 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 main::$119 main::$120 ] { } ) always clobbers reg byte a +Statement [262] *((char *)main::$120) = 0 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 main::$119 ] ( main:10 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 main::$119 ] { } ) always clobbers reg byte a reg byte y +Statement [263] main::$122 = main::$119 + $16 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 main::$119 main::$122 ] ( main:10 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 main::$119 main::$122 ] { } ) always clobbers reg byte a +Statement [264] *((char *)main::$122) = 0 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 main::$119 ] ( main:10 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 main::$119 ] { } ) always clobbers reg byte a reg byte y +Statement [265] main::$124 = main::$119 + $17 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 main::$124 ] ( main:10 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 main::$124 ] { } ) always clobbers reg byte a +Statement [266] *((char *)main::$124) = 0 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 ] ( main:10 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 n#14 y#13 z#48 ] { } ) always clobbers reg byte a reg byte y +Statement [267] y#141 = y#13 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 n#14 z#48 y#141 ] ( main:10 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 n#14 z#48 y#141 ] { } ) always clobbers reg byte a +Statement [268] score#6 = score#19 - $a [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 score#6 ] ( main:10 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 score#6 ] { { score#13 = score#6 } } ) always clobbers reg byte a +Statement [272] main::$57 = $30 + tu#13 [ l hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 score#38 main::$57 ] ( main:10 [ l hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 score#38 main::$57 ] { { chrout::petscii = main::$57 } } ) always clobbers reg byte a +Statement [273] chrout::petscii = main::$57 [ l chrout::petscii hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 score#38 ] ( main:10 [ l chrout::petscii hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 score#38 ] { { chrout::petscii = main::$57 } } ) always clobbers reg byte a +Statement [275] chrout::petscii = ducknumber[j#16] [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#89 z#128 j#16 score#38 ] ( main:10 [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#89 z#128 j#16 score#38 ] { } ) always clobbers reg byte a reg byte y +Statement [278] chrout::petscii = chrono[j#13] [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#89 z#128 j#13 ] ( main:10 [ l chrout::petscii rem8u#127 y#114 hiscore#110 n#89 z#128 j#13 ] { } ) always clobbers reg byte a reg byte y +Statement [282] if(j#11<=m) goto main::@15 [ l m rem8u#127 y#114 hiscore#110 n#89 z#28 j#11 ] ( main:10 [ l m rem8u#127 y#114 hiscore#110 n#89 z#28 j#11 ] { } ) always clobbers reg byte a +Statement [283] chrout::petscii = brick [ l m chrout::petscii rem8u#127 y#114 hiscore#110 n#89 z#28 ] ( main:10 [ l m chrout::petscii rem8u#127 y#114 hiscore#110 n#89 z#28 ] { } ) always clobbers reg byte a +Statement [285] main::$35 = z#28 + m [ l rem8u#127 y#114 hiscore#110 n#89 main::$35 ] ( main:10 [ l rem8u#127 y#114 hiscore#110 n#89 main::$35 ] { } ) always clobbers reg byte a +Statement [286] z#9 = main::$35 + 1 [ l rem8u#127 y#114 hiscore#110 n#89 z#9 ] ( main:10 [ l rem8u#127 y#114 hiscore#110 n#89 z#9 ] { } ) always clobbers reg byte a +Statement [287] if(z#9<$1fa) goto main::@13 [ l rem8u#127 y#114 hiscore#110 n#89 z#9 ] ( main:10 [ l rem8u#127 y#114 hiscore#110 n#89 z#9 ] { } ) always clobbers reg byte a +Statement [288] chrout::petscii = right [ l m chrout::petscii rem8u#127 y#114 hiscore#110 n#89 z#28 j#11 ] ( main:10 [ l m chrout::petscii rem8u#127 y#114 hiscore#110 n#89 z#28 j#11 ] { } ) always clobbers reg byte a +Statement [291] chrout::petscii = brick [ l chrout::petscii rem8u#127 y#114 hiscore#110 k#101 ] ( main:10 [ l chrout::petscii rem8u#127 y#114 hiscore#110 k#101 ] { } ) always clobbers reg byte a +Statement [294] if(n#101<$16) goto main::@10 [ l rem8u#127 y#114 hiscore#110 k#101 n#101 ] ( main:10 [ l rem8u#127 y#114 hiscore#110 k#101 n#101 ] { } ) always clobbers reg byte a +Statement [295] chrout::petscii = brick [ l chrout::petscii rem8u#127 y#114 hiscore#110 k#101 n#101 ] ( main:10 [ l chrout::petscii rem8u#127 y#114 hiscore#110 k#101 n#101 ] { } ) always clobbers reg byte a +Statement [298] chrout::petscii = right [ l chrout::petscii rem8u#127 y#114 hiscore#110 k#101 n#101 ] ( main:10 [ l chrout::petscii rem8u#127 y#114 hiscore#110 k#101 n#101 ] { } ) always clobbers reg byte a +Statement [301] main::$3 = $1c00 + m [ m main::$3 ] ( main:10 [ m main::$3 ] { } ) always clobbers reg byte a +Statement [302] *((char *)main::$3) = duck_udg[m] [ m ] ( main:10 [ m ] { } ) always clobbers reg byte a reg byte y +Statement [308] conio_cursor_x = 0 [ conio_cursor_x gotoxy::y#5 ] ( gotoxy:17 [ conio_cursor_x gotoxy::y#5 ] { { gotoxy::y#2 = gotoxy::y#4 conio_c64_init::line#2 } } conio_c64_init:8::gotoxy:17 [ conio_cursor_x gotoxy::y#5 ] { { gotoxy::y#2 = gotoxy::y#4 conio_c64_init::line#2 } } main:10::clear_screen:27::gotoxy:325 [ rem8u#127 y#114 hiscore#110 n#109 conio_cursor_x gotoxy::y#5 ] { } main:10::clear_screen:44::gotoxy:325 [ l rem8u#127 y#114 hiscore#110 n#109 conio_cursor_x gotoxy::y#5 ] { } main:10::clear_screen:145::gotoxy:325 [ hiscore#110 rem8u#25 y#18 n#20 score#38 conio_cursor_x gotoxy::y#5 ] { } ) always clobbers reg byte a +Statement [310] gotoxy::$7 = (unsigned int)gotoxy::y#5 [ conio_cursor_x conio_cursor_y gotoxy::$7 ] ( gotoxy:17 [ conio_cursor_x conio_cursor_y gotoxy::$7 ] { { gotoxy::y#2 = gotoxy::y#4 conio_c64_init::line#2 } } conio_c64_init:8::gotoxy:17 [ conio_cursor_x conio_cursor_y gotoxy::$7 ] { { gotoxy::y#2 = gotoxy::y#4 conio_c64_init::line#2 } } main:10::clear_screen:27::gotoxy:325 [ rem8u#127 y#114 hiscore#110 n#109 conio_cursor_x conio_cursor_y gotoxy::$7 ] { } main:10::clear_screen:44::gotoxy:325 [ l rem8u#127 y#114 hiscore#110 n#109 conio_cursor_x conio_cursor_y gotoxy::$7 ] { } main:10::clear_screen:145::gotoxy:325 [ hiscore#110 rem8u#25 y#18 n#20 score#38 conio_cursor_x conio_cursor_y gotoxy::$7 ] { } ) always clobbers reg byte a +Statement [311] gotoxy::$8 = gotoxy::$7 << 2 [ conio_cursor_x conio_cursor_y gotoxy::$7 gotoxy::$8 ] ( gotoxy:17 [ conio_cursor_x conio_cursor_y gotoxy::$7 gotoxy::$8 ] { { gotoxy::y#2 = gotoxy::y#4 conio_c64_init::line#2 } } conio_c64_init:8::gotoxy:17 [ conio_cursor_x conio_cursor_y gotoxy::$7 gotoxy::$8 ] { { gotoxy::y#2 = gotoxy::y#4 conio_c64_init::line#2 } } main:10::clear_screen:27::gotoxy:325 [ rem8u#127 y#114 hiscore#110 n#109 conio_cursor_x conio_cursor_y gotoxy::$7 gotoxy::$8 ] { } main:10::clear_screen:44::gotoxy:325 [ l rem8u#127 y#114 hiscore#110 n#109 conio_cursor_x conio_cursor_y gotoxy::$7 gotoxy::$8 ] { } main:10::clear_screen:145::gotoxy:325 [ hiscore#110 rem8u#25 y#18 n#20 score#38 conio_cursor_x conio_cursor_y gotoxy::$7 gotoxy::$8 ] { } ) always clobbers reg byte a +Statement [312] gotoxy::$9 = gotoxy::$8 + gotoxy::$7 [ conio_cursor_x conio_cursor_y gotoxy::$9 ] ( gotoxy:17 [ conio_cursor_x conio_cursor_y gotoxy::$9 ] { { gotoxy::y#2 = gotoxy::y#4 conio_c64_init::line#2 } } conio_c64_init:8::gotoxy:17 [ conio_cursor_x conio_cursor_y gotoxy::$9 ] { { gotoxy::y#2 = gotoxy::y#4 conio_c64_init::line#2 } } main:10::clear_screen:27::gotoxy:325 [ rem8u#127 y#114 hiscore#110 n#109 conio_cursor_x conio_cursor_y gotoxy::$9 ] { } main:10::clear_screen:44::gotoxy:325 [ l rem8u#127 y#114 hiscore#110 n#109 conio_cursor_x conio_cursor_y gotoxy::$9 ] { } main:10::clear_screen:145::gotoxy:325 [ hiscore#110 rem8u#25 y#18 n#20 score#38 conio_cursor_x conio_cursor_y gotoxy::$9 ] { } ) always clobbers reg byte a +Statement [313] gotoxy::line_offset#0 = gotoxy::$9 << 3 [ conio_cursor_x conio_cursor_y gotoxy::line_offset#0 ] ( gotoxy:17 [ conio_cursor_x conio_cursor_y gotoxy::line_offset#0 ] { { gotoxy::y#2 = gotoxy::y#4 conio_c64_init::line#2 } } conio_c64_init:8::gotoxy:17 [ conio_cursor_x conio_cursor_y gotoxy::line_offset#0 ] { { gotoxy::y#2 = gotoxy::y#4 conio_c64_init::line#2 } } main:10::clear_screen:27::gotoxy:325 [ rem8u#127 y#114 hiscore#110 n#109 conio_cursor_x conio_cursor_y gotoxy::line_offset#0 ] { } main:10::clear_screen:44::gotoxy:325 [ l rem8u#127 y#114 hiscore#110 n#109 conio_cursor_x conio_cursor_y gotoxy::line_offset#0 ] { } main:10::clear_screen:145::gotoxy:325 [ hiscore#110 rem8u#25 y#18 n#20 score#38 conio_cursor_x conio_cursor_y gotoxy::line_offset#0 ] { } ) always clobbers reg byte a +Statement [314] gotoxy::$5 = DEFAULT_SCREEN + gotoxy::line_offset#0 [ conio_cursor_x conio_cursor_y gotoxy::line_offset#0 gotoxy::$5 ] ( gotoxy:17 [ conio_cursor_x conio_cursor_y gotoxy::line_offset#0 gotoxy::$5 ] { { gotoxy::y#2 = gotoxy::y#4 conio_c64_init::line#2 } } conio_c64_init:8::gotoxy:17 [ conio_cursor_x conio_cursor_y gotoxy::line_offset#0 gotoxy::$5 ] { { gotoxy::y#2 = gotoxy::y#4 conio_c64_init::line#2 } } main:10::clear_screen:27::gotoxy:325 [ rem8u#127 y#114 hiscore#110 n#109 conio_cursor_x conio_cursor_y gotoxy::line_offset#0 gotoxy::$5 ] { } main:10::clear_screen:44::gotoxy:325 [ l rem8u#127 y#114 hiscore#110 n#109 conio_cursor_x conio_cursor_y gotoxy::line_offset#0 gotoxy::$5 ] { } main:10::clear_screen:145::gotoxy:325 [ hiscore#110 rem8u#25 y#18 n#20 score#38 conio_cursor_x conio_cursor_y gotoxy::line_offset#0 gotoxy::$5 ] { } ) always clobbers reg byte a +Statement [315] conio_line_text = gotoxy::$5 [ conio_cursor_x conio_cursor_y conio_line_text gotoxy::line_offset#0 ] ( gotoxy:17 [ conio_cursor_x conio_cursor_y conio_line_text gotoxy::line_offset#0 ] { { gotoxy::y#2 = gotoxy::y#4 conio_c64_init::line#2 } } conio_c64_init:8::gotoxy:17 [ conio_cursor_x conio_cursor_y conio_line_text gotoxy::line_offset#0 ] { { gotoxy::y#2 = gotoxy::y#4 conio_c64_init::line#2 } } main:10::clear_screen:27::gotoxy:325 [ rem8u#127 y#114 hiscore#110 n#109 conio_cursor_x conio_cursor_y conio_line_text gotoxy::line_offset#0 ] { } main:10::clear_screen:44::gotoxy:325 [ l rem8u#127 y#114 hiscore#110 n#109 conio_cursor_x conio_cursor_y conio_line_text gotoxy::line_offset#0 ] { } main:10::clear_screen:145::gotoxy:325 [ hiscore#110 rem8u#25 y#18 n#20 score#38 conio_cursor_x conio_cursor_y conio_line_text gotoxy::line_offset#0 ] { } ) always clobbers reg byte a +Statement [316] gotoxy::$6 = COLORRAM + gotoxy::line_offset#0 [ conio_cursor_x conio_cursor_y conio_line_text gotoxy::$6 ] ( gotoxy:17 [ conio_cursor_x conio_cursor_y conio_line_text gotoxy::$6 ] { { gotoxy::y#2 = gotoxy::y#4 conio_c64_init::line#2 } } conio_c64_init:8::gotoxy:17 [ conio_cursor_x conio_cursor_y conio_line_text gotoxy::$6 ] { { gotoxy::y#2 = gotoxy::y#4 conio_c64_init::line#2 } } main:10::clear_screen:27::gotoxy:325 [ rem8u#127 y#114 hiscore#110 n#109 conio_cursor_x conio_cursor_y conio_line_text gotoxy::$6 ] { } main:10::clear_screen:44::gotoxy:325 [ l rem8u#127 y#114 hiscore#110 n#109 conio_cursor_x conio_cursor_y conio_line_text gotoxy::$6 ] { } main:10::clear_screen:145::gotoxy:325 [ hiscore#110 rem8u#25 y#18 n#20 score#38 conio_cursor_x conio_cursor_y conio_line_text gotoxy::$6 ] { } ) always clobbers reg byte a +Statement [317] conio_line_color = gotoxy::$6 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] ( gotoxy:17 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { gotoxy::y#2 = gotoxy::y#4 conio_c64_init::line#2 } } conio_c64_init:8::gotoxy:17 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { gotoxy::y#2 = gotoxy::y#4 conio_c64_init::line#2 } } main:10::clear_screen:27::gotoxy:325 [ rem8u#127 y#114 hiscore#110 n#109 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { } main:10::clear_screen:44::gotoxy:325 [ l rem8u#127 y#114 hiscore#110 n#109 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { } main:10::clear_screen:145::gotoxy:325 [ hiscore#110 rem8u#25 y#18 n#20 score#38 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { } ) always clobbers reg byte a +Statement asm { ldapetscii jsr$ffd2 } always clobbers reg byte a reg byte x reg byte y +Statement [323] if(z#2<$1fa) goto clear_screen::@2 [ clear_screen::n#5 z#2 ] ( main:10::clear_screen:27 [ rem8u#127 y#114 hiscore#110 n#109 clear_screen::n#5 z#2 ] { } main:10::clear_screen:44 [ l rem8u#127 y#114 hiscore#110 n#109 clear_screen::n#5 z#2 ] { } main:10::clear_screen:145 [ hiscore#110 rem8u#25 y#18 n#20 score#38 clear_screen::n#5 z#2 ] { } ) always clobbers reg byte a +Statement [326] chrout::petscii = home [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color chrout::petscii ] ( main:10::clear_screen:27 [ rem8u#127 y#114 hiscore#110 n#109 conio_cursor_x conio_cursor_y conio_line_text conio_line_color chrout::petscii ] { } main:10::clear_screen:44 [ l rem8u#127 y#114 hiscore#110 n#109 conio_cursor_x conio_cursor_y conio_line_text conio_line_color chrout::petscii ] { } main:10::clear_screen:145 [ hiscore#110 rem8u#25 y#18 n#20 score#38 conio_cursor_x conio_cursor_y conio_line_text conio_line_color chrout::petscii ] { } ) always clobbers reg byte a +Statement [329] clear_screen::$5 = $1e00 + z#2 [ clear_screen::n#5 z#2 clear_screen::$5 ] ( main:10::clear_screen:27 [ rem8u#127 y#114 hiscore#110 n#109 clear_screen::n#5 z#2 clear_screen::$5 ] { } main:10::clear_screen:44 [ l rem8u#127 y#114 hiscore#110 n#109 clear_screen::n#5 z#2 clear_screen::$5 ] { } main:10::clear_screen:145 [ hiscore#110 rem8u#25 y#18 n#20 score#38 clear_screen::n#5 z#2 clear_screen::$5 ] { } ) always clobbers reg byte a +Statement [330] clear_screen::$4 = clear_screen::$5 + c [ clear_screen::n#5 z#2 clear_screen::$5 clear_screen::$4 ] ( main:10::clear_screen:27 [ rem8u#127 y#114 hiscore#110 n#109 clear_screen::n#5 z#2 clear_screen::$5 clear_screen::$4 ] { } main:10::clear_screen:44 [ l rem8u#127 y#114 hiscore#110 n#109 clear_screen::n#5 z#2 clear_screen::$5 clear_screen::$4 ] { } main:10::clear_screen:145 [ hiscore#110 rem8u#25 y#18 n#20 score#38 clear_screen::n#5 z#2 clear_screen::$5 clear_screen::$4 ] { } ) always clobbers reg byte a +Statement [331] *((char *)clear_screen::$4) = 0 [ clear_screen::n#5 z#2 clear_screen::$5 ] ( main:10::clear_screen:27 [ rem8u#127 y#114 hiscore#110 n#109 clear_screen::n#5 z#2 clear_screen::$5 ] { } main:10::clear_screen:44 [ l rem8u#127 y#114 hiscore#110 n#109 clear_screen::n#5 z#2 clear_screen::$5 ] { } main:10::clear_screen:145 [ hiscore#110 rem8u#25 y#18 n#20 score#38 clear_screen::n#5 z#2 clear_screen::$5 ] { } ) always clobbers reg byte a reg byte y +Statement [332] *((char *)clear_screen::$5) = clear_screen::n#5 [ clear_screen::n#5 z#2 ] ( main:10::clear_screen:27 [ rem8u#127 y#114 hiscore#110 n#109 clear_screen::n#5 z#2 ] { } main:10::clear_screen:44 [ l rem8u#127 y#114 hiscore#110 n#109 clear_screen::n#5 z#2 ] { } main:10::clear_screen:145 [ hiscore#110 rem8u#25 y#18 n#20 score#38 clear_screen::n#5 z#2 ] { } ) always clobbers reg byte a reg byte y +Statement [339] cputs::c#1 = *cputs::s#10 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor cputs::s#10 cputs::c#1 ] ( main:10::cputs:31 [ rem8u#127 y#114 hiscore#110 n#109 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor cputs::s#10 cputs::c#1 ] { } main:10::cputs:35 [ rem8u#127 y#114 hiscore#110 n#109 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor cputs::s#10 cputs::c#1 ] { } main:10::cputs:39 [ rem8u#127 y#114 hiscore#110 n#109 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor cputs::s#10 cputs::c#1 ] { } main:10::cputs:152 [ hiscore#110 rem8u#25 y#18 n#20 score#38 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor cputs::s#10 cputs::c#1 ] { } main:10::cputs:156 [ hiscore#110 rem8u#25 y#18 n#20 score#38 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor cputs::s#10 cputs::c#1 ] { } main:10::cputs:158 [ hiscore#110 rem8u#25 y#18 n#20 score#38 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor cputs::s#10 cputs::c#1 ] { } main:10::cputs:162 [ hiscore#110 rem8u#25 y#18 n#20 score#38 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor cputs::s#10 cputs::c#1 ] { } main:10::cputs:169 [ rem8u#25 y#18 n#20 hiscore#19 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor cputs::s#10 cputs::c#1 ] { } main:10::cputs:173 [ rem8u#25 y#18 n#20 hiscore#19 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor cputs::s#10 cputs::c#1 ] { } ) always clobbers reg byte a reg byte y +Statement [346] m = *((char *) 37140) [ m random::k#4 random::n#4 ] ( main:10::random:66 [ l rem8u#127 y#114 hiscore#110 n#89 z#28 m random::k#4 random::n#4 ] { { random::k#0 = random::k#4 } { random::n#0 = random::n#4 } } main:10::random:109 [ l hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 score#38 m random::k#4 random::n#4 ] { } main:10::random:111 [ l hiscore#110 tu#13 rem8u#48 y#49 z#102 peephole#52 n#52 duck#0 score#38 m random::k#4 random::n#4 ] { } ) always clobbers reg byte a +Statement [352] if(score#13<=$fde8) goto write_score::@15 [ score#13 ] ( main:10::write_score:87 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 score#13 ] { } main:10::write_score:128 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#13 ] { { score#13 = score#4 } } main:10::write_score:269 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 score#13 ] { { score#13 = score#6 } } ) always clobbers reg byte a +Statement [355] m = 0 [ m score#38 ] ( main:10::write_score:87 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 m score#38 ] { } main:10::write_score:128 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 m score#38 ] { { score#13 = score#4 } } main:10::write_score:269 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 m score#38 ] { { score#13 = score#6 } } ) always clobbers reg byte a +Statement [356] if(m<4) goto write_score::@6 [ m score#38 ] ( main:10::write_score:87 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 m score#38 ] { } main:10::write_score:128 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 m score#38 ] { { score#13 = score#4 } } main:10::write_score:269 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 m score#38 ] { { score#13 = score#6 } } ) always clobbers reg byte a +Statement [357] utoa::value#1 = score#38 [ score#38 utoa::value#1 ] ( main:10::write_score:87 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 utoa::value#1 ] { { utoa::value#1 = utoa::value#10 score#38 } } main:10::write_score:128 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#38 utoa::value#1 ] { { score#13 = score#4 } { utoa::value#1 = utoa::value#10 score#38 } } main:10::write_score:269 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 score#38 utoa::value#1 ] { { score#13 = score#6 } { utoa::value#1 = utoa::value#10 score#38 } } ) always clobbers reg byte a +Statement [359] if(score#38<9+1) goto write_score::@2 [ score#38 ] ( main:10::write_score:87 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 ] { } main:10::write_score:128 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#38 ] { { score#13 = score#4 } } main:10::write_score:269 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 score#38 ] { { score#13 = score#6 } } ) always clobbers reg byte a +Statement [360] *(points+2) = *buffer [ score#38 ] ( main:10::write_score:87 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 ] { } main:10::write_score:128 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#38 ] { { score#13 = score#4 } } main:10::write_score:269 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 score#38 ] { { score#13 = score#6 } } ) always clobbers reg byte a +Statement [361] *(points+3) = *(buffer+1) [ score#38 ] ( main:10::write_score:87 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 ] { } main:10::write_score:128 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#38 ] { { score#13 = score#4 } } main:10::write_score:269 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 score#38 ] { { score#13 = score#6 } } ) always clobbers reg byte a +Statement [362] if(score#38<$63+1) goto write_score::@3 [ score#38 ] ( main:10::write_score:87 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 ] { } main:10::write_score:128 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#38 ] { { score#13 = score#4 } } main:10::write_score:269 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 score#38 ] { { score#13 = score#6 } } ) always clobbers reg byte a +Statement [363] *(points+1) = *buffer [ score#38 ] ( main:10::write_score:87 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 ] { } main:10::write_score:128 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#38 ] { { score#13 = score#4 } } main:10::write_score:269 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 score#38 ] { { score#13 = score#6 } } ) always clobbers reg byte a +Statement [364] *(points+2) = *(buffer+1) [ score#38 ] ( main:10::write_score:87 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 ] { } main:10::write_score:128 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#38 ] { { score#13 = score#4 } } main:10::write_score:269 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 score#38 ] { { score#13 = score#6 } } ) always clobbers reg byte a +Statement [365] *(points+3) = *(buffer+2) [ score#38 ] ( main:10::write_score:87 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 ] { } main:10::write_score:128 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#38 ] { { score#13 = score#4 } } main:10::write_score:269 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 score#38 ] { { score#13 = score#6 } } ) always clobbers reg byte a +Statement [366] chrout::petscii = yellow [ chrout::petscii score#38 ] ( main:10::write_score:87 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 chrout::petscii score#38 ] { } main:10::write_score:128 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 chrout::petscii score#38 ] { { score#13 = score#4 } } main:10::write_score:269 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 chrout::petscii score#38 ] { { score#13 = score#6 } } ) always clobbers reg byte a +Statement [368] chrout::petscii = home [ chrout::petscii score#38 ] ( main:10::write_score:87 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 chrout::petscii score#38 ] { } main:10::write_score:128 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 chrout::petscii score#38 ] { { score#13 = score#4 } } main:10::write_score:269 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 chrout::petscii score#38 ] { { score#13 = score#6 } } ) always clobbers reg byte a +Statement [370] *((char *) 211) = 4 [ score#38 ] ( main:10::write_score:87 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 ] { } main:10::write_score:128 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#38 ] { { score#13 = score#4 } } main:10::write_score:269 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 score#38 ] { { score#13 = score#6 } } ) always clobbers reg byte a +Statement [371] m = 0 [ m score#38 ] ( main:10::write_score:87 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 m score#38 ] { } main:10::write_score:128 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 m score#38 ] { { score#13 = score#4 } } main:10::write_score:269 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 m score#38 ] { { score#13 = score#6 } } ) always clobbers reg byte a +Statement [372] if(m<4) goto write_score::@10 [ m score#38 ] ( main:10::write_score:87 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 m score#38 ] { } main:10::write_score:128 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 m score#38 ] { { score#13 = score#4 } } main:10::write_score:269 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 m score#38 ] { { score#13 = score#6 } } ) always clobbers reg byte a +Statement [374] chrout::petscii = points[m] [ m chrout::petscii score#38 ] ( main:10::write_score:87 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 m chrout::petscii score#38 ] { } main:10::write_score:128 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 m chrout::petscii score#38 ] { { score#13 = score#4 } } main:10::write_score:269 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 m chrout::petscii score#38 ] { { score#13 = score#6 } } ) always clobbers reg byte a reg byte y +Statement [377] points[m] = '0' [ m score#38 ] ( main:10::write_score:87 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 m score#38 ] { } main:10::write_score:128 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 m score#38 ] { { score#13 = score#4 } } main:10::write_score:269 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 m score#38 ] { { score#13 = score#6 } } ) always clobbers reg byte a reg byte y +Statement asm { lda#0 ldy#0 ldx#0 jsr$ffdb } always clobbers reg byte a reg byte x reg byte y +Statement [382] m = 0 [ m wait::n#6 z#53 ] ( main:10::wait:130 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 score#38 m wait::n#6 z#53 ] { { z#100 = z#53 } } main:10::wait:212 [ l hiscore#110 tu#13 peephole#12 duck#1 divr8u::rem#11 n#14 y#13 score#8 m wait::n#6 z#53 ] { { z#100 = z#53 } } main:10::wait:238 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 m wait::n#6 z#53 ] { { z#48 = z#53 } } main:10::wait:254 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 m wait::n#6 z#53 ] { { z#25 = z#53 } } main:10::wait:271 [ l hiscore#110 tu#13 peephole#12 duck#1 score#38 divr8u::rem#11 n#14 y#13 div16u8u::return#2 m wait::n#6 z#53 ] { { z#100 = z#53 } } ) always clobbers reg byte a +Statement [387] if(z#23<$21c) goto wait::@3 [ m wait::n#6 z#23 ] ( main:10::wait:130 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 score#38 m wait::n#6 z#23 ] { { z#100 = z#53 } } main:10::wait:212 [ l hiscore#110 tu#13 peephole#12 duck#1 divr8u::rem#11 n#14 y#13 score#8 m wait::n#6 z#23 ] { { z#100 = z#53 } } main:10::wait:238 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 m wait::n#6 z#23 ] { { z#48 = z#53 } } main:10::wait:254 [ l hiscore#110 tu#13 duck#1 time#17 score#43 divr8u::rem#11 y#35 n#14 m wait::n#6 z#23 ] { { z#25 = z#53 } } main:10::wait:271 [ l hiscore#110 tu#13 peephole#12 duck#1 score#38 divr8u::rem#11 n#14 y#13 div16u8u::return#2 m wait::n#6 z#23 ] { { z#100 = z#53 } } ) always clobbers reg byte a +Statement [394] *utoa::buffer#10 = DIGITS[utoa::$11] [ utoa::buffer#10 ] ( main:10::utoa:167 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor rem8u#25 y#18 n#20 hiscore#19 utoa::buffer#10 ] { { utoa::value#10 = utoa::value#2 hiscore#19 } } main:10::write_score:87::utoa:358 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 utoa::buffer#10 ] { { utoa::value#1 = utoa::value#10 score#38 } } main:10::write_score:128::utoa:358 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#38 utoa::buffer#10 ] { { score#13 = score#4 } { utoa::value#1 = utoa::value#10 score#38 } } main:10::write_score:269::utoa:358 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 score#38 utoa::buffer#10 ] { { score#13 = score#6 } { utoa::value#1 = utoa::value#10 score#38 } } ) always clobbers reg byte a reg byte y +Statement [395] utoa::buffer#3 = ++ utoa::buffer#10 [ utoa::buffer#3 ] ( main:10::utoa:167 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor rem8u#25 y#18 n#20 hiscore#19 utoa::buffer#3 ] { { utoa::value#10 = utoa::value#2 hiscore#19 } } main:10::write_score:87::utoa:358 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 utoa::buffer#3 ] { { utoa::value#1 = utoa::value#10 score#38 } } main:10::write_score:128::utoa:358 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#38 utoa::buffer#3 ] { { score#13 = score#4 } { utoa::value#1 = utoa::value#10 score#38 } } main:10::write_score:269::utoa:358 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 score#38 utoa::buffer#3 ] { { score#13 = score#6 } { utoa::value#1 = utoa::value#10 score#38 } } ) always clobbers reg byte a +Statement [396] *utoa::buffer#3 = 0 [ ] ( main:10::utoa:167 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor rem8u#25 y#18 n#20 hiscore#19 ] { { utoa::value#10 = utoa::value#2 hiscore#19 } } main:10::write_score:87::utoa:358 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 ] { { utoa::value#1 = utoa::value#10 score#38 } } main:10::write_score:128::utoa:358 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#38 ] { { score#13 = score#4 } { utoa::value#1 = utoa::value#10 score#38 } } main:10::write_score:269::utoa:358 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 score#38 ] { { score#13 = score#6 } { utoa::value#1 = utoa::value#10 score#38 } } ) always clobbers reg byte a reg byte y +Statement [398] utoa::$10 = utoa::digit#2 << 1 [ utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::$10 ] ( main:10::utoa:167 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor rem8u#25 y#18 n#20 hiscore#19 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::$10 ] { { utoa::value#10 = utoa::value#2 hiscore#19 } } main:10::write_score:87::utoa:358 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::$10 ] { { utoa::value#1 = utoa::value#10 score#38 } } main:10::write_score:128::utoa:358 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#38 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::$10 ] { { score#13 = score#4 } { utoa::value#1 = utoa::value#10 score#38 } } main:10::write_score:269::utoa:358 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 score#38 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::$10 ] { { score#13 = score#6 } { utoa::value#1 = utoa::value#10 score#38 } } ) always clobbers reg byte a +Statement [399] utoa::digit_value#0 = RADIX_DECIMAL_VALUES[utoa::$10] [ utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] ( main:10::utoa:167 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor rem8u#25 y#18 n#20 hiscore#19 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { { utoa::value#10 = utoa::value#2 hiscore#19 } } main:10::write_score:87::utoa:358 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { { utoa::value#1 = utoa::value#10 score#38 } } main:10::write_score:128::utoa:358 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#38 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { { score#13 = score#4 } { utoa::value#1 = utoa::value#10 score#38 } } main:10::write_score:269::utoa:358 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 score#38 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { { score#13 = score#6 } { utoa::value#1 = utoa::value#10 score#38 } } ) always clobbers reg byte a +Statement [401] if(utoa::value#3>=utoa::digit_value#0) goto utoa::@5 [ utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] ( main:10::utoa:167 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor rem8u#25 y#18 n#20 hiscore#19 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { { utoa::value#10 = utoa::value#2 hiscore#19 } } main:10::write_score:87::utoa:358 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { { utoa::value#1 = utoa::value#10 score#38 } } main:10::write_score:128::utoa:358 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#38 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { { score#13 = score#4 } { utoa::value#1 = utoa::value#10 score#38 } } main:10::write_score:269::utoa:358 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 score#38 utoa::digit#2 utoa::value#3 utoa::started#2 utoa::buffer#10 utoa::digit_value#0 ] { { score#13 = score#6 } { utoa::value#1 = utoa::value#10 score#38 } } ) always clobbers reg byte a +Statement [404] utoa_append::buffer#0 = utoa::buffer#10 [ utoa::digit#2 utoa::value#3 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 ] ( main:10::utoa:167 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor rem8u#25 y#18 n#20 hiscore#19 utoa::digit#2 utoa::value#3 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 ] { { utoa::value#10 = utoa::value#2 hiscore#19 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:10::write_score:87::utoa:358 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 utoa::digit#2 utoa::value#3 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 ] { { utoa::value#1 = utoa::value#10 score#38 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:10::write_score:128::utoa:358 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#38 utoa::digit#2 utoa::value#3 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 ] { { score#13 = score#4 } { utoa::value#1 = utoa::value#10 score#38 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:10::write_score:269::utoa:358 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 score#38 utoa::digit#2 utoa::value#3 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 ] { { score#13 = score#6 } { utoa::value#1 = utoa::value#10 score#38 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [405] utoa_append::value#0 = utoa::value#3 [ utoa::digit#2 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] ( main:10::utoa:167 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor rem8u#25 y#18 n#20 hiscore#19 utoa::digit#2 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] { { utoa::value#10 = utoa::value#2 hiscore#19 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:10::write_score:87::utoa:358 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 utoa::digit#2 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] { { utoa::value#1 = utoa::value#10 score#38 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:10::write_score:128::utoa:358 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#38 utoa::digit#2 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] { { score#13 = score#4 } { utoa::value#1 = utoa::value#10 score#38 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:10::write_score:269::utoa:358 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 score#38 utoa::digit#2 utoa::buffer#10 utoa::digit_value#0 utoa_append::buffer#0 utoa_append::value#0 ] { { score#13 = score#6 } { utoa::value#1 = utoa::value#10 score#38 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [406] utoa_append::sub#0 = utoa::digit_value#0 [ utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] ( main:10::utoa:167 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor rem8u#25 y#18 n#20 hiscore#19 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] { { utoa::value#10 = utoa::value#2 hiscore#19 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:10::write_score:87::utoa:358 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] { { utoa::value#1 = utoa::value#10 score#38 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:10::write_score:128::utoa:358 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#38 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] { { score#13 = score#4 } { utoa::value#1 = utoa::value#10 score#38 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:10::write_score:269::utoa:358 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 score#38 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::value#0 utoa_append::sub#0 ] { { score#13 = score#6 } { utoa::value#1 = utoa::value#10 score#38 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [408] utoa_append::return#0 = utoa_append::value#2 [ utoa::digit#2 utoa::buffer#10 utoa_append::return#0 ] ( main:10::utoa:167 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor rem8u#25 y#18 n#20 hiscore#19 utoa::digit#2 utoa::buffer#10 utoa_append::return#0 ] { { utoa::value#10 = utoa::value#2 hiscore#19 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:10::write_score:87::utoa:358 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 utoa::digit#2 utoa::buffer#10 utoa_append::return#0 ] { { utoa::value#1 = utoa::value#10 score#38 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:10::write_score:128::utoa:358 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#38 utoa::digit#2 utoa::buffer#10 utoa_append::return#0 ] { { score#13 = score#4 } { utoa::value#1 = utoa::value#10 score#38 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:10::write_score:269::utoa:358 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 score#38 utoa::digit#2 utoa::buffer#10 utoa_append::return#0 ] { { score#13 = score#6 } { utoa::value#1 = utoa::value#10 score#38 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [409] utoa::value#0 = utoa_append::return#0 [ utoa::digit#2 utoa::buffer#10 utoa::value#0 ] ( main:10::utoa:167 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor rem8u#25 y#18 n#20 hiscore#19 utoa::digit#2 utoa::buffer#10 utoa::value#0 ] { { utoa::value#10 = utoa::value#2 hiscore#19 } } main:10::write_score:87::utoa:358 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 utoa::digit#2 utoa::buffer#10 utoa::value#0 ] { { utoa::value#1 = utoa::value#10 score#38 } } main:10::write_score:128::utoa:358 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#38 utoa::digit#2 utoa::buffer#10 utoa::value#0 ] { { score#13 = score#4 } { utoa::value#1 = utoa::value#10 score#38 } } main:10::write_score:269::utoa:358 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 score#38 utoa::digit#2 utoa::buffer#10 utoa::value#0 ] { { score#13 = score#6 } { utoa::value#1 = utoa::value#10 score#38 } } ) always clobbers reg byte a +Statement asm { jsr$ffde stal stxm } always clobbers reg byte a reg byte x reg byte y +Statement [412] read_chrono::$0 = m << 8 [ l read_chrono::$0 ] ( main:10::read_chrono:182 [ hiscore#110 y#18 tu#13 peephole#12 duck#1 score#19 z#100 l read_chrono::$0 ] { { div16u8u::return#0 = div16u8u::return#2 } } ) always clobbers reg byte a +Statement [413] div16u8u::dividend#0 = read_chrono::$0 + l [ l div16u8u::dividend#0 ] ( main:10::read_chrono:182 [ hiscore#110 y#18 tu#13 peephole#12 duck#1 score#19 z#100 l div16u8u::dividend#0 ] { { div16u8u::return#0 = div16u8u::return#2 } } ) always clobbers reg byte a +Statement [415] div16u8u::return#2 = div16u8u::return#0 [ l divr8u::rem#11 div16u8u::return#2 ] ( main:10::read_chrono:182 [ hiscore#110 y#18 tu#13 peephole#12 duck#1 score#19 z#100 l divr8u::rem#11 div16u8u::return#2 ] { { div16u8u::return#0 = div16u8u::return#2 } } ) always clobbers reg byte a +Statement [416] *((char *)$1e15+c) = 7 [ l divr8u::rem#11 div16u8u::return#2 ] ( main:10::read_chrono:182 [ hiscore#110 y#18 tu#13 peephole#12 duck#1 score#19 z#100 l divr8u::rem#11 div16u8u::return#2 ] { } ) always clobbers reg byte a +Statement [417] *((char *) 7701) = $b9 [ l divr8u::rem#11 div16u8u::return#2 ] ( main:10::read_chrono:182 [ hiscore#110 y#18 tu#13 peephole#12 duck#1 score#19 z#100 l divr8u::rem#11 div16u8u::return#2 ] { } ) always clobbers reg byte a +Statement [418] if(div16u8u::return#2>=$a) goto read_chrono::@return [ l divr8u::rem#11 div16u8u::return#2 ] ( main:10::read_chrono:182 [ hiscore#110 y#18 tu#13 peephole#12 duck#1 score#19 z#100 l divr8u::rem#11 div16u8u::return#2 ] { } ) always clobbers reg byte a +Statement [419] read_chrono::$5 = $b9 - div16u8u::return#2 [ l divr8u::rem#11 div16u8u::return#2 read_chrono::$5 ] ( main:10::read_chrono:182 [ hiscore#110 y#18 tu#13 peephole#12 duck#1 score#19 z#100 l divr8u::rem#11 div16u8u::return#2 read_chrono::$5 ] { } ) always clobbers reg byte a +Statement [420] *((char *) 7701) = read_chrono::$5 [ l divr8u::rem#11 div16u8u::return#2 ] ( main:10::read_chrono:182 [ hiscore#110 y#18 tu#13 peephole#12 duck#1 score#19 z#100 l divr8u::rem#11 div16u8u::return#2 ] { } ) always clobbers reg byte a +Statement [423] conio_line_text[conio_cursor_x] = cputc::c#0 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] ( main:10::cputs:31::cputc:344 [ rem8u#127 y#114 hiscore#110 n#109 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:35::cputc:344 [ rem8u#127 y#114 hiscore#110 n#109 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:39::cputc:344 [ rem8u#127 y#114 hiscore#110 n#109 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:152::cputc:344 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:156::cputc:344 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:158::cputc:344 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:162::cputc:344 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:169::cputc:344 [ rem8u#25 y#18 n#20 hiscore#19 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:173::cputc:344 [ rem8u#25 y#18 n#20 hiscore#19 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } ) always clobbers reg byte y +Statement [424] conio_line_color[conio_cursor_x] = conio_textcolor [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] ( main:10::cputs:31::cputc:344 [ rem8u#127 y#114 hiscore#110 n#109 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:35::cputc:344 [ rem8u#127 y#114 hiscore#110 n#109 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:39::cputc:344 [ rem8u#127 y#114 hiscore#110 n#109 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:152::cputc:344 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:156::cputc:344 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:158::cputc:344 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:162::cputc:344 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:169::cputc:344 [ rem8u#25 y#18 n#20 hiscore#19 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:173::cputc:344 [ rem8u#25 y#18 n#20 hiscore#19 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } ) always clobbers reg byte a reg byte y +Statement [426] if(conio_cursor_x!=$28) goto cputc::@return [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] ( main:10::cputs:31::cputc:344 [ rem8u#127 y#114 hiscore#110 n#109 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:35::cputc:344 [ rem8u#127 y#114 hiscore#110 n#109 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:39::cputc:344 [ rem8u#127 y#114 hiscore#110 n#109 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:152::cputc:344 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:156::cputc:344 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:158::cputc:344 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:162::cputc:344 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:169::cputc:344 [ rem8u#25 y#18 n#20 hiscore#19 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:173::cputc:344 [ rem8u#25 y#18 n#20 hiscore#19 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } ) always clobbers reg byte a +Statement [434] if(utoa_append::value#2>=utoa_append::sub#0) goto utoa_append::@2 [ utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] ( main:10::utoa:167::utoa_append:407 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor rem8u#25 y#18 n#20 hiscore#19 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] { { utoa::value#10 = utoa::value#2 hiscore#19 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:10::write_score:87::utoa:358::utoa_append:407 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] { { utoa::value#1 = utoa::value#10 score#38 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:10::write_score:128::utoa:358::utoa_append:407 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#38 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] { { score#13 = score#4 } { utoa::value#1 = utoa::value#10 score#38 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:10::write_score:269::utoa:358::utoa_append:407 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 score#38 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#2 utoa_append::digit#2 ] { { score#13 = score#6 } { utoa::value#1 = utoa::value#10 score#38 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [435] *utoa_append::buffer#0 = DIGITS[utoa_append::digit#2] [ utoa_append::value#2 ] ( main:10::utoa:167::utoa_append:407 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor rem8u#25 y#18 n#20 hiscore#19 utoa::digit#2 utoa::buffer#10 utoa_append::value#2 ] { { utoa::value#10 = utoa::value#2 hiscore#19 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:10::write_score:87::utoa:358::utoa_append:407 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 utoa::digit#2 utoa::buffer#10 utoa_append::value#2 ] { { utoa::value#1 = utoa::value#10 score#38 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:10::write_score:128::utoa:358::utoa_append:407 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#38 utoa::digit#2 utoa::buffer#10 utoa_append::value#2 ] { { score#13 = score#4 } { utoa::value#1 = utoa::value#10 score#38 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:10::write_score:269::utoa:358::utoa_append:407 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 score#38 utoa::digit#2 utoa::buffer#10 utoa_append::value#2 ] { { score#13 = score#6 } { utoa::value#1 = utoa::value#10 score#38 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a reg byte y +Statement [438] utoa_append::value#1 = utoa_append::value#2 - utoa_append::sub#0 [ utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] ( main:10::utoa:167::utoa_append:407 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor rem8u#25 y#18 n#20 hiscore#19 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] { { utoa::value#10 = utoa::value#2 hiscore#19 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:10::write_score:87::utoa:358::utoa_append:407 [ l rem8u#127 y#114 hiscore#110 n#89 z#128 score#38 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] { { utoa::value#1 = utoa::value#10 score#38 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:10::write_score:128::utoa:358::utoa_append:407 [ l hiscore#110 rem8u#25 y#18 n#20 tu#1 peephole#12 duck#1 z#100 score#38 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] { { score#13 = score#4 } { utoa::value#1 = utoa::value#10 score#38 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } main:10::write_score:269::utoa:358::utoa_append:407 [ l hiscore#110 tu#13 peephole#12 duck#1 z#100 divr8u::rem#11 n#14 y#13 div16u8u::return#2 score#38 utoa::digit#2 utoa::buffer#10 utoa_append::buffer#0 utoa_append::sub#0 utoa_append::value#1 utoa_append::digit#1 ] { { score#13 = score#6 } { utoa::value#1 = utoa::value#10 score#38 } { utoa_append::buffer#0 = utoa::buffer#10 } { utoa_append::value#0 = utoa::value#3 } { utoa_append::sub#0 = utoa::digit_value#0 } { utoa_append::return#0 = utoa_append::value#2 } } ) always clobbers reg byte a +Statement [450] conio_line_text = conio_line_text + $28 [ conio_cursor_y conio_line_text conio_line_color conio_textcolor ] ( main:10::cputs:31::cputc:344::cputln:428 [ rem8u#127 y#114 hiscore#110 n#109 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:35::cputc:344::cputln:428 [ rem8u#127 y#114 hiscore#110 n#109 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:39::cputc:344::cputln:428 [ rem8u#127 y#114 hiscore#110 n#109 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:152::cputc:344::cputln:428 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:156::cputc:344::cputln:428 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:158::cputc:344::cputln:428 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:162::cputc:344::cputln:428 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:169::cputc:344::cputln:428 [ rem8u#25 y#18 n#20 hiscore#19 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:173::cputc:344::cputln:428 [ rem8u#25 y#18 n#20 hiscore#19 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:31::cputc:344::cputln:431 [ rem8u#127 y#114 hiscore#110 n#109 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:35::cputc:344::cputln:431 [ rem8u#127 y#114 hiscore#110 n#109 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:39::cputc:344::cputln:431 [ rem8u#127 y#114 hiscore#110 n#109 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:152::cputc:344::cputln:431 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:156::cputc:344::cputln:431 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:158::cputc:344::cputln:431 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:162::cputc:344::cputln:431 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:169::cputc:344::cputln:431 [ rem8u#25 y#18 n#20 hiscore#19 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:173::cputc:344::cputln:431 [ rem8u#25 y#18 n#20 hiscore#19 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } ) always clobbers reg byte a +Statement [451] conio_line_color = conio_line_color + $28 [ conio_cursor_y conio_line_text conio_line_color conio_textcolor ] ( main:10::cputs:31::cputc:344::cputln:428 [ rem8u#127 y#114 hiscore#110 n#109 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:35::cputc:344::cputln:428 [ rem8u#127 y#114 hiscore#110 n#109 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:39::cputc:344::cputln:428 [ rem8u#127 y#114 hiscore#110 n#109 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:152::cputc:344::cputln:428 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:156::cputc:344::cputln:428 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:158::cputc:344::cputln:428 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:162::cputc:344::cputln:428 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:169::cputc:344::cputln:428 [ rem8u#25 y#18 n#20 hiscore#19 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:173::cputc:344::cputln:428 [ rem8u#25 y#18 n#20 hiscore#19 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:31::cputc:344::cputln:431 [ rem8u#127 y#114 hiscore#110 n#109 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:35::cputc:344::cputln:431 [ rem8u#127 y#114 hiscore#110 n#109 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:39::cputc:344::cputln:431 [ rem8u#127 y#114 hiscore#110 n#109 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:152::cputc:344::cputln:431 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:156::cputc:344::cputln:431 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:158::cputc:344::cputln:431 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:162::cputc:344::cputln:431 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:169::cputc:344::cputln:431 [ rem8u#25 y#18 n#20 hiscore#19 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:173::cputc:344::cputln:431 [ rem8u#25 y#18 n#20 hiscore#19 cputs::s#0 conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } ) always clobbers reg byte a +Statement [452] conio_cursor_x = 0 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] ( main:10::cputs:31::cputc:344::cputln:428 [ rem8u#127 y#114 hiscore#110 n#109 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:35::cputc:344::cputln:428 [ rem8u#127 y#114 hiscore#110 n#109 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:39::cputc:344::cputln:428 [ rem8u#127 y#114 hiscore#110 n#109 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:152::cputc:344::cputln:428 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:156::cputc:344::cputln:428 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:158::cputc:344::cputln:428 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:162::cputc:344::cputln:428 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:169::cputc:344::cputln:428 [ rem8u#25 y#18 n#20 hiscore#19 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:173::cputc:344::cputln:428 [ rem8u#25 y#18 n#20 hiscore#19 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:31::cputc:344::cputln:431 [ rem8u#127 y#114 hiscore#110 n#109 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:35::cputc:344::cputln:431 [ rem8u#127 y#114 hiscore#110 n#109 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:39::cputc:344::cputln:431 [ rem8u#127 y#114 hiscore#110 n#109 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:152::cputc:344::cputln:431 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:156::cputc:344::cputln:431 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:158::cputc:344::cputln:431 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:162::cputc:344::cputln:431 [ hiscore#110 rem8u#25 y#18 n#20 score#38 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:169::cputc:344::cputln:431 [ rem8u#25 y#18 n#20 hiscore#19 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } main:10::cputs:173::cputc:344::cputln:431 [ rem8u#25 y#18 n#20 hiscore#19 cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color conio_textcolor ] { { cputc::c#0 = cputs::c#1 } } ) always clobbers reg byte a +Statement [459] divr8u::$1 = divr8u::dividend#3 & $80 [ divr8u::dividend#3 divr8u::quotient#3 divr8u::i#2 divr8u::rem#0 divr8u::$1 ] ( main:10::read_chrono:182::div16u8u:414::divr8u:440 [ hiscore#110 y#18 tu#13 peephole#12 duck#1 score#19 z#100 l div16u8u::dividend#0 divr8u::dividend#3 divr8u::quotient#3 divr8u::i#2 divr8u::rem#0 divr8u::$1 ] { { div16u8u::return#0 = div16u8u::return#2 } { divr8u::dividend#1 = divr8u::dividend#5 } { divr8u::return#0 = divr8u::return#2 } } main:10::read_chrono:182::div16u8u:414::divr8u:445 [ hiscore#110 y#18 tu#13 peephole#12 duck#1 score#19 z#100 l div16u8u::quotient_hi#0 divr8u::dividend#3 divr8u::quotient#3 divr8u::i#2 divr8u::rem#0 divr8u::$1 ] { { div16u8u::return#0 = div16u8u::return#2 } { divr8u::rem#10 = divr8u::rem#4 divr8u::rem#11 } { divr8u::dividend#2 = divr8u::dividend#5 } { divr8u::return#0 = divr8u::return#3 } } ) always clobbers reg byte a +Statement [461] divr8u::rem#1 = divr8u::rem#0 | 1 [ divr8u::dividend#3 divr8u::quotient#3 divr8u::i#2 divr8u::rem#1 ] ( main:10::read_chrono:182::div16u8u:414::divr8u:440 [ hiscore#110 y#18 tu#13 peephole#12 duck#1 score#19 z#100 l div16u8u::dividend#0 divr8u::dividend#3 divr8u::quotient#3 divr8u::i#2 divr8u::rem#1 ] { { div16u8u::return#0 = div16u8u::return#2 } { divr8u::dividend#1 = divr8u::dividend#5 } { divr8u::return#0 = divr8u::return#2 } } main:10::read_chrono:182::div16u8u:414::divr8u:445 [ hiscore#110 y#18 tu#13 peephole#12 duck#1 score#19 z#100 l div16u8u::quotient_hi#0 divr8u::dividend#3 divr8u::quotient#3 divr8u::i#2 divr8u::rem#1 ] { { div16u8u::return#0 = div16u8u::return#2 } { divr8u::rem#10 = divr8u::rem#4 divr8u::rem#11 } { divr8u::dividend#2 = divr8u::dividend#5 } { divr8u::return#0 = divr8u::return#3 } } ) always clobbers reg byte a +Statement [465] if(divr8u::rem#6DEFAULT_SCREEN + sta.z conio_line_text+1 + // [4] conio_line_color = COLORRAM -- pbuz1=pbuc1 + lda #COLORRAM + sta.z conio_line_color+1 + // [5] conio_textcolor = LIGHT_BLUE -- vbuz1=vbuc1 + lda #LIGHT_BLUE + sta.z conio_textcolor + // [6] l = 0 -- vbuz1=vbuc1 + lda #0 + sta.z l + // [7] m = 0 -- vbuz1=vbuc1 + lda #0 + sta.z m + // [8] call conio_c64_init + jsr conio_c64_init + // [9] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] + __b1_from___init1: + jmp __b1 + // __start::@1 + __b1: + // [10] call main + jsr main + jmp __breturn + // __start::@return + __breturn: + // [11] return + rts +} + // conio_c64_init +// Set initial cursor position +conio_c64_init: { + // Position cursor at current line + .label BASIC_CURSOR_LINE = $d6 + .label line = $4c + // [12] conio_c64_init::line#0 = *conio_c64_init::BASIC_CURSOR_LINE -- vbuz1=_deref_pbuc1 + lda.z BASIC_CURSOR_LINE + sta.z line + // [13] if(conio_c64_init::line#0<$19) goto conio_c64_init::@2 -- vbuz1_lt_vbuc1_then_la1 + lda.z line + cmp #$19 + bcc __b2_from_conio_c64_init + // [15] phi from conio_c64_init to conio_c64_init::@1 [phi:conio_c64_init->conio_c64_init::@1] + __b1_from_conio_c64_init: + // [15] phi conio_c64_init::line#2 = $19-1 [phi:conio_c64_init->conio_c64_init::@1#0] -- vbuz1=vbuc1 + lda #$19-1 + sta.z line + jmp __b1 + // [14] phi from conio_c64_init to conio_c64_init::@2 [phi:conio_c64_init->conio_c64_init::@2] + __b2_from_conio_c64_init: + jmp __b2 + // conio_c64_init::@2 + __b2: + // [15] phi from conio_c64_init::@2 to conio_c64_init::@1 [phi:conio_c64_init::@2->conio_c64_init::@1] + __b1_from___b2: + // [15] phi conio_c64_init::line#2 = conio_c64_init::line#0 [phi:conio_c64_init::@2->conio_c64_init::@1#0] -- register_copy + jmp __b1 + // conio_c64_init::@1 + __b1: + // [16] gotoxy::y#2 = conio_c64_init::line#2 + // [17] call gotoxy + // [304] phi from conio_c64_init::@1 to gotoxy [phi:conio_c64_init::@1->gotoxy] + gotoxy_from___b1: + // [304] phi gotoxy::y#4 = gotoxy::y#2 [phi:conio_c64_init::@1->gotoxy#0] -- register_copy + jsr gotoxy + jmp __breturn + // conio_c64_init::@return + __breturn: + // [18] return + rts +} + // main +main: { + .label __3 = $70 + .label __26 = 8 + .label __29 = 5 + .label __35 = $66 + .label __57 = $64 + .label __61 = $d + .label __66 = $b + .label __69 = $19 + .label __72 = $1b + .label __78 = $10 + .label __81 = 7 + .label __84 = 3 + .label __88 = $36 + .label __92 = $37 + .label __96 = $2e + .label __97 = $2e + .label __104 = $5d + .label __107 = $5f + .label __110 = $61 + .label __119 = $4a + .label __120 = $51 + .label __122 = $53 + .label __124 = $4a + .label __125 = $4d + .label __127 = $3a + .label __128 = $3a + .label __130 = $3c + .label __131 = $3c + .label __133 = $3e + .label __134 = $3e + .label __136 = $4f + .label __138 = $40 + .label __139 = $40 + .label __141 = $42 + .label __142 = $42 + .label __144 = $44 + .label __145 = $44 + .label __150 = $69 + .label __151 = $57 + .label __152 = $57 + .label __153 = $59 + .label __154 = $59 + .label __155 = $5b + .label __156 = $5b + .label __177 = 8 + .label __179 = $38 + .label __180 = $2e + // [19] *((char *) 36879) = 8 -- _deref_pbuc1=vbuc2 + lda #8 + sta $900f + // [20] chrout::petscii = lock -- vbuz1=vbuc1 + lda #lock + sta.z chrout.petscii + // [21] call chrout + // border and black paper + jsr chrout + jmp __b50 + // main::@50 + __b50: + // [22] chrout::petscii = lower -- vbuz1=vbuc1 + lda #lower + sta.z chrout.petscii + // [23] call chrout + //Lock UpperCase to Lowercase key + jsr chrout + jmp __b51 + // main::@51 + __b51: + // [24] m = 0 -- vbuz1=vbuc1 + lda #0 + sta.z m + jmp __b1 + //Put text in Lowercase set + // main::@1 + __b1: + // [25] if(m<$28) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 + lda.z m + cmp #$28 + bcc __b2 + // [26] phi from main::@1 to main::@3 [phi:main::@1->main::@3] + __b3_from___b1: + // [26] phi n#109 = 0 [phi:main::@1->main::@3#0] -- vbuz1=vbuc1 + lda #0 + sta.z n + // [26] phi hiscore#110 = 0 [phi:main::@1->main::@3#1] -- vwuz1=vwuc1 + lda #<0 + sta.z hiscore_1 + lda #>0 + sta.z hiscore_1+1 + // [26] phi y#114 = 0 [phi:main::@1->main::@3#2] -- vwuz1=vwuc1 + lda #<0 + sta.z y + lda #>0 + sta.z y+1 + // [26] phi rem8u#127 = 0 [phi:main::@1->main::@3#3] -- vbuz1=vbuc1 + lda #0 + sta.z rem8u + jmp __b3 + // Load udgs. From 0-->39; + // main::@3 + __b3: + // [27] call clear_screen + // [321] phi from main::@3 to clear_screen [phi:main::@3->clear_screen] + clear_screen_from___b3: + // [321] phi clear_screen::n#5 = $20 [phi:main::@3->clear_screen#0] -- vbuz1=vbuc1 + lda #$20 + sta.z clear_screen.n + jsr clear_screen + // [28] phi from main::@3 to main::@52 [phi:main::@3->main::@52] + __b52_from___b3: + jmp __b52 + // main::@52 + __b52: + // [29] call textcolor + // Clear Screen with spaces & black ink + // [334] phi from main::@52 to textcolor [phi:main::@52->textcolor] + textcolor_from___b52: + // [334] phi textcolor::color#7 = 7 [phi:main::@52->textcolor#0] -- vbuz1=vbuc1 + lda #7 + sta.z textcolor.color + jsr textcolor + // [30] phi from main::@52 to main::@53 [phi:main::@52->main::@53] + __b53_from___b52: + jmp __b53 + // main::@53 + __b53: + // [31] call cputs + // [337] phi from main::@53 to cputs [phi:main::@53->cputs] + cputs_from___b53: + // [337] phi cputs::s#11 = intro [phi:main::@53->cputs#0] -- pbuz1=pbuc1 + lda #intro + sta.z cputs.s+1 + jsr cputs + // [32] phi from main::@53 to main::@54 [phi:main::@53->main::@54] + __b54_from___b53: + jmp __b54 + // main::@54 + __b54: + // [33] call textcolor + // Yellow ink + // [334] phi from main::@54 to textcolor [phi:main::@54->textcolor] + textcolor_from___b54: + // [334] phi textcolor::color#7 = 1 [phi:main::@54->textcolor#0] -- vbuz1=vbuc1 + lda #1 + sta.z textcolor.color + jsr textcolor + // [34] phi from main::@54 to main::@55 [phi:main::@54->main::@55] + __b55_from___b54: + jmp __b55 + // main::@55 + __b55: + // [35] call cputs + // [337] phi from main::@55 to cputs [phi:main::@55->cputs] + cputs_from___b55: + // [337] phi cputs::s#11 = levels [phi:main::@55->cputs#0] -- pbuz1=pbuc1 + lda #levels + sta.z cputs.s+1 + jsr cputs + // [36] phi from main::@55 to main::@56 [phi:main::@55->main::@56] + __b56_from___b55: + jmp __b56 + // main::@56 + __b56: + // [37] call textcolor + // White + // [334] phi from main::@56 to textcolor [phi:main::@56->textcolor] + textcolor_from___b56: + // [334] phi textcolor::color#7 = 2 [phi:main::@56->textcolor#0] -- vbuz1=vbuc1 + lda #2 + sta.z textcolor.color + jsr textcolor + // [38] phi from main::@56 to main::@57 [phi:main::@56->main::@57] + __b57_from___b56: + jmp __b57 + // main::@57 + __b57: + // [39] call cputs + // [337] phi from main::@57 to cputs [phi:main::@57->cputs] + cputs_from___b57: + // [337] phi cputs::s#11 = foot [phi:main::@57->cputs#0] -- pbuz1=pbuc1 + lda #foot + sta.z cputs.s+1 + jsr cputs + jmp __b4 + // Red + // main::@4 + __b4: + // [40] l = *((char *) 197) -- vbuz1=_deref_pbuc1 + lda.z $c5 + sta.z l + // [41] l = ++ l -- vbuz1=_inc_vbuz1 + inc.z l + // [42] if(l>=5+1) goto main::@4 -- vbuz1_ge_vbuc1_then_la1 + lda.z l + cmp #5+1 + bcs __b4 + // [43] phi from main::@4 to main::@5 [phi:main::@4->main::@5] + __b5_from___b4: + jmp __b5 + // main::@5 + __b5: + // [44] call clear_screen + // wait for 1-3-5-7-9 keys only + // [321] phi from main::@5 to clear_screen [phi:main::@5->clear_screen] + clear_screen_from___b5: + // [321] phi clear_screen::n#5 = 4 [phi:main::@5->clear_screen#0] -- vbuz1=vbuc1 + lda #4 + sta.z clear_screen.n + jsr clear_screen + jmp __b58 + // main::@58 + __b58: + // [45] *((char *) 36869) = $ff -- _deref_pbuc1=vbuc2 + lda #$ff + sta $9005 + // [46] chrout::petscii = reverse_on -- vbuz1=vbuc1 + lda #reverse_on + sta.z chrout.petscii + // [47] call chrout + // Graphic mode + jsr chrout + jmp __b59 + // main::@59 + __b59: + // [48] chrout::petscii = red -- vbuz1=vbuc1 + lda #red + sta.z chrout.petscii + // [49] call chrout + jsr chrout + jmp __b60 + // main::@60 + __b60: + // [50] chrout::petscii = down -- vbuz1=vbuc1 + lda #down + sta.z chrout.petscii + // [51] call chrout + jsr chrout + // [52] phi from main::@60 to main::@6 [phi:main::@60->main::@6] + __b6_from___b60: + // [52] phi n#89 = n#109 [phi:main::@60->main::@6#0] -- register_copy + // [52] phi k#101 = 1 [phi:main::@60->main::@6#1] -- vbuz1=vbuc1 + lda #1 + sta.z k + jmp __b6 + //for (z=1;z<23;z++) { POKE(7680+z*22,230);POKE(c+7680+z*22,2); POKE(7679+z*22,230); POKE(c+7679+z*22,2); } // 23 rows * 22 columns (7680 to 8185). 506 positions. + //k=1; do { chrout(brick); POKE(211,20); chrout(brick); ++k; } while (k<23); + //for (k=1;k<22;k++) { chrout(brick); POKE(211,22); chrout(brick); }; // 23 rows * 22 columns (7680 to 8185). 506 positions. + // main::@6 + __b6: + // [53] if(k#101<$16) goto main::@7 -- vbuz1_lt_vbuc1_then_la1 + lda.z k + cmp #$16 + bcc __b7 + jmp __b8 + // main::@8 + __b8: + // [54] chrout::petscii = brick -- vbuz1=vbuc1 + lda #brick + sta.z chrout.petscii + // [55] call chrout + // 23 rows * 22 columns (7680 to 8185). 506 positions. + jsr chrout + jmp __b61 + // main::@61 + __b61: + // [56] *((char *) 8185) = brick -- _deref_pbuc1=vbuc2 + lda #brick + sta $1ff9 + // [57] *((char *)$1ff9+c) = 2 -- _deref_pbuc1=vbuc2 + lda #2 + sta $1ff9+c + // [58] chrout::petscii = home -- vbuz1=vbuc1 + lda #home + sta.z chrout.petscii + // [59] call chrout + //last brick from last line (#23) to avoid scrolling + jsr chrout + jmp __b62 + // main::@62 + __b62: + // [60] if(l<1+1) goto main::@12 -- vbuz1_lt_vbuc1_then_la1 + lda.z l + cmp #1+1 + bcc __b12_from___b62 + // [61] phi from main::@62 to main::@13 [phi:main::@62->main::@13] + __b13_from___b62: + // [61] phi z#28 = 1 [phi:main::@62->main::@13#0] -- vwuz1=vbuc1 + lda #<1 + sta.z z_1 + lda #>1 + sta.z z_1+1 + jmp __b13 + // [61] phi from main::@73 to main::@13 [phi:main::@73->main::@13] + __b13_from___b73: + // [61] phi z#28 = z#9 [phi:main::@73->main::@13#0] -- register_copy + jmp __b13 + // main::@13 + __b13: + // [62] random::k#0 = 7 - l -- vbuz1=vbuc1_minus_vbuz2 + lda #7 + sec + sbc.z l + sta.z random.k + // [63] main::$177 = l << 1 -- vbuz1=vbuz2_rol_1 + lda.z l + asl + sta.z __177 + // [64] main::$26 = main::$177 + l -- vbuz1=vbuz1_plus_vbuz2 + lda.z __26 + clc + adc.z l + sta.z __26 + // [65] random::n#0 = $1a - main::$26 -- vbuz1=vbuc1_minus_vbuz1 + lda #$1a + sec + sbc.z random.n + sta.z random.n + // [66] call random + // Write differential random bricks depending on 'l' level choosen + // [345] phi from main::@13 to random [phi:main::@13->random] + random_from___b13: + // [345] phi random::n#4 = random::n#0 [phi:main::@13->random#0] -- register_copy + // [345] phi random::k#4 = random::k#0 [phi:main::@13->random#1] -- register_copy + jsr random + jmp __b71 + // main::@71 + __b71: + // [67] main::$29 = z#28 + m -- vwuz1=vwuz2_plus_vbuz3 + lda.z m + clc + adc.z z_1 + sta.z __29 + lda #0 + adc.z z_1+1 + sta.z __29+1 + // [68] if(main::$29<=$1f9) goto main::@14 -- vwuz1_le_vwuc1_then_la1 + lda.z __29+1 + cmp #>$1f9 + bne !+ + lda.z __29 + cmp #<$1f9 + !: + bcc __b14_from___b71 + beq __b14_from___b71 + // [69] phi from main::@71 main::@73 to main::@12 [phi:main::@71/main::@73->main::@12] + __b12_from___b71: + __b12_from___b73: + // [69] phi z#128 = z#28 [phi:main::@71/main::@73->main::@12#0] -- register_copy + jmp __b12 + // [69] phi from main::@62 to main::@12 [phi:main::@62->main::@12] + __b12_from___b62: + // [69] phi z#128 = 1 [phi:main::@62->main::@12#0] -- vwuz1=vbuc1 + lda #<1 + sta.z z_1 + lda #>1 + sta.z z_1+1 + jmp __b12 + // main::@12 + __b12: + // [70] *((char *) 36878) = $f -- _deref_pbuc1=vbuc2 + lda #$f + sta $900e + // [71] chrout::petscii = home -- vbuz1=vbuc1 + lda #home + sta.z chrout.petscii + // [72] call chrout + // Duck #1 + jsr chrout + jmp __b65 + // main::@65 + __b65: + // [73] chrout::petscii = yellow -- vbuz1=vbuc1 + lda #yellow + sta.z chrout.petscii + // [74] call chrout + jsr chrout + jmp __b66 + // main::@66 + __b66: + // [75] chrout::petscii = $50 -- vbuz1=vbuc1 + lda #$50 + sta.z chrout.petscii + // [76] call chrout + jsr chrout + jmp __b67 + // main::@67 + __b67: + // [77] chrout::petscii = $54 -- vbuz1=vbuc1 + lda #$54 + sta.z chrout.petscii + // [78] call chrout + jsr chrout + jmp __b68 + // main::@68 + __b68: + // [79] chrout::petscii = $53 -- vbuz1=vbuc1 + lda #$53 + sta.z chrout.petscii + // [80] call chrout + jsr chrout + jmp __b69 + // main::@69 + __b69: + // [81] chrout::petscii = $3a -- vbuz1=vbuc1 + lda #$3a + sta.z chrout.petscii + // [82] call chrout + jsr chrout + jmp __b70 + // main::@70 + __b70: + // [83] *((char *) 211) = $12 -- _deref_pbuc1=vbuc2 + lda #$12 + sta.z $d3 + // [84] phi from main::@70 to main::@17 [phi:main::@70->main::@17] + __b17_from___b70: + // [84] phi j#13 = 0 [phi:main::@70->main::@17#0] -- vbuz1=vbuc1 + lda #0 + sta.z j_1 + jmp __b17 + // jump to Column 18 + // main::@17 + __b17: + // [85] if(j#13<4) goto main::@18 -- vbuz1_lt_vbuc1_then_la1 + lda.z j_1 + cmp #4 + bcc __b18 + // [86] phi from main::@17 to main::@19 [phi:main::@17->main::@19] + __b19_from___b17: + jmp __b19 + // main::@19 + __b19: + // [87] call write_score + // Write 'TM:9', yellow + // [351] phi from main::@19 to write_score [phi:main::@19->write_score] + write_score_from___b19: + // [351] phi score#13 = 0 [phi:main::@19->write_score#0] -- vwuz1=vbuc1 + lda #<0 + sta.z score + lda #>0 + sta.z score+1 + jsr write_score + jmp __b75 + // main::@75 + __b75: + // [88] chrout::petscii = home -- vbuz1=vbuc1 + lda #home + sta.z chrout.petscii + // [89] call chrout + // Write Score (yellow) + jsr chrout + jmp __b76 + // main::@76 + __b76: + // [90] chrout::petscii = green -- vbuz1=vbuc1 + lda #green + sta.z chrout.petscii + // [91] call chrout + jsr chrout + jmp __b77 + // main::@77 + __b77: + // [92] *((char *) 211) = $a -- _deref_pbuc1=vbuc2 + lda #$a + sta.z $d3 + // [93] phi from main::@77 to main::@20 [phi:main::@77->main::@20] + __b20_from___b77: + // [93] phi j#16 = 0 [phi:main::@77->main::@20#0] -- vbuz1=vbuc1 + lda #0 + sta.z j_2 + jmp __b20 + // Jump to column 10 + // main::@20 + __b20: + // [94] if(j#16<5) goto main::@21 -- vbuz1_lt_vbuc1_then_la1 + lda.z j_2 + cmp #5 + bcc __b21 + // [95] phi from main::@20 to main::@22 [phi:main::@20->main::@22] + __b22_from___b20: + // [95] phi n#52 = n#89 [phi:main::@20->main::@22#0] -- register_copy + // [95] phi peephole#52 = $1f1f [phi:main::@20->main::@22#1] -- vwuz1=vwuc1 + lda #<$1f1f + sta.z peephole + lda #>$1f1f + sta.z peephole+1 + // [95] phi z#102 = z#128 [phi:main::@20->main::@22#2] -- register_copy + // [95] phi y#49 = y#114 [phi:main::@20->main::@22#3] -- register_copy + // [95] phi rem8u#48 = rem8u#127 [phi:main::@20->main::@22#4] -- register_copy + // [95] phi tu#13 = 1 [phi:main::@20->main::@22#5] -- vwuz1=vbuc1 + lda #<1 + sta.z tu + lda #>1 + sta.z tu+1 + jmp __b22 + // Write 'DUCK', green + // [95] phi from main::@87 to main::@22 [phi:main::@87->main::@22] + __b22_from___b87: + // [95] phi n#52 = n#20 [phi:main::@87->main::@22#0] -- register_copy + // [95] phi peephole#52 = peephole#12 [phi:main::@87->main::@22#1] -- register_copy + // [95] phi z#102 = z#25 [phi:main::@87->main::@22#2] -- register_copy + // [95] phi y#49 = y#18 [phi:main::@87->main::@22#3] -- register_copy + // [95] phi rem8u#48 = rem8u#25 [phi:main::@87->main::@22#4] -- register_copy + // [95] phi tu#13 = tu#1 [phi:main::@87->main::@22#5] -- register_copy + jmp __b22 + // main::@22 + __b22: + // [96] chrout::petscii = home -- vbuz1=vbuc1 + lda #home + sta.z chrout.petscii + // [97] call chrout + jsr chrout + jmp __b79 + // main::@79 + __b79: + // [98] chrout::petscii = green -- vbuz1=vbuc1 + lda #green + sta.z chrout.petscii + // [99] call chrout + jsr chrout + jmp __b80 + // main::@80 + __b80: + // [100] chrout::petscii = reverse_on -- vbuz1=vbuc1 + lda #reverse_on + sta.z chrout.petscii + // [101] call chrout + jsr chrout + jmp __b81 + // main::@81 + __b81: + // [102] *((char *) 211) = $f -- _deref_pbuc1=vbuc2 + lda #$f + sta.z $d3 + // [103] if(tu#13<$a) goto main::@23 -- vwuz1_lt_vbuc1_then_la1 + // Jump to column 15 + lda.z tu+1 + bne !+ + lda.z tu + cmp #$a + bcc __b23 + !: + jmp __b45 + // main::@45 + __b45: + // [104] chrout::petscii = $31 -- vbuz1=vbuc1 + lda #$31 + sta.z chrout.petscii + // [105] call chrout + jsr chrout + jmp __b82 + // main::@82 + __b82: + // [106] chrout::petscii = $30 -- vbuz1=vbuc1 + lda #$30 + sta.z chrout.petscii + // [107] call chrout + jsr chrout + // [108] phi from main::@103 main::@104 main::@105 main::@106 main::@23 main::@82 main::@84 to main::@24 [phi:main::@103/main::@104/main::@105/main::@106/main::@23/main::@82/main::@84->main::@24] + __b24_from___b103: + __b24_from___b104: + __b24_from___b105: + __b24_from___b106: + __b24_from___b23: + __b24_from___b82: + __b24_from___b84: + jmp __b24 + // Write duck number + // main::@24 + __b24: + // [109] call random + // [345] phi from main::@24 to random [phi:main::@24->random] + random_from___b24: + // [345] phi random::n#4 = $ff [phi:main::@24->random#0] -- vbuz1=vbuc1 + lda #$ff + sta.z random.n + // [345] phi random::k#4 = 0 [phi:main::@24->random#1] -- vbuz1=vbuc1 + lda #0 + sta.z random.k + jsr random + jmp __b83 + // main::@83 + __b83: + // [110] duck#0 = m -- vwuz1=vbuz2 + lda.z m + sta.z duck + lda #0 + sta.z duck+1 + // [111] call random + // [345] phi from main::@83 to random [phi:main::@83->random] + random_from___b83: + // [345] phi random::n#4 = $ff [phi:main::@83->random#0] -- vbuz1=vbuc1 + lda #$ff + sta.z random.n + // [345] phi random::k#4 = 0 [phi:main::@83->random#1] -- vbuz1=vbuc1 + lda #0 + sta.z random.k + jsr random + jmp __b84 + // main::@84 + __b84: + // [112] main::$61 = m + $1e15 -- vwuz1=vbuz2_plus_vwuc1 + lda.z m + clc + adc #<$1e15 + sta.z __61 + lda #>$1e15 + adc #0 + sta.z __61+1 + // [113] duck#1 = main::$61 + duck#0 -- vwuz1=vwuz2_plus_vwuz1 + clc + lda.z duck + adc.z __61 + sta.z duck + lda.z duck+1 + adc.z __61+1 + sta.z duck+1 + // [114] main::$66 = duck#1 + 1 -- vwuz1=vwuz2_plus_1 + clc + lda.z duck + adc #1 + sta.z __66 + lda.z duck+1 + adc #0 + sta.z __66+1 + // [115] main::$69 = duck#1 + $16 -- vwuz1=vwuz2_plus_vbuc1 + lda #$16 + clc + adc.z duck + sta.z __69 + lda #0 + adc.z duck+1 + sta.z __69+1 + // [116] main::$72 = duck#1 + $17 -- vwuz1=vwuz2_plus_vbuc1 + lda #$17 + clc + adc.z duck + sta.z __72 + lda #0 + adc.z duck+1 + sta.z __72+1 + // [117] if(duck#1>$1fe3) goto main::@24 -- vwuz1_gt_vwuc1_then_la1 + lda #>$1fe3 + cmp.z duck+1 + bcc __b24_from___b84 + bne !+ + lda #<$1fe3 + cmp.z duck + bcc __b24_from___b84 + !: + jmp __b106 + // main::@106 + __b106: + // [118] if(*((char *)duck#1)==brick) goto main::@24 -- _deref_pbuz1_eq_vbuc1_then_la1 + lda #brick + ldy #0 + cmp (duck),y + beq __b24_from___b106 + jmp __b105 + // main::@105 + __b105: + // [119] if(*((char *)main::$66)==brick) goto main::@24 -- _deref_pbuz1_eq_vbuc1_then_la1 + lda #brick + ldy #0 + cmp (__66),y + beq __b24_from___b105 + jmp __b104 + // main::@104 + __b104: + // [120] if(*((char *)main::$69)==brick) goto main::@24 -- _deref_pbuz1_eq_vbuc1_then_la1 + lda #brick + ldy #0 + cmp (__69),y + beq __b24_from___b104 + jmp __b103 + // main::@103 + __b103: + // [121] if(*((char *)main::$72)==brick) goto main::@24 -- _deref_pbuz1_eq_vbuc1_then_la1 + lda #brick + ldy #0 + cmp (__72),y + beq __b24_from___b103 + // [122] phi from main::@103 to main::@25 [phi:main::@103->main::@25] + __b25_from___b103: + jmp __b25 + // main::@25 + __b25: + // [123] call chrono_restart + jsr chrono_restart + // [124] phi from main::@25 to main::@26 [phi:main::@25->main::@26] + __b26_from___b25: + // [124] phi n#20 = n#52 [phi:main::@25->main::@26#0] -- register_copy + // [124] phi peephole#12 = peephole#52 [phi:main::@25->main::@26#1] -- register_copy + // [124] phi z#100 = z#102 [phi:main::@25->main::@26#2] -- register_copy + // [124] phi y#18 = y#49 [phi:main::@25->main::@26#3] -- register_copy + // [124] phi rem8u#25 = rem8u#48 [phi:main::@25->main::@26#4] -- register_copy + // [124] phi score#19 = score#38 [phi:main::@25->main::@26#5] -- register_copy + // [124] phi time#11 = 0 [phi:main::@25->main::@26#6] -- vwuz1=vbuc1 + lda #<0 + sta.z time + lda #>0 + sta.z time+1 + jmp __b26 + // main::@26 + __b26: + // [125] if(time#11<$a) goto main::@27 -- vwuz1_lt_vbuc1_then_la1 + lda.z time+1 + bne !+ + lda.z time + cmp #$a + bcc __b27_from___b26 + !: + jmp __b28 + // main::@28 + __b28: + // [126] tu#1 = ++ tu#13 -- vwuz1=_inc_vwuz1 + inc.z tu + bne !+ + inc.z tu+1 + !: + // [127] score#4 = score#19 - $a -- vwuz1=vwuz1_minus_vbuc1 + sec + lda.z score + sbc #$a + sta.z score + lda.z score+1 + sbc #0 + sta.z score+1 + // [128] call write_score + // [351] phi from main::@28 to write_score [phi:main::@28->write_score] + write_score_from___b28: + // [351] phi score#13 = score#4 [phi:main::@28->write_score#0] -- register_copy + jsr write_score + jmp __b86 + // main::@86 + __b86: + // [129] *((char *) 36877) = $82 -- _deref_pbuc1=vbuc2 + lda #$82 + sta $900d + // [130] call wait + // [381] phi from main::@86 to wait [phi:main::@86->wait] + wait_from___b86: + // [381] phi z#53 = z#100 [phi:main::@86->wait#0] -- register_copy + // [381] phi wait::n#6 = $14 [phi:main::@86->wait#1] -- vbuz1=vbuc1 + lda #$14 + sta.z wait.n + jsr wait + jmp __b87 + // main::@87 + __b87: + // [131] *((char *) 36877) = 0 -- _deref_pbuc1=vbuc2 + lda #0 + sta $900d + // [132] main::$150 = duck#1 + c -- vwuz1=vwuz2_plus_vwuc1 + lda.z duck + clc + adc #c + sta.z __150+1 + // [133] *((char *)main::$150) = 0 -- _deref_pbuz1=vbuc1 + lda #0 + ldy #0 + sta (__150),y + // [134] main::$151 = duck#1 -- vwuz1=vwuz2 + lda.z duck + sta.z __151 + lda.z duck+1 + sta.z __151+1 + // [135] main::$152 = main::$151 + 1+c -- vwuz1=vwuz1_plus_vwuc1 + lda.z __152 + clc + adc #<1+c + sta.z __152 + lda.z __152+1 + adc #>1+c + sta.z __152+1 + // [136] *((char *)main::$152) = 0 -- _deref_pbuz1=vbuc1 + lda #0 + ldy #0 + sta (__152),y + // [137] main::$153 = duck#1 -- vwuz1=vwuz2 + lda.z duck + sta.z __153 + lda.z duck+1 + sta.z __153+1 + // [138] main::$154 = main::$153 + $16+c -- vwuz1=vwuz1_plus_vwuc1 + lda.z __154 + clc + adc #<$16+c + sta.z __154 + lda.z __154+1 + adc #>$16+c + sta.z __154+1 + // [139] *((char *)main::$154) = 0 -- _deref_pbuz1=vbuc1 + lda #0 + ldy #0 + sta (__154),y + // [140] main::$155 = duck#1 -- vwuz1=vwuz2 + lda.z duck + sta.z __155 + lda.z duck+1 + sta.z __155+1 + // [141] main::$156 = main::$155 + $17+c -- vwuz1=vwuz1_plus_vwuc1 + lda.z __156 + clc + adc #<$17+c + sta.z __156 + lda.z __156+1 + adc #>$17+c + sta.z __156+1 + // [142] *((char *)main::$156) = 0 -- _deref_pbuz1=vbuc1 + lda #0 + ldy #0 + sta (__156),y + // [143] if(tu#1<$b) goto main::@22 -- vwuz1_lt_vbuc1_then_la1 + lda.z tu+1 + bne !+ + lda.z tu + cmp #$b + bcc __b22_from___b87 + !: + // [144] phi from main::@87 to main::@44 [phi:main::@87->main::@44] + __b44_from___b87: + jmp __b44 + // main::@44 + __b44: + // [145] call clear_screen + // 10 ducks + // [321] phi from main::@44 to clear_screen [phi:main::@44->clear_screen] + clear_screen_from___b44: + // [321] phi clear_screen::n#5 = 4 [phi:main::@44->clear_screen#0] -- vbuz1=vbuc1 + lda #4 + sta.z clear_screen.n + jsr clear_screen + jmp __b91 + // main::@91 + __b91: + // [146] *((char *) 36869) = $f0 -- _deref_pbuc1=vbuc2 + lda #$f0 + sta $9005 + // [147] chrout::petscii = lower -- vbuz1=vbuc1 + lda #lower + sta.z chrout.petscii + // [148] call chrout + jsr chrout + // [149] phi from main::@91 to main::@92 [phi:main::@91->main::@92] + __b92_from___b91: + jmp __b92 + // main::@92 + __b92: + // [150] call textcolor + // Return to text mode, lowcase + // [334] phi from main::@92 to textcolor [phi:main::@92->textcolor] + textcolor_from___b92: + // [334] phi textcolor::color#7 = 7 [phi:main::@92->textcolor#0] -- vbuz1=vbuc1 + lda #7 + sta.z textcolor.color + jsr textcolor + // [151] phi from main::@92 to main::@93 [phi:main::@92->main::@93] + __b93_from___b92: + jmp __b93 + // main::@93 + __b93: + // [152] call cputs + // [337] phi from main::@93 to cputs [phi:main::@93->cputs] + cputs_from___b93: + // [337] phi cputs::s#11 = game_over [phi:main::@93->cputs#0] -- pbuz1=pbuc1 + lda #game_over + sta.z cputs.s+1 + jsr cputs + // [153] phi from main::@93 to main::@94 [phi:main::@93->main::@94] + __b94_from___b93: + jmp __b94 + // main::@94 + __b94: + // [154] call textcolor + // Yellow + // [334] phi from main::@94 to textcolor [phi:main::@94->textcolor] + textcolor_from___b94: + // [334] phi textcolor::color#7 = 2 [phi:main::@94->textcolor#0] -- vbuz1=vbuc1 + lda #2 + sta.z textcolor.color + jsr textcolor + // [155] phi from main::@94 to main::@95 [phi:main::@94->main::@95] + __b95_from___b94: + jmp __b95 + // main::@95 + __b95: + // [156] call cputs + // [337] phi from main::@95 to cputs [phi:main::@95->cputs] + cputs_from___b95: + // [337] phi cputs::s#11 = your_score [phi:main::@95->cputs#0] -- pbuz1=pbuc1 + lda #your_score + sta.z cputs.s+1 + jsr cputs + // [157] phi from main::@95 to main::@96 [phi:main::@95->main::@96] + __b96_from___b95: + jmp __b96 + // main::@96 + __b96: + // [158] call cputs + // [337] phi from main::@96 to cputs [phi:main::@96->cputs] + cputs_from___b96: + // [337] phi cputs::s#11 = buffer [phi:main::@96->cputs#0] -- pbuz1=pbuc1 + lda #buffer + sta.z cputs.s+1 + jsr cputs + // [159] phi from main::@96 to main::@97 [phi:main::@96->main::@97] + __b97_from___b96: + jmp __b97 + // main::@97 + __b97: + // [160] call textcolor + // Red + // [334] phi from main::@97 to textcolor [phi:main::@97->textcolor] + textcolor_from___b97: + // [334] phi textcolor::color#7 = 3 [phi:main::@97->textcolor#0] -- vbuz1=vbuc1 + lda #3 + sta.z textcolor.color + jsr textcolor + // [161] phi from main::@97 to main::@98 [phi:main::@97->main::@98] + __b98_from___b97: + jmp __b98 + // main::@98 + __b98: + // [162] call cputs + // [337] phi from main::@98 to cputs [phi:main::@98->cputs] + cputs_from___b98: + // [337] phi cputs::s#11 = high_score [phi:main::@98->cputs#0] -- pbuz1=pbuc1 + lda #high_score + sta.z cputs.s+1 + jsr cputs + jmp __b99 + // main::@99 + __b99: + // [163] if(score#38<=hiscore#110) goto main::@114 -- vwuz1_le_vwuz2_then_la1 + lda.z score+1 + cmp.z hiscore_1+1 + bne !+ + lda.z score + cmp.z hiscore_1 + beq __b114 + !: + bcc __b114 + // [165] phi from main::@114 main::@99 to main::@46 [phi:main::@114/main::@99->main::@46] + __b46_from___b114: + __b46_from___b99: + // [165] phi hiscore#19 = hiscore#124 [phi:main::@114/main::@99->main::@46#0] -- register_copy + jmp __b46 + // main::@114 + __b114: + // [164] hiscore#124 = hiscore#110 -- vwuz1=vwuz2 + lda.z hiscore_1 + sta.z hiscore + lda.z hiscore_1+1 + sta.z hiscore+1 + jmp __b46_from___b114 + // main::@46 + __b46: + // [166] utoa::value#2 = hiscore#19 -- vwuz1=vwuz2 + lda.z hiscore + sta.z utoa.value + lda.z hiscore+1 + sta.z utoa.value+1 + // [167] call utoa + // [390] phi from main::@46 to utoa [phi:main::@46->utoa] + utoa_from___b46: + // [390] phi utoa::value#10 = utoa::value#2 [phi:main::@46->utoa#0] -- register_copy + jsr utoa + // [168] phi from main::@46 to main::@100 [phi:main::@46->main::@100] + __b100_from___b46: + jmp __b100 + // main::@100 + __b100: + // [169] call cputs + // [337] phi from main::@100 to cputs [phi:main::@100->cputs] + cputs_from___b100: + // [337] phi cputs::s#11 = buffer [phi:main::@100->cputs#0] -- pbuz1=pbuc1 + lda #buffer + sta.z cputs.s+1 + jsr cputs + // [170] phi from main::@100 to main::@101 [phi:main::@100->main::@101] + __b101_from___b100: + jmp __b101 + // main::@101 + __b101: + // [171] call textcolor + // Cyan + // [334] phi from main::@101 to textcolor [phi:main::@101->textcolor] + textcolor_from___b101: + // [334] phi textcolor::color#7 = 1 [phi:main::@101->textcolor#0] -- vbuz1=vbuc1 + lda #1 + sta.z textcolor.color + jsr textcolor + // [172] phi from main::@101 to main::@102 [phi:main::@101->main::@102] + __b102_from___b101: + jmp __b102 + // main::@102 + __b102: + // [173] call cputs + // [337] phi from main::@102 to cputs [phi:main::@102->cputs] + cputs_from___b102: + // [337] phi cputs::s#11 = play_again [phi:main::@102->cputs#0] -- pbuz1=pbuc1 + lda #play_again + sta.z cputs.s+1 + jsr cputs + jmp __b47 + // white + // main::@47 + __b47: + // [174] j#19 = *((char *) 197) -- vbuz1=_deref_pbuc1 + lda.z $c5 + sta.z j_3 + // [175] if(j#19==$b) goto main::@48 -- vbuz1_eq_vbuc1_then_la1 + lda #$b + cmp.z j_3 + beq __b48 + jmp __b112 + // main::@112 + __b112: + // [176] if(j#19!=$1c) goto main::@47 -- vbuz1_neq_vbuc1_then_la1 + lda #$1c + cmp.z j_3 + bne __b47 + jmp __b48 + // main::@48 + __b48: + // [177] if(j#19==$b) goto main::@113 -- vbuz1_eq_vbuc1_then_la1 + lda #$b + cmp.z j_3 + beq __b113 + jmp __b49 + // main::@49 + __b49: + // asm { jsr$FD22 } + // N pressed. Exit game + jsr $fd22 + jmp __breturn + // main::@return + __breturn: + // [179] return + rts + // main::@113 + __b113: + // [180] hiscore#123 = hiscore#19 -- vwuz1=vwuz2 + lda.z hiscore + sta.z hiscore_1 + lda.z hiscore+1 + sta.z hiscore_1+1 + // [26] phi from main::@113 to main::@3 [phi:main::@113->main::@3] + __b3_from___b113: + // [26] phi n#109 = n#20 [phi:main::@113->main::@3#0] -- register_copy + // [26] phi hiscore#110 = hiscore#123 [phi:main::@113->main::@3#1] -- register_copy + // [26] phi y#114 = y#18 [phi:main::@113->main::@3#2] -- register_copy + // [26] phi rem8u#127 = rem8u#25 [phi:main::@113->main::@3#3] -- register_copy + jmp __b3 + // [181] phi from main::@26 to main::@27 [phi:main::@26->main::@27] + __b27_from___b26: + jmp __b27 + // main::@27 + __b27: + // [182] call read_chrono + jsr read_chrono + jmp __b85 + // main::@85 + __b85: + // [183] m = *((char *) 37151) -- vbuz1=_deref_pbuc1 + // Joystick routine + lda $911f + sta.z m + // [184] *((char *) 37154) = $7f -- _deref_pbuc1=vbuc2 + lda #$7f + sta $9122 + // [185] n#14 = *((char *) 37152) -- vbuz1=_deref_pbuc1 + lda $9120 + sta.z n + // [186] *((char *) 37154) = $ff -- _deref_pbuc1=vbuc2 + lda #$ff + sta $9122 + // [187] main::$78 = $10 & m -- vbuz1=vbuc1_band_vbuz2 + lda #$10 + and.z m + sta.z __78 + // [188] if(main::$78!=0) goto main::@29 -- vbuz1_neq_0_then_la1 + lda.z __78 + bne __b29_from___b85 + jmp __b37 + // main::@37 + __b37: + // [189] y#0 = -- y#18 -- vwuz1=_dec_vwuz1 + lda.z y + bne !+ + dec.z y+1 + !: + dec.z y + // [190] phi from main::@37 main::@85 to main::@29 [phi:main::@37/main::@85->main::@29] + __b29_from___b37: + __b29_from___b85: + // [190] phi y#10 = y#0 [phi:main::@37/main::@85->main::@29#0] -- register_copy + jmp __b29 + // main::@29 + __b29: + // [191] main::$81 = $80 & n#14 -- vbuz1=vbuc1_band_vbuz2 + lda #$80 + and.z n + sta.z __81 + // [192] if(main::$81!=0) goto main::@30 -- vbuz1_neq_0_then_la1 + lda.z __81 + bne __b30_from___b29 + jmp __b38 + // main::@38 + __b38: + // [193] y#1 = ++ y#10 -- vwuz1=_inc_vwuz1 + inc.z y + bne !+ + inc.z y+1 + !: + // [194] phi from main::@29 main::@38 to main::@30 [phi:main::@29/main::@38->main::@30] + __b30_from___b29: + __b30_from___b38: + // [194] phi y#11 = y#10 [phi:main::@29/main::@38->main::@30#0] -- register_copy + jmp __b30 + // main::@30 + __b30: + // [195] main::$84 = 4 & m -- vbuz1=vbuc1_band_vbuz2 + lda #4 + and.z m + sta.z __84 + // [196] if(main::$84!=0) goto main::@31 -- vbuz1_neq_0_then_la1 + lda.z __84 + bne __b31_from___b30 + jmp __b39 + // main::@39 + __b39: + // [197] y#2 = y#11 - $16 -- vwuz1=vwuz1_minus_vbuc1 + sec + lda.z y + sbc #$16 + sta.z y + lda.z y+1 + sbc #0 + sta.z y+1 + // [198] phi from main::@30 main::@39 to main::@31 [phi:main::@30/main::@39->main::@31] + __b31_from___b30: + __b31_from___b39: + // [198] phi y#12 = y#11 [phi:main::@30/main::@39->main::@31#0] -- register_copy + jmp __b31 + // main::@31 + __b31: + // [199] main::$88 = 8 & m -- vbuz1=vbuc1_band_vbuz2 + lda #8 + and.z m + sta.z __88 + // [200] if(main::$88!=0) goto main::@32 -- vbuz1_neq_0_then_la1 + lda.z __88 + bne __b32_from___b31 + jmp __b40 + // main::@40 + __b40: + // [201] y#3 = y#12 + $16 -- vwuz1=vwuz1_plus_vbuc1 + lda #$16 + clc + adc.z y + sta.z y + bcc !+ + inc.z y+1 + !: + // [202] phi from main::@31 main::@40 to main::@32 [phi:main::@31/main::@40->main::@32] + __b32_from___b31: + __b32_from___b40: + // [202] phi y#13 = y#12 [phi:main::@31/main::@40->main::@32#0] -- register_copy + jmp __b32 + // main::@32 + __b32: + // [203] main::$92 = $20 & m -- vbuz1=vbuc1_band_vbuz2 + lda #$20 + and.z m + sta.z __92 + // [204] if(main::$92!=0) goto main::@33 -- vbuz1_neq_0_then_la1 + lda.z __92 + bne __b33_from___b32 + jmp __b41 + // main::@41 + __b41: + // [205] *((char *) 36877) = $82 -- _deref_pbuc1=vbuc2 + lda #$82 + sta $900d + // [206] if(peephole#12!=duck#1) goto main::@34 -- vwuz1_neq_vwuz2_then_la1 + lda.z peephole+1 + cmp.z duck+1 + bne __b34 + lda.z peephole + cmp.z duck + bne __b34 + jmp __b42 + // main::@42 + __b42: + // [207] main::$96 = $c - div16u8u::return#2 -- vwuz1=vwuc1_minus_vwuz2 + sec + lda #<$c + sbc.z div16u8u.return_1 + sta.z __96 + lda #>$c + sbc.z div16u8u.return_1+1 + sta.z __96+1 + // [208] main::$179 = main::$96 << 2 -- vwuz1=vwuz2_rol_2 + lda.z __96 + asl + sta.z __179 + lda.z __96+1 + rol + sta.z __179+1 + asl.z __179 + rol.z __179+1 + // [209] main::$180 = main::$179 + main::$96 -- vwuz1=vwuz2_plus_vwuz1 + clc + lda.z __180 + adc.z __179 + sta.z __180 + lda.z __180+1 + adc.z __179+1 + sta.z __180+1 + // [210] main::$97 = main::$180 << 1 -- vwuz1=vwuz1_rol_1 + asl.z __97 + rol.z __97+1 + // [211] score#8 = score#19 + main::$97 -- vwuz1=vwuz1_plus_vwuz2 + clc + lda.z score + adc.z __97 + sta.z score + lda.z score+1 + adc.z __97+1 + sta.z score+1 + // [212] call wait + // [381] phi from main::@42 to wait [phi:main::@42->wait] + wait_from___b42: + // [381] phi z#53 = z#100 [phi:main::@42->wait#0] -- register_copy + // [381] phi wait::n#6 = $a [phi:main::@42->wait#1] -- vbuz1=vbuc1 + lda #$a + sta.z wait.n + jsr wait + // [213] phi from main::@42 to main::@35 [phi:main::@42->main::@35] + __b35_from___b42: + // [213] phi score#81 = score#8 [phi:main::@42->main::@35#0] -- register_copy + // [213] phi time#38 = $a [phi:main::@42->main::@35#1] -- vwuz1=vbuc1 + lda #<$a + sta.z time + lda #>$a + sta.z time+1 + jmp __b35 + // main::@35 + __b35: + // [214] *((char *) 36877) = 0 -- _deref_pbuc1=vbuc2 + lda #0 + sta $900d + // [215] phi from main::@32 main::@35 to main::@33 [phi:main::@32/main::@35->main::@33] + __b33_from___b32: + __b33_from___b35: + // [215] phi score#43 = score#19 [phi:main::@32/main::@35->main::@33#0] -- register_copy + // [215] phi time#17 = div16u8u::return#2 [phi:main::@32/main::@35->main::@33#1] -- register_copy + // [215] phi z#48 = z#100 [phi:main::@32/main::@35->main::@33#2] -- register_copy + jmp __b33 + // main::@33 + __b33: + // [216] main::$104 = y#13 + 1 -- vwuz1=vwuz2_plus_1 + clc + lda.z y + adc #1 + sta.z __104 + lda.z y+1 + adc #0 + sta.z __104+1 + // [217] main::$107 = y#13 + $16 -- vwuz1=vwuz2_plus_vbuc1 + lda #$16 + clc + adc.z y + sta.z __107 + lda #0 + adc.z y+1 + sta.z __107+1 + // [218] main::$110 = y#13 + $17 -- vwuz1=vwuz2_plus_vbuc1 + lda #$17 + clc + adc.z y + sta.z __110 + lda #0 + adc.z y+1 + sta.z __110+1 + // [219] if(*((char *)y#13)==brick) goto main::@36 -- _deref_pbuz1_eq_vbuc1_then_la1 + lda #brick + ldy #0 + cmp (y),y + beq __b36_from___b33 + jmp __b111 + // main::@111 + __b111: + // [220] if(*((char *)main::$104)==brick) goto main::@36 -- _deref_pbuz1_eq_vbuc1_then_la1 + lda #brick + ldy #0 + cmp (__104),y + beq __b36_from___b111 + jmp __b110 + // main::@110 + __b110: + // [221] if(*((char *)main::$107)!=brick) goto main::@109 -- _deref_pbuz1_neq_vbuc1_then_la1 + ldy #0 + lda (__107),y + cmp #brick + bne __b109 + // [222] phi from main::@107 main::@108 main::@109 main::@110 main::@111 to main::@36 [phi:main::@107/main::@108/main::@109/main::@110/main::@111->main::@36] + __b36_from___b107: + __b36_from___b108: + __b36_from___b109: + __b36_from___b110: + __b36_from___b111: + jmp __b36 + // [222] phi from main::@33 main::@43 to main::@36 [phi:main::@33/main::@43->main::@36] + __b36_from___b33: + __b36_from___b43: + // [222] phi y#35 = peephole#12 [phi:main::@33/main::@43->main::@36#0] -- register_copy + jmp __b36 + // main::@36 + __b36: + // [223] *((char *)y#35) = $fd -- _deref_pbuz1=vbuc1 + lda #$fd + ldy #0 + sta (y_1),y + // [224] main::$125 = y#35 + c -- vwuz1=vwuz2_plus_vwuc1 + lda.z y_1 + clc + adc #c + sta.z __125+1 + // [225] *((char *)main::$125) = 1 -- _deref_pbuz1=vbuc1 + lda #1 + ldy #0 + sta (__125),y + // [226] main::$127 = y#35 + 1 -- vwuz1=vwuz2_plus_1 + clc + lda.z y_1 + adc #1 + sta.z __127 + lda.z y_1+1 + adc #0 + sta.z __127+1 + // [227] *((char *)main::$127) = $ed -- _deref_pbuz1=vbuc1 + lda #$ed + ldy #0 + sta (__127),y + // [228] main::$128 = main::$127 + c -- vwuz1=vwuz1_plus_vwuc1 + lda.z __128 + clc + adc #c + sta.z __128+1 + // [229] *((char *)main::$128) = 1 -- _deref_pbuz1=vbuc1 + lda #1 + ldy #0 + sta (__128),y + // [230] main::$130 = y#35 + $16 -- vwuz1=vwuz2_plus_vbuc1 + lda #$16 + clc + adc.z y_1 + sta.z __130 + lda #0 + adc.z y_1+1 + sta.z __130+1 + // [231] *((char *)main::$130) = $ee -- _deref_pbuz1=vbuc1 + lda #$ee + ldy #0 + sta (__130),y + // [232] main::$131 = main::$130 + c -- vwuz1=vwuz1_plus_vwuc1 + lda.z __131 + clc + adc #c + sta.z __131+1 + // [233] *((char *)main::$131) = 1 -- _deref_pbuz1=vbuc1 + lda #1 + ldy #0 + sta (__131),y + // [234] main::$133 = y#35 + $17 -- vwuz1=vwuz2_plus_vbuc1 + lda #$17 + clc + adc.z y_1 + sta.z __133 + lda #0 + adc.z y_1+1 + sta.z __133+1 + // [235] *((char *)main::$133) = $f0 -- _deref_pbuz1=vbuc1 + lda #$f0 + ldy #0 + sta (__133),y + // [236] main::$134 = main::$133 + c -- vwuz1=vwuz1_plus_vwuc1 + lda.z __134 + clc + adc #c + sta.z __134+1 + // [237] *((char *)main::$134) = 1 -- _deref_pbuz1=vbuc1 + lda #1 + ldy #0 + sta (__134),y + // [238] call wait + // Clear peephole if there is not bricks contact + // [381] phi from main::@36 to wait [phi:main::@36->wait] + wait_from___b36: + // [381] phi z#53 = z#48 [phi:main::@36->wait#0] -- register_copy + // [381] phi wait::n#6 = 5 [phi:main::@36->wait#1] -- vbuz1=vbuc1 + lda #5 + sta.z wait.n + jsr wait + jmp __b89 + // main::@89 + __b89: + // [239] *((char *)duck#1) = 0 -- _deref_pbuz1=vbuc1 + lda #0 + ldy #0 + sta (duck),y + // [240] main::$136 = duck#1 + c -- vwuz1=vwuz2_plus_vwuc1 + lda.z duck + clc + adc #c + sta.z __136+1 + // [241] *((char *)main::$136) = 7 -- _deref_pbuz1=vbuc1 + lda #7 + ldy #0 + sta (__136),y + // [242] main::$138 = duck#1 + 1 -- vwuz1=vwuz2_plus_1 + clc + lda.z duck + adc #1 + sta.z __138 + lda.z duck+1 + adc #0 + sta.z __138+1 + // [243] *((char *)main::$138) = 1 -- _deref_pbuz1=vbuc1 + lda #1 + ldy #0 + sta (__138),y + // [244] main::$139 = main::$138 + c -- vwuz1=vwuz1_plus_vwuc1 + lda.z __139 + clc + adc #c + sta.z __139+1 + // [245] *((char *)main::$139) = 7 -- _deref_pbuz1=vbuc1 + lda #7 + ldy #0 + sta (__139),y + // [246] main::$141 = duck#1 + $16 -- vwuz1=vwuz2_plus_vbuc1 + lda #$16 + clc + adc.z duck + sta.z __141 + lda #0 + adc.z duck+1 + sta.z __141+1 + // [247] *((char *)main::$141) = 2 -- _deref_pbuz1=vbuc1 + lda #2 + ldy #0 + sta (__141),y + // [248] main::$142 = main::$141 + c -- vwuz1=vwuz1_plus_vwuc1 + lda.z __142 + clc + adc #c + sta.z __142+1 + // [249] *((char *)main::$142) = 7 -- _deref_pbuz1=vbuc1 + lda #7 + ldy #0 + sta (__142),y + // [250] main::$144 = duck#1 + $17 -- vwuz1=vwuz2_plus_vbuc1 + lda #$17 + clc + adc.z duck + sta.z __144 + lda #0 + adc.z duck+1 + sta.z __144+1 + // [251] *((char *)main::$144) = 3 -- _deref_pbuz1=vbuc1 + lda #3 + ldy #0 + sta (__144),y + // [252] main::$145 = main::$144 + c -- vwuz1=vwuz1_plus_vwuc1 + lda.z __145 + clc + adc #c + sta.z __145+1 + // [253] *((char *)main::$145) = 7 -- _deref_pbuz1=vbuc1 + lda #7 + ldy #0 + sta (__145),y + // [254] call wait + // [381] phi from main::@89 to wait [phi:main::@89->wait] + wait_from___b89: + // [381] phi z#53 = z#25 [phi:main::@89->wait#0] -- register_copy + // [381] phi wait::n#6 = 5 [phi:main::@89->wait#1] -- vbuz1=vbuc1 + lda #5 + sta.z wait.n + jsr wait + jmp __b90 + // main::@90 + __b90: + // [255] y#130 = y#35 -- vwuz1=vwuz2 + lda.z y_1 + sta.z y + lda.z y_1+1 + sta.z y+1 + // [124] phi from main::@90 to main::@26 [phi:main::@90->main::@26] + __b26_from___b90: + // [124] phi n#20 = n#14 [phi:main::@90->main::@26#0] -- register_copy + // [124] phi peephole#12 = y#35 [phi:main::@90->main::@26#1] -- register_copy + // [124] phi z#100 = z#25 [phi:main::@90->main::@26#2] -- register_copy + // [124] phi y#18 = y#130 [phi:main::@90->main::@26#3] -- register_copy + // [124] phi rem8u#25 = divr8u::rem#11 [phi:main::@90->main::@26#4] -- register_copy + // [124] phi score#19 = score#43 [phi:main::@90->main::@26#5] -- register_copy + // [124] phi time#11 = time#17 [phi:main::@90->main::@26#6] -- register_copy + jmp __b26 + // main::@109 + __b109: + // [256] if(*((char *)main::$110)==brick) goto main::@36 -- _deref_pbuz1_eq_vbuc1_then_la1 + lda #brick + ldy #0 + cmp (__110),y + beq __b36_from___b109 + jmp __b108 + // main::@108 + __b108: + // [257] if(y#13>$1e16) goto main::@107 -- vwuz1_gt_vwuc1_then_la1 + lda #>$1e16 + cmp.z y+1 + bcc __b107 + bne !+ + lda #<$1e16 + cmp.z y + bcc __b107 + !: + jmp __b36_from___b108 + // main::@107 + __b107: + // [258] if(y#13>=$1fe3) goto main::@36 -- vwuz1_ge_vwuc1_then_la1 + lda.z y+1 + cmp #>$1fe3 + bcc !+ + bne __b36_from___b107 + lda.z y + cmp #<$1fe3 + bcs __b36_from___b107 + !: + jmp __b43 + // main::@43 + __b43: + // [259] main::$119 = peephole#12 + c -- vwuz1=vwuz2_plus_vwuc1 + lda.z peephole + clc + adc #c + sta.z __119+1 + // [260] *((char *)main::$119) = 0 -- _deref_pbuz1=vbuc1 + lda #0 + ldy #0 + sta (__119),y + // [261] main::$120 = main::$119 + 1 -- vwuz1=vwuz2_plus_1 + clc + lda.z __119 + adc #1 + sta.z __120 + lda.z __119+1 + adc #0 + sta.z __120+1 + // [262] *((char *)main::$120) = 0 -- _deref_pbuz1=vbuc1 + lda #0 + ldy #0 + sta (__120),y + // [263] main::$122 = main::$119 + $16 -- vwuz1=vwuz2_plus_vbuc1 + lda #$16 + clc + adc.z __119 + sta.z __122 + lda #0 + adc.z __119+1 + sta.z __122+1 + // [264] *((char *)main::$122) = 0 -- _deref_pbuz1=vbuc1 + lda #0 + ldy #0 + sta (__122),y + // [265] main::$124 = main::$119 + $17 -- vwuz1=vwuz1_plus_vbuc1 + lda #$17 + clc + adc.z __124 + sta.z __124 + bcc !+ + inc.z __124+1 + !: + // [266] *((char *)main::$124) = 0 -- _deref_pbuz1=vbuc1 + lda #0 + ldy #0 + sta (__124),y + // [267] y#141 = y#13 -- vwuz1=vwuz2 + lda.z y + sta.z y_1 + lda.z y+1 + sta.z y_1+1 + jmp __b36_from___b43 + // main::@34 + __b34: + // [268] score#6 = score#19 - $a -- vwuz1=vwuz1_minus_vbuc1 + sec + lda.z score + sbc #$a + sta.z score + lda.z score+1 + sbc #0 + sta.z score+1 + // [269] call write_score + // [351] phi from main::@34 to write_score [phi:main::@34->write_score] + write_score_from___b34: + // [351] phi score#13 = score#6 [phi:main::@34->write_score#0] -- register_copy + jsr write_score + // [270] phi from main::@34 to main::@88 [phi:main::@34->main::@88] + __b88_from___b34: + jmp __b88 + // main::@88 + __b88: + // [271] call wait + // [381] phi from main::@88 to wait [phi:main::@88->wait] + wait_from___b88: + // [381] phi z#53 = z#100 [phi:main::@88->wait#0] -- register_copy + // [381] phi wait::n#6 = $a [phi:main::@88->wait#1] -- vbuz1=vbuc1 + lda #$a + sta.z wait.n + jsr wait + // [213] phi from main::@88 to main::@35 [phi:main::@88->main::@35] + __b35_from___b88: + // [213] phi score#81 = score#38 [phi:main::@88->main::@35#0] -- register_copy + // [213] phi time#38 = div16u8u::return#2 [phi:main::@88->main::@35#1] -- register_copy + jmp __b35 + // main::@23 + __b23: + // [272] main::$57 = $30 + tu#13 -- vwuz1=vbuc1_plus_vwuz2 + lda #$30 + clc + adc.z tu + sta.z __57 + lda #0 + adc.z tu+1 + sta.z __57+1 + // [273] chrout::petscii = main::$57 -- vbuz1=vwuz2 + lda.z __57 + sta.z chrout.petscii + // [274] call chrout + jsr chrout + jmp __b24_from___b23 + // main::@21 + __b21: + // [275] chrout::petscii = ducknumber[j#16] -- vbuz1=pbuc1_derefidx_vbuz2 + ldy.z j_2 + lda ducknumber,y + sta.z chrout.petscii + // [276] call chrout + jsr chrout + jmp __b78 + // main::@78 + __b78: + // [277] j#5 = ++ j#16 -- vbuz1=_inc_vbuz1 + inc.z j_2 + // [93] phi from main::@78 to main::@20 [phi:main::@78->main::@20] + __b20_from___b78: + // [93] phi j#16 = j#5 [phi:main::@78->main::@20#0] -- register_copy + jmp __b20 + // main::@18 + __b18: + // [278] chrout::petscii = chrono[j#13] -- vbuz1=pbuc1_derefidx_vbuz2 + ldy.z j_1 + lda chrono,y + sta.z chrout.petscii + // [279] call chrout + jsr chrout + jmp __b74 + // main::@74 + __b74: + // [280] j#3 = ++ j#13 -- vbuz1=_inc_vbuz1 + inc.z j_1 + // [84] phi from main::@74 to main::@17 [phi:main::@74->main::@17] + __b17_from___b74: + // [84] phi j#13 = j#3 [phi:main::@74->main::@17#0] -- register_copy + jmp __b17 + // [281] phi from main::@71 to main::@14 [phi:main::@71->main::@14] + __b14_from___b71: + // [281] phi j#11 = 1 [phi:main::@71->main::@14#0] -- vbuz1=vbuc1 + lda #1 + sta.z j + jmp __b14 + // main::@14 + __b14: + // [282] if(j#11<=m) goto main::@15 -- vbuz1_le_vbuz2_then_la1 + lda.z m + cmp.z j + bcs __b15 + jmp __b16 + // main::@16 + __b16: + // [283] chrout::petscii = brick -- vbuz1=vbuc1 + lda #brick + sta.z chrout.petscii + // [284] call chrout + jsr chrout + jmp __b73 + // main::@73 + __b73: + // [285] main::$35 = z#28 + m -- vwuz1=vwuz2_plus_vbuz3 + lda.z m + clc + adc.z z_1 + sta.z __35 + lda #0 + adc.z z_1+1 + sta.z __35+1 + // [286] z#9 = main::$35 + 1 -- vwuz1=vwuz2_plus_1 + clc + lda.z __35 + adc #1 + sta.z z_1 + lda.z __35+1 + adc #0 + sta.z z_1+1 + // [287] if(z#9<$1fa) goto main::@13 -- vwuz1_lt_vwuc1_then_la1 + lda.z z_1+1 + cmp #>$1fa + bcc __b13_from___b73 + bne !+ + lda.z z_1 + cmp #<$1fa + bcc __b13_from___b73 + !: + jmp __b12_from___b73 + // main::@15 + __b15: + // [288] chrout::petscii = right -- vbuz1=vbuc1 + lda #right + sta.z chrout.petscii + // [289] call chrout + jsr chrout + jmp __b72 + // main::@72 + __b72: + // [290] j#2 = ++ j#11 -- vbuz1=_inc_vbuz1 + inc.z j + // [281] phi from main::@72 to main::@14 [phi:main::@72->main::@14] + __b14_from___b72: + // [281] phi j#11 = j#2 [phi:main::@72->main::@14#0] -- register_copy + jmp __b14 + // main::@7 + __b7: + // [291] chrout::petscii = brick -- vbuz1=vbuc1 + lda #brick + sta.z chrout.petscii + // [292] call chrout + jsr chrout + // [293] phi from main::@7 to main::@9 [phi:main::@7->main::@9] + __b9_from___b7: + // [293] phi n#101 = 2 [phi:main::@7->main::@9#0] -- vbuz1=vbuc1 + lda #2 + sta.z n + jmp __b9 + // main::@9 + __b9: + // [294] if(n#101<$16) goto main::@10 -- vbuz1_lt_vbuc1_then_la1 + lda.z n + cmp #$16 + bcc __b10 + jmp __b11 + // main::@11 + __b11: + // [295] chrout::petscii = brick -- vbuz1=vbuc1 + lda #brick + sta.z chrout.petscii + // [296] call chrout + jsr chrout + jmp __b64 + // main::@64 + __b64: + // [297] k#1 = ++ k#101 -- vbuz1=_inc_vbuz1 + inc.z k + // [52] phi from main::@64 to main::@6 [phi:main::@64->main::@6] + __b6_from___b64: + // [52] phi n#89 = n#101 [phi:main::@64->main::@6#0] -- register_copy + // [52] phi k#101 = k#1 [phi:main::@64->main::@6#1] -- register_copy + jmp __b6 + // main::@10 + __b10: + // [298] chrout::petscii = right -- vbuz1=vbuc1 + lda #right + sta.z chrout.petscii + // [299] call chrout + jsr chrout + jmp __b63 + // main::@63 + __b63: + // [300] n#1 = ++ n#101 -- vbuz1=_inc_vbuz1 + inc.z n + // [293] phi from main::@63 to main::@9 [phi:main::@63->main::@9] + __b9_from___b63: + // [293] phi n#101 = n#1 [phi:main::@63->main::@9#0] -- register_copy + jmp __b9 + // main::@2 + __b2: + // [301] main::$3 = $1c00 + m -- vwuz1=vwuc1_plus_vbuz2 + lda.z m + clc + adc #<$1c00 + sta.z __3 + lda #>$1c00 + adc #0 + sta.z __3+1 + // [302] *((char *)main::$3) = duck_udg[m] -- _deref_pbuz1=pbuc1_derefidx_vbuz2 + ldy.z m + lda duck_udg,y + ldy #0 + sta (__3),y + // [303] m = ++ m -- vbuz1=_inc_vbuz1 + inc.z m + jmp __b1 +} + // gotoxy +// Set the cursor to the specified position +// void gotoxy(char x, __zp($4c) char y) +gotoxy: { + .label __5 = $48 + .label __6 = $2c + .label __7 = $2c + .label line_offset = $2c + .label y = $4c + .label __8 = $46 + .label __9 = $2c + // [305] if(gotoxy::y#4<$19+1) goto gotoxy::@3 -- vbuz1_lt_vbuc1_then_la1 + lda.z y + cmp #$19+1 + bcc __b3_from_gotoxy + // [307] phi from gotoxy to gotoxy::@1 [phi:gotoxy->gotoxy::@1] + __b1_from_gotoxy: + // [307] phi gotoxy::y#5 = 0 [phi:gotoxy->gotoxy::@1#0] -- vbuz1=vbuc1 + lda #0 + sta.z y + jmp __b1 + // [306] phi from gotoxy to gotoxy::@3 [phi:gotoxy->gotoxy::@3] + __b3_from_gotoxy: + jmp __b3 + // gotoxy::@3 + __b3: + // [307] phi from gotoxy::@3 to gotoxy::@1 [phi:gotoxy::@3->gotoxy::@1] + __b1_from___b3: + // [307] phi gotoxy::y#5 = gotoxy::y#4 [phi:gotoxy::@3->gotoxy::@1#0] -- register_copy + jmp __b1 + // gotoxy::@1 + __b1: + jmp __b2 + // gotoxy::@2 + __b2: + // [308] conio_cursor_x = 0 -- vbuz1=vbuc1 + lda #0 + sta.z conio_cursor_x + // [309] conio_cursor_y = gotoxy::y#5 -- vbuz1=vbuz2 + lda.z y + sta.z conio_cursor_y + // [310] gotoxy::$7 = (unsigned int)gotoxy::y#5 -- vwuz1=_word_vbuz2 + lda.z y + sta.z __7 + lda #0 + sta.z __7+1 + // [311] gotoxy::$8 = gotoxy::$7 << 2 -- vwuz1=vwuz2_rol_2 + lda.z __7 + asl + sta.z __8 + lda.z __7+1 + rol + sta.z __8+1 + asl.z __8 + rol.z __8+1 + // [312] gotoxy::$9 = gotoxy::$8 + gotoxy::$7 -- vwuz1=vwuz2_plus_vwuz1 + clc + lda.z __9 + adc.z __8 + sta.z __9 + lda.z __9+1 + adc.z __8+1 + sta.z __9+1 + // [313] gotoxy::line_offset#0 = gotoxy::$9 << 3 -- vwuz1=vwuz1_rol_3 + asl.z line_offset + rol.z line_offset+1 + asl.z line_offset + rol.z line_offset+1 + asl.z line_offset + rol.z line_offset+1 + // [314] gotoxy::$5 = DEFAULT_SCREEN + gotoxy::line_offset#0 -- pbuz1=pbuc1_plus_vwuz2 + lda.z line_offset + clc + adc #DEFAULT_SCREEN + sta.z __5+1 + // [315] conio_line_text = gotoxy::$5 -- pbuz1=pbuz2 + lda.z __5 + sta.z conio_line_text + lda.z __5+1 + sta.z conio_line_text+1 + // [316] gotoxy::$6 = COLORRAM + gotoxy::line_offset#0 -- pbuz1=pbuc1_plus_vwuz1 + lda.z __6 + clc + adc #COLORRAM + sta.z __6+1 + // [317] conio_line_color = gotoxy::$6 -- pbuz1=pbuz2 + lda.z __6 + sta.z conio_line_color + lda.z __6+1 + sta.z conio_line_color+1 + jmp __breturn + // gotoxy::@return + __breturn: + // [318] return + rts +} + // chrout +// void chrout(__zp($18) volatile char petscii) +chrout: { + .label petscii = $18 + // asm { ldapetscii jsr$ffd2 } + lda petscii + jsr $ffd2 + jmp __breturn + // chrout::@return + __breturn: + // [320] return + rts +} + // clear_screen +// void clear_screen(__zp(8) char n, char m) +clear_screen: { + .label __4 = $23 + .label __5 = 9 + .label n = 8 + // [322] phi from clear_screen to clear_screen::@1 [phi:clear_screen->clear_screen::@1] + __b1_from_clear_screen: + // [322] phi z#2 = 0 [phi:clear_screen->clear_screen::@1#0] -- vwuz1=vbuc1 + lda #<0 + sta.z z + lda #>0 + sta.z z+1 + jmp __b1 + // clear_screen::@1 + __b1: + // [323] if(z#2<$1fa) goto clear_screen::@2 -- vwuz1_lt_vwuc1_then_la1 + lda.z z+1 + cmp #>$1fa + bcc __b2 + bne !+ + lda.z z + cmp #<$1fa + bcc __b2 + !: + // [324] phi from clear_screen::@1 to clear_screen::@3 [phi:clear_screen::@1->clear_screen::@3] + __b3_from___b1: + jmp __b3 + // clear_screen::@3 + __b3: + // [325] call gotoxy + // From 0-->505 (506 bytes). ClearScreen with byte 'n' with color 'm' + // [304] phi from clear_screen::@3 to gotoxy [phi:clear_screen::@3->gotoxy] + gotoxy_from___b3: + // [304] phi gotoxy::y#4 = 0 [phi:clear_screen::@3->gotoxy#0] -- vbuz1=vbuc1 + lda #0 + sta.z gotoxy.y + jsr gotoxy + jmp __b4 + // clear_screen::@4 + __b4: + // [326] chrout::petscii = home -- vbuz1=vbuc1 + lda #home + sta.z chrout.petscii + // [327] call chrout + jsr chrout + jmp __breturn + // clear_screen::@return + __breturn: + // [328] return + rts + // clear_screen::@2 + __b2: + // [329] clear_screen::$5 = $1e00 + z#2 -- vwuz1=vwuc1_plus_vwuz2 + lda.z z + clc + adc #<$1e00 + sta.z __5 + lda.z z+1 + adc #>$1e00 + sta.z __5+1 + // [330] clear_screen::$4 = clear_screen::$5 + c -- vwuz1=vwuz2_plus_vwuc1 + lda.z __5 + clc + adc #c + sta.z __4+1 + // [331] *((char *)clear_screen::$4) = 0 -- _deref_pbuz1=vbuc1 + lda #0 + ldy #0 + sta (__4),y + // [332] *((char *)clear_screen::$5) = clear_screen::n#5 -- _deref_pbuz1=vbuz2 + lda.z n + ldy #0 + sta (__5),y + // [333] z#1 = ++ z#2 -- vwuz1=_inc_vwuz1 + inc.z z + bne !+ + inc.z z+1 + !: + // [322] phi from clear_screen::@2 to clear_screen::@1 [phi:clear_screen::@2->clear_screen::@1] + __b1_from___b2: + // [322] phi z#2 = z#1 [phi:clear_screen::@2->clear_screen::@1#0] -- register_copy + jmp __b1 +} + // textcolor +// Set the color for text output. The old color setting is returned. +// char textcolor(__zp(8) char color) +textcolor: { + .label color = 8 + // [335] conio_textcolor = textcolor::color#7 -- vbuz1=vbuz2 + lda.z color + sta.z conio_textcolor + jmp __breturn + // textcolor::@return + __breturn: + // [336] return + rts +} + // cputs +// Output a NUL-terminated string at the current cursor position +// void cputs(__zp(5) const char *s) +cputs: { + .label c = 2 + .label s = 5 + // [338] phi from cputs cputs::@2 to cputs::@1 [phi:cputs/cputs::@2->cputs::@1] + __b1_from_cputs: + __b1_from___b2: + // [338] phi cputs::s#10 = cputs::s#11 [phi:cputs/cputs::@2->cputs::@1#0] -- register_copy + jmp __b1 + // cputs::@1 + __b1: + // [339] cputs::c#1 = *cputs::s#10 -- vbuz1=_deref_pbuz2 + ldy #0 + lda (s),y + sta.z c + // [340] cputs::s#0 = ++ cputs::s#10 -- pbuz1=_inc_pbuz1 + inc.z s + bne !+ + inc.z s+1 + !: + // [341] if(0!=cputs::c#1) goto cputs::@2 -- 0_neq_vbuz1_then_la1 + lda.z c + bne __b2 + jmp __breturn + // cputs::@return + __breturn: + // [342] return + rts + // cputs::@2 + __b2: + // [343] cputc::c#0 = cputs::c#1 + // [344] call cputc + jsr cputc + jmp __b1_from___b2 +} + // random +// Return to home position +// void random(__zp(3) char k, __zp(8) char n) +random: { + .label k = 3 + .label n = 8 + .label __3 = 2 + jmp __b1 + // random::@1 + __b1: + // [346] m = *((char *) 37140) -- vbuz1=_deref_pbuc1 + lda $9114 + sta.z m + // [347] random::$3 = m -- vbuz1=vbuz2 + lda.z m + sta.z __3 + // [348] if(mrandom::n#4) goto random::@1 -- vbuz1_gt_vbuz2_then_la1 + lda.z n + cmp.z __3 + bcc __b1 + jmp __breturn + // random::@return + __breturn: + // [350] return + rts +} + // write_score +write_score: { + // [352] if(score#13<=$fde8) goto write_score::@15 -- vwuz1_le_vwuc1_then_la1 + lda.z score+1 + cmp #>$fde8 + bne !+ + lda.z score + cmp #<$fde8 + !: + bcc __b15_from_write_score + beq __b15_from_write_score + // [354] phi from write_score to write_score::@1 [phi:write_score->write_score::@1] + __b1_from_write_score: + // [354] phi score#38 = 0 [phi:write_score->write_score::@1#0] -- vwuz1=vbuc1 + lda #<0 + sta.z score + lda #>0 + sta.z score+1 + jmp __b1 + // [353] phi from write_score to write_score::@15 [phi:write_score->write_score::@15] + __b15_from_write_score: + jmp __b15 + // write_score::@15 + __b15: + // [354] phi from write_score::@15 to write_score::@1 [phi:write_score::@15->write_score::@1] + __b1_from___b15: + // [354] phi score#38 = score#13 [phi:write_score::@15->write_score::@1#0] -- register_copy + jmp __b1 + // write_score::@1 + __b1: + // [355] m = 0 -- vbuz1=vbuc1 + lda #0 + sta.z m + jmp __b5 + // write_score::@5 + __b5: + // [356] if(m<4) goto write_score::@6 -- vbuz1_lt_vbuc1_then_la1 + lda.z m + cmp #4 + bcc __b6 + jmp __b7 + // write_score::@7 + __b7: + // [357] utoa::value#1 = score#38 -- vwuz1=vwuz2 + lda.z score + sta.z utoa.value + lda.z score+1 + sta.z utoa.value+1 + // [358] call utoa + // (!!) Needed. Possibly a bug + // [390] phi from write_score::@7 to utoa [phi:write_score::@7->utoa] + utoa_from___b7: + // [390] phi utoa::value#10 = utoa::value#1 [phi:write_score::@7->utoa#0] -- register_copy + jsr utoa + jmp __b11 + // write_score::@11 + __b11: + // [359] if(score#38<9+1) goto write_score::@2 -- vwuz1_lt_vbuc1_then_la1 + lda.z score+1 + bne !+ + lda.z score + cmp #9+1 + bcc __b2 + !: + jmp __b8 + // write_score::@8 + __b8: + // [360] *(points+2) = *buffer -- _deref_pbuc1=_deref_pbuc2 + lda buffer + sta points+2 + // [361] *(points+3) = *(buffer+1) -- _deref_pbuc1=_deref_pbuc2 + lda buffer+1 + sta points+3 + jmp __b2 + // write_score::@2 + __b2: + // [362] if(score#38<$63+1) goto write_score::@3 -- vwuz1_lt_vbuc1_then_la1 + lda.z score+1 + bne !+ + lda.z score + cmp #$63+1 + bcc __b3 + !: + jmp __b4 + // write_score::@4 + __b4: + // [363] *(points+1) = *buffer -- _deref_pbuc1=_deref_pbuc2 + lda buffer + sta points+1 + // [364] *(points+2) = *(buffer+1) -- _deref_pbuc1=_deref_pbuc2 + lda buffer+1 + sta points+2 + // [365] *(points+3) = *(buffer+2) -- _deref_pbuc1=_deref_pbuc2 + lda buffer+2 + sta points+3 + jmp __b3 + // write_score::@3 + __b3: + // [366] chrout::petscii = yellow -- vbuz1=vbuc1 + lda #yellow + sta.z chrout.petscii + // [367] call chrout + jsr chrout + jmp __b12 + // write_score::@12 + __b12: + // [368] chrout::petscii = home -- vbuz1=vbuc1 + lda #home + sta.z chrout.petscii + // [369] call chrout + jsr chrout + jmp __b13 + // write_score::@13 + __b13: + // [370] *((char *) 211) = 4 -- _deref_pbuc1=vbuc2 + lda #4 + sta.z $d3 + // [371] m = 0 -- vbuz1=vbuc1 + lda #0 + sta.z m + jmp __b9 + // write_score::@9 + __b9: + // [372] if(m<4) goto write_score::@10 -- vbuz1_lt_vbuc1_then_la1 + lda.z m + cmp #4 + bcc __b10 + jmp __breturn + // write_score::@return + __breturn: + // [373] return + rts + // write_score::@10 + __b10: + // [374] chrout::petscii = points[m] -- vbuz1=pbuc1_derefidx_vbuz2 + ldy.z m + lda points,y + sta.z chrout.petscii + // [375] call chrout + jsr chrout + jmp __b14 + // write_score::@14 + __b14: + // [376] m = ++ m -- vbuz1=_inc_vbuz1 + inc.z m + jmp __b9 + // write_score::@6 + __b6: + // [377] points[m] = '0' -- pbuc1_derefidx_vbuz1=vbuc2 + lda #'0' + ldy.z m + sta points,y + // [378] m = ++ m -- vbuz1=_inc_vbuz1 + inc.z m + jmp __b5 +} + // chrono_restart +chrono_restart: { + // asm { lda#0 ldy#0 ldx#0 jsr$ffdb } + lda #0 + ldy #0 + ldx #0 + jsr $ffdb + jmp __breturn + // chrono_restart::@return + __breturn: + // [380] return + rts +} + // wait +// void wait(__zp(3) char n) +wait: { + .label n = 3 + // [382] m = 0 -- vbuz1=vbuc1 + lda #0 + sta.z m + // [383] phi from wait wait::@4 to wait::@1 [phi:wait/wait::@4->wait::@1] + __b1_from_wait: + __b1_from___b4: + // [383] phi z#25 = z#53 [phi:wait/wait::@4->wait::@1#0] -- register_copy + jmp __b1 + // wait::@1 + __b1: + // [384] if(mwait::@2] + __b2_from___b1: + // [386] phi z#23 = 0 [phi:wait::@1->wait::@2#0] -- vwuz1=vbuc1 + lda #<0 + sta.z z_1 + lda #>0 + sta.z z_1+1 + jmp __b2 + // wait::@2 + __b2: + // [387] if(z#23<$21c) goto wait::@3 -- vwuz1_lt_vwuc1_then_la1 + lda.z z_1+1 + cmp #>$21c + bcc __b3 + bne !+ + lda.z z_1 + cmp #<$21c + bcc __b3 + !: + jmp __b4 + // wait::@4 + __b4: + // [388] m = ++ m -- vbuz1=_inc_vbuz1 + inc.z m + jmp __b1_from___b4 + // wait::@3 + __b3: + // [389] z#4 = ++ z#23 -- vwuz1=_inc_vwuz1 + inc.z z_1 + bne !+ + inc.z z_1+1 + !: + // [386] phi from wait::@3 to wait::@2 [phi:wait::@3->wait::@2] + __b2_from___b3: + // [386] phi z#23 = z#4 [phi:wait::@3->wait::@2#0] -- register_copy + jmp __b2 +} + // utoa +// Converts unsigned number value to a string representing it in RADIX format. +// If the leading digits are zero they are not included in the string. +// - value : The number to be converted to RADIX +// - buffer : receives the string representing the number and zero-termination. +// - radix : The radix to convert the number to (from the enum RADIX) +// void utoa(__zp(5) unsigned int value, __zp($d) char *buffer, char radix) +utoa: { + .label __10 = $11 + .label __11 = 2 + .label digit_value = 9 + .label buffer = $d + .label digit = 3 + .label value = 5 + .label started = $10 + // [391] phi from utoa to utoa::@1 [phi:utoa->utoa::@1] + __b1_from_utoa: + // [391] phi utoa::buffer#10 = buffer [phi:utoa->utoa::@1#0] -- pbuz1=pbuc1 + lda #<@buffer + sta.z buffer + lda #>@buffer + sta.z buffer+1 + // [391] phi utoa::started#2 = 0 [phi:utoa->utoa::@1#1] -- vbuz1=vbuc1 + lda #0 + sta.z started + // [391] phi utoa::value#3 = utoa::value#10 [phi:utoa->utoa::@1#2] -- register_copy + // [391] phi utoa::digit#2 = 0 [phi:utoa->utoa::@1#3] -- vbuz1=vbuc1 + lda #0 + sta.z digit + jmp __b1 + // utoa::@1 + __b1: + // [392] if(utoa::digit#2<5-1) goto utoa::@2 -- vbuz1_lt_vbuc1_then_la1 + lda.z digit + cmp #5-1 + bcc __b2 + jmp __b3 + // utoa::@3 + __b3: + // [393] utoa::$11 = (char)utoa::value#3 -- vbuz1=_byte_vwuz2 + lda.z value + sta.z __11 + // [394] *utoa::buffer#10 = DIGITS[utoa::$11] -- _deref_pbuz1=pbuc1_derefidx_vbuz2 + ldy.z __11 + lda DIGITS,y + ldy #0 + sta (buffer),y + // [395] utoa::buffer#3 = ++ utoa::buffer#10 -- pbuz1=_inc_pbuz1 + inc.z buffer + bne !+ + inc.z buffer+1 + !: + // [396] *utoa::buffer#3 = 0 -- _deref_pbuz1=vbuc1 + lda #0 + ldy #0 + sta (buffer),y + jmp __breturn + // utoa::@return + __breturn: + // [397] return + rts + // utoa::@2 + __b2: + // [398] utoa::$10 = utoa::digit#2 << 1 -- vbuz1=vbuz2_rol_1 + lda.z digit + asl + sta.z __10 + // [399] utoa::digit_value#0 = RADIX_DECIMAL_VALUES[utoa::$10] -- vwuz1=pwuc1_derefidx_vbuz2 + ldy.z __10 + lda RADIX_DECIMAL_VALUES,y + sta.z digit_value + lda RADIX_DECIMAL_VALUES+1,y + sta.z digit_value+1 + // [400] if(0!=utoa::started#2) goto utoa::@5 -- 0_neq_vbuz1_then_la1 + lda.z started + bne __b5 + jmp __b7 + // utoa::@7 + __b7: + // [401] if(utoa::value#3>=utoa::digit_value#0) goto utoa::@5 -- vwuz1_ge_vwuz2_then_la1 + lda.z digit_value+1 + cmp.z value+1 + bne !+ + lda.z digit_value + cmp.z value + beq __b5 + !: + bcc __b5 + // [402] phi from utoa::@7 to utoa::@4 [phi:utoa::@7->utoa::@4] + __b4_from___b7: + // [402] phi utoa::buffer#15 = utoa::buffer#10 [phi:utoa::@7->utoa::@4#0] -- register_copy + // [402] phi utoa::started#4 = utoa::started#2 [phi:utoa::@7->utoa::@4#1] -- register_copy + // [402] phi utoa::value#7 = utoa::value#3 [phi:utoa::@7->utoa::@4#2] -- register_copy + jmp __b4 + // utoa::@4 + __b4: + // [403] utoa::digit#1 = ++ utoa::digit#2 -- vbuz1=_inc_vbuz1 + inc.z digit + // [391] phi from utoa::@4 to utoa::@1 [phi:utoa::@4->utoa::@1] + __b1_from___b4: + // [391] phi utoa::buffer#10 = utoa::buffer#15 [phi:utoa::@4->utoa::@1#0] -- register_copy + // [391] phi utoa::started#2 = utoa::started#4 [phi:utoa::@4->utoa::@1#1] -- register_copy + // [391] phi utoa::value#3 = utoa::value#7 [phi:utoa::@4->utoa::@1#2] -- register_copy + // [391] phi utoa::digit#2 = utoa::digit#1 [phi:utoa::@4->utoa::@1#3] -- register_copy + jmp __b1 + // utoa::@5 + __b5: + // [404] utoa_append::buffer#0 = utoa::buffer#10 + // [405] utoa_append::value#0 = utoa::value#3 + // [406] utoa_append::sub#0 = utoa::digit_value#0 + // [407] call utoa_append + // [432] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] + utoa_append_from___b5: + jsr utoa_append + // [408] utoa_append::return#0 = utoa_append::value#2 + jmp __b6 + // utoa::@6 + __b6: + // [409] utoa::value#0 = utoa_append::return#0 + // [410] utoa::buffer#4 = ++ utoa::buffer#10 -- pbuz1=_inc_pbuz1 + inc.z buffer + bne !+ + inc.z buffer+1 + !: + // [402] phi from utoa::@6 to utoa::@4 [phi:utoa::@6->utoa::@4] + __b4_from___b6: + // [402] phi utoa::buffer#15 = utoa::buffer#4 [phi:utoa::@6->utoa::@4#0] -- register_copy + // [402] phi utoa::started#4 = 1 [phi:utoa::@6->utoa::@4#1] -- vbuz1=vbuc1 + lda #1 + sta.z started + // [402] phi utoa::value#7 = utoa::value#0 [phi:utoa::@6->utoa::@4#2] -- register_copy + jmp __b4 +} + // read_chrono +read_chrono: { + .label __0 = $23 + .label __5 = 9 + // asm { jsr$ffde stal stxm } + jsr $ffde + sta l + stx m + // [412] read_chrono::$0 = m << 8 -- vwuz1=vbuz2_rol_8 + lda.z m + sta.z __0+1 + lda #0 + sta.z __0 + // [413] div16u8u::dividend#0 = read_chrono::$0 + l -- vwuz1=vwuz1_plus_vbuz2 + lda.z l + clc + adc.z div16u8u.dividend + sta.z div16u8u.dividend + bcc !+ + inc.z div16u8u.dividend+1 + !: + // [414] call div16u8u + jsr div16u8u + // [415] div16u8u::return#2 = div16u8u::return#0 -- vwuz1=vwuz2 + lda.z div16u8u.return + sta.z div16u8u.return_1 + lda.z div16u8u.return+1 + sta.z div16u8u.return_1+1 + jmp __b2 + // read_chrono::@2 + __b2: + // [416] *((char *)$1e15+c) = 7 -- _deref_pbuc1=vbuc2 + lda #7 + sta $1e15+c + // [417] *((char *) 7701) = $b9 -- _deref_pbuc1=vbuc2 + lda #$b9 + sta $1e15 + // [418] if(div16u8u::return#2>=$a) goto read_chrono::@return -- vwuz1_ge_vbuc1_then_la1 + lda.z div16u8u.return_1+1 + bne __breturn + lda.z div16u8u.return_1 + cmp #$a + bcs __breturn + !: + jmp __b1 + // read_chrono::@1 + __b1: + // [419] read_chrono::$5 = $b9 - div16u8u::return#2 -- vwuz1=vwuc1_minus_vwuz2 + sec + lda #<$b9 + sbc.z div16u8u.return_1 + sta.z __5 + lda #>$b9 + sbc.z div16u8u.return_1+1 + sta.z __5+1 + // [420] *((char *) 7701) = read_chrono::$5 -- _deref_pbuc1=vwuz1 + lda.z __5 + sta $1e15 + jmp __breturn + // read_chrono::@return + __breturn: + // [421] return + rts +} + // cputc +// Output one character at the current cursor position +// Moves the cursor forward. Scrolls the entire screen if needed +// void cputc(__zp(2) char c) +cputc: { + .label c = 2 + // [422] if(cputc::c#0==' ') goto cputc::@1 -- vbuz1_eq_vbuc1_then_la1 + lda #'\n' + cmp.z c + beq __b1_from_cputc + jmp __b2 + // cputc::@2 + __b2: + // [423] conio_line_text[conio_cursor_x] = cputc::c#0 -- pbuz1_derefidx_vbuz2=vbuz3 + lda.z c + ldy.z conio_cursor_x + sta (conio_line_text),y + // [424] conio_line_color[conio_cursor_x] = conio_textcolor -- pbuz1_derefidx_vbuz2=vbuz3 + lda.z conio_textcolor + ldy.z conio_cursor_x + sta (conio_line_color),y + // [425] conio_cursor_x = ++ conio_cursor_x -- vbuz1=_inc_vbuz1 + inc.z conio_cursor_x + // [426] if(conio_cursor_x!=$28) goto cputc::@return -- vbuz1_neq_vbuc1_then_la1 + lda #$28 + cmp.z conio_cursor_x + bne __breturn + // [427] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] + __b3_from___b2: + jmp __b3 + // cputc::@3 + __b3: + // [428] call cputln + jsr cputln + jmp __breturn + // cputc::@return + __breturn: + // [429] return + rts + // [430] phi from cputc to cputc::@1 [phi:cputc->cputc::@1] + __b1_from_cputc: + jmp __b1 + // cputc::@1 + __b1: + // [431] call cputln + jsr cputln + jmp __breturn +} + // utoa_append +// Used to convert a single digit of an unsigned number value to a string representation +// Counts a single digit up from '0' as long as the value is larger than sub. +// Each time the digit is increased sub is subtracted from value. +// - buffer : pointer to the char that receives the digit +// - value : The value where the digit will be derived from +// - sub : the value of a '1' in the digit. Subtracted continually while the digit is increased. +// (For decimal the subs used are 10000, 1000, 100, 10, 1) +// returns : the value reduced by sub * digit so that it is less than sub. +// __zp(5) unsigned int utoa_append(__zp($d) char *buffer, __zp(5) unsigned int value, __zp(9) unsigned int sub) +utoa_append: { + .label buffer = $d + .label value = 5 + .label sub = 9 + .label return = 5 + .label digit = 7 + // [433] phi from utoa_append to utoa_append::@1 [phi:utoa_append->utoa_append::@1] + __b1_from_utoa_append: + // [433] phi utoa_append::digit#2 = 0 [phi:utoa_append->utoa_append::@1#0] -- vbuz1=vbuc1 + lda #0 + sta.z digit + // [433] phi utoa_append::value#2 = utoa_append::value#0 [phi:utoa_append->utoa_append::@1#1] -- register_copy + jmp __b1 + // utoa_append::@1 + __b1: + // [434] if(utoa_append::value#2>=utoa_append::sub#0) goto utoa_append::@2 -- vwuz1_ge_vwuz2_then_la1 + lda.z sub+1 + cmp.z value+1 + bne !+ + lda.z sub + cmp.z value + beq __b2 + !: + bcc __b2 + jmp __b3 + // utoa_append::@3 + __b3: + // [435] *utoa_append::buffer#0 = DIGITS[utoa_append::digit#2] -- _deref_pbuz1=pbuc1_derefidx_vbuz2 + ldy.z digit + lda DIGITS,y + ldy #0 + sta (buffer),y + jmp __breturn + // utoa_append::@return + __breturn: + // [436] return + rts + // utoa_append::@2 + __b2: + // [437] utoa_append::digit#1 = ++ utoa_append::digit#2 -- vbuz1=_inc_vbuz1 + inc.z digit + // [438] utoa_append::value#1 = utoa_append::value#2 - utoa_append::sub#0 -- vwuz1=vwuz1_minus_vwuz2 + lda.z value + sec + sbc.z sub + sta.z value + lda.z value+1 + sbc.z sub+1 + sta.z value+1 + // [433] phi from utoa_append::@2 to utoa_append::@1 [phi:utoa_append::@2->utoa_append::@1] + __b1_from___b2: + // [433] phi utoa_append::digit#2 = utoa_append::digit#1 [phi:utoa_append::@2->utoa_append::@1#0] -- register_copy + // [433] phi utoa_append::value#2 = utoa_append::value#1 [phi:utoa_append::@2->utoa_append::@1#1] -- register_copy + jmp __b1 +} + // div16u8u +// Divide unsigned 16-bit unsigned long dividend with a 8-bit unsigned char divisor +// The 8-bit unsigned char remainder can be found in rem8u after the division +// __zp($30) unsigned int div16u8u(__zp($23) unsigned int dividend, char divisor) +div16u8u: { + .label divisor = $3c + .label quotient_hi = 2 + .label quotient_lo = $10 + .label return = $12 + .label dividend = $23 + .label return_1 = $30 + // [439] divr8u::dividend#1 = byte1 div16u8u::dividend#0 -- vbuz1=_byte1_vwuz2 + lda.z dividend+1 + sta.z divr8u.dividend + // [440] call divr8u + // [456] phi from div16u8u to divr8u [phi:div16u8u->divr8u] + divr8u_from_div16u8u: + // [456] phi divr8u::dividend#5 = divr8u::dividend#1 [phi:div16u8u->divr8u#0] -- register_copy + // [456] phi divr8u::rem#10 = 0 [phi:div16u8u->divr8u#1] -- vbuz1=vbuc1 + lda #0 + sta.z divr8u.rem + jsr divr8u + // [441] divr8u::return#2 = divr8u::return#0 + jmp __b1 + // div16u8u::@1 + __b1: + // [442] div16u8u::quotient_hi#0 = divr8u::return#2 -- vbuz1=vbuz2 + lda.z divr8u.return + sta.z quotient_hi + // [443] divr8u::dividend#2 = byte0 div16u8u::dividend#0 -- vbuz1=_byte0_vwuz2 + lda.z dividend + sta.z divr8u.dividend + // [444] divr8u::rem#4 = divr8u::rem#11 + // [445] call divr8u + // [456] phi from div16u8u::@1 to divr8u [phi:div16u8u::@1->divr8u] + divr8u_from___b1: + // [456] phi divr8u::dividend#5 = divr8u::dividend#2 [phi:div16u8u::@1->divr8u#0] -- register_copy + // [456] phi divr8u::rem#10 = divr8u::rem#4 [phi:div16u8u::@1->divr8u#1] -- register_copy + jsr divr8u + // [446] divr8u::return#3 = divr8u::return#0 + jmp __b2 + // div16u8u::@2 + __b2: + // [447] div16u8u::quotient_lo#0 = divr8u::return#3 + // [448] div16u8u::return#0 = div16u8u::quotient_hi#0 w= div16u8u::quotient_lo#0 -- vwuz1=vbuz2_word_vbuz3 + lda.z quotient_hi + sta.z return+1 + lda.z quotient_lo + sta.z return + jmp __breturn + // div16u8u::@return + __breturn: + // [449] return + rts +} + // cputln +// Print a newline +cputln: { + // [450] conio_line_text = conio_line_text + $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc.z conio_line_text + sta.z conio_line_text + bcc !+ + inc.z conio_line_text+1 + !: + // [451] conio_line_color = conio_line_color + $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc.z conio_line_color + sta.z conio_line_color + bcc !+ + inc.z conio_line_color+1 + !: + // [452] conio_cursor_x = 0 -- vbuz1=vbuc1 + lda #0 + sta.z conio_cursor_x + // [453] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 + inc.z conio_cursor_y + // [454] call cscroll + jsr cscroll + jmp __breturn + // cputln::@return + __breturn: + // [455] return + rts +} + // divr8u +// Performs division on two 8 bit unsigned chars and an initial remainder +// Returns dividend/divisor. +// The final remainder will be set into the global variable rem8u +// Implemented using simple binary division +// __zp($10) char divr8u(__zp(3) char dividend, char divisor, __zp($f) char rem) +divr8u: { + .label __1 = $11 + .label rem = $f + .label dividend = 3 + .label quotient = $10 + .label i = 7 + .label return = $10 + // [457] phi from divr8u to divr8u::@1 [phi:divr8u->divr8u::@1] + __b1_from_divr8u: + // [457] phi divr8u::i#2 = 0 [phi:divr8u->divr8u::@1#0] -- vbuz1=vbuc1 + lda #0 + sta.z i + // [457] phi divr8u::quotient#3 = 0 [phi:divr8u->divr8u::@1#1] -- vbuz1=vbuc1 + lda #0 + sta.z quotient + // [457] phi divr8u::dividend#3 = divr8u::dividend#5 [phi:divr8u->divr8u::@1#2] -- register_copy + // [457] phi divr8u::rem#5 = divr8u::rem#10 [phi:divr8u->divr8u::@1#3] -- register_copy + jmp __b1 + // [457] phi from divr8u::@3 to divr8u::@1 [phi:divr8u::@3->divr8u::@1] + __b1_from___b3: + // [457] phi divr8u::i#2 = divr8u::i#1 [phi:divr8u::@3->divr8u::@1#0] -- register_copy + // [457] phi divr8u::quotient#3 = divr8u::return#0 [phi:divr8u::@3->divr8u::@1#1] -- register_copy + // [457] phi divr8u::dividend#3 = divr8u::dividend#0 [phi:divr8u::@3->divr8u::@1#2] -- register_copy + // [457] phi divr8u::rem#5 = divr8u::rem#11 [phi:divr8u::@3->divr8u::@1#3] -- register_copy + jmp __b1 + // divr8u::@1 + __b1: + // [458] divr8u::rem#0 = divr8u::rem#5 << 1 -- vbuz1=vbuz1_rol_1 + asl.z rem + // [459] divr8u::$1 = divr8u::dividend#3 & $80 -- vbuz1=vbuz2_band_vbuc1 + lda #$80 + and.z dividend + sta.z __1 + // [460] if(divr8u::$1==0) goto divr8u::@2 -- vbuz1_eq_0_then_la1 + lda.z __1 + beq __b2_from___b1 + jmp __b4 + // divr8u::@4 + __b4: + // [461] divr8u::rem#1 = divr8u::rem#0 | 1 -- vbuz1=vbuz1_bor_vbuc1 + lda #1 + ora.z rem + sta.z rem + // [462] phi from divr8u::@1 divr8u::@4 to divr8u::@2 [phi:divr8u::@1/divr8u::@4->divr8u::@2] + __b2_from___b1: + __b2_from___b4: + // [462] phi divr8u::rem#6 = divr8u::rem#0 [phi:divr8u::@1/divr8u::@4->divr8u::@2#0] -- register_copy + jmp __b2 + // divr8u::@2 + __b2: + // [463] divr8u::dividend#0 = divr8u::dividend#3 << 1 -- vbuz1=vbuz1_rol_1 + asl.z dividend + // [464] divr8u::quotient#1 = divr8u::quotient#3 << 1 -- vbuz1=vbuz1_rol_1 + asl.z quotient + // [465] if(divr8u::rem#6divr8u::@3] + __b3_from___b2: + __b3_from___b5: + // [468] phi divr8u::return#0 = divr8u::quotient#1 [phi:divr8u::@2/divr8u::@5->divr8u::@3#0] -- register_copy + // [468] phi divr8u::rem#11 = divr8u::rem#6 [phi:divr8u::@2/divr8u::@5->divr8u::@3#1] -- register_copy + jmp __b3 + // divr8u::@3 + __b3: + // [469] divr8u::i#1 = ++ divr8u::i#2 -- vbuz1=_inc_vbuz1 + inc.z i + // [470] if(divr8u::i#1!=8) goto divr8u::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #8 + cmp.z i + bne __b1_from___b3 + jmp __breturn + // divr8u::@return + __breturn: + // [471] return + rts +} + // cscroll +// Scroll the entire screen if the cursor is beyond the last line +cscroll: { + // [472] if(conio_cursor_y!=$19) goto cscroll::@return -- vbuz1_neq_vbuc1_then_la1 + lda #$19 + cmp.z conio_cursor_y + bne __breturn + // [473] phi from cscroll to cscroll::@1 [phi:cscroll->cscroll::@1] + __b1_from_cscroll: + jmp __b1 + // cscroll::@1 + __b1: + // [474] call memcpy + // [485] phi from cscroll::@1 to memcpy [phi:cscroll::@1->memcpy] + memcpy_from___b1: + // [485] phi memcpy::destination#2 = (void *)DEFAULT_SCREEN [phi:cscroll::@1->memcpy#0] -- pvoz1=pvoc1 + lda #DEFAULT_SCREEN + sta.z memcpy.destination+1 + // [485] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + lda #DEFAULT_SCREEN+$28 + sta.z memcpy.source+1 + jsr memcpy + // [475] phi from cscroll::@1 to cscroll::@2 [phi:cscroll::@1->cscroll::@2] + __b2_from___b1: + jmp __b2 + // cscroll::@2 + __b2: + // [476] call memcpy + // [485] phi from cscroll::@2 to memcpy [phi:cscroll::@2->memcpy] + memcpy_from___b2: + // [485] phi memcpy::destination#2 = (void *)COLORRAM [phi:cscroll::@2->memcpy#0] -- pvoz1=pvoc1 + lda #COLORRAM + sta.z memcpy.destination+1 + // [485] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + lda #COLORRAM+$28 + sta.z memcpy.source+1 + jsr memcpy + // [477] phi from cscroll::@2 to cscroll::@3 [phi:cscroll::@2->cscroll::@3] + __b3_from___b2: + jmp __b3 + // cscroll::@3 + __b3: + // [478] call memset + // [495] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] + memset_from___b3: + // [495] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuz1=vbuc1 + lda #' ' + sta.z memset.c + // [495] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + lda #DEFAULT_SCREEN+$19*$28-$28 + sta.z memset.str+1 + jsr memset + jmp __b4 + // cscroll::@4 + __b4: + // [479] memset::c#1 = conio_textcolor -- vbuz1=vbuz2 + lda.z conio_textcolor + sta.z memset.c + // [480] call memset + // [495] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] + memset_from___b4: + // [495] phi memset::c#4 = memset::c#1 [phi:cscroll::@4->memset#0] -- register_copy + // [495] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + lda #COLORRAM+$19*$28-$28 + sta.z memset.str+1 + jsr memset + jmp __b5 + // cscroll::@5 + __b5: + // [481] conio_line_text = conio_line_text - $28 -- pbuz1=pbuz1_minus_vbuc1 + sec + lda.z conio_line_text + sbc #$28 + sta.z conio_line_text + lda.z conio_line_text+1 + sbc #0 + sta.z conio_line_text+1 + // [482] conio_line_color = conio_line_color - $28 -- pbuz1=pbuz1_minus_vbuc1 + sec + lda.z conio_line_color + sbc #$28 + sta.z conio_line_color + lda.z conio_line_color+1 + sbc #0 + sta.z conio_line_color+1 + // [483] conio_cursor_y = -- conio_cursor_y -- vbuz1=_dec_vbuz1 + dec.z conio_cursor_y + jmp __breturn + // cscroll::@return + __breturn: + // [484] return + rts +} + // memcpy +// Copy block of memory (forwards) +// Copies the values of num bytes from the location pointed to by source directly to the memory block pointed to by destination. +// void * memcpy(__zp($b) void *destination, __zp($d) void *source, unsigned int num) +memcpy: { + .label src_end = 9 + .label dst = $b + .label src = $d + .label source = $d + .label destination = $b + // [486] memcpy::src_end#0 = (char *)memcpy::source#2 + (unsigned int)$19*$28-$28 -- pbuz1=pbuz2_plus_vwuc1 + lda.z source + clc + adc #<$19*$28-$28 + sta.z src_end + lda.z source+1 + adc #>$19*$28-$28 + sta.z src_end+1 + // [487] memcpy::src#4 = (char *)memcpy::source#2 + // [488] memcpy::dst#4 = (char *)memcpy::destination#2 + // [489] phi from memcpy memcpy::@2 to memcpy::@1 [phi:memcpy/memcpy::@2->memcpy::@1] + __b1_from_memcpy: + __b1_from___b2: + // [489] phi memcpy::dst#2 = memcpy::dst#4 [phi:memcpy/memcpy::@2->memcpy::@1#0] -- register_copy + // [489] phi memcpy::src#2 = memcpy::src#4 [phi:memcpy/memcpy::@2->memcpy::@1#1] -- register_copy + jmp __b1 + // memcpy::@1 + __b1: + // [490] if(memcpy::src#2!=memcpy::src_end#0) goto memcpy::@2 -- pbuz1_neq_pbuz2_then_la1 + lda.z src+1 + cmp.z src_end+1 + bne __b2 + lda.z src + cmp.z src_end + bne __b2 + jmp __breturn + // memcpy::@return + __breturn: + // [491] return + rts + // memcpy::@2 + __b2: + // [492] *memcpy::dst#2 = *memcpy::src#2 -- _deref_pbuz1=_deref_pbuz2 + ldy #0 + lda (src),y + ldy #0 + sta (dst),y + // [493] memcpy::dst#1 = ++ memcpy::dst#2 -- pbuz1=_inc_pbuz1 + inc.z dst + bne !+ + inc.z dst+1 + !: + // [494] memcpy::src#1 = ++ memcpy::src#2 -- pbuz1=_inc_pbuz1 + inc.z src + bne !+ + inc.z src+1 + !: + jmp __b1_from___b2 +} + // memset +// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. +// void * memset(__zp($b) void *str, __zp($10) char c, unsigned int num) +memset: { + .label end = $12 + .label dst = $b + .label c = $10 + .label str = $b + jmp __b1 + // memset::@1 + __b1: + // [496] memset::end#0 = (char *)memset::str#3 + $28 -- pbuz1=pbuz2_plus_vbuc1 + lda #$28 + clc + adc.z str + sta.z end + lda #0 + adc.z str+1 + sta.z end+1 + // [497] memset::dst#4 = (char *)memset::str#3 + // [498] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] + __b2_from___b1: + __b2_from___b3: + // [498] phi memset::dst#2 = memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy + jmp __b2 + // memset::@2 + __b2: + // [499] if(memset::dst#2!=memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 + lda.z dst+1 + cmp.z end+1 + bne __b3 + lda.z dst + cmp.z end + bne __b3 + jmp __breturn + // memset::@return + __breturn: + // [500] return + rts + // memset::@3 + __b3: + // [501] *memset::dst#2 = memset::c#4 -- _deref_pbuz1=vbuz2 + lda.z c + ldy #0 + sta (dst),y + // [502] memset::dst#1 = ++ memset::dst#2 -- pbuz1=_inc_pbuz1 + inc.z dst + bne !+ + inc.z dst+1 + !: + jmp __b2_from___b3 +} + // File Data +.segment Data + // The digits used for numbers + DIGITS: .text "0123456789abcdef" + // Values of decimal digits + RADIX_DECIMAL_VALUES: .word $2710, $3e8, $64, $a + // [0..65536] 16-bit + points: .byte 0, 0, 0, 0 + buffer: .byte 0, 0, 0, 0 + // for unexpanded. 37888-4096 color for expanded + ducknumber: .byte $44, $55, $43, $4b, $3a + // DUCK: + chrono: .byte $54, $4d, $3a, $39 + // TM:9 + duck_udg: .byte $e, $1b, $3f, $1f, $f, 7, $f, $1f, 0, 0, 0, 0, 0, $c0, $70, $bc, $1f, $1d, $1e, $f, 3, 1, 1, 3, $ce, $1e, $7c, $f8, $e0, $40, $40, $e0, 0, 0, 0, 0, 0, 0, 0, 0 + // POKE CODES = 0,1,2,3,4; CHROUT CODES = 64, 65, 66, 67, 68 (with previous reverse_off "chrout(146)") + intro: .text @"\n\n\nDIFFICULTY\n----------\n\n\n" + .byte 0 + levels: .text @"1.EASIEST\n\n3.EASY\n\n5.MEDIUM\n\n7.HARD\n\n9.EXPERT\n\n\n\n\n" + .byte 0 + foot: .text @"PRESS: 1,3,5,7 or 9\n\n" + .byte 0 + game_over: .text @"\n\n\n\nGAME OVER" + .byte 0 + play_again: .text @"\n\n\nPlay Again (Y/N)?" + .byte 0 + your_score: .text @"\n\n\nYour Score: " + .byte 0 + high_score: .text @"\n\nHi-Score: " + .byte 0 + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __init1 +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __b2 +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __b50 +Removing instruction jmp __b51 +Removing instruction jmp __b1 +Removing instruction jmp __b3 +Removing instruction jmp __b52 +Removing instruction jmp __b53 +Removing instruction jmp __b54 +Removing instruction jmp __b55 +Removing instruction jmp __b56 +Removing instruction jmp __b57 +Removing instruction jmp __b4 +Removing instruction jmp __b5 +Removing instruction jmp __b58 +Removing instruction jmp __b59 +Removing instruction jmp __b60 +Removing instruction jmp __b6 +Removing instruction jmp __b8 +Removing instruction jmp __b61 +Removing instruction jmp __b62 +Removing instruction jmp __b13 +Removing instruction jmp __b71 +Removing instruction jmp __b12 +Removing instruction jmp __b65 +Removing instruction jmp __b66 +Removing instruction jmp __b67 +Removing instruction jmp __b68 +Removing instruction jmp __b69 +Removing instruction jmp __b70 +Removing instruction jmp __b17 +Removing instruction jmp __b19 +Removing instruction jmp __b75 +Removing instruction jmp __b76 +Removing instruction jmp __b77 +Removing instruction jmp __b20 +Removing instruction jmp __b22 +Removing instruction jmp __b79 +Removing instruction jmp __b80 +Removing instruction jmp __b81 +Removing instruction jmp __b45 +Removing instruction jmp __b82 +Removing instruction jmp __b24 +Removing instruction jmp __b83 +Removing instruction jmp __b84 +Removing instruction jmp __b106 +Removing instruction jmp __b105 +Removing instruction jmp __b104 +Removing instruction jmp __b103 +Removing instruction jmp __b25 +Removing instruction jmp __b26 +Removing instruction jmp __b28 +Removing instruction jmp __b86 +Removing instruction jmp __b87 +Removing instruction jmp __b44 +Removing instruction jmp __b91 +Removing instruction jmp __b92 +Removing instruction jmp __b93 +Removing instruction jmp __b94 +Removing instruction jmp __b95 +Removing instruction jmp __b96 +Removing instruction jmp __b97 +Removing instruction jmp __b98 +Removing instruction jmp __b99 +Removing instruction jmp __b100 +Removing instruction jmp __b101 +Removing instruction jmp __b102 +Removing instruction jmp __b47 +Removing instruction jmp __b112 +Removing instruction jmp __b48 +Removing instruction jmp __b49 +Removing instruction jmp __breturn +Removing instruction jmp __b27 +Removing instruction jmp __b85 +Removing instruction jmp __b37 +Removing instruction jmp __b29 +Removing instruction jmp __b38 +Removing instruction jmp __b30 +Removing instruction jmp __b39 +Removing instruction jmp __b31 +Removing instruction jmp __b40 +Removing instruction jmp __b32 +Removing instruction jmp __b41 +Removing instruction jmp __b42 +Removing instruction jmp __b35 +Removing instruction jmp __b33 +Removing instruction jmp __b111 +Removing instruction jmp __b110 +Removing instruction jmp __b36 +Removing instruction jmp __b89 +Removing instruction jmp __b90 +Removing instruction jmp __b108 +Removing instruction jmp __b43 +Removing instruction jmp __b88 +Removing instruction jmp __b78 +Removing instruction jmp __b74 +Removing instruction jmp __b14 +Removing instruction jmp __b16 +Removing instruction jmp __b73 +Removing instruction jmp __b72 +Removing instruction jmp __b9 +Removing instruction jmp __b11 +Removing instruction jmp __b64 +Removing instruction jmp __b63 +Removing instruction jmp __b3 +Removing instruction jmp __b1 +Removing instruction jmp __b2 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __b3 +Removing instruction jmp __b4 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __b2 +Removing instruction jmp __breturn +Removing instruction jmp __b15 +Removing instruction jmp __b1 +Removing instruction jmp __b5 +Removing instruction jmp __b7 +Removing instruction jmp __b11 +Removing instruction jmp __b8 +Removing instruction jmp __b2 +Removing instruction jmp __b4 +Removing instruction jmp __b3 +Removing instruction jmp __b12 +Removing instruction jmp __b13 +Removing instruction jmp __b9 +Removing instruction jmp __breturn +Removing instruction jmp __b14 +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __b2 +Removing instruction jmp __b4 +Removing instruction jmp __b1 +Removing instruction jmp __b3 +Removing instruction jmp __breturn +Removing instruction jmp __b7 +Removing instruction jmp __b4 +Removing instruction jmp __b6 +Removing instruction jmp __b2 +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __b2 +Removing instruction jmp __b3 +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __b1 +Removing instruction jmp __b3 +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __b2 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __b4 +Removing instruction jmp __b2 +Removing instruction jmp __b5 +Removing instruction jmp __b3 +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __b2 +Removing instruction jmp __b3 +Removing instruction jmp __b4 +Removing instruction jmp __b5 +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Removing instruction jmp __b1 +Removing instruction jmp __b2 +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction lda #0 +Removing instruction lda #0 +Removing instruction lda.z line +Removing instruction lda #<0 +Removing instruction lda #>0 +Removing instruction lda #<0 +Removing instruction lda #>0 +Removing instruction lda #0 +Removing instruction lda.z __29+1 +Removing instruction lda #>0 +Removing instruction lda #>0 +Replacing instruction ldy #0 with TAY +Replacing instruction lda #0 with TYA +Removing instruction ldy #0 +Replacing instruction lda #0 with TYA +Removing instruction ldy #0 +Replacing instruction lda #0 with TYA +Removing instruction ldy #0 +Removing instruction lda.z __78 +Removing instruction lda.z __81 +Removing instruction lda.z __84 +Removing instruction lda.z __88 +Removing instruction lda.z __92 +Removing instruction ldy #0 +Removing instruction ldy #0 +Removing instruction ldy #0 +Replacing instruction lda #0 with TYA +Removing instruction ldy #0 +Removing instruction ldy #0 +Replacing instruction lda #0 with TYA +Removing instruction ldy #0 +Removing instruction ldy #0 +Replacing instruction ldy #0 with TAY +Removing instruction ldy #0 +Removing instruction ldy #0 +Removing instruction ldy #0 +Replacing instruction lda #0 with TYA +Removing instruction ldy #0 +Removing instruction ldy #0 +Replacing instruction lda #0 with TYA +Removing instruction ldy #0 +Removing instruction ldy #0 +Replacing instruction ldy #0 with TAY +Replacing instruction lda #0 with TYA +Removing instruction ldy #0 +Replacing instruction lda #0 with TYA +Replacing instruction lda #0 with TYA +Removing instruction ldy #0 +Replacing instruction ldy #0 with TAY +Removing instruction lda.z z_1+1 +Removing instruction lda #>0 +Replacing instruction ldy #0 with TAY +Removing instruction ldy #0 +Removing instruction lda.z m +Removing instruction lda #>0 +Replacing instruction ldy #0 with TAY +Replacing instruction ldx #0 with TAX +Removing instruction lda #>0 +Removing instruction lda #0 +Replacing instruction ldy.z __11 with TAY +Replacing instruction ldy #0 with TAY +Replacing instruction ldy.z __10 with TAY +Replacing instruction lda.z m with TXA +Removing instruction ldy.z conio_cursor_x +Removing instruction lda #0 +Removing instruction lda.z __1 +Removing instruction ldy #0 +Succesful ASM optimization Pass5UnnecesaryLoadElimination +Replacing label __b2_from_conio_c64_init with __b1 +Replacing label __b24_from___b106 with __b24_from___b84 +Replacing label __b24_from___b105 with __b24_from___b84 +Replacing label __b24_from___b104 with __b24_from___b84 +Replacing label __b24_from___b103 with __b24_from___b84 +Replacing label __b27_from___b26 with __b27 +Replacing label __b22_from___b87 with __b22 +Replacing label __b46_from___b114 with __b46_from___b99 +Replacing label __b29_from___b85 with __b29 +Replacing label __b30_from___b29 with __b30 +Replacing label __b31_from___b30 with __b31 +Replacing label __b32_from___b31 with __b32 +Replacing label __b33_from___b32 with __b33 +Replacing label __b36_from___b33 with __b36 +Replacing label __b36_from___b109 with __b36_from___b111 +Replacing label __b36_from___b108 with __b36_from___b111 +Replacing label __b36_from___b107 with __b36_from___b111 +Replacing label __b36_from___b107 with __b36_from___b111 +Replacing label __b36_from___b43 with __b36 +Replacing label __b24_from___b23 with __b24_from___b84 +Replacing label __b13_from___b73 with __b13 +Replacing label __b13_from___b73 with __b13 +Replacing label __b3_from_gotoxy with __b2 +Replacing label __b1 with __b2 +Replacing label __b1_from___b2 with __b1 +Replacing label __b15_from_write_score with __b1 +Replacing label __b15_from_write_score with __b1 +Replacing label __b1_from___b4 with __b1 +Replacing label __b1_from_cputc with __b1 +Replacing label __b2_from___b1 with __b2 +Replacing label __b3_from___b2 with __b3 +Replacing label __b1_from___b3 with __b1 +Replacing label __b1_from___b2 with __b1 +Replacing label __b2_from___b3 with __b2 +Removing instruction __b1_from___init1: +Removing instruction __b2_from_conio_c64_init: +Removing instruction __b2: +Removing instruction __b1_from___b2: +Removing instruction gotoxy_from___b1: +Removing instruction clear_screen_from___b3: +Removing instruction __b52_from___b3: +Removing instruction __b53_from___b52: +Removing instruction cputs_from___b53: +Removing instruction __b54_from___b53: +Removing instruction __b55_from___b54: +Removing instruction cputs_from___b55: +Removing instruction __b56_from___b55: +Removing instruction __b57_from___b56: +Removing instruction cputs_from___b57: +Removing instruction __b5_from___b4: +Removing instruction __b13_from___b73: +Removing instruction __b12_from___b71: +Removing instruction __b19_from___b17: +Removing instruction __b22_from___b87: +Removing instruction __b24_from___b103: +Removing instruction __b24_from___b104: +Removing instruction __b24_from___b105: +Removing instruction __b24_from___b106: +Removing instruction __b24_from___b23: +Removing instruction __b24_from___b82: +Removing instruction random_from___b24: +Removing instruction __b25_from___b103: +Removing instruction __b44_from___b87: +Removing instruction __b92_from___b91: +Removing instruction __b93_from___b92: +Removing instruction cputs_from___b93: +Removing instruction __b94_from___b93: +Removing instruction __b95_from___b94: +Removing instruction cputs_from___b95: +Removing instruction __b96_from___b95: +Removing instruction cputs_from___b96: +Removing instruction __b97_from___b96: +Removing instruction __b98_from___b97: +Removing instruction cputs_from___b98: +Removing instruction __b46_from___b114: +Removing instruction __b100_from___b46: +Removing instruction cputs_from___b100: +Removing instruction __b101_from___b100: +Removing instruction __b102_from___b101: +Removing instruction cputs_from___b102: +Removing instruction __b27_from___b26: +Removing instruction __b29_from___b37: +Removing instruction __b29_from___b85: +Removing instruction __b30_from___b29: +Removing instruction __b30_from___b38: +Removing instruction __b31_from___b30: +Removing instruction __b31_from___b39: +Removing instruction __b32_from___b31: +Removing instruction __b32_from___b40: +Removing instruction __b33_from___b32: +Removing instruction __b33_from___b35: +Removing instruction __b36_from___b107: +Removing instruction __b36_from___b108: +Removing instruction __b36_from___b109: +Removing instruction __b36_from___b110: +Removing instruction __b36_from___b33: +Removing instruction __b36_from___b43: +Removing instruction __b88_from___b34: +Removing instruction wait_from___b88: +Removing instruction __b3_from_gotoxy: +Removing instruction __b3: +Removing instruction __b1_from___b3: +Removing instruction __b1: +Removing instruction __b3_from___b1: +Removing instruction __b1_from_cputs: +Removing instruction __b1_from___b2: +Removing instruction __b15_from_write_score: +Removing instruction __b15: +Removing instruction __b1_from___b15: +Removing instruction __b1_from_wait: +Removing instruction __b1_from___b4: +Removing instruction __b4_from___b7: +Removing instruction utoa_append_from___b5: +Removing instruction __b3_from___b2: +Removing instruction __b1_from_cputc: +Removing instruction __b1_from___b3: +Removing instruction __b2_from___b1: +Removing instruction __b2_from___b4: +Removing instruction __b3_from___b2: +Removing instruction __b3_from___b5: +Removing instruction __b1_from_cscroll: +Removing instruction memcpy_from___b1: +Removing instruction __b2_from___b1: +Removing instruction memcpy_from___b2: +Removing instruction __b3_from___b2: +Removing instruction memset_from___b3: +Removing instruction __b1_from_memcpy: +Removing instruction __b1_from___b2: +Removing instruction __b2_from___b1: +Removing instruction __b2_from___b3: +Succesful ASM optimization Pass5RedundantLabelElimination +Removing instruction __init1: +Removing instruction __b1: +Removing instruction __breturn: +Removing instruction __b1_from_conio_c64_init: +Removing instruction __breturn: +Removing instruction __b50: +Removing instruction __b51: +Removing instruction __b3_from___b1: +Removing instruction __b52: +Removing instruction textcolor_from___b52: +Removing instruction __b53: +Removing instruction __b54: +Removing instruction textcolor_from___b54: +Removing instruction __b55: +Removing instruction __b56: +Removing instruction textcolor_from___b56: +Removing instruction __b57: +Removing instruction __b5: +Removing instruction clear_screen_from___b5: +Removing instruction __b58: +Removing instruction __b59: +Removing instruction __b60: +Removing instruction __b6_from___b60: +Removing instruction __b8: +Removing instruction __b61: +Removing instruction __b62: +Removing instruction __b13_from___b62: +Removing instruction random_from___b13: +Removing instruction __b71: +Removing instruction __b65: +Removing instruction __b66: +Removing instruction __b67: +Removing instruction __b68: +Removing instruction __b69: +Removing instruction __b70: +Removing instruction __b17_from___b70: +Removing instruction __b19: +Removing instruction write_score_from___b19: +Removing instruction __b75: +Removing instruction __b76: +Removing instruction __b77: +Removing instruction __b20_from___b77: +Removing instruction __b22_from___b20: +Removing instruction __b79: +Removing instruction __b80: +Removing instruction __b81: +Removing instruction __b45: +Removing instruction __b82: +Removing instruction __b24: +Removing instruction __b83: +Removing instruction random_from___b83: +Removing instruction __b84: +Removing instruction __b106: +Removing instruction __b105: +Removing instruction __b104: +Removing instruction __b103: +Removing instruction __b25: +Removing instruction __b26_from___b25: +Removing instruction __b28: +Removing instruction write_score_from___b28: +Removing instruction __b86: +Removing instruction wait_from___b86: +Removing instruction __b87: +Removing instruction __b44: +Removing instruction clear_screen_from___b44: +Removing instruction __b91: +Removing instruction __b92: +Removing instruction textcolor_from___b92: +Removing instruction __b93: +Removing instruction __b94: +Removing instruction textcolor_from___b94: +Removing instruction __b95: +Removing instruction __b96: +Removing instruction __b97: +Removing instruction textcolor_from___b97: +Removing instruction __b98: +Removing instruction __b99: +Removing instruction utoa_from___b46: +Removing instruction __b100: +Removing instruction __b101: +Removing instruction textcolor_from___b101: +Removing instruction __b102: +Removing instruction __b112: +Removing instruction __b49: +Removing instruction __breturn: +Removing instruction __b3_from___b113: +Removing instruction __b85: +Removing instruction __b37: +Removing instruction __b38: +Removing instruction __b39: +Removing instruction __b40: +Removing instruction __b41: +Removing instruction __b42: +Removing instruction wait_from___b42: +Removing instruction __b35_from___b42: +Removing instruction __b111: +Removing instruction __b110: +Removing instruction wait_from___b36: +Removing instruction __b89: +Removing instruction wait_from___b89: +Removing instruction __b90: +Removing instruction __b26_from___b90: +Removing instruction __b108: +Removing instruction __b43: +Removing instruction write_score_from___b34: +Removing instruction __b88: +Removing instruction __b35_from___b88: +Removing instruction __b78: +Removing instruction __b20_from___b78: +Removing instruction __b74: +Removing instruction __b17_from___b74: +Removing instruction __b16: +Removing instruction __b73: +Removing instruction __b72: +Removing instruction __b14_from___b72: +Removing instruction __b9_from___b7: +Removing instruction __b11: +Removing instruction __b64: +Removing instruction __b6_from___b64: +Removing instruction __b63: +Removing instruction __b9_from___b63: +Removing instruction __b1_from_gotoxy: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __b1_from_clear_screen: +Removing instruction __b3: +Removing instruction gotoxy_from___b3: +Removing instruction __b4: +Removing instruction __breturn: +Removing instruction __b1_from___b2: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __b2: +Removing instruction __breturn: +Removing instruction __b1_from_write_score: +Removing instruction __b7: +Removing instruction utoa_from___b7: +Removing instruction __b11: +Removing instruction __b8: +Removing instruction __b4: +Removing instruction __b12: +Removing instruction __b13: +Removing instruction __breturn: +Removing instruction __b14: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __b4: +Removing instruction __b2_from___b3: +Removing instruction __b1_from_utoa: +Removing instruction __b3: +Removing instruction __breturn: +Removing instruction __b7: +Removing instruction __b1_from___b4: +Removing instruction __b6: +Removing instruction __b4_from___b6: +Removing instruction __b2: +Removing instruction __b1: +Removing instruction __b2: +Removing instruction __b3: +Removing instruction __b1_from_utoa_append: +Removing instruction __b3: +Removing instruction __breturn: +Removing instruction __b1_from___b2: +Removing instruction divr8u_from_div16u8u: +Removing instruction __b1: +Removing instruction divr8u_from___b1: +Removing instruction __b2: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction __b1_from_divr8u: +Removing instruction __b4: +Removing instruction __b5: +Removing instruction __breturn: +Removing instruction __b1: +Removing instruction __b2: +Removing instruction __b3: +Removing instruction __b4: +Removing instruction memset_from___b4: +Removing instruction __b5: +Removing instruction __breturn: +Removing instruction __b1: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination +Skipping double jump to __b46 in jmp __b46_from___b99 +Skipping double jump to __b36 in beq __b36_from___b111 +Skipping double jump to __b36 in beq __b36_from___b111 +Skipping double jump to __b36 in jmp __b36_from___b111 +Skipping double jump to __b36 in bne __b36_from___b111 +Skipping double jump to __b36 in bcs __b36_from___b111 +Skipping double jump to __b12 in jmp __b12_from___b73 +Replacing jump to rts with rts in jmp __breturn +Succesful ASM optimization Pass5DoubleJumpElimination +Relabelling long label __b12_from___b73 to __b5 +Relabelling long label __b12_from___b62 to __b8 +Relabelling long label __b24_from___b84 to __b11 +Relabelling long label __b46_from___b99 to __b16 +Relabelling long label __b36_from___b111 to __b19 +Relabelling long label __b14_from___b71 to __b24 +Relabelling long label __b2_from___b1 to __b4 +Succesful ASM optimization Pass5RelabelLongLabels +Removing instruction jmp __b1 +Removing instruction jmp __b13 +Removing instruction jmp __b22 +Removing instruction jmp __b46 +Removing instruction jmp __b36 +Removing instruction jmp __b2 +Removing instruction jmp __b1 +Removing instruction jmp __b1 +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction lda #brick +Removing instruction ldy #0 +Removing instruction lda #brick +Removing instruction ldy #0 +Removing instruction lda #brick +Removing instruction ldy #0 +Removing instruction lda #brick +Removing instruction ldy #0 +Removing instruction ldy #0 +Succesful ASM optimization Pass5UnnecesaryLoadElimination +Removing instruction __b19: +Succesful ASM optimization Pass5RedundantLabelElimination +Removing instruction __b5: +Removing instruction __b16: +Succesful ASM optimization Pass5UnusedLabelElimination +Fixing long branch [445] beq __b11 to bne +Fixing long branch [531] bcc __b22 to bcs +Fixing long branch [920] beq __b36 to bne +Fixing long branch [936] bne __b36 to beq +Fixing long branch [941] bcs __b36 to bcc +Fixing long branch [1052] bcc __b13 to bcs +Fixing long branch [1058] bcc __b13 to bcs +Fixing long branch [161] bcc __b2 to bcs +Fixing long branch [235] bcc __b7 to bcs +Fixing long branch [287] bcc __b24 to bcs +Fixing long branch [290] beq __b24 to bne +Fixing long branch [329] bcc __b18 to bcs +Fixing long branch [352] bcc __b21 to bcs +Fixing long branch [381] bcc __b23 to bcs +Fixing long branch [471] bcc __b27 to bcs +Fixing long branch [711] bne __b34 to beq +Fixing long branch [716] bne __b34 to beq +Fixing long branch [790] bne __b109 to beq + +FINAL SYMBOL TABLE +__constant char * const COLORRAM = (char *) 55296 +__constant char * const DEFAULT_SCREEN = (char *) 1024 +__constant char DIGITS[] = "0123456789abcdef"z +__constant const char LIGHT_BLUE = $e +__constant char RADIX::BINARY = 2 +__constant char RADIX::DECIMAL = $a +__constant char RADIX::HEXADECIMAL = $10 +__constant char RADIX::OCTAL = 8 +__constant unsigned int RADIX_DECIMAL_VALUES[] = { $2710, $3e8, $64, $a } +void __start() +__constant const char brick = $e6 +__constant char buffer[] = { 0, 0, 0, 0 } +__constant const unsigned int c = $7800 +__constant const char chrono[] = { $54, $4d, $3a, $39 } +void chrono_restart() +void chrout(volatile char petscii) +__loadstore volatile char chrout::petscii // zp[1]:24 3.0310104636363637E7 +void clear_screen(char n , char m) +unsigned int clear_screen::$4 // zp[2]:35 100001.0 +unsigned int clear_screen::$5 // zp[2]:9 66667.33333333333 +char clear_screen::m +char clear_screen::n +char clear_screen::n#5 // n zp[1]:8 12500.125 +void conio_c64_init() +__constant char * const conio_c64_init::BASIC_CURSOR_LINE = (char *) 214 +char conio_c64_init::line +char conio_c64_init::line#0 // line zp[1]:76 11.0 +char conio_c64_init::line#2 // line zp[1]:76 22.0 +__loadstore char conio_cursor_x // zp[1]:39 200133.45333333334 +__loadstore char conio_cursor_y // zp[1]:29 3516593.4945054944 +__loadstore char *conio_line_color // zp[2]:30 2662771.1807228914 +__loadstore char *conio_line_text // zp[2]:32 2600117.7411764706 +__loadstore char conio_textcolor // zp[1]:34 1629048.4677419355 +void cputc(char c) +char cputc::c +char cputc::c#0 // c zp[1]:2 1050001.5 +void cputln() +void cputs(const char *s) +char cputs::c +char cputs::c#1 // c zp[1]:2 100001.0 +const char *cputs::s +const char *cputs::s#0 // s zp[2]:5 50000.5 +const char *cputs::s#10 // s zp[2]:5 150502.0 +const char *cputs::s#11 // s zp[2]:5 1001.0 +void cscroll() +unsigned int div16u8u(unsigned int dividend , char divisor) +unsigned int div16u8u::dividend +unsigned int div16u8u::dividend#0 // dividend zp[2]:35 420000.60000000003 +char div16u8u::divisor +__constant char div16u8u::divisor#0 = $3c // divisor +unsigned int div16u8u::quotient +char div16u8u::quotient_hi +char div16u8u::quotient_hi#0 // quotient_hi zp[1]:2 333333.6666666667 +char div16u8u::quotient_lo +char div16u8u::quotient_lo#0 // quotient_lo zp[1]:16 2000002.0 +unsigned int div16u8u::return +unsigned int div16u8u::return#0 // return zp[2]:18 366667.3333333334 +unsigned int div16u8u::return#2 // return_1 zp[2]:48 9166.833333333332 +char divr8u(char dividend , char divisor , char rem) +char divr8u::$1 // zp[1]:17 2.00000000002E11 +char divr8u::dividend +char divr8u::dividend#0 // dividend zp[1]:3 2.500000000025E10 +char divr8u::dividend#1 // dividend zp[1]:3 2000002.0 +char divr8u::dividend#2 // dividend zp[1]:3 1000001.0 +char divr8u::dividend#3 // dividend zp[1]:3 5.0001666667333336E10 +char divr8u::dividend#5 // dividend zp[1]:3 1.2000003E7 +char divr8u::divisor +char divr8u::i +char divr8u::i#1 // i zp[1]:7 1.500000000015E11 +char divr8u::i#2 // i zp[1]:7 1.6666666666833334E10 +char divr8u::quotient +char divr8u::quotient#1 // quotient zp[1]:16 1.500000000015E11 +char divr8u::quotient#2 // quotient zp[1]:16 1.00000000001E11 +char divr8u::quotient#3 // quotient zp[1]:16 2.8571428571714287E10 +char divr8u::rem +char divr8u::rem#0 // rem zp[1]:15 1.00000000001E11 +char divr8u::rem#1 // rem zp[1]:15 2.00000000002E11 +char divr8u::rem#10 // rem zp[1]:15 1.1000002E7 +char divr8u::rem#11 // rem zp[1]:15 2.702711801846847E9 +char divr8u::rem#2 // rem zp[1]:15 2.00000000002E11 +char divr8u::rem#4 // rem zp[1]:15 2000002.0 +char divr8u::rem#5 // rem zp[1]:15 2.00010000003E11 +char divr8u::rem#6 // rem zp[1]:15 1.00000000001E11 +char divr8u::return +char divr8u::return#0 // return zp[1]:16 5.000033333416667E10 +char divr8u::return#2 // return zp[1]:16 2000002.0 +char divr8u::return#3 // return zp[1]:16 2000002.0 +__constant const char down = $11 +unsigned int duck +unsigned int duck#0 // duck zp[2]:22 6.6666667333333336E7 +unsigned int duck#1 // duck zp[2]:22 4237745.88135593 +__constant const char duck_udg[] = { $e, $1b, $3f, $1f, $f, 7, $f, $1f, 0, 0, 0, 0, 0, $c0, $70, $bc, $1f, $1d, $1e, $f, 3, 1, 1, 3, $ce, $1e, $7c, $f8, $e0, $40, $40, $e0, 0, 0, 0, 0, 0, 0, 0, 0 } +__constant const char ducknumber[] = { $44, $55, $43, $4b, $3a } +__constant const char foot[] = "PRESS: 1,3,5,7 or 9 + +" +__constant const char game_over[] = " + + + +GAME OVER" +void gotoxy(char x , char y) +char *gotoxy::$5 // zp[2]:72 20002.0 +char *gotoxy::$6 // zp[2]:44 20002.0 +unsigned int gotoxy::$7 // zp[2]:44 15001.5 +unsigned int gotoxy::$8 // zp[2]:70 20002.0 +unsigned int gotoxy::$9 // zp[2]:44 20002.0 +unsigned int gotoxy::line_offset +unsigned int gotoxy::line_offset#0 // line_offset zp[2]:44 10001.0 +char gotoxy::x +char gotoxy::y +char gotoxy::y#2 // y zp[1]:76 22.0 +char gotoxy::y#4 // y zp[1]:76 6671.0 +char gotoxy::y#5 // y zp[1]:76 6667.333333333333 +__constant const char green = $1e +__constant const char high_score[] = " + +Hi-Score: " +unsigned int hiscore +unsigned int hiscore#110 // hiscore_1 zp[2]:108 1.1744186046511627 +unsigned int hiscore#123 // hiscore_1 zp[2]:108 202.0 +unsigned int hiscore#124 // hiscore zp[2]:42 202.0 +unsigned int hiscore#19 // hiscore zp[2]:42 31.076923076923077 +__constant const char home = $13 +__constant const char intro[] = " + + +DIFFICULTY +---------- + + +" +char j +char j#11 // j zp[1]:50 7500.75 +char j#13 // j_1 zp[1]:85 1001.0 +char j#16 // j_2 zp[1]:86 1001.0 +char j#19 // j_3 zp[1]:104 1034.6666666666667 +char j#2 // j zp[1]:50 20002.0 +char j#3 // j_1 zp[1]:85 2002.0 +char j#5 // j_2 zp[1]:86 2002.0 +char k +char k#1 // k zp[1]:99 2002.0 +char k#101 // k zp[1]:99 273.0 +__loadstore volatile char l // zp[1]:107 455.79148936170213 +__constant const char levels[] = "1.EASIEST + +3.EASY + +5.MEDIUM + +7.HARD + +9.EXPERT + + + + +" +__constant const char lock = 8 +__constant const char lower = $e +__loadstore volatile char m // zp[1]:4 3.8961039106499544E16 +void main() +unsigned int main::$104 // zp[2]:93 2500.25 +unsigned int main::$107 // zp[2]:95 2500.25 +unsigned int main::$110 // zp[2]:97 2500.25 +unsigned int main::$119 // zp[2]:74 6667.333333333333 +unsigned int main::$120 // zp[2]:81 10001.0 +unsigned int main::$122 // zp[2]:83 10001.0 +unsigned int main::$124 // zp[2]:74 10001.0 +unsigned int main::$125 // zp[2]:77 10001.0 +unsigned int main::$127 // zp[2]:58 10001.0 +unsigned int main::$128 // zp[2]:58 10001.0 +unsigned int main::$130 // zp[2]:60 10001.0 +unsigned int main::$131 // zp[2]:60 10001.0 +unsigned int main::$133 // zp[2]:62 10001.0 +unsigned int main::$134 // zp[2]:62 10001.0 +unsigned int main::$136 // zp[2]:79 10001.0 +unsigned int main::$138 // zp[2]:64 10001.0 +unsigned int main::$139 // zp[2]:64 10001.0 +unsigned int main::$141 // zp[2]:66 10001.0 +unsigned int main::$142 // zp[2]:66 10001.0 +unsigned int main::$144 // zp[2]:68 10001.0 +unsigned int main::$145 // zp[2]:68 10001.0 +unsigned int main::$150 // zp[2]:105 1001.0 +unsigned int main::$151 // zp[2]:87 2002.0 +unsigned int main::$152 // zp[2]:87 1001.0 +unsigned int main::$153 // zp[2]:89 2002.0 +unsigned int main::$154 // zp[2]:89 1001.0 +unsigned int main::$155 // zp[2]:91 2002.0 +unsigned int main::$156 // zp[2]:91 1001.0 +char main::$177 // zp[1]:8 2002.0 +unsigned int main::$179 // zp[2]:56 20002.0 +unsigned int main::$180 // zp[2]:46 20002.0 +char main::$26 // zp[1]:8 2002.0 +unsigned int main::$29 // zp[2]:5 2002.0 +unsigned int main::$3 // zp[2]:112 101.0 +unsigned int main::$35 // zp[2]:102 2002.0 +unsigned int main::$57 // zp[2]:100 2002.0 +unsigned int main::$61 // zp[2]:13 2.00000002E8 +unsigned int main::$66 // zp[2]:11 2.00000002E7 +unsigned int main::$69 // zp[2]:25 2.00000002E7 +unsigned int main::$72 // zp[2]:27 2.00000002E7 +char main::$78 // zp[1]:16 20002.0 +char main::$81 // zp[1]:7 20002.0 +char main::$84 // zp[1]:3 20002.0 +char main::$88 // zp[1]:54 20002.0 +char main::$92 // zp[1]:55 20002.0 +unsigned int main::$96 // zp[2]:46 15001.5 +unsigned int main::$97 // zp[2]:46 20002.0 +void * memcpy(void *destination , void *source , unsigned int num) +void *memcpy::destination +void *memcpy::destination#2 // destination zp[2]:11 +char *memcpy::dst +char *memcpy::dst#1 // dst zp[2]:11 1.000000000001E12 +char *memcpy::dst#2 // dst zp[2]:11 1.0003333333346667E12 +char *memcpy::dst#4 // dst zp[2]:11 2.000000002E9 +unsigned int memcpy::num +void *memcpy::return +void *memcpy::source +void *memcpy::source#2 // source zp[2]:13 +char *memcpy::src +char *memcpy::src#1 // src zp[2]:13 2.000000000002E12 +char *memcpy::src#2 // src zp[2]:13 1.00025000000125E12 +char *memcpy::src#4 // src zp[2]:13 1.000000001E9 +char *memcpy::src_end +char *memcpy::src_end#0 // src_end zp[2]:9 1.2512500000025E11 +void * memset(void *str , char c , unsigned int num) +char memset::c +char memset::c#1 // c zp[1]:16 2.00000002E8 +char memset::c#4 // c zp[1]:16 1.4287142857171426E11 +char *memset::dst +char *memset::dst#1 // dst zp[2]:11 2.000000000002E12 +char *memset::dst#2 // dst zp[2]:11 1.3336666666683335E12 +char *memset::dst#4 // dst zp[2]:11 2.000000002E9 +char *memset::end +char *memset::end#0 // end zp[2]:18 1.668333333336667E11 +unsigned int memset::num +void *memset::return +void *memset::str +void *memset::str#3 // str zp[2]:11 +char n +char n#1 // n zp[1]:51 20002.0 +char n#101 // n zp[1]:51 4429.142857142857 +char n#109 // n zp[1]:51 7.769230769230769 +char n#14 // n zp[1]:51 344.8620689655172 +char n#20 // n zp[1]:51 220.07272727272726 +char n#52 // n zp[1]:51 93.84375 +char n#89 // n zp[1]:51 35.644067796610166 +unsigned int peephole +unsigned int peephole#12 // peephole zp[2]:52 617.7352941176471 +unsigned int peephole#52 // peephole zp[2]:52 62.5625 +__constant const char play_again[] = " + + +Play Again (Y/N)?" +__constant char points[] = { 0, 0, 0, 0 } +void random(char k , char n) +char random::$3 // zp[1]:2 5.5E17 +char random::k +char random::k#0 // k zp[1]:3 500.5 +char random::k#4 // k zp[1]:3 2.00000000000000192E17 +char random::n +char random::n#0 // n zp[1]:8 2002.0 +char random::n#4 // n zp[1]:8 2.00000000000002E16 +void read_chrono() +unsigned int read_chrono::$0 // zp[2]:35 200002.0 +unsigned int read_chrono::$5 // zp[2]:9 200002.0 +__constant const char red = $1c +char rem8u +char rem8u#127 // rem8u zp[1]:15 11.6 +char rem8u#25 // rem8u zp[1]:15 220.07272727272726 +char rem8u#48 // rem8u zp[1]:15 93.84375 +__constant const char reverse_on = $12 +__constant const char right = $1d +unsigned int score +unsigned int score#13 // score zp[2]:42 70334.66666666666 +unsigned int score#19 // score zp[2]:42 1272.9090909090908 +unsigned int score#38 // score zp[2]:42 3843.0654205607475 +unsigned int score#4 // score zp[2]:42 2002.0 +unsigned int score#43 // score zp[2]:42 566.0943396226415 +unsigned int score#6 // score zp[2]:42 20002.0 +unsigned int score#8 // score zp[2]:42 10001.0 +unsigned int score#81 // score zp[2]:42 15001.5 +char textcolor(char color) +char textcolor::color +char textcolor::color#7 // color zp[1]:8 1001.0 +char textcolor::old +char textcolor::return +unsigned int time +unsigned int time#11 // time zp[2]:48 20002.0 +unsigned int time#17 // time zp[2]:48 566.0943396226415 +unsigned int time#38 // time zp[2]:48 10001.0 +unsigned int tu +unsigned int tu#1 // tu zp[2]:110 166.83333333333334 +unsigned int tu#13 // tu zp[2]:110 32.032 +void utoa(unsigned int value , char *buffer , char radix) +char utoa::$10 // zp[1]:17 2.0000000002E10 +char utoa::$11 // zp[1]:2 2000002.0 +char *utoa::buffer +char *utoa::buffer#10 // buffer zp[2]:13 2.857285714714286E9 +char *utoa::buffer#15 // buffer zp[2]:13 1.50000000015E10 +char *utoa::buffer#3 // buffer zp[2]:13 2000002.0 +char *utoa::buffer#4 // buffer zp[2]:13 2.0000000002E10 +char utoa::digit +char utoa::digit#1 // digit zp[1]:3 2.0000000002E10 +char utoa::digit#2 // digit zp[1]:3 2.857142857428571E9 +unsigned int utoa::digit_value +unsigned int utoa::digit_value#0 // digit_value zp[2]:9 6.0000000006E9 +unsigned int *utoa::digit_values +char utoa::max_digits +char utoa::radix +char utoa::started +char utoa::started#2 // started zp[1]:16 5.0000000005E9 +char utoa::started#4 // started zp[1]:16 1.0000000001E10 +unsigned int utoa::value +unsigned int utoa::value#0 // value zp[2]:5 1.0000000001E10 +unsigned int utoa::value#1 // value zp[2]:5 200002.0 +unsigned int utoa::value#10 // value zp[2]:5 1100103.0 +unsigned int utoa::value#2 // value zp[2]:5 202.0 +unsigned int utoa::value#3 // value zp[2]:5 5.714428572142858E9 +unsigned int utoa::value#7 // value zp[2]:5 1.50000000015E10 +unsigned int utoa_append(char *buffer , unsigned int value , unsigned int sub) +char *utoa_append::buffer +char *utoa_append::buffer#0 // buffer zp[2]:13 1.375000000025E10 +char utoa_append::digit +char utoa_append::digit#1 // digit zp[1]:7 1.0E16 +char utoa_append::digit#2 // digit zp[1]:7 1.000005E16 +unsigned int utoa_append::return +unsigned int utoa_append::return#0 // return zp[2]:5 2.0000000002E10 +unsigned int utoa_append::sub +unsigned int utoa_append::sub#0 // sub zp[2]:9 3.333335E15 +unsigned int utoa_append::value +unsigned int utoa_append::value#0 // value zp[2]:5 3.6666666667333336E10 +unsigned int utoa_append::value#1 // value zp[2]:5 2.0E16 +unsigned int utoa_append::value#2 // value zp[2]:5 5.000018333333334E15 +void wait(char n) +char wait::n +char wait::n#6 // n zp[1]:3 1.25000000125E8 +void write_score() +unsigned int y +unsigned int y#0 // y zp[2]:40 20002.0 +unsigned int y#1 // y zp[2]:40 20002.0 +unsigned int y#10 // y zp[2]:40 13334.666666666666 +unsigned int y#11 // y zp[2]:40 13334.666666666666 +unsigned int y#114 // y zp[2]:40 11.6 +unsigned int y#12 // y zp[2]:40 13334.666666666666 +unsigned int y#13 // y zp[2]:40 2285.9428571428575 +unsigned int y#130 // y zp[2]:40 20002.0 +unsigned int y#141 // y_1 zp[2]:52 20002.0 +unsigned int y#18 // y zp[2]:40 509.61904761904765 +unsigned int y#2 // y zp[2]:40 20002.0 +unsigned int y#3 // y zp[2]:40 20002.0 +unsigned int y#35 // y_1 zp[2]:52 2353.1764705882347 +unsigned int y#49 // y zp[2]:40 93.84375 +__constant const char yellow = $9e +__constant const char your_score[] = " + + +Your Score: " +unsigned int z +unsigned int z#1 // z zp[2]:37 200002.0 +unsigned int z#100 // z_1 zp[2]:20 1050.15 +unsigned int z#102 // z_1 zp[2]:20 93.84375 +unsigned int z#128 // z_1 zp[2]:20 93.84375 +unsigned int z#2 // z zp[2]:37 66667.33333333333 +unsigned int z#23 // z_1 zp[2]:20 1.0333333334666666E10 +unsigned int z#25 // z_1 zp[2]:20 2.564438476923077E7 +unsigned int z#28 // z_1 zp[2]:20 266.93333333333334 +unsigned int z#4 // z_1 zp[2]:20 2.0000000002E10 +unsigned int z#48 // z_1 zp[2]:20 857.2285714285714 +unsigned int z#53 // z_1 zp[2]:20 70503.0 +unsigned int z#9 // z_1 zp[2]:20 2002.0 + +zp[1]:76 [ conio_c64_init::line#2 conio_c64_init::line#0 gotoxy::y#5 gotoxy::y#4 gotoxy::y#2 ] +zp[2]:108 [ hiscore#110 hiscore#123 ] +zp[1]:99 [ k#101 k#1 ] +zp[1]:85 [ j#13 j#3 ] +zp[1]:86 [ j#16 j#5 ] +zp[2]:110 [ tu#13 tu#1 ] +zp[2]:52 [ peephole#52 peephole#12 y#35 y#141 ] +zp[1]:51 [ n#52 n#89 n#109 n#20 n#101 n#14 n#1 ] +zp[2]:48 [ time#11 time#17 time#38 div16u8u::return#2 ] +zp[2]:40 [ y#13 y#12 y#11 y#10 y#0 y#49 y#114 y#18 y#130 y#1 y#2 y#3 ] +zp[2]:42 [ score#81 hiscore#19 hiscore#124 score#19 score#43 score#38 score#8 score#13 score#4 score#6 ] +zp[1]:50 [ j#11 j#2 ] +zp[2]:37 [ z#2 z#1 ] +zp[1]:8 [ random::n#4 random::n#0 main::$26 main::$177 textcolor::color#7 clear_screen::n#5 ] +zp[2]:20 [ z#53 z#48 z#100 z#102 z#128 z#28 z#9 z#25 z#23 z#4 ] +zp[1]:15 [ divr8u::rem#5 divr8u::rem#10 divr8u::rem#4 rem8u#48 rem8u#127 rem8u#25 divr8u::rem#11 divr8u::rem#6 divr8u::rem#0 divr8u::rem#1 divr8u::rem#2 ] +zp[1]:39 [ conio_cursor_x ] +zp[1]:29 [ conio_cursor_y ] +zp[2]:32 [ conio_line_text ] +zp[2]:30 [ conio_line_color ] +zp[1]:34 [ conio_textcolor ] +zp[1]:107 [ l ] +zp[1]:4 [ m ] +zp[1]:24 [ chrout::petscii ] +zp[2]:5 [ main::$29 utoa::value#3 utoa::value#7 utoa::value#10 utoa::value#2 utoa::value#1 utoa::value#0 utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 utoa_append::return#0 cputs::s#10 cputs::s#11 cputs::s#0 ] +zp[2]:22 [ duck#0 duck#1 ] +zp[2]:13 [ main::$61 memcpy::source#2 memcpy::src#2 memcpy::src#4 memcpy::src#1 utoa::buffer#10 utoa::buffer#15 utoa::buffer#4 utoa::buffer#3 utoa_append::buffer#0 ] +zp[2]:11 [ main::$66 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 memcpy::destination#2 memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ] +zp[2]:25 [ main::$69 ] +zp[2]:27 [ main::$72 ] +zp[2]:105 [ main::$150 ] +zp[2]:87 [ main::$151 main::$152 ] +zp[2]:89 [ main::$153 main::$154 ] +zp[2]:91 [ main::$155 main::$156 ] +zp[1]:104 [ j#19 ] +zp[1]:16 [ main::$78 memset::c#4 memset::c#1 divr8u::quotient#3 divr8u::return#0 divr8u::quotient#1 divr8u::quotient#2 divr8u::return#2 divr8u::return#3 div16u8u::quotient_lo#0 utoa::started#2 utoa::started#4 ] +zp[1]:7 [ main::$81 divr8u::i#2 divr8u::i#1 utoa_append::digit#2 utoa_append::digit#1 ] +zp[1]:3 [ main::$84 divr8u::dividend#3 divr8u::dividend#5 divr8u::dividend#1 divr8u::dividend#2 divr8u::dividend#0 utoa::digit#2 utoa::digit#1 wait::n#6 random::k#4 random::k#0 ] +zp[1]:54 [ main::$88 ] +zp[1]:55 [ main::$92 ] +zp[2]:46 [ main::$96 main::$180 main::$97 ] +zp[2]:56 [ main::$179 ] +zp[2]:93 [ main::$104 ] +zp[2]:95 [ main::$107 ] +zp[2]:97 [ main::$110 ] +zp[2]:77 [ main::$125 ] +zp[2]:58 [ main::$127 main::$128 ] +zp[2]:60 [ main::$130 main::$131 ] +zp[2]:62 [ main::$133 main::$134 ] +zp[2]:79 [ main::$136 ] +zp[2]:64 [ main::$138 main::$139 ] +zp[2]:66 [ main::$141 main::$142 ] +zp[2]:68 [ main::$144 main::$145 ] +zp[2]:74 [ main::$119 main::$124 ] +zp[2]:81 [ main::$120 ] +zp[2]:83 [ main::$122 ] +zp[2]:100 [ main::$57 ] +zp[2]:102 [ main::$35 ] +zp[2]:112 [ main::$3 ] +zp[2]:44 [ gotoxy::$7 gotoxy::$9 gotoxy::line_offset#0 gotoxy::$6 ] +zp[2]:70 [ gotoxy::$8 ] +zp[2]:72 [ gotoxy::$5 ] +zp[2]:35 [ read_chrono::$0 div16u8u::dividend#0 clear_screen::$4 ] +zp[1]:2 [ div16u8u::quotient_hi#0 utoa::$11 random::$3 cputs::c#1 cputc::c#0 ] +zp[1]:17 [ divr8u::$1 utoa::$10 ] +zp[2]:9 [ memcpy::src_end#0 read_chrono::$5 utoa::digit_value#0 utoa_append::sub#0 clear_screen::$5 ] +zp[2]:18 [ memset::end#0 div16u8u::return#0 ] + + +FINAL ASSEMBLER +Score: 2147483647 + + // File Comments +/// @file +/// Functions for performing input and output. + // Upstart + // Commodore 64 PRG executable file +.file [name="ducks-total.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(__start) + // Global Constants & labels + .const LIGHT_BLUE = $e + .const down = $11 + .const right = $1d + .const lock = 8 + .const lower = $e + .const home = $13 + .const reverse_on = $12 + .const brick = $e6 + .const green = $1e + .const yellow = $9e + .const red = $1c + .const c = $7800 + /// Color Ram + .label COLORRAM = $d800 + /// Default address of screen character matrix + .label DEFAULT_SCREEN = $400 + // The number of bytes on the screen + // The current cursor x-position + .label conio_cursor_x = $27 + // The current cursor y-position + .label conio_cursor_y = $1d + // The current text cursor line start + .label conio_line_text = $20 + // The current color cursor line start + .label conio_line_color = $1e + // The current text color + .label conio_textcolor = $22 + .label l = $6b + .label m = 4 + .label z = $25 + .label z_1 = $14 + .label n = $33 + .label k = $63 + .label j = $32 + .label j_1 = $55 + .label j_2 = $56 + .label duck = $16 + // [0..255] 8-bit + .label tu = $6e + // Volume to max + .label score = $2a + .label y = $28 + .label time = $30 + .label j_3 = $68 + // Remainder after signed 8 bit division + .label rem8u = $f + .label peephole = $34 + .label y_1 = $34 + .label hiscore = $2a + .label hiscore_1 = $6c +.segment Code + // __start +__start: { + // __start::__init1 + // __ma char conio_cursor_x = 0 + // [1] conio_cursor_x = 0 -- vbuz1=vbuc1 + lda #0 + sta.z conio_cursor_x + // __ma char conio_cursor_y = 0 + // [2] conio_cursor_y = 0 -- vbuz1=vbuc1 + sta.z conio_cursor_y + // __ma char *conio_line_text = CONIO_SCREEN_TEXT + // [3] conio_line_text = DEFAULT_SCREEN -- pbuz1=pbuc1 + lda #DEFAULT_SCREEN + sta.z conio_line_text+1 + // __ma char *conio_line_color = CONIO_SCREEN_COLORS + // [4] conio_line_color = COLORRAM -- pbuz1=pbuc1 + lda #COLORRAM + sta.z conio_line_color+1 + // __ma char conio_textcolor = CONIO_TEXTCOLOR_DEFAULT + // [5] conio_textcolor = LIGHT_BLUE -- vbuz1=vbuc1 + lda #LIGHT_BLUE + sta.z conio_textcolor + // j,k,l,m + // [6] l = 0 -- vbuz1=vbuc1 + lda #0 + sta.z l + // j,k,l,m,n=0 + // [7] m = 0 -- vbuz1=vbuc1 + sta.z m + // #pragma constructor_for(conio_c64_init, cputc, clrscr, cscroll) + // [8] call conio_c64_init + jsr conio_c64_init + // [9] phi from __start::__init1 to __start::@1 [phi:__start::__init1->__start::@1] + // __start::@1 + // [10] call main + jsr main + // __start::@return + // [11] return + rts +} + // conio_c64_init +// Set initial cursor position +conio_c64_init: { + // Position cursor at current line + .label BASIC_CURSOR_LINE = $d6 + .label line = $4c + // char line = *BASIC_CURSOR_LINE + // [12] conio_c64_init::line#0 = *conio_c64_init::BASIC_CURSOR_LINE -- vbuz1=_deref_pbuc1 + lda.z BASIC_CURSOR_LINE + sta.z line + // if(line>=CONIO_HEIGHT) + // [13] if(conio_c64_init::line#0<$19) goto conio_c64_init::@2 -- vbuz1_lt_vbuc1_then_la1 + cmp #$19 + bcc __b1 + // [15] phi from conio_c64_init to conio_c64_init::@1 [phi:conio_c64_init->conio_c64_init::@1] + // [15] phi conio_c64_init::line#2 = $19-1 [phi:conio_c64_init->conio_c64_init::@1#0] -- vbuz1=vbuc1 + lda #$19-1 + sta.z line + // [14] phi from conio_c64_init to conio_c64_init::@2 [phi:conio_c64_init->conio_c64_init::@2] + // conio_c64_init::@2 + // [15] phi from conio_c64_init::@2 to conio_c64_init::@1 [phi:conio_c64_init::@2->conio_c64_init::@1] + // [15] phi conio_c64_init::line#2 = conio_c64_init::line#0 [phi:conio_c64_init::@2->conio_c64_init::@1#0] -- register_copy + // conio_c64_init::@1 + __b1: + // gotoxy(0, line) + // [16] gotoxy::y#2 = conio_c64_init::line#2 + // [17] call gotoxy + // [304] phi from conio_c64_init::@1 to gotoxy [phi:conio_c64_init::@1->gotoxy] + // [304] phi gotoxy::y#4 = gotoxy::y#2 [phi:conio_c64_init::@1->gotoxy#0] -- register_copy + jsr gotoxy + // conio_c64_init::@return + // } + // [18] return + rts +} + // main +main: { + .label __3 = $70 + .label __26 = 8 + .label __29 = 5 + .label __35 = $66 + .label __57 = $64 + .label __61 = $d + .label __66 = $b + .label __69 = $19 + .label __72 = $1b + .label __78 = $10 + .label __81 = 7 + .label __84 = 3 + .label __88 = $36 + .label __92 = $37 + .label __96 = $2e + .label __97 = $2e + .label __104 = $5d + .label __107 = $5f + .label __110 = $61 + .label __119 = $4a + .label __120 = $51 + .label __122 = $53 + .label __124 = $4a + .label __125 = $4d + .label __127 = $3a + .label __128 = $3a + .label __130 = $3c + .label __131 = $3c + .label __133 = $3e + .label __134 = $3e + .label __136 = $4f + .label __138 = $40 + .label __139 = $40 + .label __141 = $42 + .label __142 = $42 + .label __144 = $44 + .label __145 = $44 + .label __150 = $69 + .label __151 = $57 + .label __152 = $57 + .label __153 = $59 + .label __154 = $59 + .label __155 = $5b + .label __156 = $5b + .label __177 = 8 + .label __179 = $38 + .label __180 = $2e + // POKE + // [19] *((char *) 36879) = 8 -- _deref_pbuc1=vbuc2 + lda #8 + sta $900f + // chrout(lock) + // [20] chrout::petscii = lock -- vbuz1=vbuc1 + lda #lock + sta.z chrout.petscii + // [21] call chrout + // border and black paper + jsr chrout + // main::@50 + // chrout(lower) + // [22] chrout::petscii = lower -- vbuz1=vbuc1 + lda #lower + sta.z chrout.petscii + // [23] call chrout + //Lock UpperCase to Lowercase key + jsr chrout + // main::@51 + // m=0 + // [24] m = 0 -- vbuz1=vbuc1 + lda #0 + sta.z m + //Put text in Lowercase set + // main::@1 + __b1: + // for (m=0; m<40; m++) + // [25] if(m<$28) goto main::@2 -- vbuz1_lt_vbuc1_then_la1 + lda.z m + cmp #$28 + bcs !__b2+ + jmp __b2 + !__b2: + // [26] phi from main::@1 to main::@3 [phi:main::@1->main::@3] + // [26] phi n#109 = 0 [phi:main::@1->main::@3#0] -- vbuz1=vbuc1 + lda #0 + sta.z n + // [26] phi hiscore#110 = 0 [phi:main::@1->main::@3#1] -- vwuz1=vwuc1 + sta.z hiscore_1 + sta.z hiscore_1+1 + // [26] phi y#114 = 0 [phi:main::@1->main::@3#2] -- vwuz1=vwuc1 + sta.z y + sta.z y+1 + // [26] phi rem8u#127 = 0 [phi:main::@1->main::@3#3] -- vbuz1=vbuc1 + sta.z rem8u + // Load udgs. From 0-->39; + // main::@3 + __b3: + // clear_screen(32,0) + // [27] call clear_screen + // [321] phi from main::@3 to clear_screen [phi:main::@3->clear_screen] + // [321] phi clear_screen::n#5 = $20 [phi:main::@3->clear_screen#0] -- vbuz1=vbuc1 + lda #$20 + sta.z clear_screen.n + jsr clear_screen + // [28] phi from main::@3 to main::@52 [phi:main::@3->main::@52] + // main::@52 + // textcolor(7) + // [29] call textcolor + // Clear Screen with spaces & black ink + // [334] phi from main::@52 to textcolor [phi:main::@52->textcolor] + // [334] phi textcolor::color#7 = 7 [phi:main::@52->textcolor#0] -- vbuz1=vbuc1 + lda #7 + sta.z textcolor.color + jsr textcolor + // [30] phi from main::@52 to main::@53 [phi:main::@52->main::@53] + // main::@53 + // cputs(intro) + // [31] call cputs + // [337] phi from main::@53 to cputs [phi:main::@53->cputs] + // [337] phi cputs::s#11 = intro [phi:main::@53->cputs#0] -- pbuz1=pbuc1 + lda #intro + sta.z cputs.s+1 + jsr cputs + // [32] phi from main::@53 to main::@54 [phi:main::@53->main::@54] + // main::@54 + // textcolor(1) + // [33] call textcolor + // Yellow ink + // [334] phi from main::@54 to textcolor [phi:main::@54->textcolor] + // [334] phi textcolor::color#7 = 1 [phi:main::@54->textcolor#0] -- vbuz1=vbuc1 + lda #1 + sta.z textcolor.color + jsr textcolor + // [34] phi from main::@54 to main::@55 [phi:main::@54->main::@55] + // main::@55 + // cputs(levels) + // [35] call cputs + // [337] phi from main::@55 to cputs [phi:main::@55->cputs] + // [337] phi cputs::s#11 = levels [phi:main::@55->cputs#0] -- pbuz1=pbuc1 + lda #levels + sta.z cputs.s+1 + jsr cputs + // [36] phi from main::@55 to main::@56 [phi:main::@55->main::@56] + // main::@56 + // textcolor(2) + // [37] call textcolor + // White + // [334] phi from main::@56 to textcolor [phi:main::@56->textcolor] + // [334] phi textcolor::color#7 = 2 [phi:main::@56->textcolor#0] -- vbuz1=vbuc1 + lda #2 + sta.z textcolor.color + jsr textcolor + // [38] phi from main::@56 to main::@57 [phi:main::@56->main::@57] + // main::@57 + // cputs(foot) + // [39] call cputs + // [337] phi from main::@57 to cputs [phi:main::@57->cputs] + // [337] phi cputs::s#11 = foot [phi:main::@57->cputs#0] -- pbuz1=pbuc1 + lda #foot + sta.z cputs.s+1 + jsr cputs + // Red + // main::@4 + __b4: + // l=PEEK + // [40] l = *((char *) 197) -- vbuz1=_deref_pbuc1 + lda.z $c5 + sta.z l + // ++l; + // [41] l = ++ l -- vbuz1=_inc_vbuz1 + inc.z l + // while (l>5) + // [42] if(l>=5+1) goto main::@4 -- vbuz1_ge_vbuc1_then_la1 + lda.z l + cmp #5+1 + bcs __b4 + // [43] phi from main::@4 to main::@5 [phi:main::@4->main::@5] + // main::@5 + // clear_screen(4,0) + // [44] call clear_screen + // wait for 1-3-5-7-9 keys only + // [321] phi from main::@5 to clear_screen [phi:main::@5->clear_screen] + // [321] phi clear_screen::n#5 = 4 [phi:main::@5->clear_screen#0] -- vbuz1=vbuc1 + lda #4 + sta.z clear_screen.n + jsr clear_screen + // main::@58 + // POKE + // [45] *((char *) 36869) = $ff -- _deref_pbuc1=vbuc2 + lda #$ff + sta $9005 + // chrout(reverse_on) + // [46] chrout::petscii = reverse_on -- vbuz1=vbuc1 + lda #reverse_on + sta.z chrout.petscii + // [47] call chrout + // Graphic mode + jsr chrout + // main::@59 + // chrout(red) + // [48] chrout::petscii = red -- vbuz1=vbuc1 + lda #red + sta.z chrout.petscii + // [49] call chrout + jsr chrout + // main::@60 + // chrout(down) + // [50] chrout::petscii = down -- vbuz1=vbuc1 + lda #down + sta.z chrout.petscii + // [51] call chrout + jsr chrout + // [52] phi from main::@60 to main::@6 [phi:main::@60->main::@6] + // [52] phi n#89 = n#109 [phi:main::@60->main::@6#0] -- register_copy + // [52] phi k#101 = 1 [phi:main::@60->main::@6#1] -- vbuz1=vbuc1 + lda #1 + sta.z k + //for (z=1;z<23;z++) { POKE(7680+z*22,230);POKE(c+7680+z*22,2); POKE(7679+z*22,230); POKE(c+7679+z*22,2); } // 23 rows * 22 columns (7680 to 8185). 506 positions. + //k=1; do { chrout(brick); POKE(211,20); chrout(brick); ++k; } while (k<23); + //for (k=1;k<22;k++) { chrout(brick); POKE(211,22); chrout(brick); }; // 23 rows * 22 columns (7680 to 8185). 506 positions. + // main::@6 + __b6: + // for (k=1;k<22;k++) + // [53] if(k#101<$16) goto main::@7 -- vbuz1_lt_vbuc1_then_la1 + lda.z k + cmp #$16 + bcs !__b7+ + jmp __b7 + !__b7: + // main::@8 + // chrout(brick) + // [54] chrout::petscii = brick -- vbuz1=vbuc1 + lda #brick + sta.z chrout.petscii + // [55] call chrout + // 23 rows * 22 columns (7680 to 8185). 506 positions. + jsr chrout + // main::@61 + // POKE + // [56] *((char *) 8185) = brick -- _deref_pbuc1=vbuc2 + lda #brick + sta $1ff9 + // [57] *((char *)$1ff9+c) = 2 -- _deref_pbuc1=vbuc2 + lda #2 + sta $1ff9+c + // chrout(home) + // [58] chrout::petscii = home -- vbuz1=vbuc1 + lda #home + sta.z chrout.petscii + // [59] call chrout + //last brick from last line (#23) to avoid scrolling + jsr chrout + // main::@62 + // if (l>1) + // [60] if(l<1+1) goto main::@12 -- vbuz1_lt_vbuc1_then_la1 + lda.z l + cmp #1+1 + bcc __b8 + // [61] phi from main::@62 to main::@13 [phi:main::@62->main::@13] + // [61] phi z#28 = 1 [phi:main::@62->main::@13#0] -- vwuz1=vbuc1 + lda #<1 + sta.z z_1 + lda #>1 + sta.z z_1+1 + // [61] phi from main::@73 to main::@13 [phi:main::@73->main::@13] + // [61] phi z#28 = z#9 [phi:main::@73->main::@13#0] -- register_copy + // main::@13 + __b13: + // random((7-l),26-(3*l)) + // [62] random::k#0 = 7 - l -- vbuz1=vbuc1_minus_vbuz2 + lda #7 + sec + sbc.z l + sta.z random.k + // 3*l + // [63] main::$177 = l << 1 -- vbuz1=vbuz2_rol_1 + lda.z l + asl + sta.z __177 + // [64] main::$26 = main::$177 + l -- vbuz1=vbuz1_plus_vbuz2 + lda.z __26 + clc + adc.z l + sta.z __26 + // random((7-l),26-(3*l)) + // [65] random::n#0 = $1a - main::$26 -- vbuz1=vbuc1_minus_vbuz1 + lda #$1a + sec + sbc.z random.n + sta.z random.n + // [66] call random + // Write differential random bricks depending on 'l' level choosen + // [345] phi from main::@13 to random [phi:main::@13->random] + // [345] phi random::n#4 = random::n#0 [phi:main::@13->random#0] -- register_copy + // [345] phi random::k#4 = random::k#0 [phi:main::@13->random#1] -- register_copy + jsr random + // main::@71 + // z+m + // [67] main::$29 = z#28 + m -- vwuz1=vwuz2_plus_vbuz3 + lda.z m + clc + adc.z z_1 + sta.z __29 + lda #0 + adc.z z_1+1 + sta.z __29+1 + // if (z+m>505) + // [68] if(main::$29<=$1f9) goto main::@14 -- vwuz1_le_vwuc1_then_la1 + cmp #>$1f9 + bne !+ + lda.z __29 + cmp #<$1f9 + !: + bcs !__b24+ + jmp __b24 + !__b24: + bne !__b24+ + jmp __b24 + !__b24: + // [69] phi from main::@71 main::@73 to main::@12 [phi:main::@71/main::@73->main::@12] + // [69] phi z#128 = z#28 [phi:main::@71/main::@73->main::@12#0] -- register_copy + jmp __b12 + // [69] phi from main::@62 to main::@12 [phi:main::@62->main::@12] + __b8: + // [69] phi z#128 = 1 [phi:main::@62->main::@12#0] -- vwuz1=vbuc1 + lda #<1 + sta.z z_1 + lda #>1 + sta.z z_1+1 + // main::@12 + __b12: + // POKE + // [70] *((char *) 36878) = $f -- _deref_pbuc1=vbuc2 + lda #$f + sta $900e + // chrout(home) + // [71] chrout::petscii = home -- vbuz1=vbuc1 + lda #home + sta.z chrout.petscii + // [72] call chrout + // Duck #1 + jsr chrout + // main::@65 + // chrout(yellow) + // [73] chrout::petscii = yellow -- vbuz1=vbuc1 + lda #yellow + sta.z chrout.petscii + // [74] call chrout + jsr chrout + // main::@66 + // chrout(80) + // [75] chrout::petscii = $50 -- vbuz1=vbuc1 + lda #$50 + sta.z chrout.petscii + // [76] call chrout + jsr chrout + // main::@67 + // chrout(84) + // [77] chrout::petscii = $54 -- vbuz1=vbuc1 + lda #$54 + sta.z chrout.petscii + // [78] call chrout + jsr chrout + // main::@68 + // chrout(83) + // [79] chrout::petscii = $53 -- vbuz1=vbuc1 + lda #$53 + sta.z chrout.petscii + // [80] call chrout + jsr chrout + // main::@69 + // chrout(58) + // [81] chrout::petscii = $3a -- vbuz1=vbuc1 + lda #$3a + sta.z chrout.petscii + // [82] call chrout + jsr chrout + // main::@70 + // POKE + // [83] *((char *) 211) = $12 -- _deref_pbuc1=vbuc2 + lda #$12 + sta.z $d3 + // [84] phi from main::@70 to main::@17 [phi:main::@70->main::@17] + // [84] phi j#13 = 0 [phi:main::@70->main::@17#0] -- vbuz1=vbuc1 + lda #0 + sta.z j_1 + // jump to Column 18 + // main::@17 + __b17: + // for (j=0; j<4; ++j) + // [85] if(j#13<4) goto main::@18 -- vbuz1_lt_vbuc1_then_la1 + lda.z j_1 + cmp #4 + bcs !__b18+ + jmp __b18 + !__b18: + // [86] phi from main::@17 to main::@19 [phi:main::@17->main::@19] + // main::@19 + // write_score() + // [87] call write_score + // Write 'TM:9', yellow + // [351] phi from main::@19 to write_score [phi:main::@19->write_score] + // [351] phi score#13 = 0 [phi:main::@19->write_score#0] -- vwuz1=vbuc1 + lda #<0 + sta.z score + sta.z score+1 + jsr write_score + // main::@75 + // chrout(home) + // [88] chrout::petscii = home -- vbuz1=vbuc1 + lda #home + sta.z chrout.petscii + // [89] call chrout + // Write Score (yellow) + jsr chrout + // main::@76 + // chrout(green) + // [90] chrout::petscii = green -- vbuz1=vbuc1 + lda #green + sta.z chrout.petscii + // [91] call chrout + jsr chrout + // main::@77 + // POKE + // [92] *((char *) 211) = $a -- _deref_pbuc1=vbuc2 + lda #$a + sta.z $d3 + // [93] phi from main::@77 to main::@20 [phi:main::@77->main::@20] + // [93] phi j#16 = 0 [phi:main::@77->main::@20#0] -- vbuz1=vbuc1 + lda #0 + sta.z j_2 + // Jump to column 10 + // main::@20 + __b20: + // for (j=0; j<5; j++) + // [94] if(j#16<5) goto main::@21 -- vbuz1_lt_vbuc1_then_la1 + lda.z j_2 + cmp #5 + bcs !__b21+ + jmp __b21 + !__b21: + // [95] phi from main::@20 to main::@22 [phi:main::@20->main::@22] + // [95] phi n#52 = n#89 [phi:main::@20->main::@22#0] -- register_copy + // [95] phi peephole#52 = $1f1f [phi:main::@20->main::@22#1] -- vwuz1=vwuc1 + lda #<$1f1f + sta.z peephole + lda #>$1f1f + sta.z peephole+1 + // [95] phi z#102 = z#128 [phi:main::@20->main::@22#2] -- register_copy + // [95] phi y#49 = y#114 [phi:main::@20->main::@22#3] -- register_copy + // [95] phi rem8u#48 = rem8u#127 [phi:main::@20->main::@22#4] -- register_copy + // [95] phi tu#13 = 1 [phi:main::@20->main::@22#5] -- vwuz1=vbuc1 + lda #<1 + sta.z tu + lda #>1 + sta.z tu+1 + // Write 'DUCK', green + // [95] phi from main::@87 to main::@22 [phi:main::@87->main::@22] + // [95] phi n#52 = n#20 [phi:main::@87->main::@22#0] -- register_copy + // [95] phi peephole#52 = peephole#12 [phi:main::@87->main::@22#1] -- register_copy + // [95] phi z#102 = z#25 [phi:main::@87->main::@22#2] -- register_copy + // [95] phi y#49 = y#18 [phi:main::@87->main::@22#3] -- register_copy + // [95] phi rem8u#48 = rem8u#25 [phi:main::@87->main::@22#4] -- register_copy + // [95] phi tu#13 = tu#1 [phi:main::@87->main::@22#5] -- register_copy + // main::@22 + __b22: + // chrout(home) + // [96] chrout::petscii = home -- vbuz1=vbuc1 + lda #home + sta.z chrout.petscii + // [97] call chrout + jsr chrout + // main::@79 + // chrout(green) + // [98] chrout::petscii = green -- vbuz1=vbuc1 + lda #green + sta.z chrout.petscii + // [99] call chrout + jsr chrout + // main::@80 + // chrout(reverse_on) + // [100] chrout::petscii = reverse_on -- vbuz1=vbuc1 + lda #reverse_on + sta.z chrout.petscii + // [101] call chrout + jsr chrout + // main::@81 + // POKE + // [102] *((char *) 211) = $f -- _deref_pbuc1=vbuc2 + lda #$f + sta.z $d3 + // if (tu<10) + // [103] if(tu#13<$a) goto main::@23 -- vwuz1_lt_vbuc1_then_la1 + // Jump to column 15 + lda.z tu+1 + bne !+ + lda.z tu + cmp #$a + bcs !__b23+ + jmp __b23 + !__b23: + !: + // main::@45 + // chrout(49) + // [104] chrout::petscii = $31 -- vbuz1=vbuc1 + lda #$31 + sta.z chrout.petscii + // [105] call chrout + jsr chrout + // main::@82 + // chrout(48) + // [106] chrout::petscii = $30 -- vbuz1=vbuc1 + lda #$30 + sta.z chrout.petscii + // [107] call chrout + jsr chrout + // [108] phi from main::@103 main::@104 main::@105 main::@106 main::@23 main::@82 main::@84 to main::@24 [phi:main::@103/main::@104/main::@105/main::@106/main::@23/main::@82/main::@84->main::@24] + __b11: + // Write duck number + // main::@24 + // random(0,255) + // [109] call random + // [345] phi from main::@24 to random [phi:main::@24->random] + // [345] phi random::n#4 = $ff [phi:main::@24->random#0] -- vbuz1=vbuc1 + lda #$ff + sta.z random.n + // [345] phi random::k#4 = 0 [phi:main::@24->random#1] -- vbuz1=vbuc1 + lda #0 + sta.z random.k + jsr random + // main::@83 + // duck=m + // [110] duck#0 = m -- vwuz1=vbuz2 + lda.z m + sta.z duck + lda #0 + sta.z duck+1 + // random(0,255) + // [111] call random + // [345] phi from main::@83 to random [phi:main::@83->random] + // [345] phi random::n#4 = $ff [phi:main::@83->random#0] -- vbuz1=vbuc1 + lda #$ff + sta.z random.n + // [345] phi random::k#4 = 0 [phi:main::@83->random#1] -- vbuz1=vbuc1 + lda #0 + sta.z random.k + jsr random + // main::@84 + // m+7701 + // [112] main::$61 = m + $1e15 -- vwuz1=vbuz2_plus_vwuc1 + lda.z m + clc + adc #<$1e15 + sta.z __61 + lda #>$1e15 + adc #0 + sta.z __61+1 + // duck=m+7701+duck + // [113] duck#1 = main::$61 + duck#0 -- vwuz1=vwuz2_plus_vwuz1 + clc + lda.z duck + adc.z __61 + sta.z duck + lda.z duck+1 + adc.z __61+1 + sta.z duck+1 + // PEEK + // [114] main::$66 = duck#1 + 1 -- vwuz1=vwuz2_plus_1 + clc + lda.z duck + adc #1 + sta.z __66 + lda.z duck+1 + adc #0 + sta.z __66+1 + // [115] main::$69 = duck#1 + $16 -- vwuz1=vwuz2_plus_vbuc1 + lda #$16 + clc + adc.z duck + sta.z __69 + lda #0 + adc.z duck+1 + sta.z __69+1 + // [116] main::$72 = duck#1 + $17 -- vwuz1=vwuz2_plus_vbuc1 + lda #$17 + clc + adc.z duck + sta.z __72 + lda #0 + adc.z duck+1 + sta.z __72+1 + // while ((duck>8163) || PEEK(duck)==brick || PEEK(duck+1)==brick || PEEK(duck+22)==brick || PEEK(duck+23)==brick) + // [117] if(duck#1>$1fe3) goto main::@24 -- vwuz1_gt_vwuc1_then_la1 + lda #>$1fe3 + cmp.z duck+1 + bcc __b11 + bne !+ + lda #<$1fe3 + cmp.z duck + bcc __b11 + !: + // main::@106 + // [118] if(*((char *)duck#1)==brick) goto main::@24 -- _deref_pbuz1_eq_vbuc1_then_la1 + lda #brick + ldy #0 + cmp (duck),y + beq __b11 + // main::@105 + // [119] if(*((char *)main::$66)==brick) goto main::@24 -- _deref_pbuz1_eq_vbuc1_then_la1 + cmp (__66),y + beq __b11 + // main::@104 + // [120] if(*((char *)main::$69)==brick) goto main::@24 -- _deref_pbuz1_eq_vbuc1_then_la1 + cmp (__69),y + beq __b11 + // main::@103 + // [121] if(*((char *)main::$72)==brick) goto main::@24 -- _deref_pbuz1_eq_vbuc1_then_la1 + cmp (__72),y + bne !__b11+ + jmp __b11 + !__b11: + // [122] phi from main::@103 to main::@25 [phi:main::@103->main::@25] + // main::@25 + // chrono_restart() + // [123] call chrono_restart + jsr chrono_restart + // [124] phi from main::@25 to main::@26 [phi:main::@25->main::@26] + // [124] phi n#20 = n#52 [phi:main::@25->main::@26#0] -- register_copy + // [124] phi peephole#12 = peephole#52 [phi:main::@25->main::@26#1] -- register_copy + // [124] phi z#100 = z#102 [phi:main::@25->main::@26#2] -- register_copy + // [124] phi y#18 = y#49 [phi:main::@25->main::@26#3] -- register_copy + // [124] phi rem8u#25 = rem8u#48 [phi:main::@25->main::@26#4] -- register_copy + // [124] phi score#19 = score#38 [phi:main::@25->main::@26#5] -- register_copy + // [124] phi time#11 = 0 [phi:main::@25->main::@26#6] -- vwuz1=vbuc1 + lda #<0 + sta.z time + sta.z time+1 + // main::@26 + __b26: + // while (time<10) + // [125] if(time#11<$a) goto main::@27 -- vwuz1_lt_vbuc1_then_la1 + lda.z time+1 + bne !+ + lda.z time + cmp #$a + bcs !__b27+ + jmp __b27 + !__b27: + !: + // main::@28 + // tu++; + // [126] tu#1 = ++ tu#13 -- vwuz1=_inc_vwuz1 + inc.z tu + bne !+ + inc.z tu+1 + !: + // score=score-10 + // [127] score#4 = score#19 - $a -- vwuz1=vwuz1_minus_vbuc1 + sec + lda.z score + sbc #$a + sta.z score + lda.z score+1 + sbc #0 + sta.z score+1 + // write_score() + // [128] call write_score + // [351] phi from main::@28 to write_score [phi:main::@28->write_score] + // [351] phi score#13 = score#4 [phi:main::@28->write_score#0] -- register_copy + jsr write_score + // main::@86 + // POKE + // [129] *((char *) 36877) = $82 -- _deref_pbuc1=vbuc2 + lda #$82 + sta $900d + // wait(20) + // [130] call wait + // [381] phi from main::@86 to wait [phi:main::@86->wait] + // [381] phi z#53 = z#100 [phi:main::@86->wait#0] -- register_copy + // [381] phi wait::n#6 = $14 [phi:main::@86->wait#1] -- vbuz1=vbuc1 + lda #$14 + sta.z wait.n + jsr wait + // main::@87 + // POKE + // [131] *((char *) 36877) = 0 -- _deref_pbuc1=vbuc2 + lda #0 + sta $900d + // [132] main::$150 = duck#1 + c -- vwuz1=vwuz2_plus_vwuc1 + lda.z duck + clc + adc #c + sta.z __150+1 + // [133] *((char *)main::$150) = 0 -- _deref_pbuz1=vbuc1 + lda #0 + tay + sta (__150),y + // [134] main::$151 = duck#1 -- vwuz1=vwuz2 + lda.z duck + sta.z __151 + lda.z duck+1 + sta.z __151+1 + // [135] main::$152 = main::$151 + 1+c -- vwuz1=vwuz1_plus_vwuc1 + lda.z __152 + clc + adc #<1+c + sta.z __152 + lda.z __152+1 + adc #>1+c + sta.z __152+1 + // [136] *((char *)main::$152) = 0 -- _deref_pbuz1=vbuc1 + tya + sta (__152),y + // [137] main::$153 = duck#1 -- vwuz1=vwuz2 + lda.z duck + sta.z __153 + lda.z duck+1 + sta.z __153+1 + // [138] main::$154 = main::$153 + $16+c -- vwuz1=vwuz1_plus_vwuc1 + lda.z __154 + clc + adc #<$16+c + sta.z __154 + lda.z __154+1 + adc #>$16+c + sta.z __154+1 + // [139] *((char *)main::$154) = 0 -- _deref_pbuz1=vbuc1 + tya + sta (__154),y + // [140] main::$155 = duck#1 -- vwuz1=vwuz2 + lda.z duck + sta.z __155 + lda.z duck+1 + sta.z __155+1 + // [141] main::$156 = main::$155 + $17+c -- vwuz1=vwuz1_plus_vwuc1 + lda.z __156 + clc + adc #<$17+c + sta.z __156 + lda.z __156+1 + adc #>$17+c + sta.z __156+1 + // [142] *((char *)main::$156) = 0 -- _deref_pbuz1=vbuc1 + tya + sta (__156),y + // while (tu<11) + // [143] if(tu#1<$b) goto main::@22 -- vwuz1_lt_vbuc1_then_la1 + lda.z tu+1 + bne !+ + lda.z tu + cmp #$b + bcs !__b22+ + jmp __b22 + !__b22: + !: + // [144] phi from main::@87 to main::@44 [phi:main::@87->main::@44] + // main::@44 + // clear_screen(4,0) + // [145] call clear_screen + // 10 ducks + // [321] phi from main::@44 to clear_screen [phi:main::@44->clear_screen] + // [321] phi clear_screen::n#5 = 4 [phi:main::@44->clear_screen#0] -- vbuz1=vbuc1 + lda #4 + sta.z clear_screen.n + jsr clear_screen + // main::@91 + // POKE + // [146] *((char *) 36869) = $f0 -- _deref_pbuc1=vbuc2 + lda #$f0 + sta $9005 + // chrout(lower) + // [147] chrout::petscii = lower -- vbuz1=vbuc1 + lda #lower + sta.z chrout.petscii + // [148] call chrout + jsr chrout + // [149] phi from main::@91 to main::@92 [phi:main::@91->main::@92] + // main::@92 + // textcolor(7) + // [150] call textcolor + // Return to text mode, lowcase + // [334] phi from main::@92 to textcolor [phi:main::@92->textcolor] + // [334] phi textcolor::color#7 = 7 [phi:main::@92->textcolor#0] -- vbuz1=vbuc1 + lda #7 + sta.z textcolor.color + jsr textcolor + // [151] phi from main::@92 to main::@93 [phi:main::@92->main::@93] + // main::@93 + // cputs(game_over) + // [152] call cputs + // [337] phi from main::@93 to cputs [phi:main::@93->cputs] + // [337] phi cputs::s#11 = game_over [phi:main::@93->cputs#0] -- pbuz1=pbuc1 + lda #game_over + sta.z cputs.s+1 + jsr cputs + // [153] phi from main::@93 to main::@94 [phi:main::@93->main::@94] + // main::@94 + // textcolor(2) + // [154] call textcolor + // Yellow + // [334] phi from main::@94 to textcolor [phi:main::@94->textcolor] + // [334] phi textcolor::color#7 = 2 [phi:main::@94->textcolor#0] -- vbuz1=vbuc1 + lda #2 + sta.z textcolor.color + jsr textcolor + // [155] phi from main::@94 to main::@95 [phi:main::@94->main::@95] + // main::@95 + // cputs(your_score) + // [156] call cputs + // [337] phi from main::@95 to cputs [phi:main::@95->cputs] + // [337] phi cputs::s#11 = your_score [phi:main::@95->cputs#0] -- pbuz1=pbuc1 + lda #your_score + sta.z cputs.s+1 + jsr cputs + // [157] phi from main::@95 to main::@96 [phi:main::@95->main::@96] + // main::@96 + // cputs(buffer) + // [158] call cputs + // [337] phi from main::@96 to cputs [phi:main::@96->cputs] + // [337] phi cputs::s#11 = buffer [phi:main::@96->cputs#0] -- pbuz1=pbuc1 + lda #buffer + sta.z cputs.s+1 + jsr cputs + // [159] phi from main::@96 to main::@97 [phi:main::@96->main::@97] + // main::@97 + // textcolor(3) + // [160] call textcolor + // Red + // [334] phi from main::@97 to textcolor [phi:main::@97->textcolor] + // [334] phi textcolor::color#7 = 3 [phi:main::@97->textcolor#0] -- vbuz1=vbuc1 + lda #3 + sta.z textcolor.color + jsr textcolor + // [161] phi from main::@97 to main::@98 [phi:main::@97->main::@98] + // main::@98 + // cputs(high_score) + // [162] call cputs + // [337] phi from main::@98 to cputs [phi:main::@98->cputs] + // [337] phi cputs::s#11 = high_score [phi:main::@98->cputs#0] -- pbuz1=pbuc1 + lda #high_score + sta.z cputs.s+1 + jsr cputs + // main::@99 + // if (score>hiscore) + // [163] if(score#38<=hiscore#110) goto main::@114 -- vwuz1_le_vwuz2_then_la1 + lda.z score+1 + cmp.z hiscore_1+1 + bne !+ + lda.z score + cmp.z hiscore_1 + beq __b114 + !: + bcc __b114 + // [165] phi from main::@114 main::@99 to main::@46 [phi:main::@114/main::@99->main::@46] + // [165] phi hiscore#19 = hiscore#124 [phi:main::@114/main::@99->main::@46#0] -- register_copy + jmp __b46 + // main::@114 + __b114: + // [164] hiscore#124 = hiscore#110 -- vwuz1=vwuz2 + lda.z hiscore_1 + sta.z hiscore + lda.z hiscore_1+1 + sta.z hiscore+1 + // main::@46 + __b46: + // utoa(hiscore,buffer,10) + // [166] utoa::value#2 = hiscore#19 -- vwuz1=vwuz2 + lda.z hiscore + sta.z utoa.value + lda.z hiscore+1 + sta.z utoa.value+1 + // [167] call utoa + // [390] phi from main::@46 to utoa [phi:main::@46->utoa] + // [390] phi utoa::value#10 = utoa::value#2 [phi:main::@46->utoa#0] -- register_copy + jsr utoa + // [168] phi from main::@46 to main::@100 [phi:main::@46->main::@100] + // main::@100 + // cputs(buffer) + // [169] call cputs + // [337] phi from main::@100 to cputs [phi:main::@100->cputs] + // [337] phi cputs::s#11 = buffer [phi:main::@100->cputs#0] -- pbuz1=pbuc1 + lda #buffer + sta.z cputs.s+1 + jsr cputs + // [170] phi from main::@100 to main::@101 [phi:main::@100->main::@101] + // main::@101 + // textcolor(1) + // [171] call textcolor + // Cyan + // [334] phi from main::@101 to textcolor [phi:main::@101->textcolor] + // [334] phi textcolor::color#7 = 1 [phi:main::@101->textcolor#0] -- vbuz1=vbuc1 + lda #1 + sta.z textcolor.color + jsr textcolor + // [172] phi from main::@101 to main::@102 [phi:main::@101->main::@102] + // main::@102 + // cputs(play_again) + // [173] call cputs + // [337] phi from main::@102 to cputs [phi:main::@102->cputs] + // [337] phi cputs::s#11 = play_again [phi:main::@102->cputs#0] -- pbuz1=pbuc1 + lda #play_again + sta.z cputs.s+1 + jsr cputs + // white + // main::@47 + __b47: + // j=PEEK + // [174] j#19 = *((char *) 197) -- vbuz1=_deref_pbuc1 + lda.z $c5 + sta.z j_3 + // while (j!= 11 && j!=28 ) + // [175] if(j#19==$b) goto main::@48 -- vbuz1_eq_vbuc1_then_la1 + lda #$b + cmp.z j_3 + beq __b48 + // main::@112 + // [176] if(j#19!=$1c) goto main::@47 -- vbuz1_neq_vbuc1_then_la1 + lda #$1c + cmp.z j_3 + bne __b47 + // main::@48 + __b48: + // while (j==11) + // [177] if(j#19==$b) goto main::@113 -- vbuz1_eq_vbuc1_then_la1 + lda #$b + cmp.z j_3 + beq __b113 + // main::@49 + // asm + // asm { jsr$FD22 } + // N pressed. Exit game + jsr $fd22 + // main::@return + // } + // [179] return + rts + // main::@113 + __b113: + // [180] hiscore#123 = hiscore#19 -- vwuz1=vwuz2 + lda.z hiscore + sta.z hiscore_1 + lda.z hiscore+1 + sta.z hiscore_1+1 + // [26] phi from main::@113 to main::@3 [phi:main::@113->main::@3] + // [26] phi n#109 = n#20 [phi:main::@113->main::@3#0] -- register_copy + // [26] phi hiscore#110 = hiscore#123 [phi:main::@113->main::@3#1] -- register_copy + // [26] phi y#114 = y#18 [phi:main::@113->main::@3#2] -- register_copy + // [26] phi rem8u#127 = rem8u#25 [phi:main::@113->main::@3#3] -- register_copy + jmp __b3 + // [181] phi from main::@26 to main::@27 [phi:main::@26->main::@27] + // main::@27 + __b27: + // read_chrono() + // [182] call read_chrono + jsr read_chrono + // main::@85 + // m=PEEK + // [183] m = *((char *) 37151) -- vbuz1=_deref_pbuc1 + // Joystick routine + lda $911f + sta.z m + // POKE + // [184] *((char *) 37154) = $7f -- _deref_pbuc1=vbuc2 + lda #$7f + sta $9122 + // n=PEEK + // [185] n#14 = *((char *) 37152) -- vbuz1=_deref_pbuc1 + lda $9120 + sta.z n + // POKE + // [186] *((char *) 37154) = $ff -- _deref_pbuc1=vbuc2 + lda #$ff + sta $9122 + // 16&m + // [187] main::$78 = $10 & m -- vbuz1=vbuc1_band_vbuz2 + lda #$10 + and.z m + sta.z __78 + // if ((16&m)==0) + // [188] if(main::$78!=0) goto main::@29 -- vbuz1_neq_0_then_la1 + bne __b29 + // main::@37 + // y--; + // [189] y#0 = -- y#18 -- vwuz1=_dec_vwuz1 + lda.z y + bne !+ + dec.z y+1 + !: + dec.z y + // [190] phi from main::@37 main::@85 to main::@29 [phi:main::@37/main::@85->main::@29] + // [190] phi y#10 = y#0 [phi:main::@37/main::@85->main::@29#0] -- register_copy + // main::@29 + __b29: + // 128&n + // [191] main::$81 = $80 & n#14 -- vbuz1=vbuc1_band_vbuz2 + lda #$80 + and.z n + sta.z __81 + // if ((128&n)==0) + // [192] if(main::$81!=0) goto main::@30 -- vbuz1_neq_0_then_la1 + bne __b30 + // main::@38 + // y++; + // [193] y#1 = ++ y#10 -- vwuz1=_inc_vwuz1 + inc.z y + bne !+ + inc.z y+1 + !: + // [194] phi from main::@29 main::@38 to main::@30 [phi:main::@29/main::@38->main::@30] + // [194] phi y#11 = y#10 [phi:main::@29/main::@38->main::@30#0] -- register_copy + // main::@30 + __b30: + // 4&m + // [195] main::$84 = 4 & m -- vbuz1=vbuc1_band_vbuz2 + lda #4 + and.z m + sta.z __84 + // if ((4&m)==0) + // [196] if(main::$84!=0) goto main::@31 -- vbuz1_neq_0_then_la1 + bne __b31 + // main::@39 + // y=y-22 + // [197] y#2 = y#11 - $16 -- vwuz1=vwuz1_minus_vbuc1 + sec + lda.z y + sbc #$16 + sta.z y + lda.z y+1 + sbc #0 + sta.z y+1 + // [198] phi from main::@30 main::@39 to main::@31 [phi:main::@30/main::@39->main::@31] + // [198] phi y#12 = y#11 [phi:main::@30/main::@39->main::@31#0] -- register_copy + // main::@31 + __b31: + // 8&m + // [199] main::$88 = 8 & m -- vbuz1=vbuc1_band_vbuz2 + lda #8 + and.z m + sta.z __88 + // if ((8&m)==0) + // [200] if(main::$88!=0) goto main::@32 -- vbuz1_neq_0_then_la1 + bne __b32 + // main::@40 + // y=y+22 + // [201] y#3 = y#12 + $16 -- vwuz1=vwuz1_plus_vbuc1 + lda #$16 + clc + adc.z y + sta.z y + bcc !+ + inc.z y+1 + !: + // [202] phi from main::@31 main::@40 to main::@32 [phi:main::@31/main::@40->main::@32] + // [202] phi y#13 = y#12 [phi:main::@31/main::@40->main::@32#0] -- register_copy + // main::@32 + __b32: + // 32&m + // [203] main::$92 = $20 & m -- vbuz1=vbuc1_band_vbuz2 + lda #$20 + and.z m + sta.z __92 + // if ((32&m)==0) + // [204] if(main::$92!=0) goto main::@33 -- vbuz1_neq_0_then_la1 + bne __b33 + // main::@41 + // POKE + // [205] *((char *) 36877) = $82 -- _deref_pbuc1=vbuc2 + lda #$82 + sta $900d + // if (peephole!=duck) + // [206] if(peephole#12!=duck#1) goto main::@34 -- vwuz1_neq_vwuz2_then_la1 + lda.z peephole+1 + cmp.z duck+1 + beq !__b34+ + jmp __b34 + !__b34: + lda.z peephole + cmp.z duck + beq !__b34+ + jmp __b34 + !__b34: + // main::@42 + // 12-time + // [207] main::$96 = $c - div16u8u::return#2 -- vwuz1=vwuc1_minus_vwuz2 + sec + lda #<$c + sbc.z div16u8u.return_1 + sta.z __96 + lda #>$c + sbc.z div16u8u.return_1+1 + sta.z __96+1 + // (12-time)*10 + // [208] main::$179 = main::$96 << 2 -- vwuz1=vwuz2_rol_2 + lda.z __96 + asl + sta.z __179 + lda.z __96+1 + rol + sta.z __179+1 + asl.z __179 + rol.z __179+1 + // [209] main::$180 = main::$179 + main::$96 -- vwuz1=vwuz2_plus_vwuz1 + clc + lda.z __180 + adc.z __179 + sta.z __180 + lda.z __180+1 + adc.z __179+1 + sta.z __180+1 + // [210] main::$97 = main::$180 << 1 -- vwuz1=vwuz1_rol_1 + asl.z __97 + rol.z __97+1 + // score=score+(12-time)*10 + // [211] score#8 = score#19 + main::$97 -- vwuz1=vwuz1_plus_vwuz2 + clc + lda.z score + adc.z __97 + sta.z score + lda.z score+1 + adc.z __97+1 + sta.z score+1 + // wait(10) + // [212] call wait + // [381] phi from main::@42 to wait [phi:main::@42->wait] + // [381] phi z#53 = z#100 [phi:main::@42->wait#0] -- register_copy + // [381] phi wait::n#6 = $a [phi:main::@42->wait#1] -- vbuz1=vbuc1 + lda #$a + sta.z wait.n + jsr wait + // [213] phi from main::@42 to main::@35 [phi:main::@42->main::@35] + // [213] phi score#81 = score#8 [phi:main::@42->main::@35#0] -- register_copy + // [213] phi time#38 = $a [phi:main::@42->main::@35#1] -- vwuz1=vbuc1 + lda #<$a + sta.z time + lda #>$a + sta.z time+1 + // main::@35 + __b35: + // POKE + // [214] *((char *) 36877) = 0 -- _deref_pbuc1=vbuc2 + lda #0 + sta $900d + // [215] phi from main::@32 main::@35 to main::@33 [phi:main::@32/main::@35->main::@33] + // [215] phi score#43 = score#19 [phi:main::@32/main::@35->main::@33#0] -- register_copy + // [215] phi time#17 = div16u8u::return#2 [phi:main::@32/main::@35->main::@33#1] -- register_copy + // [215] phi z#48 = z#100 [phi:main::@32/main::@35->main::@33#2] -- register_copy + // main::@33 + __b33: + // PEEK + // [216] main::$104 = y#13 + 1 -- vwuz1=vwuz2_plus_1 + clc + lda.z y + adc #1 + sta.z __104 + lda.z y+1 + adc #0 + sta.z __104+1 + // [217] main::$107 = y#13 + $16 -- vwuz1=vwuz2_plus_vbuc1 + lda #$16 + clc + adc.z y + sta.z __107 + lda #0 + adc.z y+1 + sta.z __107+1 + // [218] main::$110 = y#13 + $17 -- vwuz1=vwuz2_plus_vbuc1 + lda #$17 + clc + adc.z y + sta.z __110 + lda #0 + adc.z y+1 + sta.z __110+1 + // if (PEEK(y)!=brick && PEEK(y+1)!=brick && PEEK(y+22)!=brick && PEEK(y+23)!=brick && y>7702 && y<8163) + // [219] if(*((char *)y#13)==brick) goto main::@36 -- _deref_pbuz1_eq_vbuc1_then_la1 + lda #brick + ldy #0 + cmp (y),y + beq __b36 + // main::@111 + // [220] if(*((char *)main::$104)==brick) goto main::@36 -- _deref_pbuz1_eq_vbuc1_then_la1 + cmp (__104),y + beq __b36 + // main::@110 + // [221] if(*((char *)main::$107)!=brick) goto main::@109 -- _deref_pbuz1_neq_vbuc1_then_la1 + lda (__107),y + cmp #brick + beq !__b109+ + jmp __b109 + !__b109: + // [222] phi from main::@107 main::@108 main::@109 main::@110 main::@111 to main::@36 [phi:main::@107/main::@108/main::@109/main::@110/main::@111->main::@36] + // [222] phi from main::@33 main::@43 to main::@36 [phi:main::@33/main::@43->main::@36] + // [222] phi y#35 = peephole#12 [phi:main::@33/main::@43->main::@36#0] -- register_copy + // main::@36 + __b36: + // POKE + // [223] *((char *)y#35) = $fd -- _deref_pbuz1=vbuc1 + lda #$fd + ldy #0 + sta (y_1),y + // [224] main::$125 = y#35 + c -- vwuz1=vwuz2_plus_vwuc1 + lda.z y_1 + clc + adc #c + sta.z __125+1 + // [225] *((char *)main::$125) = 1 -- _deref_pbuz1=vbuc1 + lda #1 + sta (__125),y + // [226] main::$127 = y#35 + 1 -- vwuz1=vwuz2_plus_1 + clc + lda.z y_1 + adc #1 + sta.z __127 + lda.z y_1+1 + adc #0 + sta.z __127+1 + // [227] *((char *)main::$127) = $ed -- _deref_pbuz1=vbuc1 + lda #$ed + sta (__127),y + // [228] main::$128 = main::$127 + c -- vwuz1=vwuz1_plus_vwuc1 + lda.z __128 + clc + adc #c + sta.z __128+1 + // [229] *((char *)main::$128) = 1 -- _deref_pbuz1=vbuc1 + lda #1 + sta (__128),y + // [230] main::$130 = y#35 + $16 -- vwuz1=vwuz2_plus_vbuc1 + lda #$16 + clc + adc.z y_1 + sta.z __130 + tya + adc.z y_1+1 + sta.z __130+1 + // [231] *((char *)main::$130) = $ee -- _deref_pbuz1=vbuc1 + lda #$ee + sta (__130),y + // [232] main::$131 = main::$130 + c -- vwuz1=vwuz1_plus_vwuc1 + lda.z __131 + clc + adc #c + sta.z __131+1 + // [233] *((char *)main::$131) = 1 -- _deref_pbuz1=vbuc1 + lda #1 + sta (__131),y + // [234] main::$133 = y#35 + $17 -- vwuz1=vwuz2_plus_vbuc1 + lda #$17 + clc + adc.z y_1 + sta.z __133 + tya + adc.z y_1+1 + sta.z __133+1 + // [235] *((char *)main::$133) = $f0 -- _deref_pbuz1=vbuc1 + lda #$f0 + sta (__133),y + // [236] main::$134 = main::$133 + c -- vwuz1=vwuz1_plus_vwuc1 + lda.z __134 + clc + adc #c + sta.z __134+1 + // [237] *((char *)main::$134) = 1 -- _deref_pbuz1=vbuc1 + lda #1 + sta (__134),y + // wait(5) + // [238] call wait + // Clear peephole if there is not bricks contact + // [381] phi from main::@36 to wait [phi:main::@36->wait] + // [381] phi z#53 = z#48 [phi:main::@36->wait#0] -- register_copy + // [381] phi wait::n#6 = 5 [phi:main::@36->wait#1] -- vbuz1=vbuc1 + lda #5 + sta.z wait.n + jsr wait + // main::@89 + // POKE + // [239] *((char *)duck#1) = 0 -- _deref_pbuz1=vbuc1 + lda #0 + tay + sta (duck),y + // [240] main::$136 = duck#1 + c -- vwuz1=vwuz2_plus_vwuc1 + lda.z duck + clc + adc #c + sta.z __136+1 + // [241] *((char *)main::$136) = 7 -- _deref_pbuz1=vbuc1 + lda #7 + sta (__136),y + // [242] main::$138 = duck#1 + 1 -- vwuz1=vwuz2_plus_1 + clc + lda.z duck + adc #1 + sta.z __138 + lda.z duck+1 + adc #0 + sta.z __138+1 + // [243] *((char *)main::$138) = 1 -- _deref_pbuz1=vbuc1 + lda #1 + sta (__138),y + // [244] main::$139 = main::$138 + c -- vwuz1=vwuz1_plus_vwuc1 + lda.z __139 + clc + adc #c + sta.z __139+1 + // [245] *((char *)main::$139) = 7 -- _deref_pbuz1=vbuc1 + lda #7 + sta (__139),y + // [246] main::$141 = duck#1 + $16 -- vwuz1=vwuz2_plus_vbuc1 + lda #$16 + clc + adc.z duck + sta.z __141 + tya + adc.z duck+1 + sta.z __141+1 + // [247] *((char *)main::$141) = 2 -- _deref_pbuz1=vbuc1 + lda #2 + sta (__141),y + // [248] main::$142 = main::$141 + c -- vwuz1=vwuz1_plus_vwuc1 + lda.z __142 + clc + adc #c + sta.z __142+1 + // [249] *((char *)main::$142) = 7 -- _deref_pbuz1=vbuc1 + lda #7 + sta (__142),y + // [250] main::$144 = duck#1 + $17 -- vwuz1=vwuz2_plus_vbuc1 + lda #$17 + clc + adc.z duck + sta.z __144 + tya + adc.z duck+1 + sta.z __144+1 + // [251] *((char *)main::$144) = 3 -- _deref_pbuz1=vbuc1 + lda #3 + sta (__144),y + // [252] main::$145 = main::$144 + c -- vwuz1=vwuz1_plus_vwuc1 + lda.z __145 + clc + adc #c + sta.z __145+1 + // [253] *((char *)main::$145) = 7 -- _deref_pbuz1=vbuc1 + lda #7 + sta (__145),y + // wait(5) + // [254] call wait + // [381] phi from main::@89 to wait [phi:main::@89->wait] + // [381] phi z#53 = z#25 [phi:main::@89->wait#0] -- register_copy + // [381] phi wait::n#6 = 5 [phi:main::@89->wait#1] -- vbuz1=vbuc1 + lda #5 + sta.z wait.n + jsr wait + // main::@90 + // [255] y#130 = y#35 -- vwuz1=vwuz2 + lda.z y_1 + sta.z y + lda.z y_1+1 + sta.z y+1 + // [124] phi from main::@90 to main::@26 [phi:main::@90->main::@26] + // [124] phi n#20 = n#14 [phi:main::@90->main::@26#0] -- register_copy + // [124] phi peephole#12 = y#35 [phi:main::@90->main::@26#1] -- register_copy + // [124] phi z#100 = z#25 [phi:main::@90->main::@26#2] -- register_copy + // [124] phi y#18 = y#130 [phi:main::@90->main::@26#3] -- register_copy + // [124] phi rem8u#25 = divr8u::rem#11 [phi:main::@90->main::@26#4] -- register_copy + // [124] phi score#19 = score#43 [phi:main::@90->main::@26#5] -- register_copy + // [124] phi time#11 = time#17 [phi:main::@90->main::@26#6] -- register_copy + jmp __b26 + // main::@109 + __b109: + // if (PEEK(y)!=brick && PEEK(y+1)!=brick && PEEK(y+22)!=brick && PEEK(y+23)!=brick && y>7702 && y<8163) + // [256] if(*((char *)main::$110)==brick) goto main::@36 -- _deref_pbuz1_eq_vbuc1_then_la1 + lda #brick + ldy #0 + cmp (__110),y + bne !__b36+ + jmp __b36 + !__b36: + // main::@108 + // [257] if(y#13>$1e16) goto main::@107 -- vwuz1_gt_vwuc1_then_la1 + lda #>$1e16 + cmp.z y+1 + bcc __b107 + bne !+ + lda #<$1e16 + cmp.z y + bcc __b107 + !: + jmp __b36 + // main::@107 + __b107: + // [258] if(y#13>=$1fe3) goto main::@36 -- vwuz1_ge_vwuc1_then_la1 + lda.z y+1 + cmp #>$1fe3 + bcc !+ + beq !__b36+ + jmp __b36 + !__b36: + lda.z y + cmp #<$1fe3 + bcc !__b36+ + jmp __b36 + !__b36: + !: + // main::@43 + // POKE + // [259] main::$119 = peephole#12 + c -- vwuz1=vwuz2_plus_vwuc1 + lda.z peephole + clc + adc #c + sta.z __119+1 + // [260] *((char *)main::$119) = 0 -- _deref_pbuz1=vbuc1 + lda #0 + tay + sta (__119),y + // [261] main::$120 = main::$119 + 1 -- vwuz1=vwuz2_plus_1 + clc + lda.z __119 + adc #1 + sta.z __120 + lda.z __119+1 + adc #0 + sta.z __120+1 + // [262] *((char *)main::$120) = 0 -- _deref_pbuz1=vbuc1 + tya + sta (__120),y + // [263] main::$122 = main::$119 + $16 -- vwuz1=vwuz2_plus_vbuc1 + lda #$16 + clc + adc.z __119 + sta.z __122 + tya + adc.z __119+1 + sta.z __122+1 + // [264] *((char *)main::$122) = 0 -- _deref_pbuz1=vbuc1 + tya + sta (__122),y + // [265] main::$124 = main::$119 + $17 -- vwuz1=vwuz1_plus_vbuc1 + lda #$17 + clc + adc.z __124 + sta.z __124 + bcc !+ + inc.z __124+1 + !: + // [266] *((char *)main::$124) = 0 -- _deref_pbuz1=vbuc1 + lda #0 + tay + sta (__124),y + // [267] y#141 = y#13 -- vwuz1=vwuz2 + lda.z y + sta.z y_1 + lda.z y+1 + sta.z y_1+1 + jmp __b36 + // main::@34 + __b34: + // score=score-10 + // [268] score#6 = score#19 - $a -- vwuz1=vwuz1_minus_vbuc1 + sec + lda.z score + sbc #$a + sta.z score + lda.z score+1 + sbc #0 + sta.z score+1 + // write_score() + // [269] call write_score + // [351] phi from main::@34 to write_score [phi:main::@34->write_score] + // [351] phi score#13 = score#6 [phi:main::@34->write_score#0] -- register_copy + jsr write_score + // [270] phi from main::@34 to main::@88 [phi:main::@34->main::@88] + // main::@88 + // wait(10) + // [271] call wait + // [381] phi from main::@88 to wait [phi:main::@88->wait] + // [381] phi z#53 = z#100 [phi:main::@88->wait#0] -- register_copy + // [381] phi wait::n#6 = $a [phi:main::@88->wait#1] -- vbuz1=vbuc1 + lda #$a + sta.z wait.n + jsr wait + // [213] phi from main::@88 to main::@35 [phi:main::@88->main::@35] + // [213] phi score#81 = score#38 [phi:main::@88->main::@35#0] -- register_copy + // [213] phi time#38 = div16u8u::return#2 [phi:main::@88->main::@35#1] -- register_copy + jmp __b35 + // main::@23 + __b23: + // 48+tu + // [272] main::$57 = $30 + tu#13 -- vwuz1=vbuc1_plus_vwuz2 + lda #$30 + clc + adc.z tu + sta.z __57 + lda #0 + adc.z tu+1 + sta.z __57+1 + // chrout(48+tu) + // [273] chrout::petscii = main::$57 -- vbuz1=vwuz2 + lda.z __57 + sta.z chrout.petscii + // [274] call chrout + jsr chrout + jmp __b11 + // main::@21 + __b21: + // chrout(ducknumber[j]) + // [275] chrout::petscii = ducknumber[j#16] -- vbuz1=pbuc1_derefidx_vbuz2 + ldy.z j_2 + lda ducknumber,y + sta.z chrout.petscii + // [276] call chrout + jsr chrout + // main::@78 + // for (j=0; j<5; j++) + // [277] j#5 = ++ j#16 -- vbuz1=_inc_vbuz1 + inc.z j_2 + // [93] phi from main::@78 to main::@20 [phi:main::@78->main::@20] + // [93] phi j#16 = j#5 [phi:main::@78->main::@20#0] -- register_copy + jmp __b20 + // main::@18 + __b18: + // chrout(chrono[j]) + // [278] chrout::petscii = chrono[j#13] -- vbuz1=pbuc1_derefidx_vbuz2 + ldy.z j_1 + lda chrono,y + sta.z chrout.petscii + // [279] call chrout + jsr chrout + // main::@74 + // for (j=0; j<4; ++j) + // [280] j#3 = ++ j#13 -- vbuz1=_inc_vbuz1 + inc.z j_1 + // [84] phi from main::@74 to main::@17 [phi:main::@74->main::@17] + // [84] phi j#13 = j#3 [phi:main::@74->main::@17#0] -- register_copy + jmp __b17 + // [281] phi from main::@71 to main::@14 [phi:main::@71->main::@14] + __b24: + // [281] phi j#11 = 1 [phi:main::@71->main::@14#0] -- vbuz1=vbuc1 + lda #1 + sta.z j + // main::@14 + __b14: + // for (j=1; j<=m; ++j) + // [282] if(j#11<=m) goto main::@15 -- vbuz1_le_vbuz2_then_la1 + lda.z m + cmp.z j + bcs __b15 + // main::@16 + // chrout(brick) + // [283] chrout::petscii = brick -- vbuz1=vbuc1 + lda #brick + sta.z chrout.petscii + // [284] call chrout + jsr chrout + // main::@73 + // z+m + // [285] main::$35 = z#28 + m -- vwuz1=vwuz2_plus_vbuz3 + lda.z m + clc + adc.z z_1 + sta.z __35 + lda #0 + adc.z z_1+1 + sta.z __35+1 + // z=z+m+1 + // [286] z#9 = main::$35 + 1 -- vwuz1=vwuz2_plus_1 + clc + lda.z __35 + adc #1 + sta.z z_1 + lda.z __35+1 + adc #0 + sta.z z_1+1 + // while (z<506) + // [287] if(z#9<$1fa) goto main::@13 -- vwuz1_lt_vwuc1_then_la1 + cmp #>$1fa + bcs !__b13+ + jmp __b13 + !__b13: + bne !+ + lda.z z_1 + cmp #<$1fa + bcs !__b13+ + jmp __b13 + !__b13: + !: + jmp __b12 + // main::@15 + __b15: + // chrout(right) + // [288] chrout::petscii = right -- vbuz1=vbuc1 + lda #right + sta.z chrout.petscii + // [289] call chrout + jsr chrout + // main::@72 + // for (j=1; j<=m; ++j) + // [290] j#2 = ++ j#11 -- vbuz1=_inc_vbuz1 + inc.z j + // [281] phi from main::@72 to main::@14 [phi:main::@72->main::@14] + // [281] phi j#11 = j#2 [phi:main::@72->main::@14#0] -- register_copy + jmp __b14 + // main::@7 + __b7: + // chrout(brick) + // [291] chrout::petscii = brick -- vbuz1=vbuc1 + lda #brick + sta.z chrout.petscii + // [292] call chrout + jsr chrout + // [293] phi from main::@7 to main::@9 [phi:main::@7->main::@9] + // [293] phi n#101 = 2 [phi:main::@7->main::@9#0] -- vbuz1=vbuc1 + lda #2 + sta.z n + // main::@9 + __b9: + // for(n=2;n<22;++n) + // [294] if(n#101<$16) goto main::@10 -- vbuz1_lt_vbuc1_then_la1 + lda.z n + cmp #$16 + bcc __b10 + // main::@11 + // chrout(brick) + // [295] chrout::petscii = brick -- vbuz1=vbuc1 + lda #brick + sta.z chrout.petscii + // [296] call chrout + jsr chrout + // main::@64 + // for (k=1;k<22;k++) + // [297] k#1 = ++ k#101 -- vbuz1=_inc_vbuz1 + inc.z k + // [52] phi from main::@64 to main::@6 [phi:main::@64->main::@6] + // [52] phi n#89 = n#101 [phi:main::@64->main::@6#0] -- register_copy + // [52] phi k#101 = k#1 [phi:main::@64->main::@6#1] -- register_copy + jmp __b6 + // main::@10 + __b10: + // chrout(right) + // [298] chrout::petscii = right -- vbuz1=vbuc1 + lda #right + sta.z chrout.petscii + // [299] call chrout + jsr chrout + // main::@63 + // for(n=2;n<22;++n) + // [300] n#1 = ++ n#101 -- vbuz1=_inc_vbuz1 + inc.z n + // [293] phi from main::@63 to main::@9 [phi:main::@63->main::@9] + // [293] phi n#101 = n#1 [phi:main::@63->main::@9#0] -- register_copy + jmp __b9 + // main::@2 + __b2: + // POKE + // [301] main::$3 = $1c00 + m -- vwuz1=vwuc1_plus_vbuz2 + lda.z m + clc + adc #<$1c00 + sta.z __3 + lda #>$1c00 + adc #0 + sta.z __3+1 + // [302] *((char *)main::$3) = duck_udg[m] -- _deref_pbuz1=pbuc1_derefidx_vbuz2 + ldy.z m + lda duck_udg,y + ldy #0 + sta (__3),y + // for (m=0; m<40; m++) + // [303] m = ++ m -- vbuz1=_inc_vbuz1 + inc.z m + jmp __b1 +} + // gotoxy +// Set the cursor to the specified position +// void gotoxy(char x, __zp($4c) char y) +gotoxy: { + .label __5 = $48 + .label __6 = $2c + .label __7 = $2c + .label line_offset = $2c + .label y = $4c + .label __8 = $46 + .label __9 = $2c + // if(y>CONIO_HEIGHT) + // [305] if(gotoxy::y#4<$19+1) goto gotoxy::@3 -- vbuz1_lt_vbuc1_then_la1 + lda.z y + cmp #$19+1 + bcc __b2 + // [307] phi from gotoxy to gotoxy::@1 [phi:gotoxy->gotoxy::@1] + // [307] phi gotoxy::y#5 = 0 [phi:gotoxy->gotoxy::@1#0] -- vbuz1=vbuc1 + lda #0 + sta.z y + // [306] phi from gotoxy to gotoxy::@3 [phi:gotoxy->gotoxy::@3] + // gotoxy::@3 + // [307] phi from gotoxy::@3 to gotoxy::@1 [phi:gotoxy::@3->gotoxy::@1] + // [307] phi gotoxy::y#5 = gotoxy::y#4 [phi:gotoxy::@3->gotoxy::@1#0] -- register_copy + // gotoxy::@1 + // gotoxy::@2 + __b2: + // conio_cursor_x = x + // [308] conio_cursor_x = 0 -- vbuz1=vbuc1 + lda #0 + sta.z conio_cursor_x + // conio_cursor_y = y + // [309] conio_cursor_y = gotoxy::y#5 -- vbuz1=vbuz2 + lda.z y + sta.z conio_cursor_y + // unsigned int line_offset = (unsigned int)y*CONIO_WIDTH + // [310] gotoxy::$7 = (unsigned int)gotoxy::y#5 -- vwuz1=_word_vbuz2 + lda.z y + sta.z __7 + lda #0 + sta.z __7+1 + // [311] gotoxy::$8 = gotoxy::$7 << 2 -- vwuz1=vwuz2_rol_2 + lda.z __7 + asl + sta.z __8 + lda.z __7+1 + rol + sta.z __8+1 + asl.z __8 + rol.z __8+1 + // [312] gotoxy::$9 = gotoxy::$8 + gotoxy::$7 -- vwuz1=vwuz2_plus_vwuz1 + clc + lda.z __9 + adc.z __8 + sta.z __9 + lda.z __9+1 + adc.z __8+1 + sta.z __9+1 + // [313] gotoxy::line_offset#0 = gotoxy::$9 << 3 -- vwuz1=vwuz1_rol_3 + asl.z line_offset + rol.z line_offset+1 + asl.z line_offset + rol.z line_offset+1 + asl.z line_offset + rol.z line_offset+1 + // CONIO_SCREEN_TEXT + line_offset + // [314] gotoxy::$5 = DEFAULT_SCREEN + gotoxy::line_offset#0 -- pbuz1=pbuc1_plus_vwuz2 + lda.z line_offset + clc + adc #DEFAULT_SCREEN + sta.z __5+1 + // conio_line_text = CONIO_SCREEN_TEXT + line_offset + // [315] conio_line_text = gotoxy::$5 -- pbuz1=pbuz2 + lda.z __5 + sta.z conio_line_text + lda.z __5+1 + sta.z conio_line_text+1 + // CONIO_SCREEN_COLORS + line_offset + // [316] gotoxy::$6 = COLORRAM + gotoxy::line_offset#0 -- pbuz1=pbuc1_plus_vwuz1 + lda.z __6 + clc + adc #COLORRAM + sta.z __6+1 + // conio_line_color = CONIO_SCREEN_COLORS + line_offset + // [317] conio_line_color = gotoxy::$6 -- pbuz1=pbuz2 + lda.z __6 + sta.z conio_line_color + lda.z __6+1 + sta.z conio_line_color+1 + // gotoxy::@return + // } + // [318] return + rts +} + // chrout +// void chrout(__zp($18) volatile char petscii) +chrout: { + .label petscii = $18 + // asm + // asm { ldapetscii jsr$ffd2 } + lda petscii + jsr $ffd2 + // chrout::@return + // } + // [320] return + rts +} + // clear_screen +// void clear_screen(__zp(8) char n, char m) +clear_screen: { + .label __4 = $23 + .label __5 = 9 + .label n = 8 + // [322] phi from clear_screen to clear_screen::@1 [phi:clear_screen->clear_screen::@1] + // [322] phi z#2 = 0 [phi:clear_screen->clear_screen::@1#0] -- vwuz1=vbuc1 + lda #<0 + sta.z z + sta.z z+1 + // clear_screen::@1 + __b1: + // for (z=0; z<506; ++z) + // [323] if(z#2<$1fa) goto clear_screen::@2 -- vwuz1_lt_vwuc1_then_la1 + lda.z z+1 + cmp #>$1fa + bcc __b2 + bne !+ + lda.z z + cmp #<$1fa + bcc __b2 + !: + // [324] phi from clear_screen::@1 to clear_screen::@3 [phi:clear_screen::@1->clear_screen::@3] + // clear_screen::@3 + // gotoxy(0,0) + // [325] call gotoxy + // From 0-->505 (506 bytes). ClearScreen with byte 'n' with color 'm' + // [304] phi from clear_screen::@3 to gotoxy [phi:clear_screen::@3->gotoxy] + // [304] phi gotoxy::y#4 = 0 [phi:clear_screen::@3->gotoxy#0] -- vbuz1=vbuc1 + lda #0 + sta.z gotoxy.y + jsr gotoxy + // clear_screen::@4 + // chrout(home) + // [326] chrout::petscii = home -- vbuz1=vbuc1 + lda #home + sta.z chrout.petscii + // [327] call chrout + jsr chrout + // clear_screen::@return + // } + // [328] return + rts + // clear_screen::@2 + __b2: + // POKE + // [329] clear_screen::$5 = $1e00 + z#2 -- vwuz1=vwuc1_plus_vwuz2 + lda.z z + clc + adc #<$1e00 + sta.z __5 + lda.z z+1 + adc #>$1e00 + sta.z __5+1 + // [330] clear_screen::$4 = clear_screen::$5 + c -- vwuz1=vwuz2_plus_vwuc1 + lda.z __5 + clc + adc #c + sta.z __4+1 + // [331] *((char *)clear_screen::$4) = 0 -- _deref_pbuz1=vbuc1 + lda #0 + tay + sta (__4),y + // [332] *((char *)clear_screen::$5) = clear_screen::n#5 -- _deref_pbuz1=vbuz2 + lda.z n + sta (__5),y + // for (z=0; z<506; ++z) + // [333] z#1 = ++ z#2 -- vwuz1=_inc_vwuz1 + inc.z z + bne !+ + inc.z z+1 + !: + // [322] phi from clear_screen::@2 to clear_screen::@1 [phi:clear_screen::@2->clear_screen::@1] + // [322] phi z#2 = z#1 [phi:clear_screen::@2->clear_screen::@1#0] -- register_copy + jmp __b1 +} + // textcolor +// Set the color for text output. The old color setting is returned. +// char textcolor(__zp(8) char color) +textcolor: { + .label color = 8 + // conio_textcolor = color + // [335] conio_textcolor = textcolor::color#7 -- vbuz1=vbuz2 + lda.z color + sta.z conio_textcolor + // textcolor::@return + // } + // [336] return + rts +} + // cputs +// Output a NUL-terminated string at the current cursor position +// void cputs(__zp(5) const char *s) +cputs: { + .label c = 2 + .label s = 5 + // [338] phi from cputs cputs::@2 to cputs::@1 [phi:cputs/cputs::@2->cputs::@1] + // [338] phi cputs::s#10 = cputs::s#11 [phi:cputs/cputs::@2->cputs::@1#0] -- register_copy + // cputs::@1 + __b1: + // while(c=*s++) + // [339] cputs::c#1 = *cputs::s#10 -- vbuz1=_deref_pbuz2 + ldy #0 + lda (s),y + sta.z c + // [340] cputs::s#0 = ++ cputs::s#10 -- pbuz1=_inc_pbuz1 + inc.z s + bne !+ + inc.z s+1 + !: + // [341] if(0!=cputs::c#1) goto cputs::@2 -- 0_neq_vbuz1_then_la1 + lda.z c + bne __b2 + // cputs::@return + // } + // [342] return + rts + // cputs::@2 + __b2: + // cputc(c) + // [343] cputc::c#0 = cputs::c#1 + // [344] call cputc + jsr cputc + jmp __b1 +} + // random +// Return to home position +// void random(__zp(3) char k, __zp(8) char n) +random: { + .label k = 3 + .label n = 8 + .label __3 = 2 + // random::@1 + __b1: + // m=PEEK + // [346] m = *((char *) 37140) -- vbuz1=_deref_pbuc1 + lda $9114 + sta.z m + // m>n + // [347] random::$3 = m -- vbuz1=vbuz2 + sta.z __3 + // while (mn) + // [348] if(mrandom::n#4) goto random::@1 -- vbuz1_gt_vbuz2_then_la1 + lda.z n + cmp.z __3 + bcc __b1 + // random::@return + // } + // [350] return + rts +} + // write_score +write_score: { + // if (score>65000) + // [352] if(score#13<=$fde8) goto write_score::@15 -- vwuz1_le_vwuc1_then_la1 + lda.z score+1 + cmp #>$fde8 + bne !+ + lda.z score + cmp #<$fde8 + !: + bcc __b1 + beq __b1 + // [354] phi from write_score to write_score::@1 [phi:write_score->write_score::@1] + // [354] phi score#38 = 0 [phi:write_score->write_score::@1#0] -- vwuz1=vbuc1 + lda #<0 + sta.z score + sta.z score+1 + // [353] phi from write_score to write_score::@15 [phi:write_score->write_score::@15] + // write_score::@15 + // [354] phi from write_score::@15 to write_score::@1 [phi:write_score::@15->write_score::@1] + // [354] phi score#38 = score#13 [phi:write_score::@15->write_score::@1#0] -- register_copy + // write_score::@1 + __b1: + // m=0 + // [355] m = 0 -- vbuz1=vbuc1 + lda #0 + sta.z m + // write_score::@5 + __b5: + // for (m=0;m<4;m++) + // [356] if(m<4) goto write_score::@6 -- vbuz1_lt_vbuc1_then_la1 + lda.z m + cmp #4 + bcc __b6 + // write_score::@7 + // utoa(score,buffer,10) + // [357] utoa::value#1 = score#38 -- vwuz1=vwuz2 + lda.z score + sta.z utoa.value + lda.z score+1 + sta.z utoa.value+1 + // [358] call utoa + // (!!) Needed. Possibly a bug + // [390] phi from write_score::@7 to utoa [phi:write_score::@7->utoa] + // [390] phi utoa::value#10 = utoa::value#1 [phi:write_score::@7->utoa#0] -- register_copy + jsr utoa + // write_score::@11 + // if (score>9) + // [359] if(score#38<9+1) goto write_score::@2 -- vwuz1_lt_vbuc1_then_la1 + lda.z score+1 + bne !+ + lda.z score + cmp #9+1 + bcc __b2 + !: + // write_score::@8 + // points[2]=buffer[0] + // [360] *(points+2) = *buffer -- _deref_pbuc1=_deref_pbuc2 + lda buffer + sta points+2 + // points[3]=buffer[1] + // [361] *(points+3) = *(buffer+1) -- _deref_pbuc1=_deref_pbuc2 + lda buffer+1 + sta points+3 + // write_score::@2 + __b2: + // if (score>99) + // [362] if(score#38<$63+1) goto write_score::@3 -- vwuz1_lt_vbuc1_then_la1 + lda.z score+1 + bne !+ + lda.z score + cmp #$63+1 + bcc __b3 + !: + // write_score::@4 + // points[1]=buffer[0] + // [363] *(points+1) = *buffer -- _deref_pbuc1=_deref_pbuc2 + lda buffer + sta points+1 + // points[2]=buffer[1] + // [364] *(points+2) = *(buffer+1) -- _deref_pbuc1=_deref_pbuc2 + lda buffer+1 + sta points+2 + // points[3]=buffer[2] + // [365] *(points+3) = *(buffer+2) -- _deref_pbuc1=_deref_pbuc2 + lda buffer+2 + sta points+3 + // write_score::@3 + __b3: + // chrout(yellow) + // [366] chrout::petscii = yellow -- vbuz1=vbuc1 + lda #yellow + sta.z chrout.petscii + // [367] call chrout + jsr chrout + // write_score::@12 + // chrout(home) + // [368] chrout::petscii = home -- vbuz1=vbuc1 + lda #home + sta.z chrout.petscii + // [369] call chrout + jsr chrout + // write_score::@13 + // POKE + // [370] *((char *) 211) = 4 -- _deref_pbuc1=vbuc2 + lda #4 + sta.z $d3 + // m=0 + // [371] m = 0 -- vbuz1=vbuc1 + lda #0 + sta.z m + // write_score::@9 + __b9: + // for (m=0;m<4;m++) + // [372] if(m<4) goto write_score::@10 -- vbuz1_lt_vbuc1_then_la1 + lda.z m + cmp #4 + bcc __b10 + // write_score::@return + // } + // [373] return + rts + // write_score::@10 + __b10: + // chrout(points[m]) + // [374] chrout::petscii = points[m] -- vbuz1=pbuc1_derefidx_vbuz2 + ldy.z m + lda points,y + sta.z chrout.petscii + // [375] call chrout + jsr chrout + // write_score::@14 + // for (m=0;m<4;m++) + // [376] m = ++ m -- vbuz1=_inc_vbuz1 + inc.z m + jmp __b9 + // write_score::@6 + __b6: + // points[m]='0' + // [377] points[m] = '0' -- pbuc1_derefidx_vbuz1=vbuc2 + lda #'0' + ldy.z m + sta points,y + // for (m=0;m<4;m++) + // [378] m = ++ m -- vbuz1=_inc_vbuz1 + inc.z m + jmp __b5 +} + // chrono_restart +chrono_restart: { + // asm + // asm { lda#0 ldy#0 ldx#0 jsr$ffdb } + lda #0 + tay + tax + jsr $ffdb + // chrono_restart::@return + // } + // [380] return + rts +} + // wait +// void wait(__zp(3) char n) +wait: { + .label n = 3 + // m=0 + // [382] m = 0 -- vbuz1=vbuc1 + lda #0 + sta.z m + // [383] phi from wait wait::@4 to wait::@1 [phi:wait/wait::@4->wait::@1] + // [383] phi z#25 = z#53 [phi:wait/wait::@4->wait::@1#0] -- register_copy + // wait::@1 + __b1: + // for (m=0;mwait::@2] + __b4: + // [386] phi z#23 = 0 [phi:wait::@1->wait::@2#0] -- vwuz1=vbuc1 + lda #<0 + sta.z z_1 + sta.z z_1+1 + // wait::@2 + __b2: + // for (z=0;z<540;++z) + // [387] if(z#23<$21c) goto wait::@3 -- vwuz1_lt_vwuc1_then_la1 + lda.z z_1+1 + cmp #>$21c + bcc __b3 + bne !+ + lda.z z_1 + cmp #<$21c + bcc __b3 + !: + // wait::@4 + // for (m=0;mwait::@2] + // [386] phi z#23 = z#4 [phi:wait::@3->wait::@2#0] -- register_copy + jmp __b2 +} + // utoa +// Converts unsigned number value to a string representing it in RADIX format. +// If the leading digits are zero they are not included in the string. +// - value : The number to be converted to RADIX +// - buffer : receives the string representing the number and zero-termination. +// - radix : The radix to convert the number to (from the enum RADIX) +// void utoa(__zp(5) unsigned int value, __zp($d) char *buffer, char radix) +utoa: { + .label __10 = $11 + .label __11 = 2 + .label digit_value = 9 + .label buffer = $d + .label digit = 3 + .label value = 5 + .label started = $10 + // [391] phi from utoa to utoa::@1 [phi:utoa->utoa::@1] + // [391] phi utoa::buffer#10 = buffer [phi:utoa->utoa::@1#0] -- pbuz1=pbuc1 + lda #<@buffer + sta.z buffer + lda #>@buffer + sta.z buffer+1 + // [391] phi utoa::started#2 = 0 [phi:utoa->utoa::@1#1] -- vbuz1=vbuc1 + lda #0 + sta.z started + // [391] phi utoa::value#3 = utoa::value#10 [phi:utoa->utoa::@1#2] -- register_copy + // [391] phi utoa::digit#2 = 0 [phi:utoa->utoa::@1#3] -- vbuz1=vbuc1 + sta.z digit + // utoa::@1 + __b1: + // for( char digit=0; digit= digit_value) + // [400] if(0!=utoa::started#2) goto utoa::@5 -- 0_neq_vbuz1_then_la1 + lda.z started + bne __b5 + // utoa::@7 + // [401] if(utoa::value#3>=utoa::digit_value#0) goto utoa::@5 -- vwuz1_ge_vwuz2_then_la1 + lda.z digit_value+1 + cmp.z value+1 + bne !+ + lda.z digit_value + cmp.z value + beq __b5 + !: + bcc __b5 + // [402] phi from utoa::@7 to utoa::@4 [phi:utoa::@7->utoa::@4] + // [402] phi utoa::buffer#15 = utoa::buffer#10 [phi:utoa::@7->utoa::@4#0] -- register_copy + // [402] phi utoa::started#4 = utoa::started#2 [phi:utoa::@7->utoa::@4#1] -- register_copy + // [402] phi utoa::value#7 = utoa::value#3 [phi:utoa::@7->utoa::@4#2] -- register_copy + // utoa::@4 + __b4: + // for( char digit=0; digitutoa::@1] + // [391] phi utoa::buffer#10 = utoa::buffer#15 [phi:utoa::@4->utoa::@1#0] -- register_copy + // [391] phi utoa::started#2 = utoa::started#4 [phi:utoa::@4->utoa::@1#1] -- register_copy + // [391] phi utoa::value#3 = utoa::value#7 [phi:utoa::@4->utoa::@1#2] -- register_copy + // [391] phi utoa::digit#2 = utoa::digit#1 [phi:utoa::@4->utoa::@1#3] -- register_copy + jmp __b1 + // utoa::@5 + __b5: + // utoa_append(buffer++, value, digit_value) + // [404] utoa_append::buffer#0 = utoa::buffer#10 + // [405] utoa_append::value#0 = utoa::value#3 + // [406] utoa_append::sub#0 = utoa::digit_value#0 + // [407] call utoa_append + // [432] phi from utoa::@5 to utoa_append [phi:utoa::@5->utoa_append] + jsr utoa_append + // utoa_append(buffer++, value, digit_value) + // [408] utoa_append::return#0 = utoa_append::value#2 + // utoa::@6 + // value = utoa_append(buffer++, value, digit_value) + // [409] utoa::value#0 = utoa_append::return#0 + // value = utoa_append(buffer++, value, digit_value); + // [410] utoa::buffer#4 = ++ utoa::buffer#10 -- pbuz1=_inc_pbuz1 + inc.z buffer + bne !+ + inc.z buffer+1 + !: + // [402] phi from utoa::@6 to utoa::@4 [phi:utoa::@6->utoa::@4] + // [402] phi utoa::buffer#15 = utoa::buffer#4 [phi:utoa::@6->utoa::@4#0] -- register_copy + // [402] phi utoa::started#4 = 1 [phi:utoa::@6->utoa::@4#1] -- vbuz1=vbuc1 + lda #1 + sta.z started + // [402] phi utoa::value#7 = utoa::value#0 [phi:utoa::@6->utoa::@4#2] -- register_copy + jmp __b4 +} + // read_chrono +read_chrono: { + .label __0 = $23 + .label __5 = 9 + // asm + // asm { jsr$ffde stal stxm } + jsr $ffde + sta l + stx m + // m*256 + // [412] read_chrono::$0 = m << 8 -- vwuz1=vbuz2_rol_8 + txa + sta.z __0+1 + lda #0 + sta.z __0 + // div16u8u((m*256)+l,60) + // [413] div16u8u::dividend#0 = read_chrono::$0 + l -- vwuz1=vwuz1_plus_vbuz2 + lda.z l + clc + adc.z div16u8u.dividend + sta.z div16u8u.dividend + bcc !+ + inc.z div16u8u.dividend+1 + !: + // [414] call div16u8u + jsr div16u8u + // [415] div16u8u::return#2 = div16u8u::return#0 -- vwuz1=vwuz2 + lda.z div16u8u.return + sta.z div16u8u.return_1 + lda.z div16u8u.return+1 + sta.z div16u8u.return_1+1 + // read_chrono::@2 + // POKE + // [416] *((char *)$1e15+c) = 7 -- _deref_pbuc1=vbuc2 + lda #7 + sta $1e15+c + // [417] *((char *) 7701) = $b9 -- _deref_pbuc1=vbuc2 + lda #$b9 + sta $1e15 + // if (time<10) + // [418] if(div16u8u::return#2>=$a) goto read_chrono::@return -- vwuz1_ge_vbuc1_then_la1 + lda.z div16u8u.return_1+1 + bne __breturn + lda.z div16u8u.return_1 + cmp #$a + bcs __breturn + !: + // read_chrono::@1 + // POKE + // [419] read_chrono::$5 = $b9 - div16u8u::return#2 -- vwuz1=vwuc1_minus_vwuz2 + sec + lda #<$b9 + sbc.z div16u8u.return_1 + sta.z __5 + lda #>$b9 + sbc.z div16u8u.return_1+1 + sta.z __5+1 + // [420] *((char *) 7701) = read_chrono::$5 -- _deref_pbuc1=vwuz1 + lda.z __5 + sta $1e15 + // read_chrono::@return + __breturn: + // } + // [421] return + rts +} + // cputc +// Output one character at the current cursor position +// Moves the cursor forward. Scrolls the entire screen if needed +// void cputc(__zp(2) char c) +cputc: { + .label c = 2 + // if(c=='\n') + // [422] if(cputc::c#0==' ') goto cputc::@1 -- vbuz1_eq_vbuc1_then_la1 + lda #'\n' + cmp.z c + beq __b1 + // cputc::@2 + // conio_line_text[conio_cursor_x] = c + // [423] conio_line_text[conio_cursor_x] = cputc::c#0 -- pbuz1_derefidx_vbuz2=vbuz3 + lda.z c + ldy.z conio_cursor_x + sta (conio_line_text),y + // conio_line_color[conio_cursor_x] = conio_textcolor + // [424] conio_line_color[conio_cursor_x] = conio_textcolor -- pbuz1_derefidx_vbuz2=vbuz3 + lda.z conio_textcolor + sta (conio_line_color),y + // if(++conio_cursor_x==CONIO_WIDTH) + // [425] conio_cursor_x = ++ conio_cursor_x -- vbuz1=_inc_vbuz1 + inc.z conio_cursor_x + // [426] if(conio_cursor_x!=$28) goto cputc::@return -- vbuz1_neq_vbuc1_then_la1 + lda #$28 + cmp.z conio_cursor_x + bne __breturn + // [427] phi from cputc::@2 to cputc::@3 [phi:cputc::@2->cputc::@3] + // cputc::@3 + // cputln() + // [428] call cputln + jsr cputln + // cputc::@return + __breturn: + // } + // [429] return + rts + // [430] phi from cputc to cputc::@1 [phi:cputc->cputc::@1] + // cputc::@1 + __b1: + // cputln() + // [431] call cputln + jsr cputln + rts +} + // utoa_append +// Used to convert a single digit of an unsigned number value to a string representation +// Counts a single digit up from '0' as long as the value is larger than sub. +// Each time the digit is increased sub is subtracted from value. +// - buffer : pointer to the char that receives the digit +// - value : The value where the digit will be derived from +// - sub : the value of a '1' in the digit. Subtracted continually while the digit is increased. +// (For decimal the subs used are 10000, 1000, 100, 10, 1) +// returns : the value reduced by sub * digit so that it is less than sub. +// __zp(5) unsigned int utoa_append(__zp($d) char *buffer, __zp(5) unsigned int value, __zp(9) unsigned int sub) +utoa_append: { + .label buffer = $d + .label value = 5 + .label sub = 9 + .label return = 5 + .label digit = 7 + // [433] phi from utoa_append to utoa_append::@1 [phi:utoa_append->utoa_append::@1] + // [433] phi utoa_append::digit#2 = 0 [phi:utoa_append->utoa_append::@1#0] -- vbuz1=vbuc1 + lda #0 + sta.z digit + // [433] phi utoa_append::value#2 = utoa_append::value#0 [phi:utoa_append->utoa_append::@1#1] -- register_copy + // utoa_append::@1 + __b1: + // while (value >= sub) + // [434] if(utoa_append::value#2>=utoa_append::sub#0) goto utoa_append::@2 -- vwuz1_ge_vwuz2_then_la1 + lda.z sub+1 + cmp.z value+1 + bne !+ + lda.z sub + cmp.z value + beq __b2 + !: + bcc __b2 + // utoa_append::@3 + // *buffer = DIGITS[digit] + // [435] *utoa_append::buffer#0 = DIGITS[utoa_append::digit#2] -- _deref_pbuz1=pbuc1_derefidx_vbuz2 + ldy.z digit + lda DIGITS,y + ldy #0 + sta (buffer),y + // utoa_append::@return + // } + // [436] return + rts + // utoa_append::@2 + __b2: + // digit++; + // [437] utoa_append::digit#1 = ++ utoa_append::digit#2 -- vbuz1=_inc_vbuz1 + inc.z digit + // value -= sub + // [438] utoa_append::value#1 = utoa_append::value#2 - utoa_append::sub#0 -- vwuz1=vwuz1_minus_vwuz2 + lda.z value + sec + sbc.z sub + sta.z value + lda.z value+1 + sbc.z sub+1 + sta.z value+1 + // [433] phi from utoa_append::@2 to utoa_append::@1 [phi:utoa_append::@2->utoa_append::@1] + // [433] phi utoa_append::digit#2 = utoa_append::digit#1 [phi:utoa_append::@2->utoa_append::@1#0] -- register_copy + // [433] phi utoa_append::value#2 = utoa_append::value#1 [phi:utoa_append::@2->utoa_append::@1#1] -- register_copy + jmp __b1 +} + // div16u8u +// Divide unsigned 16-bit unsigned long dividend with a 8-bit unsigned char divisor +// The 8-bit unsigned char remainder can be found in rem8u after the division +// __zp($30) unsigned int div16u8u(__zp($23) unsigned int dividend, char divisor) +div16u8u: { + .label divisor = $3c + .label quotient_hi = 2 + .label quotient_lo = $10 + .label return = $12 + .label dividend = $23 + .label return_1 = $30 + // unsigned char quotient_hi = divr8u(BYTE1(dividend), divisor, 0) + // [439] divr8u::dividend#1 = byte1 div16u8u::dividend#0 -- vbuz1=_byte1_vwuz2 + lda.z dividend+1 + sta.z divr8u.dividend + // [440] call divr8u + // [456] phi from div16u8u to divr8u [phi:div16u8u->divr8u] + // [456] phi divr8u::dividend#5 = divr8u::dividend#1 [phi:div16u8u->divr8u#0] -- register_copy + // [456] phi divr8u::rem#10 = 0 [phi:div16u8u->divr8u#1] -- vbuz1=vbuc1 + lda #0 + sta.z divr8u.rem + jsr divr8u + // unsigned char quotient_hi = divr8u(BYTE1(dividend), divisor, 0) + // [441] divr8u::return#2 = divr8u::return#0 + // div16u8u::@1 + // [442] div16u8u::quotient_hi#0 = divr8u::return#2 -- vbuz1=vbuz2 + lda.z divr8u.return + sta.z quotient_hi + // unsigned char quotient_lo = divr8u(BYTE0(dividend), divisor, rem8u) + // [443] divr8u::dividend#2 = byte0 div16u8u::dividend#0 -- vbuz1=_byte0_vwuz2 + lda.z dividend + sta.z divr8u.dividend + // [444] divr8u::rem#4 = divr8u::rem#11 + // [445] call divr8u + // [456] phi from div16u8u::@1 to divr8u [phi:div16u8u::@1->divr8u] + // [456] phi divr8u::dividend#5 = divr8u::dividend#2 [phi:div16u8u::@1->divr8u#0] -- register_copy + // [456] phi divr8u::rem#10 = divr8u::rem#4 [phi:div16u8u::@1->divr8u#1] -- register_copy + jsr divr8u + // unsigned char quotient_lo = divr8u(BYTE0(dividend), divisor, rem8u) + // [446] divr8u::return#3 = divr8u::return#0 + // div16u8u::@2 + // [447] div16u8u::quotient_lo#0 = divr8u::return#3 + // unsigned int quotient = MAKEWORD( quotient_hi, quotient_lo ) + // [448] div16u8u::return#0 = div16u8u::quotient_hi#0 w= div16u8u::quotient_lo#0 -- vwuz1=vbuz2_word_vbuz3 + lda.z quotient_hi + sta.z return+1 + lda.z quotient_lo + sta.z return + // div16u8u::@return + // } + // [449] return + rts +} + // cputln +// Print a newline +cputln: { + // conio_line_text += CONIO_WIDTH + // [450] conio_line_text = conio_line_text + $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc.z conio_line_text + sta.z conio_line_text + bcc !+ + inc.z conio_line_text+1 + !: + // conio_line_color += CONIO_WIDTH + // [451] conio_line_color = conio_line_color + $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc.z conio_line_color + sta.z conio_line_color + bcc !+ + inc.z conio_line_color+1 + !: + // conio_cursor_x = 0 + // [452] conio_cursor_x = 0 -- vbuz1=vbuc1 + lda #0 + sta.z conio_cursor_x + // conio_cursor_y++; + // [453] conio_cursor_y = ++ conio_cursor_y -- vbuz1=_inc_vbuz1 + inc.z conio_cursor_y + // cscroll() + // [454] call cscroll + jsr cscroll + // cputln::@return + // } + // [455] return + rts +} + // divr8u +// Performs division on two 8 bit unsigned chars and an initial remainder +// Returns dividend/divisor. +// The final remainder will be set into the global variable rem8u +// Implemented using simple binary division +// __zp($10) char divr8u(__zp(3) char dividend, char divisor, __zp($f) char rem) +divr8u: { + .label __1 = $11 + .label rem = $f + .label dividend = 3 + .label quotient = $10 + .label i = 7 + .label return = $10 + // [457] phi from divr8u to divr8u::@1 [phi:divr8u->divr8u::@1] + // [457] phi divr8u::i#2 = 0 [phi:divr8u->divr8u::@1#0] -- vbuz1=vbuc1 + lda #0 + sta.z i + // [457] phi divr8u::quotient#3 = 0 [phi:divr8u->divr8u::@1#1] -- vbuz1=vbuc1 + sta.z quotient + // [457] phi divr8u::dividend#3 = divr8u::dividend#5 [phi:divr8u->divr8u::@1#2] -- register_copy + // [457] phi divr8u::rem#5 = divr8u::rem#10 [phi:divr8u->divr8u::@1#3] -- register_copy + // [457] phi from divr8u::@3 to divr8u::@1 [phi:divr8u::@3->divr8u::@1] + // [457] phi divr8u::i#2 = divr8u::i#1 [phi:divr8u::@3->divr8u::@1#0] -- register_copy + // [457] phi divr8u::quotient#3 = divr8u::return#0 [phi:divr8u::@3->divr8u::@1#1] -- register_copy + // [457] phi divr8u::dividend#3 = divr8u::dividend#0 [phi:divr8u::@3->divr8u::@1#2] -- register_copy + // [457] phi divr8u::rem#5 = divr8u::rem#11 [phi:divr8u::@3->divr8u::@1#3] -- register_copy + // divr8u::@1 + __b1: + // rem = rem << 1 + // [458] divr8u::rem#0 = divr8u::rem#5 << 1 -- vbuz1=vbuz1_rol_1 + asl.z rem + // dividend & $80 + // [459] divr8u::$1 = divr8u::dividend#3 & $80 -- vbuz1=vbuz2_band_vbuc1 + lda #$80 + and.z dividend + sta.z __1 + // if( (dividend & $80) != 0 ) + // [460] if(divr8u::$1==0) goto divr8u::@2 -- vbuz1_eq_0_then_la1 + beq __b2 + // divr8u::@4 + // rem = rem | 1 + // [461] divr8u::rem#1 = divr8u::rem#0 | 1 -- vbuz1=vbuz1_bor_vbuc1 + lda #1 + ora.z rem + sta.z rem + // [462] phi from divr8u::@1 divr8u::@4 to divr8u::@2 [phi:divr8u::@1/divr8u::@4->divr8u::@2] + // [462] phi divr8u::rem#6 = divr8u::rem#0 [phi:divr8u::@1/divr8u::@4->divr8u::@2#0] -- register_copy + // divr8u::@2 + __b2: + // dividend = dividend << 1 + // [463] divr8u::dividend#0 = divr8u::dividend#3 << 1 -- vbuz1=vbuz1_rol_1 + asl.z dividend + // quotient = quotient << 1 + // [464] divr8u::quotient#1 = divr8u::quotient#3 << 1 -- vbuz1=vbuz1_rol_1 + asl.z quotient + // if(rem>=divisor) + // [465] if(divr8u::rem#6divr8u::@3] + // [468] phi divr8u::return#0 = divr8u::quotient#1 [phi:divr8u::@2/divr8u::@5->divr8u::@3#0] -- register_copy + // [468] phi divr8u::rem#11 = divr8u::rem#6 [phi:divr8u::@2/divr8u::@5->divr8u::@3#1] -- register_copy + // divr8u::@3 + __b3: + // for( char i : 0..7) + // [469] divr8u::i#1 = ++ divr8u::i#2 -- vbuz1=_inc_vbuz1 + inc.z i + // [470] if(divr8u::i#1!=8) goto divr8u::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #8 + cmp.z i + bne __b1 + // divr8u::@return + // } + // [471] return + rts +} + // cscroll +// Scroll the entire screen if the cursor is beyond the last line +cscroll: { + // if(conio_cursor_y==CONIO_HEIGHT) + // [472] if(conio_cursor_y!=$19) goto cscroll::@return -- vbuz1_neq_vbuc1_then_la1 + lda #$19 + cmp.z conio_cursor_y + bne __breturn + // [473] phi from cscroll to cscroll::@1 [phi:cscroll->cscroll::@1] + // cscroll::@1 + // memcpy(CONIO_SCREEN_TEXT, CONIO_SCREEN_TEXT+CONIO_WIDTH, CONIO_BYTES-CONIO_WIDTH) + // [474] call memcpy + // [485] phi from cscroll::@1 to memcpy [phi:cscroll::@1->memcpy] + // [485] phi memcpy::destination#2 = (void *)DEFAULT_SCREEN [phi:cscroll::@1->memcpy#0] -- pvoz1=pvoc1 + lda #DEFAULT_SCREEN + sta.z memcpy.destination+1 + // [485] phi memcpy::source#2 = (void *)DEFAULT_SCREEN+$28 [phi:cscroll::@1->memcpy#1] -- pvoz1=pvoc1 + lda #DEFAULT_SCREEN+$28 + sta.z memcpy.source+1 + jsr memcpy + // [475] phi from cscroll::@1 to cscroll::@2 [phi:cscroll::@1->cscroll::@2] + // cscroll::@2 + // memcpy(CONIO_SCREEN_COLORS, CONIO_SCREEN_COLORS+CONIO_WIDTH, CONIO_BYTES-CONIO_WIDTH) + // [476] call memcpy + // [485] phi from cscroll::@2 to memcpy [phi:cscroll::@2->memcpy] + // [485] phi memcpy::destination#2 = (void *)COLORRAM [phi:cscroll::@2->memcpy#0] -- pvoz1=pvoc1 + lda #COLORRAM + sta.z memcpy.destination+1 + // [485] phi memcpy::source#2 = (void *)COLORRAM+$28 [phi:cscroll::@2->memcpy#1] -- pvoz1=pvoc1 + lda #COLORRAM+$28 + sta.z memcpy.source+1 + jsr memcpy + // [477] phi from cscroll::@2 to cscroll::@3 [phi:cscroll::@2->cscroll::@3] + // cscroll::@3 + // memset(CONIO_SCREEN_TEXT+CONIO_BYTES-CONIO_WIDTH, ' ', CONIO_WIDTH) + // [478] call memset + // [495] phi from cscroll::@3 to memset [phi:cscroll::@3->memset] + // [495] phi memset::c#4 = ' ' [phi:cscroll::@3->memset#0] -- vbuz1=vbuc1 + lda #' ' + sta.z memset.c + // [495] phi memset::str#3 = (void *)DEFAULT_SCREEN+(unsigned int)$19*$28-$28 [phi:cscroll::@3->memset#1] -- pvoz1=pvoc1 + lda #DEFAULT_SCREEN+$19*$28-$28 + sta.z memset.str+1 + jsr memset + // cscroll::@4 + // memset(CONIO_SCREEN_COLORS+CONIO_BYTES-CONIO_WIDTH, conio_textcolor, CONIO_WIDTH) + // [479] memset::c#1 = conio_textcolor -- vbuz1=vbuz2 + lda.z conio_textcolor + sta.z memset.c + // [480] call memset + // [495] phi from cscroll::@4 to memset [phi:cscroll::@4->memset] + // [495] phi memset::c#4 = memset::c#1 [phi:cscroll::@4->memset#0] -- register_copy + // [495] phi memset::str#3 = (void *)COLORRAM+(unsigned int)$19*$28-$28 [phi:cscroll::@4->memset#1] -- pvoz1=pvoc1 + lda #COLORRAM+$19*$28-$28 + sta.z memset.str+1 + jsr memset + // cscroll::@5 + // conio_line_text -= CONIO_WIDTH + // [481] conio_line_text = conio_line_text - $28 -- pbuz1=pbuz1_minus_vbuc1 + sec + lda.z conio_line_text + sbc #$28 + sta.z conio_line_text + lda.z conio_line_text+1 + sbc #0 + sta.z conio_line_text+1 + // conio_line_color -= CONIO_WIDTH + // [482] conio_line_color = conio_line_color - $28 -- pbuz1=pbuz1_minus_vbuc1 + sec + lda.z conio_line_color + sbc #$28 + sta.z conio_line_color + lda.z conio_line_color+1 + sbc #0 + sta.z conio_line_color+1 + // conio_cursor_y--; + // [483] conio_cursor_y = -- conio_cursor_y -- vbuz1=_dec_vbuz1 + dec.z conio_cursor_y + // cscroll::@return + __breturn: + // } + // [484] return + rts +} + // memcpy +// Copy block of memory (forwards) +// Copies the values of num bytes from the location pointed to by source directly to the memory block pointed to by destination. +// void * memcpy(__zp($b) void *destination, __zp($d) void *source, unsigned int num) +memcpy: { + .label src_end = 9 + .label dst = $b + .label src = $d + .label source = $d + .label destination = $b + // char* src_end = (char*)source+num + // [486] memcpy::src_end#0 = (char *)memcpy::source#2 + (unsigned int)$19*$28-$28 -- pbuz1=pbuz2_plus_vwuc1 + lda.z source + clc + adc #<$19*$28-$28 + sta.z src_end + lda.z source+1 + adc #>$19*$28-$28 + sta.z src_end+1 + // [487] memcpy::src#4 = (char *)memcpy::source#2 + // [488] memcpy::dst#4 = (char *)memcpy::destination#2 + // [489] phi from memcpy memcpy::@2 to memcpy::@1 [phi:memcpy/memcpy::@2->memcpy::@1] + // [489] phi memcpy::dst#2 = memcpy::dst#4 [phi:memcpy/memcpy::@2->memcpy::@1#0] -- register_copy + // [489] phi memcpy::src#2 = memcpy::src#4 [phi:memcpy/memcpy::@2->memcpy::@1#1] -- register_copy + // memcpy::@1 + __b1: + // while(src!=src_end) + // [490] if(memcpy::src#2!=memcpy::src_end#0) goto memcpy::@2 -- pbuz1_neq_pbuz2_then_la1 + lda.z src+1 + cmp.z src_end+1 + bne __b2 + lda.z src + cmp.z src_end + bne __b2 + // memcpy::@return + // } + // [491] return + rts + // memcpy::@2 + __b2: + // *dst++ = *src++ + // [492] *memcpy::dst#2 = *memcpy::src#2 -- _deref_pbuz1=_deref_pbuz2 + ldy #0 + lda (src),y + sta (dst),y + // *dst++ = *src++; + // [493] memcpy::dst#1 = ++ memcpy::dst#2 -- pbuz1=_inc_pbuz1 + inc.z dst + bne !+ + inc.z dst+1 + !: + // [494] memcpy::src#1 = ++ memcpy::src#2 -- pbuz1=_inc_pbuz1 + inc.z src + bne !+ + inc.z src+1 + !: + jmp __b1 +} + // memset +// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. +// void * memset(__zp($b) void *str, __zp($10) char c, unsigned int num) +memset: { + .label end = $12 + .label dst = $b + .label c = $10 + .label str = $b + // memset::@1 + // char* end = (char*)str + num + // [496] memset::end#0 = (char *)memset::str#3 + $28 -- pbuz1=pbuz2_plus_vbuc1 + lda #$28 + clc + adc.z str + sta.z end + lda #0 + adc.z str+1 + sta.z end+1 + // [497] memset::dst#4 = (char *)memset::str#3 + // [498] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2] + // [498] phi memset::dst#2 = memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy + // memset::@2 + __b2: + // for(char* dst = str; dst!=end; dst++) + // [499] if(memset::dst#2!=memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 + lda.z dst+1 + cmp.z end+1 + bne __b3 + lda.z dst + cmp.z end + bne __b3 + // memset::@return + // } + // [500] return + rts + // memset::@3 + __b3: + // *dst = c + // [501] *memset::dst#2 = memset::c#4 -- _deref_pbuz1=vbuz2 + lda.z c + ldy #0 + sta (dst),y + // for(char* dst = str; dst!=end; dst++) + // [502] memset::dst#1 = ++ memset::dst#2 -- pbuz1=_inc_pbuz1 + inc.z dst + bne !+ + inc.z dst+1 + !: + jmp __b2 +} + // File Data +.segment Data + // The digits used for numbers + DIGITS: .text "0123456789abcdef" + // Values of decimal digits + RADIX_DECIMAL_VALUES: .word $2710, $3e8, $64, $a + // [0..65536] 16-bit + points: .byte 0, 0, 0, 0 + buffer: .byte 0, 0, 0, 0 + // for unexpanded. 37888-4096 color for expanded + ducknumber: .byte $44, $55, $43, $4b, $3a + // DUCK: + chrono: .byte $54, $4d, $3a, $39 + // TM:9 + duck_udg: .byte $e, $1b, $3f, $1f, $f, 7, $f, $1f, 0, 0, 0, 0, 0, $c0, $70, $bc, $1f, $1d, $1e, $f, 3, 1, 1, 3, $ce, $1e, $7c, $f8, $e0, $40, $40, $e0, 0, 0, 0, 0, 0, 0, 0, 0 + // POKE CODES = 0,1,2,3,4; CHROUT CODES = 64, 65, 66, 67, 68 (with previous reverse_off "chrout(146)") + intro: .text @"\n\n\nDIFFICULTY\n----------\n\n\n" + .byte 0 + levels: .text @"1.EASIEST\n\n3.EASY\n\n5.MEDIUM\n\n7.HARD\n\n9.EXPERT\n\n\n\n\n" + .byte 0 + foot: .text @"PRESS: 1,3,5,7 or 9\n\n" + .byte 0 + game_over: .text @"\n\n\n\nGAME OVER" + .byte 0 + play_again: .text @"\n\n\nPlay Again (Y/N)?" + .byte 0 + your_score: .text @"\n\n\nYour Score: " + .byte 0 + high_score: .text @"\n\nHi-Score: " + .byte 0 + diff --git a/src/test/ref/ducks-total.sym b/src/test/ref/ducks-total.sym new file mode 100644 index 000000000..aec912a5a --- /dev/null +++ b/src/test/ref/ducks-total.sym @@ -0,0 +1,440 @@ +__constant char * const COLORRAM = (char *) 55296 +__constant char * const DEFAULT_SCREEN = (char *) 1024 +__constant char DIGITS[] = "0123456789abcdef"z +__constant const char LIGHT_BLUE = $e +__constant char RADIX::BINARY = 2 +__constant char RADIX::DECIMAL = $a +__constant char RADIX::HEXADECIMAL = $10 +__constant char RADIX::OCTAL = 8 +__constant unsigned int RADIX_DECIMAL_VALUES[] = { $2710, $3e8, $64, $a } +void __start() +__constant const char brick = $e6 +__constant char buffer[] = { 0, 0, 0, 0 } +__constant const unsigned int c = $7800 +__constant const char chrono[] = { $54, $4d, $3a, $39 } +void chrono_restart() +void chrout(volatile char petscii) +__loadstore volatile char chrout::petscii // zp[1]:24 3.0310104636363637E7 +void clear_screen(char n , char m) +unsigned int clear_screen::$4 // zp[2]:35 100001.0 +unsigned int clear_screen::$5 // zp[2]:9 66667.33333333333 +char clear_screen::m +char clear_screen::n +char clear_screen::n#5 // n zp[1]:8 12500.125 +void conio_c64_init() +__constant char * const conio_c64_init::BASIC_CURSOR_LINE = (char *) 214 +char conio_c64_init::line +char conio_c64_init::line#0 // line zp[1]:76 11.0 +char conio_c64_init::line#2 // line zp[1]:76 22.0 +__loadstore char conio_cursor_x // zp[1]:39 200133.45333333334 +__loadstore char conio_cursor_y // zp[1]:29 3516593.4945054944 +__loadstore char *conio_line_color // zp[2]:30 2662771.1807228914 +__loadstore char *conio_line_text // zp[2]:32 2600117.7411764706 +__loadstore char conio_textcolor // zp[1]:34 1629048.4677419355 +void cputc(char c) +char cputc::c +char cputc::c#0 // c zp[1]:2 1050001.5 +void cputln() +void cputs(const char *s) +char cputs::c +char cputs::c#1 // c zp[1]:2 100001.0 +const char *cputs::s +const char *cputs::s#0 // s zp[2]:5 50000.5 +const char *cputs::s#10 // s zp[2]:5 150502.0 +const char *cputs::s#11 // s zp[2]:5 1001.0 +void cscroll() +unsigned int div16u8u(unsigned int dividend , char divisor) +unsigned int div16u8u::dividend +unsigned int div16u8u::dividend#0 // dividend zp[2]:35 420000.60000000003 +char div16u8u::divisor +__constant char div16u8u::divisor#0 = $3c // divisor +unsigned int div16u8u::quotient +char div16u8u::quotient_hi +char div16u8u::quotient_hi#0 // quotient_hi zp[1]:2 333333.6666666667 +char div16u8u::quotient_lo +char div16u8u::quotient_lo#0 // quotient_lo zp[1]:16 2000002.0 +unsigned int div16u8u::return +unsigned int div16u8u::return#0 // return zp[2]:18 366667.3333333334 +unsigned int div16u8u::return#2 // return_1 zp[2]:48 9166.833333333332 +char divr8u(char dividend , char divisor , char rem) +char divr8u::$1 // zp[1]:17 2.00000000002E11 +char divr8u::dividend +char divr8u::dividend#0 // dividend zp[1]:3 2.500000000025E10 +char divr8u::dividend#1 // dividend zp[1]:3 2000002.0 +char divr8u::dividend#2 // dividend zp[1]:3 1000001.0 +char divr8u::dividend#3 // dividend zp[1]:3 5.0001666667333336E10 +char divr8u::dividend#5 // dividend zp[1]:3 1.2000003E7 +char divr8u::divisor +char divr8u::i +char divr8u::i#1 // i zp[1]:7 1.500000000015E11 +char divr8u::i#2 // i zp[1]:7 1.6666666666833334E10 +char divr8u::quotient +char divr8u::quotient#1 // quotient zp[1]:16 1.500000000015E11 +char divr8u::quotient#2 // quotient zp[1]:16 1.00000000001E11 +char divr8u::quotient#3 // quotient zp[1]:16 2.8571428571714287E10 +char divr8u::rem +char divr8u::rem#0 // rem zp[1]:15 1.00000000001E11 +char divr8u::rem#1 // rem zp[1]:15 2.00000000002E11 +char divr8u::rem#10 // rem zp[1]:15 1.1000002E7 +char divr8u::rem#11 // rem zp[1]:15 2.702711801846847E9 +char divr8u::rem#2 // rem zp[1]:15 2.00000000002E11 +char divr8u::rem#4 // rem zp[1]:15 2000002.0 +char divr8u::rem#5 // rem zp[1]:15 2.00010000003E11 +char divr8u::rem#6 // rem zp[1]:15 1.00000000001E11 +char divr8u::return +char divr8u::return#0 // return zp[1]:16 5.000033333416667E10 +char divr8u::return#2 // return zp[1]:16 2000002.0 +char divr8u::return#3 // return zp[1]:16 2000002.0 +__constant const char down = $11 +unsigned int duck +unsigned int duck#0 // duck zp[2]:22 6.6666667333333336E7 +unsigned int duck#1 // duck zp[2]:22 4237745.88135593 +__constant const char duck_udg[] = { $e, $1b, $3f, $1f, $f, 7, $f, $1f, 0, 0, 0, 0, 0, $c0, $70, $bc, $1f, $1d, $1e, $f, 3, 1, 1, 3, $ce, $1e, $7c, $f8, $e0, $40, $40, $e0, 0, 0, 0, 0, 0, 0, 0, 0 } +__constant const char ducknumber[] = { $44, $55, $43, $4b, $3a } +__constant const char foot[] = "PRESS: 1,3,5,7 or 9 + +" +__constant const char game_over[] = " + + + +GAME OVER" +void gotoxy(char x , char y) +char *gotoxy::$5 // zp[2]:72 20002.0 +char *gotoxy::$6 // zp[2]:44 20002.0 +unsigned int gotoxy::$7 // zp[2]:44 15001.5 +unsigned int gotoxy::$8 // zp[2]:70 20002.0 +unsigned int gotoxy::$9 // zp[2]:44 20002.0 +unsigned int gotoxy::line_offset +unsigned int gotoxy::line_offset#0 // line_offset zp[2]:44 10001.0 +char gotoxy::x +char gotoxy::y +char gotoxy::y#2 // y zp[1]:76 22.0 +char gotoxy::y#4 // y zp[1]:76 6671.0 +char gotoxy::y#5 // y zp[1]:76 6667.333333333333 +__constant const char green = $1e +__constant const char high_score[] = " + +Hi-Score: " +unsigned int hiscore +unsigned int hiscore#110 // hiscore_1 zp[2]:108 1.1744186046511627 +unsigned int hiscore#123 // hiscore_1 zp[2]:108 202.0 +unsigned int hiscore#124 // hiscore zp[2]:42 202.0 +unsigned int hiscore#19 // hiscore zp[2]:42 31.076923076923077 +__constant const char home = $13 +__constant const char intro[] = " + + +DIFFICULTY +---------- + + +" +char j +char j#11 // j zp[1]:50 7500.75 +char j#13 // j_1 zp[1]:85 1001.0 +char j#16 // j_2 zp[1]:86 1001.0 +char j#19 // j_3 zp[1]:104 1034.6666666666667 +char j#2 // j zp[1]:50 20002.0 +char j#3 // j_1 zp[1]:85 2002.0 +char j#5 // j_2 zp[1]:86 2002.0 +char k +char k#1 // k zp[1]:99 2002.0 +char k#101 // k zp[1]:99 273.0 +__loadstore volatile char l // zp[1]:107 455.79148936170213 +__constant const char levels[] = "1.EASIEST + +3.EASY + +5.MEDIUM + +7.HARD + +9.EXPERT + + + + +" +__constant const char lock = 8 +__constant const char lower = $e +__loadstore volatile char m // zp[1]:4 3.8961039106499544E16 +void main() +unsigned int main::$104 // zp[2]:93 2500.25 +unsigned int main::$107 // zp[2]:95 2500.25 +unsigned int main::$110 // zp[2]:97 2500.25 +unsigned int main::$119 // zp[2]:74 6667.333333333333 +unsigned int main::$120 // zp[2]:81 10001.0 +unsigned int main::$122 // zp[2]:83 10001.0 +unsigned int main::$124 // zp[2]:74 10001.0 +unsigned int main::$125 // zp[2]:77 10001.0 +unsigned int main::$127 // zp[2]:58 10001.0 +unsigned int main::$128 // zp[2]:58 10001.0 +unsigned int main::$130 // zp[2]:60 10001.0 +unsigned int main::$131 // zp[2]:60 10001.0 +unsigned int main::$133 // zp[2]:62 10001.0 +unsigned int main::$134 // zp[2]:62 10001.0 +unsigned int main::$136 // zp[2]:79 10001.0 +unsigned int main::$138 // zp[2]:64 10001.0 +unsigned int main::$139 // zp[2]:64 10001.0 +unsigned int main::$141 // zp[2]:66 10001.0 +unsigned int main::$142 // zp[2]:66 10001.0 +unsigned int main::$144 // zp[2]:68 10001.0 +unsigned int main::$145 // zp[2]:68 10001.0 +unsigned int main::$150 // zp[2]:105 1001.0 +unsigned int main::$151 // zp[2]:87 2002.0 +unsigned int main::$152 // zp[2]:87 1001.0 +unsigned int main::$153 // zp[2]:89 2002.0 +unsigned int main::$154 // zp[2]:89 1001.0 +unsigned int main::$155 // zp[2]:91 2002.0 +unsigned int main::$156 // zp[2]:91 1001.0 +char main::$177 // zp[1]:8 2002.0 +unsigned int main::$179 // zp[2]:56 20002.0 +unsigned int main::$180 // zp[2]:46 20002.0 +char main::$26 // zp[1]:8 2002.0 +unsigned int main::$29 // zp[2]:5 2002.0 +unsigned int main::$3 // zp[2]:112 101.0 +unsigned int main::$35 // zp[2]:102 2002.0 +unsigned int main::$57 // zp[2]:100 2002.0 +unsigned int main::$61 // zp[2]:13 2.00000002E8 +unsigned int main::$66 // zp[2]:11 2.00000002E7 +unsigned int main::$69 // zp[2]:25 2.00000002E7 +unsigned int main::$72 // zp[2]:27 2.00000002E7 +char main::$78 // zp[1]:16 20002.0 +char main::$81 // zp[1]:7 20002.0 +char main::$84 // zp[1]:3 20002.0 +char main::$88 // zp[1]:54 20002.0 +char main::$92 // zp[1]:55 20002.0 +unsigned int main::$96 // zp[2]:46 15001.5 +unsigned int main::$97 // zp[2]:46 20002.0 +void * memcpy(void *destination , void *source , unsigned int num) +void *memcpy::destination +void *memcpy::destination#2 // destination zp[2]:11 +char *memcpy::dst +char *memcpy::dst#1 // dst zp[2]:11 1.000000000001E12 +char *memcpy::dst#2 // dst zp[2]:11 1.0003333333346667E12 +char *memcpy::dst#4 // dst zp[2]:11 2.000000002E9 +unsigned int memcpy::num +void *memcpy::return +void *memcpy::source +void *memcpy::source#2 // source zp[2]:13 +char *memcpy::src +char *memcpy::src#1 // src zp[2]:13 2.000000000002E12 +char *memcpy::src#2 // src zp[2]:13 1.00025000000125E12 +char *memcpy::src#4 // src zp[2]:13 1.000000001E9 +char *memcpy::src_end +char *memcpy::src_end#0 // src_end zp[2]:9 1.2512500000025E11 +void * memset(void *str , char c , unsigned int num) +char memset::c +char memset::c#1 // c zp[1]:16 2.00000002E8 +char memset::c#4 // c zp[1]:16 1.4287142857171426E11 +char *memset::dst +char *memset::dst#1 // dst zp[2]:11 2.000000000002E12 +char *memset::dst#2 // dst zp[2]:11 1.3336666666683335E12 +char *memset::dst#4 // dst zp[2]:11 2.000000002E9 +char *memset::end +char *memset::end#0 // end zp[2]:18 1.668333333336667E11 +unsigned int memset::num +void *memset::return +void *memset::str +void *memset::str#3 // str zp[2]:11 +char n +char n#1 // n zp[1]:51 20002.0 +char n#101 // n zp[1]:51 4429.142857142857 +char n#109 // n zp[1]:51 7.769230769230769 +char n#14 // n zp[1]:51 344.8620689655172 +char n#20 // n zp[1]:51 220.07272727272726 +char n#52 // n zp[1]:51 93.84375 +char n#89 // n zp[1]:51 35.644067796610166 +unsigned int peephole +unsigned int peephole#12 // peephole zp[2]:52 617.7352941176471 +unsigned int peephole#52 // peephole zp[2]:52 62.5625 +__constant const char play_again[] = " + + +Play Again (Y/N)?" +__constant char points[] = { 0, 0, 0, 0 } +void random(char k , char n) +char random::$3 // zp[1]:2 5.5E17 +char random::k +char random::k#0 // k zp[1]:3 500.5 +char random::k#4 // k zp[1]:3 2.00000000000000192E17 +char random::n +char random::n#0 // n zp[1]:8 2002.0 +char random::n#4 // n zp[1]:8 2.00000000000002E16 +void read_chrono() +unsigned int read_chrono::$0 // zp[2]:35 200002.0 +unsigned int read_chrono::$5 // zp[2]:9 200002.0 +__constant const char red = $1c +char rem8u +char rem8u#127 // rem8u zp[1]:15 11.6 +char rem8u#25 // rem8u zp[1]:15 220.07272727272726 +char rem8u#48 // rem8u zp[1]:15 93.84375 +__constant const char reverse_on = $12 +__constant const char right = $1d +unsigned int score +unsigned int score#13 // score zp[2]:42 70334.66666666666 +unsigned int score#19 // score zp[2]:42 1272.9090909090908 +unsigned int score#38 // score zp[2]:42 3843.0654205607475 +unsigned int score#4 // score zp[2]:42 2002.0 +unsigned int score#43 // score zp[2]:42 566.0943396226415 +unsigned int score#6 // score zp[2]:42 20002.0 +unsigned int score#8 // score zp[2]:42 10001.0 +unsigned int score#81 // score zp[2]:42 15001.5 +char textcolor(char color) +char textcolor::color +char textcolor::color#7 // color zp[1]:8 1001.0 +char textcolor::old +char textcolor::return +unsigned int time +unsigned int time#11 // time zp[2]:48 20002.0 +unsigned int time#17 // time zp[2]:48 566.0943396226415 +unsigned int time#38 // time zp[2]:48 10001.0 +unsigned int tu +unsigned int tu#1 // tu zp[2]:110 166.83333333333334 +unsigned int tu#13 // tu zp[2]:110 32.032 +void utoa(unsigned int value , char *buffer , char radix) +char utoa::$10 // zp[1]:17 2.0000000002E10 +char utoa::$11 // zp[1]:2 2000002.0 +char *utoa::buffer +char *utoa::buffer#10 // buffer zp[2]:13 2.857285714714286E9 +char *utoa::buffer#15 // buffer zp[2]:13 1.50000000015E10 +char *utoa::buffer#3 // buffer zp[2]:13 2000002.0 +char *utoa::buffer#4 // buffer zp[2]:13 2.0000000002E10 +char utoa::digit +char utoa::digit#1 // digit zp[1]:3 2.0000000002E10 +char utoa::digit#2 // digit zp[1]:3 2.857142857428571E9 +unsigned int utoa::digit_value +unsigned int utoa::digit_value#0 // digit_value zp[2]:9 6.0000000006E9 +unsigned int *utoa::digit_values +char utoa::max_digits +char utoa::radix +char utoa::started +char utoa::started#2 // started zp[1]:16 5.0000000005E9 +char utoa::started#4 // started zp[1]:16 1.0000000001E10 +unsigned int utoa::value +unsigned int utoa::value#0 // value zp[2]:5 1.0000000001E10 +unsigned int utoa::value#1 // value zp[2]:5 200002.0 +unsigned int utoa::value#10 // value zp[2]:5 1100103.0 +unsigned int utoa::value#2 // value zp[2]:5 202.0 +unsigned int utoa::value#3 // value zp[2]:5 5.714428572142858E9 +unsigned int utoa::value#7 // value zp[2]:5 1.50000000015E10 +unsigned int utoa_append(char *buffer , unsigned int value , unsigned int sub) +char *utoa_append::buffer +char *utoa_append::buffer#0 // buffer zp[2]:13 1.375000000025E10 +char utoa_append::digit +char utoa_append::digit#1 // digit zp[1]:7 1.0E16 +char utoa_append::digit#2 // digit zp[1]:7 1.000005E16 +unsigned int utoa_append::return +unsigned int utoa_append::return#0 // return zp[2]:5 2.0000000002E10 +unsigned int utoa_append::sub +unsigned int utoa_append::sub#0 // sub zp[2]:9 3.333335E15 +unsigned int utoa_append::value +unsigned int utoa_append::value#0 // value zp[2]:5 3.6666666667333336E10 +unsigned int utoa_append::value#1 // value zp[2]:5 2.0E16 +unsigned int utoa_append::value#2 // value zp[2]:5 5.000018333333334E15 +void wait(char n) +char wait::n +char wait::n#6 // n zp[1]:3 1.25000000125E8 +void write_score() +unsigned int y +unsigned int y#0 // y zp[2]:40 20002.0 +unsigned int y#1 // y zp[2]:40 20002.0 +unsigned int y#10 // y zp[2]:40 13334.666666666666 +unsigned int y#11 // y zp[2]:40 13334.666666666666 +unsigned int y#114 // y zp[2]:40 11.6 +unsigned int y#12 // y zp[2]:40 13334.666666666666 +unsigned int y#13 // y zp[2]:40 2285.9428571428575 +unsigned int y#130 // y zp[2]:40 20002.0 +unsigned int y#141 // y_1 zp[2]:52 20002.0 +unsigned int y#18 // y zp[2]:40 509.61904761904765 +unsigned int y#2 // y zp[2]:40 20002.0 +unsigned int y#3 // y zp[2]:40 20002.0 +unsigned int y#35 // y_1 zp[2]:52 2353.1764705882347 +unsigned int y#49 // y zp[2]:40 93.84375 +__constant const char yellow = $9e +__constant const char your_score[] = " + + +Your Score: " +unsigned int z +unsigned int z#1 // z zp[2]:37 200002.0 +unsigned int z#100 // z_1 zp[2]:20 1050.15 +unsigned int z#102 // z_1 zp[2]:20 93.84375 +unsigned int z#128 // z_1 zp[2]:20 93.84375 +unsigned int z#2 // z zp[2]:37 66667.33333333333 +unsigned int z#23 // z_1 zp[2]:20 1.0333333334666666E10 +unsigned int z#25 // z_1 zp[2]:20 2.564438476923077E7 +unsigned int z#28 // z_1 zp[2]:20 266.93333333333334 +unsigned int z#4 // z_1 zp[2]:20 2.0000000002E10 +unsigned int z#48 // z_1 zp[2]:20 857.2285714285714 +unsigned int z#53 // z_1 zp[2]:20 70503.0 +unsigned int z#9 // z_1 zp[2]:20 2002.0 + +zp[1]:76 [ conio_c64_init::line#2 conio_c64_init::line#0 gotoxy::y#5 gotoxy::y#4 gotoxy::y#2 ] +zp[2]:108 [ hiscore#110 hiscore#123 ] +zp[1]:99 [ k#101 k#1 ] +zp[1]:85 [ j#13 j#3 ] +zp[1]:86 [ j#16 j#5 ] +zp[2]:110 [ tu#13 tu#1 ] +zp[2]:52 [ peephole#52 peephole#12 y#35 y#141 ] +zp[1]:51 [ n#52 n#89 n#109 n#20 n#101 n#14 n#1 ] +zp[2]:48 [ time#11 time#17 time#38 div16u8u::return#2 ] +zp[2]:40 [ y#13 y#12 y#11 y#10 y#0 y#49 y#114 y#18 y#130 y#1 y#2 y#3 ] +zp[2]:42 [ score#81 hiscore#19 hiscore#124 score#19 score#43 score#38 score#8 score#13 score#4 score#6 ] +zp[1]:50 [ j#11 j#2 ] +zp[2]:37 [ z#2 z#1 ] +zp[1]:8 [ random::n#4 random::n#0 main::$26 main::$177 textcolor::color#7 clear_screen::n#5 ] +zp[2]:20 [ z#53 z#48 z#100 z#102 z#128 z#28 z#9 z#25 z#23 z#4 ] +zp[1]:15 [ divr8u::rem#5 divr8u::rem#10 divr8u::rem#4 rem8u#48 rem8u#127 rem8u#25 divr8u::rem#11 divr8u::rem#6 divr8u::rem#0 divr8u::rem#1 divr8u::rem#2 ] +zp[1]:39 [ conio_cursor_x ] +zp[1]:29 [ conio_cursor_y ] +zp[2]:32 [ conio_line_text ] +zp[2]:30 [ conio_line_color ] +zp[1]:34 [ conio_textcolor ] +zp[1]:107 [ l ] +zp[1]:4 [ m ] +zp[1]:24 [ chrout::petscii ] +zp[2]:5 [ main::$29 utoa::value#3 utoa::value#7 utoa::value#10 utoa::value#2 utoa::value#1 utoa::value#0 utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 utoa_append::return#0 cputs::s#10 cputs::s#11 cputs::s#0 ] +zp[2]:22 [ duck#0 duck#1 ] +zp[2]:13 [ main::$61 memcpy::source#2 memcpy::src#2 memcpy::src#4 memcpy::src#1 utoa::buffer#10 utoa::buffer#15 utoa::buffer#4 utoa::buffer#3 utoa_append::buffer#0 ] +zp[2]:11 [ main::$66 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 memcpy::destination#2 memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ] +zp[2]:25 [ main::$69 ] +zp[2]:27 [ main::$72 ] +zp[2]:105 [ main::$150 ] +zp[2]:87 [ main::$151 main::$152 ] +zp[2]:89 [ main::$153 main::$154 ] +zp[2]:91 [ main::$155 main::$156 ] +zp[1]:104 [ j#19 ] +zp[1]:16 [ main::$78 memset::c#4 memset::c#1 divr8u::quotient#3 divr8u::return#0 divr8u::quotient#1 divr8u::quotient#2 divr8u::return#2 divr8u::return#3 div16u8u::quotient_lo#0 utoa::started#2 utoa::started#4 ] +zp[1]:7 [ main::$81 divr8u::i#2 divr8u::i#1 utoa_append::digit#2 utoa_append::digit#1 ] +zp[1]:3 [ main::$84 divr8u::dividend#3 divr8u::dividend#5 divr8u::dividend#1 divr8u::dividend#2 divr8u::dividend#0 utoa::digit#2 utoa::digit#1 wait::n#6 random::k#4 random::k#0 ] +zp[1]:54 [ main::$88 ] +zp[1]:55 [ main::$92 ] +zp[2]:46 [ main::$96 main::$180 main::$97 ] +zp[2]:56 [ main::$179 ] +zp[2]:93 [ main::$104 ] +zp[2]:95 [ main::$107 ] +zp[2]:97 [ main::$110 ] +zp[2]:77 [ main::$125 ] +zp[2]:58 [ main::$127 main::$128 ] +zp[2]:60 [ main::$130 main::$131 ] +zp[2]:62 [ main::$133 main::$134 ] +zp[2]:79 [ main::$136 ] +zp[2]:64 [ main::$138 main::$139 ] +zp[2]:66 [ main::$141 main::$142 ] +zp[2]:68 [ main::$144 main::$145 ] +zp[2]:74 [ main::$119 main::$124 ] +zp[2]:81 [ main::$120 ] +zp[2]:83 [ main::$122 ] +zp[2]:100 [ main::$57 ] +zp[2]:102 [ main::$35 ] +zp[2]:112 [ main::$3 ] +zp[2]:44 [ gotoxy::$7 gotoxy::$9 gotoxy::line_offset#0 gotoxy::$6 ] +zp[2]:70 [ gotoxy::$8 ] +zp[2]:72 [ gotoxy::$5 ] +zp[2]:35 [ read_chrono::$0 div16u8u::dividend#0 clear_screen::$4 ] +zp[1]:2 [ div16u8u::quotient_hi#0 utoa::$11 random::$3 cputs::c#1 cputc::c#0 ] +zp[1]:17 [ divr8u::$1 utoa::$10 ] +zp[2]:9 [ memcpy::src_end#0 read_chrono::$5 utoa::digit_value#0 utoa_append::sub#0 clear_screen::$5 ] +zp[2]:18 [ memset::end#0 div16u8u::return#0 ] diff --git a/src/test/ref/pointer-swap.asm b/src/test/ref/pointer-swap.asm new file mode 100644 index 000000000..d1d068a09 --- /dev/null +++ b/src/test/ref/pointer-swap.asm @@ -0,0 +1,124 @@ + // Commodore 64 PRG executable file +.file [name="pointer-swap.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + .label screen = 2 + .label tempbuffer = $c + .label newbuffer = $a + .label tempbuffer_1 = 6 + .label newbuffer_1 = 8 + .label oldbuffer = 4 +.segment Code +main: { + // print() + lda #buffer2 + sta.z oldbuffer+1 + lda #buffer1 + sta.z newbuffer_1+1 + lda #<$400 + sta.z screen + lda #>$400 + sta.z screen+1 + lda #<0 + sta.z tempbuffer_1 + sta.z tempbuffer_1+1 + jsr print + // swap() + lda #buffer2 + sta.z newbuffer+1 + lda #buffer1 + sta.z tempbuffer+1 + jsr swap + lda.z newbuffer + sta.z tempbuffer + lda.z newbuffer+1 + sta.z tempbuffer+1 + lda.z tempbuffer + sta.z newbuffer + lda.z tempbuffer+1 + sta.z newbuffer+1 + // swap() + jsr swap + lda.z newbuffer + sta.z tempbuffer + lda.z newbuffer+1 + sta.z tempbuffer+1 + lda.z tempbuffer + sta.z newbuffer + lda.z tempbuffer+1 + sta.z newbuffer+1 + // swap() + jsr swap + // } + rts +} +print: { + // (char)tempbuffer&0x0f + lda.z tempbuffer_1 + and #$f + // screen[0] = hextab[(char)tempbuffer&0x0f] + tay + lda hextab,y + ldy #0 + sta (screen),y + // (char)newbuffer&0x0f + lda.z newbuffer_1 + and #$f + // screen[2] = hextab[(char)newbuffer&0x0f] + tay + lda hextab,y + ldy #2 + sta (screen),y + // (char)oldbuffer&0x0f + lda.z oldbuffer + and #$f + // screen[4] = hextab[(char)oldbuffer&0x0f] + tay + lda hextab,y + ldy #4 + sta (screen),y + // screen += 40 + lda #$28 + clc + adc.z screen + sta.z screen + bcc !+ + inc.z screen+1 + !: + // } + rts +} +swap: { + lda.z tempbuffer + sta.z tempbuffer_1 + lda.z tempbuffer+1 + sta.z tempbuffer_1+1 + lda.z newbuffer + sta.z newbuffer_1 + lda.z newbuffer+1 + sta.z newbuffer_1+1 + lda.z tempbuffer + sta.z oldbuffer + lda.z tempbuffer+1 + sta.z oldbuffer+1 + // print() + jsr print + // } + rts +} +.segment Data + buffer1: .fill $a, 0 + buffer2: .fill $a, 0 + hextab: .text "0123456789abcdef" diff --git a/src/test/ref/pointer-swap.cfg b/src/test/ref/pointer-swap.cfg new file mode 100644 index 000000000..fcdd2bd78 --- /dev/null +++ b/src/test/ref/pointer-swap.cfg @@ -0,0 +1,57 @@ + +void main() +main: scope:[main] from + [0] phi() + [1] call print + to:main::@1 +main::@1: scope:[main] from main + [2] phi() + [3] call swap + to:main::@2 +main::@2: scope:[main] from main::@1 + [4] tempbuffer#22 = newbuffer#0 + [5] newbuffer#23 = tempbuffer#0 + [6] call swap + to:main::@3 +main::@3: scope:[main] from main::@2 + [7] tempbuffer#23 = newbuffer#0 + [8] newbuffer#24 = tempbuffer#0 + [9] call swap + to:main::@return +main::@return: scope:[main] from main::@3 + [10] return + to:@return + +void print() +print: scope:[print] from main swap + [11] oldbuffer#9 = phi( main/buffer2, swap/oldbuffer#22 ) + [11] newbuffer#9 = phi( main/buffer1, swap/newbuffer#22 ) + [11] screen#12 = phi( main/(char *) 1024, swap/screen#0 ) + [11] tempbuffer#9 = phi( main/(char *) 0, swap/tempbuffer#21 ) + [12] print::$3 = (char)tempbuffer#9 + [13] print::$0 = print::$3 & $f + [14] *screen#12 = hextab[print::$0] + [15] print::$4 = (char)newbuffer#9 + [16] print::$1 = print::$4 & $f + [17] screen#12[2] = hextab[print::$1] + [18] print::$5 = (char)oldbuffer#9 + [19] print::$2 = print::$5 & $f + [20] screen#12[4] = hextab[print::$2] + [21] screen#0 = screen#12 + $28 + to:print::@return +print::@return: scope:[print] from print + [22] return + to:@return + +void swap() +swap: scope:[swap] from main::@1 main::@2 main::@3 + [23] newbuffer#0 = phi( main::@1/buffer2, main::@2/newbuffer#23, main::@3/newbuffer#24 ) + [23] tempbuffer#0 = phi( main::@1/buffer1, main::@2/tempbuffer#22, main::@3/tempbuffer#23 ) + [24] tempbuffer#21 = tempbuffer#0 + [25] newbuffer#22 = newbuffer#0 + [26] oldbuffer#22 = tempbuffer#0 + [27] call print + to:swap::@return +swap::@return: scope:[swap] from swap + [28] return + to:@return diff --git a/src/test/ref/pointer-swap.log b/src/test/ref/pointer-swap.log new file mode 100644 index 000000000..3044bc33c --- /dev/null +++ b/src/test/ref/pointer-swap.log @@ -0,0 +1,1019 @@ +Inlined call call __init + +CONTROL FLOW GRAPH SSA + +void print() +print: scope:[print] from main swap + oldbuffer#9 = phi( main/oldbuffer#18, swap/oldbuffer#0 ) + newbuffer#9 = phi( main/newbuffer#18, swap/newbuffer#0 ) + screen#12 = phi( main/screen#23, swap/screen#24 ) + tempbuffer#9 = phi( main/tempbuffer#17, swap/tempbuffer#0 ) + print::$3 = (char)tempbuffer#9 + print::$0 = print::$3 & $f + screen#12[0] = hextab[print::$0] + print::$4 = (char)newbuffer#9 + print::$1 = print::$4 & $f + screen#12[2] = hextab[print::$1] + print::$5 = (char)oldbuffer#9 + print::$2 = print::$5 & $f + screen#12[4] = hextab[print::$2] + screen#0 = screen#12 + $28 + to:print::@return +print::@return: scope:[print] from print + screen#13 = phi( print/screen#0 ) + screen#1 = screen#13 + return + to:@return + +void swap() +swap: scope:[swap] from main::@1 main::@2 main::@3 + screen#24 = phi( main::@1/screen#4, main::@2/screen#5, main::@3/screen#6 ) + oldbuffer#10 = phi( main::@1/oldbuffer#19, main::@2/oldbuffer#2, main::@3/oldbuffer#3 ) + newbuffer#10 = phi( main::@1/newbuffer#19, main::@2/newbuffer#2, main::@3/newbuffer#3 ) + tempbuffer#0 = newbuffer#10 + newbuffer#0 = oldbuffer#10 + oldbuffer#0 = tempbuffer#0 + call print + to:swap::@1 +swap::@1: scope:[swap] from swap + oldbuffer#20 = phi( swap/oldbuffer#0 ) + newbuffer#20 = phi( swap/newbuffer#0 ) + tempbuffer#18 = phi( swap/tempbuffer#0 ) + screen#14 = phi( swap/screen#1 ) + screen#2 = screen#14 + to:swap::@return +swap::@return: scope:[swap] from swap::@1 + screen#15 = phi( swap::@1/screen#2 ) + oldbuffer#11 = phi( swap::@1/oldbuffer#20 ) + newbuffer#11 = phi( swap::@1/newbuffer#20 ) + tempbuffer#10 = phi( swap::@1/tempbuffer#18 ) + tempbuffer#1 = tempbuffer#10 + newbuffer#1 = newbuffer#11 + oldbuffer#1 = oldbuffer#11 + screen#3 = screen#15 + return + to:@return + +void main() +main: scope:[main] from __start::@1 + oldbuffer#18 = phi( __start::@1/oldbuffer#21 ) + newbuffer#18 = phi( __start::@1/newbuffer#21 ) + screen#23 = phi( __start::@1/screen#25 ) + tempbuffer#17 = phi( __start::@1/tempbuffer#20 ) + call print + to:main::@1 +main::@1: scope:[main] from main + tempbuffer#19 = phi( main/tempbuffer#17 ) + oldbuffer#19 = phi( main/oldbuffer#18 ) + newbuffer#19 = phi( main/newbuffer#18 ) + screen#16 = phi( main/screen#1 ) + screen#4 = screen#16 + call swap + to:main::@2 +main::@2: scope:[main] from main::@1 + screen#17 = phi( main::@1/screen#3 ) + oldbuffer#12 = phi( main::@1/oldbuffer#1 ) + newbuffer#12 = phi( main::@1/newbuffer#1 ) + tempbuffer#11 = phi( main::@1/tempbuffer#1 ) + tempbuffer#2 = tempbuffer#11 + newbuffer#2 = newbuffer#12 + oldbuffer#2 = oldbuffer#12 + screen#5 = screen#17 + call swap + to:main::@3 +main::@3: scope:[main] from main::@2 + screen#18 = phi( main::@2/screen#3 ) + oldbuffer#13 = phi( main::@2/oldbuffer#1 ) + newbuffer#13 = phi( main::@2/newbuffer#1 ) + tempbuffer#12 = phi( main::@2/tempbuffer#1 ) + tempbuffer#3 = tempbuffer#12 + newbuffer#3 = newbuffer#13 + oldbuffer#3 = oldbuffer#13 + screen#6 = screen#18 + call swap + to:main::@4 +main::@4: scope:[main] from main::@3 + screen#19 = phi( main::@3/screen#3 ) + oldbuffer#14 = phi( main::@3/oldbuffer#1 ) + newbuffer#14 = phi( main::@3/newbuffer#1 ) + tempbuffer#13 = phi( main::@3/tempbuffer#1 ) + tempbuffer#4 = tempbuffer#13 + newbuffer#4 = newbuffer#14 + oldbuffer#4 = oldbuffer#14 + screen#7 = screen#19 + to:main::@return +main::@return: scope:[main] from main::@4 + oldbuffer#15 = phi( main::@4/oldbuffer#4 ) + newbuffer#15 = phi( main::@4/newbuffer#4 ) + tempbuffer#14 = phi( main::@4/tempbuffer#4 ) + screen#20 = phi( main::@4/screen#7 ) + screen#8 = screen#20 + tempbuffer#5 = tempbuffer#14 + newbuffer#5 = newbuffer#15 + oldbuffer#5 = oldbuffer#15 + return + to:@return + +void __start() +__start: scope:[__start] from + to:__start::__init1 +__start::__init1: scope:[__start] from __start + newbuffer#6 = buffer1 + oldbuffer#6 = buffer2 + tempbuffer#6 = (char *) 0 + screen#9 = (char *)$400 + to:__start::@1 +__start::@1: scope:[__start] from __start::__init1 + oldbuffer#21 = phi( __start::__init1/oldbuffer#6 ) + newbuffer#21 = phi( __start::__init1/newbuffer#6 ) + tempbuffer#20 = phi( __start::__init1/tempbuffer#6 ) + screen#25 = phi( __start::__init1/screen#9 ) + call main + to:__start::@2 +__start::@2: scope:[__start] from __start::@1 + oldbuffer#16 = phi( __start::@1/oldbuffer#5 ) + newbuffer#16 = phi( __start::@1/newbuffer#5 ) + tempbuffer#15 = phi( __start::@1/tempbuffer#5 ) + screen#21 = phi( __start::@1/screen#8 ) + screen#10 = screen#21 + tempbuffer#7 = tempbuffer#15 + newbuffer#7 = newbuffer#16 + oldbuffer#7 = oldbuffer#16 + to:__start::@return +__start::@return: scope:[__start] from __start::@2 + screen#22 = phi( __start::@2/screen#10 ) + tempbuffer#16 = phi( __start::@2/tempbuffer#7 ) + oldbuffer#17 = phi( __start::@2/oldbuffer#7 ) + newbuffer#17 = phi( __start::@2/newbuffer#7 ) + newbuffer#8 = newbuffer#17 + oldbuffer#8 = oldbuffer#17 + tempbuffer#8 = tempbuffer#16 + screen#11 = screen#22 + return + to:@return + +SYMBOL TABLE SSA +void __start() +__constant char buffer1[$a] = { fill( $a, 0) } +__constant char buffer2[$a] = { fill( $a, 0) } +__constant char hextab[] = "0123456789abcdef"z +void main() +char *newbuffer +char *newbuffer#0 +char *newbuffer#1 +char *newbuffer#10 +char *newbuffer#11 +char *newbuffer#12 +char *newbuffer#13 +char *newbuffer#14 +char *newbuffer#15 +char *newbuffer#16 +char *newbuffer#17 +char *newbuffer#18 +char *newbuffer#19 +char *newbuffer#2 +char *newbuffer#20 +char *newbuffer#21 +char *newbuffer#3 +char *newbuffer#4 +char *newbuffer#5 +char *newbuffer#6 +char *newbuffer#7 +char *newbuffer#8 +char *newbuffer#9 +char *oldbuffer +char *oldbuffer#0 +char *oldbuffer#1 +char *oldbuffer#10 +char *oldbuffer#11 +char *oldbuffer#12 +char *oldbuffer#13 +char *oldbuffer#14 +char *oldbuffer#15 +char *oldbuffer#16 +char *oldbuffer#17 +char *oldbuffer#18 +char *oldbuffer#19 +char *oldbuffer#2 +char *oldbuffer#20 +char *oldbuffer#21 +char *oldbuffer#3 +char *oldbuffer#4 +char *oldbuffer#5 +char *oldbuffer#6 +char *oldbuffer#7 +char *oldbuffer#8 +char *oldbuffer#9 +void print() +number print::$0 +number print::$1 +number print::$2 +char print::$3 +char print::$4 +char print::$5 +char *screen +char *screen#0 +char *screen#1 +char *screen#10 +char *screen#11 +char *screen#12 +char *screen#13 +char *screen#14 +char *screen#15 +char *screen#16 +char *screen#17 +char *screen#18 +char *screen#19 +char *screen#2 +char *screen#20 +char *screen#21 +char *screen#22 +char *screen#23 +char *screen#24 +char *screen#25 +char *screen#3 +char *screen#4 +char *screen#5 +char *screen#6 +char *screen#7 +char *screen#8 +char *screen#9 +void swap() +char *tempbuffer +char *tempbuffer#0 +char *tempbuffer#1 +char *tempbuffer#10 +char *tempbuffer#11 +char *tempbuffer#12 +char *tempbuffer#13 +char *tempbuffer#14 +char *tempbuffer#15 +char *tempbuffer#16 +char *tempbuffer#17 +char *tempbuffer#18 +char *tempbuffer#19 +char *tempbuffer#2 +char *tempbuffer#20 +char *tempbuffer#3 +char *tempbuffer#4 +char *tempbuffer#5 +char *tempbuffer#6 +char *tempbuffer#7 +char *tempbuffer#8 +char *tempbuffer#9 + +Adding number conversion cast (unumber) $f in print::$0 = print::$3 & $f +Adding number conversion cast (unumber) print::$0 in print::$0 = print::$3 & (unumber)$f +Adding number conversion cast (unumber) 0 in screen#12[0] = hextab[print::$0] +Adding number conversion cast (unumber) $f in print::$1 = print::$4 & $f +Adding number conversion cast (unumber) print::$1 in print::$1 = print::$4 & (unumber)$f +Adding number conversion cast (unumber) 2 in screen#12[2] = hextab[print::$1] +Adding number conversion cast (unumber) $f in print::$2 = print::$5 & $f +Adding number conversion cast (unumber) print::$2 in print::$2 = print::$5 & (unumber)$f +Adding number conversion cast (unumber) 4 in screen#12[4] = hextab[print::$2] +Adding number conversion cast (unumber) $28 in screen#0 = screen#12 + $28 +Successful SSA optimization PassNAddNumberTypeConversions +Simplifying constant integer cast $f +Simplifying constant integer cast 0 +Simplifying constant integer cast $f +Simplifying constant integer cast 2 +Simplifying constant integer cast $f +Simplifying constant integer cast 4 +Simplifying constant integer cast $28 +Simplifying constant pointer cast (char *) 1024 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (char) $f +Finalized unsigned number type (char) 0 +Finalized unsigned number type (char) $f +Finalized unsigned number type (char) 2 +Finalized unsigned number type (char) $f +Finalized unsigned number type (char) 4 +Finalized unsigned number type (char) $28 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Inferred type updated to char in print::$0 = print::$3 & $f +Inferred type updated to char in print::$1 = print::$4 & $f +Inferred type updated to char in print::$2 = print::$5 & $f +Alias screen#0 = screen#13 screen#1 +Alias tempbuffer#0 = newbuffer#10 oldbuffer#0 tempbuffer#18 oldbuffer#20 tempbuffer#10 oldbuffer#11 tempbuffer#1 oldbuffer#1 +Alias newbuffer#0 = oldbuffer#10 newbuffer#20 newbuffer#11 newbuffer#1 +Alias screen#14 = screen#2 screen#15 screen#3 +Alias newbuffer#18 = newbuffer#19 +Alias oldbuffer#18 = oldbuffer#19 +Alias tempbuffer#17 = tempbuffer#19 +Alias screen#16 = screen#4 +Alias tempbuffer#11 = tempbuffer#2 +Alias newbuffer#12 = newbuffer#2 +Alias oldbuffer#12 = oldbuffer#2 +Alias screen#17 = screen#5 +Alias tempbuffer#12 = tempbuffer#3 +Alias newbuffer#13 = newbuffer#3 +Alias oldbuffer#13 = oldbuffer#3 +Alias screen#18 = screen#6 +Alias tempbuffer#13 = tempbuffer#4 tempbuffer#14 tempbuffer#5 +Alias newbuffer#14 = newbuffer#4 newbuffer#15 newbuffer#5 +Alias oldbuffer#14 = oldbuffer#4 oldbuffer#15 oldbuffer#5 +Alias screen#19 = screen#7 screen#20 screen#8 +Alias screen#25 = screen#9 +Alias tempbuffer#20 = tempbuffer#6 +Alias newbuffer#21 = newbuffer#6 +Alias oldbuffer#21 = oldbuffer#6 +Alias screen#10 = screen#21 screen#22 screen#11 +Alias tempbuffer#15 = tempbuffer#7 tempbuffer#16 tempbuffer#8 +Alias newbuffer#16 = newbuffer#7 newbuffer#17 newbuffer#8 +Alias oldbuffer#16 = oldbuffer#7 oldbuffer#17 oldbuffer#8 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values screen#14 screen#0 +Identical Phi Values tempbuffer#17 tempbuffer#20 +Identical Phi Values screen#23 screen#25 +Identical Phi Values newbuffer#18 newbuffer#21 +Identical Phi Values oldbuffer#18 oldbuffer#21 +Identical Phi Values screen#16 screen#0 +Identical Phi Values tempbuffer#11 tempbuffer#0 +Identical Phi Values newbuffer#12 newbuffer#0 +Identical Phi Values oldbuffer#12 tempbuffer#0 +Identical Phi Values screen#17 screen#14 +Identical Phi Values tempbuffer#12 tempbuffer#0 +Identical Phi Values newbuffer#13 newbuffer#0 +Identical Phi Values oldbuffer#13 tempbuffer#0 +Identical Phi Values screen#18 screen#14 +Identical Phi Values tempbuffer#13 tempbuffer#0 +Identical Phi Values newbuffer#14 newbuffer#0 +Identical Phi Values oldbuffer#14 tempbuffer#0 +Identical Phi Values screen#19 screen#14 +Identical Phi Values screen#10 screen#19 +Identical Phi Values tempbuffer#15 tempbuffer#13 +Identical Phi Values newbuffer#16 newbuffer#14 +Identical Phi Values oldbuffer#16 oldbuffer#14 +Successful SSA optimization Pass2IdenticalPhiElimination +Identical Phi Values screen#24 screen#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant newbuffer#21 = buffer1 +Constant oldbuffer#21 = buffer2 +Constant tempbuffer#20 = (char *) 0 +Constant screen#25 = (char *) 1024 +Successful SSA optimization Pass2ConstantIdentification +Simplifying expression containing zero screen#12 in [3] screen#12[0] = hextab[print::$0] +Successful SSA optimization PassNSimplifyExpressionWithZero +Removing unused procedure __start +Removing unused procedure block __start +Removing unused procedure block __start::__init1 +Removing unused procedure block __start::@1 +Removing unused procedure block __start::@2 +Removing unused procedure block __start::@return +Successful SSA optimization PassNEliminateEmptyStart +Inlining constant with var siblings newbuffer#21 +Inlining constant with var siblings oldbuffer#21 +Inlining constant with var siblings tempbuffer#20 +Inlining constant with var siblings screen#25 +Constant inlined oldbuffer#21 = buffer2 +Constant inlined screen#25 = (char *) 1024 +Constant inlined tempbuffer#20 = (char *) 0 +Constant inlined newbuffer#21 = buffer1 +Successful SSA optimization Pass2ConstantInlining +Finalized unsigned number type (char) $a +Finalized unsigned number type (char) $a +Finalized unsigned number type (char) $a +Finalized unsigned number type (char) $a +Successful SSA optimization PassNFinalizeNumberTypeConversions +Adding NOP phi() at start of main +Adding NOP phi() at start of main::@1 +Adding NOP phi() at start of main::@4 +Adding NOP phi() at start of swap::@1 +CALL GRAPH +Calls in [main] to print:1 swap:3 swap:6 swap:9 +Calls in [swap] to print:29 + +Created 6 initial phi equivalence classes +Not coalescing [4] tempbuffer#22 = newbuffer#0 +Not coalescing [5] newbuffer#23 = tempbuffer#0 +Not coalescing [7] tempbuffer#23 = newbuffer#0 +Not coalescing [8] newbuffer#24 = tempbuffer#0 +Not coalescing [25] tempbuffer#21 = tempbuffer#0 +Coalesced [26] screen#26 = screen#0 +Not coalescing [27] newbuffer#22 = newbuffer#0 +Not coalescing [28] oldbuffer#22 = tempbuffer#0 +Coalesced down to 6 phi equivalence classes +Culled Empty Block label main::@4 +Culled Empty Block label swap::@1 +Adding NOP phi() at start of main +Adding NOP phi() at start of main::@1 + +FINAL CONTROL FLOW GRAPH + +void main() +main: scope:[main] from + [0] phi() + [1] call print + to:main::@1 +main::@1: scope:[main] from main + [2] phi() + [3] call swap + to:main::@2 +main::@2: scope:[main] from main::@1 + [4] tempbuffer#22 = newbuffer#0 + [5] newbuffer#23 = tempbuffer#0 + [6] call swap + to:main::@3 +main::@3: scope:[main] from main::@2 + [7] tempbuffer#23 = newbuffer#0 + [8] newbuffer#24 = tempbuffer#0 + [9] call swap + to:main::@return +main::@return: scope:[main] from main::@3 + [10] return + to:@return + +void print() +print: scope:[print] from main swap + [11] oldbuffer#9 = phi( main/buffer2, swap/oldbuffer#22 ) + [11] newbuffer#9 = phi( main/buffer1, swap/newbuffer#22 ) + [11] screen#12 = phi( main/(char *) 1024, swap/screen#0 ) + [11] tempbuffer#9 = phi( main/(char *) 0, swap/tempbuffer#21 ) + [12] print::$3 = (char)tempbuffer#9 + [13] print::$0 = print::$3 & $f + [14] *screen#12 = hextab[print::$0] + [15] print::$4 = (char)newbuffer#9 + [16] print::$1 = print::$4 & $f + [17] screen#12[2] = hextab[print::$1] + [18] print::$5 = (char)oldbuffer#9 + [19] print::$2 = print::$5 & $f + [20] screen#12[4] = hextab[print::$2] + [21] screen#0 = screen#12 + $28 + to:print::@return +print::@return: scope:[print] from print + [22] return + to:@return + +void swap() +swap: scope:[swap] from main::@1 main::@2 main::@3 + [23] newbuffer#0 = phi( main::@1/buffer2, main::@2/newbuffer#23, main::@3/newbuffer#24 ) + [23] tempbuffer#0 = phi( main::@1/buffer1, main::@2/tempbuffer#22, main::@3/tempbuffer#23 ) + [24] tempbuffer#21 = tempbuffer#0 + [25] newbuffer#22 = newbuffer#0 + [26] oldbuffer#22 = tempbuffer#0 + [27] call print + to:swap::@return +swap::@return: scope:[swap] from swap + [28] return + to:@return + + +VARIABLE REGISTER WEIGHTS +void main() +char *newbuffer +char *newbuffer#0 // 2.375 +char *newbuffer#22 // 11.0 +char *newbuffer#23 // 4.0 +char *newbuffer#24 // 4.0 +char *newbuffer#9 // 2.75 +char *oldbuffer +char *oldbuffer#22 // 22.0 +char *oldbuffer#9 // 1.5714285714285714 +void print() +char print::$0 // 202.0 +char print::$1 // 202.0 +char print::$2 // 202.0 +char print::$3 // 202.0 +char print::$4 // 202.0 +char print::$5 // 202.0 +char *screen +char *screen#0 // 7.0 +char *screen#12 // 41.5 +void swap() +char *tempbuffer +char *tempbuffer#0 // 3.0 +char *tempbuffer#21 // 7.333333333333333 +char *tempbuffer#22 // 2.0 +char *tempbuffer#23 // 2.0 +char *tempbuffer#9 // 11.0 + +Initial phi equivalence classes +[ tempbuffer#9 tempbuffer#21 ] +[ screen#12 screen#0 ] +[ newbuffer#9 newbuffer#22 ] +[ oldbuffer#9 oldbuffer#22 ] +[ tempbuffer#0 tempbuffer#22 tempbuffer#23 ] +[ newbuffer#0 newbuffer#23 newbuffer#24 ] +Added variable print::$3 to live range equivalence class [ print::$3 ] +Added variable print::$0 to live range equivalence class [ print::$0 ] +Added variable print::$4 to live range equivalence class [ print::$4 ] +Added variable print::$1 to live range equivalence class [ print::$1 ] +Added variable print::$5 to live range equivalence class [ print::$5 ] +Added variable print::$2 to live range equivalence class [ print::$2 ] +Complete equivalence classes +[ tempbuffer#9 tempbuffer#21 ] +[ screen#12 screen#0 ] +[ newbuffer#9 newbuffer#22 ] +[ oldbuffer#9 oldbuffer#22 ] +[ tempbuffer#0 tempbuffer#22 tempbuffer#23 ] +[ newbuffer#0 newbuffer#23 newbuffer#24 ] +[ print::$3 ] +[ print::$0 ] +[ print::$4 ] +[ print::$1 ] +[ print::$5 ] +[ print::$2 ] +Allocated zp[1]:2 [ print::$3 ] +Allocated zp[1]:3 [ print::$0 ] +Allocated zp[1]:4 [ print::$4 ] +Allocated zp[1]:5 [ print::$1 ] +Allocated zp[1]:6 [ print::$5 ] +Allocated zp[1]:7 [ print::$2 ] +Allocated zp[2]:8 [ screen#12 screen#0 ] +Allocated zp[2]:10 [ oldbuffer#9 oldbuffer#22 ] +Allocated zp[2]:12 [ tempbuffer#9 tempbuffer#21 ] +Allocated zp[2]:14 [ newbuffer#9 newbuffer#22 ] +Allocated zp[2]:16 [ newbuffer#0 newbuffer#23 newbuffer#24 ] +Allocated zp[2]:18 [ tempbuffer#0 tempbuffer#22 tempbuffer#23 ] +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [4] tempbuffer#22 = newbuffer#0 [ tempbuffer#22 tempbuffer#0 screen#0 ] ( [ tempbuffer#22 tempbuffer#0 screen#0 ] { { tempbuffer#0 = tempbuffer#22 } { newbuffer#0 = newbuffer#23 } } ) always clobbers reg byte a +Statement [5] newbuffer#23 = tempbuffer#0 [ tempbuffer#22 newbuffer#23 screen#0 ] ( [ tempbuffer#22 newbuffer#23 screen#0 ] { { tempbuffer#0 = tempbuffer#22 } { newbuffer#0 = newbuffer#23 } } ) always clobbers reg byte a +Statement [7] tempbuffer#23 = newbuffer#0 [ tempbuffer#0 tempbuffer#23 screen#0 ] ( [ tempbuffer#0 tempbuffer#23 screen#0 ] { { tempbuffer#0 = tempbuffer#23 } { newbuffer#0 = newbuffer#24 } } ) always clobbers reg byte a +Statement [8] newbuffer#24 = tempbuffer#0 [ tempbuffer#23 newbuffer#24 screen#0 ] ( [ tempbuffer#23 newbuffer#24 screen#0 ] { { tempbuffer#0 = tempbuffer#23 } { newbuffer#0 = newbuffer#24 } } ) always clobbers reg byte a +Statement [14] *screen#12 = hextab[print::$0] [ screen#12 newbuffer#9 oldbuffer#9 ] ( print:1 [ screen#12 newbuffer#9 oldbuffer#9 ] { } swap:3::print:27 [ newbuffer#0 tempbuffer#0 screen#12 newbuffer#9 oldbuffer#9 ] { { tempbuffer#21 = tempbuffer#9 } { screen#0 = screen#12 } { newbuffer#22 = newbuffer#9 } { oldbuffer#22 = oldbuffer#9 } } swap:6::print:27 [ newbuffer#0 tempbuffer#0 screen#12 newbuffer#9 oldbuffer#9 ] { { tempbuffer#0 = tempbuffer#22 } { newbuffer#0 = newbuffer#23 } { tempbuffer#21 = tempbuffer#9 } { screen#0 = screen#12 } { newbuffer#22 = newbuffer#9 } { oldbuffer#22 = oldbuffer#9 } } swap:9::print:27 [ newbuffer#0 tempbuffer#0 screen#12 newbuffer#9 oldbuffer#9 ] { { tempbuffer#0 = tempbuffer#23 } { newbuffer#0 = newbuffer#24 } { tempbuffer#21 = tempbuffer#9 } { screen#0 = screen#12 } { newbuffer#22 = newbuffer#9 } { oldbuffer#22 = oldbuffer#9 } } ) always clobbers reg byte a reg byte y +Statement [17] screen#12[2] = hextab[print::$1] [ screen#12 oldbuffer#9 ] ( print:1 [ screen#12 oldbuffer#9 ] { } swap:3::print:27 [ newbuffer#0 tempbuffer#0 screen#12 oldbuffer#9 ] { { tempbuffer#21 = tempbuffer#9 } { screen#0 = screen#12 } { newbuffer#22 = newbuffer#9 } { oldbuffer#22 = oldbuffer#9 } } swap:6::print:27 [ newbuffer#0 tempbuffer#0 screen#12 oldbuffer#9 ] { { tempbuffer#0 = tempbuffer#22 } { newbuffer#0 = newbuffer#23 } { tempbuffer#21 = tempbuffer#9 } { screen#0 = screen#12 } { newbuffer#22 = newbuffer#9 } { oldbuffer#22 = oldbuffer#9 } } swap:9::print:27 [ newbuffer#0 tempbuffer#0 screen#12 oldbuffer#9 ] { { tempbuffer#0 = tempbuffer#23 } { newbuffer#0 = newbuffer#24 } { tempbuffer#21 = tempbuffer#9 } { screen#0 = screen#12 } { newbuffer#22 = newbuffer#9 } { oldbuffer#22 = oldbuffer#9 } } ) always clobbers reg byte a reg byte y +Statement [20] screen#12[4] = hextab[print::$2] [ screen#12 ] ( print:1 [ screen#12 ] { } swap:3::print:27 [ newbuffer#0 tempbuffer#0 screen#12 ] { { tempbuffer#21 = tempbuffer#9 } { screen#0 = screen#12 } { newbuffer#22 = newbuffer#9 } { oldbuffer#22 = oldbuffer#9 } } swap:6::print:27 [ newbuffer#0 tempbuffer#0 screen#12 ] { { tempbuffer#0 = tempbuffer#22 } { newbuffer#0 = newbuffer#23 } { tempbuffer#21 = tempbuffer#9 } { screen#0 = screen#12 } { newbuffer#22 = newbuffer#9 } { oldbuffer#22 = oldbuffer#9 } } swap:9::print:27 [ newbuffer#0 tempbuffer#0 screen#12 ] { { tempbuffer#0 = tempbuffer#23 } { newbuffer#0 = newbuffer#24 } { tempbuffer#21 = tempbuffer#9 } { screen#0 = screen#12 } { newbuffer#22 = newbuffer#9 } { oldbuffer#22 = oldbuffer#9 } } ) always clobbers reg byte a reg byte y +Statement [21] screen#0 = screen#12 + $28 [ screen#0 ] ( print:1 [ screen#0 ] { } swap:3::print:27 [ newbuffer#0 tempbuffer#0 screen#0 ] { { tempbuffer#21 = tempbuffer#9 } { screen#0 = screen#12 } { newbuffer#22 = newbuffer#9 } { oldbuffer#22 = oldbuffer#9 } } swap:6::print:27 [ newbuffer#0 tempbuffer#0 screen#0 ] { { tempbuffer#0 = tempbuffer#22 } { newbuffer#0 = newbuffer#23 } { tempbuffer#21 = tempbuffer#9 } { screen#0 = screen#12 } { newbuffer#22 = newbuffer#9 } { oldbuffer#22 = oldbuffer#9 } } swap:9::print:27 [ newbuffer#0 tempbuffer#0 screen#0 ] { { tempbuffer#0 = tempbuffer#23 } { newbuffer#0 = newbuffer#24 } { tempbuffer#21 = tempbuffer#9 } { screen#0 = screen#12 } { newbuffer#22 = newbuffer#9 } { oldbuffer#22 = oldbuffer#9 } } ) always clobbers reg byte a +Statement [24] tempbuffer#21 = tempbuffer#0 [ newbuffer#0 tempbuffer#0 tempbuffer#21 screen#0 ] ( swap:3 [ newbuffer#0 tempbuffer#0 tempbuffer#21 screen#0 ] { { tempbuffer#21 = tempbuffer#9 } { screen#0 = screen#12 } { newbuffer#22 = newbuffer#9 } { oldbuffer#22 = oldbuffer#9 } } swap:6 [ newbuffer#0 tempbuffer#0 tempbuffer#21 screen#0 ] { { tempbuffer#0 = tempbuffer#22 } { newbuffer#0 = newbuffer#23 } { tempbuffer#21 = tempbuffer#9 } { screen#0 = screen#12 } { newbuffer#22 = newbuffer#9 } { oldbuffer#22 = oldbuffer#9 } } swap:9 [ newbuffer#0 tempbuffer#0 tempbuffer#21 screen#0 ] { { tempbuffer#0 = tempbuffer#23 } { newbuffer#0 = newbuffer#24 } { tempbuffer#21 = tempbuffer#9 } { screen#0 = screen#12 } { newbuffer#22 = newbuffer#9 } { oldbuffer#22 = oldbuffer#9 } } ) always clobbers reg byte a +Statement [25] newbuffer#22 = newbuffer#0 [ newbuffer#0 tempbuffer#0 tempbuffer#21 screen#0 newbuffer#22 ] ( swap:3 [ newbuffer#0 tempbuffer#0 tempbuffer#21 screen#0 newbuffer#22 ] { { tempbuffer#21 = tempbuffer#9 } { screen#0 = screen#12 } { newbuffer#22 = newbuffer#9 } { oldbuffer#22 = oldbuffer#9 } } swap:6 [ newbuffer#0 tempbuffer#0 tempbuffer#21 screen#0 newbuffer#22 ] { { tempbuffer#0 = tempbuffer#22 } { newbuffer#0 = newbuffer#23 } { tempbuffer#21 = tempbuffer#9 } { screen#0 = screen#12 } { newbuffer#22 = newbuffer#9 } { oldbuffer#22 = oldbuffer#9 } } swap:9 [ newbuffer#0 tempbuffer#0 tempbuffer#21 screen#0 newbuffer#22 ] { { tempbuffer#0 = tempbuffer#23 } { newbuffer#0 = newbuffer#24 } { tempbuffer#21 = tempbuffer#9 } { screen#0 = screen#12 } { newbuffer#22 = newbuffer#9 } { oldbuffer#22 = oldbuffer#9 } } ) always clobbers reg byte a +Statement [26] oldbuffer#22 = tempbuffer#0 [ newbuffer#0 tempbuffer#0 tempbuffer#21 screen#0 newbuffer#22 oldbuffer#22 ] ( swap:3 [ newbuffer#0 tempbuffer#0 tempbuffer#21 screen#0 newbuffer#22 oldbuffer#22 ] { { tempbuffer#21 = tempbuffer#9 } { screen#0 = screen#12 } { newbuffer#22 = newbuffer#9 } { oldbuffer#22 = oldbuffer#9 } } swap:6 [ newbuffer#0 tempbuffer#0 tempbuffer#21 screen#0 newbuffer#22 oldbuffer#22 ] { { tempbuffer#0 = tempbuffer#22 } { newbuffer#0 = newbuffer#23 } { tempbuffer#21 = tempbuffer#9 } { screen#0 = screen#12 } { newbuffer#22 = newbuffer#9 } { oldbuffer#22 = oldbuffer#9 } } swap:9 [ newbuffer#0 tempbuffer#0 tempbuffer#21 screen#0 newbuffer#22 oldbuffer#22 ] { { tempbuffer#0 = tempbuffer#23 } { newbuffer#0 = newbuffer#24 } { tempbuffer#21 = tempbuffer#9 } { screen#0 = screen#12 } { newbuffer#22 = newbuffer#9 } { oldbuffer#22 = oldbuffer#9 } } ) always clobbers reg byte a +Potential registers zp[2]:12 [ tempbuffer#9 tempbuffer#21 ] : zp[2]:12 , +Potential registers zp[2]:8 [ screen#12 screen#0 ] : zp[2]:8 , +Potential registers zp[2]:14 [ newbuffer#9 newbuffer#22 ] : zp[2]:14 , +Potential registers zp[2]:10 [ oldbuffer#9 oldbuffer#22 ] : zp[2]:10 , +Potential registers zp[2]:18 [ tempbuffer#0 tempbuffer#22 tempbuffer#23 ] : zp[2]:18 , +Potential registers zp[2]:16 [ newbuffer#0 newbuffer#23 newbuffer#24 ] : zp[2]:16 , +Potential registers zp[1]:2 [ print::$3 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:3 [ print::$0 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:4 [ print::$4 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:5 [ print::$1 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:6 [ print::$5 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:7 [ print::$2 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y , + +REGISTER UPLIFT SCOPES +Uplift Scope [print] 202: zp[1]:2 [ print::$3 ] 202: zp[1]:3 [ print::$0 ] 202: zp[1]:4 [ print::$4 ] 202: zp[1]:5 [ print::$1 ] 202: zp[1]:6 [ print::$5 ] 202: zp[1]:7 [ print::$2 ] +Uplift Scope [] 48.5: zp[2]:8 [ screen#12 screen#0 ] 23.57: zp[2]:10 [ oldbuffer#9 oldbuffer#22 ] 18.33: zp[2]:12 [ tempbuffer#9 tempbuffer#21 ] 13.75: zp[2]:14 [ newbuffer#9 newbuffer#22 ] 10.38: zp[2]:16 [ newbuffer#0 newbuffer#23 newbuffer#24 ] 7: zp[2]:18 [ tempbuffer#0 tempbuffer#22 tempbuffer#23 ] +Uplift Scope [swap] +Uplift Scope [main] + +Uplifting [print] best 294 combination reg byte a [ print::$3 ] reg byte a [ print::$0 ] reg byte a [ print::$4 ] reg byte a [ print::$1 ] zp[1]:6 [ print::$5 ] zp[1]:7 [ print::$2 ] +Limited combination testing to 100 combinations of 4096 possible. +Uplifting [] best 294 combination zp[2]:8 [ screen#12 screen#0 ] zp[2]:10 [ oldbuffer#9 oldbuffer#22 ] zp[2]:12 [ tempbuffer#9 tempbuffer#21 ] zp[2]:14 [ newbuffer#9 newbuffer#22 ] zp[2]:16 [ newbuffer#0 newbuffer#23 newbuffer#24 ] zp[2]:18 [ tempbuffer#0 tempbuffer#22 tempbuffer#23 ] +Uplifting [swap] best 294 combination +Uplifting [main] best 294 combination +Attempting to uplift remaining variables inzp[1]:6 [ print::$5 ] +Uplifting [print] best 288 combination reg byte a [ print::$5 ] +Attempting to uplift remaining variables inzp[1]:7 [ print::$2 ] +Uplifting [print] best 284 combination reg byte a [ print::$2 ] +Allocated (was zp[2]:8) zp[2]:2 [ screen#12 screen#0 ] +Allocated (was zp[2]:10) zp[2]:4 [ oldbuffer#9 oldbuffer#22 ] +Allocated (was zp[2]:12) zp[2]:6 [ tempbuffer#9 tempbuffer#21 ] +Allocated (was zp[2]:14) zp[2]:8 [ newbuffer#9 newbuffer#22 ] +Allocated (was zp[2]:16) zp[2]:10 [ newbuffer#0 newbuffer#23 newbuffer#24 ] +Allocated (was zp[2]:18) zp[2]:12 [ tempbuffer#0 tempbuffer#22 tempbuffer#23 ] + +ASSEMBLER BEFORE OPTIMIZATION + // File Comments + // Upstart + // Commodore 64 PRG executable file +.file [name="pointer-swap.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + // Global Constants & labels + .label screen = 2 + .label tempbuffer = $c + .label newbuffer = $a + .label tempbuffer_1 = 6 + .label newbuffer_1 = 8 + .label oldbuffer = 4 +.segment Code + // main +main: { + // [1] call print + // [11] phi from main to print [phi:main->print] + print_from_main: + // [11] phi oldbuffer#9 = buffer2 [phi:main->print#0] -- pbuz1=pbuc1 + lda #buffer2 + sta.z oldbuffer+1 + // [11] phi newbuffer#9 = buffer1 [phi:main->print#1] -- pbuz1=pbuc1 + lda #buffer1 + sta.z newbuffer_1+1 + // [11] phi screen#12 = (char *) 1024 [phi:main->print#2] -- pbuz1=pbuc1 + lda #<$400 + sta.z screen + lda #>$400 + sta.z screen+1 + // [11] phi tempbuffer#9 = (char *) 0 [phi:main->print#3] -- pbuz1=pbuc1 + lda #<0 + sta.z tempbuffer_1 + lda #>0 + sta.z tempbuffer_1+1 + jsr print + // [2] phi from main to main::@1 [phi:main->main::@1] + __b1_from_main: + jmp __b1 + // main::@1 + __b1: + // [3] call swap + // [23] phi from main::@1 to swap [phi:main::@1->swap] + swap_from___b1: + // [23] phi newbuffer#0 = buffer2 [phi:main::@1->swap#0] -- pbuz1=pbuc1 + lda #buffer2 + sta.z newbuffer+1 + // [23] phi tempbuffer#0 = buffer1 [phi:main::@1->swap#1] -- pbuz1=pbuc1 + lda #buffer1 + sta.z tempbuffer+1 + jsr swap + jmp __b2 + // main::@2 + __b2: + // [4] tempbuffer#22 = newbuffer#0 -- pbuz1=pbuz2 + lda.z newbuffer + sta.z tempbuffer + lda.z newbuffer+1 + sta.z tempbuffer+1 + // [5] newbuffer#23 = tempbuffer#0 -- pbuz1=pbuz2 + lda.z tempbuffer + sta.z newbuffer + lda.z tempbuffer+1 + sta.z newbuffer+1 + // [6] call swap + // [23] phi from main::@2 to swap [phi:main::@2->swap] + swap_from___b2: + // [23] phi newbuffer#0 = newbuffer#23 [phi:main::@2->swap#0] -- register_copy + // [23] phi tempbuffer#0 = tempbuffer#22 [phi:main::@2->swap#1] -- register_copy + jsr swap + jmp __b3 + // main::@3 + __b3: + // [7] tempbuffer#23 = newbuffer#0 -- pbuz1=pbuz2 + lda.z newbuffer + sta.z tempbuffer + lda.z newbuffer+1 + sta.z tempbuffer+1 + // [8] newbuffer#24 = tempbuffer#0 -- pbuz1=pbuz2 + lda.z tempbuffer + sta.z newbuffer + lda.z tempbuffer+1 + sta.z newbuffer+1 + // [9] call swap + // [23] phi from main::@3 to swap [phi:main::@3->swap] + swap_from___b3: + // [23] phi newbuffer#0 = newbuffer#24 [phi:main::@3->swap#0] -- register_copy + // [23] phi tempbuffer#0 = tempbuffer#23 [phi:main::@3->swap#1] -- register_copy + jsr swap + jmp __breturn + // main::@return + __breturn: + // [10] return + rts +} + // print +print: { + // [12] print::$3 = (char)tempbuffer#9 -- vbuaa=_byte_pbuz1 + lda.z tempbuffer_1 + // [13] print::$0 = print::$3 & $f -- vbuaa=vbuaa_band_vbuc1 + and #$f + // [14] *screen#12 = hextab[print::$0] -- _deref_pbuz1=pbuc1_derefidx_vbuaa + tay + lda hextab,y + ldy #0 + sta (screen),y + // [15] print::$4 = (char)newbuffer#9 -- vbuaa=_byte_pbuz1 + lda.z newbuffer_1 + // [16] print::$1 = print::$4 & $f -- vbuaa=vbuaa_band_vbuc1 + and #$f + // [17] screen#12[2] = hextab[print::$1] -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuaa + tay + lda hextab,y + ldy #2 + sta (screen),y + // [18] print::$5 = (char)oldbuffer#9 -- vbuaa=_byte_pbuz1 + lda.z oldbuffer + // [19] print::$2 = print::$5 & $f -- vbuaa=vbuaa_band_vbuc1 + and #$f + // [20] screen#12[4] = hextab[print::$2] -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuaa + tay + lda hextab,y + ldy #4 + sta (screen),y + // [21] screen#0 = screen#12 + $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc.z screen + sta.z screen + bcc !+ + inc.z screen+1 + !: + jmp __breturn + // print::@return + __breturn: + // [22] return + rts +} + // swap +swap: { + // [24] tempbuffer#21 = tempbuffer#0 -- pbuz1=pbuz2 + lda.z tempbuffer + sta.z tempbuffer_1 + lda.z tempbuffer+1 + sta.z tempbuffer_1+1 + // [25] newbuffer#22 = newbuffer#0 -- pbuz1=pbuz2 + lda.z newbuffer + sta.z newbuffer_1 + lda.z newbuffer+1 + sta.z newbuffer_1+1 + // [26] oldbuffer#22 = tempbuffer#0 -- pbuz1=pbuz2 + lda.z tempbuffer + sta.z oldbuffer + lda.z tempbuffer+1 + sta.z oldbuffer+1 + // [27] call print + // [11] phi from swap to print [phi:swap->print] + print_from_swap: + // [11] phi oldbuffer#9 = oldbuffer#22 [phi:swap->print#0] -- register_copy + // [11] phi newbuffer#9 = newbuffer#22 [phi:swap->print#1] -- register_copy + // [11] phi screen#12 = screen#0 [phi:swap->print#2] -- register_copy + // [11] phi tempbuffer#9 = tempbuffer#21 [phi:swap->print#3] -- register_copy + jsr print + jmp __breturn + // swap::@return + __breturn: + // [28] return + rts +} + // File Data +.segment Data + buffer1: .fill $a, 0 + buffer2: .fill $a, 0 + hextab: .text "0123456789abcdef" + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __b1 +Removing instruction jmp __b2 +Removing instruction jmp __b3 +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction lda #>0 +Succesful ASM optimization Pass5UnnecesaryLoadElimination +Removing instruction __b1_from_main: +Removing instruction swap_from___b1: +Succesful ASM optimization Pass5RedundantLabelElimination +Removing instruction print_from_main: +Removing instruction __b1: +Removing instruction __b2: +Removing instruction swap_from___b2: +Removing instruction __b3: +Removing instruction swap_from___b3: +Removing instruction __breturn: +Removing instruction __breturn: +Removing instruction print_from_swap: +Removing instruction __breturn: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +__constant char buffer1[$a] = { fill( $a, 0) } +__constant char buffer2[$a] = { fill( $a, 0) } +__constant char hextab[] = "0123456789abcdef"z +void main() +char *newbuffer +char *newbuffer#0 // newbuffer zp[2]:10 2.375 +char *newbuffer#22 // newbuffer_1 zp[2]:8 11.0 +char *newbuffer#23 // newbuffer zp[2]:10 4.0 +char *newbuffer#24 // newbuffer zp[2]:10 4.0 +char *newbuffer#9 // newbuffer_1 zp[2]:8 2.75 +char *oldbuffer +char *oldbuffer#22 // oldbuffer zp[2]:4 22.0 +char *oldbuffer#9 // oldbuffer zp[2]:4 1.5714285714285714 +void print() +char print::$0 // reg byte a 202.0 +char print::$1 // reg byte a 202.0 +char print::$2 // reg byte a 202.0 +char print::$3 // reg byte a 202.0 +char print::$4 // reg byte a 202.0 +char print::$5 // reg byte a 202.0 +char *screen +char *screen#0 // screen zp[2]:2 7.0 +char *screen#12 // screen zp[2]:2 41.5 +void swap() +char *tempbuffer +char *tempbuffer#0 // tempbuffer zp[2]:12 3.0 +char *tempbuffer#21 // tempbuffer_1 zp[2]:6 7.333333333333333 +char *tempbuffer#22 // tempbuffer zp[2]:12 2.0 +char *tempbuffer#23 // tempbuffer zp[2]:12 2.0 +char *tempbuffer#9 // tempbuffer_1 zp[2]:6 11.0 + +zp[2]:6 [ tempbuffer#9 tempbuffer#21 ] +zp[2]:2 [ screen#12 screen#0 ] +zp[2]:8 [ newbuffer#9 newbuffer#22 ] +zp[2]:4 [ oldbuffer#9 oldbuffer#22 ] +zp[2]:12 [ tempbuffer#0 tempbuffer#22 tempbuffer#23 ] +zp[2]:10 [ newbuffer#0 newbuffer#23 newbuffer#24 ] +reg byte a [ print::$3 ] +reg byte a [ print::$0 ] +reg byte a [ print::$4 ] +reg byte a [ print::$1 ] +reg byte a [ print::$5 ] +reg byte a [ print::$2 ] + + +FINAL ASSEMBLER +Score: 264 + + // File Comments + // Upstart + // Commodore 64 PRG executable file +.file [name="pointer-swap.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + // Global Constants & labels + .label screen = 2 + .label tempbuffer = $c + .label newbuffer = $a + .label tempbuffer_1 = 6 + .label newbuffer_1 = 8 + .label oldbuffer = 4 +.segment Code + // main +main: { + // print() + // [1] call print + // [11] phi from main to print [phi:main->print] + // [11] phi oldbuffer#9 = buffer2 [phi:main->print#0] -- pbuz1=pbuc1 + lda #buffer2 + sta.z oldbuffer+1 + // [11] phi newbuffer#9 = buffer1 [phi:main->print#1] -- pbuz1=pbuc1 + lda #buffer1 + sta.z newbuffer_1+1 + // [11] phi screen#12 = (char *) 1024 [phi:main->print#2] -- pbuz1=pbuc1 + lda #<$400 + sta.z screen + lda #>$400 + sta.z screen+1 + // [11] phi tempbuffer#9 = (char *) 0 [phi:main->print#3] -- pbuz1=pbuc1 + lda #<0 + sta.z tempbuffer_1 + sta.z tempbuffer_1+1 + jsr print + // [2] phi from main to main::@1 [phi:main->main::@1] + // main::@1 + // swap() + // [3] call swap + // [23] phi from main::@1 to swap [phi:main::@1->swap] + // [23] phi newbuffer#0 = buffer2 [phi:main::@1->swap#0] -- pbuz1=pbuc1 + lda #buffer2 + sta.z newbuffer+1 + // [23] phi tempbuffer#0 = buffer1 [phi:main::@1->swap#1] -- pbuz1=pbuc1 + lda #buffer1 + sta.z tempbuffer+1 + jsr swap + // main::@2 + // [4] tempbuffer#22 = newbuffer#0 -- pbuz1=pbuz2 + lda.z newbuffer + sta.z tempbuffer + lda.z newbuffer+1 + sta.z tempbuffer+1 + // [5] newbuffer#23 = tempbuffer#0 -- pbuz1=pbuz2 + lda.z tempbuffer + sta.z newbuffer + lda.z tempbuffer+1 + sta.z newbuffer+1 + // swap() + // [6] call swap + // [23] phi from main::@2 to swap [phi:main::@2->swap] + // [23] phi newbuffer#0 = newbuffer#23 [phi:main::@2->swap#0] -- register_copy + // [23] phi tempbuffer#0 = tempbuffer#22 [phi:main::@2->swap#1] -- register_copy + jsr swap + // main::@3 + // [7] tempbuffer#23 = newbuffer#0 -- pbuz1=pbuz2 + lda.z newbuffer + sta.z tempbuffer + lda.z newbuffer+1 + sta.z tempbuffer+1 + // [8] newbuffer#24 = tempbuffer#0 -- pbuz1=pbuz2 + lda.z tempbuffer + sta.z newbuffer + lda.z tempbuffer+1 + sta.z newbuffer+1 + // swap() + // [9] call swap + // [23] phi from main::@3 to swap [phi:main::@3->swap] + // [23] phi newbuffer#0 = newbuffer#24 [phi:main::@3->swap#0] -- register_copy + // [23] phi tempbuffer#0 = tempbuffer#23 [phi:main::@3->swap#1] -- register_copy + jsr swap + // main::@return + // } + // [10] return + rts +} + // print +print: { + // (char)tempbuffer&0x0f + // [12] print::$3 = (char)tempbuffer#9 -- vbuaa=_byte_pbuz1 + lda.z tempbuffer_1 + // [13] print::$0 = print::$3 & $f -- vbuaa=vbuaa_band_vbuc1 + and #$f + // screen[0] = hextab[(char)tempbuffer&0x0f] + // [14] *screen#12 = hextab[print::$0] -- _deref_pbuz1=pbuc1_derefidx_vbuaa + tay + lda hextab,y + ldy #0 + sta (screen),y + // (char)newbuffer&0x0f + // [15] print::$4 = (char)newbuffer#9 -- vbuaa=_byte_pbuz1 + lda.z newbuffer_1 + // [16] print::$1 = print::$4 & $f -- vbuaa=vbuaa_band_vbuc1 + and #$f + // screen[2] = hextab[(char)newbuffer&0x0f] + // [17] screen#12[2] = hextab[print::$1] -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuaa + tay + lda hextab,y + ldy #2 + sta (screen),y + // (char)oldbuffer&0x0f + // [18] print::$5 = (char)oldbuffer#9 -- vbuaa=_byte_pbuz1 + lda.z oldbuffer + // [19] print::$2 = print::$5 & $f -- vbuaa=vbuaa_band_vbuc1 + and #$f + // screen[4] = hextab[(char)oldbuffer&0x0f] + // [20] screen#12[4] = hextab[print::$2] -- pbuz1_derefidx_vbuc1=pbuc2_derefidx_vbuaa + tay + lda hextab,y + ldy #4 + sta (screen),y + // screen += 40 + // [21] screen#0 = screen#12 + $28 -- pbuz1=pbuz1_plus_vbuc1 + lda #$28 + clc + adc.z screen + sta.z screen + bcc !+ + inc.z screen+1 + !: + // print::@return + // } + // [22] return + rts +} + // swap +swap: { + // [24] tempbuffer#21 = tempbuffer#0 -- pbuz1=pbuz2 + lda.z tempbuffer + sta.z tempbuffer_1 + lda.z tempbuffer+1 + sta.z tempbuffer_1+1 + // [25] newbuffer#22 = newbuffer#0 -- pbuz1=pbuz2 + lda.z newbuffer + sta.z newbuffer_1 + lda.z newbuffer+1 + sta.z newbuffer_1+1 + // [26] oldbuffer#22 = tempbuffer#0 -- pbuz1=pbuz2 + lda.z tempbuffer + sta.z oldbuffer + lda.z tempbuffer+1 + sta.z oldbuffer+1 + // print() + // [27] call print + // [11] phi from swap to print [phi:swap->print] + // [11] phi oldbuffer#9 = oldbuffer#22 [phi:swap->print#0] -- register_copy + // [11] phi newbuffer#9 = newbuffer#22 [phi:swap->print#1] -- register_copy + // [11] phi screen#12 = screen#0 [phi:swap->print#2] -- register_copy + // [11] phi tempbuffer#9 = tempbuffer#21 [phi:swap->print#3] -- register_copy + jsr print + // swap::@return + // } + // [28] return + rts +} + // File Data +.segment Data + buffer1: .fill $a, 0 + buffer2: .fill $a, 0 + hextab: .text "0123456789abcdef" + diff --git a/src/test/ref/pointer-swap.sym b/src/test/ref/pointer-swap.sym new file mode 100644 index 000000000..43845fdd3 --- /dev/null +++ b/src/test/ref/pointer-swap.sym @@ -0,0 +1,43 @@ +__constant char buffer1[$a] = { fill( $a, 0) } +__constant char buffer2[$a] = { fill( $a, 0) } +__constant char hextab[] = "0123456789abcdef"z +void main() +char *newbuffer +char *newbuffer#0 // newbuffer zp[2]:10 2.375 +char *newbuffer#22 // newbuffer_1 zp[2]:8 11.0 +char *newbuffer#23 // newbuffer zp[2]:10 4.0 +char *newbuffer#24 // newbuffer zp[2]:10 4.0 +char *newbuffer#9 // newbuffer_1 zp[2]:8 2.75 +char *oldbuffer +char *oldbuffer#22 // oldbuffer zp[2]:4 22.0 +char *oldbuffer#9 // oldbuffer zp[2]:4 1.5714285714285714 +void print() +char print::$0 // reg byte a 202.0 +char print::$1 // reg byte a 202.0 +char print::$2 // reg byte a 202.0 +char print::$3 // reg byte a 202.0 +char print::$4 // reg byte a 202.0 +char print::$5 // reg byte a 202.0 +char *screen +char *screen#0 // screen zp[2]:2 7.0 +char *screen#12 // screen zp[2]:2 41.5 +void swap() +char *tempbuffer +char *tempbuffer#0 // tempbuffer zp[2]:12 3.0 +char *tempbuffer#21 // tempbuffer_1 zp[2]:6 7.333333333333333 +char *tempbuffer#22 // tempbuffer zp[2]:12 2.0 +char *tempbuffer#23 // tempbuffer zp[2]:12 2.0 +char *tempbuffer#9 // tempbuffer_1 zp[2]:6 11.0 + +zp[2]:6 [ tempbuffer#9 tempbuffer#21 ] +zp[2]:2 [ screen#12 screen#0 ] +zp[2]:8 [ newbuffer#9 newbuffer#22 ] +zp[2]:4 [ oldbuffer#9 oldbuffer#22 ] +zp[2]:12 [ tempbuffer#0 tempbuffer#22 tempbuffer#23 ] +zp[2]:10 [ newbuffer#0 newbuffer#23 newbuffer#24 ] +reg byte a [ print::$3 ] +reg byte a [ print::$0 ] +reg byte a [ print::$4 ] +reg byte a [ print::$1 ] +reg byte a [ print::$5 ] +reg byte a [ print::$2 ]