diff --git a/src/main/fragment/vbuaa=vbuaa_ror_vbuxx.asm b/src/main/fragment/vbuaa=vbuaa_ror_vbuxx.asm index a739505a2..b81694383 100644 --- a/src/main/fragment/vbuaa=vbuaa_ror_vbuxx.asm +++ b/src/main/fragment/vbuaa=vbuaa_ror_vbuxx.asm @@ -1,4 +1,4 @@ -ldx {z1} +cpx #0 beq !e+ !: ror diff --git a/src/main/fragment/vwuz1=vbuaa_bor_vwuz2.asm b/src/main/fragment/vwuz1=vbuaa_bor_vwuz2.asm index 6f38db42e..2b89e33d9 100644 --- a/src/main/fragment/vwuz1=vbuaa_bor_vwuz2.asm +++ b/src/main/fragment/vwuz1=vbuaa_bor_vwuz2.asm @@ -1,6 +1,4 @@ -sta $ff -lda {z2} -ora $ff +ora {z2} sta {z1} lda {z2}+1 sta {z1}+1 diff --git a/src/main/fragment/vwuz1=vwuz1_bor_vwsz2.asm b/src/main/fragment/vwuz1=vwuz1_bor_vwsz2.asm index 58bebcaaf..346a0cd75 100644 --- a/src/main/fragment/vwuz1=vwuz1_bor_vwsz2.asm +++ b/src/main/fragment/vwuz1=vwuz1_bor_vwsz2.asm @@ -1,6 +1,6 @@ -lda {z2} -eor {z1} +lda {z1} +ora {z2} sta {z1} -lda {z2}+1 -eor {z1}+1 +lda {z1}+1 +ora {z2}+1 sta {z1}+1 diff --git a/src/main/fragment/vwuz1=vwuz1_bxor_vwsc1.asm b/src/main/fragment/vwuz1=vwuz1_bxor_vwsc1.asm index 0f9ec2420..593d85fd6 100644 --- a/src/main/fragment/vwuz1=vwuz1_bxor_vwsc1.asm +++ b/src/main/fragment/vwuz1=vwuz1_bxor_vwsc1.asm @@ -2,5 +2,5 @@ lda #<{c1} eor {z1} sta {z1} lda #>{c1} -eor {z1} -sta {z1} +eor {z1}+1 +sta {z1}+1 diff --git a/src/main/fragment/vwuz1_ge_vbuc1_then_la1.asm b/src/main/fragment/vwuz1_ge_vbuc1_then_la1.asm index c0125d3ff..aa889e3d3 100644 --- a/src/main/fragment/vwuz1_ge_vbuc1_then_la1.asm +++ b/src/main/fragment/vwuz1_ge_vbuc1_then_la1.asm @@ -1,8 +1,6 @@ lda {z1}+1 bne {la1} -clc lda {z1} -cmp {c1} -bcc !+ +cmp #{c1} bcs {la1} !: diff --git a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java index 45db695a0..4fd029d99 100644 --- a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java +++ b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java @@ -36,6 +36,11 @@ public class TestPrograms { public TestPrograms() { } + @Test + public void testAtariTempest() throws IOException, URISyntaxException { + compileAndCompare("complex/ataritempest/ataritempest"); + } + @Test public void testXMega65() throws IOException, URISyntaxException { compileAndCompare("complex/xmega65/xmega65"); @@ -2173,7 +2178,7 @@ public class TestPrograms { @Test public void testVarRegisterNoarg() throws IOException, URISyntaxException { - compileAndCompare("var-register-noarg", log()); + compileAndCompare("var-register-noarg"); } @Test diff --git a/src/test/kc/complex/ataritempest/ataritempest.kc b/src/test/kc/complex/ataritempest/ataritempest.kc index 25b6f6d4b..a98e62da1 100644 --- a/src/test/kc/complex/ataritempest/ataritempest.kc +++ b/src/test/kc/complex/ataritempest/ataritempest.kc @@ -1,39 +1,22 @@ -// XMega65 Kernal Development Template +// Atari Tempest ROM Development Template // Each function of the kernal is a no-args function // The functions are placed in the SYSCALLS table surrounded by JMP and NOP -#pragma link("xmega65.ld") +#pragma link("ataritempest.ld") + +const char* BGCOL = 0xc01a; void main() { - char i=0; - // Call SYSCALL functions one at a time - while(true) { - void()* fsyscall = FSYSCALLS[i*2]; - (*fsyscall)(); - if(++i==2) i=0; - } -} - -void fn1() { - const char* BORDERCOL = $d020; - (*BORDERCOL)++; -} - -void fn2() { - const char* BGCOL = $d021; (*BGCOL)++; } -#pragma data_seg(Syscall) +void entryPoint() { + (*BGCOL)++; +} -const char JMP = 0x4c; -const char NOP = 0xea; +void interrupt(HARDWARE_ALL) nmiHandler() { + (*BGCOL)++; +} -export char[] SYSCALLS = { - JMP, <&fn1, >&fn1, NOP, - JMP, <&fn2, >&fn2, NOP - }; - -export align(0x100) char[] SYSCALL_RESET = { JMP, <&main, >&main, NOP }; - -const void()** FSYSCALLS = (void()**)(SYSCALLS+1); +#pragma data_seg(Vectors) +export const void()*[] VECTORS = { &nmiHandler, &entryPoint }; diff --git a/src/test/kc/complex/ataritempest/ataritempest.ld b/src/test/kc/complex/ataritempest/ataritempest.ld index dd0d32214..62d49e2c4 100644 --- a/src/test/kc/complex/ataritempest/ataritempest.ld +++ b/src/test/kc/complex/ataritempest/ataritempest.ld @@ -1,7 +1,5 @@ -.file [name="%O.bin", type="bin", segments="XMega65Bin"] -.segmentdef XMega65Bin [segments="Syscall, Code, Data, Stack, Zeropage"] -.segmentdef Syscall [start=$8000, max=$81ff] -.segmentdef Code [start=$8200, min=$8200, max=$bdff] -.segmentdef Data [startAfter="Code", min=$8200, max=$bdff] -.segmentdef Stack [min=$be00, max=$beff, fill] -.segmentdef Zeropage [min=$bf00, max=$bfff, fill] \ No newline at end of file +.file [name="%O.bin", type="bin", segments="AtariTempest"] +.segmentdef AtariTempest [segments="Code, Data, Vectors"] +.segmentdef Code [start=$4000, min=$4000, max=$bff9] +.segmentdef Data [startAfter="Code"] +.segmentdef Vectors [start=$bffa, min=$bffa, max=$bfff] \ No newline at end of file diff --git a/src/test/kc/sandbox.kc b/src/test/kc/sandbox.kc index 670bd8c7d..465787786 100644 --- a/src/test/kc/sandbox.kc +++ b/src/test/kc/sandbox.kc @@ -31,7 +31,7 @@ byte myprintf(byte *dst, byte *str, word w1, word w2, word w3) { byte b, digit; byte[6] buf6; word w; - + kickasm {{ .break }} for (; *str != 0; ++str) { b = *str; if (bFormat != 0) { // "(bFormat)" is the normal way -- not supported -- https://gitlab.com/camelot/kickc/issues/135 diff --git a/src/test/ref/sandbox.asm b/src/test/ref/sandbox.asm index 0654e55c9..114327cce 100644 --- a/src/test/ref/sandbox.asm +++ b/src/test/ref/sandbox.asm @@ -517,22 +517,18 @@ utoa: { cpx #1 beq b7 lda.z value+1 - cmp #>$64 - bcc !+ bne b7 lda.z value - cmp #<$64 + cmp #$64 bcs b7 !: b3: cpx #1 beq b8 lda.z value+1 - cmp #>$a - bcc !+ bne b8 lda.z value - cmp #<$a + cmp #$a bcs b8 !: b4: diff --git a/src/test/ref/sandbox.log b/src/test/ref/sandbox.log index 618643718..c5d7f7ccb 100644 --- a/src/test/ref/sandbox.log +++ b/src/test/ref/sandbox.log @@ -5576,13 +5576,11 @@ utoa: { jmp b15 // utoa::@15 b15: - // [165] if((word) utoa::value#11>=(byte) $64) goto utoa::@7 -- vwuz1_ge_vwuc1_then_la1 + // [165] if((word) utoa::value#11>=(byte) $64) goto utoa::@7 -- vwuz1_ge_vbuc1_then_la1 lda.z value+1 - cmp #>$64 - bcc !+ bne b7 lda.z value - cmp #<$64 + cmp #$64 bcs b7 !: // [166] phi from utoa::@15 to utoa::@3 [phi:utoa::@15->utoa::@3] @@ -5600,13 +5598,11 @@ utoa: { jmp b16 // utoa::@16 b16: - // [168] if((word) utoa::value#10>=(byte) $a) goto utoa::@8 -- vwuz1_ge_vwuc1_then_la1 + // [168] if((word) utoa::value#10>=(byte) $a) goto utoa::@8 -- vwuz1_ge_vbuc1_then_la1 lda.z value+1 - cmp #>$a - bcc !+ bne b8 lda.z value - cmp #<$a + cmp #$a bcs b8 !: // [169] phi from utoa::@12 utoa::@16 to utoa::@4 [phi:utoa::@12/utoa::@16->utoa::@4] @@ -6276,56 +6272,56 @@ Uplift Scope [utoa] 57.17: zp ZP_WORD:38 [ utoa::value#12 utoa::value#3 utoa::va Uplift Scope [Print] Uplift Scope [] -Uplifting [divr16u] best 469986 combination zp ZP_WORD:8 [ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_WORD:12 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:10 [ divr16u::dividend#2 divr16u::dividend#1 divr16u::dividend#0 ] zp ZP_WORD:68 [ divr16u::return#2 ] -Uplifting [append] best 469986 combination zp ZP_WORD:46 [ append::value#5 append::value#8 append::value#1 append::value#2 append::value#3 append::value#4 append::value#0 ] zp ZP_WORD:42 [ append::dst#4 append::dst#1 append::dst#2 append::dst#3 ] zp ZP_WORD:44 [ append::sub#6 ] zp ZP_WORD:87 [ append::return#10 ] zp ZP_WORD:89 [ append::return#4 ] zp ZP_WORD:91 [ append::return#3 ] zp ZP_WORD:93 [ append::return#2 ] -Uplifting [main] best 469986 combination zp ZP_WORD:6 [ main::v#10 main::v#12 main::v#11 main::v#13 main::v#2 main::v#1 ] zp ZP_WORD:48 [ main::$12 ] zp ZP_WORD:52 [ main::$14 ] zp ZP_WORD:58 [ main::$3 ] zp ZP_WORD:62 [ main::$5 ] zp ZP_WORD:2 [ main::u#15 main::u#3 ] zp ZP_WORD:4 [ main::u#17 main::u#4 ] zp ZP_WORD:50 [ main::$13 ] zp ZP_WORD:60 [ main::$4 ] -Uplifting [div10] best 469986 combination zp ZP_WORD:56 [ div10::return#2 ] zp ZP_WORD:54 [ div10::val#4 ] zp ZP_WORD:111 [ div10::return#0 ] zp ZP_WORD:95 [ div10::$0 ] zp ZP_WORD:99 [ div10::$2 ] zp ZP_WORD:103 [ div10::$3 ] zp ZP_WORD:107 [ div10::$4 ] zp ZP_WORD:109 [ div10::val#3 ] zp ZP_WORD:97 [ div10::val#0 ] zp ZP_WORD:101 [ div10::val#1 ] zp ZP_WORD:105 [ div10::val#2 ] -Uplifting [div16u] best 469986 combination zp ZP_WORD:66 [ div16u::return#2 ] zp ZP_WORD:64 [ div16u::dividend#0 ] zp ZP_WORD:70 [ div16u::return#0 ] -Uplifting [utoa] best 469955 combination zp ZP_WORD:38 [ utoa::value#12 utoa::value#3 utoa::value#10 utoa::value#2 utoa::value#11 utoa::value#6 utoa::value#4 utoa::value#0 utoa::value#1 ] zp ZP_WORD:40 [ utoa::dst#12 utoa::dst#4 utoa::dst#13 utoa::dst#2 utoa::dst#10 utoa::dst#16 utoa::dst#1 ] reg byte x [ utoa::bStarted#7 utoa::bStarted#6 utoa::bStarted#5 ] reg byte a [ utoa::$16 ] reg byte a [ utoa::$17 ] zp ZP_WORD:85 [ utoa::dst#3 ] -Uplifting [Print] best 469955 combination -Uplifting [] best 469955 combination +Uplifting [divr16u] best 469978 combination zp ZP_WORD:8 [ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_WORD:12 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:10 [ divr16u::dividend#2 divr16u::dividend#1 divr16u::dividend#0 ] zp ZP_WORD:68 [ divr16u::return#2 ] +Uplifting [append] best 469978 combination zp ZP_WORD:46 [ append::value#5 append::value#8 append::value#1 append::value#2 append::value#3 append::value#4 append::value#0 ] zp ZP_WORD:42 [ append::dst#4 append::dst#1 append::dst#2 append::dst#3 ] zp ZP_WORD:44 [ append::sub#6 ] zp ZP_WORD:87 [ append::return#10 ] zp ZP_WORD:89 [ append::return#4 ] zp ZP_WORD:91 [ append::return#3 ] zp ZP_WORD:93 [ append::return#2 ] +Uplifting [main] best 469978 combination zp ZP_WORD:6 [ main::v#10 main::v#12 main::v#11 main::v#13 main::v#2 main::v#1 ] zp ZP_WORD:48 [ main::$12 ] zp ZP_WORD:52 [ main::$14 ] zp ZP_WORD:58 [ main::$3 ] zp ZP_WORD:62 [ main::$5 ] zp ZP_WORD:2 [ main::u#15 main::u#3 ] zp ZP_WORD:4 [ main::u#17 main::u#4 ] zp ZP_WORD:50 [ main::$13 ] zp ZP_WORD:60 [ main::$4 ] +Uplifting [div10] best 469978 combination zp ZP_WORD:56 [ div10::return#2 ] zp ZP_WORD:54 [ div10::val#4 ] zp ZP_WORD:111 [ div10::return#0 ] zp ZP_WORD:95 [ div10::$0 ] zp ZP_WORD:99 [ div10::$2 ] zp ZP_WORD:103 [ div10::$3 ] zp ZP_WORD:107 [ div10::$4 ] zp ZP_WORD:109 [ div10::val#3 ] zp ZP_WORD:97 [ div10::val#0 ] zp ZP_WORD:101 [ div10::val#1 ] zp ZP_WORD:105 [ div10::val#2 ] +Uplifting [div16u] best 469978 combination zp ZP_WORD:66 [ div16u::return#2 ] zp ZP_WORD:64 [ div16u::dividend#0 ] zp ZP_WORD:70 [ div16u::return#0 ] +Uplifting [utoa] best 469947 combination zp ZP_WORD:38 [ utoa::value#12 utoa::value#3 utoa::value#10 utoa::value#2 utoa::value#11 utoa::value#6 utoa::value#4 utoa::value#0 utoa::value#1 ] zp ZP_WORD:40 [ utoa::dst#12 utoa::dst#4 utoa::dst#13 utoa::dst#2 utoa::dst#10 utoa::dst#16 utoa::dst#1 ] reg byte x [ utoa::bStarted#7 utoa::bStarted#6 utoa::bStarted#5 ] reg byte a [ utoa::$16 ] reg byte a [ utoa::$17 ] zp ZP_WORD:85 [ utoa::dst#3 ] +Uplifting [Print] best 469947 combination +Uplifting [] best 469947 combination Attempting to uplift remaining variables inzp ZP_BYTE:33 [ myprintf::bLen#36 myprintf::bLen#12 myprintf::bLen#10 myprintf::bLen#28 myprintf::bLen#7 myprintf::bLen#3 myprintf::bLen#13 myprintf::bLen#14 myprintf::bLen#1 myprintf::bLen#4 myprintf::bLen#5 myprintf::bLen#6 ] -Uplifting [myprintf] best 469955 combination zp ZP_BYTE:33 [ myprintf::bLen#36 myprintf::bLen#12 myprintf::bLen#10 myprintf::bLen#28 myprintf::bLen#7 myprintf::bLen#3 myprintf::bLen#13 myprintf::bLen#14 myprintf::bLen#1 myprintf::bLen#4 myprintf::bLen#5 myprintf::bLen#6 ] +Uplifting [myprintf] best 469947 combination zp ZP_BYTE:33 [ myprintf::bLen#36 myprintf::bLen#12 myprintf::bLen#10 myprintf::bLen#28 myprintf::bLen#7 myprintf::bLen#3 myprintf::bLen#13 myprintf::bLen#14 myprintf::bLen#1 myprintf::bLen#4 myprintf::bLen#5 myprintf::bLen#6 ] Attempting to uplift remaining variables inzp ZP_BYTE:32 [ myprintf::bDigits#12 myprintf::bDigits#16 myprintf::bDigits#28 myprintf::bDigits#1 myprintf::bDigits#18 myprintf::bDigits#10 myprintf::bDigits#2 myprintf::bDigits#3 ] -Uplifting [myprintf] best 469955 combination zp ZP_BYTE:32 [ myprintf::bDigits#12 myprintf::bDigits#16 myprintf::bDigits#28 myprintf::bDigits#1 myprintf::bDigits#18 myprintf::bDigits#10 myprintf::bDigits#2 myprintf::bDigits#3 ] +Uplifting [myprintf] best 469947 combination zp ZP_BYTE:32 [ myprintf::bDigits#12 myprintf::bDigits#16 myprintf::bDigits#28 myprintf::bDigits#1 myprintf::bDigits#18 myprintf::bDigits#10 myprintf::bDigits#2 myprintf::bDigits#3 ] Attempting to uplift remaining variables inzp ZP_BYTE:34 [ myprintf::digit#3 myprintf::digit#2 ] -Uplifting [myprintf] best 457955 combination reg byte x [ myprintf::digit#3 myprintf::digit#2 ] +Uplifting [myprintf] best 457947 combination reg byte x [ myprintf::digit#3 myprintf::digit#2 ] Attempting to uplift remaining variables inzp ZP_BYTE:31 [ myprintf::b#17 myprintf::b#5 ] -Uplifting [myprintf] best 457955 combination zp ZP_BYTE:31 [ myprintf::b#17 myprintf::b#5 ] +Uplifting [myprintf] best 457947 combination zp ZP_BYTE:31 [ myprintf::b#17 myprintf::b#5 ] Attempting to uplift remaining variables inzp ZP_BYTE:35 [ myprintf::$43 ] -Uplifting [myprintf] best 448955 combination reg byte a [ myprintf::$43 ] +Uplifting [myprintf] best 448947 combination reg byte a [ myprintf::$43 ] Attempting to uplift remaining variables inzp ZP_BYTE:36 [ myprintf::b#25 myprintf::b#1 myprintf::b#6 ] -Uplifting [myprintf] best 445205 combination reg byte x [ myprintf::b#25 myprintf::b#1 myprintf::b#6 ] +Uplifting [myprintf] best 445197 combination reg byte x [ myprintf::b#25 myprintf::b#1 myprintf::b#6 ] Attempting to uplift remaining variables inzp ZP_BYTE:24 [ myprintf::bArg#10 myprintf::bArg#1 ] -Uplifting [myprintf] best 445205 combination zp ZP_BYTE:24 [ myprintf::bArg#10 myprintf::bArg#1 ] +Uplifting [myprintf] best 445197 combination zp ZP_BYTE:24 [ myprintf::bArg#10 myprintf::bArg#1 ] Attempting to uplift remaining variables inzp ZP_BYTE:74 [ myprintf::$18 ] -Uplifting [myprintf] best 444605 combination reg byte a [ myprintf::$18 ] +Uplifting [myprintf] best 444597 combination reg byte a [ myprintf::$18 ] Attempting to uplift remaining variables inzp ZP_BYTE:75 [ myprintf::$19 ] -Uplifting [myprintf] best 444005 combination reg byte a [ myprintf::$19 ] +Uplifting [myprintf] best 443997 combination reg byte a [ myprintf::$19 ] Attempting to uplift remaining variables inzp ZP_BYTE:77 [ myprintf::$25 ] -Uplifting [myprintf] best 443405 combination reg byte a [ myprintf::$25 ] +Uplifting [myprintf] best 443397 combination reg byte a [ myprintf::$25 ] Attempting to uplift remaining variables inzp ZP_BYTE:79 [ myprintf::$26 ] -Uplifting [myprintf] best 442805 combination reg byte a [ myprintf::$26 ] +Uplifting [myprintf] best 442797 combination reg byte a [ myprintf::$26 ] Attempting to uplift remaining variables inzp ZP_BYTE:81 [ myprintf::$32 ] -Uplifting [myprintf] best 442205 combination reg byte a [ myprintf::$32 ] +Uplifting [myprintf] best 442197 combination reg byte a [ myprintf::$32 ] Attempting to uplift remaining variables inzp ZP_BYTE:82 [ myprintf::$50 ] -Uplifting [myprintf] best 441605 combination reg byte a [ myprintf::$50 ] +Uplifting [myprintf] best 441597 combination reg byte a [ myprintf::$50 ] Attempting to uplift remaining variables inzp ZP_BYTE:29 [ myprintf::$24 ] -Uplifting [myprintf] best 440705 combination reg byte a [ myprintf::$24 ] +Uplifting [myprintf] best 440697 combination reg byte a [ myprintf::$24 ] Attempting to uplift remaining variables inzp ZP_BYTE:30 [ myprintf::$31 ] -Uplifting [myprintf] best 439805 combination reg byte a [ myprintf::$31 ] +Uplifting [myprintf] best 439797 combination reg byte a [ myprintf::$31 ] Attempting to uplift remaining variables inzp ZP_BYTE:76 [ myprintf::b#15 ] -Uplifting [myprintf] best 439705 combination reg byte x [ myprintf::b#15 ] +Uplifting [myprintf] best 439697 combination reg byte x [ myprintf::b#15 ] Attempting to uplift remaining variables inzp ZP_BYTE:80 [ myprintf::b#16 ] -Uplifting [myprintf] best 439605 combination reg byte x [ myprintf::b#16 ] +Uplifting [myprintf] best 439597 combination reg byte x [ myprintf::b#16 ] Attempting to uplift remaining variables inzp ZP_BYTE:23 [ myprintf::bFormat#10 ] -Uplifting [myprintf] best 439605 combination zp ZP_BYTE:23 [ myprintf::bFormat#10 ] +Uplifting [myprintf] best 439597 combination zp ZP_BYTE:23 [ myprintf::bFormat#10 ] Attempting to uplift remaining variables inzp ZP_BYTE:78 [ myprintf::bLen#11 ] -Uplifting [myprintf] best 438705 combination reg byte y [ myprintf::bLen#11 ] +Uplifting [myprintf] best 438697 combination reg byte y [ myprintf::bLen#11 ] Attempting to uplift remaining variables inzp ZP_BYTE:28 [ myprintf::bLeadZero#11 ] -Uplifting [myprintf] best 438705 combination zp ZP_BYTE:28 [ myprintf::bLeadZero#11 ] +Uplifting [myprintf] best 438697 combination zp ZP_BYTE:28 [ myprintf::bLeadZero#11 ] Attempting to uplift remaining variables inzp ZP_BYTE:27 [ myprintf::bTrailing#11 ] -Uplifting [myprintf] best 438705 combination zp ZP_BYTE:27 [ myprintf::bTrailing#11 ] +Uplifting [myprintf] best 438697 combination zp ZP_BYTE:27 [ myprintf::bTrailing#11 ] Coalescing zero page register [ zp ZP_WORD:38 [ utoa::value#12 utoa::value#3 utoa::value#10 utoa::value#2 utoa::value#11 utoa::value#6 utoa::value#4 utoa::value#0 utoa::value#1 ] ] with [ zp ZP_WORD:46 [ append::value#5 append::value#8 append::value#1 append::value#2 append::value#3 append::value#4 append::value#0 ] ] - score: 4 Coalescing zero page register [ zp ZP_WORD:40 [ utoa::dst#12 utoa::dst#4 utoa::dst#13 utoa::dst#2 utoa::dst#10 utoa::dst#16 utoa::dst#1 ] ] with [ zp ZP_WORD:42 [ append::dst#4 append::dst#1 append::dst#2 append::dst#3 ] ] - score: 3 Coalescing zero page register [ zp ZP_WORD:6 [ main::v#10 main::v#12 main::v#11 main::v#13 main::v#2 main::v#1 ] ] with [ zp ZP_WORD:17 [ myprintf::w2#8 myprintf::w2#1 myprintf::w2#0 ] ] - score: 2 @@ -7442,13 +7438,11 @@ utoa: { jmp b15 // utoa::@15 b15: - // [165] if((word) utoa::value#11>=(byte) $64) goto utoa::@7 -- vwuz1_ge_vwuc1_then_la1 + // [165] if((word) utoa::value#11>=(byte) $64) goto utoa::@7 -- vwuz1_ge_vbuc1_then_la1 lda.z value+1 - cmp #>$64 - bcc !+ bne b7 lda.z value - cmp #<$64 + cmp #$64 bcs b7 !: // [166] phi from utoa::@15 to utoa::@3 [phi:utoa::@15->utoa::@3] @@ -7465,13 +7459,11 @@ utoa: { jmp b16 // utoa::@16 b16: - // [168] if((word) utoa::value#10>=(byte) $a) goto utoa::@8 -- vwuz1_ge_vwuc1_then_la1 + // [168] if((word) utoa::value#10>=(byte) $a) goto utoa::@8 -- vwuz1_ge_vbuc1_then_la1 lda.z value+1 - cmp #>$a - bcc !+ bne b8 lda.z value - cmp #<$a + cmp #$a bcs b8 !: // [169] phi from utoa::@12 utoa::@16 to utoa::@4 [phi:utoa::@12/utoa::@16->utoa::@4] @@ -8403,7 +8395,7 @@ zp ZP_WORD:23 [ div10::$3 div10::val#2 myprintf::w3#8 myprintf::w3#1 myprintf::w FINAL ASSEMBLER -Score: 361450 +Score: 361442 // File Comments // Upstart @@ -9409,13 +9401,11 @@ utoa: { cpx #1 beq b7 // utoa::@15 - // [165] if((word) utoa::value#11>=(byte) $64) goto utoa::@7 -- vwuz1_ge_vwuc1_then_la1 + // [165] if((word) utoa::value#11>=(byte) $64) goto utoa::@7 -- vwuz1_ge_vbuc1_then_la1 lda.z value+1 - cmp #>$64 - bcc !+ bne b7 lda.z value - cmp #<$64 + cmp #$64 bcs b7 !: // [166] phi from utoa::@15 to utoa::@3 [phi:utoa::@15->utoa::@3] @@ -9429,13 +9419,11 @@ utoa: { cpx #1 beq b8 // utoa::@16 - // [168] if((word) utoa::value#10>=(byte) $a) goto utoa::@8 -- vwuz1_ge_vwuc1_then_la1 + // [168] if((word) utoa::value#10>=(byte) $a) goto utoa::@8 -- vwuz1_ge_vbuc1_then_la1 lda.z value+1 - cmp #>$a - bcc !+ bne b8 lda.z value - cmp #<$a + cmp #$a bcs b8 !: // [169] phi from utoa::@12 utoa::@16 to utoa::@4 [phi:utoa::@12/utoa::@16->utoa::@4]